§
    õŽ’jîÓ ã                  óˆ  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+Z,ddl-m.Z. dd	l/m0Z0m1Z1m2Z2m3Z3 dd
l4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; ej<        rddl=m>Z> ddl8m?Z?m@Z@mAZA  e"jB        ¦   «           ejC        d¦  «        ZDdzd„ZE G d„ de¦  «        ZFdeF_G         G d„ de¦  «        ZHdeH_G         G d„ d¦  «        ZI G d„ de¦  «        ZJ G d„ de¦  «        ZK G d„ dejL        ¦  «        ZM G d „ d!eMejN        ¬"¦  «        ZO G d#„ d$eO¦  «        ZP G d%„ d&eO¦  «        ZQ G d'„ d(eQejN        ¬"¦  «        ZR G d)„ d*eR¦  «        ZS G d+„ d,eR¦  «        ZT G d-„ d.eQ¦  «        ZU G d/„ d0eU¦  «        ZVd1ZWd2ZX G d3„ d4¦  «        ZY G d5„ d6eY¦  «        ZZ G d7„ d8eY¦  «        Z[ G d9„ d:e[¦  «        Z\ G d;„ d<eY¦  «        Z] G d=„ d>eY¦  «        Z^ G d?„ d@¦  «        Z_ G dA„ dBe_¦  «        Z` G dC„ dDe`¦  «        Za G dE„ dFe`¦  «        Zb G dG„ dHe_¦  «        Zc G dI„ dJec¦  «        Zd G dK„ dLe`¦  «        Ze G dM„ dNee¦  «        Zf G dO„ dPee¦  «        Zg G dQ„ dRe`¦  «        Zh G dS„ dTeh¦  «        Zi G dU„ dVeh¦  «        Zj G dW„ dXe¦  «        Zk ekdYdZddYd¦  «         ekdYdZd[dYd¦  «         ekdYdZd\dYd¦  «         ekdYdYddZd¦  «         ekdYdYddZd[¦  «         ekdYdYddZd\¦  «         ekdYdYddYd¦  «         ekdYdZdd]d¦  «        d^œek_l         G d_„ d`e_¦  «        Zm G da„ dbef¦  «        Zn G dc„ ddeg¦  «        Zo G de„ dfe_¦  «        Zp G dg„ dhef¦  «        Zq G di„ djef¦  «        Zrd{d|do„Zsd}dr„Zt G ds„ dt¦  «        Zud~dw„Zv G dx„ dy¦  «        ZwdS )z.
Implementation details for :mod:`.mathtext`.
é    )ÚannotationsN)Ú
NamedTuple)ÚNDArray)ÚEmptyÚForwardÚLiteralÚGroupÚNotAnyÚ	OneOrMoreÚOptionalÚParseBaseExceptionÚParseExpressionÚParseFatalExceptionÚParserElementÚParseResultsÚQuotedStringÚRegexÚ	StringEndÚ
ZeroOrMoreÚpyparsing_commonÚnested_exprÚone_ofé   )Úcbook)Úlatex_to_bakomaÚstix_glyph_fixesÚstix_virtual_fontsÚtex2uni)ÚFontPropertiesÚfindfontÚget_font)ÚFT2FontÚKerningÚ	LoadFlags)ÚIterable)ÚCharacterCodeTypeÚGlyphÚGlyphIndexTypezmatplotlib.mathtextÚsymbolÚstrÚreturnr&   c                óÎ   — 	 t          | ¦  «        S # t          $ r Y nw xY w	 t          |                      d¦  «                 S # t          $ r}t          | ›d�¦  «        |‚d}~ww xY w)zç
    Return the integer index (from the Unicode table) of *symbol*.

    Parameters
    ----------
    symbol : str
        A single (Unicode) character, a TeX command (e.g. r'\pi') or a Type1
        symbol name (e.g. 'phi').
    ú\z5 is not a valid Unicode character or TeX/Type1 symbolN)ÚordÚ	TypeErrorr   ÚstripÚKeyErrorÚ
ValueError)r)   Úerrs     úBC:\Projects\DSCons\.venv\Lib\site-packages\matplotlib\_mathtext.pyÚget_unicode_indexr5   4   s�   € ðÝ�6‰{Œ{ÐøÝð ð ð ØˆðøøøðÝ�v—|’| DÑ)Ô)Ô*Ð*øÝð ð ð ÝØÐNÐNÐNñô àð	øøøøðøøøs#   ‚ ‘
�¢A Á
A$ÁAÁA$c                  óF   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
S )ÚVectorParsea  
    The namedtuple type returned by ``MathTextParser("path").parse(...)``.

    Attributes
    ----------
    width, height, depth : float
        The global metrics.
    glyphs : list
        The glyphs including their positions.
    rect : list
        The list of rectangles.
    ÚfloatÚwidthÚheightÚdepthzLlist[tuple[FT2Font, float, CharacterCodeType, GlyphIndexType, float, float]]Úglyphsz'list[tuple[float, float, float, float]]ÚrectsN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    r4   r7   r7   J   sQ   € € € € € € ðð ð €L€L�LØ€M€M�MØ€L€L�LØXÐXÐXÑXØ2Ð2Ð2Ñ2Ð2Ð2rE   r7   c                  óP   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded	<   d
S )ÚRasterParsea  
    The namedtuple type returned by ``MathTextParser("agg").parse(...)``.

    Attributes
    ----------
    ox, oy : float
        The offsets are always zero.
    width, height, depth : float
        The global metrics.
    image : 2D array of uint8
        A raster image.
    r8   ÚoxÚoyr9   r:   r;   zNDArray[np.uint8]ÚimageNr>   rD   rE   r4   rG   rG   `   sW   € € € € € € ðð ð €I€I�IØ€I€I�IØ€L€L�LØ€M€M�MØ€L€L�LØÐÐÑÐÐrE   rG   c                  ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )ÚOutputzÒ
    Result of `ship`\ping a box: lists of positioned glyphs and rectangles.

    This class is not exposed to end users, but converted to a `VectorParse` or
    a `RasterParse` by `.MathTextParser.parse`.
    ÚboxÚBoxc                ó0   — || _         g | _        g | _        d S ©N)rM   r<   r=   )ÚselfrM   s     r4   Ú__init__zOutput.__init__   s   € ØˆŒØ;=ˆŒØ>@ˆŒ
ˆ
ˆ
rE   r+   r7   c                óú   ‡— t          t          j        | j        j        | j        j        | j        j        g¦  «        \  }Š}ˆfd„| j        D ¦   «         }ˆfd„| j        D ¦   «         }t          |‰|z   |||¦  «        S )Nc           	     óf   •— g | ]-\  }}}|j         |j        |j        |j        |‰|z
  |j        z   f‘Œ.S rD   )ÚfontÚfontsizeÚnumÚglyph_indexÚoffset)Ú.0rH   rI   ÚinfoÚhs       €r4   ú
<listcomp>z$Output.to_vector.<locals>.<listcomp>‡   sS   ø€ ð /ð /ð /á�"�b˜$ð Œy˜$œ-¨¬°4Ô3CØ�1�r‘6˜DœKÑ'ð)ð /ð /ð /rE   c                ó2   •— g | ]\  }}}}|‰||z   z
  ||f‘ŒS rD   rD   )rZ   ÚbxÚbyÚbwÚbhr\   s        €r4   r]   z$Output.to_vector.<locals>.<listcomp>Š   sB   ø€ ð 0ð 0ð 0Ù �"�b˜"˜bð �1˜˜R™‘= " bÐ)ð 0ð 0ð 0rE   )
ÚmapÚnpÚceilrM   r9   r:   r;   r<   r=   r7   )rQ   ÚwÚdÚgsÚrsr\   s        @r4   Ú	to_vectorzOutput.to_vector„   s¤   ø€ ÝÝŒG�d”h”n d¤h¤o°t´x´~ÐFñHô H‰ˆˆ1ˆað/ð /ð /ð /à"&¤+ð/ñ /ô /ˆð0ð 0ð 0ð 0Ø$(¤Jð0ñ 0ô 0ˆõ ˜1˜a !™e Q¨¨BÑ/Ô/Ð/rE   ÚantialiasedÚboolrG   c          	     ó
  — t          g d„ | j        D ¦   «         ¢d„ | j        D ¦   «         ¢d‘¦  «        dz
  }t          g d„ | j        D ¦   «         ¢d„ | j        D ¦   «         ¢d‘¦  «        dz
  }t          g d„ | j        D ¦   «         ¢d„ | j        D ¦   «         ¢d‘¦  «        dz   }t          g d	„ | j        D ¦   «         ¢d
„ | j        D ¦   «         ¢d‘¦  «        dz   }||z
  }||z
  | j        j        z
  }||z
  | j        j        z
  }t          j        t          j
        |t          |d¦  «        z   ¦  «        t          j
        |¦  «        ft          j        ¦  «        }	t          | j        | | f¦  «        }
|
j        D ]Q\  }}}|j                             |	t          |¦  «        t          ||j        j        z
  ¦  «        |j        |¬¦  «         ŒR|
j        D ]œ\  }}}}t          t          |¦  «        dz
  d¦  «        }|dk    r!||dz  z   }t          ||dz   dz  z
  ¦  «        }nt          |¦  «        }t          j        |¦  «        }t          j
        ||z   ¦  «        }d|	|||z   dz   …||dz   …f<   Œ�t)          dd|||z   ||	¦  «        S )Nc                ó4   — g | ]\  }}}||j         j        z   ‘ŒS rD   )ÚmetricsÚxmin©rZ   rH   rI   r[   s       r4   r]   z$Output.to_raster.<locals>.<listcomp>’   ó(   € ÐMÐMÐM±°°R¸�b˜4œ<Ô,Ñ,ÐMÐMÐMrE   c                ó   — g | ]	\  }}}}|‘Œ
S rD   rD   ©rZ   ÚxÚyrf   r\   s        r4   r]   z$Output.to_raster.<locals>.<listcomp>“   ó    € Ð5Ð5Ð5™J˜A˜q ! Q�aÐ5Ð5Ð5rE   r   r   c                ó4   — g | ]\  }}}||j         j        z
  ‘ŒS rD   )ro   Úymaxrq   s       r4   r]   z$Output.to_raster.<locals>.<listcomp>”   rr   rE   c                ó   — g | ]	\  }}}}|‘Œ
S rD   rD   rt   s        r4   r]   z$Output.to_raster.<locals>.<listcomp>•   rw   rE   c                ó4   — g | ]\  }}}||j         j        z   ‘ŒS rD   )ro   Úxmaxrq   s       r4   r]   z$Output.to_raster.<locals>.<listcomp>–   rr   rE   c                ó"   — g | ]\  }}}}||z   ‘ŒS rD   rD   rt   s        r4   r]   z$Output.to_raster.<locals>.<listcomp>—   ó$   € Ð9Ð9Ð9¡
  1 a¨�a˜!‘eÐ9Ð9Ð9rE   c                ó4   — g | ]\  }}}||j         j        z
  ‘ŒS rD   )ro   Úyminrq   s       r4   r]   z$Output.to_raster.<locals>.<listcomp>˜   rr   rE   c                ó"   — g | ]\  }}}}||z   ‘ŒS rD   rD   rt   s        r4   r]   z$Output.to_raster.<locals>.<listcomp>™   r~   rE   )rk   é   éÿ   )Úminr<   r=   ÚmaxrM   r;   r:   rd   ÚzerosÚmathre   Úuint8ÚshiprU   Údraw_glyph_to_bitmapÚintro   ÚicebergÚglyphÚfloorrG   )rQ   rk   rp   r€   r|   ry   rf   r\   rg   rJ   ÚshiftedrH   rI   r[   ru   rv   ra   rb   r:   ÚcenterÚx1Úx2s                         r4   Ú	to_rasterzOutput.to_raster�   s	  € õ ð :ÐMÐMÀÄÐMÑMÔMð :Ø5Ð5¨$¬*Ð5Ñ5Ô5ð:Ø78ð:ñ ;ô ;Ø=>ñ?ˆåð :ÐMÐMÀÄÐMÑMÔMð :Ø5Ð5¨$¬*Ð5Ñ5Ô5ð:Ø78ð:ñ ;ô ;Ø=>ñ?ˆåð >ÐMÐMÀÄÐMÑMÔMð >Ø9Ð9¨d¬jÐ9Ñ9Ô9ð>Ø;<ð>ñ ?ô ?ØABñCˆåð >ÐMÐMÀÄÐMÑMÔMð >Ø9Ð9¨d¬jÐ9Ñ9Ô9ð>Ø;<ð>ñ ?ô ?ØABñCˆà�4‰KˆØ�4‰K˜$œ(œ.Ñ(ˆØ�4‰K˜$œ(œ/Ñ)ˆÝ”�$œ) A­¨A¨q©	¬	¡MÑ2Ô2µD´I¸a±L´LÐAÅ2Ä8ÑLÔLˆõ �t”x 4 %¨$¨ Ñ0Ô0ˆà#œNð 	)ð 	)‰LˆB��DØŒI×*Ò*Ø•s˜2‘w”w¥ B¨¬Ô)=Ñ$=Ñ >Ô >ÀÄ
Ø'ð +ñ )ô )ð )ð )ð $œMð 		0ð 		0‰LˆAˆq�"�bÝ�˜R™œ 1™ aÑ(Ô(ˆFØ˜Š{ˆ{Ø˜R !™V™�Ý˜ &¨1¡*°Ñ!1Ñ1Ñ2Ô2��å˜‘F”F�Ý”˜A‘”ˆBÝ”˜1˜r™6Ñ"Ô"ˆBØ+/ˆE�!�A�f‘H˜Q‘J�,  2 a¡4 Ð'Ñ(Ð(Ý˜1˜a  A¨¡E¨1¨eÑ4Ô4Ð4rE   N)rM   rN   )r+   r7   )rk   rl   r+   rG   )r?   r@   rA   rB   rR   rj   r“   rD   rE   r4   rL   rL   w   s^   € € € € € ðð ðAð Að Að Að
	0ð 	0ð 	0ð 	0ð$5ð $5ð $5ð $5ð $5ð $5rE   rL   c                  ón   — e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   dS )ÚFontMetricsaa  
    Metrics of a font.

    Attributes
    ----------
    advance : float
        The advance distance (in points) of the glyph.
    height : float
        The height of the glyph in points.
    width : float
        The width of the glyph in points.
    xmin, xmax, ymin, ymax : float
        The ink rectangle of the glyph.
    iceberg : float
        The distance from the baseline to the top of the glyph. (This corresponds to
        TeX's definition of "height".)
    slanted : bool
        Whether the glyph should be considered as "slanted" (currently used for kerning
        sub/superscripts).
    r8   Úadvancer:   r9   rp   r|   r€   ry   rŒ   rl   ÚslantedNr>   rD   rE   r4   r•   r•   ¶   sm   € € € € € € ðð ð( €N€N�NØ€M€M�MØ€L€L�LØ€K€K�KØ€K€K�KØ€K€K�KØ€K€K�KØ€N€N�NØ€M€M�M€M€MrE   r•   c                  ó`   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   dS )ÚFontInfor"   rU   r8   rV   r*   Úpostscript_namer•   ro   r&   rW   r(   rX   r'   r�   rY   N©r?   r@   rA   rC   rD   rE   r4   r™   r™   Ö   sd   € € € € € € Ø€M€M�MØ€O€O�OØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ€L€L�LØ€M€M�M€M€MrE   r™   c                  óz   — e Zd ZdZd3d„Zd4d„Zd5d„Zd6d„Zd7d„Zd8d#„Z	d9d(„Z
d:d)„Zd:d*„Zd:d+„Zd:d,„Zd;d/„Zd<d1„Zd2S )=ÚFontszù
    An abstract base class for a system of fonts to use for mathtext.

    The class must be able to take symbol keys and font file names and
    return the character metrics.  It also delegates to a backend class
    to do the actual drawing.
    Údefault_font_propr   Úload_glyph_flagsr$   c                ó"   — || _         || _        dS )a†  
        Parameters
        ----------
        default_font_prop : `~.font_manager.FontProperties`
            The default non-math font, or the base font for Unicode (generic)
            font rendering.
        load_glyph_flags : `.ft2font.LoadFlags`
            Flags passed to the glyph loader (e.g. ``FT_Load_Glyph`` and
            ``FT_Load_Char`` for FreeType-based fonts).
        N)rž   rŸ   )rQ   rž   rŸ   s      r4   rR   zFonts.__init__ê   s   € ð "3ˆÔØ 0ˆÔÐÐrE   Úfont1r*   Ú
fontclass1Úsym1Ú	fontsize1r8   Úfont2Ú
fontclass2Úsym2Ú	fontsize2Údpir+   c
                ó   — dS )zŸ
        Get the kerning distance for font between *sym1* and *sym2*.

        See `~.Fonts.get_metrics` for a detailed description of the parameters.
        ç        rD   )
rQ   r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   s
             r4   Úget_kernzFonts.get_kernø   s	   € ð ˆrrE   rU   r"   c                ó   — t           ‚rP   ©ÚNotImplementedError)rQ   rU   s     r4   Ú	_get_fontzFonts._get_font  s   € Ý!Ð!rE   Ú
font_classÚsymrV   r™   c                ó   — t           ‚rP   r®   )rQ   rU   r±   r²   rV   r©   s         r4   Ú	_get_infozFonts._get_info  ó   € å!Ð!rE   r•   c                óB   — |                       |||||¦  «        }|j        S )a`  
        Parameters
        ----------
        font : str
            One of the TeX font names: "tt", "it", "rm", "cal", "sf", "bf",
            "default", "regular", "normal", "bb", "frak", "scr".  "default"
            and "regular" are synonyms and use the non-math font.
            "normal" denotes the normal math font.
        font_class : str
            One of the TeX font names (as for *font*), but **not** "bb",
            "frak", or "scr".  This is used to combine two font classes.  The
            only supported combination currently is ``get_metrics("frak", "bf",
            ...)``.
        sym : str
            A symbol in raw TeX form, e.g., "1", "x", or "\sigma".
        fontsize : float
            Font size in points.
        dpi : float
            Rendering dots-per-inch.

        Returns
        -------
        FontMetrics
        )r´   ro   )rQ   rU   r±   r²   rV   r©   r[   s          r4   Úget_metricszFonts.get_metrics	  s%   € ð4 �~Š~˜d J°°X¸sÑCÔCˆØŒ|ÐrE   ÚoutputrL   rH   rI   ÚNonec	                ór   — |                       |||||¦  «        }	|j                             |||	f¦  «         dS )zœ
        At position (*ox*, *oy*), draw the glyph specified by the remaining
        parameters (see `get_metrics` for their detailed description).
        N)r´   r<   Úappend)
rQ   r¸   rH   rI   rU   r±   r²   rV   r©   r[   s
             r4   Úrender_glyphzFonts.render_glyph&  s?   € ð �~Š~˜d J°°X¸sÑCÔCˆØŒ×Ò˜b " d˜^Ñ,Ô,Ð,Ð,Ð,rE   ru   rv   rf   r\   c                óB   — |j                              ||||f¦  «         dS )zM
        Draw a filled rectangle at (*x*, *y*) with size (*w*, *h*).
        N)r=   r»   ©rQ   r¸   ru   rv   rf   r\   s         r4   Úrender_rect_filledzFonts.render_rect_filled/  s(   € ð
 	Œ×Ò˜Q  1 a˜LÑ)Ô)Ð)Ð)Ð)rE   c                ó   — t          ¦   «         ‚)zJ
        Get the axis height for the given *font* and *fontsize*.
        r®   ©rQ   rU   rV   r©   s       r4   Úget_axis_heightzFonts.get_axis_height6  ó   € õ "Ñ#Ô#Ð#rE   c                ó   — t          ¦   «         ‚)zM
        Get the size of a quad for the given *font* and *fontsize*.
        r®   rÁ   s       r4   Úget_quadzFonts.get_quad<  rÃ   rE   c                ó   — t          ¦   «         ‚)zF
        Get the xheight for the given *font* and *fontsize*.
        r®   rÁ   s       r4   Úget_xheightzFonts.get_xheightB  rÃ   rE   c                ó   — t          ¦   «         ‚)z–
        Get the line thickness that matches the given font.  Used as a
        base unit for drawing lines such as in a fraction or radical.
        r®   rÁ   s       r4   Úget_underline_thicknesszFonts.get_underline_thicknessH  s   € õ
 "Ñ#Ô#Ð#rE   Úfontnameúlist[tuple[str, str]]c                ó   — ||fgS )a  
        Override if your font provides multiple sizes of the same
        symbol.  Should return a list of symbols matching *sym* in
        various sizes.  The expression renderer will select the most
        appropriate size for a given situation from this list.
        rD   ©rQ   rÊ   r²   s      r4   Ú!get_sized_alternatives_for_symbolz'Fonts.get_sized_alternatives_for_symbolO  s   € ð ˜3�Ð Ð rE   útype[FontConstantsBase]c                ó   — t           S rP   )ÚFontConstantsBase©rQ   s    r4   Úget_font_constantszFonts.get_font_constantsY  s   € Ý Ð rE   N©rž   r   rŸ   r$   ©r¡   r*   r¢   r*   r£   r*   r¤   r8   r¥   r*   r¦   r*   r§   r*   r¨   r8   r©   r8   r+   r8   ©rU   r*   r+   r"   )rU   r*   r±   r*   r²   r*   rV   r8   r©   r8   r+   r™   )rU   r*   r±   r*   r²   r*   rV   r8   r©   r8   r+   r•   )r¸   rL   rH   r8   rI   r8   rU   r*   r±   r*   r²   r*   rV   r8   r©   r8   r+   r¹   ©r¸   rL   ru   r8   rv   r8   rf   r8   r\   r8   r+   r¹   ©rU   r*   rV   r8   r©   r8   r+   r8   ©rÊ   r*   r²   r*   r+   rË   ©r+   rÏ   )r?   r@   rA   rB   rR   r¬   r°   r´   r·   r¼   r¿   rÂ   rÅ   rÇ   rÉ   rÎ   rÓ   rD   rE   r4   r�   r�   á   s"  € € € € € ðð ð1ð 1ð 1ð 1ðð ð ð ð"ð "ð "ð "ð"ð "ð "ð "ðð ð ð ð:-ð -ð -ð -ð*ð *ð *ð *ð$ð $ð $ð $ð$ð $ð $ð $ð$ð $ð $ð $ð$ð $ð $ð $ð!ð !ð !ð !ð!ð !ð !ð !ð !ð !rE   r�   c                  óp   ‡ — e Zd ZdZd&ˆ fd„Zd'd„Zd(d„Zd)d„Zd*d„Zd+d„Z	d+d„Z
d+d„Zd,d„Zd-ˆ fd%„Zˆ xZS ).ÚTruetypeFontsza
    A generic base class for all font setups that use Truetype fonts
    (through FT2Font).
    rž   r   rŸ   r$   c                ó  •— t          ¦   «                              ||¦  «         t          j        | j        ¦  «        | _        i | _        i | _        t          | j        ¦  «        }t          |¦  «        }|| j        d<   || j        d<   d S )NÚdefaultÚregular)
ÚsuperrR   Ú	functoolsÚcacher´   Ú_fontsÚfontmapr    rž   r!   )rQ   rž   rŸ   ÚfilenameÚdefault_fontÚ	__class__s        €r4   rR   zTruetypeFonts.__init__c  s{   ø€ Ý‰Œ×ÒÐ*Ð,<Ñ=Ô=Ð=å"œ¨¬Ñ8Ô8ˆŒØˆŒØ')ˆŒå˜DÔ2Ñ3Ô3ˆÝ Ñ)Ô)ˆØ!-ˆŒ�IÑØ!-ˆŒ�IÑÐÐrE   rU   r*   r+   r"   c                ót  — | j                              ||¦  «        }| j                             |¦  «        }|€ht          j                             |¦  «        rIt          |¦  «        }|| j        |<   || j        |j        <   || j        |j                             ¦   «         <   t          j
        t          |¦  «        S rP   )rä   Úgetrã   ÚosÚpathÚexistsr!   rš   ÚlowerÚTÚcastr"   )rQ   rU   ÚbasenameÚcached_fonts       r4   r°   zTruetypeFonts._get_fonto  sš   € Ø”<×#Ò# D¨$Ñ/Ô/ˆØ”k—o’o hÑ/Ô/ˆØÐ¥2¤7§>¢>°(Ñ#;Ô#;ÐÝ" 8Ñ,Ô,ˆKØ$/ˆDŒK˜Ñ!Ø7BˆDŒK˜Ô3Ñ4Ø?JˆDŒK˜Ô3×9Ò9Ñ;Ô;Ñ<ÝŒv•g˜{Ñ+Ô+Ð+rE   r�   r'   rV   r8   r©   c                óN   — |j         dk    r|j        dz  dz  |dz  |z  dz  z   S dS )NÚCmex10é@   r‚   é   éH   r«   )rš   r:   )rQ   rU   r�   rV   r©   s        r4   Ú_get_offsetzTruetypeFonts._get_offsety  s:   € àÔ 8Ò+Ð+Ø”L 2Ñ%¨Ñ)¨h°q©j¸3Ñ.>¸rÑ.AÑBÐBØˆrrE   rÊ   r±   r²   ú'tuple[FT2Font, CharacterCodeType, bool]c                ó   — t           ‚rP   r®   )rQ   rÊ   r±   r²   s       r4   Ú
_get_glyphzTruetypeFonts._get_glyph  rµ   rE   r™   c                óÜ  — |                       |||¦  «        \  }}}|                     ||¦  «         |                     |¦  «        }	|                     |	| j        ¬¦  «        }
d„ |
j        D ¦   «         \  }}}}|                      ||
||¦  «        }t          |
j        dz  |
j	        dz  |
j
        dz  ||||z   ||z   |
j        dz  |z   |¬¦	  «	        }t          |||j        |||	|
|¬¦  «        S )N)Úflagsc              3  ó    K  — | ]	}|d z  V — Œ
dS )rô   NrD   )rZ   Úvals     r4   ú	<genexpr>z*TruetypeFonts._get_info.<locals>.<genexpr>‹  s&   è è € Ð!AÐ!A¨s #¨¡(Ð!AÐ!AÐ!AÐ!AÐ!AÐ!ArE   é   rô   )	r–   r:   r9   rp   r|   r€   ry   rŒ   r—   )rU   rV   rš   ro   rW   rX   r�   rY   )rú   Úset_sizeÚget_char_indexÚ
load_glyphrŸ   Úbboxr÷   r•   ÚlinearHoriAdvancer:   r9   ÚhoriBearingYr™   rš   )rQ   rÊ   r±   r²   rV   r©   rU   rW   r—   rX   r�   rp   r€   r|   ry   rY   ro   s                    r4   r´   zTruetypeFonts._get_info„  s"  € à!Ÿ_š_¨X°zÀ3ÑGÔGÑˆˆc�7Ø�Š�h Ñ$Ô$Ð$Ø×)Ò)¨#Ñ.Ô.ˆØ—’ °4Ô3H�ÑIÔIˆà!AÐ!A°e´jÐ!AÑ!AÔ!AÑˆˆd�D˜$Ø×!Ò! $¨¨x¸Ñ=Ô=ˆÝØÔ+¨eÑ3Ø”< "Ñ$Ø”+ Ñ"ØØØ˜‘Ø˜‘àÔ&¨Ñ+¨fÑ4Øð
ñ 
ô 
ˆõ ØØØ Ô0ØØØ#ØØð	
ñ 	
ô 	
ð 		
rE   c                óÎ   — |                       ¦   «         }|j        �|j        |z  |z  dz  S |                      |t          j        d         d||¦  «        }|j        |j        z   dz  S )Nrö   úmathtext.defaultõ   âˆ’r‚   )rÓ   Úaxis_heightr·   ÚmplÚrcParamsry   r€   ©rQ   rÊ   rV   r©   Úconstsro   s         r4   rÂ   zTruetypeFonts.get_axis_height¥  su   € Ø×(Ò(Ñ*Ô*ˆØÔÐ)ØÔ%¨Ñ0°3Ñ6¸Ñ;Ð;ð ×&Ò&Ø�#œ,Ð'9Ô:¸HÀhÐPSñUô UˆGà”L 7¤<Ñ/°1Ñ4Ð4rE   c                ó¸   — |                       ¦   «         }|j        �|j        |z  |z  dz  S |                      |t          j        d         d||¦  «        }|j        S )Nrö   r  Úm)rÓ   Úquadr·   r  r  r–   r  s         r4   rÅ   zTruetypeFonts.get_quad°  sf   € Ø×(Ò(Ñ*Ô*ˆØŒ;Ð"Ø”; Ñ)¨CÑ/°"Ñ4Ð4ð ×&Ò&Ø�#œ,Ð'9Ô:¸CÀÈ3ñPô PˆGà”?Ð"rE   c                ó¸   — |                       ¦   «         }|j        �|j        |z  |z  dz  S |                      |t          j        d         d||¦  «        }|j        S )Nrö   r  ru   )rÓ   Úx_heightr·   r  r  rŒ   r  s         r4   rÇ   zTruetypeFonts.get_xheightº  sf   € Ø×(Ò(Ñ*Ô*ˆØŒ?Ð&Ø”? XÑ-°Ñ3°bÑ8Ð8ð ×&Ò&Ø�#œ,Ð'9Ô:¸CÀÈ3ñPô PˆGà”?Ð"rE   c                ó   — d|z  |z  dz  S )Ng      °?rö   rD   rÁ   s       r4   rÉ   z%TruetypeFonts.get_underline_thicknessÅ  s   € ð ˜hÑ&¨Ñ,°Ñ2Ð2rE   r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   c
                ó<  •— ||k    rm||k    rg|                       |||||	¦  «        }
|                       |||||	¦  «        }|
j        }|                     |
j        |j        t          j        ¦  «        dz  S t          ¦   «                              |||||||||	¦	  «	        S )Nrô   )r´   rU   Úget_kerningrX   r#   ÚDEFAULTrà   r¬   )rQ   r¡   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   Úinfo1Úinfo2rU   rç   s                €r4   r¬   zTruetypeFonts.get_kernË  s²   ø€ ð �EŠ>ˆ>˜i¨9Ò4Ð4Ø—N’N 5¨*°d¸IÀsÑKÔKˆEØ—N’N 5¨*°d¸IÀsÑKÔKˆEØ”:ˆDØ×#Ò# EÔ$5°uÔ7HÝ$+¤Oñ5ô 5Ø79ñ:ð :å‰wŒw×Ò  z°4¸Ø % z°4¸ÀCñIô Ið 	IrE   rÔ   rÖ   )
rU   r"   r�   r'   rV   r8   r©   r8   r+   r8   ©rÊ   r*   r±   r*   r²   r*   r+   rø   )rÊ   r*   r±   r*   r²   r*   rV   r8   r©   r8   r+   r™   )rÊ   r*   rV   r8   r©   r8   r+   r8   rØ   rÕ   )r?   r@   rA   rB   rR   r°   r÷   rú   r´   rÂ   rÅ   rÇ   rÉ   r¬   Ú__classcell__©rç   s   @r4   rÜ   rÜ   ]  s  ø€ € € € € ðð ð

.ð 
.ð 
.ð 
.ð 
.ð 
.ð,ð ,ð ,ð ,ðð ð ð ð"ð "ð "ð "ð

ð 
ð 
ð 
ðB	5ð 	5ð 	5ð 	5ð#ð #ð #ð #ð	#ð 	#ð 	#ð 	#ð3ð 3ð 3ð 3ð
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
IrE   rÜ   )Ú	metaclassc            	      ó~  ‡ — e Zd ZdZdddddddd	d
œZdGˆ fd„Z ed                     ¦   «         ¦  «        ZdHd„Z	dZ
i ddgd„ e
D ¦   «         ¢“ddgd„ e
D ¦   «         ¢“dd „ e
D ¦   «         “d!d"„ e
D ¦   «         “d#d$gd%„ e
D ¦   «         ¢“d&d'gd(„ e
D ¦   «         ¢“d)d*gd+„ e
D ¦   «         ¢“d,d-gd.„ e
D ¦   «         ¢“d/d0„ e
D ¦   «         “d1d2„ e
D ¦   «         “d3d4„ e
D ¦   «         “d5d6„ e
D ¦   «         “d7d8„ e
D ¦   «         “d9d:„ e
D ¦   «         “d;d<gd=„ e
D ¦   «         ¢“d>g d?¢“d@g dA¢“ZdBD ]\  ZZee         ee<   ŒdIdD„ZdJdF„Zˆ xZS )KÚBakomaFontsz¦
    Use the Bakoma TrueType fonts for rendering.

    Symbols are strewn about a number of font files, each of which has
    its own proprietary 8-bit encoding.
    Úcmmi10Úcmsy10Úcmr10Úcmtt10Úcmti10Úcmb10Úcmss10Úcmex10)ÚnormalÚcalÚrmÚttÚitÚbfÚsfÚexrž   r   rŸ   r$   c                óú   •— t          ||¦  «        | _        t          ¦   «                              ||¦  «         | j                             ¦   «         D ](\  }}t          |¦  «        }|| j        |<   || j        |<   Œ)d S rP   )Ú	StixFontsÚ_stix_fallbackrà   rR   Ú_fontmapÚitemsr    rä   )rQ   rž   rŸ   Úkeyrþ   Úfullpathrç   s         €r4   rR   zBakomaFonts.__init__ê  s„   ø€ Ý'Ð(9Ð;KÑLÔLˆÔå‰Œ×ÒÐ*Ð,<Ñ=Ô=Ð=Øœ×+Ò+Ñ-Ô-ð 	)ð 	)‰HˆC�Ý ‘}”}ˆHØ (ˆDŒL˜ÑØ (ˆDŒL˜ÑÐð	)ð 	)rE   ú
\int \ointrÊ   r*   r±   r²   r+   rø   c                ó¾  — d }|| j         v r<|t          v r3t          |         \  }}|dv p|| j        v }|                      |¦  «        }n[t	          |¦  «        dk    rH|dv }|dk    r|                     ¦   «         rd}d}|                      |¦  «        }|�t          |¦  «        }|�|                     |¦  «        dk    r|||fS | j         	                    |||¦  «        S )N)r   r$  r   )r,  r(  r(  r*  Fr   )
rä   r   Ú_slanted_symbolsr°   ÚlenÚisdigitr.   r  r2  rú   )rQ   rÊ   r±   r²   rU   rð   rW   r—   s           r4   rú   zBakomaFonts._get_glyphõ  sý   € àˆà�t”|Ð#Ð#¨­Ð(>Ð(>Ý+¨CÔ0‰MˆH�cØÐ#7Ð7ÐX¸CÀ4ÔCXÐ<XˆGØ—>’> (Ñ+Ô+ˆDˆDÝ�‰XŒX˜Š]ˆ]ØÐ#3Ð3ˆGØ˜8Ò#Ð#¨¯ª©¬Ð#ð  �Ø�Ø—>’> (Ñ+Ô+ˆDØÐÝ˜#‘h”h�ØÐ × 3Ò 3°CÑ 8Ô 8¸AÒ =Ð =Ø˜˜gÐ%Ð%àÔ&×1Ò1°(¸JÈÑLÔLÐLrE   )ÚbigÚBigÚbiggÚBiggú()r*  r@  c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__parenleftÚ__rD   ©rZ   Úss     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐQÐQÐQ¸q˜dÐ$9°AÐ$9Ð$9Ð$9Ð:ÐQÐQÐQrE   ú))r*  rE  c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__parenrightrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐRÐRÐRÀ˜dÐ$:°QÐ$:Ð$:Ð$:Ð;ÐRÐRÐRrE   Ú{c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__braceleftrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐBÐBÐB°ˆtÐ* QÐ*Ð*Ð*Ð+ÐBÐBÐBrE   Ú}c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__bracerightrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐCÐCÐC°ˆtÐ+ aÐ+Ð+Ð+Ð,ÐCÐCÐCrE   Ú[)r*  rK  c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__bracketleftrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐSÐSÐSÀ˜dÐ$;°aÐ$;Ð$;Ð$;Ð<ÐSÐSÐSrE   Ú])r*  rM  c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__bracketrightrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐTÐTÐTÀ!˜dÐ$<°qÐ$<Ð$<Ð$<Ð=ÐTÐTÐTrE   ú<)r)  z\__angbracketleft__c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__angbracketleftrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐIÐIÐI°q�Ð1¨AÐ1Ð1Ð1Ð2ÐIÐIÐIrE   ú>)r)  z\__angbracketright__c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__angbracketrightrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐJÐJÐJ¸�Ð2¨QÐ2Ð2Ð2Ð3ÐJÐJÐJrE   z\lfloorc                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__floorleftrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐIÐIÐI°q�dÐ1¨AÐ1Ð1Ð1Ð2ÐIÐIÐIrE   z\rfloorc                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__floorrightrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐJÐJÐJ¸�dÐ2¨QÐ2Ð2Ð2Ð3ÐJÐJÐJrE   z\lceilc                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__ceilingleftrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐJÐJÐJ¸�TÐ2¨QÐ2Ð2Ð2Ð3ÐJÐJÐJrE   z\rceilc                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__ceilingrightrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐKÐKÐK¸�TÐ3¨aÐ3Ð3Ð3Ð4ÐKÐKÐKrE   ú	\__sqrt__c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z
\__radicalrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>  s)   € ÐIÐIÐI°q˜Ð1¨AÐ1Ð1Ð1Ð2ÐIÐIÐIrE   z
\backslashc                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__backslashrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>   s)   € ÐLÐLÐL¸!˜Ð4¨qÐ4Ð4Ð4Ð5ÐLÐLÐLrE   ú/)r*  rZ  c                ó   — g | ]
}d d|› d�f‘ŒS )r/  z\__slashrB  rD   rC  s     r4   r]   zBakomaFonts.<listcomp>!  s)   € ÐNÐNÐN¸A˜tÐ%6°Ð%6Ð%6Ð%6Ð7ÐNÐNÐNrE   z\widehat))r*  ú^)r/  z\__hatwide__)r/  z\__hatwider__)r/  z\__hatwidest__z
\widetilde))r*  Ú~)r/  z\__tildewide__)r/  z\__tildewider__)r/  z\__tildewidest__))z
\leftparenr@  )z\rightparenrE  )z
\leftbracerG  )z\rightbracerI  )z\leftbracketrK  )z\rightbracketrM  )z\langlerO  )z\ranglerQ  )ú\{rG  )ú\}rI  )ú\[rK  )ú\]rM  rË   c                ó>   — | j                              |||fg¦  «        S rP   )Ú_size_alternativesré   rÍ   s      r4   rÎ   z-BakomaFonts.get_sized_alternatives_for_symbol0  s"   € àÔ&×*Ò*¨3°(¸C°Ð0AÑBÔBÐBrE   rÏ   c                ó   — t           S rP   )ÚComputerModernFontConstantsrÒ   s    r4   rÓ   zBakomaFonts.get_font_constants4  s   € Ý*Ð*rE   rÔ   r  rÙ   rÚ   )r?   r@   rA   rB   r3  rR   ÚsetÚsplitr9  rú   Ú_latex_sizesrc  ÚaliasÚtargetrÎ   rÓ   r  r  s   @r4   r  r  Ø  s  ø€ € € € € ðð ð ØØØØØØØð	ð 	€Hð)ð )ð )ð )ð )ð )ð �s˜=×.Ò.Ñ0Ô0Ñ1Ô1ÐðMð Mð Mð Mð4 2€LðØˆkÐRÐQÐQÀLÐQÑQÔQÐRðàˆkÐSÐRÐRÀ\ÐRÑRÔRÐSðð 	ÐBÐB°\ÐBÑBÔBðð 	ÐCÐC°lÐCÑCÔCð	ð
 	ˆkÐTÐSÐSÀlÐSÑSÔSÐTðð 	ˆkÐUÐTÐTÀ|ÐTÑTÔTÐUðð 	Ð-ð KØIÐI¸LÐIÑIÔIðKðð 	Ð.ð LØJÐJ¸\ÐJÑJÔJðLðð 	ÐIÐI¸LÐIÑIÔIðð 	ÐJÐJ¸\ÐJÑJÔJðð 	ÐJÐJ¸\ÐJÑJÔJðð 	ÐKÐK¸lÐKÑKÔKðð 	ÐIÐI¸LÐIÑIÔIðð  	ÐLÐL¸|ÐLÑLÔLð!ð" 	ˆ{ÐOÐNÐNÀÐNÑNÔNÐOð#ð$ 	ð 1ð 1ð 1ð%ð( 	ð Qð Qð Qð)Ðð06ð ?ð ?‰ˆˆvð %7°vÔ$>Ð˜5Ñ!Ð!ðCð Cð Cð Cð+ð +ð +ð +ð +ð +ð +ð +rE   r  c                  óŒ   ‡ — e Zd ZU dZdddœZded<   dˆ fd„Z ed                     ¦   «         ¦  «        Z	dd„Z
dd„Zdd„Zˆ xZS )ÚUnicodeFontsa`  
    An abstract base class for handling Unicode fonts.

    While some reasonably complete Unicode fonts (such as DejaVu) may
    work in some situations, the only Unicode font I'm aware of with a
    complete set of math symbols is STIX.

    This class will "fallback" on the Bakoma fonts when a required
    symbol cannot be found in the font.
    é£   é¡   )é×   i"  z*dict[CharacterCodeType, CharacterCodeType]Ú_cmr10_substitutionsrž   r   rŸ   r$   c                óˆ  •— t           j        d         }t          t          t          dœ                     |¦  «        }|r |||¦  «        nd | _        t          ¦   «                              ||¦  «         d 	                    ¦   «         D ]0}t           j        d|z            }t          |¦  «        }|| j        |<   Œ1t          d¦  «        }t          |¦  «        }|| j        d<   t          | j        t          ¦  «        rFddd	d
dddœ}|                     ¦   «         D ]*\  }	}
t          |
¦  «        }|| j        |	<   || j        |
<   Œ)d S d S )Nzmathtext.fallback)ÚstixÚstixsansÚcmzcal rm tt it bf sf bfitz	mathtext.r'  r/  ÚSTIXGeneralÚSTIXSizeOneSymÚSTIXSizeTwoSymÚSTIXSizeThreeSymÚSTIXSizeFourSymÚSTIXSizeFiveSym)Ú0Ú1Ú2Ú3Ú4Ú5)r  r  r1  ÚStixSansFontsr  ré   Ú_fallback_fontrà   rR   rg  r    rä   r   Ú
isinstancer4  )rQ   rž   rŸ   Úfallback_rcÚfont_clsÚtexfontÚproprU   ÚstixsizedaltfontsÚsizeÚnamer6  rç   s               €r4   rR   zUnicodeFonts.__init__L  sx  ø€ å”lÐ#6Ô7ˆåÝ%Ýð0
ð 0
÷ Š#ˆkÑ
Ô
ð	 	ð #+ð 5˜x˜xÐ(9Ð;KÑLÔLÐLØ04ð 	Ôõ 	‰Œ×ÒÐ*Ð,<Ñ=Ô=Ð=Ø0×6Ò6Ñ8Ô8ð 	)ð 	)ˆGÝ”< ¨gÑ 5Ô6ˆDÝ˜D‘>”>ˆDØ$(ˆDŒL˜Ñ!Ð!Ý˜hÑ'Ô'ˆÝ˜‰~Œ~ˆØ!ˆŒ�TÑõ �dÔ)­9Ñ5Ô5ð 	.à"Ø%Ø%Ø'Ø&Ø&ð!ð !Ðð 0×5Ò5Ñ7Ô7ð .ð .‘
��dÝ# D™>œ>�Ø%-�”˜TÑ"Ø%-�”˜TÑ"Ð"ð	.ð 	.ð.ð .rE   r7  rÊ   r*   r±   Úuniindexr&   r+   útuple[str, CharacterCodeType]c                ó
   — ||fS rP   rD   )rQ   rÊ   r±   r‹  s       r4   Ú_map_virtual_fontzUnicodeFonts._map_virtual_fontr  s   € à˜Ð!Ð!rE   r²   rø   c                ó®  — 	 t          |¦  «        }d}n<# t          $ r/ t          d¦  «        }d}t                               d|¦  «         Y nw xY w|                      |||¦  «        \  }}|}|rì|dk    r_|dk     rYt          |¦  «        }t          j        |¦  «        d         dk    s't          j	        |¦  «         
                    d	¦  «        rd
}nd}|dk    p|| j        v }d}|                      |¦  «        }	|	�_|| j        v r9|	j        dk    r.t          t!          j        d¦  «        ¦  «        }	| j        |         }|	                     |¦  «        }
|
dk    rd}|sö| j        r‰|dv rt)          | j        t*          ¦  «        rd
}| j                             |||¦  «        }|d         j        }|t.          j                             ¦   «         v rd}t                               d||¦  «         |S |dv r,t)          | t*          ¦  «        r|                      d
||¦  «        S t                               d|||¦  «         |                      d
¦  «        }	d}d}|	||fS )NTÚ?Fz!No TeX to Unicode mapping for %a.r(  r   r   ÚLzGREEK CAPITALr*  r,  r"  zfonts/ttf/cmsy10.ttf)r,  rß   r(  zComputer ModernzSubstituting symbol %s from %szNFont %r does not have a glyph for %a [U+%x], substituting with a dummy symbol.é¤   )r5   r2   r.   Ú_logÚwarningrŽ  ÚchrÚunicodedataÚcategoryrŠ  Ú
startswithr9  r°   rp  Úfamily_namer!   r   Ú_get_data_pathr  r‚  rƒ  r1  rú   r  r3  Úvaluesr[   )rQ   rÊ   r±   r²   r‹  Úfound_symbolÚnew_fontnameÚcharr—   rU   Ú
glyphindexÚgÚfamilys                r4   rú   zUnicodeFonts._get_glyphv  sµ  € ð	CÝ(¨Ñ-Ô-ˆHØˆLˆLøÝð 	Cð 	Cð 	CÝ˜3‘x”xˆHØ ˆLÝ�LŠLÐ<¸cÑBÔBÐBÐBÐBð	Cøøøð
 "×3Ò3°H¸jÈ(ÑSÔSÑˆ�(àˆð ð 	(Ø˜8Ò#Ð#¨°7Ò(:Ð(:å˜8‘}”}�ÝÔ(¨Ñ.Ô.¨qÔ1°SÒ8Ð8Ý&Ô+¨DÑ1Ô1×<Ò<¸_ÑMÔMð 9à#'�L�Là#'�Là# tÒ+ÐL°°tÔ7LÐ0LˆGØ ˆLØ—>’> ,Ñ/Ô/ˆDØÐØ Ô 9Ð9Ð9Ø Ô,°Ò7Ð7Ý#ÝÔ,Ð-CÑDÔDñFô F�Dà#Ô8¸ÔB�HØ!×0Ò0°Ñ:Ô:�
Ø ’?�?Ø#'�Làð 	 ØÔ"ð  ØÐ ;Ð;Ð;Ý& tÔ':½IÑFÔFð <à#�HàÔ'×2Ò2°8¸ZÈÑMÔM�Ø˜1œÔ)�Ø�[Ô1×8Ò8Ñ:Ô:Ð:Ð:Ø.�FÝ—	’	Ð:¸CÀÑHÔHÐHØ�ð Ð ;Ð;Ð;Ý& t­YÑ7Ô7ð <àŸ?š?¨4°¸SÑAÔAÐAÝ—’ð Aà)¨3°ñ:ô :ð :ð —~’~ dÑ+Ô+�Ø�Ø�à�X˜wÐ&Ð&s   ‚ ”6AÁArË   c                óP   — | j         r| j                              ||¦  «        S ||fgS rP   )r‚  rÎ   rÍ   s      r4   rÎ   z.UnicodeFonts.get_sized_alternatives_for_symbol·  s5   € àÔð 	XØÔ&×HÒHÈÐSVÑWÔWÐWØ˜3�Ð Ð rE   rÔ   ©rÊ   r*   r±   r*   r‹  r&   r+   rŒ  r  rÙ   )r?   r@   rA   rB   rp  rC   rR   rf  rg  r9  rŽ  rú   rÎ   r  r  s   @r4   rl  rl  8  sÐ   ø€ € € € € € ð	ð 	ð ØðHð HÐð ð ð ñ ð
".ð ".ð ".ð ".ð ".ð ".ðH �s˜=×.Ò.Ñ0Ô0Ñ1Ô1Ðð"ð "ð "ð "ð?'ð ?'ð ?'ð ?'ðB!ð !ð !ð !ð !ð !ð !ð !rE   rl  c                  ó8   ‡ — e Zd ZU i Zded<   dd„Zdˆ fd„Zˆ xZS )ÚDejaVuFontszdict[str, str]r3  rž   r   rŸ   r$   c                ó¬  — t          | t          ¦  «        rt          ||¦  «        | _        nt	          ||¦  «        | _        t          ||¦  «        | _        t                               | ||¦  «         | j	         
                    ddddddœ¦  «         | j	                             ¦   «         D ](\  }}t          |¦  «        }|| j        |<   || j        |<   Œ)d S )Nrv  rw  rx  ry  rz  )r|  r}  r~  r  r€  )rƒ  ÚDejaVuSerifFontsr1  r‚  r�  r  ÚbakomarÜ   rR   r3  Úupdater4  r    rä   ©rQ   rž   rŸ   r5  rŠ  r6  s         r4   rR   zDejaVuFonts.__init__Á  sô   € å�dÕ,Ñ-Ô-ð 	UÝ"+Ð,=Ð?OÑ"PÔ"PˆDÔÐå"/Ð0AÐCSÑ"TÔ"TˆDÔÝ!Ð"3Ð5EÑFÔFˆŒÝ×Ò˜tÐ%6Ð8HÑIÔIÐIàŒ×ÒØ!Ø!Ø#Ø"Ø"ð
ð 
ñ 	ô 	ð 	ð œ×,Ò,Ñ.Ô.ð 	*ð 	*‰IˆC�Ý ‘~”~ˆHØ (ˆDŒL˜ÑØ!)ˆDŒL˜ÑÐð	*ð 	*rE   rÊ   r*   r±   r²   r+   rø   c                óV  •— |dk    r| j                              |||¦  «        S t          |¦  «        }|                      d¦  «        }|�>|                     |¦  «        }|dk    r#t          ¦   «                              d||¦  «        S t          ¦   «                              |||¦  «        S )Nú\primer/  r   )r¨  rú   r5   r°   r  rà   )rQ   rÊ   r±   r²   r‹  rU   rŸ  rç   s          €r4   rú   zDejaVuFonts._get_glyphÖ  s¤   ø€ ð �)ÒÐØ”;×)Ò)¨(°JÀÑDÔDÐDõ )¨Ñ-Ô-ˆHØ—>’> $Ñ'Ô'ˆDØÐØ!×0Ò0°Ñ:Ô:�
Ø ’?�?Ý ™7œ7×-Ò-¨d°JÀÑDÔDÐDå‘7”7×%Ò% h°
¸CÑ@Ô@Ð@rE   rÔ   r  )r?   r@   rA   r3  rC   rR   rú   r  r  s   @r4   r¥  r¥  ¾  sn   ø€ € € € € € Ø!€HÐ!Ð!Ð!Ñ!ð*ð *ð *ð *ð*Að Að Að Að Að Að Að Að Að ArE   r¥  c            	      ó0   — e Zd ZdZddddddddd	œZdd„ZdS )r§  zv
    A font handling class for the DejaVu Serif fonts

    If a glyph is not found it will fallback to Stix Serif
    zDejaVu SerifzDejaVu Serif:italiczDejaVu Serif:weight=boldzDejaVu Serif:italic:boldúDejaVu SansúDejaVu Sans MonozDejaVu Serif Display©r*  r,  r-  Úbfitr.  r+  r/  r{  r+   rÏ   c                ó   — t           S rP   )ÚDejaVuSerifFontConstantsrÒ   s    r4   rÓ   z#DejaVuSerifFonts.get_font_constantsø  s   € Ý'Ð'rE   NrÚ   ©r?   r@   rA   rB   r3  rÓ   rD   rE   r4   r§  r§  ç  sX   € € € € € ðð ð Ø#Ø(Ø*ØØ Ø$Øð	ð 	€Hð(ð (ð (ð (ð (ð (rE   r§  c            	      ó0   — e Zd ZdZdddddddddœZdd„ZdS )ÚDejaVuSansFontszt
    A font handling class for the DejaVu Sans fonts

    If a glyph is not found it will fallback to Stix Sans
    r®  zDejaVu Sans:italiczDejaVu Sans:weight=boldzDejaVu Sans:italic:boldr¯  zDejaVu Sans Displayr°  r+   rÏ   c                ó   — t           S rP   )ÚDejaVuSansFontConstantsrÒ   s    r4   rÓ   z"DejaVuSansFonts.get_font_constants  s   € Ý&Ð&rE   NrÚ   r´  rD   rE   r4   r¶  r¶  ü  sX   € € € € € ðð ð Ø"Ø'Ø)ØØ Ø#Øð	ð 	€Hð'ð 'ð 'ð 'ð 'ð 'rE   r¶  c                  ót   — e Zd ZdZddddddddd	d
ddddœZdZdZd#d„Zd$d„Ze	j
        d%d „¦   «         Zd&d"„ZdS )'r1  aa  
    A font handling class for the STIX fonts.

    In addition to what UnicodeFonts provides, this class:

    - supports "virtual fonts" which are complete alpha numeric
      character sets with different font styles at special Unicode
      code points, such as "Blackboard".

    - handles sized alternative characters for the STIXSizeX fonts.
    ru  zSTIXGeneral:italiczSTIXGeneral:weight=boldzSTIXGeneral:italic:boldÚSTIXNonUnicodezSTIXNonUnicode:italiczSTIXNonUnicode:weight=boldrv  rw  rx  ry  rz  )r*  r,  r-  r±  ÚnonunirmÚnonuniitÚnonunibfr{  r|  r}  r~  r  r€  NFrž   r   rŸ   r$   c                óÂ   — t                                | ||¦  «         | j                             ¦   «         D ](\  }}t	          |¦  «        }|| j        |<   || j        |<   Œ)d S rP   )rÜ   rR   r3  r4  r    rä   rª  s         r4   rR   zStixFonts.__init__/  sm   € Ý×Ò˜tÐ%6Ð8HÑIÔIÐIØœ×,Ò,Ñ.Ô.ð 	*ð 	*‰IˆC�Ý ‘~”~ˆHØ (ˆDŒL˜ÑØ!)ˆDŒL˜ÑÐð	*ð 	*rE   rÊ   r*   r±   r‹  r&   r+   rŒ  c                ó´  — t          j        |¦  «        }| j        r|€|dvrt           d         }d}nd}t          |t          ¦  «        r"	 ||         }n2# t
          $ r |d         }Y nw xY wt          |t          ¦  «        r|}nd }|��d}t          |¦  «        }||k     r7||z   dz  }	||	         }
||
d         k     r|	}n||
d         k    rn|	dz   }||k     °7|
d         |cxk    r|
d         k    r n n||
d         z
  |
d	         z   }|
d         }n|sd}t          j	        d
         }|dv rt          j        ||¦  «        }|dv rd|cxk    rdk    rn nd|z   }||fS )N)rß   rÞ   r.  TFr*  r   r‚   r   rõ   r  )r*  r,  r(  )r,  r*  r-  r±  i à  iÿø  Únonuni)r   ré   Ú_sansrƒ  Údictr1   Úlistr:  r  r  r   )rQ   rÊ   r±   r‹  Úfont_mappingÚdoing_sans_conversionÚmappingÚloÚhiÚmidÚranges              r4   rŽ  zStixFonts._map_virtual_font6  sï  € õ *Ô-¨hÑ7Ô7ˆØŒJð 	*˜<Ð/ØÐ$:Ð:Ð:Ý-¨dÔ3ˆLØ$(Ð!Ð!à$)Ð!å�l¥DÑ)Ô)ð 	ð-Ø& zÔ2��øÝð -ð -ð -Ø& tÔ,���ð-øøøå˜¥dÑ+Ô+ð 	Ø"ˆGˆGàˆGàÐàˆBÝ�W‘”ˆBØ�r’'�'Ø˜"‘u˜q‘j�Ø œ�Ø˜e AœhÒ&Ð&Ø�B�BØ  q¤Ò)Ð)Øà˜q™�Bð �r’'�'ð �QŒx˜8Ð/Ð/Ò/Ð/ u¨Q¤xÒ/Ð/Ð/Ð/Ð/Ø# e¨A¤hÑ.°°q´Ñ9�Ø  œ8��Ø*ð <à�Ýœ<Ð(:Ô;�ð Ð-Ð-Ð-Ý'Ô+¨H°hÑ?Ô?ˆHð Ð1Ð1Ð1°fÀÐ6RÐ6RÒ6RÐ6RÈFÒ6RÐ6RÐ6RÐ6RÐ6RØ (Ñ*ˆHà˜Ð!Ð!s   Á
A ÁA(Á'A(r²   rË   c                óì   ‡ ‡— dddddddœ}|                      ||¦  «        }	 t          |¦  «        Šn# t          $ r ||fgcY S w xY wˆ ˆfd„t          d	¦  «        D ¦   «         }|d
k    r
|d d…         }|S )NrG  rI  rK  rM  u   âŸ¨u   âŸ©)r^  r_  r`  ra  rO  rQ  c                ó¾   •— g | ]Y}‰                      t          |¦  «        ¦  «                             ‰¦  «        d k    ¯;t          |¦  «        t          ‰¦  «        f‘ŒZS )r   )r°   r*   r  r•  )rZ   ÚirQ   r‹  s     €€r4   r]   z?StixFonts.get_sized_alternatives_for_symbol.<locals>.<listcomp>y  sa   ø€ ð Qð Qð Q°AØŸ>š>­#¨a©&¬&Ñ1Ô1×@Ò@ÀÑJÔJÈaÒOÐOõ ˜Q™œ¥ X¡¤Ð/ØOÐOÐOrE   é   rW  éÿÿÿÿ)ré   r5   r2   rÊ  )rQ   rÊ   r²   ÚfixesÚalternativesr‹  s   `    @r4   rÎ   z+StixFonts.get_sized_alternatives_for_symboll  sÓ   øø€ ð ˜s¨3°sØ6Ø7ð
ð 
ˆð
 �iŠi˜˜SÑ!Ô!ˆð	%Ý(¨Ñ-Ô-ˆHˆHøÝð 	%ð 	%ð 	%Ø˜s�OÐ$Ð$Ð$Ð$ð	%øøøðQð Qð Qð Qð Q½¸q¹¼ð Qñ Qô Qˆð �,ÒÐØ'¨¨¨Ô,ˆLØÐs   £3 ³AÁArÏ   c                ó,   — | j         rt          S t          S rP   )rÁ  ÚSTIXSansFontConstantsÚSTIXFontConstantsrÒ   s    r4   rÓ   zStixFonts.get_font_constants�  s   € ØŒ:ð 	%Ý(Ð(å$Ð$rE   rÔ   r£  rÙ   rÚ   )r?   r@   rA   rB   r3  r‚  rÁ  rR   rŽ  rá   râ   rÎ   rÓ   rD   rE   r4   r1  r1    s¾   € € € € € ð
ð 
ð Ø"Ø'Ø)Ø$Ø+Ø0ØØØØØØðð €Hð €NØ€Eð*ð *ð *ð *ð4"ð 4"ð 4"ð 4"ðl „_ðð ð ñ „_ðð(%ð %ð %ð %ð %ð %rE   r1  c                  ó   — e Zd ZdZdZdS )r�  zd
    A font handling class for the STIX fonts (that uses sans-serif
    characters by default).
    TN)r?   r@   rA   rB   rÁ  rD   rE   r4   r�  r�  ˆ  s   € € € € € ðð ð €E€E€ErE   r�  çffffffæ?rÎ  c                  ó  — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   d
Z	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded <   dZded!<   dS )"rÑ   zÔ
    A set of constants that controls how certain things, such as sub-
    and superscripts are laid out.  These are all metrics that can't
    be reliably retrieved from the font metrics in the font itself.
    çš™™™™™©?zT.ClassVar[float]Úscript_spacegš™™™™™Ù?ÚsupdropÚsubdroprÖ  Úsup1ç333333Ó?Úsub1ç      à?Úsub2gš™™™™™™?Údeltaçš™™™™™É?Údelta_slantedçš™™™™™¹?Údelta_integralgffffffö?Únum1g      ø?Únum2gÍÌÌÌÌÌô?Únum3Údenom1gš™™™™™ñ?Údenom2NzT.ClassVar[float | None]r
  r  r  )r?   r@   rA   rB   rÙ  rC   rÚ  rÛ  rÜ  rÞ  rà  rá  rã  rå  ræ  rç  rè  ré  rê  r
  r  r  rD   rE   r4   rÑ   rÑ   ¯  s_  € € € € € € ðð ð '+€LÐ*Ð*Ð*Ñ*ð "%€GÐ$Ð$Ð$Ñ$ð "%€GÐ$Ð$Ð$Ñ$ð "€DÐ!Ð!Ð!Ñ!ð "€DÐ!Ð!Ð!Ñ!ð "€DÐ!Ð!Ð!Ñ!ð  %€EÐ$Ð$Ð$Ñ$ð
 (+€MÐ*Ð*Ð*Ñ*ð ),€NÐ+Ð+Ð+Ñ+ð "€DÐ!Ð!Ð!Ñ!ð "€DÐ!Ð!Ð!Ñ!ð "€DÐ!Ð!Ð!Ñ!ð !$€FÐ#Ð#Ð#Ñ#ð !$€FÐ#Ð#Ð#Ñ#ð -1€KÐ0Ð0Ð0Ñ0ð &*€DÐ)Ð)Ð)Ñ)ð *.€HÐ-Ð-Ð-Ñ-Ð-Ð-rE   rÑ   c                  ó˜   — e Zd ZdZdZdZdZdZdez  Zdez  Z	dez  Z
dez  Zdez  Zd	ez  Zd
ez  Zdez  Zdez  Zdez  ZdZdZedz  ZdS )re  gš™™™™Á?rÝ  iŽã i€- iÍÌ  i5› iff išô iúÒ
 iºL i† i¨ù
 ix„ ç      Ð?g     ð?i   N)r?   r@   rA   rÙ  rá  rã  rå  Ú	_x_heightrÚ  rÛ  rÜ  rÞ  rà  ræ  rç  rè  ré  rê  r
  r  r  rD   rE   r4   re  re  ó  s¥   € € € € € ð "€LØ€EØ€MØ€NØ€Ið �yÑ €GØ�iÑ€GØ�IÑ€DØ�IÑ€DØ�IÑ€DØ�IÑ€DØ�IÑ€DØ�IÑ€DØ�iÑ€FØ�iÑ€Fð !€KØ€DØ˜5Ñ €H€H€HrE   re  c                  ó˜   — e Zd ZdZdZdZdZdZedz  Zdez  Z	dez  Z
dez  Zd	ez  Zd
ez  Zdez  Zdez  Zdez  Zdez  Zdez  ZdZdZdS )rÔ  rä  rØ  rÝ  iÂ  iè  i‚  gÇº¸� I@i�  é–   i5  ië  i¨  iÚ  iô  iw  rì  ç      ð?N)r?   r@   rA   rÙ  rá  rã  rå  rí  r  rÚ  rÛ  rÜ  rÞ  rà  ræ  rç  rè  ré  rê  r
  r  rD   rE   r4   rÔ  rÔ    sš   € € € € € Ø€LØ€EØ€MØ€NØ€IØ˜4Ñ€Hð �I‰o€GØ˜	Ñ!€GØ�‰?€DØ�‰?€DØ�‰?€DØ�‰?€DØ�‰?€DØ�‰?€DØ�9‰_€FØ�9‰_€Fð €KØ€D€D€DrE   rÔ  c                  ó   — e Zd ZdZdZdZdS )rÓ  rØ  ç333333ã?rÝ  N)r?   r@   rA   rÙ  rã  rå  rD   rE   r4   rÓ  rÓ  +  s   € € € € € Ø€LØ€MØ€N€N€NrE   rÓ  c                  ó„   — e Zd ZdZedz  Zdez  Zdez  Zdez  Zdez  Zdez  Z	dez  Z
d	ez  Zd
ez  Zdez  Zdez  ZdZdS )r³  i'  é   çð§ÆK7´ˆ@çš™™™™™Y@ç;ßO�—nŠ@çw¾Ÿ/3s@ç-²�ï§Æƒ@ç=
×£pç—@ç‰A`åÐ"‹@ç¼t“VŽ@ç\�Âõ(1˜@é   rì  N©r?   r@   rA   rí  r  rÚ  rÛ  rÜ  rÞ  rà  ræ  rç  rè  ré  rê  r
  rD   rE   r4   r³  r³  1  ó‰   € € € € € Ø€IØ˜4Ñ€Hð ˜	Ñ!€GØ�iÑ€GØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�yÑ €FØ�9‰_€Fð €K€K€KrE   r³  c                  ó„   — e Zd ZdZedz  Zdez  Zdez  Zdez  Zdez  Zdez  Z	dez  Z
d	ez  Zd
ez  Zdez  Zdez  ZdZdS )r¸  i`  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  rì  Nrÿ  rD   rE   r4   r¸  r¸  F  r   rE   r¸  c                  óB   — e Zd ZdZdd„Zdd„Zdd
„Zdd„Zdd„Zdd„Z	dS )ÚNodezA node in the TeX box model.r+   r¹   c                ó   — d| _         d S ©Nr   ©r‰  rÒ   s    r4   rR   zNode.__init__^  s   € ØˆŒ	ˆ	ˆ	rE   r*   c                ó*   — t          | ¦  «        j        S rP   )Útyper?   rÒ   s    r4   Ú__repr__zNode.__repr__a  s   € Ý�D‰zŒzÔ"Ð"rE   ÚnextúNode | Noner8   c                ó   — dS ©Nr«   rD   )rQ   r
  s     r4   r  zNode.get_kerningd  s   € ØˆsrE   c                ó&   — | xj         dz  c_         dS )zŠ
        Shrinks one level smaller.  There are only three levels of
        sizes, after which things will no longer get smaller.
        r   Nr  rÒ   s    r4   ÚshrinkzNode.shrinkg  s   € ð
 	ˆ	Œ	�Q‰ˆ	Œ	ˆ	ˆ	rE   r¸   rL   ru   rv   c                ó   — dS )zRender this node.NrD   ©rQ   r¸   ru   rv   s       r4   ÚrenderzNode.rendern  s   € € € rE   rl   c                ó   — dS )NTrD   rÒ   s    r4   Úis_char_nodezNode.is_char_nodeq  s	   € ð ˆtrE   N©r+   r¹   ©r+   r*   ©r
  r  r+   r8   ©r¸   rL   ru   r8   rv   r8   r+   r¹   ©r+   rl   )
r?   r@   rA   rB   rR   r	  r  r  r  r  rD   rE   r4   r  r  [  s’   € € € € € Ø&Ð&ðð ð ð ð#ð #ð #ð #ðð ð ð ðð ð ð ð ð  ð  ð  ðð ð ð ð ð rE   r  c                  ó8   ‡ — e Zd ZdZdˆ fd„Zdˆ fd	„Zdd„Zˆ xZS )rN   z A node with a physical location.r9   r8   r:   r;   r+   r¹   c                ór   •— t          ¦   «                              ¦   «          || _        || _        || _        d S rP   )rà   rR   r9   r:   r;   )rQ   r9   r:   r;   rç   s       €r4   rR   zBox.__init__~  s2   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ØˆŒØˆŒ
ˆ
ˆ
rE   c                óê   •— t          ¦   «                              ¦   «          | j        t          k     rA| xj        t
          z  c_        | xj        t
          z  c_        | xj        t
          z  c_        d S d S rP   )rà   r  r‰  ÚNUM_SIZE_LEVELSr9   ÚSHRINK_FACTORr:   r;   ©rQ   rç   s    €r4   r  z
Box.shrink„  s`   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆJŒJ�=Ñ(ˆJŒJØˆKŒK�=Ñ(ˆKŒKØˆJŒJ�=Ñ(ˆJŒJˆJˆJð 'Ð&rE   r¸   rL   r‘   Úy1r’   Úy2c                ó   — d S rP   rD   )rQ   r¸   r‘   r   r’   r!  s         r4   r  z
Box.render‹  s   € àˆrE   )r9   r8   r:   r8   r;   r8   r+   r¹   r  )r¸   rL   r‘   r8   r   r8   r’   r8   r!  r8   r+   r¹   )r?   r@   rA   rB   rR   r  r  r  r  s   @r4   rN   rN   {  su   ø€ € € € € Ø*Ð*ðð ð ð ð ð ð)ð )ð )ð )ð )ð )ðð ð ð ð ð ð ð rE   rN   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚVboxz$A box with only height (zero width).r:   r8   r;   c                óN   •— t          ¦   «                              d||¦  «         d S r  ©rà   rR   )rQ   r:   r;   rç   s      €r4   rR   zVbox.__init__“  s%   ø€ Ý‰Œ×Ò˜˜V UÑ+Ô+Ð+Ð+Ð+rE   )r:   r8   r;   r8   ©r?   r@   rA   rB   rR   r  r  s   @r4   r$  r$  �  sC   ø€ € € € € Ø.Ð.ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,rE   r$  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚHboxz.A box with only width (zero height and depth).r9   r8   c                óN   •— t          ¦   «                              |dd¦  «         d S r  r&  ©rQ   r9   rç   s     €r4   rR   zHbox.__init__š  s%   ø€ Ý‰Œ×Ò˜  BÑ'Ô'Ð'Ð'Ð'rE   ©r9   r8   r'  r  s   @r4   r)  r)  —  sC   ø€ € € € € Ø8Ð8ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (rE   r)  c                  óX   ‡ — e Zd ZdZdˆ fd„Zdd„Zdd
„Zdd„Zdd„Zdd„Z	dˆ fd„Z
ˆ xZS )ÚCharaþ  
    A single character.

    Unlike TeX, the font information and metrics are stored with each `Char`
    to make it easier to lookup the font metrics when needed.  Note that TeX
    boxes have a width, height, and depth, unlike Type1 and TrueType which use
    a full bounding box and an advance in the x-direction.  The metrics must
    be converted to the TeX model, and the advance (if different from width)
    must be converted into a `Kern` node when the `Char` is added to its parent
    `Hlist`.
    Úcr*   ÚstateÚParserStatec                óö   •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |                      ¦   «          d S rP   )	rà   rR   r/  ÚfontsetrU   r±   rV   r©   Ú_update_metrics)rQ   r/  r0  rç   s      €r4   rR   zChar.__init__«  sh   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ”}ˆŒØ”JˆŒ	ØÔ*ˆŒØœˆŒØ”9ˆŒð 	×ÒÑÔÐÐÐrE   r+   c                ó   — d| j         z  S )Nz`%s`©r/  rÒ   s    r4   r	  zChar.__repr__·  s   € Ø˜œ‰ÐrE   r¹   c                ó  — | j                              | j        | j        | j        | j        | j        ¦  «        x}| _        | j        dk    r|j        | _	        n|j	        | _	        |j
        | _        |j
        |j        z
   | _        d S )Nú )r3  r·   rU   r±   r/  rV   r©   Ú_metricsr–   r9   rŒ   r:   r;   ©rQ   ro   s     r4   r4  zChar._update_metricsº  sy   € Ø"&¤,×":Ò":ØŒI�t”¨¬°´¸t¼xñ#Iô #Ið 	Iˆ�$”-àŒ6�SŠ=ˆ=Ø œˆDŒJˆJà œˆDŒJØ”oˆŒØ”¨¬Ñ7Ð8ˆŒ
ˆ
ˆ
rE   rl   c                ó   — | j         j        S rP   )r9  r—   rÒ   s    r4   Ú
is_slantedzChar.is_slantedÄ  s   € ØŒ}Ô$Ð$rE   r
  r  r8   c                ó   — | j         j        | j        z
  }d}t          |t          ¦  «        rO| j                             | j        | j        | j	        | j
        |j        |j        |j	        |j
        | j        ¦	  «	        }||z   S )zÄ
        Return the amount of kerning between this and the given character.

        This method is called when characters are strung together into `Hlist`
        to create `Kern` nodes.
        r«   )r9  r–   r9   rƒ  r.  r3  r¬   rU   r±   r/  rV   r©   )rQ   r
  r–   Úkerns       r4   r  zChar.get_kerningÇ  sv   € ð ”-Ô'¨$¬*Ñ4ˆØˆÝ�d�DÑ!Ô!ð 	Ø”<×(Ò(Ø”	˜4œ?¨D¬F°D´MØ”	˜4œ?¨D¬F°D´MØ”ñô ˆDð ˜‰~ÐrE   r¸   rL   ru   rv   c           
     óz   — | j                              |||| j        | j        | j        | j        | j        ¦  «         d S rP   )r3  r¼   rU   r±   r/  rV   r©   r  s       r4   r  zChar.render×  sG   € ØŒ×!Ò!Ø�A�qØŒI�t”¨¬°´¸t¼xñ	Iô 	Ið 	Ið 	Ið 	IrE   c                ó  •— t          ¦   «                              ¦   «          | j        t          k     rV| xj        t
          z  c_        | xj        t
          z  c_        | xj        t
          z  c_        | xj        t
          z  c_        d S d S rP   )	rà   r  r‰  r  rV   r  r9   r:   r;   r  s    €r4   r  zChar.shrinkÜ  sp   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆMŒM�]Ñ*ˆMŒMØˆJŒJ�]Ñ*ˆJŒJØˆKŒK�]Ñ*ˆKŒKØˆJŒJ�]Ñ*ˆJŒJˆJˆJð	 'Ð&rE   )r/  r*   r0  r1  r  r  r  r  r  )r?   r@   rA   rB   rR   r	  r4  r<  r  r  r  r  r  s   @r4   r.  r.  ž  sÍ   ø€ € € € € ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð9ð 9ð 9ð 9ð%ð %ð %ð %ðð ð ð ð Ið Ið Ið Ið
+ð +ð +ð +ð +ð +ð +ð +ð +ð +rE   r.  c                  ó4   ‡ — e Zd ZdZdd„Zdˆ fd„Zdd„Zˆ xZS )ÚAccentzž
    The font metrics need to be dealt with differently for accents,
    since they are already offset correctly from the baseline in
    TrueType fonts.
    r+   r¹   c                óà   — | j                              | j        | j        | j        | j        | j        ¦  «        x}| _        |j        |j	        z
  | _
        |j        |j        z
  | _        d| _        d S r  )r3  r·   rU   r±   r/  rV   r©   r9  r|   rp   r9   ry   r€   r:   r;   r:  s     r4   r4  zAccent._update_metricsë  se   € Ø"&¤,×":Ò":ØŒI�t”¨¬°´¸t¼xñ#Iô #Ið 	Iˆ�$”-à”\ G¤LÑ0ˆŒ
Ø”l W¤\Ñ1ˆŒØˆŒ
ˆ
ˆ
rE   c                óp   •— t          ¦   «                              ¦   «          |                      ¦   «          d S rP   )rà   r  r4  r  s    €r4   r  zAccent.shrinkò  s/   ø€ Ý‰Œ�ŠÑÔÐØ×ÒÑÔÐÐÐrE   r¸   rL   ru   r8   rv   c           
     ó®   — | j                              ||| j        j        z
  || j        j        z   | j        | j        | j        | j        | j	        ¦  «         d S rP   )
r3  r¼   r9  rp   r€   rU   r±   r/  rV   r©   r  s       r4   r  zAccent.renderö  s[   € ØŒ×!Ò!Ø�A˜œÔ*Ñ*¨A°´Ô0BÑ,BØŒI�t”¨¬°´¸t¼xñ	Iô 	Ið 	Ið 	Ið 	IrE   r  r  )r?   r@   rA   rB   r4  r  r  r  r  s   @r4   rB  rB  å  sw   ø€ € € € € ðð ð
ð ð ð ðð ð ð ð ð ðIð Ið Ið Ið Ið Ið Ið IrE   rB  c                  óD   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Zdd„Zdˆ fd„Zˆ xZS )ÚListz0A list of nodes (either horizontal or vertical).ÚelementsúT.Sequence[Node]c                ó˜   •— t          ¦   «                              ddd¦  «         d| _        g |¢| _        d| _        d| _        d| _        d S )Nr«   r   )rà   rR   Úshift_amountÚchildrenÚglue_setÚ	glue_signÚ
glue_order©rQ   rH  rç   s     €r4   rR   zList.__init__ÿ  sK   ø€ Ý‰Œ×Ò˜˜R Ñ$Ô$Ð$ØˆÔØ#˜(˜ˆŒàˆŒØˆŒØˆŒˆˆrE   r+   r*   c                ó6  •— d                      t          ¦   «                              ¦   «         | j        | j        | j        | j        | j        rFdt          j	        d 
                    t          dj         | j        ¦  «        ¦  «        d¦  «        z   dz   nd¦  «        S )Nz/{}<w={:.02f} h={:.02f} d={:.02f} s={:.02f}>[{}]ú
z{!r},z  Ú )Úformatrà   r	  r9   r:   r;   rK  rL  ÚtextwrapÚindentÚjoinrc   r  s    €r4   r	  zList.__repr__  s”   ø€ Ø@×GÒGÝ‰GŒG×ÒÑÔØŒJ˜œØŒJ˜Ô)ð Œ}ð%ˆD•8”?Ø—	’	�#˜gœn¨d¬mÑ<Ô<Ñ=Ô=Øñô ñ àñð ð #%ñ
ô 
ð 	
rE   ru   r8   Úsignr‹   Útotalsúlist[float]Ú
error_typer¹   c                ó’  ‡— t          ˆfd„t          t          ‰¦  «        ¦  «        d d d…         D ¦   «         d¦  «        x| _        }|| _        ‰|         dk    r|‰|         z  | _        nd| _        d| _        |dk    rEt          | j        ¦  «        r3t           	                    d|t          | ¦  «        j        | ¦  «         d S d S d S )Nc              3  ó4   •K  — | ]}‰|         d k    ¯|V — ŒdS )r   NrD   )rZ   rÍ  rY  s     €r4   rÿ   z!List._set_glue.<locals>.<genexpr>  s+   øè è € ÐCÐC�1°F¸1´IÀ²N°NˆQ°N°N°N°NÐCÐCrE   rÏ  r   r«   z	%s %s: %r)r
  rÊ  r:  rO  rN  rM  Ú
glue_ratiorL  r“  r”  r  r?   )rQ   ru   rX  rY  r[  Úos      `  r4   Ú	_set_gluezList._set_glue  së   ø€ å"àCÐCÐCÐC��c &™kœkÑ*Ô*¨4¨4¨R¨4Ô0ÐCÑCÔCÀQñHô Hð 	HˆŒ˜!ð ˆŒØ�!Œ9˜Š?ˆ?Ø  q¤	™MˆDŒMˆMàˆDŒNØ ˆDŒOØ�Š6ˆ6Ý�4”=Ñ!Ô!ð DÝ—’˜[Ø'­¨d©¬Ô)<¸dñDô Dð Dð Dð Dð ˆ6ðDð DrE   c                óü   •— | j         D ]}|                     ¦   «          Œt          ¦   «                              ¦   «          | j        t          k     r,| xj        t          z  c_        | xj        t          z  c_        d S d S rP   )rL  r  rà   r‰  r  rK  r  rM  )rQ   Úchildrç   s     €r4   r  zList.shrink#  st   ø€ Ø”]ð 	ð 	ˆEØ�LŠL‰NŒNˆNˆNÝ‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØÐÔ¥Ñ.ÐÔØˆMŒM¥Ñ.ˆMŒMˆMˆMð 'Ð&rE   )rH  rI  r  )
ru   r8   rX  r‹   rY  rZ  r[  r*   r+   r¹   r  )	r?   r@   rA   rB   rR   r	  r`  r  r  r  s   @r4   rG  rG  ü  s—   ø€ € € € € Ø:Ð:ðð ð ð ð ð ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ðDð Dð Dð Dð /ð /ð /ð /ð /ð /ð /ð /ð /ð /rE   rG  c                  óJ   ‡ — e Zd ZdZ	 	 	 ddˆ fd„Zdd„Zdd„Z	 	 ddd„Zˆ xZS )ÚHlistzA horizontal list of boxes.r«   Ú
additionalTrH  rI  rf   r8   r  ú"T.Literal['additional', 'exactly']Údo_kernrl   c                ó²   •— t          ¦   «                              |¦  «         |r|                      ¦   «          |                      ||¬¦  «         d| _        d S )N)rf   r  F)rà   rR   r>  ÚhpackÚ
is_phantom)rQ   rH  rf   r  rg  rç   s        €r4   rR   zHlist.__init__/  sS   ø€ õ 	‰Œ×Ò˜Ñ"Ô"Ð"Øð 	Ø�IŠI‰KŒKˆKØ�
Š
�Q˜!ˆ
ÑÔÐØˆŒˆˆrE   r+   c                óH   — t          t          d„ | j        ¦  «        ¦  «        S )Nc                ó*   — |                       ¦   «         S rP   )r  )Únodes    r4   ú<lambda>z$Hlist.is_char_node.<locals>.<lambda>:  s   €  D×$5Ò$5Ñ$7Ô$7€ rE   )Úallrc   rL  rÒ   s    r4   r  zHlist.is_char_node8  s    € å•3Ð7Ð7¸¼ÑGÔGÑHÔHÐHrE   r¹   c                ó  — g }t          j        | j        | j        dd…         ¦  «        D ]Y\  }}|                     |¦  «         |                     |¦  «        }|dk    r$t          |¦  «        }|                     |¦  «         ŒZ|| _        dS )zû
        Insert `Kern` nodes between `Char` nodes to set kerning.

        The `Char` nodes themselves determine the amount of kerning they need
        (in `~Char.get_kerning`), and this function just creates the correct
        linked list.
        r   Nr«   )Ú	itertoolsÚzip_longestrL  r»   r  ÚKern)rQ   Únew_childrenÚelem0Úelem1Úkerning_distancer>  s         r4   r>  z
Hlist.kern<  s—   € ð ˆÝ%Ô1°$´-ÀÄÈqÈrÈrÔARÑSÔSð 	*ð 	*‰LˆE�5Ø×Ò Ñ&Ô&Ð&Ø$×0Ò0°Ñ7Ô7ÐØ 2Ò%Ð%ÝÐ,Ñ-Ô-�Ø×#Ò# DÑ)Ô)Ð)øØ$ˆŒˆˆrE   c                óæ  — d}d}d}dgdz  }dgdz  }| j         D �][}t          |t          ¦  «        r5||j        z  }t	          ||j        ¦  «        }t	          ||j        ¦  «        }ŒMt          |t          ¦  «        r~||j        z  }t          j	        |j        ¦  «        sZt          j	        |j        ¦  «        sAt          |dd¦  «        }	t	          ||j        |	z
  ¦  «        }t	          ||j        |	z   ¦  «        }Œàt          |t          ¦  «        rG|j        }
||
j        z  }||
j        xx         |
j        z  cc<   ||
j        xx         |
j        z  cc<   �Œ<t          |t"          ¦  «        r
||j        z  }�Œ]|| _        || _        |dk    r||z  }|| _        ||z
  }|dk    rd| _        d| _        d| _        dS |dk    r|                      |d|d¦  «         dS |                      |d	|d
¦  «         dS )a  
        Compute the dimensions of the resulting boxes, and adjust the glue if
        one of those dimensions is pre-specified.  The computed sizes normally
        enclose all of the material inside the new box; but some items may
        stick out if negative glue is used, if the box is overfull, or if a
        ``\vbox`` includes other boxes that have been shifted left.

        Parameters
        ----------
        w : float, default: 0
            A width.
        m : {'exactly', 'additional'}, default: 'additional'
            Whether to produce a box whose width is 'exactly' *w*; or a box
            with the natural width of the contents, plus *w* ('additional').

        Notes
        -----
        The defaults produce a box with the natural width of the contents.
        r«   é   rK  re  r   Nr   ÚOverfulrÏ  ÚUnderful)rL  rƒ  r.  r9   r…   r:   r;   rN   rd   ÚisinfÚgetattrÚGlueÚ	glue_specÚstretch_orderÚstretchÚshrink_orderr  rs  rN  rO  r^  r`  )rQ   rf   r  r\   rg   ru   Útotal_stretchÚtotal_shrinkÚprD  r  s              r4   ri  zHlist.hpackM  s  € ð0 ˆØˆØˆØ˜˜q™ˆØ�t˜a‘xˆØ”ð 	ñ 	ˆAÝ˜!�TÑ"Ô"ð Ø�Q”W‘�Ý˜˜1œ8Ñ$Ô$�Ý˜˜1œ7‘O”O��Ý˜A�sÑ#Ô#ð Ø�Q”W‘�Ý”x ¤Ñ)Ô)ð ,µ"´(¸1¼7Ñ2CÔ2Cð ,Ý  >°2Ñ6Ô6�AÝ˜A˜qœx¨!™|Ñ,Ô,�AÝ˜A˜qœw¨™{Ñ+Ô+�AøÝ˜A�tÑ$Ô$ð ØœK�	Ø�Y”_Ñ$�Ø˜iÔ5Ð6Ð6Ô6¸)Ô:KÑKÐ6Ð6Ñ6Ø˜YÔ3Ð4Ð4Ô4¸	Ô8HÑHÐ4Ð4Ñ4Ñ4Ý˜A�tÑ$Ô$ð Ø�Q”W‘�ùØˆŒØˆŒ
à�ÒÐØ�‰FˆAØˆŒ
Ø�‰Eˆà�Š7ˆ7ØˆDŒNØˆDŒOØ ˆDŒOØˆFØˆrŠ6ˆ6Ø�NŠN˜1˜a °	Ñ:Ô:Ð:Ð:Ð:à�NŠN˜1˜b ,°
Ñ;Ô;Ð;Ð;Ð;rE   )r«   re  T)rH  rI  rf   r8   r  rf  rg  rl   r  r  ©r«   re  )rf   r8   r  rf  r+   r¹   )	r?   r@   rA   rB   rR   r  r>  ri  r  r  s   @r4   rd  rd  ,  sž   ø€ € € € € Ø%Ð%à>AØ9EØ!%ð ð  ð  ð  ð  ð  ð  ðIð Ið Ið Ið%ð %ð %ð %ð"  #Ø6Bð?<ð ?<ð ?<ð ?<ð ?<ð ?<ð ?<ð ?<ð ?<rE   rd  c                  óL   ‡ — e Zd ZdZ	 	 ddˆ fd
„Zdd„Zddej        fdd„Zˆ xZ	S )ÚVlistzA vertical list of boxes.r«   re  rH  rI  r\   r8   r  rf  c                óx   •— t          ¦   «                              |¦  «         |                      ||¬¦  «         d S )N)r\   r  )rà   rR   Úvpack)rQ   rH  r\   r  rç   s       €r4   rR   zVlist.__init__’  s7   ø€ å‰Œ×Ò˜Ñ"Ô"Ð"Ø�
Š
�Q˜!ˆ
ÑÔÐÐÐrE   r+   rl   c                ó   — dS ©NFrD   rÒ   s    r4   r  zVlist.is_char_node—  s   € àˆurE   Úlr¹   c                ó�  — d}d}d}dgdz  }dgdz  }| j         D �]}	t          |	t          ¦  «        rW|||	j        z   z  }|	j        }t          j        |	j        ¦  «        s)t          |	dd¦  «        }
t          ||	j        |
z   ¦  «        }Œot          |	t          ¦  «        rM||z  }d}|	j        }||j        z  }||j        xx         |j        z  cc<   ||j        xx         |j        z  cc<   ŒÑt          |	t           ¦  «        r|||	j        z   z  }d}Œöt          |	t"          ¦  «        rt%          d¦  «        ‚�Œ|| _        ||k    r|||z
  z  }|| _        n|| _        |dk    r||z  }|| _        ||z
  }|dk    rd| _        d| _        d| _        dS |dk    r|                      |d|d	¦  «         dS |                      |d
|d¦  «         dS )ak  
        Compute the dimensions of the resulting boxes, and to adjust the glue
        if one of those dimensions is pre-specified.

        Parameters
        ----------
        h : float, default: 0
            A height.
        m : {'exactly', 'additional'}, default: 'additional'
            Whether to produce a box whose height is 'exactly' *h*; or a box
            with the natural height of the contents, plus *h* ('additional').
        l : float, default: np.inf
            The maximum height.

        Notes
        -----
        The defaults produce a box with the natural height of the contents.
        r«   ry  rK  z1Internal mathtext error: Char node found in Vlistre  r   Nr   rz  rÏ  r{  )rL  rƒ  rN   r:   r;   rd   r|  r9   r}  r…   r~  r  r€  r�  r‚  r  rs  r.  ÚRuntimeErrorrN  rO  r^  r`  )rQ   r\   r  r�  rf   rg   ru   rƒ  r„  r…  rD  r  s               r4   rŠ  zVlist.vpack›  s2  € ð0 ˆØˆØˆØ˜˜q™ˆØ�t˜a‘xˆØ”ð 	Iñ 	IˆAÝ˜!�SÑ!Ô!ð IØ�Q˜œ‘\Ñ!�Ø”G�Ý”x ¤Ñ(Ô(ð ,Ý  >°2Ñ6Ô6�AÝ˜A˜qœw¨™{Ñ+Ô+�AøÝ˜A�tÑ$Ô$ð IØ�Q‘�Ø�ØœK�	Ø�Y”_Ñ$�Ø˜iÔ5Ð6Ð6Ô6¸)Ô:KÑKÐ6Ð6Ñ6Ø˜YÔ3Ð4Ð4Ô4¸	Ô8HÑHÐ4Ð4Ñ4Ð4Ý˜A�tÑ$Ô$ð IØ�Q˜œ‘[Ñ �Ø��Ý˜A�tÑ$Ô$ð IÝ"ØGñIô Ið IñIð ˆŒ
ØˆqŠ5ˆ5Ø��Q‘‰JˆAØˆDŒJˆJàˆDŒJà�ÒÐØ�‰FˆAØˆŒØ�‰Eˆà�Š6ˆ6ØˆDŒNØˆDŒOØ ˆDŒOØˆFàˆrŠ6ˆ6Ø�NŠN˜1˜a °	Ñ:Ô:Ð:Ð:Ð:à�NŠN˜1˜b ,°
Ñ;Ô;Ð;Ð;Ð;rE   r†  )rH  rI  r\   r8   r  rf  r  )r\   r8   r  rf  r�  r8   r+   r¹   )
r?   r@   rA   rB   rR   r  rd   ÚinfrŠ  r  r  s   @r4   rˆ  rˆ  �  s‘   ø€ € € € € Ø#Ð#à>AØ9Eðð ð ð ð ð ð ð
ð ð ð ð  #Ø6BØœðG<ð G<ð G<ð G<ð G<ð G<ð G<ð G<ð G<rE   rˆ  c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚRulea™  
    A solid black rectangle.

    It has *width*, *depth*, and *height* fields just as in an `Hlist`.
    However, if any of these dimensions is inf, the actual value will be
    determined by running the rule up to the boundary of the innermost
    enclosing box.  This is called a "running dimension".  The width is never
    running in an `Hlist`; the height and depth are never running in a `Vlist`.
    r9   r8   r:   r;   r0  r1  c                óf   •— t          ¦   «                              |||¦  «         |j        | _        d S rP   )rà   rR   r3  )rQ   r9   r:   r;   r0  rç   s        €r4   rR   zRule.__init__ð  s,   ø€ Ý‰Œ×Ò˜ ¨Ñ.Ô.Ð.Ø”}ˆŒˆˆrE   r¸   rL   ru   rv   rf   r\   r+   r¹   c                óH   — | j                              ||||z
  ||¦  «         d S rP   )r3  r¿   r¾   s         r4   r  zRule.renderô  s*   € àŒ×'Ò'¨°°1°q±5¸!¸QÑ?Ô?Ð?Ð?Ð?rE   )r9   r8   r:   r8   r;   r8   r0  r1  r×   )r?   r@   rA   rB   rR   r  r  r  s   @r4   r’  r’  å  sc   ø€ € € € € ðð ð%ð %ð %ð %ð %ð %ð@ð @ð @ð @ð @ð @ð @ð @rE   r’  c                  ó&   ‡ — e Zd ZdZdd	ˆ fd„Zˆ xZS )
ÚHrulez.Convenience class to create a horizontal rule.Nr0  r1  Ú	thicknessúfloat | Nonec                óž   •— |€|                      ¦   «         }|dz  x}}t          ¦   «                              t          j        |||¦  «         d S )Nrß  ©Úget_current_underline_thicknessrà   rR   rd   r�  )rQ   r0  r—  r:   r;   rç   s        €r4   rR   zHrule.__init__ü  sN   ø€ ØÐØ×=Ò=Ñ?Ô?ˆIØ" S™Ð(ˆ�Ý‰Œ×Ò�œ ¨°Ñ6Ô6Ð6Ð6Ð6rE   rP   )r0  r1  r—  r˜  r'  r  s   @r4   r–  r–  ù  sH   ø€ € € € € Ø8Ð8ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7rE   r–  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚVrulez,Convenience class to create a vertical rule.r0  r1  c                ó    •— |                      ¦   «         }t          ¦   «                              |t          j        t          j        |¦  «         d S rP   rš  )rQ   r0  r—  rç   s      €r4   rR   zVrule.__init__  s<   ø€ Ø×9Ò9Ñ;Ô;ˆ	Ý‰Œ×Ò˜¥B¤F­B¬F°EÑ:Ô:Ð:Ð:Ð:rE   )r0  r1  r'  r  s   @r4   r�  r�    sC   ø€ € € € € Ø6Ð6ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;rE   r�  c                  óB   — e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	Ú	_GlueSpecr8   r9   r�  r‹   r€  r  r‚  Nr›   rD   rE   r4   r   r     sE   € € € € € € Ø€L€L�LØ€N€N�NØÐÐÑØ€M€M�MØÐÐÑÐÐrE   r   r«   rð  r‚   rõ   g      ð¿)ÚfilÚfillÚfilllÚneg_filÚneg_fillÚ	neg_filllÚemptyÚssc                  ó0   ‡ — e Zd ZdZdˆ fd„Zd	ˆ fd„Zˆ xZS )
r~  a  
    Most of the information in this object is stored in the underlying
    ``_GlueSpec`` class, which is shared between multiple glue objects.
    (This is a memory optimization which probably doesn't matter anymore, but
    it's easier to stick to what TeX does.)
    Ú	glue_typeú`_GlueSpec | T.Literal['fil', 'fill', 'filll', 'neg_fil', 'neg_fill', 'neg_filll', 'empty', 'ss']c                óô   •— t          ¦   «                              ¦   «          t          |t          ¦  «        rt          j        |         }n't          |t          ¦  «        r|}nt          d¦  «        ‚|| _        d S )Nz.glue_type must be a glue spec name or instance)rà   rR   rƒ  r*   r   Ú_namedr2   r  )rQ   rª  r  rç   s      €r4   rR   zGlue.__init__'  sq   ø€ õ 	‰Œ×ÒÑÔÐÝ�i¥Ñ%Ô%ð 	OÝ!Ô(¨Ô3ˆIˆIÝ˜	¥9Ñ-Ô-ð 	OØ!ˆIˆIåÐMÑNÔNÐNØ"ˆŒˆˆrE   r+   r¹   c                óÊ   •— t          ¦   «                              ¦   «          | j        t          k     r1| j        }|                     |j        t          z  ¬¦  «        | _        d S d S )N©r9   )rà   r  r‰  r  r  Ú_replacer9   r  )rQ   r   rç   s     €r4   r  zGlue.shrink4  sS   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&Ø”ˆAØŸZšZ¨a¬g½Ñ.E˜ZÑFÔFˆDŒNˆNˆNð 'Ð&rE   )rª  r«  r  )r?   r@   rA   rB   rR   r  r  r  s   @r4   r~  r~    so   ø€ € € € € ðð ð#ð #ð #ð #ð #ð #ðGð Gð Gð Gð Gð Gð Gð Gð Gð GrE   r~  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )Ú	HCenteredzl
    A convenience class to create an `Hlist` whose contents are
    centered within its enclosing box.
    rH  ú
list[Node]c                óŒ   •— t          ¦   «                              t          d¦  «        g|¢t          d¦  «        ‘d¬¦  «         d S )Nr¨  F©rg  ©rà   rR   r~  rP  s     €r4   rR   zHCentered.__init__A  s?   ø€ Ý‰Œ×Ò�$˜t™*œ*Ð< xÐ<µ°d±´Ð<ÀeÐÑLÔLÐLÐLÐLrE   ©rH  r³  r'  r  s   @r4   r²  r²  ;  sQ   ø€ € € € € ðð ð
Mð Mð Mð Mð Mð Mð Mð Mð Mð MrE   r²  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )Ú	VCenteredzk
    A convenience class to create a `Vlist` whose contents are
    centered within its enclosing box.
    rH  r³  c                óˆ   •— t          ¦   «                              t          d¦  «        g|¢t          d¦  «        ‘¦  «         d S )Nr¨  r¶  rP  s     €r4   rR   zVCentered.__init__K  s:   ø€ Ý‰Œ×Ò�$˜t™*œ*Ð< xÐ<µ°d±´Ð<Ñ=Ô=Ð=Ð=Ð=rE   r·  r'  r  s   @r4   r¹  r¹  E  sG   ø€ € € € € ðð ð
>ð >ð >ð >ð >ð >ð >ð >ð >ð >rE   r¹  c                  ó@   ‡ — e Zd ZdZdZdZdˆ fd„Zdd„Zdˆ fd
„Zˆ xZ	S )rs  a�  
    A `Kern` node has a width field to specify a (normally
    negative) amount of spacing. This spacing correction appears in
    horizontal lists between letters like A and V when the font
    designer said that it looks better to move them closer together or
    further apart. A kern node can also appear in a vertical list,
    when its *width* denotes additional spacing in the vertical
    direction.
    r   r9   r8   c                óV   •— t          ¦   «                              ¦   «          || _        d S rP   )rà   rR   r9   r+  s     €r4   rR   zKern.__init__]  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ˆ
ˆ
rE   r+   r*   c                ó   — d| j         z  S )Nzk%.02fr¯  rÒ   s    r4   r	  zKern.__repr__a  s   € Ø˜$œ*Ñ$Ð$rE   r¹   c                ó–   •— t          ¦   «                              ¦   «          | j        t          k     r| xj        t
          z  c_        d S d S rP   )rà   r  r‰  r  r9   r  r  s    €r4   r  zKern.shrinkd  s@   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆJŒJ�-Ñ'ˆJŒJˆJˆJð 'Ð&rE   r,  r  r  )
r?   r@   rA   rB   r:   r;   rR   r	  r  r  r  s   @r4   rs  rs  O  s…   ø€ € € € € ðð ð €FØ€Eðð ð ð ð ð ð%ð %ð %ð %ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (rE   rs  c                  ó(   ‡ — e Zd ZdZ	 ddˆ fd„Zˆ xZS )ÚAutoHeightChara  
    A character as close to the given height and depth as possible.

    When using a font with multiple height versions of some characters (such as
    the BaKoMa fonts), the correct glyph will be selected, otherwise this will
    always just return a scaled version of the glyph.
    Nr/  r*   r:   r8   r;   r0  r1  Úfactorr˜  c                óR  •— |j                              |j        |¦  «        }|j                              |j        |j        |j        ¦  «        }|                     ¦   «         }||z   }|D ]7\  }	}
|	|_        t          |
|¦  «        }|j        |j	        z   |d|z  z
  k    r nŒ8d}|j        dk    st          |¦  «        dk    r>|€||j        |j	        z   z  }|xj        |z  c_        t          |
|¦  «        }||j	        z
  }t          ¦   «                              |g¦  «         || _        d S )Nrâ  r«   r{  r   )r3  rÎ   rU   rÇ   rV   r©   Úcopyr.  r:   r;   r:  rà   rR   rK  )rQ   r/  r:   r;   r0  rÁ  rÑ  r  Útarget_totalrÊ   r²   rž  Úshiftrç   s                €r4   rR   zAutoHeightChar.__init__s  s6  ø€ à”}×FÒFÀuÄzÐSTÑUÔUˆà”=×,Ò,¨U¬Z¸¼ÈÌÑSÔSˆà—
’
‘”ˆØ ‘~ˆØ)ð 	ð 	‰MˆH�cØ!ˆEŒJÝ˜˜UÑ#Ô#ˆDð Œ{˜TœZÑ'¨<¸#À¹.Ñ+HÒHÐHØ�ð Ið ˆØŒ:˜ÒÐ¥ LÑ 1Ô 1°QÒ 6Ð 6Øˆ~Ø%¨¬°t´zÑ)AÑB�ØˆNŒN˜fÑ$ˆNŒNÝ˜˜UÑ#Ô#ˆDà˜TœZÑ'ˆEå‰Œ×Ò˜$˜Ñ Ô Ð Ø!ˆÔÐÐrE   rP   )
r/  r*   r:   r8   r;   r8   r0  r1  rÁ  r˜  r'  r  s   @r4   rÀ  rÀ  j  sQ   ø€ € € € € ðð ð )-ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "rE   rÀ  c                  ó(   ‡ — e Zd ZdZefdˆ fd
„Zˆ xZS )ÚAutoWidthChara  
    A character as close to the given width as possible.

    When using a font with multiple width versions of some characters (such as
    the BaKoMa fonts), the correct glyph will be selected, otherwise this will
    always just return a scaled version of the glyph.
    r/  r*   r9   r8   r0  r1  Ú
char_classú
type[Char]c                óh  •— |j                              |j        |¦  «        }|                     ¦   «         }|D ]%\  }}||_         |||¦  «        }|j        |k    r nŒ&||j        z  }	|xj        |	z  c_         |||¦  «        }t          ¦   «                              |g¦  «         |j        | _        d S rP   )r3  rÎ   rU   rÃ  r9   rV   rà   rR   )rQ   r/  r9   r0  rÈ  rÑ  rÊ   r²   rž  rÁ  rç   s             €r4   rR   zAutoWidthChar.__init__™  sÂ   ø€ à”}×FÒFÀuÄzÐSTÑUÔUˆà—
’
‘”ˆØ)ð 	ð 	‰MˆH�cØ!ˆEŒJØ�:˜c 5Ñ)Ô)ˆDØŒz˜UÒ"Ð"Ø�ð #ð ˜œÑ#ˆØˆŒ˜&Ñ ˆŒØˆz˜#˜uÑ%Ô%ˆå‰Œ×Ò˜$˜Ñ Ô Ð Ø”ZˆŒ
ˆ
ˆ
rE   )r/  r*   r9   r8   r0  r1  rÈ  rÉ  )r?   r@   rA   rB   r.  rR   r  r  s   @r4   rÇ  rÇ  �  sQ   ø€ € € € € ðð ð +/ð ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  rE   rÇ  ©r   r   rM   Úxyútuple[float, float]c                óö   ‡‡‡‡‡‡	‡
‡‡‡— |\  }}dŠdŠ|Š|| j         z   Š	t          | ¦  «        Š
g Šˆfd„Šdd„Šdˆˆˆˆˆˆ	ˆ
ˆˆˆf
d
„Šdˆˆˆˆˆˆ	ˆ
ˆˆf	d„Št          | t          ¦  «        sJ ‚ ‰| ¦  «         ‰
S )a¯  
    Ship out *box* at offset *xy*, converting it to an `Output`.

    Since boxes can be inside of boxes inside of boxes, the main work of `ship`
    is done by two mutually recursive routines, `hlist_out` and `vlist_out`,
    which traverse the `Hlist` nodes and `Vlist` nodes inside of horizontal
    and vertical boxes.  The global variables used in TeX to store state as it
    processes have become local variables here.
    r«   c                ó>   •— t          ‰¦  «        s | j        |Ž  d S d S rP   )Úanyr  )rm  ÚargsÚphantoms     €r4   r  zship.<locals>.render¾  s0   ø€ Ý�7‰|Œ|ð 	ØˆDŒK˜ÐÐÐÐð	ð 	rE   Úvaluer8   r+   c                ó&   — | dk     rdn	| dk    rdn| S )Ng    eÍÍÁg    eÍÍArD   )rÓ  s    r4   Úclampzship.<locals>.clampÂ  s    € Ø˜t’|�|ˆtˆt°¸²°¨¨À5ÐHrE   rM   rd  r¹   c           	     óø  •
— d}d}| j         }| j        }‰}‰}‰                     | j        ¦  «         | j        D �]+}t          |t          ¦  «        r ‰|‰‰‰z   ‰‰z   ¦  «         ‰|j        z  ŠŒ7t          |t          ¦  «        r‰|j        z  ŠŒWt          |t          ¦  «        rˆt          |j        ¦  «        dk    r‰|j        z  ŠŒ�‰}||j        z   Št          |t          ¦  «        r ‰|¦  «         n+t          |t          ¦  «        r ‰|¦  «         n
J d¦   «         ‚||j        z   Š|ŠŒôt          |t          ¦  «        r{|j        }	|j        }
|j        }t#          j        |	¦  «        r| j        }	t#          j        |
¦  «        r| j        }
|	dk    r#|dk    r||
z   Š ‰|‰‰‰z   ‰‰z   ||	¦  «         |Š‰|z  Š�Œ„t          |t&          ¦  «        r’|j        }|j        |z
  }|dk    rq|dk    r6|j        |k    r*||j        z  }t/           ‰| j        |z  ¦  «        ¦  «        }n5|j        |k    r*||j        z  }t/           ‰| j        |z  ¦  «        ¦  «        }||z  }‰|z  Š�Œ-‰                     ¦   «          d S )Nr   r«   Fúunreachable coder   )rO  rN  r»   rj  rL  rƒ  r.  r9   rs  rG  r:  rK  rd  rˆ  rN   r:   r;   rd   r|  r~  r  r€  r�  ÚroundrM  r‚  r  Úpop)rM   Úcur_gÚcur_gluerO  rN  Ú	base_lineÚ	left_edger…  ÚedgeÚrule_heightÚ
rule_depthÚ
rule_widthr  rÕ  Úcur_hÚcur_vÚ	hlist_outÚoff_hÚoff_vr¸   rÒ  r  Ú	vlist_outs                €€€€€€€€€€r4   rä  zship.<locals>.hlist_outÅ  sÑ  ø€ ð ˆØˆØ”^ˆ
Ø”Mˆ	Øˆ	Øˆ	à�Š�s”~Ñ&Ô&Ð&à”ð 3	$ñ 3	$ˆAÝ˜!�TÑ"Ô"ð 2$Ø��q˜& %¨%¡-°¸±Ñ?Ô?Ð?Ø˜œÑ ��Ý˜A�tÑ$Ô$ð /$Ø˜œÑ ��Ý˜A�tÑ$Ô$ð -$å�q”z‘?”? aÒ'Ð'Ø˜QœWÑ$�E�Eà �DØ%¨¬Ñ6�EÝ! !¥UÑ+Ô+ð 9Ø!˜	 !™œ˜˜Ý# A¥uÑ-Ô-ð 9à!˜	 !™œ˜˜à8Ð&8Ñ8Ô8˜uØ  1¤7™N�EØ%�E�EÝ˜A�sÑ#Ô#ð $àœh�ØœW�
ØœW�
Ý”8˜KÑ(Ô(ð -Ø"%¤*�KÝ”8˜JÑ'Ô'ð +Ø!$¤�JØ ’?�? z°A¢~ ~Ø%¨
Ñ2�EØ�F˜1˜fØ  5™=¨%°%©-Ø% {ñ4ô 4ð 4ð &�EØ˜Ñ#�‘Ý˜A�tÑ$Ô$ð $àœK�	Ø&œ_¨uÑ4�
Ø ’>�>Ø  A’~�~Ø$Ô2°jÒ@Ð@Ø$¨	Ô(9Ñ9˜HÝ$)¨%¨%°´¸xÑ0GÑ*HÔ*HÑ$IÔ$I˜EøØ"Ô/°:Ò=Ð=Ø  IÔ$4Ñ4˜Ý % e e¨C¬L¸8Ñ,CÑ&DÔ&DÑ EÔ E˜Ø˜eÑ#�
Ø˜Ñ#�ùà�Š‰ŒˆˆˆrE   rˆ  c           	     ó–  •	— d}d}| j         }| j        }‰}‰| j        z  Š‰}| j        D �]}t	          |t
          ¦  «        r‰|j        z  ŠŒ#t	          |t          ¦  «        r¦t          |j        ¦  «        dk    r‰|j        |j	        z   z  ŠŒc‰|j        z  Š||j
        z   Š‰}| j        |_        t	          |t          ¦  «        r ‰|¦  «         n+t	          |t          ¦  «        r ‰|¦  «         n
J d¦   «         ‚||j	        z   Š|ŠŒÞt	          |t          ¦  «        r^|j        }	|j	        }
|j        }t          j        |¦  «        r| j        }|	|
z  }	|	dk    r!|
dk    r‰|	z  Š ‰|‰‰‰z   ‰‰z   ||	¦  «         �ŒQt	          |t           ¦  «        r”|j        }|j        |z
  }	|dk    rq|dk    r6|j        |k    r*||j        z  }t)           ‰| j        |z  ¦  «        ¦  «        }n5|j        |k    r*||j        z  }t)           ‰| j        |z  ¦  «        ¦  «        }|	|z  }	‰|	z  Š�Œút	          |t0          ¦  «        rt3          d¦  «        ‚�Œ d S )Nr   r«   Fr×  r   z1Internal mathtext error: Char node found in vlist)rO  rN  r:   rL  rƒ  rs  r9   rG  r:  r;   rK  rd  rˆ  rN   rd   r|  r~  r  r€  r�  rØ  rM  r‚  r  r.  r�  )rM   rÚ  rÛ  rO  rN  rÝ  Útop_edger…  Úsave_vrß  rà  rá  r  rÕ  râ  rã  rä  rå  ræ  r¸   r  rç  s                €€€€€€€€€r4   rç  zship.<locals>.vlist_out  s½  ø€ ð ˆØˆØ”^ˆ
Ø”Mˆ	Øˆ	Ø�”ÑˆØˆà”ð .	Iñ .	IˆAÝ˜!�TÑ"Ô"ð -IØ˜œÑ ��Ý˜A�tÑ$Ô$ð +IÝ�q”z‘?”? aÒ'Ð'Ø˜QœX¨¬Ñ/Ñ/�E�Eà˜QœXÑ%�EØ%¨¬Ñ6�EØ"�FØ!œi�A”GÝ! !¥UÑ+Ô+ð 9Ø!˜	 !™œ˜˜Ý# A¥uÑ-Ô-ð 9Ø!˜	 !™œ˜˜à8Ð&8Ñ8Ô8˜uØ" Q¤WÑ,�EØ%�E�EÝ˜A�sÑ#Ô#ð IØœh�ØœW�
ØœW�
Ý”8˜JÑ'Ô'ð +Ø!$¤�JØ˜zÑ)�Ø ’?�? z°A¢~ ~Ø˜[Ñ(�EØ�F˜1˜fØ  5™=¨%°%©-Ø% {ñ4ô 4ð 4ùõ ˜A�tÑ$Ô$ð IØœK�	Ø'œo°Ñ5�Ø ’>�>Ø  A’~�~Ø$Ô2°jÒ@Ð@Ø$¨	Ô(9Ñ9˜HÝ$)¨%¨%°´¸xÑ0GÑ*HÔ*HÑ$IÔ$I˜EøØ"Ô/°:Ò=Ð=Ø  IÔ$4Ñ4˜Ý % e e¨C¬L¸8Ñ,CÑ&DÔ&DÑ EÔ E˜Ø˜uÑ$�Ø˜Ñ$�‘Ý˜A�tÑ$Ô$ð IÝ"ØGñIô Ið IñIðY.	Ið .	IrE   )rÓ  r8   r+   r8   )rM   rd  r+   r¹   )rM   rˆ  r+   r¹   )r:   rL   rƒ  rd  )rM   rÌ  rH   rI   rÕ  râ  rã  rä  rå  ræ  r¸   rÒ  r  rç  s       @@@@@@@@@@r4   r‰   r‰   ¬  sL  øøøøøøøøøø€ ð �F€BˆØ€EØ€EØ€EØ�”‰O€EÝ�C‰[Œ[€FØ€Gðð ð ð ð ðIð Ið Ið IðAð Að Að Að Að Að Að Að Að Að Að Að Að Að AðF9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Ið 9Iõv �c�5Ñ!Ô!Ð!Ð!Ð!Ø€Iˆc�N„N€NØ€MrE   Úmsgr   c                óR   ‡ — d
ˆ fd	„}t          ¦   «                              |¦  «        S )z$Helper class to raise parser errors.rD  r*   Úlocr‹   Útoksr   r+   úT.Anyc                ó&   •— t          | |‰¦  «        ‚rP   ©r   )rD  rí  rî  rë  s      €r4   Úraise_errorzError.<locals>.raise_errorN  s   ø€ Ý! ! S¨#Ñ.Ô.Ð.rE   ©rD  r*   rí  r‹   rî  r   r+   rï  )r   Úset_parse_action)rë  rò  s   ` r4   ÚErrorrõ  L  s;   ø€ ð/ð /ð /ð /ð /ð /õ ‰7Œ7×#Ò# KÑ0Ô0Ð0rE   c                  ód   — e Zd ZdZdd
„Zdd„Zedd„¦   «         Zej        dd„¦   «         Zdd„Z	dS )r1  a   
    Parser state.

    States are pushed and popped from a stack as necessary, and the "current"
    state is always at the top of the stack.

    Upon entering and leaving a group { } or math/non-math, the stack is pushed
    and popped accordingly.
    r3  r�   rU   r*   r±   rV   r8   r©   c                óL   — || _         || _        || _        || _        || _        d S rP   )r3  Ú_fontr±   rV   r©   )rQ   r3  rU   r±   rV   r©   s         r4   rR   zParserState.__init___  s)   € àˆŒØˆŒ
Ø$ˆŒØ ˆŒØˆŒˆˆrE   r+   c                ó*   — t          j         | ¦  «        S rP   )rÃ  rÒ   s    r4   rÃ  zParserState.copyg  s   € ÝŒy˜‰ŒÐrE   c                ó   — | j         S rP   )rø  rÒ   s    r4   rU   zParserState.fontj  s
   € àŒzÐrE   rŠ  r¹   c                ó*   — |dv r|| _         || _        d S )N)r(  r*  r,  r-  r±  )r±   rø  )rQ   rŠ  s     r4   rU   zParserState.fontn  s    € àÐ7Ð7Ð7Ø"ˆDŒOØˆŒ
ˆ
ˆ
rE   c                óX   — | j                              | j        | j        | j        ¦  «        S )z.Return the underline thickness for this state.)r3  rÉ   rU   rV   r©   rÒ   s    r4   r›  z+ParserState.get_current_underline_thicknesst  s)   € àŒ|×3Ò3ØŒI�t”} d¤hñ0ô 0ð 	0rE   N)
r3  r�   rU   r*   r±   r*   rV   r8   r©   r8   ©r+   r1  r  )rŠ  r*   r+   r¹   )r+   r8   )
r?   r@   rA   rB   rR   rÃ  ÚpropertyrU   Úsetterr›  rD   rE   r4   r1  r1  T  sœ   € € € € € ðð ðð ð ð ðð ð ð ð ðð ð ñ „Xðð 
„[ðð ð ñ „[ðð
0ð 0ð 0ð 0ð 0ð 0rE   r1  ÚexprrÑ  c                óÞ   ‡— dˆfd„Š|                       dd¦  «        d         }| |k    r+|d	                     d
„  ‰|¦  «        D ¦   «         ¦  «        z   n| }||t          d|› �¦  «        z  z
  S )a¡  
    Helper to define TeX commands.

    ``cmd("\cmd", args)`` is equivalent to
    ``"\cmd" - (args | Error("Expected \cmd{arg}{...}"))`` where the names in
    the error message are taken from element names in *args*.  If *expr*
    already includes arguments (e.g. "\cmd{arg}{...}"), then they are stripped
    when constructing the parse element, but kept (and *expr* is used as is) in
    the error message.
    Úeltr   r+   úT.Generator[str, None, None]c              3  ó”   •K  — t          | t          ¦  «        r| j        D ]} ‰|¦  «        E d {V —† Œd S | j        r| j        V — d S d S rP   )rƒ  r   ÚexprsÚresultsName)r  r   Únamess     €r4   r  zcmd.<locals>.names†  s   øè è € Ý�c�?Ñ+Ô+ð 	"Øœ	ð 'ð '�Ø ˜5 ™;œ;Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð'ð 'àŒ_ð 	"Ø”/Ð!Ð!Ð!Ð!Ð!ð	"ð 	"rE   rG  r   r   rS  c              3  ó    K  — | ]	}d |z  V — Œ
dS )z{%s}NrD   )rZ   rŠ  s     r4   rÿ   zcmd.<locals>.<genexpr>Ž  s&   è è € ÐBÐB¨d˜F T™MÐBÐBÐBÐBÐBÐBrE   z	Expected )r  r   r+   r  )rg  rW  rõ  )r   rÑ  Úcsnamer3   r  s       @r4   Úcmdr
  z  s�   ø€ ð"ð "ð "ð "ð "ð "ð �ZŠZ˜˜QÑÔ Ô"€Fà�fŠnˆnð �B—G’GÐBÐB°e°e¸D±k´kÐBÑBÔBÑBÔBÑBÐBØ"&ð à�T�EÐ"3¨cÐ"3Ð"3Ñ4Ô4Ñ4Ñ5Ð5rE   c                  ó  ‡ — e Zd ZdZ G d„ dej        ¦  «        Z ed                     ¦   «         ¦  «        Z	 ed                     ¦   «         ¦  «        Z
 ed                     ¦   «         ¦  «        Ze	e
z  ez  Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed	                     ¦   «         ¦  «        Z ed
                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Zeez  ez  Z ed„  e ed¦  «         ed¦  «        dz   ¦  «        D ¦   «         ¦  «        Z eej        ¦  «        ZdŒd„Zd�d„ZdŽd!„ZdŒd"„Z dŒd#„Z!d�d'„Z"d�d(„Z#d‘d*„Z$d‘d+„Z% e&e'j(        ¦  «        Z)d‘d,„Z*d’d/„Z+d0d0d0d1d1d2d3d3d4dd5d6d7œZ,d‘d8„Z-d‘d9„Z.d“d=„Z/d”d>„Z0d‘d?„Z1d‘d@„Z2d‘dA„Z3i dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“dVdW“dXdQ“dYdI“dZdK“d[dM“d\dO“d]dC“d^d_d`daœ¥Z4 edb                     ¦   «         ¦  «        Z5d‘dc„Z6d”dd„Z7d”de„Z8d‘df„Z9d‘dg„Z:d‘dh„Z;e;Z<d•di„Z=d”dj„Z>d‘dk„Z?d–do„Z@d–dp„ZAd–dq„ZBd”ˆ fdr„ZCd—dz„ZDd‘d{„ZEd‘d|„ZFd‘d}„ZGd‘d~„ZHd‘d„ZId”d€„ZJeJxZKZLd‘d�„ZMd‘d‚„ZNd‘dƒ„ZOd˜dˆ„ZPd‘d‰„ZQd‘dŠ„ZRd‘d‹„ZSˆ xZTS )™ÚParserzÕ
    A pyparsing-based parser for strings containing math expressions.

    Raw text may also appear outside of pairs of ``$``.

    The grammar is based directly on that in TeX, though it cuts a few corners.
    c                  ó   — e Zd ZdZdZdZdZdS )úParser._MathStyler   r   r‚   rõ   N)r?   r@   rA   ÚDISPLAYSTYLEÚ	TEXTSTYLEÚSCRIPTSTYLEÚSCRIPTSCRIPTSTYLErD   rE   r4   Ú
_MathStyler  œ  s%   € € € € € ØˆØˆ	ØˆØÐÐÐrE   r  uÂ  + * - âˆ’
      \pm             \sqcap                   \rhd
      \mp             \sqcup                   \unlhd
      \times          \vee                     \unrhd
      \div            \wedge                   \oplus
      \ast            \setminus                \ominus
      \star           \wr                      \otimes
      \circ           \diamond                 \oslash
      \bullet         \bigtriangleup           \odot
      \cdot           \bigtriangledown         \bigcirc
      \cap            \triangleleft            \dagger
      \cup            \triangleright           \ddagger
      \uplus          \lhd                     \amalg
      \dotplus        \dotminus                \Cap
      \Cup            \barwedge                \boxdot
      \boxminus       \boxplus                 \boxtimes
      \curlyvee       \curlywedge              \divideontimes
      \doublebarwedge \leftthreetimes          \rightthreetimes
      \slash          \veebar                  \barvee
      \cupdot         \intercal                \amalg
      \circledcirc    \circleddash             \circledast
      \boxbar         \obar                    \merge
      \minuscolon     \dotsminusdots
      aF  
      = < > :
      \leq          \geq          \equiv       \models
      \prec         \succ         \sim         \perp
      \preceq       \succeq       \simeq       \mid
      \ll           \gg           \asymp       \parallel
      \subset       \supset       \approx      \bowtie
      \subseteq     \supseteq     \cong        \Join
      \sqsubset     \sqsupset     \neq         \smile
      \sqsubseteq   \sqsupseteq   \doteq       \frown
      \in           \ni           \propto      \vdash
      \dashv        \dots         \doteqdot    \leqq
      \geqq         \lneqq        \gneqq       \lessgtr
      \leqslant     \geqslant     \eqgtr       \eqless
      \eqslantless  \eqslantgtr   \lesseqgtr   \backsim
      \backsimeq    \lesssim      \gtrsim      \precsim
      \precnsim     \gnsim        \lnsim       \succsim
      \succnsim     \nsim         \lesseqqgtr  \gtreqqless
      \gtreqless    \subseteqq    \supseteqq   \subsetneqq
      \supsetneqq   \lessapprox   \approxeq    \gtrapprox
      \precapprox   \succapprox   \precnapprox \succnapprox
      \npreccurlyeq \nsucccurlyeq \nsqsubseteq \nsqsupseteq
      \sqsubsetneq  \sqsupsetneq  \nlesssim    \ngtrsim
      \nlessgtr     \ngtrless     \lnapprox    \gnapprox
      \napprox      \approxeq     \approxident \lll
      \ggg          \nparallel    \Vdash       \Vvdash
      \nVdash       \nvdash       \vDash       \nvDash
      \nVDash       \oequal       \simneqq     \triangle
      \triangleq         \triangleeq         \triangleleft
      \triangleright     \ntriangleleft      \ntriangleright
      \trianglelefteq    \ntrianglelefteq    \trianglerighteq
      \ntrianglerighteq  \blacktriangleleft  \blacktriangleright
      \equalparallel     \measuredrightangle \varlrtriangle
      \Doteq        \Bumpeq       \Subset      \Supset
      \backepsilon  \because      \therefore   \bot
      \top          \bumpeq       \circeq      \coloneq
      \curlyeqprec  \curlyeqsucc  \eqcirc      \eqcolon
      \eqsim        \fallingdotseq \gtrdot     \gtrless
      \ltimes       \rtimes       \lessdot     \ne
      \ncong        \nequiv       \ngeq        \ngtr
      \nleq         \nless        \nmid        \notin
      \nprec        \nsubset      \nsubseteq   \nsucc
      \nsupset      \nsupseteq    \pitchfork   \preccurlyeq
      \risingdotseq \subsetneq    \succcurlyeq \supsetneq
      \varpropto    \vartriangleleft \scurel
      \vartriangleright \rightangle \equal     \backcong
      \eqdef        \wedgeq       \questeq     \between
      \veeeq        \disin        \varisins    \isins
      \isindot      \varisinobar  \isinobar    \isinvb
      \isinE        \nisd         \varnis      \nis
      \varniobar    \niobar       \bagmember   \ratio
      \Equiv        \stareq       \measeq      \arceq
      \rightassert  \rightModels  \smallin     \smallowns
      \notsmallowns \nsimeqa­  
     \leftarrow \longleftarrow \uparrow \Leftarrow \Longleftarrow
     \Uparrow \rightarrow \longrightarrow \downarrow \Rightarrow
     \Longrightarrow \Downarrow \leftrightarrow \updownarrow
     \longleftrightarrow \updownarrow \Leftrightarrow
     \Longleftrightarrow \Updownarrow \mapsto \longmapsto \nearrow
     \hookleftarrow \hookrightarrow \searrow \leftharpoonup
     \rightharpoonup \swarrow \leftharpoondown \rightharpoondown
     \nwarrow \rightleftharpoons \leadsto \dashrightarrow
     \dashleftarrow \leftleftarrows \leftrightarrows \Lleftarrow
     \Rrightarrow \twoheadleftarrow \leftarrowtail \looparrowleft
     \leftrightharpoons \curvearrowleft \circlearrowleft \Lsh
     \upuparrows \upharpoonleft \downharpoonleft \multimap
     \leftrightsquigarrow \rightrightarrows \rightleftarrows
     \rightrightarrows \rightleftarrows \twoheadrightarrow
     \rightarrowtail \looparrowright \rightleftharpoons
     \curvearrowright \circlearrowright \Rsh \downdownarrows
     \upharpoonright \downharpoonright \rightsquigarrow \nleftarrow
     \nrightarrow \nLeftarrow \nRightarrow \nleftrightarrow
     \nLeftrightarrow \to \Swarrow \Searrow \Nwarrow \Nearrow
     \leftsquigarrow \overleftarrow \overleftrightarrow \cwopencirclearrow
     \downzigzagarrow \cupleftarrow \rightzigzagarrow \twoheaddownarrow
     \updownarrowbar \twoheaduparrow \rightarrowbar \updownarrows
     \barleftarrow \mapsfrom \mapsdown \mapsup \Ldsh \Rdsh
     z, ; . ! \ldotp \cdotpz}
       \sum \prod \coprod \bigcap \bigcup \bigsqcup \bigvee
       \bigwedge \bigodot \bigotimes \bigoplus \biguplus
       zlim liminf limsup sup max minz.\int \oint \iint \oiint \iiint \oiiint \iiiintz:rm cal it tt sf bf bfit default bb frak scr regular normalz¢
      arccos csc ker min arcsin deg lg Pr arctan det lim sec arg dim
      liminf sin cos exp limsup sinh cosh gcd ln sup cot hom log tan
      coth inf max tanhzn
      | \| / \backslash \uparrow \downarrow \updownarrow \Uparrow
      \Downarrow \Updownarrow . \vert \Vertz[
      ( [ \{ < \lfloor \langle \lceil \lbrace \leftbrace \lbrack \leftparen \lgroup
      z]
      ) ] \} > \rfloor \rangle \rceil \rbrace \rightbrace \rbrack \rightparen \rgroup
      c                ó¤   — g | ]M}t          j        t          |¦  «        ¦  «                             ¦   «         d                               ¦   «         ‘ŒNS )rÏ  )r–  rŠ  r•  rg  rí   )rZ   rÍ  s     r4   r]   zParser.<listcomp>.  sX   € ð Gð Gð GÈ�Ô(­¨Q©¬Ñ0Ô0×6Ò6Ñ8Ô8¸Ô<×BÒBÑDÔDð Gð Gð GrE   u   Î±u   Ï‰r   r+   r¹   c                ó€  ‡ ‡— t          j        ¦   «         ŠdNˆˆ fd„}dOd	„}t          d
¦  «        ‰_         t	          ‰ j        ¦  «        d¦  «        ‰_         t	          d„ ‰ j        D ¦   «         ¦  «        d¦  «        ‰_         t          dd 	                    d 
                    t          t          j        t          ¦  «        ¦  «        ¦  «        z   ¦  «        d¦  «                             ¦   «         ‰_         t          d¦  «        d¦  «        ‰_         |d‰ j        ¦  «        ‰_        t)          d t	          ‰ j        ¦  «        d¦  «        z   ¦  «        dz   ‰_        t-          d¦  «        ‰_        t	          ‰ j        ¦  «        ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_         ‰xj        ‰j        z  c_         |¦   «          ‰xj        d tC          ‰j         ¦  «        d¦  «        z   dz   z  c_        ‰xj        d tE          ‰j         ¦  «        d¦  «        z   dz   z  c_        tG          dd‰                     d¦  «        z   dz   ¦  «        ‰_$        tG          d‰                     d¦  «        ¦  «        ‰_%        tG          d‰                     d¦  «        ¦  «        ‰_&        tG          d‰                     d¦  «        ¦  «        ‰_'         |dg ‰ j(        ¢‰ j)        ¢¦  «        ‰                     d¦  «        z
  ‰_*         |d‰ j+        ¦  «        ‰_,        ‰j         tC          ‰j         ¦  «        d¦  «        z   ‰j        z   ‰_-        ‰j         tC          ‰j         ¦  «        d¦  «        z   t]          ¦   «         z   ‰_/        tG          d‰                     d¦  «        ‰                     d ¦  «        z   ¦  «        ‰_0        tG          d!‰                     d¦  «        ‰                     d ¦  «        z   ¦  «        ‰_1        tG          d"‰                     d¦  «        ‰                     d ¦  «        z   ¦  «        ‰_2        tG          d#d t)          ‰j        ¦  «        d$¦  «        z   dz   dz    t)          ‰j        ¦  «        d%¦  «        z   dz   dz   ‰                     d&¦  «        z   dz   dz    t)          ‰j        ¦  «        d'¦  «        z   dz   ‰                     d¦  «        z   ‰                     d ¦  «        z   ¦  «        ‰_3        tG          d(t)          d) tE          ti          d*¦  «        ‰j         z   ¦  «        d+¦  «        z   d*z   ¦  «        ‰                     d¦  «        z   ¦  «        ‰_5        tG          d,‰                     d-¦  «        ¦  «        ‰_6        tG          d.‰                     d-¦  «        ¦  «        ‰_7        tG          d/‰                     d0¦  «        ‰                     d-¦  «        z   ¦  «        ‰_8        tG          d1‰                     d0¦  «        ‰                     d-¦  «        z   ¦  «        ‰_9        tG          d2tu          dd3d¬4¦  «        ¦  «        ‰_;        tG          d5 ty          ddt{          tE          ‰j         ¦  «        ¦  «        tC          t-          d6¦  «         >                    ¦   «         ¦  «        z   ¬7¦  «        d8¦  «        ¦  «        ‰_?         t)          ‰j        ¦  «        d9¦  «         tE          t	          d:d;g¦  «        ‰j        z
  ¦  «        d<¦  «        z    t          d=¦  «        d>¦  «        z    t          d?¦  «        d>¦  «        z  ‰                     d9¦  «         t          d=¦  «        d>¦  «        z   z  ‰_@        ‰j        ‰j$        z  ‰j        z  ‰j@        z  ‰_A        ‰xj         ‰jA        ‰j        z  ‰j/        z  ‰j        z  z  c_         tG          d@d tC          ‰jA        ¦  «        d¦  «        z   dz   ¦  «        ‰_B        tG          dAd tC          ‰jA        ¦  «        d¦  «        z   dz   ¦  «        ‰_C        ‰xj        ‰j%        ‰j&        z  ‰j'        z  ‰j*        z  ‰j        z  ‰j,        z  ‰jB        z  ‰j-        z  ‰j0        z  ‰j1        z  ‰j2        z  ‰j3        z  ‰j8        z  ‰j9        z  ‰j5        z  ‰j6        z  ‰j7        z  ‰j;        z  ‰jC        z  ‰j?        z  ‰j        z  z  c_        dB‰                     dC¦  «        t‰          dD¦  «        z  z
  }‰xj        dE‰                     dF¦  «        t‰          dD¦  «        z  z
   tC          ‰jA        ‰j        z  |z  ¦  «        dG¦  «        z   dHz   ‰                     dI¦  «        t‰          dD¦  «        z  z
  z  c_        tE          ‰j         ¦  «        ‰_E        tu          dJd3dK¬L¦  «        ‰_F        t          dM¦  «                             ¦   «         ‰_G        ‰jG        tC          ‰jF        ‰jG        z   ¦  «        z   t]          ¦   «         z   ‰_H         |¦   «          ‰jH        ‰ _I        ‰jE        ‰ _J        dK‰ _K        d S )PNr+   r¹   c                 ó  •— t          ‰¦  «                             ¦   «         D ]f\  } }|                      d¦  «        sL| dvr|                     | ¦  «         t	          ‰| ¦  «        r#|                     t          ‰| ¦  «        ¦  «         Œgd S )NÚ_)ÚtokenÚ	placeableÚ
auto_delim)Úvarsr4  r˜  Úset_nameÚhasattrrô  r}  )r5  rþ   r…  rQ   s     €€r4   Úset_names_and_parse_actionsz4Parser.__init__.<locals>.set_names_and_parse_actions6  s™   ø€ Ý  ™GœGŸMšM™OœOð 	Að 	A‘��SØ—~’~ cÑ*Ô*ð Að Ð"FÐFÐFØŸš SÑ)Ô)Ð)å˜t SÑ)Ô)ð AØ×,Ò,­W°T¸3Ñ-?Ô-?Ñ@Ô@Ð@øð	Að 	ArE   Úgroupr*   r  úIterable[str]r   c                óž  — g }g }|D ]G}|d                               ¦   «         r|                     |¦  «         Œ2|                     |¦  «         ŒHt          d                     | d                     t          t          j        |¦  «        ¦  «        |rdndd                     t          t          j        |¦  «        ¦  «        ¬¦  «        ¦  «        S )NrÏ  z<\\(?P<{group}>(?:{alpha})(?![A-Za-z]){additional}{nonalpha})ú|rS  )r  Úalphare  Únonalpha)Úisalphar»   r   rT  rW  rc   ÚreÚescape)r  r  Úends_with_alphaÚends_with_nonalpharŠ  s        r4   Úcsnamesz Parser.__init__.<locals>.csnamesE  sÓ   € Ø ˆOØ!#ÐØð 4ð 4�Ø˜”8×#Ò#Ñ%Ô%ð 4Ø#×*Ò*¨4Ñ0Ô0Ð0Ð0à&×-Ò-¨dÑ3Ô3Ð3Ð3ÝØO×VÒVØØŸ(š(¥3¥r¤y°/Ñ#BÔ#BÑCÔCØ&8Ð@˜s˜s¸bØ ŸXšX¥c­"¬)Ð5GÑ&HÔ&HÑIÔIð	 Wñ ô ñô ð rE   z[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)Úspacec                ó6   — g | ]}t          |j        ¦  «        ‘ŒS rD   )r*   rÓ  )rZ   Úes     r4   r]   z#Parser.__init__.<locals>.<listcomp>Z  s    € Ð3Ð3Ð3˜a�S�”‰\Œ\Ð3Ð3Ð3rE   Ústyle_literalzI[a-zA-Z0-9 +\-*/<>=:,.;!\?&'@()\[\]|\U00000080-\U0001ffff]|\\[%${}\[\]_|]z|\\(?:{})(?![A-Za-z])r"  r²   z\\[A-Za-z]+rŠ  rU   z\mathrG  rI  z\hspacez\phantomrÓ  z\llapz\rlapÚaccentz\fracrW   Údenz\dfracz\binomz\genfracÚldelimÚrdelimÚrulesizeÚstylez\sqrt{value}rK  rM  Úrootz	\overlineÚbodyz
\underlinez\oversetÚ
annotationz	\undersetz\textr-   )Úend_quote_charz	\substackz\\)ÚopenerÚcloserÚcontentÚpartsÚnucleusr  r\  Úsubsuperz'*Úapostrophesz'+z\operatornamez\boldsymbolú\middleÚmdelimzExpected a delimiterz\leftÚleftrÉ  z\rightÚrightú$F)Úunquote_resultsz(?:(?:\\[$])|[^$])*r  )r  r*   r  r   r+   r   )LÚtypesÚSimpleNamespacer   Úfloat_literalr   Ú_space_widthsr+  r  r.  rT  rW  rc   r&  r'  r   Úleave_whitespacer)   Úunknown_symbolÚ
_fontnamesrU   r   Ústart_groupr   Ú	end_groupÚ_delimsÚdelimr   r  r  Únamed_placeableÚrequired_groupÚoptional_groupr  r   r   r
  ÚcustomspacerÒ  ÚllapÚrlapÚ_accent_mapÚ_wide_accentsr/  Ú_function_namesÚfunctionr  r   Úunclosed_groupÚfracÚdfracÚbinomÚgenfracr
   ÚsqrtÚoverlineÚ	underlineÚoversetÚundersetr   Útextr   r	   ÚsuppressÚsubstackr>  ÚsimpleÚoperatornameÚ
boldsymbolrõ  r‡   Úmath_stringÚnon_mathÚmainÚ_expressionÚ_math_expressionÚ_needs_space_after_subsuper)rQ   r  r*  rA  r…  s   `   @r4   rR   zParser.__init__3  s�
  øø€ ÝÔ!Ñ#Ô#ˆð
	Að 
	Að 
	Að 
	Að 
	Að 
	Að 
	Að	ð 	ð 	ð 	õ" !Ð!CÑDÔDˆŒØ5�6 $Ô"4Ñ5Ô5°gÑ>Ô>ˆŒð5�6Ø3Ð3 4¤?Ð3Ñ3Ô3ñ5ô 5Ø5DñFô FˆŒð
�5ðà&×-Ò-Ø—’��RœY­Ñ0Ô0Ñ1Ô1ñ3ô 3ñ3ñ
ô 
ð
 ñô ÷
 "Ò!Ñ#Ô#ð 	
Œð 1�5 Ñ0Ô0°Ñ8Ô8ˆÔà"˜7 6¨4¬?Ñ;Ô;ˆŒÝ# HÐ/F­v°d´oÑ/FÔ/FÀvÑ/NÔ/NÑ$NÑOÔOÐRUÑUˆŒÝ" 3™<œ<ˆŒå! $¤,Ñ/Ô/ˆŒõ %™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆÔÝ$™YœYˆÔÝ$™YœYˆÔÝ$™YœYˆŒð 	
ÐÔ˜aœkÑ)ÐÔà#Ð#Ñ%Ô%Ð%à	ÐÔ˜SÐ#6¥:¨a¬gÑ#6Ô#6°wÑ#?Ô#?Ñ?À#ÑEÑEÐÔØ	ÐÔ˜SÐ#5¥9¨Q¬WÑ#5Ô#5°gÑ#>Ô#>Ñ>ÀÑDÑDÐÔå˜J¨¨a¯oªo¸gÑ.FÔ.FÑ(FÈÑ(LÑMÔMˆŒå˜ Q×%5Ò%5°gÑ%>Ô%>Ñ?Ô?ˆŒ	Ý�X˜q×/Ò/°Ñ8Ô8Ñ9Ô9ˆŒÝ�X˜q×/Ò/°Ñ8Ô8Ñ9Ô9ˆŒð ˆG�HÐF Ô 0ÐF°4Ô3EÐFÑGÔGØ×Ò Ñ&Ô&ñ'ð 	
Œð �W˜V TÔ%9Ñ:Ô:ˆŒ
à”-Ð"5¥*¨Q¬WÑ"5Ô"5°gÑ">Ô">Ñ>ÀÄÑLˆŒØœMÐ,?­J°q´wÑ,?Ô,?ÀÑ,HÔ,HÑHÍ9É;Ì;ÑVˆÔå�h × 0Ò 0°Ñ 7Ô 7¸!×:JÒ:JÈ5Ñ:QÔ:QÑ QÑRÔRˆŒÝ�i ×!1Ò!1°%Ñ!8Ô!8¸1×;KÒ;KÈEÑ;RÔ;RÑ!RÑSÔSˆŒÝ�i ×!1Ò!1°%Ñ!8Ô!8¸1×;KÒ;KÈEÑ;RÔ;RÑ!RÑSÔSˆŒåØØÐ#•(˜1œ7Ñ#Ô# HÑ-Ô-Ñ-°Ñ3ØñØ%•H˜QœWÑ%Ô% hÑ/Ô/ñ0Ø25ñ6àñà—O’O JÑ/Ô/ñ0à25ñ6ð ñð .•H˜Qœ_Ñ-Ô-¨gÑ6Ô6ñ7ð :=ñ=ð ×Ò˜uÑ%Ô%ñ	&ð
 ×Ò˜uÑ%Ô%ñ&ñ'ô 'ˆŒ	õ ØÝ�SÐ;�9¥V¨C¡[¤[°1´7Ñ%:Ñ;Ô;¸FÑCÔCÑCÀcÑIÑJÔJØ×Ò˜wÑ'Ô'ñ(ñ)ô )ˆŒõ
 ˜ q×'7Ò'7¸Ñ'?Ô'?Ñ@Ô@ˆŒ
å˜-¨×)9Ò)9¸&Ñ)AÔ)AÑBÔBˆŒåØØ×Ò˜\Ñ*Ô*¨Q×-=Ò-=¸fÑ-EÔ-EÑEñGô GˆŒ	õ ØØ×Ò˜\Ñ*Ô*¨Q×-=Ò-=¸fÑ-EÔ-EÑEñGô GˆŒ
õ �X�|¨C°ÀcÐJÑJÔJÑKÔKˆŒå˜ðO�;¨c¸#Ý/4µY¸q¼wÑ5GÔ5GÑ/HÔ/HÝ'1µ'¸&±/´/×2JÒ2JÑ2LÔ2LÑ'MÔ'Mñ0NðOñ Oô OàOVñXô XñYô YˆŒ
ð #�X�a”kÑ"Ô" 9Ñ-Ô-Ø:�y�  c 
Ñ+Ô+¨a¬kÑ9Ñ:Ô:¸:ÑFÔFñGà�u�T‰{Œ{˜=Ñ)Ô)ñ*ð �e�D‰kŒk˜-Ñ(Ô(ñ)ð × Ò  Ñ+Ô+¨k­e°D©k¬k¸-Ñ.HÔ.HÑHñ	Jð 	
Œ
ð ”7˜Qœ]Ñ*¨Q¬VÑ3°a´jÑ@ˆŒà	ˆŒØŒHØŒlñàÔñð Ôññ	
ˆŒõ Ð-¨sÐ5IµZÀÄÑ5IÔ5IÈ&Ñ5QÔ5QÑ/QÐTWÑ/WÑXÔXˆŒåØ˜CÐ"6¥*¨Q¬XÑ"6Ô"6°wÑ"?Ô"?Ñ?À#ÑEñGô GˆŒð 	
ˆŒØŒI˜œÑ ¤Ñ'ØŒhñàŒhñð Œjñ	ð
 Œnñð Œgñð Œfñð Œgñð Œgñ	ð Œiñ
ð Œiñð Œjñð Œfñð Œjñð Œkñð  Œfñ!ð" Œlñ#ð$ Œjñ%ð& Œlñ'ñ	
ˆŒð. ˜qŸwšw xÑ0Ô0µ5Ð9OÑ3PÔ3PÑPÑQˆØ	ˆŒØ˜Ÿš ™œ­%Ð0FÑ*GÔ*GÑGÑHØ:�j˜œ A¤LÑ0°6Ñ9Ñ:Ô:¸5ÑAÔAñBàñàŸ7š7 7Ñ+Ô+­eÐ4JÑ.KÔ.KÑKñMñ	
ˆŒõ $ A¤GÑ,Ô,ˆŒÝ& s¨DÀ%ÐHÑHÔHˆŒÝÐ 6Ñ7Ô7×HÒHÑJÔJˆŒ
àŒJ� A¤M°A´JÑ$>Ñ?Ô?Ñ?Å)Á+Ä+ÑMð 	
Œð 	$Ð#Ñ%Ô%Ð%àœ6ˆÔØ !¤ˆÔð ,1ˆÔ(Ð(Ð(rE   rD  r*   Úfonts_objectr�   rV   r8   r©   rd  c                óz  — t          |dd||¦  «        g| _        i | _        	 | j                             |¦  «        }n8# t
          $ r+}t          d|                     d¦  «        z   ¦  «        d‚d}~ww xY wg | _        d| _        i | _        t          j
        ¦   «          t          j        t          |d         ¦  «        S )z±
        Parse expression *s* using the given *fonts_object* for
        output, at the given *fontsize* and *dpi*.

        Returns the parse tree of `Node` instances.
        rÞ   r*  rR  r   NF)r1  Ú_state_stackÚ_em_width_cachern  Úparse_stringr   r2   Úexplainrp  r   Úreset_cacherî   rï   rd  )rQ   rD  rq  rV   r©   Úresultr3   s          r4   ÚparsezParser.parseõ  sÂ   € õ ˜ i°°xÀÑEÔEðGˆÔàFHˆÔð	>ØÔ%×2Ò2°1Ñ5Ô5ˆFˆFøÝ!ð 	>ð 	>ð 	>Ý˜T C§K¢K°¡N¤NÑ2Ñ3Ô3¸Ð=øøøøð	>øøøàˆÔØ+0ˆÔ(à!ˆÔÝÔ!Ñ#Ô#Ð#ÝŒv•e˜V AœYÑ'Ô'Ð's   ¢= ½
A2Á&A-Á-A2r1  c                ó   — | j         d         S )z&Get the current `State` of the parser.rÏ  )rs  rÒ   s    r4   Ú	get_statezParser.get_state
	  s   € àÔ  Ô$Ð$rE   c                ó8   — | j                              ¦   «          dS )zPop a `State` off of the stack.N)rs  rÙ  rÒ   s    r4   Ú	pop_statezParser.pop_state	  s   € àÔ×ÒÑÔÐÐÐrE   c                ó‚   — | j                              |                      ¦   «                              ¦   «         ¦  «         dS )z=Push a new `State` onto the stack, copying the current state.N)rs  r»   r{  rÃ  rÒ   s    r4   Ú
push_statezParser.push_state	  s5   € àÔ× Ò  §¢Ñ!1Ô!1×!6Ò!6Ñ!8Ô!8Ñ9Ô9Ð9Ð9Ð9rE   rî  r   úlist[Hlist]c                óF   — t          |                     ¦   «         ¦  «        gS rP   )rd  Úas_list©rQ   rî  s     r4   rm  zParser.main	  s   € Ý�d—l’l‘n”nÑ%Ô%Ð&Ð&rE   c                óV   — | j                              |d         dd…         d¬¦  «        S )Nr   r   rÏ  T)Ú	parse_all)ro  ru  rƒ  s     r4   rk  zParser.math_string	  s*   € ØÔ$×1Ò1°$°q´'¸!¸B¸$´-È4Ð1ÑPÔPÐPrE   rï  c                ór   — t          |                     ¦   «         ¦  «        }|                      ¦   «          |gS rP   )rd  r‚  r}  )rQ   rî  Úhlists      r4   r‡   zParser.math	  s.   € Ý�d—l’l‘n”nÑ%Ô%ˆØ�ŠÑÔÐØˆwˆrE   c                óö   ‡ — |d                               dd¦  «        }ˆ fd„|D ¦   «         }t          |¦  «        }‰                      ¦   «          t          j        d         ‰                      ¦   «         _        |gS )Nr   z\$rD  c                óT   •— g | ]$}t          |‰                     ¦   «         ¦  «        ‘Œ%S rD   )r.  r{  )rZ   r/  rQ   s     €r4   r]   z#Parser.non_math.<locals>.<listcomp>#	  s-   ø€ Ð8Ð8Ð8°•4˜˜4Ÿ>š>Ñ+Ô+Ñ,Ô,Ð8Ð8Ð8rE   r  )Úreplacerd  r  r  r  r{  rU   )rQ   rî  rD  Úsymbolsr‡  s   `    r4   rl  zParser.non_math!	  so   ø€ Ø�ŒG�OŠO˜E 3Ñ'Ô'ˆØ8Ð8Ð8Ð8°aÐ8Ñ8Ô8ˆÝ�g‘”ˆà�ŠÑÔÐÝ #¤Ð-?Ô @ˆ�ŠÑÔÔØˆwˆrE   c                óÒ   ‡— |                       ¦   «          |                      ¦   «         Šd‰_        t          ˆfd„|d         D ¦   «         ¦  «        }|                      ¦   «          |gS )Nr*  c                ó0   •— g | ]}t          |‰¦  «        ‘ŒS rD   )r.  )rZ   r/  r0  s     €r4   r]   zParser.text.<locals>.<listcomp>0	  s!   ø€ Ð7Ð7Ð7¨!•t˜A˜u‘~”~Ð7Ð7Ð7rE   r   )r  r{  rU   rd  r}  )rQ   rî  r‡  r0  s      @r4   re  zParser.text,	  sf   ø€ Ø�ŠÑÔÐØ—’Ñ Ô ˆØˆŒ
ÝÐ7Ð7Ð7Ð7¨t°A¬wÐ7Ñ7Ô7Ñ8Ô8ˆØ�ŠÑÔÐØˆwˆrE   Ú
percentagers  c                ó  — |                       ¦   «         }|j        |j        |j        f}| j                             |¦  «        }|€0|j                             d|j        |j        ¦  «        }|| j        |<   t          ||z  ¦  «        S )Nr(  )	r{  rU   rV   r©   rt  ré   r3  rÅ   rs  )rQ   rŽ  r0  r5  r9   s        r4   Ú_make_spacezParser._make_space4	  s}   € ð —’Ñ Ô ˆØŒz˜5œ>¨5¬9Ð5ˆØÔ$×(Ò(¨Ñ-Ô-ˆØˆ=Ø”M×*Ò*¨8°U´^ÀUÄYÑOÔOˆEØ(-ˆDÔ  Ñ%Ý�E˜JÑ&Ñ'Ô'Ð'rE   g…¶œKqUÅ?gý0Bx´qÌ?g‚çÞÃ%ÇÑ?g¾¤1ZGUÕ?rß  r‚   g…¶œKqUÅ¿)ú\,z
\thinspacez\/z\>z\:z\;z\ r]  z\enspacez\quadz\qquadz\!c                óX   — | j         |d                  }|                      |¦  «        }|gS ©Nr+  )rI  r�  )rQ   rî  rW   rM   s       r4   r+  zParser.spaceR	  s-   € ØÔ   g¤Ô/ˆØ×Ò˜sÑ#Ô#ˆØˆuˆrE   c                ó:   — |                       |d         ¦  «        gS r“  )r�  rƒ  s     r4   rT  zParser.customspaceW	  s   € Ø× Ò   g¤Ñ/Ô/Ð0Ð0rE   rí  r‹   úParseResults | dict[str, str]c                óÎ  — |d         }|dk    rd}	 t          ||                      ¦   «         ¦  «        }n'# t          $ r}t          ||d|z  ¦  «        |‚d }~ww xY w|| j        v r¹t          d„ |d |…         d d d…         D ¦   «         d¦  «        }| j        sI|| j        v rCt          |d |…          	                    ¦   «         ¦  «        dk    s|d	h| j
        £| j        £v r|gS t          |                      d
¦  «        ||                      d
¦  «        gd¬¦  «        gS || j        v r½t          d„ |d |…         d d d…         D ¦   «         d¦  «        }t          d„ ||dz   d …         D ¦   «         d¦  «        }|dk    r|d	k    r	|dk    r|gS |dk    r+|                     ¦   «         r|                     ¦   «         r|gS t          ||                      d
¦  «        gd¬¦  «        gS |gS )Nr²   ú-r	  zUnknown symbol: %sc              3  ó&   K  — | ]}|d k    ¯|V — ŒdS ©r8  NrD   ©rZ   r/  s     r4   rÿ   z Parser.symbol.<locals>.<genexpr>m	  ó&   è è € ÐCÐC A¸!¸sº(¸(˜a¸(¸(¸(¸(ÐCÐCrE   rÏ  rS  r   rG  râ  Trµ  c              3  ó&   K  — | ]}|d k    ¯|V — ŒdS r™  rD   rš  s     r4   rÿ   z Parser.symbol.<locals>.<genexpr>{	  r›  rE   c              3  ó&   K  — | ]}|d k    ¯|V — ŒdS r™  rD   rš  s     r4   rÿ   z Parser.symbol.<locals>.<genexpr>|	  s&   è è € ÐAÐA A¸¸Sº¸˜a¸¸¸¸ÐAÐArE   r   ú,rI  ú.)r.  r{  r2   r   Ú_spaced_symbolsr
  rp  Ú_binary_operatorsr:  rg  Ú_left_delimsÚ_relation_symbolsrd  r�  Ú_punctuation_symbolsr;  )	rQ   rD  rí  rî  r/  rž  r3   Ú	prev_charÚ	next_chars	            r4   r)   zParser.symbolZ	  sv  € à�ŒKˆØ�Š8ˆ8ð !ˆAð	IÝ˜˜4Ÿ>š>Ñ+Ô+Ñ,Ô,ˆDˆDøÝð 	Ið 	Ið 	IÝ% a¨Ø&:¸QÑ&>ñ@ô @ØEHðIøøøøð	Iøøøð �Ô$Ð$Ð$õ ÐCÐC¨¨4¨C¨4¬°°°2°¬ÐCÑCÔCÀRÑHÔHˆIð Ô0ð 	-Ø˜Ô/Ð/Ð/Ý˜˜$˜3˜$œŸš™œÑ(Ô(¨AÒ-Ð-°Øð?JØ"Ô/ð?JØ26Ô2Hð?Jð 2Jð 2Jà�v�å˜t×/Ò/°Ñ4Ô4Ø#Ø#×/Ò/°Ñ4Ô4ð6ð '+ð,ñ ,ô ,ð -ð -ð �$Ô+Ð+Ð+ÝÐCÐC¨¨4¨C¨4¬°°°2°¬ÐCÑCÔCÀRÑHÔHˆIÝÐAÐA¨¨3°©7¨8¨8¬ÐAÑAÔAÀ2ÑFÔFˆIð �CŠxˆxØ Ò#Ð#¨	°SÒ(8Ð(8Ø ˜6�Mð �CŠxˆx˜I×-Ò-Ñ/Ô/ˆx°I×4EÒ4EÑ4GÔ4GˆxØ�v�å˜t T×%5Ò%5°cÑ%:Ô%:Ð;ÀTÐJÑJÔJÐKÐKØˆvˆs   ’"5 µ
A¿AÁAc                ó6   — t          ||d|d         › �¦  «        ‚)NzUnknown symbol: rŠ  rñ  ©rQ   rD  rí  rî  s       r4   rK  zParser.unknown_symbolŠ	  s!   € Ý! ! SÐ*K¸TÀ&¼\Ð*KÐ*KÑLÔLÐLrE   c                ó,   — d|d         _         |d         S )NTrÓ  )rj  rƒ  s     r4   rÒ  zParser.phantom�	  s   € Ø#'ˆˆWŒÔ Ø�GŒ}ÐrE   c                ód   — t          t          |d         j         ¦  «        |d         g¦  «        gS ©NrÓ  ©rd  rs  r9   rƒ  s     r4   rU  zParser.llap‘	  s.   € Ý•t˜T 'œ]Ô0Ð0Ñ1Ô1°4¸´=ÐAÑBÔBÐCÐCrE   c                ód   — t          |d         t          |d         j         ¦  «        g¦  «        gS r«  r¬  rƒ  s     r4   rV  zParser.rlap”	  s.   € Ý�t˜G”}¥d¨D°¬MÔ,?Ð+?Ñ&@Ô&@ÐAÑBÔBÐCÐCrE   Úhatz\circumflexaccentÚbrevez\combiningbreveÚbarz\combiningoverlineÚgravez\combininggraveaccentÚacutez\combiningacuteaccentÚtildez\combiningtildeÚdotz\combiningdotaboveÚddotz\combiningdiaeresisÚdddotz\combiningthreedotsaboveÚddddotz\combiningfourdotsaboveÚvecz\combiningrightarrowaboveú"ú`ú'r]  rŸ  r\  z\rightarrowz
\leftarrowz\circ)ÚoverrightarrowÚoverleftarrowÚmathringzwidehat widetilde widebarc                ó\  — |                       ¦   «         }|                     ¦   «         }|d         }|d         }|| j        v r1t          d|z   |j        |t
          ¬¦  «        }t          |g¦  «        }not          | j        |         |¦  «        }|dk    r(|                     ¦   «          |                     ¦   «          t          t          |j        dz  ¦  «        |g¦  «        }| 
                    |j        d¦  «         t          |t          d|d	z  ¦  «        t          |g¦  «        g¦  «        S )
Nr/  r²   r-   )rÈ  r¾  g      @Úexactlyr«   g       @)r{  r›  rX  rÇ  r9   rB  r²  rW  r  r)  ri  rˆ  r$  rd  )rQ   rî  r0  r—  r/  r²   Ú
accent_boxÚcentereds           r4   r/  zParser.accent°	  s+  € Ø—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	Ø�h”ˆØ�5Œkˆà�TÔ'Ð'Ð'Ý&Ø�v‘˜sœy¨%½FðDñ Dô DˆJå  * Ñ.Ô.ˆHˆHå Ô 0°Ô 8¸%Ñ@Ô@ˆJØ˜Ò#Ð#Ø×!Ò!Ñ#Ô#Ð#Ø×!Ò!Ñ#Ô#Ð#Ý ¥$ s¤y°3¡Ñ"7Ô"7¸Ð!DÑEÔEˆHØ�Š�s”y )Ñ,Ô,Ð,ÝØÝ�R˜ S™Ñ)Ô)Ý�s�e‘”ðñ ô ð 	rE   c                óN   — |                       |||¦  «        }|d         |_        |S )NrŠ  )ri  Úfunction_name)rQ   rD  rí  rî  r‡  s        r4   rZ  zParser.functionÇ	  s*   € Ø×!Ò! ! S¨$Ñ/Ô/ˆØ" 6œlˆÔØˆrE   c                ó"  — |                       ¦   «          |                      ¦   «         }d|_        g }|d         }|D ]–}t          |t          ¦  «        r1d|_        |                     ¦   «          |                     |¦  «         ŒHt          |t          ¦  «        r$|                     t	          ||¦  «        ¦  «         Œ�|                     |¦  «         Œ—|t          |¦  «        z   dz   }t          |t          ¦  «        r|t          d¦  «        z  }t          d„ ||d …         D ¦   «         d¦  «        }	| j        ddhz  }
|	|
vr$||                      | j        d	         ¦  «        gz  }|                      ¦   «          |	d
v | _        t!          |¦  «        S )Nr*  rŠ  r   zoperatorname{}c              3  ó&   K  — | ]}|d k    ¯|V — ŒdS r™  rD   rš  s     r4   rÿ   z&Parser.operatorname.<locals>.<genexpr>ß	  s&   è è € ÐCÐC ¸!¸sº(¸(˜!¸(¸(¸(¸(ÐCÐCrE   rS  r\  r  r‘  >   r  r\  )r  r{  rU   rƒ  r.  r4  r»   r*   r:  r   r
  rO  r�  rI  r}  rp  rd  )rQ   rD  rí  rî  r0  Ú
hlist_listrŠ  r/  Únext_char_locr¦  Ú
delimiterss              r4   ri  zParser.operatornameÌ	  sš  € Ø�ŠÑÔÐØ—’Ñ Ô ˆØˆŒ
Ø!#ˆ
à�FŒ|ˆØð 	%ð 	%ˆAÝ˜!�TÑ"Ô"ð %Ø�”Ø×!Ò!Ñ#Ô#Ð#Ø×!Ò! !Ñ$Ô$Ð$Ð$Ý˜A�sÑ#Ô#ð %Ø×!Ò!¥$ q¨%¡.¤.Ñ1Ô1Ð1Ð1à×!Ò! !Ñ$Ô$Ð$Ð$Ø�c $™iœi™¨!Ñ+ˆÝ�d�LÑ)Ô)ð 	3Ø�SÐ!1Ñ2Ô2Ñ2ˆMÝÐCÐC Q } ~ ~Ô%6ÐCÑCÔCÀRÑHÔHˆ	Ø”\ S¨# JÑ.ˆ
Ø˜JÐ&Ð&à˜4×+Ò+¨DÔ,>¸uÔ,EÑFÔFÐGÑGˆJØ�ŠÑÔÐð ,5¸
Ð+BˆÔ(Ý�ZÑ Ô Ð rE   c                ó°   — |                       ¦   «          |                     d¦  «        r,|                     d¦  «        |                      ¦   «         _        g S ©NrU   )r  ré   r{  rU   rƒ  s     r4   rM  zParser.start_groupê	  sI   € Ø�ŠÑÔÐà�8Š8�FÑÔð 	5Ø$(§H¢H¨VÑ$4Ô$4ˆD�NŠNÑÔÔ!Øˆ	rE   c                óN   — t          |                     dg ¦  «        ¦  «        }|gS ©Nr  ©rd  ré   )rQ   rî  Úgrps      r4   r  zParser.groupñ	  s$   € Ý�D—H’H˜W bÑ)Ô)Ñ*Ô*ˆØˆuˆrE   c                óH   — t          |                     dg ¦  «        ¦  «        S rÍ  rÎ  rƒ  s     r4   rR  zParser.required_groupõ	  s   € Ý�T—X’X˜g rÑ*Ô*Ñ+Ô+Ð+rE   c                ó.   — |                       ¦   «          g S rP   )r}  rÒ   s    r4   rN  zParser.end_groupú	  s   € Ø�ŠÑÔÐØˆ	rE   c                ó>   — t          |t          |¦  «        d¦  «        ‚)NzExpected '}')r   r:  r¨  s       r4   r[  zParser.unclosed_groupþ	  s   € Ý! !¥S¨¡V¤V¨^Ñ<Ô<Ð<rE   c                óD   — |d         |                       ¦   «         _        g S rË  )r{  rU   rƒ  s     r4   rU   zParser.font
  s   € Ø $ V¤ˆ�ŠÑÔÔØˆ	rE   r=  r  rl   c                ó²   — t          |t          ¦  «        r|j        | j        v S t          |t          ¦  «        rt          |d¦  «        r|j        | j        v S dS )NrÄ  F)rƒ  r.  r/  Ú_overunder_symbolsrd  r  rÄ  Ú_overunder_functions©rQ   r=  s     r4   Úis_overunderzParser.is_overunder
  s`   € Ý�g�tÑ$Ô$ð 	FØ”9 Ô 7Ð7Ð7Ý˜¥Ñ'Ô'ð 	F­G°G¸_Ñ,MÔ,Mð 	FØÔ(¨DÔ,EÐEÐEØˆurE   c                óL   — t          |t          ¦  «        r|j        | j        v S dS rŒ  )rƒ  r.  r/  Ú_dropsub_symbolsr×  s     r4   Ú
is_dropsubzParser.is_dropsub
  s)   € Ý�g�tÑ$Ô$ð 	6Ø”9 Ô 5Ð5Ð5ØˆurE   c                óX   — t          |t          ¦  «        r|                     ¦   «         S dS rŒ  )rƒ  r.  r<  r×  s     r4   r<  zParser.is_slanted
  s+   € Ý�g�tÑ$Ô$ð 	(Ø×%Ò%Ñ'Ô'Ð'ØˆurE   c           	     óÔ  •— |                      dt          d¦  «        ¦  «        }|                      dg ¦  «        }t          |                      dg ¦  «        ¦  «        }|s|s|S d x}}|r4|^}	}
}|	dk    r|�t          d¦  «        ‚|
}n|�t          d¦  «        ‚|
}|°4|                      ¦   «         }|j                             |j        |j        |j	        ¦  «        }|j         
                    |j        |j        |j	        ¦  «        }|r||€t          g ¦  «        }t          |¦  «        D ]3}|j                             |                      ||dd	i¦  «        ¦  «         Œ4|                     ¦   «          |                     ¦   «          |                      |¦  «        �r©g }d
}|j        }|�)|                     ¦   «          t+          ||j        ¦  «        }|�)|                     ¦   «          t+          ||j        ¦  «        }|dz  }|�Kt-          |g¦  «        }|                     |d¦  «         |                     |t/          d|¦  «        g¦  «         t-          |g¦  «        }|                     |d¦  «         |                     |¦  «         |�]t-          |g¦  «        }|                     |d¦  «         |                     t/          d|¦  «        |g¦  «         |j        |z   |j        z   }t7          |¦  «        }||_        | j        r!|                      | j        d         ¦  «        gng }d| _        t          |g|¢¦  «        }|gS |}tA          |t          ¦  «        r–|j        }t          |¦  «        rntA          |d         tB          ¦  «        r%tA          |d         tD          ¦  «        r
|d d…         }|d         }tA          |tD          ¦  «        r|j#        j$        |_        t          |d¬¦  «        }n6tA          |tD          ¦  «        r|j#        j$        |_        t          |g¦  «        }|j         %                    ¦   «         }|j        }d
}|  &                    |¦  «        r|j        }|j'        |z  }|j'        |z  }|  (                    |¦  «        re||j'        |z  z  }||j)        ||dz  dz  z
  z  z  }|  &                    |¦  «        r+d|j'        z  |j*        z
  |z  }d|j'        z  |j*        z   |z  }nd}| +                    ¦   «         rd
}d
}nW|j         
                    |j        |j        tX          z  |j	        ¦  «        } |j        |j-        | z  z
  }|j        |j.        | z  z   }|€�t          tC          |¦  «        t_          j0        tb          |¦  «        g¦  «        }!|!                     ¦   «          |  &                    |¦  «        r||j.        |z  z   }n't+          ||j2        |z  |!j        |dz  dz  z
  ¦  «        }||!_        �nst          tC          |¦  «        |g¦  «        }!|!                     ¦   «          |  &                    |¦  «        r||j.        |z  z
  }n$t+          ||j3        |z  |!j        |dz  z   ¦  «        }|€	| |!_        nït          tC          |¦  «        |g¦  «        }"|"                     ¦   «          |  &                    |¦  «        r||j.        |z  z   }nt+          ||j4        |z  ¦  «        }d|z  ||!j        z
  |"j        |z
  z
  z
  }#|#d
k    r(||#z  }|dz  dz  |z
  |!j        z   }#|#dk    r
||#z  }||#z  }t7          |!tC          ||!j        z
  |"j        |z
  z
  ¦  «        |"g¦  «        }!||!_        |  &                    |¦  «        s|!xj        |j5        |z  z  c_        | j        r!|                      | j        d         ¦  «        gng }d| _        t          ||!g|¢¦  «        }|gS )Nr=  r   r>  r?  r  zDouble subscriptzDouble superscriptr²   r¬  r«   g      @rÀ  r‘  FrÏ  éþÿÿÿrµ  r‚   rõ   ry  é   )6ré   r)  r:  r   r{  r3  rÉ   rU   rV   r©   rÇ   rd  rÊ  rL  Úextendr)   r>  ri  rØ  r9   r  r…   r²  r$  r»   r:   r;   rˆ  rK  rp  r�  rI  rƒ  rs  r.  r9  r–   rÓ   rÛ  rá  r<  rã  rå  r  r  rÚ  rÛ  rî   rï   r  rÞ  rÜ  rà  rÙ  )%rQ   rD  rí  rî  r=  r>  ÚnapostrophesÚsubrà   ÚopÚargr0  Úrule_thicknessr  rÍ  ÚvlistrÅ  r9   Úvgapr‡  ÚvltÚoptional_spacingrx  Ú	last_charrt  r  Ú	lc_heightÚlc_baselineÚ	superkernÚsubkernÚshift_upÚ
shift_downÚshrunk_x_heightru   rv   Úclrrç   s%                                       €r4   r>  zParser.subsuper
  s=  ø€ Ø—(’(˜9¥d¨1¡g¤gÑ.Ô.ˆØ—8’8˜J¨Ñ+Ô+ˆÝ˜4Ÿ8š8 M°2Ñ6Ô6Ñ7Ô7ˆàð 	 ð 	ØˆNàÐˆˆeØð 		Ø!)ÐˆB��hØ�SŠyˆyØ�?Ý-Ð.@ÑAÔAÐAØ��àÐ$Ý-Ð.BÑCÔCÐCØ�ð ð 		ð —’Ñ Ô ˆØœ×>Ò>ØŒJ˜œ¨¬	ñ3ô 3ˆà”=×,Ò,¨U¬Z¸¼ÈÌÑSÔSˆàð 	Øˆ}Ý˜b™	œ	�Ý˜<Ñ(Ô(ð Oð O�Ø”×%Ò% d§k¢k°!°S¸5À)Ð:LÑ&MÔ&MÑNÔNÐNÐNð �JŠJ‰LŒLˆLØ�KŠK‰MŒMˆMð ×Ò˜WÑ%Ô%ñ 	ØˆEØˆEØ”MˆEØÐ Ø—’‘”�Ý˜E 5¤;Ñ/Ô/�ØˆØ—
’
‘”�Ý˜E 3¤9Ñ-Ô-�à! CÑ'ˆDØÐ Ý! 5 'Ñ*Ô*�Ø—’˜E 9Ñ-Ô-Ð-Ø—’˜e¥T¨!¨T¡]¤]Ð3Ñ4Ô4Ð4Ý˜w˜iÑ(Ô(ˆEØ�KŠK˜˜yÑ)Ô)Ð)Ø�LŠL˜ÑÔÐØˆÝ! 3 %Ñ(Ô(�Ø—’˜E 9Ñ-Ô-Ð-Ø—’�d 1 d™mœm¨UÐ3Ñ4Ô4Ð4Øœ tÑ+¨g¬mÑ;�Ý˜‘,”,ˆCØ$ˆCÔà#'Ô#Cð!L ×!1Ò!1°$Ô2DÀUÔ2KÑ!LÔ!LÐ MÐ MØIKð à/4ˆDÔ,Ý˜CÐ3Ð"2Ð3Ñ4Ô4ˆFØ�8ˆOð ˆ	Ý�g�uÑ%Ô%ð 	'Ø"Ô+ˆLÝ�<Ñ Ô ð Aå˜|¨BÔ/µÑ6Ô6ð 5Ý" <°Ô#3µTÑ:Ô:ð5à#/°°°Ô#4�LØ(¨Ô,�	Ý˜i­Ñ.Ô.ð AØ&/Ô&8Ô&@�I”Oå˜L°%Ð8Ñ8Ô8ˆGˆGå˜'¥4Ñ(Ô(ð =Ø"+Ô"4Ô"<�	”Ý˜W˜IÑ&Ô&ˆGð ”×1Ò1Ñ3Ô3ˆØÔ&ˆ	ØˆØ�?Š?˜9Ñ%Ô%ð 	*Ø#œ/ˆKð ”L 8Ñ+ˆ	Ø”, Ñ)ˆØ�?Š?˜9Ñ%Ô%ð 	Ø˜œ¨Ñ0Ñ0ˆIØ˜Ô-°¸XÈ¹\ÈAÑ=MÑ1MÑNÑNˆIØ�Š˜yÑ)Ô)ð Ø˜vœ|Ñ+¨fÔ.CÑCÀyÑP�Ø ¤Ñ-°Ô0EÑEÈÑR�	�	à�ð ×ÒÑ!Ô!ð 	JØˆHØˆJˆJà#œm×7Ò7Ø”
˜EœN­]Ñ:¸E¼IñGô GˆOà”~¨¬¸Ñ(HÑHˆHØ œ¨¬¸/Ñ)IÑIˆJð ˆ=õ
 •t˜G‘}”}¥a¤f­T°3Ñ&7Ô&7Ð8Ñ9Ô9ˆAØ�HŠH‰JŒJˆJØ�Š˜yÑ)Ô)ð >Ø(¨6¬>¸HÑ+DÑD�
�
å  ¨V¬[¸8Ñ-CØ!"¤¨H°q©L¸1Ñ,<Ñ!<ñ>ô >�
à'ˆAŒN‰Nõ •t˜I‘”¨Ð.Ñ/Ô/ˆAØ�HŠH‰JŒJˆJØ�Š˜yÑ)Ô)ð YØ$ v¤~¸Ñ'@Ñ@��å˜x¨¬°xÑ)?ÀÄÈ8ÐVWÉ<ÑAWÑXÔX�Øˆ{Ø"* �”�õ �4 ™=œ=¨#Ð.Ñ/Ô/�Ø—’‘
”
�
Ø—?’? 9Ñ-Ô-ð IØ!,¨v¬~ÀÑ/HÑ!H�J�Jå!$ Z°´¸xÑ1GÑ!HÔ!H�Jð ˜>Ñ)Ø! A¤GÑ+°´¸:Ñ0EÑFñH�à˜’8�8Ø #Ñ%�JØ" Q™,¨Ñ*¨XÑ5¸¼Ñ?�CØ˜Q’w�wØ  C™˜Ø" cÑ)˜
ÝØÝ˜( Q¤WÑ,°´¸JÑ1FÑGÑHÔHØðñ ô �ð ",�”à�Š˜yÑ)Ô)ð 	6ØˆGŒG�vÔ*¨XÑ5Ñ5ˆGŒGð
  $Ô?ðH˜T×-Ò-¨dÔ.@ÀÔ.GÑHÔHÐIÐIØEGð 	à+0ˆÔ(Ý˜ Ð6Ð%5Ð6Ñ7Ô7ˆØˆxˆrE   r1  r2  Úruler˜  r4  rW   r0  c           	     ó&  — |                       ¦   «         }|                     ¦   «         }|j                             |j        |j        |j        ¦  «        }	|j                             ¦   «         }
|j                             |j        |j        |j        ¦  «        }t          |j
        ¦  «        D ]4}|t          z  }|                     ¦   «          |                     ¦   «          Œ5t          |g¦  «        }t          |g¦  «        }t          |j        |j        ¦  «        }|                     |d¦  «         |                     |d¦  «         |rÓ|| j        j        u r|
j        |z  }|
j        |z  }d|z  }n|
j        |z  }|
j        |z  }|}|dz  }t          ||j        z
  |	|z   z
  |¦  «        }t          |	|z
  |j        |z
  z
  |¦  «        }t3          |t5          d|¦  «        t7          ||¦  «        t5          d|¦  «        |g¦  «        }|j        |z   |z   |	z
  |_        n©|| j        j        u r|
j        |z  }|
j        |z  }d|z  }n|
j        |z  }|
j        |z  }d|z  }||j        z
  |j        |z
  z
  }t          ||¦  «        }t3          |t5          d|¦  «        |g¦  «        }||_        ||k     r|xj        ||z
  dz  z  c_        t=          t?          |¦  «        |t?          |¦  «        g¦  «        g}|s|r|                       |pd||pd¦  «        S |S )NrÀ  rõ   r‚   r   é   rŸ  )!r{  r›  r3  rÂ   rU   rV   r©   rÓ   rÇ   rÊ  rÓ  r  r  r²  r…   r9   ri  r  r  ræ  ré  rç  rê  r;   r:   rˆ  r$  r–  rK  rè  rd  r)  Ú_auto_sized_delimiter)rQ   r1  r2  ró  r4  rW   r0  r0  r—  r
  r  r  r  ÚcnumÚcdenr9   Únum_shift_upÚden_shift_downrò  rá  Únum_clrÚden_clrræ  Úmin_clrÚdef_clrrx  s                             r4   Ú_genfraczParser._genfracË
  sL  € à—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	à”m×3Ò3ØŒJ˜œ¨¬	ñ3ô 3ˆà”×1Ò1Ñ3Ô3ˆØ”=×,Ò,¨U¬Z¸¼ÈÌÑSÔSˆå�u”{Ñ#Ô#ð 	ð 	ˆAØ�Ñ%ˆHØ�JŠJ‰LŒLˆLØ�JŠJ‰LŒLˆLˆLÝ˜#˜ÑÔˆÝ˜#˜ÑÔˆÝ�C”I˜sœyÑ)Ô)ˆØ�
Š
�5˜)Ñ$Ô$Ð$Ø�
Š
�5˜)Ñ$Ô$Ð$ð ð &	>Ø˜œÔ4Ð4Ð4Ø%œ{¨XÑ5�Ø!'¤°Ñ!9�Ø˜$‘h��à%œ{¨XÑ5�Ø!'¤°Ñ!9�Ø�Ø˜1‘HˆEÝ˜<¨$¬*Ñ4¸ÀuÑ9LÑMÈsÑSÔSˆGÝ˜;¨Ñ.°4´;ÀÑ3OÑPÐRUÑVÔVˆGÝ˜4Ý  7Ñ+Ô+Ý  ¨Ñ-Ô-Ý  7Ñ+Ô+Øð	ñ ô ˆEð "&¤¨wÑ!6¸Ñ!>ÀÑ!LˆEÔÐð ˜œÔ4Ð4Ð4Ø%œ{¨XÑ5�Ø!'¤°Ñ!9�Ø˜i™-��à%œ{¨XÑ5�Ø!'¤°Ñ!9�Ø˜i™-�Ø# d¤jÑ0°T´[À>Ñ5QÑRˆGÝ�g˜wÑ'Ô'ˆCÝ˜4Ý  3™<œ<Øðñ ô ˆEð "0ˆEÔØ˜Ò Ð ØÐ"Ô" w°Ñ'8¸AÑ&=Ñ=Ð"Ô"å*/Ý�‰OŒOØÝ�‰OŒOð1
ñ +ô +ð *ˆð
 ð 	T�Vð 	TØ×-Ò-¨f¨m¸¸VÀVÀ]ÈsÑSÔSÐSØˆrE   c                óR   — |                       t          |d         ¦  «        ¦  «        S )Nr.  )r  r‹   rƒ  s     r4   r.  zParser.style_literal  s!   € Ø�Š�s 4¨Ô#8Ñ9Ô9Ñ:Ô:Ð:rE   c           	     óæ   — |                       |                     dd¦  «        |                     dd¦  «        |d         |                     d| j        j        ¦  «        |d         |d         ¦  «        S )Nr1  rS  r2  r3  r4  rW   r0  )rÿ  ré   r  r  rƒ  s     r4   r_  zParser.genfrac  sc   € Ø�}Š}Ø�HŠH�X˜rÑ"Ô" D§H¢H¨X°rÑ$:Ô$:Ø�Ô˜dŸhšh w°´Ô0IÑJÔJØ�ŒK˜˜eœñ&ô &ð 	&rE   c           	     óª   — |                       dd|                      ¦   «                              ¦   «         | j        j        |d         |d         ¦  «        S ©NrS  rW   r0  )rÿ  r{  r›  r  r  rƒ  s     r4   r\  zParser.frac  sL   € Ø�}Š}Ø��D—N’NÑ$Ô$×DÒDÑFÔFØŒOÔ% t¨E¤{°D¸´KñAô Að 	ArE   c           	     óª   — |                       dd|                      ¦   «                              ¦   «         | j        j        |d         |d         ¦  «        S r  )rÿ  r{  r›  r  r  rƒ  s     r4   r]  zParser.dfrac  sL   € Ø�}Š}Ø��D—N’NÑ$Ô$×DÒDÑFÔFØŒOÔ(¨$¨u¬+°t¸E´{ñDô Dð 	DrE   c           	     ób   — |                       ddd| j        j        |d         |d         ¦  «        S )Nr@  rE  r   rW   r0  )rÿ  r  r  rƒ  s     r4   r^  zParser.binom$  s6   € Ø�}Š}Ø��aØŒOÔ% t¨E¤{°D¸´KñAô Að 	ArE   c                ó>  — |d         }|d         }|                       ¦   «                              ¦   «         }|                     ¦   «          t          |g¦  «        }t          |g¦  «        }t	          |j        |j        ¦  «        }	|                     |	d¦  «         |                     |	d¦  «         |dz  }
||dz            dk    r8t          |t          d|
¦  «        |g¦  «        }|j	        |j
        z   |
z   |_        n t          |t          d|
¦  «        |g¦  «        }|S )Nr7  r6  rÀ  rõ   r   Úur   )r{  r›  r  r²  r…   r9   ri  rˆ  r$  r;   r:   rK  )rQ   rD  rí  rî  r7  r6  r—  Úcentered_annotationÚcentered_bodyr9   rç  ræ  s               r4   Ú_gensetzParser._genset)  s/  € Ø˜,Ô'ˆ
Ø�FŒ|ˆØ—N’NÑ$Ô$×DÒDÑFÔFˆ	à×ÒÑÔÐÝ'¨¨Ñ5Ô5ÐÝ! 4 &Ñ)Ô)ˆÝÐ'Ô-¨}Ô/BÑCÔCˆØ×!Ò! %¨Ñ3Ô3Ð3Ø×Ò˜E 9Ñ-Ô-Ð-à˜1‰}ˆØˆS�1‰WŒ:˜ÒÐÝØÝ�Q˜‘”Ø#ðñ ô ˆEð "/Ô!4Ð7JÔ7QÑ!QÐTXÑ!XˆEÔÐåØ#Ý�Q˜‘”Øðñ ô ˆEð ˆrE   c                ó’  — |                      d¦  «        }|d         }|                      ¦   «         }|                     ¦   «         }|j        |j        z
  d|z  z   }|j        |j        z   }t          d|||¦  «        }|j        |j        z
  }|j        |j        z   }t          t          d|z  ¦  «        |t          d|z  ¦  «        g¦  «        }	t          t          |¦  «        t          d¦  «        |	g¦  «        }
|
                     ||j        |j        z  dz  z   d|¦  «         |st          d	|j        z  d
d
¦  «        }n7t          |¦  «        }|                     ¦   «          |                     ¦   «          t          t          |g¦  «        g¦  «        }| dz  |_        t          |t%          d|j        z  ¦  «        ||
g¦  «        }|gS )Nr5  rÓ  rß  rW  r‚   r¢  é°  rÀ  rß  r«   rò  g      à¿)ré   r{  r›  r:   rK  r;   rÀ  rd  r)  rˆ  r–  r~  rŠ  rV   r©   rN   r9   r  rs  )rQ   rî  r5  r6  r0  r—  r:   r;   ÚcheckÚpadded_bodyÚ	rightsideÚ
root_vlistr‡  s                r4   r`  zParser.sqrtK  sº  € Ø�xŠx˜ÑÔˆØ�GŒ}ˆØ—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	ð ”˜tÔ0Ñ0°1°y±=Ñ@ˆØ”
˜TÔ.Ñ.ˆÝ˜|¨V°U¸EÑBÔBˆØ” Ô 2Ñ2ˆØ”˜eÔ0Ñ0ˆõ �T ! i¡-Ñ0Ô0°$½¸QÀ¹]Ñ8KÔ8KÐLÑMÔMˆÝ�5 ™<œ<­¨f©¬°{ÐCÑDÔDˆ	à�Š˜ %¤.°5´9Ñ"<ÀÑ!JÑJØ! 5ñ	*ô 	*ð 	*ð
 ð 	Ý�s˜Uœ[Ñ(¨"¨bÑ1Ô1ˆDˆDå˜‘;”;ˆDØ�KŠK‰MŒMˆMØ�KŠK‰MŒMˆMå�E 4 &™MœM˜?Ñ+Ô+ˆ
Ø#) '¨C¡-ˆ
ÔåØÝ�˜œÑ#Ñ$Ô$ØØð	
ñ ô ˆð ˆwˆrE   c                ó˜  — |d         }|                       ¦   «         }|                     ¦   «         }|j        |j        z
  d|z  z   }|j        |j        z   }t          t          |¦  «        t          d¦  «        t          |g¦  «        g¦  «        }| 	                    ||j
        |j        z  dz  z   d|¦  «         t          |g¦  «        }|gS )Nr6  rõ   r¢  r  rÀ  )r{  r›  r:   rK  r;   rˆ  r–  r~  rd  rŠ  rV   r©   )	rQ   rî  r6  r0  r—  r:   r;   r  r‡  s	            r4   ra  zParser.overlinet  sÆ   € Ø�FŒ|ˆà—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	à”˜tÔ0Ñ0°1°y±=Ñ@ˆØ”
˜TÔ.Ñ.ˆõ �5 ™<œ<­¨f©¬µu¸d¸V±}´}ÐEÑFÔFˆ	ð 	�Š˜ %¤.°5´9Ñ"<ÀÑ!JÑJØ! 5ñ	*ô 	*ð 	*õ �y�kÑ"Ô"ˆØˆwˆrE   c                óZ  — |d         }|                       ¦   «         }|                     ¦   «         }t          t          |g¦  «        t	          d|z  ¦  «        t          ||¦  «        g¦  «        }|j        |j        z   |z   }|j        |_        ||j        z
  |_        t          |g¦  «        gS )Nr6  rõ   )r{  r›  rˆ  rd  rs  r–  r:   r;   )rQ   rî  r6  r0  r—  ræ  rá  s          r4   rb  zParser.underline‡  s£   € Ø�FŒ|ˆØ—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	åÝ�4�&‰MŒMÝ��Y‘ÑÔÝ�%˜Ñ#Ô#ð
ñ ô ˆð
 ”˜uœ{Ñ*¨YÑ6ˆØ”{ˆŒØ˜eœlÑ*ˆŒÝ�u�g‘”ÐÐrE   ÚfrontÚmiddleúlist[Box | Char | str]Úbackc           	     ó  — |                       ¦   «         }t          |¦  «        rÙt          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }d }t          |¦  «        D ]g\  }}	|	dk    r\t	          j        t          ||dz            ¦  «        }
|
dk    rt          |
||||¬¦  «        ||dz   <   n|                     |
¦  «         ||= Œht	          j        t          t          t          z           |¦  «        }nd}d}d}g }g }|dk    r'|                     t          |||||¬¦  «        ¦  «         |                     |¦  «         |dk    r'|                     t          |||||¬¦  «        ¦  «         t          |¦  «        }|S )	Nc                óF   — g | ]}t          |t          ¦  «        °|j        ‘ŒS rD   )rƒ  r*   r:   ©rZ   ru   s     r4   r]   z0Parser._auto_sized_delimiter.<locals>.<listcomp>›  s)   € ÐMÐMÐM q½*ÀQÍÑ:LÔ:LÐM˜!œ(ÐMÐMÐMrE   c                óF   — g | ]}t          |t          ¦  «        °|j        ‘ŒS rD   )rƒ  r*   r;   r  s     r4   r]   z0Parser._auto_sized_delimiter.<locals>.<listcomp>œ  s)   € ÐKÐKÐK Q½
À1ÅcÑ8JÔ8JÐK˜œÐKÐKÐKrE   r@  r   rŸ  )rÁ  r   rð  )r{  r:  r…   Ú	enumeraterî   rï   r*   rÀ  ÚremoverÃ  rN   r.  r»   rà  rd  )rQ   r  r  r  r0  r:   r;   rÁ  ÚidxÚelr/  Úmiddle_partr<  r‡  s                 r4   rö  zParser._auto_sized_delimiter–  s·  € ð —’Ñ Ô ˆÝˆv‰;Œ;ð 	ÝÐMÐM¨FÐMÑMÔMÑNÔNˆFÝÐKÐK¨&ÐKÑKÔKÑLÔLˆEØˆFÝ$ VÑ,Ô,ð $ð $‘��RØ˜Ò#Ð#Ýœ�s F¨3°©7¤OÑ4Ô4�AØ˜C’x�xÝ*8Ø ! 6¨5°%Àð+Hñ +Hô +H˜˜s Q™w™˜ð Ÿš aÑ(Ô(Ð(Ø˜s˜øõ œ&¥¥c­D¡jÔ!1°6Ñ:Ô:ˆKˆKàˆFØˆEØˆFØˆKàˆà�CŠ<ˆ<Ø�LŠLÝ˜u f¨e°UÀ6ÐJÑJÔJñLô Lð Là�Š�[Ñ!Ô!Ð!Ø�3Š;ˆ;Ø�LŠLÝ˜t V¨U°EÀ&ÐIÑIÔIñKô Kð Kå�e‘”ˆØˆrE   c                óx   — |                       |d         |d                              ¦   «         |d         ¦  «        S )NrB  rÉ  rC  )rö  r‚  rƒ  s     r4   r  zParser.auto_delim¼  s<   € Ø×)Ò)Ø�ŒL˜$˜uœ+×-Ò-Ñ/Ô/°°g´ñ@ô @ð 	@rE   c                ó¾  — |                       ¦   «          |                      ¦   «         }g }|d         }|D �]}t          |t          ¦  «        rS|j        d         }t          |t
          ¦  «        rd|_        |                     ¦   «          |                     |¦  «         Œkt          |t
          ¦  «        rpd|_        |j	        | j
        v s|j	        dd …         | j        v rd|_        |                     ¦   «          |                     ¦   «          |                     |¦  «         Œð|                     |¦  «         �Œ|                      ¦   «          t          |¦  «        S )NrÓ  r   r-  r±  )r  r{  rƒ  rd  rL  r.  rU   r4  r»   r/  Ú_latin_alphabetsÚ_small_greekr}  )rQ   rî  r0  r‡  rŠ  r/  Úks          r4   rj  zParser.boldsymbolÀ  sA  € Ø�ŠÑÔÐØ—’Ñ Ô ˆØˆØ�GŒ}ˆØð 	 ñ 	 ˆAÝ˜!�UÑ#Ô#ð  Ø”J˜q”M�Ý˜a¥Ñ&Ô&ð (Ø!�A”FØ×%Ò%Ñ'Ô'Ð'Ø—’˜Q‘”��Ý˜A�tÑ$Ô$ð 	 Ø�”Ø”C˜4Ô0Ð0Ð0Ø”3�q�r�r”7˜dÔ/Ð/Ð/Ø#�A”FØ×%Ò%Ñ'Ô'Ð'Ø×!Ò!Ñ#Ô#Ð#Ø—’˜Q‘”��à—’˜Q‘”�‘Ø�ŠÑÔÐå�U‰|Œ|ÐrE   c           	     ó  — |d         }|                       ¦   «         }|                     ¦   «         }d„ |d         D ¦   «         }t          t          d„ |¦  «        ¦  «        }g }|D ]=}t	          |g¦  «        }	|	                     |d¦  «         |                     |	¦  «         Œ>d„ t          |t          d|dz  ¦  «        gt          |¦  «        z  ¦  «        D ¦   «         }
|
d= t          |
¦  «        }t          |g¦  «        g}|S )	Nr<  c                ó,   — g | ]}t          |¦  «        ‘ŒS rD   )rd  )rZ   r$  s     r4   r]   z#Parser.substack.<locals>.<listcomp>ß  s   € Ð,Ð,Ð,˜a•�q‘”Ð,Ð,Ð,rE   r   c                ó   — | j         S rP   r¯  r6  s    r4   rn  z!Parser.substack.<locals>.<lambda>à  s   €  a¤g€ rE   rÀ  c                ó   — g | ]	}|D ]}|‘ŒŒ
S rD   rD   )rZ   Úpairrþ   s      r4   r]   z#Parser.substack.<locals>.<listcomp>è  s=   € ð "ð "ð "ØØ ð"ð "àð ð "ð "ð "ð "rE   r‚   rÏ  )r{  r›  r…   rc   r²  ri  r»   Úzipr$  r:  rˆ  rd  )rQ   rî  r<  r0  r—  r‡  Ú	max_widthræ  râ  ÚcpÚstackrè  rx  s                r4   rg  zParser.substackÚ  s  € Ø�W”ˆØ—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	à,Ð, 5¨¤8Ð,Ñ,Ô,ˆÝ�Ð-Ð-¨uÑ5Ô5Ñ6Ô6ˆ	àˆØð 	ð 	ˆCÝ˜C˜5Ñ!Ô!ˆBØ�HŠH�Y 	Ñ*Ô*Ð*Ø�LŠL˜ÑÔÐÐð"ð "Ý  ­¨a°¸Q±Ñ)?Ô)?Ð(@Å3ÀuÁ:Ä:Ñ(MÑNÔNð"ñ "ô "ˆð �"ˆIÝ�E‰lŒlˆÝ˜˜‘,”,�ˆØˆrE   r  )
rD  r*   rq  r�   rV   r8   r©   r8   r+   rd  rý  )rî  r   r+   r€  )rî  r   r+   r   )rî  r   r+   rï  )rŽ  r8   r+   rs  )rD  r*   rí  r‹   rî  r•  r+   rï  ró  )r+   rï  )r=  r  r+   rl   )r1  r*   r2  r*   ró  r˜  r4  r  rW   rd  r0  rd  r+   rï  )r  r*   r  r  r  r*   r+   rï  )Ur?   r@   rA   rB   ÚenumÚEnumr  rf  rg  r¡  r£  Ú_arrow_symbolsr   r¤  rÕ  rÖ  rÚ  rL  rY  Ú_ambi_delimsr¢  Ú_right_delimsrO  rÊ  r.   r#  ÚstringÚascii_lettersr"  rR   ry  r{  r}  r  rm  rk  r‡   rl  Ústaticmethodr   Úconvert_to_floatrH  re  r�  rI  r+  rT  r)   rK  rÒ  rU  rV  rW  rX  r/  rZ  ri  rM  r  rR  rS  rN  r[  rU   rØ  rÛ  r<  r>  rÿ  r.  r_  r\  r]  r^  r
  rc  rd  r`  ra  rb  rö  r  rj  rg  r  r  s   @r4   r  r  “  s´  ø€ € € € € ðð ðð ð ð ð �T”Yñ ô ð ð ˜ð
÷0 Š%‰'Œ'ñ3ô Ðð6 ˜ð 5÷j  %šu™wœwñk5(ô 5(Ððn �Sð 	÷0 
Š‰Œñ1ô €Nð4 (Ð*;Ñ;¸nÑL€Oà˜3Ð7×=Ò=Ñ?Ô?Ñ@Ô@Ðà˜ð ÷ Š5‰7Œ7ñô Ðð
 ˜3Ð>×DÒDÑFÔFÑGÔGÐà�sÐL×RÒRÑTÔTÑUÔUÐà�ð :ß:?º%¹'¼'ñCô C€Jð �cð ÷ !š5™7œ7ñ$ô $€Oð
 �3ð /ç/4ªu©w¬wñ8ô 8€Lð �3ð 
ç
Š%‰'Œ'ñô €Lð �Cð 
ç
Š%‰'Œ'ñô €Mð ˜]Ñ*¨\Ñ9€Gà�3ð Gð GØ�u˜S˜SÐ!?Ñ@Ô@Ø ˜SÐ!?Ñ@Ô@À1ÑDñFô FðGñ Gô Gñ Hô H€Lð �s˜6Ô/Ñ0Ô0Ðð@1ð @1ð @1ð @1ðD(ð (ð (ð (ð*%ð %ð %ð %ð ð  ð  ð  ð:ð :ð :ð :ð'ð 'ð 'ð 'ðQð Qð Qð Qðð ð ð ð
ð ð ð ð !�LÐ!1Ô!BÑCÔC€Mðð ð ð ð(ð (ð (ð (ð  ØØØØØØØØØØØðð €Mðð ð ð ð
1ð 1ð 1ð 1ð.ð .ð .ð .ð`Mð Mð Mð Mðð ð ð ðDð Dð Dð DðDð Dð Dð DðØÐ/ðàÐ-ðð 	Ð0ðð 	Ð3ð	ð
 	Ð3ðð 	Ð-ðð 	Ð0ðð 	Ð1ðð 	Ð6ðð 	Ð5ðð 	Ð7ðð 	Ð1ðð 	Ð3ðð 	Ð3ðð 	Ð-ðð  	Ð0ð!ð" 	Ð/ð#ð$ *Ø(Ø#ð)ð ð €Kð. �CÐ4×:Ò:Ñ<Ô<Ñ=Ô=€Mðð ð ð ð.ð ð ð ð
!ð !ð !ð !ð<ð ð ð ðð ð ð ð,ð ,ð ,ð ,ð $€Nðð ð ð ð=ð =ð =ð =ðð ð ð ðð ð ð ðð ð ð ð
ð ð ð ð
sð sð sð sð sð sðjDð Dð Dð DðL;ð ;ð ;ð ;ð&ð &ð &ð &ðAð Að Að Að
Dð Dð Dð Dð
Að Að Að Að
ð ð ð ð@ !Ð €Gˆhð'ð 'ð 'ð 'ðRð ð ð ð& ð  ð  ð  ð$ð $ð $ð $ðL@ð @ð @ð @ðð ð ð ð4ð ð ð ð ð ð ð rE   r  )r)   r*   r+   r&   )rË  )rM   rN   rÌ  rÍ  r+   rL   )rë  r*   r+   r   )r   r*   rÑ  r   r+   r   )xrB   Ú
__future__r   ÚabcrÃ  r.  rá   rq  Úloggingr‡   rê   r&  rF  r–  r3  rU  Útypingrî   r   Únumpyrd   Únumpy.typingr   Ú	pyparsingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
matplotlibr  rS  r   Ú_mathtext_datar   r   r   r   Úfont_managerr   r    r!   Úft2fontr"   r#   r$   ÚTYPE_CHECKINGÚcollections.abcr%   r&   r'   r(   Úenable_packratÚ	getLoggerr“  r5   r7   r@   rG   rL   r•   r™   ÚABCr�   ÚABCMetarÜ   r  rl  r¥  r§  r¶  r1  r�  r  r  rÑ   re  rÔ  rÓ  r³  r¸  r  rN   r$  r)  r.  rB  rG  rd  rˆ  r’  r–  r�  r   r­  r~  r²  r¹  rs  rÀ  rÇ  r‰   rõ  r1  r
  r  rD   rE   r4   ú<module>rH     sU  ððð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  ð+ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð +ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðDð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dà <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ð „?ð BØ(Ð(Ð(Ð(Ð(Ð(ØAÐAÐAÐAÐAÐAÐAÐAÐAÐAð €Ô Ñ Ô Ð Ø€wÔÐ.Ñ/Ô/€ðð ð ð ð,3ð 3ð 3ð 3ð 3�*ñ 3ô 3ð 3ð& /€Ô ðð ð ð ð �*ñ ô ð ð( /€Ô ð<5ð <5ð <5ð <5ð <5ñ <5ô <5ð <5ð~ð ð ð ð �*ñ ô ð ð@ð ð ð ð ˆzñ ô ð ðy!ð y!ð y!ð y!ð y!ˆCŒGñ y!ô y!ð y!ðxxIð xIð xIð xIð xI�E S¤[ð xIñ xIô xIð xIðv]+ð ]+ð ]+ð ]+ð ]+�-ñ ]+ô ]+ð ]+ð@C!ð C!ð C!ð C!ð C!�=ñ C!ô C!ð C!ðL&Að &Að &Að &Að &A�,¨#¬+ð &Añ &Aô &Að &AðR(ð (ð (ð (ð (�{ñ (ô (ð (ð*'ð 'ð 'ð 'ð '�kñ 'ô 'ð 'ð*t%ð t%ð t%ð t%ð t%�ñ t%ô t%ð t%ðnð ð ð ð �Iñ ô ð ðB €ð €ðA.ð A.ð A.ð A.ð A.ñ A.ô A.ð A.ðH!ð !ð !ð !ð !Ð"3ñ !ô !ð !ð<ð ð ð ð Ð)ñ ô ð ð4ð ð ð ð Ð-ñ ô ð ðð ð ð ð Ð0ñ ô ð ð*ð ð ð ð Ð/ñ ô ð ð*ð ð ð ð ñ ô ð ð@ð ð ð ð ˆ$ñ ô ð ð*,ð ,ð ,ð ,ð ,ˆ3ñ ,ô ,ð ,ð(ð (ð (ð (ð (ˆ3ñ (ô (ð (ðD+ð D+ð D+ð D+ð D+ˆ4ñ D+ô D+ð D+ðNIð Ið Ið Ið IˆTñ Iô Ið Ið.-/ð -/ð -/ð -/ð -/ˆ3ñ -/ô -/ð -/ð``<ð `<ð `<ð `<ð `<ˆDñ `<ô `<ð `<ðFS<ð S<ð S<ð S<ð S<ˆDñ S<ô S<ð S<ðl@ð @ð @ð @ð @ˆ3ñ @ô @ð @ð(7ð 7ð 7ð 7ð 7ˆDñ 7ô 7ð 7ð;ð ;ð ;ð ;ð ;ˆDñ ;ô ;ð ;ðð ð ð ð �
ñ ô ð ð �9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨QÑ/Ô/ð	ð 	€	Ô ðGð Gð Gð Gð Gˆ4ñ Gô Gð Gð8Mð Mð Mð Mð M�ñ Mô Mð Mð>ð >ð >ð >ð >�ñ >ô >ð >ð(ð (ð (ð (ð (ˆ4ñ (ô (ð (ð6#"ð #"ð #"ð #"ð #"�Uñ #"ô #"ð #"ðL ð  ð  ð  ð  �Eñ  ô  ð  ð8Yð Yð Yð Yð Yð@1ð 1ð 1ð 1ð#0ð #0ð #0ð #0ð #0ñ #0ô #0ð #0ðL6ð 6ð 6ð 6ð2[ð [ð [ð [ð [ñ [ô [ð [ð [ð [rE   