§
    îóÉ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*m+Z+m,Z, ddl-Z.ddl/m0Z0 dd	l1m2Z2m3Z3m4Z4m5Z5 dd
l6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ej>        rddl?m@Z@ ddl:mAZAmBZBmCZC  e#jD        ¦   «           ejE        d¦  «        ZFd|d„ZG G d„ de¦  «        ZHdeH_I         G d„ de¦  «        ZJdeJ_I         G d„ d¦  «        ZK G d„ de¦  «        ZL G d„ de¦  «        ZM G d„ dejN        ¦  «        ZO G d „ d!eOejP        ¬"¦  «        ZQ G d#„ d$eQ¦  «        ZR G d%„ d&eQ¦  «        ZS G d'„ d(eSejP        ¬"¦  «        ZT G d)„ d*eT¦  «        ZU G d+„ d,eT¦  «        ZV G d-„ d.eS¦  «        ZW G d/„ d0eW¦  «        ZXd1ZYd2ZZ G d3„ d4¦  «        Z[ G d5„ d6e[¦  «        Z\ G d7„ d8e[¦  «        Z] G d9„ d:e]¦  «        Z^ G d;„ d<e[¦  «        Z_ G d=„ d>e[¦  «        Z` G d?„ d@¦  «        Za G dA„ dBea¦  «        Zb G dC„ dDeb¦  «        Zc G dE„ dFeb¦  «        Zd G dG„ dHea¦  «        Ze G dI„ dJee¦  «        Zf G dK„ dLeb¦  «        Zg G dM„ dNeg¦  «        Zh G dO„ dPeg¦  «        Zi G dQ„ dReb¦  «        Zj G dS„ dTej¦  «        Zk G dU„ dVej¦  «        Zl G dW„ dXe¦  «        Zm emdYdZddYd¦  «         emdYdZd[dYd¦  «         emdYdZd\dYd¦  «         emdYdYddZd¦  «         emdYdYddZd[¦  «         emdYdYddZd\¦  «         emdYdYddYd¦  «         emdYdZdd]d¦  «        d^œem_n         G d_„ d`ea¦  «        Zo G da„ dbeh¦  «        Zp G dc„ ddei¦  «        Zq G de„ dfea¦  «        Zr G dg„ dheh¦  «        Zs G di„ djeh¦  «        Ztd}d~do„Zuddr„Zv G ds„ dte(¦  «        Zw G du„ dv¦  «        Zxd€dy„Zy G dz„ d{¦  «        ZzdS )�z.
Implementation details for :mod:`.mathtext`.
é    )ÚannotationsN)Ú
NamedTuple)ÚNDArray)ÚEmptyÚForwardÚLiteralÚGroupÚNotAnyÚ	OneOrMoreÚOptionalÚParseBaseExceptionÚParseExceptionÚParseExpressionÚParseFatalExceptionÚParserElementÚParseResultsÚQuotedStringÚRegexÚ	StringEndÚTokenÚ
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     úy/home/lighthouse/badge-speaker-benchmark/.benchmark-venv-community/lib64/python3.11/site-packages/matplotlib/_mathtext.pyÚget_unicode_indexr7   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__© ó    r6   r9   r9   J   sQ   € € € € € € ðð ð €L€L�LØ€M€M�MØ€L€L�LØXÐXÐXÑXØ2Ð2Ð2Ñ2Ð2Ð2rG   r9   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.
    r:   ÚoxÚoyr;   r<   r=   zNDArray[np.uint8]ÚimageNr@   rF   rG   r6   rI   rI   `   sW   € € € € € € ðð ð €I€I�IØ€I€I�IØ€L€L�LØ€M€M�MØ€L€L�LØÐÐÑÐÐrG   rI   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)rO   r>   r?   )ÚselfrO   s     r6   Ú__init__zOutput.__init__   s   € ØˆŒØ;=ˆŒØ>@ˆŒ
ˆ
ˆ
rG   r-   r9   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 rF   )ÚfontÚfontsizeÚnumÚglyph_indexÚoffset)Ú.0rJ   rK   ÚinfoÚhs       €r6   ú
<listcomp>z$Output.to_vector.<locals>.<listcomp>‡   sS   ø€ ð /ð /ð /á�"�b˜$ð Œy˜$œ-¨¬°4Ô3CØ�1�r‘6˜DœKÑ'ð)ð /ð /ð /rG   c                ó2   •— g | ]\  }}}}|‰||z   z
  ||f‘ŒS rF   rF   )r\   ÚbxÚbyÚbwÚbhr^   s        €r6   r_   z$Output.to_vector.<locals>.<listcomp>Š   sB   ø€ ð 0ð 0ð 0Ù �"�b˜"˜bð �1˜˜R™‘= " bÐ)ð 0ð 0ð 0rG   )
ÚmapÚnpÚceilrO   r;   r<   r=   r>   r?   r9   )rS   ÚwÚdÚgsÚrsr^   s        @r6   Ú	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Ñ/Ô/Ð/rG   ÚantialiasedÚboolrI   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 rF   )ÚmetricsÚxmin©r\   rJ   rK   r]   s       r6   r_   z$Output.to_raster.<locals>.<listcomp>’   ó(   € ÐMÐMÐM±°°R¸�b˜4œ<Ô,Ñ,ÐMÐMÐMrG   c                ó   — g | ]	\  }}}}|‘Œ
S rF   rF   ©r\   ÚxÚyrh   r^   s        r6   r_   z$Output.to_raster.<locals>.<listcomp>“   ó    € Ð5Ð5Ð5™J˜A˜q ! Q�aÐ5Ð5Ð5rG   r   r   c                ó4   — g | ]\  }}}||j         j        z
  ‘ŒS rF   )rq   Úymaxrs   s       r6   r_   z$Output.to_raster.<locals>.<listcomp>”   rt   rG   c                ó   — g | ]	\  }}}}|‘Œ
S rF   rF   rv   s        r6   r_   z$Output.to_raster.<locals>.<listcomp>•   ry   rG   c                ó4   — g | ]\  }}}||j         j        z   ‘ŒS rF   )rq   Úxmaxrs   s       r6   r_   z$Output.to_raster.<locals>.<listcomp>–   rt   rG   c                ó"   — g | ]\  }}}}||z   ‘ŒS rF   rF   rv   s        r6   r_   z$Output.to_raster.<locals>.<listcomp>—   ó$   € Ð9Ð9Ð9¡
  1 a¨�a˜!‘eÐ9Ð9Ð9rG   c                ó4   — g | ]\  }}}||j         j        z
  ‘ŒS rF   )rq   Úyminrs   s       r6   r_   z$Output.to_raster.<locals>.<listcomp>˜   rt   rG   c                ó"   — g | ]\  }}}}||z   ‘ŒS rF   rF   rv   s        r6   r_   z$Output.to_raster.<locals>.<listcomp>™   r€   rG   )rm   é   éÿ   )Úminr>   r?   ÚmaxrO   r=   r<   rf   ÚzerosÚmathrg   Úuint8ÚshiprW   Údraw_glyph_to_bitmapÚintrq   ÚicebergÚglyphÚfloorrI   )rS   rm   rr   r‚   r~   r{   rh   r^   ri   rL   ÚshiftedrJ   rK   r]   rw   rx   rc   rd   r<   ÚcenterÚx1Úx2s                         r6   Ú	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Ð4rG   N)rO   rP   )r-   r9   )rm   rn   r-   rI   )rA   rB   rC   rD   rT   rl   r•   rF   rG   r6   rN   rN   w   s^   € € € € € ðð ðAð Að Að Að
	0ð 	0ð 	0ð 	0ð$5ð $5ð $5ð $5ð $5ð $5rG   rN   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).
    r:   Úadvancer<   r;   rr   r~   r‚   r{   rŽ   rn   ÚslantedNr@   rF   rG   r6   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€MrG   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$   rW   r:   rX   r,   Úpostscript_namer—   rq   r(   rY   r*   rZ   r)   r�   r[   N©rA   rB   rC   rE   rF   rG   r6   r›   r›   Ö   sd   € € € € € € Ø€M€M�MØ€O€O�OØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ€L€L�LØ€M€M�M€M€MrG   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¡   )rS   r    r¡   s      r6   rT   zFonts.__init__ê   s   € ð "3ˆÔØ 0ˆÔÐÐrG   Úfont1r,   Ú
fontclass1Úsym1Ú	fontsize1r:   Ú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.
        ç        rF   )
rS   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   s
             r6   Úget_kernzFonts.get_kernø   s	   € ð ˆrrG   rW   r$   c                ó   — t           ‚rR   ©ÚNotImplementedError)rS   rW   s     r6   Ú	_get_fontzFonts._get_font  s   € Ý!Ð!rG   Ú
font_classÚsymrX   r›   c                ó   — t           ‚rR   r°   )rS   rW   r³   r´   rX   r«   s         r6   Ú	_get_infozFonts._get_info  ó   € å!Ð!rG   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¶   rq   )rS   rW   r³   r´   rX   r«   r]   s          r6   Úget_metricszFonts.get_metrics	  s%   € ð4 �~Š~˜d J°°X¸sÑCÔCˆØŒ|ÐrG   ÚoutputrN   rJ   rK   Ú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)
rS   rº   rJ   rK   rW   r³   r´   rX   r«   r]   s
             r6   Úrender_glyphzFonts.render_glyph&  s?   € ð �~Š~˜d J°°X¸sÑCÔCˆØŒ×Ò˜b " d˜^Ñ,Ô,Ð,Ð,Ð,rG   rw   rx   rh   r^   c                óB   — |j                              ||||f¦  «         dS )zM
        Draw a filled rectangle at (*x*, *y*) with size (*w*, *h*).
        N)r?   r½   ©rS   rº   rw   rx   rh   r^   s         r6   Úrender_rect_filledzFonts.render_rect_filled/  s(   € ð
 	Œ×Ò˜Q  1 a˜LÑ)Ô)Ð)Ð)Ð)rG   c                ó   — t          ¦   «         ‚)zJ
        Get the axis height for the given *font* and *fontsize*.
        r°   ©rS   rW   rX   r«   s       r6   Úget_axis_heightzFonts.get_axis_height6  ó   € õ "Ñ#Ô#Ð#rG   c                ó   — t          ¦   «         ‚)zM
        Get the size of a quad for the given *font* and *fontsize*.
        r°   rÃ   s       r6   Úget_quadzFonts.get_quad<  rÅ   rG   c                ó   — t          ¦   «         ‚)zF
        Get the xheight for the given *font* and *fontsize*.
        r°   rÃ   s       r6   Úget_xheightzFonts.get_xheightB  rÅ   rG   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       r6   Úget_underline_thicknesszFonts.get_underline_thicknessH  s   € õ
 "Ñ#Ô#Ð#rG   Ú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.
        rF   ©rS   rÌ   r´   s      r6   Ú!get_sized_alternatives_for_symbolz'Fonts.get_sized_alternatives_for_symbolO  s   € ð ˜3�Ð Ð rG   útype[FontConstantsBase]c                ó   — t           S rR   )ÚFontConstantsBase©rS   s    r6   Úget_font_constantszFonts.get_font_constantsY  s   € Ý Ð rG   N©r    r!   r¡   r&   ©r£   r,   r¤   r,   r¥   r,   r¦   r:   r§   r,   r¨   r,   r©   r,   rª   r:   r«   r:   r-   r:   ©rW   r,   r-   r$   )rW   r,   r³   r,   r´   r,   rX   r:   r«   r:   r-   r›   )rW   r,   r³   r,   r´   r,   rX   r:   r«   r:   r-   r—   )rº   rN   rJ   r:   rK   r:   rW   r,   r³   r,   r´   r,   rX   r:   r«   r:   r-   r»   ©rº   rN   rw   r:   rx   r:   rh   r:   r^   r:   r-   r»   ©rW   r,   rX   r:   r«   r:   r-   r:   ©rÌ   r,   r´   r,   r-   rÍ   ©r-   rÑ   )rA   rB   rC   rD   rT   r®   r²   r¶   r¹   r¾   rÁ   rÄ   rÇ   rÉ   rË   rÐ   rÕ   rF   rG   r6   rŸ   rŸ   á   s"  € € € € € ðð ð1ð 1ð 1ð 1ðð ð ð ð"ð "ð "ð "ð"ð "ð "ð "ðð ð ð ð:-ð -ð -ð -ð*ð *ð *ð *ð$ð $ð $ð $ð$ð $ð $ð $ð$ð $ð $ð $ð$ð $ð $ð $ð!ð !ð !ð !ð!ð !ð !ð !ð !ð !rG   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)
ÚsuperrT   Ú	functoolsÚcacher¶   Ú_fontsÚfontmapr"   r    r#   )rS   r    r¡   ÚfilenameÚdefault_fontÚ	__class__s        €r6   rT   zTruetypeFonts.__init__c  s{   ø€ Ý‰Œ×ÒÐ*Ð,<Ñ=Ô=Ð=å"œ¨¬Ñ8Ô8ˆŒØˆŒØ')ˆŒå˜DÔ2Ñ3Ô3ˆÝ Ñ)Ô)ˆØ!-ˆŒ�IÑØ!-ˆŒ�IÑÐÐrG   rW   r,   r-   r$   c                ót  — | j                              ||¦  «        }| j                             |¦  «        }|€ht          j                             |¦  «        rIt          |¦  «        }|| j        |<   || j        |j        <   || j        |j                             ¦   «         <   t          j
        t          |¦  «        S rR   )ræ   Úgetrå   ÚosÚpathÚexistsr#   rœ   ÚlowerÚTÚcastr$   )rS   rW   ÚbasenameÚcached_fonts       r6   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˜{Ñ+Ô+Ð+rG   r�   r)   rX   r:   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<   )rS   rW   r�   rX   r«   s        r6   Ú_get_offsetzTruetypeFonts._get_offsety  s:   € àÔ 8Ò+Ð+Ø”L 2Ñ%¨Ñ)¨h°q©j¸3Ñ.>¸rÑ.AÑBÐBØˆrrG   rÌ   r³   r´   ú'tuple[FT2Font, CharacterCodeType, bool]c                ó   — t           ‚rR   r°   )rS   rÌ   r³   r´   s       r6   Ú
_get_glyphzTruetypeFonts._get_glyph  r·   rG   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ö   NrF   )r\   Úvals     r6   ú	<genexpr>z*TruetypeFonts._get_info.<locals>.<genexpr>‹  s&   è è € Ð!AÐ!A¨s #¨¡(Ð!AÐ!AÐ!AÐ!AÐ!AÐ!ArG   é   rö   )	r˜   r<   r;   rr   r~   r‚   r{   rŽ   r™   )rW   rX   rœ   rq   rY   rZ   r�   r[   )rü   Úset_sizeÚget_char_indexÚ
load_glyphr¡   Úbboxrù   r—   ÚlinearHoriAdvancer<   r;   ÚhoriBearingYr›   rœ   )rS   rÌ   r³   r´   rX   r«   rW   rY   r™   rZ   r�   rr   r‚   r~   r{   r[   rq   s                    r6   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ØØØ#ØØð	
ñ 	
ô 	
ð 		
rG   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ÚrcParamsr{   r‚   ©rS   rÌ   rX   r«   Úconstsrq   s         r6   rÄ   zTruetypeFonts.get_axis_height¥  su   € Ø×(Ò(Ñ*Ô*ˆØÔÐ)ØÔ%¨Ñ0°3Ñ6¸Ñ;Ð;ð ×&Ò&Ø�#œ,Ð'9Ô:¸HÀhÐPSñUô UˆGà”L 7¤<Ñ/°1Ñ4Ð4rG   c                ó¸   — |                       ¦   «         }|j        �|j        |z  |z  dz  S |                      |t          j        d         d||¦  «        }|j        S )Nrø   r
  Úm)rÕ   Úquadr¹   r  r  r˜   r  s         r6   rÇ   zTruetypeFonts.get_quad°  sf   € Ø×(Ò(Ñ*Ô*ˆØŒ;Ð"Ø”; Ñ)¨CÑ/°"Ñ4Ð4ð ×&Ò&Ø�#œ,Ð'9Ô:¸CÀÈ3ñPô PˆGà”?Ð"rG   c                ó¸   — |                       ¦   «         }|j        �|j        |z  |z  dz  S |                      |t          j        d         d||¦  «        }|j        S )Nrø   r
  rw   )rÕ   Úx_heightr¹   r  r  rŽ   r  s         r6   rÉ   zTruetypeFonts.get_xheightº  sf   € Ø×(Ò(Ñ*Ô*ˆØŒ?Ð&Ø”? XÑ-°Ñ3°bÑ8Ð8ð ×&Ò&Ø�#œ,Ð'9Ô:¸CÀÈ3ñPô PˆGà”?Ð"rG   c                ó   — d|z  |z  dz  S )Ng      °?rø   rF   rÃ   s       r6   rË   z%TruetypeFonts.get_underline_thicknessÅ  s   € ð ˜hÑ&¨Ñ,°Ñ2Ð2rG   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¶   rW   Úget_kerningrZ   r%   ÚDEFAULTrâ   r®   )rS   r£   r¤   r¥   r¦   r§   r¨   r©   rª   r«   Úinfo1Úinfo2rW   ré   s                €r6   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rG   rÖ   rØ   )
rW   r$   r�   r)   rX   r:   r«   r:   r-   r:   ©rÌ   r,   r³   r,   r´   r,   r-   rú   )rÌ   r,   r³   r,   r´   r,   rX   r:   r«   r:   r-   r›   )rÌ   r,   rX   r:   r«   r:   r-   r:   rÚ   r×   )rA   rB   rC   rD   rT   r²   rù   rü   r¶   rÄ   rÇ   rÉ   rË   r®   Ú__classcell__©ré   s   @r6   rÞ   rÞ   ]  s  ø€ € € € € ðð ð

.ð 
.ð 
.ð 
.ð 
.ð 
.ð,ð ,ð ,ð ,ðð ð ð ð"ð "ð "ð "ð

ð 
ð 
ð 
ðB	5ð 	5ð 	5ð 	5ð#ð #ð #ð #ð	#ð 	#ð 	#ð 	#ð3ð 3ð 3ð 3ð
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
Ið 
IrG   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 rR   )Ú	StixFontsÚ_stix_fallbackrâ   rT   Ú_fontmapÚitemsr"   ræ   )rS   r    r¡   Úkeyr   Úfullpathré   s         €r6   rT   zBakomaFonts.__init__ê  s„   ø€ Ý'Ð(9Ð;KÑLÔLˆÔå‰Œ×ÒÐ*Ð,<Ñ=Ô=Ð=Øœ×+Ò+Ñ-Ô-ð 	)ð 	)‰HˆC�Ý ‘}”}ˆHØ (ˆDŒL˜ÑØ (ˆDŒL˜ÑÐð	)ð 	)rG   ú
\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Úisdigitr0   r  r4  rü   )rS   rÌ   r³   r´   rW   rò   rY   r™   s           r6   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ÐLrG   )ÚbigÚBigÚbiggÚBiggú()r,  rB  c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__parenleftÚ__rF   ©r\   Úss     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐQÐQÐQ¸q˜dÐ$9°AÐ$9Ð$9Ð$9Ð:ÐQÐQÐQrG   ú))r,  rG  c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__parenrightrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐRÐRÐRÀ˜dÐ$:°QÐ$:Ð$:Ð$:Ð;ÐRÐRÐRrG   Ú{c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__braceleftrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐBÐBÐB°ˆtÐ* QÐ*Ð*Ð*Ð+ÐBÐBÐBrG   Ú}c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__bracerightrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐCÐCÐC°ˆtÐ+ aÐ+Ð+Ð+Ð,ÐCÐCÐCrG   ú[)r,  rM  c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__bracketleftrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐSÐSÐSÀ˜dÐ$;°aÐ$;Ð$;Ð$;Ð<ÐSÐSÐSrG   ú])r,  rO  c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__bracketrightrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐTÐTÐTÀ!˜dÐ$<°qÐ$<Ð$<Ð$<Ð=ÐTÐTÐTrG   ú<)r+  z\__angbracketleft__c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__angbracketleftrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐIÐIÐI°q�Ð1¨AÐ1Ð1Ð1Ð2ÐIÐIÐIrG   ú>)r+  z\__angbracketright__c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__angbracketrightrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐJÐJÐJ¸�Ð2¨QÐ2Ð2Ð2Ð3ÐJÐJÐJrG   z\lfloorc                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__floorleftrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐIÐIÐI°q�dÐ1¨AÐ1Ð1Ð1Ð2ÐIÐIÐIrG   z\rfloorc                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__floorrightrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐJÐJÐJ¸�dÐ2¨QÐ2Ð2Ð2Ð3ÐJÐJÐJrG   z\lceilc                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__ceilingleftrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐJÐJÐJ¸�TÐ2¨QÐ2Ð2Ð2Ð3ÐJÐJÐJrG   z\rceilc                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__ceilingrightrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐKÐKÐK¸�TÐ3¨aÐ3Ð3Ð3Ð4ÐKÐKÐKrG   ú	\__sqrt__c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z
\__radicalrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>  s)   € ÐIÐIÐI°q˜Ð1¨AÐ1Ð1Ð1Ð2ÐIÐIÐIrG   z
\backslashc                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__backslashrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>   s)   € ÐLÐLÐL¸!˜Ð4¨qÐ4Ð4Ð4Ð5ÐLÐLÐLrG   ú/)r,  r\  c                ó   — g | ]
}d d|› d�f‘ŒS )r1  z\__slashrD  rF   rE  s     r6   r_   zBakomaFonts.<listcomp>!  s)   € ÐNÐNÐN¸A˜tÐ%6°Ð%6Ð%6Ð%6Ð7ÐNÐNÐNrG   z\widehat))r,  ú^)r1  z\__hatwide__)r1  z\__hatwider__)r1  z\__hatwidest__z
\widetilde))r,  ú~)r1  z\__tildewide__)r1  z\__tildewider__)r1  z\__tildewidest__))z
\leftparenrB  )z\rightparenrG  )z
\leftbracerI  )z\rightbracerK  )z\leftbracketrM  )z\rightbracketrO  )z\langlerQ  )z\ranglerS  )ú\{rI  )ú\}rK  )ú\[rM  )ú\]rO  rÍ   c                ó>   — | j                              |||fg¦  «        S rR   )Ú_size_alternativesrë   rÏ   s      r6   rÐ   z-BakomaFonts.get_sized_alternatives_for_symbol0  s"   € àÔ&×*Ò*¨3°(¸C°Ð0AÑBÔBÐBrG   rÑ   c                ó   — t           S rR   )ÚComputerModernFontConstantsrÔ   s    r6   rÕ   zBakomaFonts.get_font_constants4  s   € Ý*Ð*rG   rÖ   r  rÛ   rÜ   )rA   rB   rC   rD   r5  rT   ÚsetÚsplitr;  rü   Ú_latex_sizesre  ÚaliasÚtargetrÐ   rÕ   r  r  s   @r6   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ð+ð +ð +ð +ð +ð +ð +ð +rG   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)  r1  ÚSTIXGeneralÚSTIXSizeOneSymÚSTIXSizeTwoSymÚSTIXSizeThreeSymÚSTIXSizeFourSymÚSTIXSizeFiveSym)Ú0Ú1Ú2Ú3Ú4Ú5)r  r  r3  ÚStixSansFontsr!  rë   Ú_fallback_fontrâ   rT   ri  r"   ræ   r!   Ú
isinstancer6  )rS   r    r¡   Úfallback_rcÚfont_clsÚtexfontÚproprW   ÚstixsizedaltfontsÚsizeÚnamer8  ré   s               €r6   rT   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Ñ"Ð"ð	.ð 	.ð.ð .rG   r9  rÌ   r,   r³   Úuniindexr(   r-   útuple[str, CharacterCodeType]c                ó
   — ||fS rR   rF   )rS   rÌ   r³   r�  s       r6   Ú_map_virtual_fontzUnicodeFonts._map_virtual_fontr  s   € à˜Ð!Ð!rG   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.é¤   )r7   r4   r0   Ú_logÚwarningr�  ÚchrÚunicodedataÚcategoryrŒ  Ú
startswithr;  r²   rr  Úfamily_namer#   r   Ú_get_data_pathr  r„  r…  r3  rü   r!  r5  Úvaluesr]   )rS   rÌ   r³   r´   r�  Úfound_symbolÚnew_fontnameÚcharr™   rW   Ú
glyphindexÚgÚfamilys                r6   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 rR   )r„  rÐ   rÏ   s      r6   rÐ   z.UnicodeFonts.get_sized_alternatives_for_symbol·  s5   € àÔð 	XØÔ&×HÒHÈÐSVÑWÔWÐWØ˜3�Ð Ð rG   rÖ   ©rÌ   r,   r³   r,   r�  r(   r-   rŽ  r  rÛ   )rA   rB   rC   rD   rr  rE   rT   rh  ri  r;  r�  rü   rÐ   r  r  s   @r6   rn  rn  8  sÐ   ø€ € € € € € ð	ð 	ð ØðHð HÐð ð ð ñ ð
".ð ".ð ".ð ".ð ".ð ".ðH �s˜=×.Ò.Ñ0Ô0Ñ1Ô1Ðð"ð "ð "ð "ð?'ð ?'ð ?'ð ?'ðB!ð !ð !ð !ð !ð !ð !ð !rG   rn  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]r5  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 )Nrx  ry  rz  r{  r|  )r~  r  r€  r�  r‚  )r…  ÚDejaVuSerifFontsr3  r„  rƒ  r!  ÚbakomarÞ   rT   r5  Úupdater6  r"   ræ   ©rS   r    r¡   r7  rŒ  r8  s         r6   rT   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˜ÑÐð	*ð 	*rG   rÌ   r,   r³   r´   r-   rú   c                óV  •— |dk    r| j                              |||¦  «        S t          |¦  «        }|                      d¦  «        }|�>|                     |¦  «        }|dk    r#t          ¦   «                              d||¦  «        S t          ¦   «                              |||¦  «        S )Nú\primer1  r   )rª  rü   r7   r²   r  râ   )rS   rÌ   r³   r´   r�  rW   r¡  ré   s          €r6   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Ñ@Ô@Ð@rG   rÖ   r  )rA   rB   rC   r5  rE   rT   rü   r  r  s   @r6   r§  r§  ¾  sn   ø€ € € € € € Ø!€HÐ!Ð!Ð!Ñ!ð*ð *ð *ð *ð*Að Að Að Að Að Að Að Að Að ArG   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/  Úbfitr0  r-  r1  r}  r-   rÑ   c                ó   — t           S rR   )ÚDejaVuSerifFontConstantsrÔ   s    r6   rÕ   z#DejaVuSerifFonts.get_font_constantsø  s   € Ý'Ð'rG   NrÜ   ©rA   rB   rC   rD   r5  rÕ   rF   rG   r6   r©  r©  ç  sX   € € € € € ðð ð Ø#Ø(Ø*ØØ Ø$Øð	ð 	€Hð(ð (ð (ð (ð (ð (rG   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 rR   )ÚDejaVuSansFontConstantsrÔ   s    r6   rÕ   z"DejaVuSansFonts.get_font_constants  s   € Ý&Ð&rG   NrÜ   r¶  rF   rG   r6   r¸  r¸  ü  sX   € € € € € ðð ð Ø"Ø'Ø)ØØ Ø#Øð	ð 	€Hð'ð 'ð 'ð 'ð 'ð 'rG   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 )'r3  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.
    rw  zSTIXGeneral:italiczSTIXGeneral:weight=boldzSTIXGeneral:italic:boldÚSTIXNonUnicodezSTIXNonUnicode:italiczSTIXNonUnicode:weight=boldrx  ry  rz  r{  r|  )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 rR   )rÞ   rT   r5  r6  r"   ræ   r¬  s         r6   rT   zStixFonts.__init__/  sm   € Ý×Ò˜tÐ%6Ð8HÑIÔIÐIØœ×,Ò,Ñ.Ô.ð 	*ð 	*‰IˆC�Ý ‘~”~ˆHØ (ˆDŒL˜ÑØ!)ˆDŒL˜ÑÐð	*ð 	*rG   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à   r0  TFr,  r   r„   r   r÷   r
  )r,  r.  r*  )r.  r,  r/  r³  i à  iÿø  Únonuni)r   rë   Ú_sansr…  Údictr3   Úlistr<  r  r  r   )rS   rÌ   r³   r�  Úfont_mappingÚdoing_sans_conversionÚmappingÚloÚhiÚmidÚranges              r6   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 )NrI  rK  rM  rO  u   âŸ¨u   âŸ©)r`  ra  rb  rc  rQ  rS  c                ó¾   •— g | ]Y}‰                      t          |¦  «        ¦  «                             ‰¦  «        d k    ¯;t          |¦  «        t          ‰¦  «        f‘ŒZS )r   )r²   r,   r  r—  )r\   ÚirS   r�  s     €€r6   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ÐOrG   é   rY  éÿÿÿÿ)rë   r7   r4   rÌ  )rS   rÌ   r´   ÚfixesÚalternativesr�  s   `    @r6   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 rR   )rÃ  ÚSTIXSansFontConstantsÚSTIXFontConstantsrÔ   s    r6   rÕ   zStixFonts.get_font_constants�  s   € ØŒ:ð 	%Ý(Ð(å$Ð$rG   rÖ   r¥  rÛ   rÜ   )rA   rB   rC   rD   r5  r„  rÃ  rT   r�  rã   rä   rÐ   rÕ   rF   rG   r6   r3  r3    s¾   € € € € € ð
ð 
ð Ø"Ø'Ø)Ø$Ø+Ø0ØØØØØØðð €Hð €NØ€Eð*ð *ð *ð *ð4"ð 4"ð 4"ð 4"ðl „_ðð ð ñ „_ðð(%ð %ð %ð %ð %ð %rG   r3  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)rA   rB   rC   rD   rÃ  rF   rG   r6   rƒ  rƒ  ˆ  s   € € € € € ðð ð €E€E€ErG   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  )rA   rB   rC   rD   rÛ  rE   rÜ  rÝ  rÞ  rà  râ  rã  rå  rç  rè  ré  rê  rë  rì  r  r  r  rF   rG   r6   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Ð-Ð-Ð-Ñ-Ð-Ð-rG   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 )rg  gš™™™™Á?rß  iŽã i€- iÍÌ  i5› iff išô iúÒ
 iºL i† i¨ù
 ix„ ç      Ð?g     ð?i   N)rA   rB   rC   rÛ  rã  rå  rç  Ú	_x_heightrÜ  rÝ  rÞ  rà  râ  rè  ré  rê  rë  rì  r  r  r  rF   rG   r6   rg  rg  ó  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€HrG   rg  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)rA   rB   rC   rÛ  rã  rå  rç  rï  r  rÜ  rÝ  rÞ  rà  râ  rè  ré  rê  rë  rì  r  r  rF   rG   r6   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€DrG   rÖ  c                  ó   — e Zd ZdZdZdZdS )rÕ  rÚ  ç333333ã?rß  N)rA   rB   rC   rÛ  rå  rç  rF   rG   r6   rÕ  rÕ  +  s   € € € € € Ø€LØ€MØ€N€N€NrG   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©rA   rB   rC   rï  r  rÜ  rÝ  rÞ  rà  râ  rè  ré  rê  rë  rì  r  rF   rG   r6   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€KrG   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  rF   rG   r6   rº  rº  F  r  rG   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    r6   rT   zNode.__init__^  s   € ØˆŒ	ˆ	ˆ	rG   r,   c                ó*   — t          | ¦  «        j        S rR   )ÚtyperA   rÔ   s    r6   Ú__repr__zNode.__repr__a  s   € Ý�D‰zŒzÔ"Ð"rG   ÚnextúNode | Noner:   c                ó   — dS ©Nr­   rF   )rS   r  s     r6   r  zNode.get_kerningd  s   € ØˆsrG   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    r6   ÚshrinkzNode.shrinkg  s   € ð
 	ˆ	Œ	�Q‰ˆ	Œ	ˆ	ˆ	rG   rº   rN   rw   rx   c                ó   — dS )zRender this node.NrF   ©rS   rº   rw   rx   s       r6   ÚrenderzNode.rendern  s   € € € rG   rn   c                ó   — dS )NTrF   rÔ   s    r6   Úis_char_nodezNode.is_char_nodeq  s	   € ð ˆtrG   N©r-   r»   ©r-   r,   ©r  r  r-   r:   ©rº   rN   rw   r:   rx   r:   r-   r»   ©r-   rn   )
rA   rB   rC   rD   rT   r  r  r  r  r  rF   rG   r6   r  r  [  s’   € € € € € Ø&Ð&ðð ð ð ð#ð #ð #ð #ðð ð ð ðð ð ð ð ð  ð  ð  ðð ð ð ð ð rG   r  c                  ó8   ‡ — e Zd ZdZdˆ fd„Zdˆ fd	„Zdd„Zˆ xZS )rP   z A node with a physical location.r;   r:   r<   r=   r-   r»   c                ór   •— t          ¦   «                              ¦   «          || _        || _        || _        d S rR   )râ   rT   r;   r<   r=   )rS   r;   r<   r=   ré   s       €r6   rT   zBox.__init__~  s2   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ØˆŒØˆŒ
ˆ
ˆ
rG   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 rR   )râ   r  r‹  ÚNUM_SIZE_LEVELSr;   ÚSHRINK_FACTORr<   r=   ©rS   ré   s    €r6   r  z
Box.shrink„  s`   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆJŒJ�=Ñ(ˆJŒJØˆKŒK�=Ñ(ˆKŒKØˆJŒJ�=Ñ(ˆJŒJˆJˆJð 'Ð&rG   rº   rN   r“   Úy1r”   Úy2c                ó   — d S rR   rF   )rS   rº   r“   r"  r”   r#  s         r6   r  z
Box.render‹  s   € àˆrG   )r;   r:   r<   r:   r=   r:   r-   r»   r  )rº   rN   r“   r:   r"  r:   r”   r:   r#  r:   r-   r»   )rA   rB   rC   rD   rT   r  r  r  r  s   @r6   rP   rP   {  su   ø€ € € € € Ø*Ð*ðð ð ð ð ð ð)ð )ð )ð )ð )ð )ðð ð ð ð ð ð ð rG   rP   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚVboxz$A box with only height (zero width).r<   r:   r=   c                óN   •— t          ¦   «                              d||¦  «         d S r  ©râ   rT   )rS   r<   r=   ré   s      €r6   rT   zVbox.__init__“  s%   ø€ Ý‰Œ×Ò˜˜V UÑ+Ô+Ð+Ð+Ð+rG   )r<   r:   r=   r:   ©rA   rB   rC   rD   rT   r  r  s   @r6   r&  r&  �  sC   ø€ € € € € Ø.Ð.ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,rG   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).r;   r:   c                óN   •— t          ¦   «                              |dd¦  «         d S r  r(  ©rS   r;   ré   s     €r6   rT   zHbox.__init__š  s%   ø€ Ý‰Œ×Ò˜  BÑ'Ô'Ð'Ð'Ð'rG   ©r;   r:   r)  r  s   @r6   r+  r+  —  sC   ø€ € € € € Ø8Ð8ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (rG   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 rR   )	râ   rT   r1  ÚfontsetrW   r³   rX   r«   Ú_update_metrics)rS   r1  r2  ré   s      €r6   rT   zChar.__init__«  sh   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ”}ˆŒØ”JˆŒ	ØÔ*ˆŒØœˆŒØ”9ˆŒð 	×ÒÑÔÐÐÐrG   r-   c                ó   — d| j         z  S )Nz`%s`©r1  rÔ   s    r6   r  zChar.__repr__·  s   € Ø˜œ‰ÐrG   r»   c                ó  — | j                              | j        | j        | j        | j        | j        ¦  «        x}| _        | j        dk    r|j        | _	        n|j	        | _	        |j
        | _        |j
        |j        z
   | _        d S )Nú )r5  r¹   rW   r³   r1  rX   r«   Ú_metricsr˜   r;   rŽ   r<   r=   ©rS   rq   s     r6   r6  zChar._update_metricsº  sy   € Ø"&¤,×":Ò":ØŒI�t”¨¬°´¸t¼xñ#Iô #Ið 	Iˆ�$”-àŒ6�SŠ=ˆ=Ø œˆDŒJˆJà œˆDŒJØ”oˆŒØ”¨¬Ñ7Ð8ˆŒ
ˆ
ˆ
rG   rn   c                ó   — | j         j        S rR   )r;  r™   rÔ   s    r6   Ú
is_slantedzChar.is_slantedÄ  s   € ØŒ}Ô$Ð$rG   r  r  r:   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­   )r;  r˜   r;   r…  r0  r5  r®   rW   r³   r1  rX   r«   )rS   r  r˜   Úkerns       r6   r  zChar.get_kerningÇ  sv   € ð ”-Ô'¨$¬*Ñ4ˆØˆÝ�d�DÑ!Ô!ð 	Ø”<×(Ò(Ø”	˜4œ?¨D¬F°D´MØ”	˜4œ?¨D¬F°D´MØ”ñô ˆDð ˜‰~ÐrG   rº   rN   rw   rx   c           
     óz   — | j                              |||| j        | j        | j        | j        | j        ¦  «         d S rR   )r5  r¾   rW   r³   r1  rX   r«   r  s       r6   r  zChar.render×  sG   € ØŒ×!Ò!Ø�A�qØŒI�t”¨¬°´¸t¼xñ	Iô 	Ið 	Ið 	Ið 	IrG   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 rR   )	râ   r  r‹  r  rX   r   r;   r<   r=   r!  s    €r6   r  zChar.shrinkÜ  sp   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆMŒM�]Ñ*ˆMŒMØˆJŒJ�]Ñ*ˆJŒJØˆKŒK�]Ñ*ˆKŒKØˆJŒJ�]Ñ*ˆJŒJˆJˆJð	 'Ð&rG   )r1  r,   r2  r3  r  r  r  r  r  )rA   rB   rC   rD   rT   r  r6  r>  r  r  r  r  r  s   @r6   r0  r0  ž  sÍ   ø€ € € € € ð
ð 
ð
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð9ð 9ð 9ð 9ð%ð %ð %ð %ðð ð ð ð Ið Ið Ið Ið
+ð +ð +ð +ð +ð +ð +ð +ð +ð +rG   r0  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  )r5  r¹   rW   r³   r1  rX   r«   r;  r~   rr   r;   r{   r‚   r<   r=   r<  s     r6   r6  zAccent._update_metricsë  se   € Ø"&¤,×":Ò":ØŒI�t”¨¬°´¸t¼xñ#Iô #Ið 	Iˆ�$”-à”\ G¤LÑ0ˆŒ
Ø”l W¤\Ñ1ˆŒØˆŒ
ˆ
ˆ
rG   c                óp   •— t          ¦   «                              ¦   «          |                      ¦   «          d S rR   )râ   r  r6  r!  s    €r6   r  zAccent.shrinkò  s/   ø€ Ý‰Œ�ŠÑÔÐØ×ÒÑÔÐÐÐrG   rº   rN   rw   r:   rx   c           
     ó®   — | j                              ||| j        j        z
  || j        j        z   | j        | j        | j        | j        | j	        ¦  «         d S rR   )
r5  r¾   r;  rr   r‚   rW   r³   r1  rX   r«   r  s       r6   r  zAccent.renderö  s[   € ØŒ×!Ò!Ø�A˜œÔ*Ñ*¨A°´Ô0BÑ,BØŒI�t”¨¬°´¸t¼xñ	Iô 	Ið 	Ið 	Ið 	IrG   r  r  )rA   rB   rC   rD   r6  r  r  r  r  s   @r6   rD  rD  å  sw   ø€ € € € € ðð ð
ð ð ð ðð ð ð ð ð ðIð Ið Ið Ið Ið Ið Ið IrG   rD  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â   rT   Úshift_amountÚchildrenÚglue_setÚ	glue_signÚ
glue_order©rS   rJ  ré   s     €r6   rT   zList.__init__ÿ  sK   ø€ Ý‰Œ×Ò˜˜R Ñ$Ô$Ð$ØˆÔØ#˜(˜ˆŒàˆŒØˆŒØˆŒˆˆrG   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  r;   r<   r=   rM  rN  ÚtextwrapÚindentÚjoinre   r!  s    €r6   r  zList.__repr__  s”   ø€ Ø@×GÒGÝ‰GŒG×ÒÑÔØŒJ˜œØŒJ˜Ô)ð Œ}ð%ˆD•8”?Ø—	’	�#˜gœn¨d¬mÑ<Ô<Ñ=Ô=Øñô ñ àñð ð #%ñ
ô 
ð 	
rG   rw   r:   Ú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   NrF   )r\   rÏ  r[  s     €r6   r  z!List._set_glue.<locals>.<genexpr>  s+   øè è € ÐCÐC�1°F¸1´IÀ²N°NˆQ°N°N°N°NÐCÐCrG   rÑ  r   r­   z	%s %s: %r)r  rÌ  r<  rQ  rP  rO  Ú
glue_ratiorN  r•  r–  r
  rA   )rS   rw   rZ  r[  r]  Úos      `  r6   Ú	_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rG   c                óü   •— | j         D ]}|                     ¦   «          Œt          ¦   «                              ¦   «          | j        t          k     r,| xj        t          z  c_        | xj        t          z  c_        d S d S rR   )rN  r  râ   r‹  r  rM  r   rO  )rS   Úchildré   s     €r6   r  zList.shrink#  st   ø€ Ø”]ð 	ð 	ˆEØ�LŠL‰NŒNˆNˆNÝ‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØÐÔ¥Ñ.ÐÔØˆMŒM¥Ñ.ˆMŒMˆMˆMð 'Ð&rG   )rJ  rK  r  )
rw   r:   rZ  r�   r[  r\  r]  r,   r-   r»   r  )	rA   rB   rC   rD   rT   r  rb  r  r  r  s   @r6   rI  rI  ü  s—   ø€ € € € € Ø:Ð:ðð ð ð ð ð ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ðDð Dð Dð Dð /ð /ð /ð /ð /ð /ð /ð /ð /ð /rG   rI  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­   Ú
additionalTrJ  rK  rh   r:   r  ú"T.Literal['additional', 'exactly']Údo_kernrn   c                ó²   •— t          ¦   «                              |¦  «         |r|                      ¦   «          |                      ||¬¦  «         d| _        d S )N)rh   r  F)râ   rT   r@  ÚhpackÚ
is_phantom)rS   rJ  rh   r  ri  ré   s        €r6   rT   zHlist.__init__/  sS   ø€ õ 	‰Œ×Ò˜Ñ"Ô"Ð"Øð 	Ø�IŠI‰KŒKˆKØ�
Š
�Q˜!ˆ
ÑÔÐØˆŒˆˆrG   r-   c                óH   — t          t          d„ | j        ¦  «        ¦  «        S )Nc                ó*   — |                       ¦   «         S rR   )r  )Únodes    r6   ú<lambda>z$Hlist.is_char_node.<locals>.<lambda>:  s   €  D×$5Ò$5Ñ$7Ô$7€ rG   )Úallre   rN  rÔ   s    r6   r  zHlist.is_char_node8  s    € å•3Ð7Ð7¸¼ÑGÔGÑHÔHÐHrG   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_longestrN  r½   r  ÚKern)rS   Únew_childrenÚelem0Úelem1Úkerning_distancer@  s         r6   r@  z
Hlist.kern<  s—   € ð ˆÝ%Ô1°$´-ÀÄÈqÈrÈrÔARÑSÔSð 	*ð 	*‰LˆE�5Ø×Ò Ñ&Ô&Ð&Ø$×0Ò0°Ñ7Ô7ÐØ 2Ò%Ð%ÝÐ,Ñ-Ô-�Ø×#Ò# DÑ)Ô)Ð)øØ$ˆŒˆˆrG   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­   é   rM  rg  r   Nr   ÚOverfulrÑ  ÚUnderful)rN  r…  r0  r;   r‡   r<   r=   rP   rf   ÚisinfÚgetattrÚGlueÚ	glue_specÚstretch_orderÚstretchÚshrink_orderr  ru  rP  rQ  r`  rb  )rS   rh   r  r^   ri   rw   Útotal_stretchÚtotal_shrinkÚprF  r�  s              r6   rk  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 ,°
Ñ;Ô;Ð;Ð;Ð;rG   )r­   rg  T)rJ  rK  rh   r:   r  rh  ri  rn   r  r  ©r­   rg  )rh   r:   r  rh  r-   r»   )	rA   rB   rC   rD   rT   r  r@  rk  r  r  s   @r6   rf  rf  ,  sž   ø€ € € € € Ø%Ð%à>AØ9EØ!%ð ð  ð  ð  ð  ð  ð  ðIð Ið Ið Ið%ð %ð %ð %ð"  #Ø6Bð?<ð ?<ð ?<ð ?<ð ?<ð ?<ð ?<ð ?<ð ?<rG   rf  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­   rg  rJ  rK  r^   r:   r  rh  c                óx   •— t          ¦   «                              |¦  «         |                      ||¬¦  «         d S )N)r^   r  )râ   rT   Úvpack)rS   rJ  r^   r  ré   s       €r6   rT   zVlist.__init__’  s7   ø€ å‰Œ×Ò˜Ñ"Ô"Ð"Ø�
Š
�Q˜!ˆ
ÑÔÐÐÐrG   r-   rn   c                ó   — dS ©NFrF   rÔ   s    r6   r  zVlist.is_char_node—  s   € àˆurG   Ú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­   r{  rM  z1Internal mathtext error: Char node found in Vlistrg  r   Nr   r|  rÑ  r}  )rN  r…  rP   r<   r=   rf   r~  r;   r  r‡   r€  r�  r‚  rƒ  r„  r  ru  r0  ÚRuntimeErrorrP  rQ  r`  rb  )rS   r^   r  r�  rh   ri   rw   r…  r†  r‡  rF  r�  s               r6   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 ,°
Ñ;Ô;Ð;Ð;Ð;rG   rˆ  )rJ  rK  r^   r:   r  rh  r  )r^   r:   r  rh  r�  r:   r-   r»   )
rA   rB   rC   rD   rT   r  rf   ÚinfrŒ  r  r  s   @r6   rŠ  rŠ  �  s‘   ø€ € € € € Ø#Ð#à>AØ9Eðð ð ð ð ð ð ð
ð ð ð ð  #Ø6BØœðG<ð G<ð G<ð G<ð G<ð G<ð G<ð G<ð G<rG   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`.
    r;   r:   r<   r=   r2  r3  c                óf   •— t          ¦   «                              |||¦  «         |j        | _        d S rR   )râ   rT   r5  )rS   r;   r<   r=   r2  ré   s        €r6   rT   zRule.__init__ð  s,   ø€ Ý‰Œ×Ò˜ ¨Ñ.Ô.Ð.Ø”}ˆŒˆˆrG   rº   rN   rw   rx   rh   r^   r-   r»   c                óH   — | j                              ||||z
  ||¦  «         d S rR   )r5  rÁ   rÀ   s         r6   r  zRule.renderô  s*   € àŒ×'Ò'¨°°1°q±5¸!¸QÑ?Ô?Ð?Ð?Ð?rG   )r;   r:   r<   r:   r=   r:   r2  r3  rÙ   )rA   rB   rC   rD   rT   r  r  r  s   @r6   r”  r”  å  sc   ø€ € € € € ðð ð%ð %ð %ð %ð %ð %ð@ð @ð @ð @ð @ð @ð @ð @rG   r”  c                  ó&   ‡ — e Zd ZdZdd	ˆ fd„Zˆ xZS )
ÚHrulez.Convenience class to create a horizontal rule.Nr2  r3  Ú	thicknessúfloat | Nonec                óž   •— |€|                      ¦   «         }|dz  x}}t          ¦   «                              t          j        |||¦  «         d S )Nrá  ©Úget_current_underline_thicknessrâ   rT   rf   r’  )rS   r2  r™  r<   r=   ré   s        €r6   rT   zHrule.__init__ü  sN   ø€ ØÐØ×=Ò=Ñ?Ô?ˆIØ" S™Ð(ˆ�Ý‰Œ×Ò�œ ¨°Ñ6Ô6Ð6Ð6Ð6rG   rR   )r2  r3  r™  rš  r)  r  s   @r6   r˜  r˜  ù  sH   ø€ € € € € Ø8Ð8ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7rG   r˜  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚVrulez,Convenience class to create a vertical rule.r2  r3  c                ó    •— |                      ¦   «         }t          ¦   «                              |t          j        t          j        |¦  «         d S rR   rœ  )rS   r2  r™  ré   s      €r6   rT   zVrule.__init__  s<   ø€ Ø×9Ò9Ñ;Ô;ˆ	Ý‰Œ×Ò˜¥B¤F­B¬F°EÑ:Ô:Ð:Ð:Ð:rG   )r2  r3  r)  r  s   @r6   rŸ  rŸ    sC   ø€ € € € € Ø6Ð6ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;rG   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 )	Ú	_GlueSpecr:   r;   rƒ  r�   r‚  r  r„  Nr�   rF   rG   r6   r¢  r¢    sE   € € € € € € Ø€L€L�LØ€N€N�NØÐÐÑØ€M€M�MØÐÐÑÐÐrG   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â   rT   r…  r,   r¢  Ú_namedr4   r�  )rS   r¬  r�  ré   s      €r6   rT   zGlue.__init__'  sq   ø€ õ 	‰Œ×ÒÑÔÐÝ�i¥Ñ%Ô%ð 	OÝ!Ô(¨Ô3ˆIˆIÝ˜	¥9Ñ-Ô-ð 	OØ!ˆIˆIåÐMÑNÔNÐNØ"ˆŒˆˆrG   r-   r»   c                óÊ   •— t          ¦   «                              ¦   «          | j        t          k     r1| j        }|                     |j        t          z  ¬¦  «        | _        d S d S )N©r;   )râ   r  r‹  r  r�  Ú_replacer;   r   )rS   r¢  ré   s     €r6   r  zGlue.shrink4  sS   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&Ø”ˆAØŸZšZ¨a¬g½Ñ.E˜ZÑFÔFˆDŒNˆNˆNð 'Ð&rG   )r¬  r­  r  )rA   rB   rC   rD   rT   r  r  r  s   @r6   r€  r€    so   ø€ € € € € ðð ð#ð #ð #ð #ð #ð #ðGð Gð Gð Gð Gð Gð Gð Gð Gð GrG   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.
    rJ  ú
list[Node]c                óŒ   •— t          ¦   «                              t          d¦  «        g|¢t          d¦  «        ‘d¬¦  «         d S )Nrª  F©ri  ©râ   rT   r€  rR  s     €r6   rT   zHCentered.__init__A  s?   ø€ Ý‰Œ×Ò�$˜t™*œ*Ð< xÐ<µ°d±´Ð<ÀeÐÑLÔLÐLÐLÐLrG   ©rJ  rµ  r)  r  s   @r6   r´  r´  ;  sQ   ø€ € € € € ðð ð
Mð Mð Mð Mð Mð Mð Mð Mð Mð MrG   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.
    rJ  rµ  c                óˆ   •— t          ¦   «                              t          d¦  «        g|¢t          d¦  «        ‘¦  «         d S )Nrª  r¸  rR  s     €r6   rT   zVCentered.__init__K  s:   ø€ Ý‰Œ×Ò�$˜t™*œ*Ð< xÐ<µ°d±´Ð<Ñ=Ô=Ð=Ð=Ð=rG   r¹  r)  r  s   @r6   r»  r»  E  sG   ø€ € € € € ðð ð
>ð >ð >ð >ð >ð >ð >ð >ð >ð >rG   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 )ru  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   r;   r:   c                óV   •— t          ¦   «                              ¦   «          || _        d S rR   )râ   rT   r;   r-  s     €r6   rT   zKern.__init__]  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ˆ
ˆ
rG   r-   r,   c                ó   — d| j         z  S )Nzk%.02fr±  rÔ   s    r6   r  zKern.__repr__a  s   € Ø˜$œ*Ñ$Ð$rG   r»   c                ó–   •— t          ¦   «                              ¦   «          | j        t          k     r| xj        t
          z  c_        d S d S rR   )râ   r  r‹  r  r;   r   r!  s    €r6   r  zKern.shrinkd  s@   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆJŒJ�-Ñ'ˆJŒJˆJˆJð 'Ð&rG   r.  r  r  )
rA   rB   rC   rD   r<   r=   rT   r  r  r  r  s   @r6   ru  ru  O  s…   ø€ € € € € ðð ð €FØ€Eðð ð ð ð ð ð%ð %ð %ð %ð(ð (ð (ð (ð (ð (ð (ð (ð (ð (rG   ru  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.
    Nr1  r,   r<   r:   r=   r2  r3  Ú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   )r5  rÐ   rW   rÉ   rX   r«   Úcopyr0  r<   r=   r<  râ   rT   rM  )rS   r1  r<   r=   r2  rÃ  rÓ  r  Útarget_totalrÌ   r´   r   Úshiftré   s                €r6   rT   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å‰Œ×Ò˜$˜Ñ Ô Ð Ø!ˆÔÐÐrG   rR   )
r1  r,   r<   r:   r=   r:   r2  r3  rÃ  rš  r)  r  s   @r6   rÂ  rÂ  j  sQ   ø€ € € € € ðð ð )-ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "ð "rG   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.
    r1  r,   r;   r:   r2  r3  Ú
char_classú
type[Char]c                óh  •— |j                              |j        |¦  «        }|                     ¦   «         }|D ]%\  }}||_         |||¦  «        }|j        |k    r nŒ&||j        z  }	|xj        |	z  c_         |||¦  «        }t          ¦   «                              |g¦  «         |j        | _        d S rR   )r5  rÐ   rW   rÅ  r;   rX   râ   rT   )rS   r1  r;   r2  rÊ  rÓ  rÌ   r´   r   rÃ  ré   s             €r6   rT   zAutoWidthChar.__init__™  sÂ   ø€ à”}×FÒFÀuÄzÐSTÑUÔUˆà—
’
‘”ˆØ)ð 	ð 	‰MˆH�cØ!ˆEŒJØ�:˜c 5Ñ)Ô)ˆDØŒz˜UÒ"Ð"Ø�ð #ð ˜œÑ#ˆØˆŒ˜&Ñ ˆŒØˆz˜#˜uÑ%Ô%ˆå‰Œ×Ò˜$˜Ñ Ô Ð Ø”ZˆŒ
ˆ
ˆ
rG   )r1  r,   r;   r:   r2  r3  rÊ  rË  )rA   rB   rC   rD   r0  rT   r  r  s   @r6   rÉ  rÉ  �  sQ   ø€ € € € € ðð ð +/ð ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  rG   rÉ  ©r   r   rO   Ú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 rR   )Úanyr  )ro  ÚargsÚphantoms     €r6   r  zship.<locals>.render¾  s0   ø€ Ý�7‰|Œ|ð 	ØˆDŒK˜ÐÐÐÐð	ð 	rG   Úvaluer:   r-   c                ó&   — | dk     rdn	| dk    rdn| S )Ng    eÍÍÁg    eÍÍArF   )rÕ  s    r6   Úclampzship.<locals>.clampÂ  s    € Ø˜t’|�|ˆtˆt°¸²°¨¨À5ÐHrG   rO   rf  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   )rQ  rP  r½   rl  rN  r…  r0  r;   ru  rI  r<  rM  rf  rŠ  rP   r<   r=   rf   r~  r€  r�  r‚  rƒ  ÚroundrO  r„  r  Úpop)rO   Úcur_gÚcur_gluerQ  rP  Ú	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                €€€€€€€€€€r6   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Ð8Ø  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Ñ#�
Ø˜Ñ#�ùà�Š‰ŒˆˆˆrG   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)rQ  rP  r<   rN  r…  ru  r;   rI  r<  r=   rM  rf  rŠ  rP   rf   r~  r€  r�  r‚  rƒ  rÚ  rO  r„  r  r0  r‘  )rO   rÜ  rÝ  rQ  rP  rß  Útop_edger‡  Úsave_vrá  râ  rã  r�  r×  rä  rå  ræ  rç  rè  rº   r  ré  s                €€€€€€€€€r6   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Ð8Ø" 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rG   )rÕ  r:   r-   r:   )rO   rf  r-   r»   )rO   rŠ  r-   r»   )r<   rN   r…  rf  )rO   rÎ  rJ   rK   r×  rä  rå  ræ  rç  rè  rº   rÔ  r  ré  s       @@@@@@@@@@r6   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Ø€MrG   Úmsgr   c                óR   ‡ — d
ˆ fd	„}t          ¦   «                              |¦  «        S )z$Helper class to raise parser errors.rF  r,   Úlocr�   Útoksr   r-   úT.Anyc                ó&   •— t          | |‰¦  «        ‚rR   ©r   )rF  rï  rð  rí  s      €r6   Úraise_errorzError.<locals>.raise_errorN  s   ø€ Ý! ! S¨#Ñ.Ô.Ð.rG   ©rF  r,   rï  r�   rð  r   r-   rñ  )r   Úset_parse_action)rí  rô  s   ` r6   ÚErrorr÷  L  s;   ø€ ð/ð /ð /ð /ð /ð /õ ‰7Œ7×#Ò# KÑ0Ô0Ð0rG   c                  ó>   ‡ — e Zd ZdZdddddœZdˆ fd	„Z	 ddd„Zˆ xZS )Ú_BracedTextaÅ  
    Match a brace-delimited literal string, allowing nested braces.

    This is similar to ``QuotedString("{", "\\", end_quote_char="}")``, except
    that brace depth is tracked, so that the string does not end at the first
    ``}``.  As in TeX, nested unescaped braces only group, and are not
    rendered; a literal brace is written as ``\{`` or ``\}``.  A backslash
    escapes the following character, which therefore does not affect depth.
    ú	rT  úú)ÚtÚnÚfÚrr-   r»   c                ód   •— t          ¦   «                              ¦   «          d| _        d| _        d S )NTF)râ   rT   ÚmayReturnEmptyÚmayIndexErrorr!  s    €r6   rT   z_BracedText.__init__a  s/   ø€ Ý‰Œ×ÒÑÔÐØ"ˆÔØ"ˆÔÐÐrG   TÚinstringr,   rï  r�   Ú
do_actionsrn   útuple[int, str]c                ó@  — |t          |¦  «        k    s||         dk    rt          ||d| ¦  «        ‚g }d}|t          |¦  «        k     rÅ||         }|dk    rU|dz   t          |¦  «        k     r?||dz            }|                     | j                             ||¦  «        ¦  «         |dz  }Œv|dz  }|dk    r|dz  }Œ‡|dk    r#|dz  }|dk    r|d                     |¦  «        fS Œ°|                     |¦  «         |t          |¦  «        k     °Åt          ||d	| ¦  «        ‚)
NrI  zExpected '{'r   r/   r   r„   rK  rU  úExpected '}')r<  r   r½   Ú_escapesrë   rY  )rS   r  rï  r  Úcharsr=   r   Úescapeds           r6   Ú	parseImplz_BracedText.parseImplf  s@  € à•#�h‘-”-ÒÐ 8¨C¤=°CÒ#7Ð#7Ý  ¨3°ÀÑEÔEÐEØˆØˆØ•C˜‘M”MÒ!Ð!Ø˜C”=ˆDØ�tŠ|ˆ|  a¡­#¨h©-¬-Ò 7Ð 7Ø" 3¨¡7Ô+�Ø—’˜Tœ]×.Ò.¨w¸Ñ@Ô@ÑAÔAÐAØ�q‘�ØØ�1‰HˆCØ�sŠ{ˆ{Ø˜‘
�ØØ˜’�Ø˜‘
�Ø˜A’:�:Ø §¢¨¡¤Ð.Ð.ØØ�LŠL˜ÑÔÐð! •C˜‘M”MÒ!Ð!õ" ˜X s¨N¸DÑAÔAÐArG   r  )T)r  r,   rï  r�   r  rn   r-   r  )rA   rB   rC   rD   r	  rT   r  r  r  s   @r6   rù  rù  T  s�   ø€ € € € € ðð ð  ¨4°dÐ;Ð;€Hð#ð #ð #ð #ð #ð #ð &*ðBð Bð Bð Bð Bð Bð Bð Bð BrG   rù  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 )r3  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.
    r5  rŸ   rW   r,   r³   rX   r:   r«   c                óL   — || _         || _        || _        || _        || _        d S rR   )r5  Ú_fontr³   rX   r«   )rS   r5  rW   r³   rX   r«   s         r6   rT   zParserState.__init__‹  s)   € àˆŒØˆŒ
Ø$ˆŒØ ˆŒØˆŒˆˆrG   r-   c                ó*   — t          j         | ¦  «        S rR   )rÅ  rÔ   s    r6   rÅ  zParserState.copy“  s   € ÝŒy˜‰ŒÐrG   c                ó   — | j         S rR   )r  rÔ   s    r6   rW   zParserState.font–  s
   € àŒzÐrG   rŒ  r»   c                ó*   — |dv r|| _         || _        d S )N)r*  r,  r.  r/  r³  )r³   r  )rS   rŒ  s     r6   rW   zParserState.fontš  s    € àÐ7Ð7Ð7Ø"ˆDŒOØˆŒ
ˆ
ˆ
rG   c                óX   — | j                              | j        | j        | j        ¦  «        S )z.Return the underline thickness for this state.)r5  rË   rW   rX   r«   rÔ   s    r6   r�  z+ParserState.get_current_underline_thickness   s)   € àŒ|×3Ò3ØŒI�t”} d¤hñ0ô 0ð 	0rG   N)
r5  rŸ   rW   r,   r³   r,   rX   r:   r«   r:   ©r-   r3  r  )rŒ  r,   r-   r»   )r-   r:   )
rA   rB   rC   rD   rT   rÅ  ÚpropertyrW   Úsetterr�  rF   rG   r6   r3  r3  €  sœ   € € € € € ðð ðð ð ð ðð ð ð ð ðð ð ñ „Xðð 
„[ðð ð ñ „[ðð
0ð 0ð 0ð 0ð 0ð 0rG   r3  Ú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 rR   )r…  r   ÚexprsÚresultsName)r  r  Únamess     €r6   r  zcmd.<locals>.names²  s   øè è € Ý�c�?Ñ+Ô+ð 	"Øœ	ð 'ð '�Ø ˜5 ™;œ;Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð'ð 'àŒ_ð 	"Ø”/Ð!Ð!Ð!Ð!Ð!ð	"ð 	"rG   rI  r   r   rU  c              3  ó    K  — | ]	}d |z  V — Œ
dS )z{%s}NrF   )r\   rŒ  s     r6   r  zcmd.<locals>.<genexpr>º  s&   è è € ÐBÐB¨d˜F T™MÐBÐBÐBÐBÐBÐBrG   z	Expected )r  r   r-   r  )ri  rY  r÷  )r  rÓ  Úcsnamer5   r  s       @r6   Úcmdr!  ¦  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Ð5rG   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)rA   rB   rC   ÚDISPLAYSTYLEÚ	TEXTSTYLEÚSCRIPTSTYLEÚSCRIPTSCRIPTSTYLErF   rG   r6   Ú
_MathStyler%  È  s%   € € € € € ØˆØˆ	ØˆØÐÐÐrG   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—  ri  rï   )r\   rÏ  s     r6   r_   zParser.<listcomp>Z  sX   € ð Gð Gð GÈ�Ô(­¨Q©¬Ñ0Ô0×6Ò6Ñ8Ô8¸Ô<×BÒBÑDÔDð Gð Gð GrG   u   Î±u   Ï‰r   r-   r»   c                óx  ‡ ‡— t          j        ¦   «         ŠdMˆˆ fd„}dNd	„}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          ¦   «         ¦  «        ‰_;        tG          d3 ty          ddt{          tE          ‰j         ¦  «        ¦  «        tC          t-          d4¦  «         >                    ¦   «         ¦  «        z   ¬5¦  «        d6¦  «        ¦  «        ‰_?         t)          ‰j        ¦  «        d7¦  «         tE          t	          d8d9g¦  «        ‰j        z
  ¦  «        d:¦  «        z    t          d;¦  «        d<¦  «        z    t          d=¦  «        d<¦  «        z  ‰                     d7¦  «         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          d?d 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_        d@‰                     dA¦  «        t‰          dB¦  «        z  z
  }‰xj        dC‰                     dD¦  «        t‰          dB¦  «        z  z
   tC          ‰jA        ‰j        z  |z  ¦  «        dE¦  «        z   dFz   ‰                     dG¦  «        t‰          dB¦  «        z  z
  z  c_        tE          ‰j         ¦  «        ‰_E        t�          dHdIdJ¬K¦  «        ‰_G        t          dL¦  «                             ¦   «         ‰_H        ‰jH        tC          ‰jG        ‰jH        z   ¦  «        z   t]          ¦   «         z   ‰_I         |¦   «          ‰jI        ‰ _J        ‰jE        ‰ _K        dJ‰ _L        d S )ONr-   r»   c                 ó  •— t          ‰¦  «                             ¦   «         D ]f\  } }|                      d¦  «        sL| dvr|                     | ¦  «         t	          ‰| ¦  «        r#|                     t          ‰| ¦  «        ¦  «         Œgd S )NÚ_)ÚtokenÚ	placeableÚ
auto_delim)Úvarsr6  rš  Úset_nameÚhasattrrö  r  )r7  r   r‡  rS   s     €€r6   Úset_names_and_parse_actionsz4Parser.__init__.<locals>.set_names_and_parse_actionsb  s™   ø€ Ý  ™GœGŸMšM™OœOð 	Að 	A‘��SØ—~’~ cÑ*Ô*ð Að Ð"FÐFÐFØŸš SÑ)Ô)Ð)å˜t SÑ)Ô)ð AØ×,Ò,­W°T¸3Ñ-?Ô-?Ñ@Ô@Ð@øð	Að 	ArG   Ú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})ú|rU  )r6  Úalpharg  Únonalpha)Úisalphar½   r   rV  rY  re   ÚreÚescape)r6  r  Úends_with_alphaÚends_with_nonalpharŒ  s        r6   Úcsnamesz Parser.__init__.<locals>.csnamesq  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ñ ô ñô ð rG   z[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)Úspacec                ó6   — g | ]}t          |j        ¦  «        ‘ŒS rF   )r,   rÕ  )r\   Úes     r6   r_   z#Parser.__init__.<locals>.<listcomp>†  s    € Ð3Ð3Ð3˜a�S�”‰\Œ\Ð3Ð3Ð3rG   Ústyle_literalzI[a-zA-Z0-9 +\-*/<>=:,.;!\?&'@()\[\]|\U00000080-\U0001ffff]|\\[%${}\[\]_|]z|\\(?:{})(?![A-Za-z])r9  r´   z\\[A-Za-z]+rŒ  rW   z\mathrI  rK  z\hspacez\phantomrÕ  z\llapz\rlapÚaccentz\fracrY   Údenz\dfracz\binomz\genfracÚldelimÚrdelimÚrulesizeÚstylez\sqrt{value}rM  rO  Úrootz	\overlineÚbodyz
\underlinez\oversetÚ
annotationz	\undersetz\textz	\substackz\\)ÚopenerÚcloserÚcontentÚpartsÚnucleusr.  r^  Úsubsuperz'*Úapostrophesz'+z\operatornamez\boldsymbolú\middleÚmdelimzExpected a delimiterz\leftÚleftrË  z\rightÚrightú$r/   F)Úunquote_resultsz(?:(?:\\[$])|[^$])*r  )r6  r,   r  r7  r-   r   )MÚtypesÚSimpleNamespacer   Úfloat_literalr   Ú_space_widthsrB  r*  rE  rV  rY  re   r=  r>  r    Úleave_whitespacer+   Úunknown_symbolÚ
_fontnamesrW   r   Ústart_groupr   Ú	end_groupÚ_delimsÚdelimr   r1  r0  Únamed_placeableÚrequired_groupÚoptional_groupr/  r   r   r!  ÚcustomspacerÔ  ÚllapÚrlapÚ_accent_mapÚ_wide_accentsrF  Ú_function_namesÚfunctionr6  r   Úunclosed_groupÚfracÚdfracÚbinomÚgenfracr
   ÚsqrtÚoverlineÚ	underlineÚoversetÚundersetrù  Útextr   r	   ÚsuppressÚsubstackrT  ÚsimpleÚoperatornameÚ
boldsymbolr÷  r‰   r   Úmath_stringÚnon_mathÚmainÚ_expressionÚ_math_expressionÚ_needs_space_after_subsuper)rS   r5  rA  rW  r‡  s   `   @r6   rT   zParser.__init___  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�{™}œ}Ñ-Ô-ˆŒå˜ð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ˆÔ(Ð(Ð(rG   rF  r,   Úfonts_objectrŸ   rX   r:   r«   rf  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,  rT  r   NF)r3  Ú_state_stackÚ_em_width_cacher„  Úparse_stringr   r4   Úexplainr†  r   Úreset_cacherð   rñ   rf  )rS   rF  r‡  rX   r«   Úresultr5   s          r6   Ú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r3  c                ó   — | j         d         S )z&Get the current `State` of the parser.rÑ  )r‰  rÔ   s    r6   Ú	get_statezParser.get_state6	  s   € àÔ  Ô$Ð$rG   c                ó8   — | j                              ¦   «          dS )zPop a `State` off of the stack.N)r‰  rÛ  rÔ   s    r6   Ú	pop_statezParser.pop_state:	  s   € àÔ×ÒÑÔÐÐÐrG   c                ó‚   — | j                              |                      ¦   «                              ¦   «         ¦  «         dS )z=Push a new `State` onto the stack, copying the current state.N)r‰  r½   r‘  rÅ  rÔ   s    r6   Ú
push_statezParser.push_state>	  s5   € àÔ× Ò  §¢Ñ!1Ô!1×!6Ò!6Ñ!8Ô!8Ñ9Ô9Ð9Ð9Ð9rG   rð  r   úlist[Hlist]c                óF   — t          |                     ¦   «         ¦  «        gS rR   )rf  Úas_list©rS   rð  s     r6   rƒ  zParser.mainB	  s   € Ý�d—l’l‘n”nÑ%Ô%Ð&Ð&rG   c                óV   — | j                              |d         dd…         d¬¦  «        S )Nr   r   rÑ  T)Ú	parse_all)r…  r‹  r™  s     r6   r�  zParser.math_stringE	  s*   € ØÔ$×1Ò1°$°q´'¸!¸B¸$´-È4Ð1ÑPÔPÐPrG   rñ  c                ór   — t          |                     ¦   «         ¦  «        }|                      ¦   «          |gS rR   )rf  r˜  r“  )rS   rð  Úhlists      r6   r‰   zParser.mathH	  s.   € Ý�d—l’l‘n”nÑ%Ô%ˆØ�ŠÑÔÐØˆwˆrG   c                óö   ‡ — |d                               dd¦  «        }ˆ fd„|D ¦   «         }t          |¦  «        }‰                      ¦   «          t          j        d         ‰                      ¦   «         _        |gS )Nr   z\$rZ  c                óT   •— g | ]$}t          |‰                     ¦   «         ¦  «        ‘Œ%S rF   )r0  r‘  )r\   r1  rS   s     €r6   r_   z#Parser.non_math.<locals>.<listcomp>O	  s-   ø€ Ð8Ð8Ð8°•4˜˜4Ÿ>š>Ñ+Ô+Ñ,Ô,Ð8Ð8Ð8rG   r
  )Úreplacerf  r•  r  r  r‘  rW   )rS   rð  rF  Úsymbolsr�  s   `    r6   r‚  zParser.non_mathM	  so   ø€ Ø�ŒG�OŠO˜E 3Ñ'Ô'ˆØ8Ð8Ð8Ð8°aÐ8Ñ8Ô8ˆÝ�g‘”ˆà�ŠÑÔÐÝ #¤Ð-?Ô @ˆ�ŠÑÔÔØˆwˆrG   c                óÒ   ‡— |                       ¦   «          |                      ¦   «         Šd‰_        t          ˆfd„|d         D ¦   «         ¦  «        }|                      ¦   «          |gS )Nr,  c                ó0   •— g | ]}t          |‰¦  «        ‘ŒS rF   )r0  )r\   r1  r2  s     €r6   r_   zParser.text.<locals>.<listcomp>\	  s!   ø€ Ð7Ð7Ð7¨!•t˜A˜u‘~”~Ð7Ð7Ð7rG   r   )r•  r‘  rW   rf  r“  )rS   rð  r�  r2  s      @r6   r{  zParser.textX	  sf   ø€ Ø�ŠÑÔÐØ—’Ñ Ô ˆØˆŒ
ÝÐ7Ð7Ð7Ð7¨t°A¬wÐ7Ñ7Ô7Ñ8Ô8ˆØ�ŠÑÔÐØˆwˆrG   Ú
percentageru  c                ó  — |                       ¦   «         }|j        |j        |j        f}| j                             |¦  «        }|€0|j                             d|j        |j        ¦  «        }|| j        |<   t          ||z  ¦  «        S )Nr*  )	r‘  rW   rX   r«   rŠ  rë   r5  rÇ   ru  )rS   r¤  r2  r7  r;   s        r6   Ú_make_spacezParser._make_space`	  s}   € ð —’Ñ Ô ˆØŒz˜5œ>¨5¬9Ð5ˆØÔ$×(Ò(¨Ñ-Ô-ˆØˆ=Ø”M×*Ò*¨8°U´^ÀUÄYÑOÔOˆEØ(-ˆDÔ  Ñ%Ý�E˜JÑ&Ñ'Ô'Ð'rG   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 ©NrB  )r_  r¦  )rS   rð  rY   rO   s       r6   rB  zParser.space~	  s-   € ØÔ   g¤Ô/ˆØ×Ò˜sÑ#Ô#ˆØˆuˆrG   c                ó:   — |                       |d         ¦  «        gS r©  )r¦  r™  s     r6   rj  zParser.customspaceƒ	  s   € Ø× Ò   g¤Ñ/Ô/Ð0Ð0rG   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 ©r:  NrF   ©r\   r1  s     r6   r  z Parser.symbol.<locals>.<genexpr>™	  ó&   è è € ÐCÐC A¸!¸sº(¸(˜a¸(¸(¸(¸(ÐCÐCrG   rÑ  rU  r   rI  rä  Tr·  c              3  ó&   K  — | ]}|d k    ¯|V — ŒdS r¯  rF   r°  s     r6   r  z Parser.symbol.<locals>.<genexpr>§	  r±  rG   c              3  ó&   K  — | ]}|d k    ¯|V — ŒdS r¯  rF   r°  s     r6   r  z Parser.symbol.<locals>.<genexpr>¨	  s&   è è € ÐAÐA A¸¸Sº¸˜a¸¸¸¸ÐAÐArG   r   ú,rK  ú.)r0  r‘  r4   r   Ú_spaced_symbolsr  r†  Ú_binary_operatorsr<  ri  Ú_left_delimsÚ_relation_symbolsrf  r¦  Ú_punctuation_symbolsr=  )	rS   rF  rï  rð  r1  r   r5   Ú	prev_charÚ	next_chars	            r6   r+   zParser.symbol†	  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ó  ©rS   rF  rï  rð  s       r6   ra  zParser.unknown_symbol¶	  s!   € Ý! ! SÐ*K¸TÀ&¼\Ð*KÐ*KÑLÔLÐLrG   c                ó,   — d|d         _         |d         S )NTrÕ  )rl  r™  s     r6   rÔ  zParser.phantom¹	  s   € Ø#'ˆˆWŒÔ Ø�GŒ}ÐrG   c                ód   — t          t          |d         j         ¦  «        |d         g¦  «        gS ©NrÕ  ©rf  ru  r;   r™  s     r6   rk  zParser.llap½	  s.   € Ý•t˜T 'œ]Ô0Ð0Ñ1Ô1°4¸´=ÐAÑBÔBÐCÐCrG   c                ód   — t          |d         t          |d         j         ¦  «        g¦  «        gS rÁ  rÂ  r™  s     r6   rl  zParser.rlapÀ	  s.   € Ý�t˜G”}¥d¨D°¬MÔ,?Ð+?Ñ&@Ô&@ÐAÑBÔBÐCÐCrG   Ú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 )
NrF  r´   r/   )rÊ  rÔ  g      @Úexactlyr­   g       @)r‘  r�  rn  rÉ  r;   rD  r´  rm  r  r+  rk  rŠ  r&  rf  )rS   rð  r2  r™  rF  r´   Ú
accent_boxÚcentereds           r6   rF  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‘”ðñ ô ð 	rG   c                óN   — |                       |||¦  «        }|d         |_        |S )NrŒ  )r  Úfunction_name)rS   rF  rï  rð  r�  s        r6   rp  zParser.functionó	  s*   € Ø×!Ò! ! S¨$Ñ/Ô/ˆØ" 6œlˆÔØˆrG   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¯  rF   r°  s     r6   r  z&Parser.operatorname.<locals>.<genexpr>
  s&   è è € ÐCÐC ¸!¸sº(¸(˜!¸(¸(¸(¸(ÐCÐCrG   rU  r^  r.  r§  >   r.  r^  )r•  r‘  rW   r…  r0  r6  r½   r,   r<  r   r  re  r¦  r_  r“  r†  rf  )rS   rF  rï  rð  r2  Ú
hlist_listrŒ  r1  Únext_char_locr¼  Ú
delimiterss              r6   r  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Ñ Ô Ð rG   c                ó°   — |                       ¦   «          |                     d¦  «        r,|                     d¦  «        |                      ¦   «         _        g S ©NrW   )r•  rë   r‘  rW   r™  s     r6   rc  zParser.start_group
  sI   € Ø�ŠÑÔÐà�8Š8�FÑÔð 	5Ø$(§H¢H¨VÑ$4Ô$4ˆD�NŠNÑÔÔ!Øˆ	rG   c                óN   — t          |                     dg ¦  «        ¦  «        }|gS ©Nr6  ©rf  rë   )rS   rð  Úgrps      r6   r6  zParser.group
  s$   € Ý�D—H’H˜W bÑ)Ô)Ñ*Ô*ˆØˆuˆrG   c                óH   — t          |                     dg ¦  «        ¦  «        S rã  rä  r™  s     r6   rh  zParser.required_group!
  s   € Ý�T—X’X˜g rÑ*Ô*Ñ+Ô+Ð+rG   c                ó.   — |                       ¦   «          g S rR   )r“  rÔ   s    r6   rd  zParser.end_group&
  s   € Ø�ŠÑÔÐØˆ	rG   c                ó>   — t          |t          |¦  «        d¦  «        ‚)Nr  )r   r<  r¾  s       r6   rq  zParser.unclosed_group*
  s   € Ý! !¥S¨¡V¤V¨^Ñ<Ô<Ð<rG   c                óD   — |d         |                       ¦   «         _        g S rá  )r‘  rW   r™  s     r6   rW   zParser.font-
  s   € Ø $ V¤ˆ�ŠÑÔÔØˆ	rG   rS  r  rn   c                ó²   — t          |t          ¦  «        r|j        | j        v S t          |t          ¦  «        rt          |d¦  «        r|j        | j        v S dS )NrÚ  F)r…  r0  r1  Ú_overunder_symbolsrf  r4  rÚ  Ú_overunder_functions©rS   rS  s     r6   Úis_overunderzParser.is_overunder1
  s`   € Ý�g�tÑ$Ô$ð 	FØ”9 Ô 7Ð7Ð7Ý˜¥Ñ'Ô'ð 	F­G°G¸_Ñ,MÔ,Mð 	FØÔ(¨DÔ,EÐEÐEØˆurG   c                óL   — t          |t          ¦  «        r|j        | j        v S dS rŽ  )r…  r0  r1  Ú_dropsub_symbolsrí  s     r6   Ú
is_dropsubzParser.is_dropsub8
  s)   € Ý�g�tÑ$Ô$ð 	6Ø”9 Ô 5Ð5Ð5ØˆurG   c                óX   — t          |t          ¦  «        r|                     ¦   «         S dS rŽ  )r…  r0  r>  rí  s     r6   r>  zParser.is_slanted=
  s+   € Ý�g�tÑ$Ô$ð 	(Ø×%Ò%Ñ'Ô'Ð'ØˆurG   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 ¦  «        }n%t          |t          ¦  «        st          |g¦  «        }t          |¦  «        D ]3}|j                             |                      ||dd	i¦  «        ¦  «         Œ4|                     ¦   «          |                     ¦   «          |                      |¦  «        �r©g }d
}|j        }|�)|                     ¦   «          t-          ||j        ¦  «        }|�)|                     ¦   «          t-          ||j        ¦  «        }|dz  }|�Kt/          |g¦  «        }|                     |d¦  «         |                     |t1          d|¦  «        g¦  «         t/          |g¦  «        }|                     |d¦  «         |                     |¦  «         |�]t/          |g¦  «        }|                     |d¦  «         |                     t1          d|¦  «        |g¦  «         |j        |z   |j        z   }t9          |¦  «        }||_        | j        r!|                      | j         d         ¦  «        gng }d| _        t          |g|¢¦  «        }|gS |}t          |t          ¦  «        r–|j        }t          |¦  «        rnt          |d         tB          ¦  «        r%t          |d         tD          ¦  «        r
|d d…         }|d         }t          |tD          ¦  «        r|j#        j$        |_        t          |d¬¦  «        }n6t          |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  }t9          |!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 )NrS  r   rT  rU  r.  zDouble subscriptzDouble superscriptr´   r®  r­   g      @rÖ  r§  FrÑ  éþÿÿÿr·  r„   r÷   r{  é   )6rë   r+  r<  r   r‘  r5  rË   rW   rX   r«   rÉ   rf  r…  rÌ  rN  Úextendr+   r@  rk  rî  r;   r  r‡   r´  r&  r½   r<   r=   rŠ  rM  r†  r¦  r_  ru  r0  r;  r˜   rÕ   rñ  rã  r>  rå  rç  r  r   rÜ  rÝ  rð   rñ   r  rà  rÞ  râ  rÛ  )%rS   rF  rï  rð  rS  rT  ÚnapostrophesÚsubrâ   ÚopÚargr2  Úrule_thicknessr  rÏ  ÚvlistrÇ  r;   Úvgapr�  ÚvltÚoptional_spacingrŽ  Ú	last_charrv  r  Ú	lc_heightÚlc_baselineÚ	superkernÚsubkernÚshift_upÚ
shift_downÚshrunk_x_heightrw   rx   Úclrré   s%                                       €r6   rT  zParser.subsuperB
  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™	œ	��Ý ¥uÑ-Ô-ð 'õ ˜u˜g™œ�Ý˜<Ñ(Ô(ð 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ˆrG   rH  rI  Úrulerš  rK  rY   rG  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�  r5  rÄ   rW   rX   r«   rÕ   rÉ   rÌ  rÕ  r   r  r´  r‡   r;   rk  r*  r&  rè  rë  ré  rì  r=   r<   rŠ  r&  r˜  rM  rê  rf  r+  Ú_auto_sized_delimiter)rS   rH  rI  r	  rK  rY   rG  r2  r™  r  r  r  r.  ÚcnumÚcdenr;   Únum_shift_upÚden_shift_downr  rã  Únum_clrÚden_clrrü  Úmin_clrÚdef_clrrŽ  s                             r6   Ú_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ØˆrG   c                óR   — |                       t          |d         ¦  «        ¦  «        S )NrE  )r*  r�   r™  s     r6   rE  zParser.style_literalA  s!   € Ø�Š�s 4¨Ô#8Ñ9Ô9Ñ:Ô:Ð:rG   c           	     óæ   — |                       |                     dd¦  «        |                     dd¦  «        |d         |                     d| j        j        ¦  «        |d         |d         ¦  «        S )NrH  rU  rI  rJ  rK  rY   rG  )r  rë   r*  r'  r™  s     r6   ru  zParser.genfracD  sc   € Ø�}Š}Ø�HŠH�X˜rÑ"Ô" D§H¢H¨X°rÑ$:Ô$:Ø�Ô˜dŸhšh w°´Ô0IÑJÔJØ�ŒK˜˜eœñ&ô &ð 	&rG   c           	     óª   — |                       dd|                      ¦   «                              ¦   «         | j        j        |d         |d         ¦  «        S ©NrU  rY   rG  )r  r‘  r�  r*  r'  r™  s     r6   rr  zParser.fracJ  sL   € Ø�}Š}Ø��D—N’NÑ$Ô$×DÒDÑFÔFØŒOÔ% t¨E¤{°D¸´KñAô Að 	ArG   c           	     óª   — |                       dd|                      ¦   «                              ¦   «         | j        j        |d         |d         ¦  «        S r  )r  r‘  r�  r*  r&  r™  s     r6   rs  zParser.dfracO  sL   € Ø�}Š}Ø��D—N’NÑ$Ô$×DÒDÑFÔFØŒOÔ(¨$¨u¬+°t¸E´{ñDô Dð 	DrG   c           	     ób   — |                       ddd| j        j        |d         |d         ¦  «        S )NrB  rG  r   rY   rG  )r  r*  r'  r™  s     r6   rt  zParser.binomT  s6   € Ø�}Š}Ø��aØŒOÔ% t¨E¤{°D¸´KñAô Að 	ArG   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 )NrN  rM  rÖ  r÷   r   Úur   )r‘  r�  r  r´  r‡   r;   rk  rŠ  r&  r=   r<   rM  )rS   rF  rï  rð  rN  rM  r™  Úcentered_annotationÚcentered_bodyr;   rý  rü  s               r6   Ú_gensetzParser._gensetY  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ð ˆrG   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 )NrL  rÕ  rõ  rY  r„   r¤  é°  rÖ  rá  r­   rô  g      à¿)rë   r‘  r�  r<   rM  r=   rÂ  rf  r+  rŠ  r˜  r€  rŒ  rX   r«   rP   r;   r  ru  )rS   rð  rL  rM  r2  r™  r<   r=   ÚcheckÚpadded_bodyÚ	rightsideÚ
root_vlistr�  s                r6   rv  zParser.sqrt{  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ˆrG   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 )NrM  r÷   r¤  r"  rÖ  )r‘  r�  r<   rM  r=   rŠ  r˜  r€  rf  rŒ  rX   r«   )	rS   rð  rM  r2  r™  r<   r=   r%  r�  s	            r6   rw  zParser.overline¤  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ˆrG   c                óZ  — |d         }|                       ¦   «         }|                     ¦   «         }t          t          |g¦  «        t	          d|z  ¦  «        t          ||¦  «        g¦  «        }|j        |j        z   |z   }|j        |_        ||j        z
  |_        t          |g¦  «        gS )NrM  r÷   )r‘  r�  rŠ  rf  ru  r˜  r<   r=   )rS   rð  rM  r2  r™  rü  rã  s          r6   rx  zParser.underline·  s£   € Ø�FŒ|ˆØ—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	åÝ�4�&‰MŒMÝ��Y‘ÑÔÝ�%˜Ñ#Ô#ð
ñ ô ˆð
 ”˜uœ{Ñ*¨YÑ6ˆØ”{ˆŒØ˜eœlÑ*ˆŒÝ�u�g‘”ÐÐrG   Ú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 rF   )r…  r,   r<   ©r\   rw   s     r6   r_   z0Parser._auto_sized_delimiter.<locals>.<listcomp>Ë  s)   € ÐMÐMÐM q½*ÀQÍÑ:LÔ:LÐM˜!œ(ÐMÐMÐMrG   c                óF   — g | ]}t          |t          ¦  «        °|j        ‘ŒS rF   )r…  r,   r=   r/  s     r6   r_   z0Parser._auto_sized_delimiter.<locals>.<listcomp>Ì  s)   € ÐKÐKÐK Q½
À1ÅcÑ8JÔ8JÐK˜œÐKÐKÐKrG   rV  r   rµ  )rÃ  r   rò  )r‘  r<  r‡   Ú	enumeraterð   rñ   r,   rÂ  ÚremoverÅ  rP   r0  r½   rö  rf  )rS   r)  r*  r,  r2  r<   r=   rÃ  ÚidxÚelr1  Úmiddle_partrR  r�  s                 r6   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‘”ˆØˆrG   c                óx   — |                       |d         |d                              ¦   «         |d         ¦  «        S )NrX  rË  rY  )r  r˜  r™  s     r6   r1  zParser.auto_delimì  s<   € Ø×)Ò)Ø�ŒL˜$˜uœ+×-Ò-Ñ/Ô/°°g´ñ@ô @ð 	@rG   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…  rf  rN  r0  rW   r6  r½   r1  Ú_latin_alphabetsÚ_small_greekr“  )rS   rð  r2  r�  rŒ  r1  Úks          r6   r€  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‰|Œ|ÐrG   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 )	NrR  c                ó,   — g | ]}t          |¦  «        ‘ŒS rF   )rf  )r\   r:  s     r6   r_   z#Parser.substack.<locals>.<listcomp>  s   € Ð,Ð,Ð,˜a•�q‘”Ð,Ð,Ð,rG   r   c                ó   — | j         S rR   r±  r8  s    r6   rp  z!Parser.substack.<locals>.<lambda>  s   €  a¤g€ rG   rÖ  c                ó   — g | ]	}|D ]}|‘ŒŒ
S rF   rF   )r\   Úpairr   s      r6   r_   z#Parser.substack.<locals>.<listcomp>  s=   € ð "ð "ð "ØØ ð"ð "àð ð "ð "ð "ð "rG   r„   rÑ  )r‘  r�  r‡   re   r´  rk  r½   Úzipr&  r<  rŠ  rf  )rS   rð  rR  r2  r™  r�  Ú	max_widthrü  rø  ÚcpÚstackrþ  rŽ  s                r6   r}  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ˆÝ˜˜‘,”,�ˆØˆrG   r  )
rF  r,   r‡  rŸ   rX   r:   r«   r:   r-   rf  r  )rð  r   r-   r–  )rð  r   r-   r   )rð  r   r-   rñ  )r¤  r:   r-   ru  )rF  r,   rï  r�   rð  r«  r-   rñ  rõ  )r-   rñ  )rS  r  r-   rn   )rH  r,   rI  r,   r	  rš  rK  r*  rY   rf  rG  rf  r-   rñ  )r)  r,   r*  r+  r,  r,   r-   rñ  )UrA   rB   rC   rD   ÚenumÚEnumr*  rh  ri  r·  r¹  Ú_arrow_symbolsr¶  rº  rë  rì  rð  rb  ro  Ú_ambi_delimsr¸  Ú_right_delimsre  rÌ  r0   r9  ÚstringÚascii_lettersr8  rT   r�  r‘  r“  r•  rƒ  r�  r‰   r‚  Ústaticmethodr   Úconvert_to_floatr^  r{  r¦  r_  rB  rj  r+   ra  rÔ  rk  rl  rm  rn  rF  rp  r  rc  r6  rh  ri  rd  rq  rW   rî  rñ  r>  rT  r  rE  ru  rr  rs  rt  r   ry  rz  rv  rw  rx  r  r1  r€  r}  r  r  s   @r6   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ðð ð ð ð=ð =ð =ð =ðð ð ð ðð ð ð ðð ð ð ð
ð ð ð ð
wð wð wð wð wð wðrDð Dð Dð DðL;ð ;ð ;ð ;ð&ð &ð &ð &ðAð Að Að Að
Dð Dð Dð Dð
Að Að Að Að
ð ð ð ð@ !Ð €Gˆhð'ð 'ð 'ð 'ðRð ð ð ð& ð  ð  ð  ð$ð $ð $ð $ðL@ð @ð @ð @ðð ð ð ð4ð ð ð ð ð ð ð rG   r#  )r+   r,   r-   r(   )rÍ  )rO   rP   rÎ  rÏ  r-   rN   )rí  r,   r-   r   )r  r,   rÓ  r   r-   r   ){rD   Ú
__future__r   ÚabcrÅ  rD  rã   rs  Úloggingr‰   rì   r=  r\  r˜  rI  rW  Útypingrð   r   Únumpyrf   Únumpy.typingr   Ú	pyparsingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
matplotlibr  rU  r   Ú_mathtext_datar   r   r   r    Úfont_managerr!   r"   r#   Úft2fontr$   r%   r&   ÚTYPE_CHECKINGÚcollections.abcr'   r(   r)   r*   Úenable_packratÚ	getLoggerr•  r7   r9   rB   rI   rN   r—   r›   ÚABCrŸ   ÚABCMetarÞ   r!  rn  r§  r©  r¸  r3  rƒ  r   r  rÓ   rg  rÖ  rÕ  rµ  rº  r  rP   r&  r+  r0  rD  rI  rf  rŠ  r”  r˜  rŸ  r¢  r¯  r€  r´  r»  ru  rÂ  rÉ  r‹   r÷  rù  r3  r!  r#  rF   rG   r6   ú<module>r^     sœ  ððð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð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ð)Bð )Bð )Bð )Bð )B�%ñ )Bô )Bð )BðX#0ð #0ð #0ð #0ð #0ñ #0ô #0ð #0ðL6ð 6ð 6ð 6ð2_ð _ð _ð _ð _ñ _ô _ð _ð _ð _rG   