Ë
    íÍ:j È ã                  ó�  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+Z,ddl-m.Z. dd	l/m0Z0m1Z1m2Z2m3Z3 dd
l4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; ejx                  rddl=m>Z> ddl8m?Z?m@Z@mAZA  e"j„                  «         ej†                  d«      ZDdnd„ZE G d„ de«      ZFdeF_G         G d„ de«      ZHdeH_G         G d„ d«      ZI G d„ de«      ZJ G d„ de«      ZK G d„ dej˜                  «      ZM G d„ deMejœ                  ¬«      ZO G d„ d eO«      ZP G d!„ d"eO«      ZQ G d#„ d$eQejœ                  ¬«      ZR G d%„ d&eR«      ZS G d'„ d(eR«      ZT G d)„ d*eQ«      ZU G d+„ d,eU«      ZVd-ZWd.ZX G d/„ d0«      ZY G d1„ d2eY«      ZZ G d3„ d4eY«      Z[ G d5„ d6e[«      Z\ G d7„ d8eY«      Z] G d9„ d:eY«      Z^ G d;„ d<«      Z_ G d=„ d>e_«      Z` G d?„ d@e`«      Za G dA„ dBe`«      Zb G dC„ dDe_«      Zc G dE„ dFec«      Zd G dG„ dHe`«      Ze G dI„ dJee«      Zf G dK„ dLee«      Zg G dM„ dNe`«      Zh G dO„ dPeh«      Zi G dQ„ dReh«      Zj G dS„ dTe«      Zk ekdUdVddUd«       ekdUdVdWdUd«       ekdUdVdXdUd«       ekdUdUddVd«       ekdUdUddVdW«       ekdUdUddVdX«       ekdUdUddUd«       ekdUdVddYd«      dZœek_l         G d[„ d\e_«      Zm G d]„ d^ef«      Zn G d_„ d`eg«      Zo G da„ dbe_«      Zp G dc„ ddef«      Zq G de„ dfef«      Zrdodpdg„Zsdqdh„Zt G di„ dj«      Zudrdk„Zv G dl„ dm«      Zwy)sz.
Implementation details for :mod:`.mathtext`.
é    )ÚannotationsN)Ú
NamedTuple)ÚNDArray)ÚEmptyÚForwardÚLiteralÚGroupÚNotAnyÚ	OneOrMoreÚOptionalÚParseBaseExceptionÚParseExpressionÚParseFatalExceptionÚParserElementÚParseResultsÚQuotedStringÚRegexÚ	StringEndÚ
ZeroOrMoreÚpyparsing_commonÚnested_exprÚone_ofé   )Úcbook)Úlatex_to_bakomaÚstix_glyph_fixesÚstix_virtual_fontsÚtex2uni)ÚFontPropertiesÚfindfontÚget_font)ÚFT2FontÚKerningÚ	LoadFlags)ÚIterable)ÚCharacterCodeTypeÚGlyphÚGlyphIndexTypezmatplotlib.mathtextc                óª   — 	 t        | «      S # t        $ r Y nw xY w	 t        | j                  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)ÚsymbolÚerrs     úi/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/matplotlib/_mathtext.pyÚget_unicode_indexr3   4   sg   € ðÜ�6‹{ÐøÜò ÙðúðÜ�v—|‘| DÓ)Ñ*Ð*øÜò ÜØˆjÐMÐNóàð	ûðús    ‚
 �	˜�5 µ	A¾AÁAc                  óD   — e Zd ZU dZded<   ded<   ded<   ded<   ded	<   y
)Ú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__© ó    r2   r5   r5   J   s$   … ñð ƒLØƒMØƒLØXÓXØ2Ô2rC   r5   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	<   y
)Ú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.
    r6   ÚoxÚoyr7   r8   r9   zNDArray[np.uint8]ÚimageNr<   rB   rC   r2   rE   rE   `   s(   … ñð 	ƒIØƒIØƒLØƒMØƒLØÔrC   rE   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	Ú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`.
    c                ó.   — || _         g | _        g | _        y ©N)Úboxr:   r;   )ÚselfrM   s     r2   Ú__init__zOutput.__init__   s   € ØˆŒØ;=ˆŒØ>@ˆ�
rC   c                ó  — t        t        j                  | j                  j                  | j                  j
                  | j                  j                  g«      \  }}}| j                  D ���cg c]F  \  }}}|j                  |j                  |j                  |j                  |||z
  |j                  z   f‘ŒH }}}}| j                  D ��	�
�cg c]  \  }}	}
}|||	|z   z
  |
|f‘Œ }}
}	}}t        |||z   |||«      S c c}}}w c c}}
}	}w rL   )ÚmapÚnpÚceilrM   r7   r8   r9   r:   ÚfontÚfontsizeÚnumÚglyph_indexÚoffsetr;   r5   )rN   ÚwÚhÚdrF   rG   ÚinfoÚgsÚbxÚbyÚbwÚbhÚrss                r2   Ú	to_vectorzOutput.to_vector„   sü   € ÜÜ�G‰G�d—h‘h—n‘n d§h¡h§o¡o°t·x±x·~±~ÐFóH‰ˆˆ1ˆað #'§+¡+÷/ð /á�"�b˜$ð �y‰y˜$Ÿ-™-¨¯©°4×3CÑ3CØ�1�r‘6˜DŸK™KÑ'ò)ð /ˆò /ð %)§J¡J÷0ñ 0Ù �"�b˜"˜bð �1˜˜R™‘= " bÒ)ð 0ˆó 0ô ˜1˜a !™e Q¨¨BÓ/Ð/ùô/ùõ0s   Á.AC=ÃD
c               ó„  — t        g | j                  D ���cg c]  \  }}}||j                  j                  z   ‘Œ! c}}}¢| j                  D ����cg c]	  \  }}}}|‘Œ c}}}}¢d‘«      dz
  }	t        g | j                  D ���cg c]  \  }}}||j                  j
                  z
  ‘Œ! c}}}¢| j                  D ����cg c]	  \  }}}}|‘Œ c}}}}¢d‘«      dz
  }
t        g | j                  D ���cg c]  \  }}}||j                  j                  z   ‘Œ! c}}}¢| j                  D ����cg c]  \  }}}}||z   ‘Œ c}}}}¢d‘«      dz   }t        g | j                  D ���cg c]  \  }}}||j                  j                  z
  ‘Œ! c}}}¢| j                  D ����cg c]  \  }}}}||z   ‘Œ c}}}}¢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 ]Y  \  }}}|j$                  j'                  |t)        |«      t)        ||j                  j*                  z
  «      |j,                  |¬«       Œ[ |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<   Œ� t1        dd|||z   ||«      S c c}}}w c c}}}}w c c}}}w c c}}}}w c c}}}w c c}}}}w c c}}}w c c}}}}w )Nr   r   )Úantialiasedé   éÿ   )Úminr:   ÚmetricsÚxminr;   ÚymaxÚmaxÚxmaxÚyminrM   r9   r8   rR   ÚzerosÚmathrS   Úuint8ÚshiprT   Údraw_glyph_to_bitmapÚintÚicebergÚglyphÚfloorrE   )rN   re   rF   rG   r\   ÚxÚyrY   rZ   rj   rn   rm   rk   r[   rH   Úshiftedr`   ra   r8   ÚcenterÚx1Úx2s                         r2   Ú	to_rasterzOutput.to_raster�   s„  € ô ð :ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð :Ø*.¯*©*×5Ñ5™J˜A˜q ! Q’aÕ5ð:Ø78ð:ó ;Ø=>ñ?ˆäð :ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð :Ø*.¯*©*×5Ñ5™J˜A˜q ! Q’aÕ5ð:Ø78ð:ó ;Ø=>ñ?ˆäð >ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð >Ø.2¯j©j×9Ñ9¡
  1 a¨�a˜!“eÕ9ð>Ø;<ð>ó ?ØABñCˆäð >ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð >Ø.2¯j©j×9Ñ9¡
  1 a¨�a˜!“eÕ9ð>Ø;<ð>ó ?ØABñCˆà�4‰KˆØ�4‰K˜$Ÿ(™(Ÿ.™.Ñ(ˆØ�4‰K˜$Ÿ(™(Ÿ/™/Ñ)ˆÜ—‘œ$Ÿ)™) A¬¨A¨q«	¡MÓ2´D·I±I¸a³LÐAÄ2Ç8Á8ÓLˆô �t—x‘x 4 %¨$¨ Ó0ˆà#ŸN™Nò 	)‰LˆB��DØ�I‰I×*Ñ*Ø”s˜2“w¤ B¨¯©×)=Ñ)=Ñ$=Ó >ÀÇ
Á
Ø'ð +õ )ð	)ð $ŸM™Mò 		0‰LˆAˆq�"�bÜœ˜R› 1™ aÓ(ˆFØ˜Š{Ø˜R !™V™�Ü˜ &¨1¡*°Ñ!1Ñ1Ó2‘ä˜“F�Ü—‘˜A“ˆBÜ—‘˜1˜r™6Ó"ˆBØ+/ˆE�!�A�f‘H˜Q‘J�,  2 a¡4 Ð'Ò(ð		0ô ˜1˜a  A¨¡E¨1¨eÓ4Ð4ùôC NùÝ5ùÜMùÝ5ùÜMùÝ9ùÜMùÝ9s/   —$NÁNÂ$NÂ?NÃ3$N$Ä-N+Å$$N3ÆN:N)rM   ÚBox)Úreturnr5   )re   Úboolr€   rE   )r=   r>   r?   r@   rO   rc   r~   rB   rC   r2   rJ   rJ   w   s   „ ñóAó
	0ô$5rC   rJ   c                  ól   — 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<   y)Ú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).
    r6   Úadvancer8   r7   rj   rm   rn   rk   ru   r�   ÚslantedNr<   rB   rC   r2   rƒ   rƒ   ¶   s6   … ñð( ƒNØƒMØƒLØ
ƒKØ
ƒKØ
ƒKØ
ƒKØƒNØ„MrC   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<   y)ÚFontInfor"   rT   r6   rU   ÚstrÚpostscript_namerƒ   ri   r&   rV   r(   rW   r'   rv   rX   N©r=   r>   r?   rA   rB   rC   r2   r‡   r‡   Ö   s.   … Ø
ƒMØƒOØÓØÓØ	ÓØÓØƒLØ„MrC   r‡   c                  óÐ   — 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d„Z
dd	„Zdd
„Zdd„Zdd„Z	 	 	 	 dd„Zdd„Zy)Ú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.
    c                ó    — || _         || _        y)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)Údefault_font_propÚload_glyph_flags)rN   rŽ   r�   s      r2   rO   zFonts.__init__ê   s   € ð "3ˆÔØ 0ˆÕrC   c
                 ó   — y)zŸ
        Get the kerning distance for font between *sym1* and *sym2*.

        See `~.Fonts.get_metrics` for a detailed description of the parameters.
        ç        rB   )
rN   Úfont1Ú
fontclass1Úsym1Ú	fontsize1Úfont2Ú
fontclass2Úsym2Ú	fontsize2Údpis
             r2   Úget_kernzFonts.get_kernø   s   € ð rC   c                ó   — t         ‚rL   ©ÚNotImplementedError)rN   rT   s     r2   Ú	_get_fontzFonts._get_font  s   € Ü!Ð!rC   c                ó   — t         ‚rL   r�   )rN   rT   Ú
font_classÚsymrU   rš   s         r2   Ú	_get_infozFonts._get_info  ó   € ä!Ð!rC   c                óD   — | j                  |||||«      }|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£   ri   )rN   rT   r¡   r¢   rU   rš   r\   s          r2   Úget_metricszFonts.get_metrics	  s$   € ð4 �~‰~˜d J°°X¸sÓCˆØ�|‰|ÐrC   c	                ój   — | j                  |||||«      }	|j                  j                  |||	f«       y)zœ
        At position (*ox*, *oy*), draw the glyph specified by the remaining
        parameters (see `get_metrics` for their detailed description).
        N)r£   r:   Úappend)
rN   ÚoutputrF   rG   rT   r¡   r¢   rU   rš   r\   s
             r2   Úrender_glyphzFonts.render_glyph&  s2   € ð �~‰~˜d J°°X¸sÓCˆØ�‰×Ñ˜b " d˜^Õ,rC   c                óB   — |j                   j                  ||||f«       y)zM
        Draw a filled rectangle at (*x*, *y*) with size (*w*, *h*).
        N)r;   r¨   ©rN   r©   rx   ry   rY   rZ   s         r2   Úrender_rect_filledzFonts.render_rect_filled/  s   € ð
 	�‰×Ñ˜Q  1 a˜LÕ)rC   c                ó   — t        «       ‚)zJ
        Get the axis height for the given *font* and *fontsize*.
        r�   ©rN   rT   rU   rš   s       r2   Úget_axis_heightzFonts.get_axis_height6  ó   € ô "Ó#Ð#rC   c                ó   — t        «       ‚)zM
        Get the size of a quad for the given *font* and *fontsize*.
        r�   r¯   s       r2   Úget_quadzFonts.get_quad<  r±   rC   c                ó   — t        «       ‚)zF
        Get the xheight for the given *font* and *fontsize*.
        r�   r¯   s       r2   Úget_xheightzFonts.get_xheightB  r±   rC   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       r2   Úget_underline_thicknesszFonts.get_underline_thicknessH  s   € ô
 "Ó#Ð#rC   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.
        rB   ©rN   Úfontnamer¢   s      r2   Ú!get_sized_alternatives_for_symbolz'Fonts.get_sized_alternatives_for_symbolO  s   € ð ˜3�Ð Ð rC   c                ó   — t         S rL   )ÚFontConstantsBase©rN   s    r2   Úget_font_constantszFonts.get_font_constantsY  s   € Ü Ð rC   N©rŽ   r   r�   r$   ©r’   rˆ   r“   rˆ   r”   rˆ   r•   r6   r–   rˆ   r—   rˆ   r˜   rˆ   r™   r6   rš   r6   r€   r6   ©rT   rˆ   r€   r"   )rT   rˆ   r¡   rˆ   r¢   rˆ   rU   r6   rš   r6   r€   r‡   )rT   rˆ   r¡   rˆ   r¢   rˆ   rU   r6   rš   r6   r€   rƒ   )r©   rJ   rF   r6   rG   r6   rT   rˆ   r¡   rˆ   r¢   rˆ   rU   r6   rš   r6   r€   ÚNone©r©   rJ   rx   r6   ry   r6   rY   r6   rZ   r6   r€   rÃ   ©rT   rˆ   rU   r6   rš   r6   r€   r6   ©rº   rˆ   r¢   rˆ   r€   zlist[tuple[str, str]]©r€   ztype[FontConstantsBase])r=   r>   r?   r@   rO   r›   rŸ   r£   r¦   rª   r­   r°   r³   rµ   r·   r»   r¿   rB   rC   r2   rŒ   rŒ   á   sø   „ ñó1ðØðØ),ðØ47ðØDIðàðà %óó"ð"Øð"Ø!)ó"ðØðØ#.óð:-Ø!$ð-Ø+.ð-Ø:?ð-ØFKð-ØPTó-ð*Ø#ð*Ø(-ð*Ø27ð*Ø<Að*ØFJó*ó$ó$ó$ó$ð!Ø/2ð!Ø7Ló!ô!rC   rŒ   c                  ó    ‡ — 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).
    c                ó  •— t         ‰| �  ||«       t        j                  | j                  «      | _        i | _        i | _        t        | j                  «      }t        |«      }|| j
                  d<   || j
                  d<   y )NÚdefaultÚregular)
ÚsuperrO   Ú	functoolsÚcacher£   Ú_fontsÚfontmapr    rŽ   r!   )rN   rŽ   r�   ÚfilenameÚdefault_fontÚ	__class__s        €r2   rO   zTruetypeFonts.__init__c  sl   ø€ Ü‰ÑÐ*Ð,<Ô=ä"Ÿ™¨¯©Ó8ˆŒØˆŒØ')ˆŒä˜D×2Ñ2Ó3ˆÜ Ó)ˆØ!-ˆ�‰�IÑØ!-ˆ�‰�IÒrC   c                óš  — | j                   j                  ||«      }| j                  j                  |«      }|€yt        j                  j                  |«      rZt        |«      }|| j                  |<   || j                  |j                  <   || j                  |j                  j                  «       <   t        j                  t        |«      S rL   )rÑ   ÚgetrÐ   ÚosÚpathÚexistsr!   r‰   ÚlowerÚTÚcastr"   )rN   rT   ÚbasenameÚcached_fonts       r2   rŸ   zTruetypeFonts._get_fonto  s™   € Ø—<‘<×#Ñ# D¨$Ó/ˆØ—k‘k—o‘o hÓ/ˆØÐ¤2§7¡7§>¡>°(Ô#;Ü" 8Ó,ˆKØ$/ˆD�K‰K˜Ñ!Ø7BˆD�K‰K˜×3Ñ3Ñ4Ø?JˆD�K‰K˜×3Ñ3×9Ñ9Ó;Ñ<Ü�v‰v”g˜{Ó+Ð+rC   c                ó^   — |j                   dk(  r|j                  dz  dz  |dz  |z  dz  z   S y)NÚCmex10é@   rf   é   éH   r‘   )r‰   r8   )rN   rT   rv   rU   rš   s        r2   Ú_get_offsetzTruetypeFonts._get_offsety  s:   € à×Ñ 8Ò+Ø—L‘L 2Ñ%¨Ñ)¨h°q©j¸3Ñ.>¸rÑ.AÑBÐBØrC   c                ó   — t         ‚rL   r�   )rN   rº   r¡   r¢   s       r2   Ú
_get_glyphzTruetypeFonts._get_glyph  r¤   rC   c                óä  — | j                  |||«      \  }}}|j                  ||«       |j                  |«      }	|j                  |	| j                  ¬«      }
d„ |
j
                  D «       \  }}}}| j                  ||
||«      }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  –— Œ y­w)rá   NrB   )Ú.0Úvals     r2   ú	<genexpr>z*TruetypeFonts._get_info.<locals>.<genexpr>‹  s   è ø€ Ò!A¨s #¨¥(Ñ!Aùó   ‚é   rá   )	r„   r8   r7   rj   rm   rn   rk   ru   r…   )rT   rU   r‰   ri   rV   rW   rv   rX   )ræ   Úset_sizeÚget_char_indexÚ
load_glyphr�   Úbboxrä   rƒ   ÚlinearHoriAdvancer8   r7   ÚhoriBearingYr‡   r‰   )rN   rº   r¡   r¢   rU   rš   rT   rV   r…   rW   rv   rj   rn   rm   rk   rX   ri   s                    r2   r£   zTruetypeFonts._get_info„  s  € à!Ÿ_™_¨X°zÀ3ÓGÑˆˆc�7Ø�‰�h Ô$Ø×)Ñ)¨#Ó.ˆØ—‘ °4×3HÑ3H�ÓIˆá!A°e·j±jÔ!AÑˆˆd�D˜$Ø×!Ñ! $¨¨x¸Ó=ˆÜØ×+Ñ+¨eÑ3Ø—<‘< "Ñ$Ø—+‘+ Ñ"ØØØ˜‘Ø˜‘à×&Ñ&¨Ñ+¨fÑ4Øô
ˆô ØØØ ×0Ñ0ØØØ#ØØô	
ð 		
rC   c                óè   — | j                  «       }|j                  �|j                  |z  |z  dz  S | j                  |t        j                  d   d||«      }|j
                  |j                  z   dz  S )Nrã   úmathtext.defaultõ   âˆ’rf   )r¿   Úaxis_heightr¦   ÚmplÚrcParamsrk   rn   ©rN   rº   rU   rš   Úconstsri   s         r2   r°   zTruetypeFonts.get_axis_height¥  sx   € Ø×(Ñ(Ó*ˆØ×ÑÐ)Ø×%Ñ%¨Ñ0°3Ñ6¸Ñ;Ð;ð ×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸HÀhÐPSóUˆGà—L‘L 7§<¡<Ñ/°1Ñ4Ð4rC   c                óÈ   — | j                  «       }|j                  �|j                  |z  |z  dz  S | j                  |t        j                  d   d||«      }|j
                  S )Nrã   rö   Úm)r¿   Úquadr¦   rù   rú   r„   rû   s         r2   r³   zTruetypeFonts.get_quad°  se   € Ø×(Ñ(Ó*ˆØ�;‰;Ð"Ø—;‘; Ñ)¨CÑ/°"Ñ4Ð4ð ×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸CÀÈ3óPˆGà—?‘?Ð"rC   c                óÈ   — | j                  «       }|j                  �|j                  |z  |z  dz  S | j                  |t        j                  d   d||«      }|j
                  S )Nrã   rö   rx   )r¿   Úx_heightr¦   rù   rú   ru   rû   s         r2   rµ   zTruetypeFonts.get_xheightº  se   € Ø×(Ñ(Ó*ˆØ�?‰?Ð&Ø—?‘? XÑ-°Ñ3°bÑ8Ð8ð ×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸CÀÈ3óPˆGà—?‘?Ð"rC   c                ó   — d|z  |z  dz  S )Ng      °?rã   rB   r¯   s       r2   r·   z%TruetypeFonts.get_underline_thicknessÅ  s   € ð ˜hÑ&¨Ñ,°Ñ2Ð2rC   c
                ó"  •— ||k(  rs||k(  rn| j                  |||||	«      }
| j                  |||||	«      }|
j                  }|j                  |
j                  |j                  t        j
                  «      dz  S t        ‰| �  |||||||||	«	      S )Nrá   )r£   rT   Úget_kerningrW   r#   ÚDEFAULTrÍ   r›   )rN   r’   r“   r”   r•   r–   r—   r˜   r™   rš   Úinfo1Úinfo2rT   rÔ   s                €r2   r›   zTruetypeFonts.get_kernË  s¡   ø€ ð �EŠ>˜i¨9Ò4Ø—N‘N 5¨*°d¸IÀsÓKˆEØ—N‘N 5¨*°d¸IÀsÓKˆEØ—:‘:ˆDØ×#Ñ# E×$5Ñ$5°u×7HÑ7HÜ$+§O¡Oó5Ø79ñ:ð :ä‰wÑ  z°4¸Ø % z°4¸ÀCóIð 	IrC   rÀ   rÂ   )
rT   r"   rv   r'   rU   r6   rš   r6   r€   r6   ©rº   rˆ   r¡   rˆ   r¢   rˆ   r€   z'tuple[FT2Font, CharacterCodeType, bool])rº   rˆ   r¡   rˆ   r¢   rˆ   rU   r6   rš   r6   r€   r‡   )rº   rˆ   rU   r6   rš   r6   r€   r6   rÅ   rÁ   )r=   r>   r?   r@   rO   rŸ   rä   ræ   r£   r°   r³   rµ   r·   r›   Ú__classcell__©rÔ   s   @r2   rÉ   rÉ   ]  s¨   ø„ ñõ

.ó,ðØðØ#(óð"Øð"Ø Gó"ð

Øð
Ø!)ó
óB	5ó#ó	#ó3ð
IØð
IØ),ð
IØ47ð
IØDIð
Iàð
Ià %÷
Iñ 
IrC   rÉ   )Ú	metaclassc                  óš  ‡— e Zd ZdZdddddddd	d
œZd=ˆfd„Z edj                  «       «      Z	 	 	 	 d>d„Z	dZ
i ddge
D � �cg c]
  }dd|› d�f‘Œ c}} ¢“ddge
D � �cg c]
  }dd|› d�f‘Œ c}} ¢“de
D � �cg c]
  }dd|› d�f‘Œ c}} “de
D � �cg c]
  }dd|› d�f‘Œ c}} “ddge
D � �cg c]
  }dd|› d�f‘Œ c}} ¢“ddge
D � �cg c]
  }dd |› d�f‘Œ c}} ¢“d!d"ge
D � �cg c]
  }dd#|› d�f‘Œ c}} ¢“d$d%ge
D � �cg c]
  }dd&|› d�f‘Œ c}} ¢“d'e
D � �cg c]
  }dd(|› d�f‘Œ c}} “d)e
D � �cg c]
  }dd*|› d�f‘Œ c}} “d+e
D � �cg c]
  }dd,|› d�f‘Œ c}} “d-e
D � �cg c]
  }dd.|› d�f‘Œ c}} “d/e
D � �cg c]
  }dd0|› d�f‘Œ c}} “d1e
D � �cg c]
  }dd2|› d�f‘Œ c}} “d3d4ge
D � �cg c]
  }dd5|› d�f‘Œ c}} ¢“d6g d7¢“d8g d9¢“Zd:D ]  \  ZZee   ee<   Œ 	 	 	 	 d?d;„Zd@d<„ZˆxZS c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w c c}} w )AÚ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Úexc                óÞ   •— t        ||«      | _        t        ‰| �  ||«       | j                  j                  «       D ].  \  }}t        |«      }|| j                  |<   || j                  |<   Œ0 y rL   )Ú	StixFontsÚ_stix_fallbackrÍ   rO   Ú_fontmapÚitemsr    rÑ   )rN   rŽ   r�   Úkeyrë   ÚfullpathrÔ   s         €r2   rO   zBakomaFonts.__init__ê  sj   ø€ Ü'Ð(9Ð;KÓLˆÔä‰ÑÐ*Ð,<Ô=ØŸ™×+Ñ+Ó-ò 	)‰HˆC�Ü “}ˆHØ (ˆD�L‰L˜ÑØ (ˆD�L‰L˜Òñ	)rC   ú
\int \ointc                ó˜  — d }|| j                   v r:|t        v r2t        |   \  }}|dv xs || j                  v }| j                  |«      }nIt	        |«      dk(  r;|dv }|dk(  r|j                  «       rd}d}| j                  |«      }|�t        |«      }|�|j                  «      dk7  r||fS | j                  j                  |||«      S )N)r  r  r   )r  r  r  r  Fr   )
rÑ   r   Ú_slanted_symbolsrŸ   ÚlenÚisdigitr+   rð   r   ræ   )rN   rº   r¡   r¢   rT   rÝ   rV   r…   s           r2   ræ   zBakomaFonts._get_glyphõ  sà   € àˆà�t—|‘|Ñ#¨¬Ñ(>Ü+¨CÑ0‰MˆH�cØÐ#7Ð7ÒX¸CÀ4×CXÑCXÐ<XˆGØ—>‘> (Ó+‰DÜ�‹X˜Š]ØÐ#3Ð3ˆGØ˜8Ò#¨¯©¬ð  �Ø�Ø—>‘> (Ó+ˆDØÐÜ˜#“h�ØÐ × 3Ñ 3°CÓ 8¸AÒ =Ø˜˜gÐ%Ð%à×&Ñ&×1Ñ1°(¸JÈÓLÐLrC   )ÚbigÚBigÚbiggÚBiggú()r  r.  r  z\__parenleftÚ__ú))r  r0  z\__parenrightú{z\__braceleftú}z\__bracerightú[)r  r3  z\__bracketleftú])r  r4  z\__bracketrightú<)r  z\__angbracketleft__z\__angbracketleftú>)r  z\__angbracketright__z\__angbracketrightz\lfloorz\__floorleftz\rfloorz\__floorrightz\lceilz\__ceilingleftz\rceilz\__ceilingrightú	\__sqrt__z
\__radicalz
\backslashz\__backslashú/)r  r8  z\__slashz\widehat))r  ú^)r  z\__hatwide__)r  z\__hatwider__)r  z\__hatwidest__z
\widetilde))r  ú~)r  z\__tildewide__)r  z\__tildewider__)r  z\__tildewidest__))z
\leftparenr.  )z\rightparenr0  )z
\leftbracer1  )z\rightbracer2  )z\leftbracketr3  )z\rightbracketr4  )z\langler5  )z\rangler6  )ú\{r1  )ú\}r2  )ú\[r3  )ú\]r4  c                ó@   — | j                   j                  |||fg«      S rL   )Ú_size_alternativesrÖ   r¹   s      r2   r»   z-BakomaFonts.get_sized_alternatives_for_symbol0  s"   € à×&Ñ&×*Ñ*¨3°(¸C°Ð0AÓBÐBrC   c                ó   — t         S rL   )ÚComputerModernFontConstantsr¾   s    r2   r¿   zBakomaFonts.get_font_constants4  s   € Ü*Ð*rC   rÀ   r  rÆ   rÇ   )r=   r>   r?   r@   r!  rO   ÚsetÚsplitr'  ræ   Ú_latex_sizesr@  ÚaliasÚtargetr»   r¿   r	  )rê   ÚsrÔ   s   00@r2   r  r  Ø  sp  ø„ ñð ØØØØØØØñ	€Hõ)ñ ˜=×.Ñ.Ó0Ó1ÐðMØðMØ GóMð4 2€LðØˆkÐRÀL×Q¸q˜d |°A°3°bÐ$9Ò:ÓQÐRðàˆkÐSÀ\×RÀ˜d }°Q°C°rÐ$:Ò;ÓRÐSðð 	°\×B°ˆt˜ Q C rÐ*Ò+ÓBðð 	°l×C°ˆt˜ a S¨Ð+Ò,ÓCð	ð
 	ˆkÐTÀl×SÀ˜d ~°a°S¸Ð$;Ò<ÓSÐTðð 	ˆkÐUÀ|×TÀ!˜d °q°c¸Ð$<Ò=ÓTÐUðð 	Ð-ð KØ<H×I°q�Ð+¨A¨3¨bÐ1Ò2ÓIðKðð 	Ð.ð LØ=I×J¸�Ð,¨Q¨C¨rÐ2Ò3ÓJðLðð 	¸L×I°q�d˜|¨A¨3¨bÐ1Ò2ÓIðð 	¸\×J¸�d˜}¨Q¨C¨rÐ2Ò3ÓJðð 	¸\×J¸�T˜n¨Q¨C¨rÐ2Ò3ÓJðð 	¸l×K¸�T˜o¨a¨S°Ð3Ò4ÓKðð 	¸L×I°q˜ ¨A¨3¨bÐ1Ò2ÓIðð  	¸|×L¸!˜ ,¨q¨c°Ð4Ò5ÓLð!ð" 	ˆ{ÐOÀ×N¸A˜t¨°°°2Ð%6Ò7ÓNÐOð#ð$ 	ò 1ð%ð( 	ò Qð)Ðð06ò ?‰ˆˆvð %7°vÑ$>Ð˜5Ò!ð?ðCØ/2ðCØ7LóC÷+ùóG RùÛRùÛBùÛCùÛSùÛTùãIùãJùÛIùÛJùÛJùÛKùÛIùÛLùÛNsZ   ÁG3ÁG9Á8G?
ÂH
Â,HÃHÃ$HÄ HÄH#
Ä3H)
ÅH/
Å%H5
Å>H;
ÆI
Æ2Ir  c                  ó–   ‡ — e Zd ZU dZdddœZded<   dˆ fd„Z edj                  «       «      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_substitutionsc                óP  •— t         j                  d   }t        t        t        dœj                  |«      }|r	 |||«      nd | _        t        ‰| �!  ||«       dj                  «       D ]2  }t         j                  d|z      }t        |«      }|| j                  |<   Œ4 t        d«      }t        |«      }|| j                  d<   t        | j                  t        «      rKddd	d
dddœ}|j                  «       D ].  \  }	}
t        |
«      }|| j                  |	<   || j                  |
<   Œ0 y y )Nzmathtext.fallback)ÚstixÚstixsansÚcmzcal rm tt it bf sf bfitz	mathtext.r  r  ÚSTIXGeneralÚSTIXSizeOneSymÚSTIXSizeTwoSymÚSTIXSizeThreeSymÚSTIXSizeFourSymÚSTIXSizeFiveSym)Ú0Ú1Ú2Ú3Ú4Ú5)rù   rú   r  ÚStixSansFontsr  rÖ   Ú_fallback_fontrÍ   rO   rD  r    rÑ   r   Ú
isinstancer"  )rN   rŽ   r�   Úfallback_rcÚfont_clsÚtexfontÚproprT   ÚstixsizedaltfontsÚsizeÚnamer$  rÔ   s               €r2   rO   zUnicodeFonts.__init__L  s;  ø€ ä—l‘lÐ#6Ñ7ˆäÜ%Üñ0
÷ ‰#ˆkÓ
ð	 	ñ #+ñ  (Ð(9Ð;KÔLØ04ð 	Ôô 	‰ÑÐ*Ð,<Ô=Ø0×6Ñ6Ó8ò 	)ˆGÜ—<‘< ¨gÑ 5Ñ6ˆDÜ˜D“>ˆDØ$(ˆD�L‰L˜Ò!ð	)ô ˜hÓ'ˆÜ˜‹~ˆØ!ˆ�‰�TÑô �d×)Ñ)¬9Ô5à"Ø%Ø%Ø'Ø&Ø&ñ!Ðð 0×5Ñ5Ó7ò .‘
��dÜ# D›>�Ø%-�—‘˜TÑ"Ø%-�—‘˜TÒ"ñ.ð 6rC   r%  c                ó
   — ||fS rL   rB   )rN   rº   r¡   Úuniindexs       r2   Ú_map_virtual_fontzUnicodeFonts._map_virtual_fontr  s   € à˜Ð!Ð!rC   c                ó^  — 	 t        |«      }d}| j                  |||«      \  }}|}|rå|dk(  rT|dk  rOt        |«      }t        j                  |«      d   dk7  s$t        j                  |«      j                  d	«      rd
}nd}|dk(  xs || j                  v }d}| j                  |«      }	|	�b|| j                  v r<|	j                  dk(  r-t        t!        j"                  d«      «      }	| j                  |   }|	j%                  |«      }
|
dk7  rd}|sç| j&                  r‡|dv rt)        | j&                  t*        «      rd
}| j&                  j-                  |||«      }|d   j                  }|t.        j0                  j3                  «       v rd}t        j5                  d||«       |S |dv r#t)        | t*        «      r| j-                  d
||«      S t        j	                  d|||«       | j                  d
«      }	d}d}	|fS # t        $ r' t        d«      }d}t        j	                  d|«       Y �Œw xY w)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.é¤   )r3   r/   r+   Ú_logÚwarningrk  ÚchrÚunicodedataÚcategoryrh  Ú
startswithr'  rŸ   rN  Úfamily_namer!   r   Ú_get_data_pathrð   r`  ra  r  ræ   r  r!  Úvaluesr\   )rN   rº   r¡   r¢   rj  Úfound_symbolÚnew_fontnameÚcharr…   rT   Ú
glyphindexÚgÚfamilys                r2   ræ   zUnicodeFonts._get_glyphv  sB  € ð	CÜ(¨Ó-ˆHØˆLð "×3Ñ3°H¸jÈ(ÓSÑˆ�(àˆñ Ø˜8Ò#¨°7Ò(:ä˜8“}�Ü×(Ñ(¨Ó.¨qÑ1°SÒ8Ü&×+Ñ+¨DÓ1×<Ñ<¸_ÔMØ#'‘Là#'�Là# tÑ+ÒL°°t×7LÑ7LÐ0LˆGØ ˆLØ—>‘> ,Ó/ˆDØÐØ × 9Ñ 9Ñ9Ø ×,Ñ,°Ò7Ü#Ü×,Ñ,Ð-CÓDóF�Dà#×8Ñ8¸ÑB�HØ!×0Ñ0°Ó:�
Ø ’?Ø#'�LáØ×"Ò"ØÐ ;Ñ;Ü& t×':Ñ':¼IÔFØ#�Hà×'Ñ'×2Ñ2°8¸ZÈÓM�Ø˜1™×)Ñ)�Øœ[×1Ñ1×8Ñ8Ó:Ñ:Ø.�FÜ—	‘	Ð:¸CÀÔHØ�ð Ð ;Ñ;Ü& t¬YÔ7ØŸ?™?¨4°¸SÓAÐAÜ—‘ð Aà)¨3°ô:ð —~‘~ dÓ+�Ø�Ø�à�X˜wÐ&Ð&øôu ò 	CÜ˜3“xˆHØ ˆLÜ�L‰LÐ<¸c×Bð	Cús   ‚G< Ç<,H,È+H,c                ó\   — | j                   r| j                   j                  ||«      S ||fgS rL   )r`  r»   r¹   s      r2   r»   z.UnicodeFonts.get_sized_alternatives_for_symbol·  s2   € à×ÒØ×&Ñ&×HÑHÈÐSVÓWÐWØ˜3�Ð Ð rC   rÀ   ©rº   rˆ   r¡   rˆ   rj  r&   r€   ztuple[str, CharacterCodeType]r  rÆ   )r=   r>   r?   r@   rN  rA   rO   rC  rD  r'  rk  ræ   r»   r	  r
  s   @r2   rJ  rJ  8  s}   ø… ñ	ð ØñHÐÐDó õ
".ñH ˜=×.Ñ.Ó0Ó1Ðð"Ø$5ð"Ø:Wó"ð?'Øð?'Ø Gó?'ðB!Ø/2ð!Ø7L÷!rC   rJ  c                  ó@   ‡ — e Zd ZU i Zded<   dd„Z	 	 	 	 dˆ fd„Zˆ xZS )ÚDejaVuFontszdict[str, str]r!  c                ó’  — t        | t        «      rt        ||«      | _        nt	        ||«      | _        t        ||«      | _        t        j                  | ||«       | j                  j                  ddddddœ«       | j                  j                  «       D ].  \  }}t        |«      }|| j                  |<   || j                  |<   Œ0 y )NrT  rU  rV  rW  rX  )rZ  r[  r\  r]  r^  )ra  ÚDejaVuSerifFontsr  r`  r_  r  ÚbakomarÉ   rO   r!  Úupdater"  r    rÑ   ©rN   rŽ   r�   r#  rh  r$  s         r2   rO   zDejaVuFonts.__init__Á  sÀ   € ä�dÔ,Ô-Ü"+Ð,=Ð?OÓ"PˆDÕä"/Ð0AÐCSÓ"TˆDÔÜ!Ð"3Ð5EÓFˆŒÜ×Ñ˜tÐ%6Ð8HÔIà�‰×ÑØ!Ø!Ø#Ø"Ø"ñ
ô 	ð Ÿ™×,Ñ,Ó.ò 	*‰IˆC�Ü “~ˆHØ (ˆD�L‰L˜ÑØ!)ˆD�L‰L˜Òñ	*rC   c                óô   •— |dk(  r| j                   j                  |||«      S t        |«      }| j                  d«      }|�'|j	                  |«      }|dk7  rt
        ‰| �  d||«      S t
        ‰| �  |||«      S )Nú\primer  r   )r…  ræ   r3   rŸ   rð   rÍ   )rN   rº   r¡   r¢   rj  rT   r|  rÔ   s          €r2   ræ   zDejaVuFonts._get_glyphÖ  s…   ø€ ð �)ÒØ—;‘;×)Ñ)¨(°JÀÓDÐDô )¨Ó-ˆHØ—>‘> $Ó'ˆDØÐØ!×0Ñ0°Ó:�
Ø ’?Ü ™7Ñ-¨d°JÀÓDÐDä‘7Ñ% h°
¸CÓ@Ð@rC   rÀ   r  )r=   r>   r?   r!  rA   rO   ræ   r	  r
  s   @r2   r‚  r‚  ¾  s0   ø… Ø!€HˆnÓ!ó*ð*AØðAØ G÷Añ ArC   r‚  c            	      ó.   — e Zd ZdZddddddddd	œZdd
„Zy)r„  zv
    A font handling class for the DejaVu Serif fonts

    If a glyph is not found it will fallback to Stix Serif
    zDejaVu SerifzDejaVu Serif:italiczDejaVu Serif:weight=boldzDejaVu Serif:italic:boldúDejaVu SansúDejaVu Sans MonozDejaVu Serif Display©r  r  r  Úbfitr  r  r  rY  c                ó   — t         S rL   )ÚDejaVuSerifFontConstantsr¾   s    r2   r¿   z#DejaVuSerifFonts.get_font_constantsø  s   € Ü'Ð'rC   NrÇ   ©r=   r>   r?   r@   r!  r¿   rB   rC   r2   r„  r„  ç  s-   „ ñð Ø#Ø(Ø*ØØ Ø$Øñ	€Hô(rC   r„  c            	      ó.   — e Zd ZdZdddddddddœZdd	„Zy
)Ú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�  c                ó   — t         S rL   )ÚDejaVuSansFontConstantsr¾   s    r2   r¿   z"DejaVuSansFonts.get_font_constants  s   € Ü&Ð&rC   NrÇ   r‘  rB   rC   r2   r“  r“  ü  s-   „ ñð Ø"Ø'Ø)ØØ Ø#Øñ	€Hô'rC   r“  c                  ó†   — 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y)r  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.
    rS  zSTIXGeneral:italiczSTIXGeneral:weight=boldzSTIXGeneral:italic:boldÚSTIXNonUnicodezSTIXNonUnicode:italiczSTIXNonUnicode:weight=boldrT  rU  rV  rW  rX  )r  r  r  rŽ  ÚnonunirmÚnonuniitÚnonunibfrY  rZ  r[  r\  r]  r^  NFc                óÈ   — t         j                  | ||«       | j                  j                  «       D ].  \  }}t	        |«      }|| j
                  |<   || j
                  |<   Œ0 y rL   )rÉ   rO   r!  r"  r    rÑ   r‡  s         r2   rO   zStixFonts.__init__/  s[   € Ü×Ñ˜tÐ%6Ð8HÔIØŸ™×,Ñ,Ó.ò 	*‰IˆC�Ü “~ˆHØ (ˆD�L‰L˜ÑØ!)ˆD�L‰L˜Òñ	*rC   c                óZ  — t        j                  |«      }| j                  r|€|dvrt         d   }d}nd}t        |t        «      r	 ||   }nt        |t        «      r|}nd }|�}d}t        |«      }||k  r,||z   dz  }	||	   }
||
d   k  r|	}n||
d   k  rn|	dz   }||k  rŒ,
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 ||fS d|z   }||fS # t
        $ r |d   }Y ŒÇw xY w)N)rÌ   rË   r  TFr  r   rf   r   râ   rö   )r  r  r  )r  r  r  rŽ  i à  iÿø  Únonuni)r   rÖ   Ú_sansra  Údictr.   Úlistr(  rù   rú   r   )rN   rº   r¡   rj  Úfont_mappingÚdoing_sans_conversionÚmappingÚloÚhiÚmidÚranges              r2   rk  zStixFonts._map_virtual_font6  s“  € ô *×-Ñ-¨hÓ7ˆØ�JŠJ˜<Ð/ØÐ$:Ñ:Ü-¨dÑ3ˆLØ$(Ñ!à$)Ð!ä�l¤DÔ)ð-Ø& zÑ2‘ô ˜¤dÔ+Ø"‰GàˆGàÐàˆBÜ�W“ˆBØ�r’'Ø˜"‘u˜q‘j�Ø ™�Ø˜e A™hÒ&Ø‘BØ  q¡Ò)Øà˜q™�Bð �r“'ð �Q‰x˜8Ô/ u¨Q¡xÕ/Ø# e¨A¡hÑ.°°q±Ñ9�Ø  ™8‘Ù*à�ÜŸ<™<Ð(:Ñ;�ð Ð-Ñ-Ü'×+Ñ+¨H°hÓ?ˆHð Ð1Ñ1°fÀÔ6RÈFÔ6Rð ˜Ð!Ð!ð   (Ñ*ˆHà˜Ð!Ð!øôK ò -Ø& tÑ,’ð-ús   ÁD ÄD*Ä)D*c                óJ  — dddddddœ}|j                  ||«      }	 t        |«      }t        d«      D �cg c]D  }| j	                  t        |«      «      j                  |«      d	k7  rt        |«      t        |«      f‘ŒF }}|d
k(  r|d d }|S # t        $ r ||fgcY S w xY wc c}w )Nr1  r2  r3  r4  u   âŸ¨u   âŸ©)r;  r<  r=  r>  r5  r6  é   r   r7  éÿÿÿÿ)rÖ   r3   r/   r§  rŸ   rˆ   rð   rr  )rN   rº   r¢   Úfixesrj  ÚiÚalternativess          r2   r»   z+StixFonts.get_sized_alternatives_for_symboll  sÌ   € ð ˜s¨3°sØ6Ø7ñ
ˆð
 �i‰i˜˜SÓ!ˆð	%Ü(¨Ó-ˆHô :?¸q»ö Q°AØŸ>™>¬#¨a«&Ó1×@Ñ@ÀÓJÈaÒOô ˜Q›¤ X£Ò/ð Qˆð Qð �,ÒØ'¨¨Ð,ˆLØÐøô ò 	%Ø˜s�OÐ$Ò$ð	%üòQs   �B µA	B ÂBÂBc                ó2   — | j                   rt        S t        S rL   )rž  ÚSTIXSansFontConstantsÚSTIXFontConstantsr¾   s    r2   r¿   zStixFonts.get_font_constants�  s   € Ø�:Š:Ü(Ð(ä$Ð$rC   rÀ   r€  rÆ   rÇ   )r=   r>   r?   r@   r!  r`  rž  rO   rk  rÎ   rÏ   r»   r¿   rB   rC   r2   r  r    s‹   „ ñ
ð Ø"Ø'Ø)Ø$Ø+Ø0ØØØØØØñ€Hð €NØ€Eó*ð4"Ø$5ð4"Ø:Wó4"ðl ‡_�_ðØ/2ðØ7Lòó ðô(%rC   r  c                  ó   — e Zd ZdZdZy)r_  zd
    A font handling class for the STIX fonts (that uses sans-serif
    characters by default).
    TN)r=   r>   r?   r@   rž  rB   rC   r2   r_  r_  ˆ  s   „ ñð �ErC   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!<   y)"r½   zÔ
    A set of constants that controls how certain things, such as sub-
    and superscripts are laid out.  These are all metrics that can't
    be reliably retrieved from the font metrics in the font itself.
    çš™™™™™©?zT.ClassVar[float]Úscript_spacegš™™™™™Ù?ÚsupdropÚsubdropr²  Úsup1ç333333Ó?Úsub1ç      à?Úsub2gš™™™™™™?Údeltaçš™™™™™É?Údelta_slantedçš™™™™™¹?Údelta_integralgffffffö?Únum1g      ø?Únum2gÍÌÌÌÌÌô?Únum3Údenom1gš™™™™™ñ?Údenom2NzT.ClassVar[float | None]rø   rÿ   r  )r=   r>   r?   r@   rµ  rA   r¶  r·  r¸  rº  r¼  r½  r¿  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rø   rÿ   r  rB   rC   r2   r½   r½   ¯  sä   … ñð '+€LÐ#Ó*ð "%€GÐÓ$ð "%€GÐÓ$ð "€DÐ
Ó!ð "€DÐ
Ó!ð "€DÐ
Ó!ð  %€EÐÓ$ð
 (+€MÐ$Ó*ð ),€NÐ%Ó+ð "€DÐ
Ó!ð "€DÐ
Ó!ð "€DÐ
Ó!ð !$€FÐÓ#ð !$€FÐÓ#ð -1€KÐ)Ó0ð &*€DÐ
"Ó)ð *.€HÐ&Ô-rC   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y)rB  gš™™™™Á?r¹  iŽã i€- iÍÌ  i5› iff išô iúÒ
 iºL i† i¨ù
 ix„ ç      Ð?g     ð?i   N)r=   r>   r?   rµ  r½  r¿  rÁ  Ú	_x_heightr¶  r·  r¸  rº  r¼  rÂ  rÃ  rÄ  rÅ  rÆ  rø   rÿ   r  rB   rC   r2   rB  rB  ó  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Ñ �HrC   rB  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y)r°  rÀ  r´  r¹  iÂ  iè  i‚  gÇº¸� I@i�  é–   i5  ië  i¨  iÚ  iô  iw  rÈ  ç      ð?N)r=   r>   r?   rµ  r½  r¿  rÁ  rÉ  r  r¶  r·  r¸  rº  r¼  rÂ  rÃ  rÄ  rÅ  rÆ  rø   rÿ   rB   rC   r2   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Ø�DrC   r°  c                  ó   — e Zd ZdZdZdZy)r¯  r´  ç333333ã?r¹  N)r=   r>   r?   rµ  r¿  rÁ  rB   rC   r2   r¯  r¯  +  s   „ Ø€LØ€MØ�NrC   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y)r�  i'  é   çð§ÆK7´ˆ@çš™™™™™Y@ç;ßO�—nŠ@çw¾Ÿ/3s@ç-²�ï§Æƒ@ç=
×£pç—@ç‰A`åÐ"‹@ç¼t“VŽ@ç\�Âõ(1˜@é   rÈ  N©r=   r>   r?   rÉ  r  r¶  r·  r¸  rº  r¼  rÂ  rÃ  rÄ  rÅ  rÆ  rø   rB   rC   r2   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ð �KrC   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y)r•  i`  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÈ  NrÛ  rB   rC   r2   r•  r•  F  rÜ  rC   r•  c                  ó@   — e Zd ZdZd	d„Zd
d„Zdd„Zd	d„Zdd„Zdd„Z	y)ÚNodezA node in the TeX box model.c                ó   — d| _         y ©Nr   ©rg  r¾   s    r2   rO   zNode.__init__^  s	   € Øˆ�	rC   c                ó,   — t        | «      j                  S rL   )Útyper=   r¾   s    r2   Ú__repr__zNode.__repr__a  s   € Ü�D‹z×"Ñ"Ð"rC   c                 ó   — y©Nr‘   rB   )rN   Únexts     r2   r  zNode.get_kerningd  s   € ØrC   c                ó.   — | xj                   dz  c_         y)zŠ
        Shrinks one level smaller.  There are only three levels of
        sizes, after which things will no longer get smaller.
        r   Nrâ  r¾   s    r2   ÚshrinkzNode.shrinkg  s   € ð
 	�	Š	�Q‰Ž	rC   c                 ó   — y)zRender this node.NrB   ©rN   r©   rx   ry   s       r2   ÚrenderzNode.rendern  s   � rC   c                 ó   — y)NTrB   r¾   s    r2   Úis_char_nodezNode.is_char_nodeq  s   € ð rC   N©r€   rÃ   ©r€   rˆ   ©rè  zNode | Noner€   r6   ©r©   rJ   rx   r6   ry   r6   r€   rÃ   ©r€   r�   )
r=   r>   r?   r@   rO   rå  r  rê  rí  rï  rB   rC   r2   rß  rß  [  s#   „ Ù&óó#óóó ôrC   rß  c                  óL   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Z	 	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )r   z A node with a physical location.c                óL   •— t         ‰| �  «        || _        || _        || _        y rL   )rÍ   rO   r7   r8   r9   )rN   r7   r8   r9   rÔ   s       €r2   rO   zBox.__init__~  s#   ø€ Ü‰ÑÔØˆŒ
ØˆŒØˆ�
rC   c                óà   •— t         ‰| �  «        | j                  t        k  rL| xj                  t
        z  c_        | xj                  t
        z  c_        | xj                  t
        z  c_        y y rL   )rÍ   rê  rg  ÚNUM_SIZE_LEVELSr7   ÚSHRINK_FACTORr8   r9   ©rN   rÔ   s    €r2   rê  z
Box.shrink„  sH   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�JŠJœ=Ñ(�JØ�KŠKœ=Ñ(�KØ�JŠJœ=Ñ(ŽJð 'rC   c                 ó   — y rL   rB   )rN   r©   r|   Úy1r}   Úy2s         r2   rí  z
Box.render‹  s   € àrC   )r7   r6   r8   r6   r9   r6   r€   rÃ   rð  )r©   rJ   r|   r6   rü  r6   r}   r6   rý  r6   r€   rÃ   )r=   r>   r?   r@   rO   rê  rí  r	  r
  s   @r2   r   r   {  s=   ø„ Ù*õõ)ðØðØ#ðØ).ðØ49ðØ>B÷rC   r   c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚVboxz$A box with only height (zero width).c                ó(   •— t         ‰| �  d||«       y rç  ©rÍ   rO   )rN   r8   r9   rÔ   s      €r2   rO   zVbox.__init__“  s   ø€ Ü‰Ñ˜˜V UÕ+rC   )r8   r6   r9   r6   ©r=   r>   r?   r@   rO   r	  r
  s   @r2   rÿ  rÿ  �  s   ø„ Ù.÷,ñ ,rC   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).c                ó(   •— t         ‰| �  |dd«       y rç  r  ©rN   r7   rÔ   s     €r2   rO   zHbox.__init__š  s   ø€ Ü‰Ñ˜  BÕ'rC   ©r7   r6   r  r
  s   @r2   r  r  —  s   ø„ Ù8÷(ñ (rC   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`.
    c                óú   •— t         ‰| �  «        || _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        | j                  «        y rL   )	rÍ   rO   ÚcÚfontsetrT   r¡   rU   rš   Ú_update_metrics)rN   r  ÚstaterÔ   s      €r2   rO   zChar.__init__«  s\   ø€ Ü‰ÑÔØˆŒØ—}‘}ˆŒØ—J‘JˆŒ	Ø×*Ñ*ˆŒØŸ™ˆŒØ—9‘9ˆŒð 	×ÑÕrC   c                ó    — d| j                   z  S )Nz`%s`©r  r¾   s    r2   rå  zChar.__repr__·  s   € Ø˜Ÿ™‰ÐrC   c                óx  — | j                   j                  | j                  | j                  | j                  | j
                  | j                  «      x}| _        | j                  dk(  r|j                  | _	        n|j                  | _	        |j                  | _        |j                  |j                  z
   | _        y )Nú )r  r¦   rT   r¡   r  rU   rš   Ú_metricsr„   r7   ru   r8   r9   ©rN   ri   s     r2   r  zChar._update_metricsº  sƒ   € Ø"&§,¡,×":Ñ":Ø�I‰I�t—‘¨¯©°·±¸t¿x¹xó#Ið 	Iˆ�$”-à�6‰6�SŠ=Ø Ÿ™ˆD�Jà Ÿ™ˆDŒJØ—o‘oˆŒØ—‘¨¯©Ñ7Ð8ˆ�
rC   c                ó.   — | j                   j                  S rL   )r  r…   r¾   s    r2   Ú
is_slantedzChar.is_slantedÄ  s   € Ø�}‰}×$Ñ$Ð$rC   c                óp  — | j                   j                  | j                  z
  }d}t        |t        «      r}| j
                  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„   r7   ra  r	  r  r›   rT   r¡   r  rU   rš   )rN   rè  r„   Úkerns       r2   r  zChar.get_kerningÇ  s„   € ð —-‘-×'Ñ'¨$¯*©*Ñ4ˆØˆÜ�dœDÔ!Ø—<‘<×(Ñ(Ø—	‘	˜4Ÿ?™?¨D¯F©F°D·M±MØ—	‘	˜4Ÿ?™?¨D¯F©F°D·M±MØ—‘óˆDð ˜‰~ÐrC   c           
     ó¬   — | j                   j                  |||| j                  | j                  | j                  | j
                  | j                  «       y rL   )r  rª   rT   r¡   r  rU   rš   rì  s       r2   rí  zChar.render×  s;   € Ø�‰×!Ñ!Ø�A�qØ�I‰I�t—‘¨¯©°·±¸t¿x¹xõ	IrC   c                ó  •— t         ‰| �  «        | j                  t        k  re| xj                  t
        z  c_        | xj                  t
        z  c_        | xj                  t
        z  c_        | xj                  t
        z  c_        y y rL   )	rÍ   rê  rg  rø  rU   rù  r7   r8   r9   rú  s    €r2   rê  zChar.shrinkÜ  sV   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�MŠMœ]Ñ*�MØ�JŠJœ]Ñ*�JØ�KŠKœ]Ñ*�KØ�JŠJœ]Ñ*ŽJð	 'rC   )r  rˆ   r  ÚParserStaterñ  rð  rô  rò  ró  )r=   r>   r?   r@   rO   rå  r  r  r  rí  rê  r	  r
  s   @r2   r	  r	  ž  s1   ø„ ñ
õ
óó9ó%óó I÷
+ñ +rC   r	  c                  ó4   ‡ — e Zd ZdZdd„Zdˆ fd„Zdd„Zˆ xZS )ÚAccentzž
    The font metrics need to be dealt with differently for accents,
    since they are already offset correctly from the baseline in
    TrueType fonts.
    c                ó:  — | j                   j                  | j                  | j                  | j                  | j
                  | j                  «      x}| _        |j                  |j                  z
  | _
        |j                  |j                  z
  | _        d| _        y rá  )r  r¦   rT   r¡   r  rU   rš   r  rm   rj   r7   rk   rn   r8   r9   r  s     r2   r  zAccent._update_metricsë  so   € Ø"&§,¡,×":Ñ":Ø�I‰I�t—‘¨¯©°·±¸t¿x¹xó#Ið 	Iˆ�$”-à—\‘\ G§L¡LÑ0ˆŒ
Ø—l‘l W§\¡\Ñ1ˆŒØˆ�
rC   c                óB   •— t         ‰| �  «        | j                  «        y rL   )rÍ   rê  r  rú  s    €r2   rê  zAccent.shrinkò  s   ø€ Ü‰‰ÔØ×ÑÕrC   c           
     ó  — | j                   j                  ||| j                  j                  z
  || j                  j                  z   | j
                  | j                  | j                  | j                  | j                  «       y rL   )
r  rª   r  rj   rn   rT   r¡   r  rU   rš   rì  s       r2   rí  zAccent.renderö  sY   € Ø�‰×!Ñ!Ø�A˜Ÿ™×*Ñ*Ñ*¨A°·±×0BÑ0BÑ,BØ�I‰I�t—‘¨¯©°·±¸t¿x¹xõ	IrC   rð  ró  )r=   r>   r?   r@   r  rê  rí  r	  r
  s   @r2   r  r  å  s   ø„ ñó
õ÷IrC   r  c                  óL   ‡ — 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).c                ór   •— t         ‰| �  ddd«       d| _        g |¢| _        d| _        d| _        d| _        y )Nr‘   r   )rÍ   rO   Úshift_amountÚchildrenÚglue_setÚ	glue_signÚ
glue_order©rN   ÚelementsrÔ   s     €r2   rO   zList.__init__ÿ  s<   ø€ Ü‰Ñ˜˜R Ô$ØˆÔØ#˜(˜ˆŒàˆŒØˆŒØˆ�rC   c                óJ  •— dj                  t        ‰| �	  «       | j                  | j                  | j
                  | j                  | j                  rMdt        j                  dj                  t        dj                   | j                  «      «      d«      z   dz   «      S d«      S )Nz/{}<w={:.02f} h={:.02f} d={:.02f} s={:.02f}>[{}]ú
z{!r},z  Ú )ÚformatrÍ   rå  r7   r8   r9   r$  r%  ÚtextwrapÚindentÚjoinrQ   rú  s    €r2   rå  zList.__repr__  s�   ø€ Ø@×GÑGÜ‰GÑÓØ�J‰J˜Ÿ™Ø�J‰J˜×)Ñ)ð �}Š}ð ”8—?‘?Ø—	‘	œ#˜gŸn™n¨d¯m©mÓ<Ó=Øóñ àñó	
ð 	
ð #%ó
ð 	
rC   c                óR  ‡— t        ˆfd„t        t        ‰«      «      d d d…   D «       d«      x| _        }|| _        ‰|   dk7  r|‰|   z  | _        nd| _        d| _        |dk(  rBt        | j                  «      r,t        j                  d|t        | «      j                  | «       y y y )Nc              3  ó4   •K  — | ]  }‰|   d k7  sŒ|–— Œ y­w)r   NrB   )rê   r¬  Útotalss     €r2   rì   z!List._set_glue.<locals>.<genexpr>  s   øè ø€ ÒC�1°F¸1±IÀ³NŒQÑCùs   ƒ‘rª  r   r‘   z	%s %s: %r)rè  r§  r(  r(  r'  r&  Ú
glue_ratior%  rp  rq  rä  r=   )rN   rx   Úsignr4  Ú
error_typeÚos      `  r2   Ú	_set_gluezList._set_glue  s¢   ø€ ä"ãCœœc &›kÓ*©4¨R¨4Ñ0ÔCÀQóHð 	HˆŒ˜!ð ˆŒØ�!‰9˜Š?Ø  q¡	™MˆD�MàˆDŒNØ ˆDŒOØ�Š6Ü�4—=‘=Ô!Ü—‘˜[Ø'¬¨d«×)<Ñ)<¸dõDð "ð rC   c                óð   •— | j                   D ]  }|j                  «        Œ t        ‰| �  «        | j                  t        k  r3| xj
                  t        z  c_        | xj                  t        z  c_        y y rL   )r%  rê  rÍ   rg  rø  r$  rù  r&  )rN   ÚchildrÔ   s     €r2   rê  zList.shrink#  sY   ø€ Ø—]‘]ò 	ˆEØ�L‰L�Nð	ä‰‰ÔØ�9‰9”Ò&Ø×Ò¤Ñ.ÕØ�MŠM¤Ñ.ŽMð 'rC   )r*  úT.Sequence[Node]rñ  )
rx   r6   r6  rt   r4  zlist[float]r7  rˆ   r€   rÃ   rð  )	r=   r>   r?   r@   rO   rå  r9  rê  r	  r
  s   @r2   r"  r"  ü  s2   ø„ Ù:õõ	
ðDØ!ðDØ&*óD÷ /ñ /rC   r"  c                  óV   ‡ — 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.c                ó|   •— t         ‰| �  |«       |r| j                  «        | j                  ||¬«       d| _        y )N)rY   rþ   F)rÍ   rO   r  ÚhpackÚ
is_phantom)rN   r*  rY   rþ   Údo_kernrÔ   s        €r2   rO   zHlist.__init__/  s5   ø€ ô 	‰Ñ˜Ô"ÙØ�I‰IŒKØ�
‰
�Q˜!ˆ
ÔØˆ�rC   c                óB   — t        t        d„ | j                  «      «      S )Nc                ó"   — | j                  «       S rL   )rï  )Únodes    r2   ú<lambda>z$Hlist.is_char_node.<locals>.<lambda>:  s   €  D×$5Ñ$5Ó$7€ rC   )ÚallrQ   r%  r¾   s    r2   rï  zHlist.is_char_node8  s   € ä”3Ñ7¸¿¹ÓGÓHÐHrC   c                ó  — g }t        j                  | j                  | j                  dd «      D ]I  \  }}|j                  |«       |j	                  |«      }|dk7  sŒ.t        |«      }|j                  |«       ŒK || _        y)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_longestr%  r¨   r  ÚKern)rN   Únew_childrenÚelem0Úelem1Úkerning_distancer  s         r2   r  z
Hlist.kern<  s�   € ð ˆÜ%×1Ñ1°$·-±-ÀÇÁÈqÈrÐARÓSò 	*‰LˆE�5Ø×Ñ Ô&Ø$×0Ñ0°Ó7ÐØ 2Ó%ÜÐ,Ó-�Ø×#Ñ# DÕ)ð	*ð %ˆ�rC   c                ó  — d}d}d}dgdz  }dgdz  }| j                   D �]~  }t        |t        «      r<||j                  z  }t	        ||j
                  «      }t	        ||j                  «      }ŒPt        |t        «      r�||j                  z  }t        j                  |j
                  «      rŒ�t        j                  |j                  «      rŒ¯t        |dd«      }	t	        ||j
                  |	z
  «      }t	        ||j                  |	z   «      }Œït        |t        «      r_|j                  }
||
j                  z  }||
j                  xx   |
j                  z  cc<   ||
j                  xx   |
j                   z  cc<   �Œ^t        |t"        «      s�Œp||j                  z  }�Œ� || _        || _        |dk(  r||z  }|| _        ||z
  }|dk(  rd| _        d| _        d| _        y|dkD  r| j+                  |d|d«       y| j+                  |d	|d
«       y)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‘   é   r$  Ú
additionalr   Nr   ÚOverfulrª  ÚUnderful)r%  ra  r	  r7   rl   r8   r9   r   rR   ÚisinfÚgetattrÚGlueÚ	glue_specÚstretch_orderÚstretchÚshrink_orderrê  rK  r'  r(  r5  r9  )rN   rY   rþ   rZ   r[   rx   Útotal_stretchÚtotal_shrinkÚprH  rX  s              r2   r@  zHlist.hpackM  sÉ  € ð0 ˆØˆØˆØ˜˜q™ˆØ�t˜a‘xˆØ—‘ó 	ˆAÜ˜!œTÔ"Ø�Q—W‘W‘�Ü˜˜1Ÿ8™8Ó$�Ü˜˜1Ÿ7™7“O‘Ü˜AœsÔ#Ø�Q—W‘W‘�Ü—x‘x §¡Õ)´"·(±(¸1¿7¹7Õ2CÜ  >°2Ó6�AÜ˜A˜qŸx™x¨!™|Ó,�AÜ˜A˜qŸw™w¨™{Ó+‘AÜ˜AœtÔ$ØŸK™K�	Ø�Y—_‘_Ñ$�Ø˜i×5Ñ5Ó6¸)×:KÑ:KÑKÓ6Ø˜Y×3Ñ3Ó4¸	×8HÑ8HÑHÕ4Ü˜AœtÖ$Ø�Q—W‘W‘’ð#	ð$ ˆŒØˆŒ
à�ÒØ�‰FˆAØˆŒ
Ø�‰Eˆà�Š7ØˆDŒNØˆDŒOØ ˆDŒOØØˆrŠ6Ø�N‰N˜1˜a °	Õ:à�N‰N˜1˜b ,°
Õ;rC   )r‘   rR  T)r*  r<  rY   r6   rþ   ú"T.Literal['additional', 'exactly']rB  r�   rô  rð  ©r‘   rR  )rY   r6   rþ   r_  r€   rÃ   )	r=   r>   r?   r@   rO   rï  r  r@  r	  r
  s   @r2   r>  r>  ,  sL   ø„ Ù%à>AØ9EØ!%ð Ø6ð àõ óIó%ð"  #Ø6Bð?<Ø3ð?<ØGK÷?<rC   r>  c                  ób   ‡ — 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‘   rR  c                óJ   •— t         ‰| �  |«       | j                  ||¬«       y )N)rZ   rþ   )rÍ   rO   Úvpack)rN   r*  rZ   rþ   rÔ   s       €r2   rO   zVlist.__init__’  s    ø€ ä‰Ñ˜Ô"Ø�
‰
�Q˜!ˆ
ÕrC   c                 ó   — y©NFrB   r¾   s    r2   rï  zVlist.is_char_node—  s   € àrC   c                ó¨  — d}d}d}dgdz  }dgdz  }| j                   D �].  }	t        |	t        «      re|||	j                  z   z  }|	j                  }t        j                  |	j                  «      rŒRt        |	dd«      }
t        ||	j                  |
z   «      }Œyt        |	t        «      re||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"        «      s�Œ&t%        d«      ‚ || _        ||kD  r|||z
  z  }|| _        n|| _        |dk(  r||z  }|| _        ||z
  }|dk(  rd| _        d| _        d| _        y|dkD  r| j-                  |d|d	«       y| j-                  |d
|d«       y)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‘   rQ  r$  z1Internal mathtext error: Char node found in VlistrR  r   Nr   rS  rª  rT  )r%  ra  r   r8   r9   rR   rU  r7   rV  rl   rW  rX  rY  rZ  r[  rê  rK  r	  ÚRuntimeErrorr'  r(  r5  r9  )rN   rZ   rþ   ÚlrY   r[   rx   r\  r]  r^  rH  rX  s               r2   rd  zVlist.vpack›  sÏ  € ð0 ˆØˆØˆØ˜˜q™ˆØ�t˜a‘xˆØ—‘ó 	IˆAÜ˜!œSÔ!Ø�Q˜Ÿ™‘\Ñ!�Ø—G‘G�Ü—x‘x §¡Õ(Ü  >°2Ó6�AÜ˜A˜qŸw™w¨™{Ó+‘AÜ˜AœtÔ$Ø�Q‘�Ø�ØŸK™K�	Ø�Y—_‘_Ñ$�Ø˜i×5Ñ5Ó6¸)×:KÑ:KÑKÓ6Ø˜Y×3Ñ3Ó4¸	×8HÑ8HÑHÔ4Ü˜AœtÔ$Ø�Q˜Ÿ™‘[Ñ �Ø’Ü˜AœtÖ$Ü"ØGóIð Ið%	Ið* ˆŒ
ØˆqŠ5Ø��Q‘‰JˆAØˆD�JàˆDŒJà�ÒØ�‰FˆAØˆŒØ�‰Eˆà�Š6ØˆDŒNØˆDŒOØ ˆDŒOØàˆrŠ6Ø�N‰N˜1˜a °	Õ:à�N‰N˜1˜b ,°
Õ;rC   r`  )r*  r<  rZ   r6   rþ   r_  rô  )rZ   r6   rþ   r_  ri  r6   r€   rÃ   )
r=   r>   r?   r@   rO   rï  rR   Úinfrd  r	  r
  s   @r2   rb  rb  �  sN   ø„ Ù#à>AØ9EðØ6õó
ð  #Ø6BØŸ™ðG<Ø3ðG<àðG<à$(÷G<rC   rb  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`.
    c                óJ   •— t         ‰| �  |||«       |j                  | _        y rL   )rÍ   rO   r  )rN   r7   r8   r9   r  rÔ   s        €r2   rO   zRule.__init__ð  s   ø€ Ü‰Ñ˜ ¨Ô.Ø—}‘}ˆ�rC   c                óH   — | j                   j                  ||||z
  ||«       y rL   )r  r­   r¬   s         r2   rí  zRule.renderô  s    € à�‰×'Ñ'¨°°1°q±5¸!¸QÕ?rC   )r7   r6   r8   r6   r9   r6   r  r  rÄ   )r=   r>   r?   r@   rO   rí  r	  r
  s   @r2   rl  rl  å  s@   ø„ ñõ%ð@Øð@Ø!ð@Ø&+ð@Ø05ð@Ø:>÷@rC   rl  c                  ó&   ‡ — e Zd ZdZddˆ fd„Zˆ xZS )ÚHrulez.Convenience class to create a horizontal rule.c                óx   •— |€|j                  «       }|dz  x}}t        ‰| �	  t        j                  |||«       y )Nr»  ©Úget_current_underline_thicknessrÍ   rO   rR   rj  )rN   r  Ú	thicknessr8   r9   rÔ   s        €r2   rO   zHrule.__init__ü  s<   ø€ ØÐØ×=Ñ=Ó?ˆIØ" S™Ð(ˆ�Ü‰ÑœŸ™ ¨°Õ6rC   rL   )r  r  rt  úfloat | Noner  r
  s   @r2   rp  rp  ù  s   ø„ Ù8÷7ò 7rC   rp  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚVrulez,Convenience class to create a vertical rule.c                ó‚   •— |j                  «       }t        ‰| �	  |t        j                  t        j                  |«       y rL   rr  )rN   r  rt  rÔ   s      €r2   rO   zVrule.__init__  s,   ø€ Ø×9Ñ9Ó;ˆ	Ü‰Ñ˜¤B§F¡F¬B¯F©F°EÕ:rC   )r  r  r  r
  s   @r2   rw  rw    s   ø„ Ù6÷;ñ ;rC   rw  c                  ó@   — e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	Ú	_GlueSpecr6   r7   rZ  rt   rY  rê  r[  NrŠ   rB   rC   r2   rz  rz    s   … ØƒLØƒNØÓØƒMØÔrC   rz  r‘   rÌ  rf   râ   g      ð¿)ÚfilÚfillÚfilllÚneg_filÚneg_fillÚ	neg_filllÚemptyÚssc                  ó4   ‡ — e Zd ZdZ	 	 dˆ fd„Zdˆ fd„Zˆ xZS )rW  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.)
    c                óÀ   •— t         ‰| �  «        t        |t        «      rt        j
                  |   }|| _        y t        |t        «      r
|}|| _        y t        d«      ‚)Nz.glue_type must be a glue spec name or instance)rÍ   rO   ra  rˆ   rz  Ú_namedr/   rX  )rN   Ú	glue_typerX  rÔ   s      €r2   rO   zGlue.__init__'  s[   ø€ ô 	‰ÑÔÜ�i¤Ô%Ü!×(Ñ(¨Ñ3ˆIð
 #ˆ�ô	 ˜	¤9Ô-Ø!ˆIð #ˆ�ô ÐMÓNÐNrC   c                ó²   •— t         ‰| �  «        | j                  t        k  r5| j                  }|j                  |j                  t        z  ¬«      | _        y y )N©r7   )rÍ   rê  rg  rø  rX  Ú_replacer7   rù  )rN   r}  rÔ   s     €r2   rê  zGlue.shrink4  sB   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø—‘ˆAØŸZ™Z¨a¯g©g¼Ñ.E˜ZÓFˆD�Nð 'rC   )r†  z`_GlueSpec | T.Literal['fil', 'fill', 'filll', 'neg_fil', 'neg_fill', 'neg_filll', 'empty', 'ss']rð  )r=   r>   r?   r@   rO   rê  r	  r
  s   @r2   rW  rW    s$   ø„ ñð#ðAõ#÷Gñ GrC   rW  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.
    c                óV   •— t         ‰| �  t        d«      g|¢t        d«      ‘d¬«       y )Nr‚  F©rB  ©rÍ   rO   rW  r)  s     €r2   rO   zHCentered.__init__A  s*   ø€ Ü‰Ñœ$˜t›*Ð< xÐ<´°d³Ð<ÀeÐÕLrC   ©r*  z
list[Node]r  r
  s   @r2   r‹  r‹  ;  s   ø„ ñ÷
Mñ MrC   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.
    c                óR   •— t         ‰| �  t        d«      g|¢t        d«      ‘«       y )Nr‚  rŽ  r)  s     €r2   rO   zVCentered.__init__K  s%   ø€ Ü‰Ñœ$˜t›*Ð< xÐ<´°d³Ð<Õ=rC   r�  r  r
  s   @r2   r‘  r‘  E  s   ø„ ñ÷
>ñ >rC   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 )	rK  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   c                ó0   •— t         ‰| �  «        || _        y rL   )rÍ   rO   r7   r  s     €r2   rO   zKern.__init__]  s   ø€ Ü‰ÑÔØˆ�
rC   c                ó    — d| j                   z  S )Nzk%.02frˆ  r¾   s    r2   rå  zKern.__repr__a  s   € Ø˜$Ÿ*™*Ñ$Ð$rC   c                ó|   •— t         ‰| �  «        | j                  t        k  r| xj                  t
        z  c_        y y rL   )rÍ   rê  rg  rø  r7   rù  rú  s    €r2   rê  zKern.shrinkd  s,   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�JŠJœ-Ñ'ŽJð 'rC   r  rñ  rð  )
r=   r>   r?   r@   r8   r9   rO   rå  rê  r	  r
  s   @r2   rK  rK  O  s(   ø„ ñð €FØ€Eõó%÷(ñ (rC   rK  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.
    c                ó|  •— |j                   j                  |j                  |«      }|j                   j                  |j                  |j                  |j
                  «      }|j                  «       }||z   }|D ]<  \  }	}
|	|_        t        |
|«      }|j                  |j                  z   |d|z  z
  k\  sŒ< n d}|j                  dk7  st        |«      dk(  rN|€|j                  |j                  z   z  }|xj                  |z  c_        t        
|«      }||j                  z
  }t        ‰| �1  g«       || _        y )Nr¾  r‘   rY  r   )r  r»   rT   rµ   rU   rš   Úcopyr	  r8   r9   r(  rÍ   rO   r$  )rN   r  r8   r9   r  Úfactorr­  r  Útarget_totalrº   r¢   r{  ÚshiftrÔ   s                €r2   rO   zAutoHeightChar.__init__s  s  ø€ à—}‘}×FÑFÀuÇzÁzÐSTÓUˆà—=‘=×,Ñ,¨U¯Z©Z¸¿¹ÈÏÉÓSˆà—
‘
“ˆØ ‘~ˆØ)ò 	‰MˆH�cØ!ˆEŒJÜ˜˜UÓ#ˆDð �{‰{˜TŸZ™ZÑ'¨<¸#À¹.Ñ+HÓHÙð	ð ˆØ�:‰:˜Ò¤ LÓ 1°QÒ 6Øˆ~Ø%¨¯©°t·z±zÑ)AÑB�Ø�NŠN˜fÑ$�NÜ˜˜UÓ#ˆDà˜TŸZ™ZÑ'ˆEä‰Ñ˜$˜Ô Ø!ˆÕrC   rL   )
r  rˆ   r8   r6   r9   r6   r  r  r›  ru  r  r
  s   @r2   r˜  r˜  j  s   ø„ ñð )-ð"Ø%÷"ñ "rC   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.
    c                ód  •— |j                   j                  |j                  |«      }|j                  «       }|D ]&  \  }}||_         |||«      }|j                  |k\  sŒ& n |j                  z  }	|xj
                  |	z  c_         ||«      }t        ‰
| �  |g«       |j                  | _        y rL   )r  r»   rT   rš  r7   rU   rÍ   rO   )rN   r  r7   r  Ú
char_classr­  rº   r¢   r{  r›  rÔ   s             €r2   rO   zAutoWidthChar.__init__™  s¢   ø€ à—}‘}×FÑFÀuÇzÁzÐSTÓUˆà—
‘
“ˆØ)ò 	‰MˆH�cØ!ˆEŒJÙ˜c 5Ó)ˆDØ�z‰z˜UÓ"Ùð		ð ˜Ÿ™Ñ#ˆØ�Š˜&Ñ �Ù˜#˜uÓ%ˆä‰Ñ˜$˜Ô Ø—Z‘Zˆ�
rC   )r  rˆ   r7   r6   r  r  r¡  z
type[Char])r=   r>   r?   r@   r	  rO   r	  r
  s   @r2   rŸ  rŸ  �  s   ø„ ñð +/ð Ø'÷ ñ  rC   rŸ  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                  |Ž  y y rL   )Úanyrí  )rE  ÚargsÚphantoms     €r2   rí  zship.<locals>.render¾  s   ø€ Ü�7Œ|ØˆD�K‰K˜Òð rC   c                ó"   — | dk  rdS | dkD  rdS | S )Ng    eÍÍÁg    eÍÍArB   )Úvalues    r2   Úclampzship.<locals>.clampÂ  s   € Ø˜t’|ˆtÐH°¸²¨ÐHÀ5ÐHrC   c           	     óB  •
— d}d}| j                   }| j                  }‰}‰}‰j                  | j                  «       | j                  D �]C  }t        |t        «      r! ‰|‰‰‰z   ‰‰z   «       ‰|j                  z  ŠŒ5t        |t        «      r‰|j                  z  ŠŒUt        |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kD  r|dkD  r||
z   Š ‰|‰‰‰z   ‰‰z   ||	«       |Š‰|z  Š�ŒŠt        |t&        «      s�Œœ|j(                  }|j                  |z
  }|dk7  r~|dk(  r=|j*                  |k(  rj||j,                  z  }t/         ‰| j0                  |z  «      «      }n<|j2                  |k(  r-||j4                  z  }t/         ‰| j0                  |z  «      «      }||z  }‰|z  Š�ŒF ‰j7                  «        y )Nr   r‘   úunreachable coder   )r(  r'  r¨   rA  r%  ra  r	  r7   rK  r"  r(  r$  r>  rb  r   r8   r9   rR   rU  rW  rX  rY  rZ  Úroundr&  r[  rê  Úpop)rM   Úcur_gÚcur_gluer(  r'  Ú	base_lineÚ	left_edger^  ÚedgeÚrule_heightÚ
rule_depthÚ
rule_widthrX  r©  Úcur_hÚcur_vÚ	hlist_outÚoff_hÚoff_vr©   r¦  rí  Ú	vlist_outs                €€€€€€€€€€r2   r¸  zship.<locals>.hlist_outÅ  s_  ø€ ð ˆØˆØ—^‘^ˆ
Ø—M‘Mˆ	Øˆ	Øˆ	à�‰�s—~‘~Ô&à—‘ó 3	$ˆAÜ˜!œTÔ"Ù�q˜& %¨%¡-°¸±Ô?Ø˜Ÿ™Ñ ‘Ü˜AœtÔ$Ø˜Ÿ™Ñ ‘Ü˜AœtÔ$ä�q—z‘z“? aÒ'Ø˜QŸW™WÑ$‘Eà �DØ%¨¯©Ñ6�EÜ! !¤UÔ+Ù! !�Ü# A¤uÔ-á! !�à8Ð&8Ó8˜uØ  1§7¡7™N�EØ%‘EÜ˜AœsÔ#àŸh™h�ØŸW™W�
ØŸW™W�
Ü—8‘8˜KÔ(Ø"%§*¡*�KÜ—8‘8˜JÔ'Ø!$§¡�JØ ’? z°A¢~Ø%¨
Ñ2�EÙ˜1˜fØ  5™=¨%°%©-Ø% {ô4ð &�EØ˜Ñ#’Ü˜AœtÖ$àŸK™K�	Ø&Ÿ_™_¨uÑ4�
Ø ’>Ø  A’~Ø$×2Ñ2°jÒ@Ø$¨	×(9Ñ(9Ñ9˜HÜ$)©%°·±¸xÑ0GÓ*HÓ$I™EØ"×/Ñ/°:Ò=Ø  I×$4Ñ$4Ñ4˜Ü %¡e¨C¯L©L¸8Ñ,CÓ&DÓ E˜Ø˜eÑ#�
Ø˜Ñ#’ðg3	$ðj 	�‰�rC   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  ŠŒi‰|j                  z  Š||j                  z   Š‰}| j                  |_        t	        |t        «      r	 ‰|«       n t	        |t        «      r	 ‰|«       nJ d«       ‚||j                  z   Š|ŠŒåt	        |t        «      rr|j                  }	|j                  }
|j                  }t        j                  |«      r| j                  }|	|
z  }	|	dkD  s�ŒF|
dkD  s�ŒM‰|	z  Š ‰|‰‰‰z   ‰‰z   ||	«       �Œgt	        |t         «      rª|j"                  }|j                  |z
  }	|dk7  r~|dk(  r=|j$                  |k(  rj||j&                  z  }t)         ‰| j*                  |z  «      «      }n<|j,                  |k(  r-||j.                  z  }t)         ‰| j*                  |z  «      «      }|	|z  }	‰|	z  Š�Œ!t	        |t0        «      s�Œ3t3        d«      ‚ y )Nr   r‘   r«  r   z1Internal mathtext error: Char node found in vlist)r(  r'  r8   r%  ra  rK  r7   r"  r(  r9   r$  r>  rb  r   rR   rU  rW  rX  rY  rZ  r¬  r&  r[  rê  r	  rh  )rM   r®  r¯  r(  r'  r±  Útop_edger^  Úsave_vr³  r´  rµ  rX  r©  r¶  r·  r¸  r¹  rº  r©   rí  r»  s                €€€€€€€€€r2   r»  zship.<locals>.vlist_out  sJ  ø€ ð ˆØˆØ—^‘^ˆ
Ø—M‘Mˆ	Øˆ	Ø�—‘ÑˆØˆà—‘ó .	IˆAÜ˜!œTÔ"Ø˜Ÿ™Ñ ‘Ü˜AœtÔ$Ü�q—z‘z“? aÒ'Ø˜QŸX™X¨¯©Ñ/Ñ/‘Eà˜QŸX™XÑ%�EØ%¨¯©Ñ6�EØ"�FØ!Ÿi™i�A”GÜ! !¤UÔ+Ù! !�Ü# A¤uÔ-Ù! !�à8Ð&8Ó8˜uØ" Q§W¡WÑ,�EØ%‘EÜ˜AœsÔ#ØŸh™h�ØŸW™W�
ØŸW™W�
Ü—8‘8˜JÔ'Ø!$§¡�JØ˜zÑ)�Ø ”? z°A¤~Ø˜[Ñ(�EÙ˜1˜fØ  5™=¨%°%©-Ø% {ö4ô ˜AœtÔ$ØŸK™K�	Ø'Ÿo™o°Ñ5�Ø ’>Ø  A’~Ø$×2Ñ2°jÒ@Ø$¨	×(9Ñ(9Ñ9˜HÜ$)©%°·±¸xÑ0GÓ*HÓ$I™EØ"×/Ñ/°:Ò=Ø  I×$4Ñ$4Ñ4˜Ü %¡e¨C¯L©L¸8Ñ,CÓ&DÓ E˜Ø˜uÑ$�Ø˜Ñ$’Ü˜AœtÖ$Ü"ØGóIð Iñ[.	IrC   )r¨  r6   r€   r6   )rM   r>  r€   rÃ   )rM   rb  r€   rÃ   )r8   rJ   ra  r>  )rM   ÚxyrF   rG   r©  r¶  r·  r¸  r¹  rº  r©   r¦  rí  r»  s       @@@@@@@@@@r2   rr   rr   ¬  s|   ÿù€ ð �F€BˆØ€EØ€EØ€EØ�—‘‰O€EÜ�C‹[€FØ€GôóI÷Aö A÷F9Iõ 9Iôv �cœ5Ô!Ð!Ð!Ùˆc„NØ€MrC   c                óB   ‡ — dˆ fd„}t        «       j                  |«      S )z$Helper class to raise parser errors.c                ó   •— t        | |‰«      ‚rL   ©r   )rH  ÚlocÚtoksÚmsgs      €r2   Úraise_errorzError.<locals>.raise_errorN  s   ø€ Ü! ! S¨#Ó.Ð.rC   ©rH  rˆ   rÃ  rt   rÄ  r   r€   úT.Any)r   Úset_parse_action)rÅ  rÆ  s   ` r2   ÚErrorrÊ  L  s   ø€ õ/ô ‹7×#Ñ# KÓ0Ð0rC   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	y)r  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.
    c                óJ   — || _         || _        || _        || _        || _        y rL   )r  Ú_fontr¡   rU   rš   )rN   r  rT   r¡   rU   rš   s         r2   rO   zParserState.__init___  s%   € àˆŒØˆŒ
Ø$ˆŒØ ˆŒØˆ�rC   c                ó,   — t        j                   | «      S rL   )rš  r¾   s    r2   rš  zParserState.copyg  s   € Ü�y‰y˜‹ÐrC   c                ó   — | j                   S rL   )rÍ  r¾   s    r2   rT   zParserState.fontj  s   € à�z‰zÐrC   c                ó(   — |dv r|| _         || _        y )N)r  r  r  r  rŽ  )r¡   rÍ  )rN   rh  s     r2   rT   zParserState.fontn  s   € àÐ7Ñ7Ø"ˆDŒOØˆ�
rC   c                óx   — | j                   j                  | j                  | j                  | j                  «      S )z.Return the underline thickness for this state.)r  r·   rT   rU   rš   r¾   s    r2   rs  z+ParserState.get_current_underline_thicknesst  s,   € à�|‰|×3Ñ3Ø�I‰I�t—}‘} d§h¡hó0ð 	0rC   N)
r  rŒ   rT   rˆ   r¡   rˆ   rU   r6   rš   r6   ©r€   r  rñ  )rh  rˆ   r€   rÃ   )r€   r6   )
r=   r>   r?   r@   rO   rš  ÚpropertyrT   Úsetterrs  rB   rC   r2   r  r  T  sJ   „ ñðØóóð òó ðð 
‡[�[òó ðô
0rC   r  c                ó²   ‡— dˆfd„Š| j                  dd«      d   }| |k(  r!|dj                  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.
    c              3  ó¬   •K  — t        | t        «      r"| j                  D ]  } ‰|«      E d {  –—†  Œ y | j                  r| j                  –— y y 7 Œ#­wrL   )ra  r   ÚexprsÚresultsName)ÚeltÚexprÚnamess     €r2   rÛ  zcmd.<locals>.names†  sL   øè ø€ Ü�cœ?Ô+ØŸ	™	ò '�Ù  ›;×&Ñ&ñ'à�_Š_Ø—/‘/Ó!ð ð 'ús   ƒ+A®A¯$Ar1  r   r   r-  c              3  ó&   K  — | ]	  }d |z  –— Œ y­w)z{%s}NrB   )rê   rh  s     r2   rì   zcmd.<locals>.<genexpr>Ž  s   è ø€ ÒB¨d˜F T�MÑBùrí   z	Expected )rÙ  r   r€   zT.Generator[str, None, None])rD  r1  rÊ  )rÚ  r¥  Úcsnamer1   rÛ  s       @r2   ÚcmdrÞ  z  sg   ø€ õ"ð �Z‰Z˜˜QÓ Ñ"€Fà�fŠnð �B—G‘GÑB±e¸D³kÔBÓBÒBØ"&ð à�TœE I¨c¨UÐ"3Ó4Ñ4Ñ5Ð5rC   c                  óü  ‡— e Zd ZdZ G d„ dej
                  «      Z edj                  «       «      Z	 edj                  «       «      Z
 edj                  «       «      Ze	e
z  ez  Z edj                  «       «      Z edj                  «       «      Z ed	j                  «       «      Z ed
j                  «       «      Z edj                  «       «      Z edj                  «       «      Z edj                  «       «      Z edj                  «       «      Z edj                  «       «      Zeez  ez  Z e e ed«       ed«      dz   «      D � ���cg c]?  }t3        j4                  t7        |«      «      j                  «       d   j9                  «       ‘ŒA c}}}} «      Z eej>                  «      Z djd„Z!dkd„Z"dld„Z#djd„Z$djd„Z%dmd„Z&dnd„Z'dod„Z(dod„Z) e*e+jX                  «      Z-dod„Z.dpd„Z/dddd d d!d"d"d#dd$d%d&œZ0dod'„Z1dod(„Z2	 	 	 	 dqd)„Z3drd*„Z4dod+„Z5dod,„Z6dod-„Z7i d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDd=“dEd5“dFd7“dGd9“dHd;“dId/“dJdKdLdMœ¥Z8 edNj                  «       «      Z9dodO„Z:drdP„Z;drdQ„Z<dodR„Z=dodS„Z>dodT„Z?e?Z@dsdU„ZAdrdV„ZBdodW„ZCdtdX„ZDdtdY„ZEdtdZ„ZFdrˆfd[„ZG	 	 	 	 	 	 dud\„ZHdod]„ZIdod^„ZJdod_„ZKdod`„ZLdoda„ZMdrdb„ZNeNxZOZPdodc„ZQdodd„ZRdode„ZS	 	 	 	 	 	 dvdf„ZTdodg„ZUdodh„ZVdodi„ZWˆxZXS c c}}}} w )wÚ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y)úParser._MathStyler   r   rf   râ   N)r=   r>   r?   ÚDISPLAYSTYLEÚ	TEXTSTYLEÚSCRIPTSTYLEÚSCRIPTSCRIPTSTYLErB   rC   r2   Ú
_MathStylerâ  œ  s   „ ØˆØˆ	ØˆØÑrC   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
      u   Î±u   Ï‰r   rª  c                ó¼  ‡ ‡— t        j                  «       ŠdGˆˆ fd„}dHd„}t        d«      ‰_         t	        ‰ j
                  «      d«      ‰_         t	        ‰ j                  D �cg c]  }t        |j                  «      ‘Œ c}«      d«      ‰_
         t        ddj                  d	j                  t        t        j                  t         «      «      «      z   «      d
«      j#                  «       ‰_         t        d«      d«      ‰_         |d‰ j(                  «      ‰_        t-        d t	        ‰ j(                  «      d«      z   «      dz   ‰_        t1        d«      ‰_        t	        ‰ j4                  «      ‰_        t9        «       ‰_        t9        «       ‰_        t9        «       ‰_        t9        «       ‰_         t9        «       ‰_!        t9        «       ‰_"        ‰xj>                  ‰j<                  z  c_         |«        ‰xjB                  d tG        ‰jD                  «      d«      z   dz   z  c_!        ‰xj@                  d tI        ‰jD                  «      d«      z   dz   z  c_         tK        dd‰j                  d«      z   dz   «      ‰_&        tK        d‰jC                  d«      «      ‰_'        tK        d‰jC                  d«      «      ‰_(        tK        d‰jC                  d«      «      ‰_)         |dg ‰ jT                  ¢‰ jV                  ¢«      ‰j?                  d
«      z
  ‰_,         |d‰ jZ                  «      ‰_.        ‰j.                   tG        ‰jD                  «      d«      z   ‰j2                  z   ‰_/        ‰j.                   tG        ‰jD                  «      d«      z   ta        «       z   ‰_1        tK        d‰jA                  d«      ‰jA                  d«      z   «      ‰_2        tK        d‰jA                  d«      ‰jA                  d«      z   «      ‰_3        tK        d‰jA                  d«      ‰jA                  d«      z   «      ‰_4        tK        dd t-        ‰j6                  «      d«      z   dz   dz    t-        ‰j6                  «      d«      z   dz   dz   ‰j                  d«      z   dz   dz    t-        ‰j                  «      d «      z   dz   ‰jA                  d«      z   ‰jA                  d«      z   «      ‰_5        tK        d!t-        d" tI        tm        d#«      ‰jD                  z   «      d$«      z   d#z   «      ‰jA                  d«      z   «      ‰_7        tK        d%‰jA                  d&«      «      ‰_8        tK        d'‰jA                  d&«      «      ‰_9        tK        d(‰jC                  d)«      ‰jC                  d&«      z   «      ‰_:        tK        d*‰jC                  d)«      ‰jC                  d&«      z   «      ‰_;        tK        d+ty        dd,d¬-«      «      ‰_=        tK        d. t}        ddt        tI        ‰jD                  «      «      tG        t1        d/«      j�                  «       «      z   ¬0«      d1«      «      ‰_A         t-        ‰j<                  «      d2«       tI        t	        d3d4g«      ‰j<                  z
  «      d5«      z    t        d6«      d7«      z    t        d8«      d7«      z  ‰j?                  d2«       t        d6«      d7«      z   z  ‰_B        ‰j                  ‰jL                  z  ‰j*                  z  ‰j„                  z  ‰_C        ‰xjD                  ‰j†                  ‰j:                  z  ‰jb                  z  ‰j&                  z  z  c_"        tK        d9d tG        ‰j†                  «      d«      z   dz   «      ‰_D        tK        d:d tG        ‰j†                  «      d«      z   dz   «      ‰_E        ‰xj<                  ‰jN                  ‰jP                  z  ‰jR                  z  ‰jX                  z  ‰j$                  z  ‰j\                  z  ‰jˆ                  z  ‰j^                  z  ‰jd                  z  ‰jf                  z  ‰jh                  z  ‰jj                  z  ‰jt                  z  ‰jv                  z  ‰jn                  z  ‰jp                  z  ‰jr                  z  ‰jz                  z  ‰jŠ                  z  ‰j‚                  z  ‰j:                  z  z  c_        d;‰j7                  d<«      t�        d=«      z  z
  }‰xj:                  d>‰j7                  d?«      t�        d=«      z  z
   tG        ‰j†                  ‰j:                  z  |z  «      d@«      z   dAz   ‰j7                  dB«      t�        d=«      z  z
  z  c_        tI        ‰jD                  «      ‰_G        ty        dCd,dD¬E«      ‰_H        t        dF«      j#                  «       ‰_I        ‰j’                  tG        ‰j�                  ‰j’                  z   «      z   ta        «       z   ‰_J         |«        ‰j”                  ‰ _K        ‰jŽ                  ‰ _L        dD‰ _M        y c c}w )INc                 óæ   •— t        ‰«      j                  «       D ]T  \  } }| j                  d«      rŒ| dvr|j                  | «       t	        ‰| «      sŒ:|j                  t        ‰| «      «       ŒV y )NÚ_)ÚtokenÚ	placeableÚ
auto_delim)Úvarsr"  ru  Úset_nameÚhasattrrÉ  rV  )r#  rë   r^  rN   s     €€r2   Úset_names_and_parse_actionsz4Parser.__init__.<locals>.set_names_and_parse_actions6  sd   ø€ Ü  ›GŸM™M›Oò 	A‘��SØ—~‘~ cÕ*ð Ð"FÑFØŸ™ SÔ)ä˜t SÕ)Ø×,Ñ,¬W°T¸3Ó-?Õ@ñ	ArC   Úgroupc                ód  — g }g }|D ]8  }|d   j                  «       r|j                  |«       Œ(|j                  |«       Œ: t        dj                  | dj	                  t        t        j                  |«      «      |rdnddj	                  t        t        j                  |«      «      ¬«      «      S )Nrª  z<\\(?P<{group}>(?:{alpha})(?![A-Za-z]){additional}{nonalpha})ú|r-  )rò  ÚalpharR  Únonalpha)Úisalphar¨   r   r.  r1  rQ   ÚreÚescape)rò  rÛ  Úends_with_alphaÚends_with_nonalpharh  s        r2   Úcsnamesz Parser.__init__.<locals>.csnamesE  s¤   € Ø ˆOØ!#ÐØò 4�Ø˜‘8×#Ñ#Ô%Ø#×*Ñ*¨4Õ0à&×-Ñ-¨dÕ3ð	4ô
 ØO×VÑVØØŸ(™(¤3¤r§y¡y°/Ó#BÓCÙ&8™s¸bØ ŸX™X¤c¬"¯)©)Ð5GÓ&HÓIð	 Wó óð rC   z[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)ÚspaceÚstyle_literalzI[a-zA-Z0-9 +\-*/<>=:,.;!\?&'@()\[\]|\U00000080-\U0001ffff]|\\[%${}\[\]_|]z|\\(?:{})(?![A-Za-z])rô  r¢   z\\[A-Za-z]+rh  rT   z\mathr1  r2  z\hspacez\phantomr¨  z\llapz\rlapÚaccentz\fracrV   Údenz\dfracz\binomz\genfracÚldelimÚrdelimÚrulesizeÚstylez\sqrt{value}r3  r4  Úrootz	\overlineÚbodyz
\underlinez\oversetÚ
annotationz	\undersetz\textr*   )Úend_quote_charz	\substackz\\)ÚopenerÚcloserÚcontentÚpartsÚnucleusrê  r9  Úsubsuperz'*Úapostrophesz'+z\operatornamez\boldsymbolú\middleÚmdelimzExpected a delimiterz\leftÚleftr¦  z\rightÚrightú$F)Úunquote_resultsz(?:(?:\\[$])|[^$])*rð  )rò  rˆ   rÛ  zIterable[str]r€   r   )NÚtypesÚSimpleNamespacer   Úfloat_literalr   Ú_space_widthsrý  rç  rˆ   r¨  rþ  r.  r1  rQ   rø  rù  r   Úleave_whitespacer0   Úunknown_symbolÚ
_fontnamesrT   r   Ústart_groupr   Ú	end_groupÚ_delimsÚdelimr   rí  rì  Únamed_placeableÚrequired_groupÚoptional_grouprë  r   r   rÞ  Úcustomspacer¦  ÚllapÚrlapÚ_accent_mapÚ_wide_accentsrÿ  Ú_function_namesÚfunctionrò  r   Úunclosed_groupÚfracÚdfracÚbinomÚgenfracr
   ÚsqrtÚoverlineÚ	underlineÚoversetÚundersetr   Útextr   r	   ÚsuppressÚsubstackr  ÚsimpleÚoperatornameÚ
boldsymbolrÊ  rp   Úmath_stringÚnon_mathÚmainÚ_expressionÚ_math_expressionÚ_needs_space_after_subsuper)rN   rñ  rü  Úer  r^  s   `    @r2   rO   zParser.__init__3  s1	  ù€ Ü×!Ñ!Ó#ˆö
	Aó	ô" !Ð!CÓDˆŒØ5œ6 $×"4Ñ"4Ó5°gÓ>ˆŒð5œ6Ø#'§?¡?Ö3˜aŒS�—‘�\Ò3ó5Ø5DóFˆŒð
œ5ðà&×-Ñ-Ø—‘œœRŸY™Y¬Ó0Ó1ó3ñ3ó
ð
 ó÷
 "Ñ!Ó#ð 	
Œð 1œ5 Ó0°Ó8ˆÔá" 6¨4¯?©?Ó;ˆŒÜ# HÐ/F¬v°d·o±oÓ/FÀvÓ/NÑ$NÓOÐRUÑUˆŒÜ" 3›<ˆŒä! $§,¡,Ó/ˆŒô %›YˆŒÜ$›YˆŒÜ$›YˆÔÜ$›YˆÔÜ$›YˆÔÜ$›YˆŒð 	
×Ò˜aŸk™kÑ)Õá#Ô%à	×Ò˜SÐ#6¤:¨a¯g©gÓ#6°wÓ#?Ñ?À#ÑEÑEÕØ	×Ò˜SÐ#5¤9¨Q¯W©WÓ#5°gÓ#>Ñ>ÀÑDÑDÕä˜J¨¨a¯o©o¸gÓ.FÑ(FÈÑ(LÓMˆŒä˜ Q×%5Ñ%5°gÓ%>Ó?ˆŒ	Ü�X˜q×/Ñ/°Ó8Ó9ˆŒÜ�X˜q×/Ñ/°Ó8Ó9ˆŒñ �HÐF × 0Ñ 0ÐF°4×3EÑ3EÐFÓGØ×Ñ Ó&ñ'ð 	
Œñ ˜V T×%9Ñ%9Ó:ˆŒ
à—-‘-Ð"5¤*¨Q¯W©WÓ"5°gÓ">Ñ>ÀÇÁÑLˆŒØŸM™MÐ,?¬J°q·w±wÓ,?ÀÓ,HÑHÌ9Ë;ÑVˆÔä�h × 0Ñ 0°Ó 7¸!×:JÑ:JÈ5Ó:QÑ QÓRˆŒÜ�i ×!1Ñ!1°%Ó!8¸1×;KÑ;KÈEÓ;RÑ!RÓSˆŒÜ�i ×!1Ñ!1°%Ó!8¸1×;KÑ;KÈEÓ;RÑ!RÓSˆŒäØØÐ#”(˜1Ÿ7™7Ó# HÓ-Ñ-°Ñ3ØñØ%”H˜QŸW™WÓ% hÓ/ñ0Ø25ñ6àñà—O‘O JÓ/ñ0à25ñ6ð ñð .”H˜QŸ_™_Ó-¨gÓ6ñ7ð :=ñ=ð ×Ñ˜uÓ%ñ	&ð
 ×Ñ˜uÓ%ñ&ó'ˆŒ	ô ØÜ�SÐ;œ9¤V¨C£[°1·7±7Ñ%:Ó;¸FÓCÑCÀcÑIÓJØ×Ñ˜wÓ'ñ(ó)ˆŒô
 ˜ q×'7Ñ'7¸Ó'?Ó@ˆŒ
ä˜-¨×)9Ñ)9¸&Ó)AÓBˆŒäØØ×Ñ˜\Ó*¨Q×-=Ñ-=¸fÓ-EÑEóGˆŒ	ô ØØ×Ñ˜\Ó*¨Q×-=Ñ-=¸fÓ-EÑEóGˆŒ
ô �Xœ|¨C°ÀcÔJÓKˆŒä˜ðOœ;¨c¸#Ü/4´Y¸q¿w¹wÓ5GÓ/HÜ'1´'¸&³/×2JÑ2JÓ2LÓ'Mñ0NôOàOVóXóYˆŒ
ð #ŒX�a—k‘kÓ" 9Ó-Ø:Œyœ  c 
Ó+¨a¯k©kÑ9Ó:¸:ÓFñGàŒu�T‹{˜=Ó)ñ*ð Œe�D‹k˜-Ó(ñ)ð × Ñ  Ó+¨k¬e°D«k¸-Ó.HÑHñ	Jð 	
Œ
ð —7‘7˜QŸ]™]Ñ*¨Q¯V©VÑ3°a·j±jÑ@ˆŒà	�ŠØ�H‰HØ�l‰lñà×Ññð ×Ñññ	
�ô Ð-¨sÐ5I´ZÀÇÁÓ5IÈ&Ó5QÑ/QÐTWÑ/WÓXˆŒäØ˜CÐ"6¤*¨Q¯X©XÓ"6°wÓ"?Ñ?À#ÑEóGˆŒð 	
�ŠØ�I‰I˜Ÿ™Ñ §¡Ñ'Ø�h‰hñà�h‰hñð �j‰jñ	ð
 �n‰nñð �g‰gñð �f‰fñð �g‰gñð �g‰gñ	ð �i‰iñ
ð �i‰iñð �j‰jñð �f‰fñð �j‰jñð �k‰kñð  �f‰fñ!ð" �l‰lñ#ð$ �j‰jñ%ð& �l‰lñ'ñ	
�ð. ˜qŸw™w xÓ0´5Ð9OÓ3PÑPÑQˆØ	�ŠØ˜Ÿ™ ›¬%Ð0FÓ*GÑGÑHØ:Œj˜Ÿ™ A§L¡LÑ0°6Ñ9Ó:¸5ÓAñBàñàŸ7™7 7Ó+¬eÐ4JÓ.KÑKñMñ	
�ô $ A§G¡GÓ,ˆŒÜ& s¨DÀ%ÔHˆŒÜÐ 6Ó7×HÑHÓJˆŒ
à�J‰Jœ A§M¡M°A·J±JÑ$>Ó?Ñ?Ä)Ã+ÑMð 	
Œñ 	$Ô%àŸ6™6ˆÔØ !§¡ˆÔð ,1ˆÕ(ùòs 4s   Á&i
c                ó\  — t        |dd||«      g| _        i | _        	 | j                  j	                  |«      }g | _        d| _        i | _        t        j                  «        t        j                  t        |d   «      S # t
        $ r#}t        d|j                  d«      z   «      d‚d}~ww xY w)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  r,  r   NF)r  Ú_state_stackÚ_em_width_cacher>  Úparse_stringr   r/   Úexplainr@  r   Úreset_cacherÛ   rÜ   r>  )rN   rH  Úfonts_objectrU   rš   Úresultr1   s          r2   ÚparsezParser.parseõ  s©   € ô ˜ i°°xÀÓEðGˆÔàFHˆÔð	>Ø×%Ñ%×2Ñ2°1Ó5ˆFð ˆÔØ+0ˆÔ(à!ˆÔÜ×!Ñ!Ô#Ü�v‰v”e˜V A™YÓ'Ð'øô "ò 	>Ü˜T C§K¡K°£NÑ2Ó3¸Ð=ûð	>ús   žA? Á?	B+ÂB&Â&B+c                ó    — | j                   d   S )z&Get the current `State` of the parser.rª  )rC  r¾   s    r2   Ú	get_statezParser.get_state
	  s   € à× Ñ  Ñ$Ð$rC   c                ó8   — | j                   j                  «        y)zPop a `State` off of the stack.N)rC  r­  r¾   s    r2   Ú	pop_statezParser.pop_state	  s   € à×Ñ×ÑÕrC   c                ór   — | j                   j                  | j                  «       j                  «       «       y)z=Push a new `State` onto the stack, copying the current state.N)rC  r¨   rL  rš  r¾   s    r2   Ú
push_statezParser.push_state	  s&   € à×Ñ× Ñ  §¡Ó!1×!6Ñ!6Ó!8Õ9rC   c                ó6   — t        |j                  «       «      gS rL   )r>  Úas_list©rN   rÄ  s     r2   r=  zParser.main	  s   € Ü�d—l‘l“nÓ%Ð&Ð&rC   c                óH   — | j                   j                  |d   dd d¬«      S )Nr   r   rª  T)Ú	parse_all)r?  rE  rS  s     r2   r;  zParser.math_string	  s(   € Ø×$Ñ$×1Ñ1°$°q±'¸!¸B°-È4Ð1ÓPÐPrC   c                óZ   — t        |j                  «       «      }| j                  «        |gS rL   )r>  rR  rN  )rN   rÄ  Úhlists      r2   rp   zParser.math	  s#   € Ü�d—l‘l“nÓ%ˆØ�‰ÔØˆwˆrC   c                ó  — |d   j                  dd«      }|D �cg c]  }t        || j                  «       «      ‘Œ }}t        |«      }| j	                  «        t
        j                  d   | j                  «       _        |gS c c}w )Nr   z\$r  rö   )Úreplacer	  rL  r>  rP  rù   rú   rT   )rN   rÄ  rH  r  ÚsymbolsrW  s         r2   r<  zParser.non_math!	  so   € Ø�‰G�O‰O˜E 3Ó'ˆØ67Ö8°”4˜˜4Ÿ>™>Ó+Õ,Ð8ˆÐ8Ü�g“ˆà�‰ÔÜ #§¡Ð-?Ñ @ˆ�‰ÓÔØˆwˆùò 9s   š!Bc           	     óÌ   — | j                  «        | j                  «       }d|_        t        |d   D �cg c]  }t	        ||«      ‘Œ c}«      }| j                  «        |gS c c}w )Nr  r   )rP  rL  rT   r>  r	  rN  )rN   rÄ  r  r  rW  s        r2   r5  zParser.text,	  sT   € Ø�‰ÔØ—‘Ó ˆØˆŒ
Ü¨t°A©wÖ7¨!”t˜A˜u•~Ò7Ó8ˆØ�‰ÔØˆwˆùò 8s   ´A!c                ó>  — | j                  «       }|j                  |j                  |j                  f}| j                  j                  |«      }|€@|j                  j                  d|j                  |j                  «      }|| j                  |<   t        ||z  «      S )Nr  )	rL  rT   rU   rš   rD  rÖ   r  r³   rK  )rN   Ú
percentager  r#  r7   s        r2   Ú_make_spacezParser._make_space4	  sƒ   € ð —‘Ó ˆØ�z‰z˜5Ÿ>™>¨5¯9©9Ð5ˆØ×$Ñ$×(Ñ(¨Ó-ˆØˆ=Ø—M‘M×*Ñ*¨8°U·^±^ÀUÇYÁYÓOˆEØ(-ˆD× Ñ  Ñ%Ü�E˜JÑ&Ó'Ð'rC   g…¶œKqUÅ?gý0Bx´qÌ?g‚çÞÃ%ÇÑ?g¾¤1ZGUÕ?r»  rf   g…¶œKqUÅ¿)ú\,z
\thinspacez\/z\>z\:z\;z\ r:  z\enspacez\quadz\qquadz\!c                óN   — | j                   |d      }| j                  |«      }|gS ©Nrý  )r  r^  )rN   rÄ  rV   rM   s       r2   rý  zParser.spaceR	  s-   € Ø× Ñ   g¡Ñ/ˆØ×Ñ˜sÓ#ˆØˆuˆrC   c                ó,   — | j                  |d   «      gS ra  )r^  rS  s     r2   r$  zParser.customspaceW	  s   € Ø× Ñ   g¡Ó/Ð0Ð0rC   c                ó6  — |d   }|dk(  rd}	 t        || j                  «       «      }|| j                  v r¤t        d„ |d | d d d…   D «       d«      }| j                  sJ|| j                  v r?t        |d | j                  «       «      dk(  s|d	h| j                  £| j                  £v r|gS t        | j                  d
«      || j                  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#|j                  «       r|j                  «       r|gS t        || j                  d
«      gd¬«      gS |gS # t        $ r}t        ||d|z  «      |‚d }~ww xY w)Nr¢   ú-r÷   zUnknown symbol: %sc              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­w©r  NrB   ©rê   r  s     r2   rì   z Parser.symbol.<locals>.<genexpr>m	  ó   è ø€ ÒC A¸!¸s»(œaÑCùó   ‚
�rª  r-  r   r1  r¾  Tr�  c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wrf  rB   rg  s     r2   rì   z Parser.symbol.<locals>.<genexpr>{	  rh  ri  c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wrf  rB   rg  s     r2   rì   z Parser.symbol.<locals>.<genexpr>|	  s   è ø€ ÒA A¸¸S»œaÑAùri  r   ú,r2  ú.)r	  rL  r/   r   Ú_spaced_symbolsrè  r@  Ú_binary_operatorsr(  rD  Ú_left_delimsÚ_relation_symbolsr>  r^  Ú_punctuation_symbolsr)  )	rN   rH  rÃ  rÄ  r  r{  r1   Ú	prev_charÚ	next_chars	            r2   r0   zParser.symbolZ	  sñ  € à�‰KˆØ�Š8ð !ˆAð	IÜ˜˜4Ÿ>™>Ó+Ó,ˆDð
 �×$Ñ$Ñ$ô ÑC¨¨4¨C¨±°2°©ÔCÀRÓHˆIð ×0Ò0Ø˜×/Ñ/Ñ/Ü˜˜$˜3˜Ÿ™›Ó(¨AÒ-°Øð?JØ"×/Ñ/ð?JØ26×2HÑ2Hð?Jñ 2Jà�v�ä˜t×/Ñ/°Ó4Ø#Ø#×/Ñ/°Ó4ð6ð '+ô,ð -ð -ð �$×+Ñ+Ñ+ÜÑC¨¨4¨C¨±°2°©ÔCÀRÓHˆIÜÑA¨¨3°©7¨8¨ÔAÀ2ÓFˆIð �CŠxØ Ò#¨	°SÒ(8Ø ˜6�Mð �CŠx˜I×-Ñ-Ô/°I×4EÑ4EÔ4GØ�v�ä˜t T×%5Ñ%5°cÓ%:Ð;ÀTÔJÐKÐKØˆvˆøôE ò 	IÜ% a¨Ø&:¸QÑ&>ó@ØEHðIûð	Iús   ŽE9 Å9	FÆFÆFc                ó(   — t        ||d|d   › �«      ‚)NzUnknown symbol: rh  rÂ  ©rN   rH  rÃ  rÄ  s       r2   r  zParser.unknown_symbolŠ	  s   € Ü! ! SÐ,<¸TÀ&¹\¸NÐ*KÓLÐLrC   c                ó    — d|d   _         |d   S )NTr¨  )rA  rS  s     r2   r¦  zParser.phantom�	  s   € Ø#'ˆˆW‰Ô Ø�G‰}ÐrC   c                óR   — t        t        |d   j                   «      |d   g«      gS ©Nr¨  ©r>  rK  r7   rS  s     r2   r%  zParser.llap‘	  s+   € Ü”t˜T '™]×0Ñ0Ð0Ó1°4¸±=ÐAÓBÐCÐCrC   c                óR   — t        |d   t        |d   j                   «      g«      gS ry  rz  rS  s     r2   r&  zParser.rlap”	  s+   € Ü�t˜G‘}¤d¨D°©M×,?Ñ,?Ð+?Ó&@ÐAÓBÐCÐCrC   Úhatz\circumflexaccentÚbrevez\combiningbreveÚbarz\combiningoverlineÚgravez\combininggraveaccentÚacutez\combiningacuteaccentÚtildez\combiningtildeÚdotz\combiningdotaboveÚddotz\combiningdiaeresisÚdddotz\combiningthreedotsaboveÚddddotz\combiningfourdotsaboveÚvecz\combiningrightarrowaboveú"ú`ú'r:  rm  r9  z\rightarrowz
\leftarrowz\circ)ÚoverrightarrowÚoverleftarrowÚmathringzwidehat widetilde widebarc                ó  — | j                  «       }|j                  «       }|d   }|d   }|| j                  v r-t        d|z   |j                  |t
        ¬«      }t        |g«      }nat        | j                  |   |«      }|dk(  r |j                  «        |j                  «        t        t        |j                  dz  «      |g«      }|j                  |j                  d«       t        |t        d|d	z  «      t        |g«      g«      S )
Nrÿ  r¢   r*   )r¡  rŒ  g      @Úexactlyr‘   g       @)rL  rs  r(  rŸ  r7   r  r‹  r'  rê  r  r@  rb  rÿ  r>  )rN   rÄ  r  rt  rÿ  r¢   Ú
accent_boxÚcentereds           r2   rÿ  zParser.accent°	  sõ   € Ø—‘Ó ˆØ×9Ñ9Ó;ˆ	Ø�h‘ˆØ�5‰kˆà�T×'Ñ'Ñ'Ü&Ø�v‘˜sŸy™y¨%¼FôDˆJä  * Ó.‰Hä × 0Ñ 0°Ñ 8¸%Ó@ˆJØ˜Ò#Ø×!Ñ!Ô#Ø×!Ñ!Ô#Ü ¤$ s§y¡y°3¡Ó"7¸Ð!DÓEˆHØ�‰�s—y‘y )Ô,ÜØÜ�R˜ S™Ó)Ü�s�e“ðó ð 	rC   c                ó@   — | j                  |||«      }|d   |_        |S )Nrh  )r9  Úfunction_name)rN   rH  rÃ  rÄ  rW  s        r2   r*  zParser.functionÇ	  s'   € Ø×!Ñ! ! S¨$Ó/ˆØ" 6™lˆÔØˆrC   c                ó˜  — | j                  «        | j                  «       }d|_        g }|d   }|D ]x  }t        |t        «      r)d|_        |j                  «        |j                  |«       Œ<t        |t        «      r|j                  t	        ||«      «       Œh|j                  |«       Œz |t        |«      z   dz   }t        |t        «      r|t        d«      z  }t        d„ ||d  D «       d«      }	| j                  ddhz  }
|	|
vr"|| j                  | j                  d	   «      gz  }| j                  «        |	d
v | _        t!        |«      S )Nr  rh  r   zoperatorname{}c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wrf  rB   rg  s     r2   rì   z&Parser.operatorname.<locals>.<genexpr>ß	  s   è ø€ ÒC ¸!¸s»(œ!ÑCùri  r-  r9  rê  r_  >   rê  r9  )rP  rL  rT   ra  r	  r  r¨   rˆ   r(  r   rè  r  r^  r  rN  r@  r>  )rN   rH  rÃ  rÄ  r  Ú
hlist_listrh  r  Únext_char_locrt  Ú
delimiterss              r2   r9  zParser.operatornameÌ	  s;  € Ø�‰ÔØ—‘Ó ˆØˆŒ
Ø!#ˆ
à�F‰|ˆØò 	%ˆAÜ˜!œTÔ"Ø�”Ø×!Ñ!Ô#Ø×!Ñ! !Õ$Ü˜AœsÔ#Ø×!Ñ!¤$ q¨%£.Õ1à×!Ñ! !Õ$ð	%ð œc $›i™¨!Ñ+ˆÜ�dœLÔ)ØœSÐ!1Ó2Ñ2ˆMÜÑC Q } ~Ð%6ÔCÀRÓHˆ	Ø—\‘\ S¨# JÑ.ˆ
Ø˜JÑ&à˜4×+Ñ+¨D×,>Ñ,>¸uÑ,EÓFÐGÑGˆJØ�‰Ôð ,5¸
Ð+BˆÔ(Ü�ZÓ Ð rC   c                ó�   — | j                  «        |j                  d«      r$|j                  d«      | j                  «       _        g S ©NrT   )rP  rÖ   rL  rT   rS  s     r2   r  zParser.start_groupê	  s5   € Ø�‰Ôà�8‰8�FÔØ$(§H¡H¨VÓ$4ˆD�N‰NÓÔ!Øˆ	rC   c                ó>   — t        |j                  dg «      «      }|gS ©Nrò  ©r>  rÖ   )rN   rÄ  Úgrps      r2   rò  zParser.groupñ	  s   € Ü�D—H‘H˜W bÓ)Ó*ˆØˆuˆrC   c                ó8   — t        |j                  dg «      «      S r›  rœ  rS  s     r2   r"  zParser.required_groupõ	  s   € Ü�T—X‘X˜g rÓ*Ó+Ð+rC   c                ó&   — | j                  «        g S rL   )rN  r¾   s    r2   r  zParser.end_groupú	  s   € Ø�‰ÔØˆ	rC   c                ó.   — t        |t        |«      d«      ‚)NzExpected '}')r   r(  rv  s       r2   r+  zParser.unclosed_groupþ	  s   € Ü! !¤S¨£V¨^Ó<Ð<rC   c                ó6   — |d   | j                  «       _        g S r™  )rL  rT   rS  s     r2   rT   zParser.font
  s   € Ø $ V¡ˆ�‰ÓÔØˆ	rC   c                ó¼   — t        |t        «      r|j                  | j                  v S t        |t        «      r$t        |d«      r|j                  | j                  v S y)Nr’  F)ra  r	  r  Ú_overunder_symbolsr>  rð  r’  Ú_overunder_functions©rN   r  s     r2   Úis_overunderzParser.is_overunder
  sN   € Ü�gœtÔ$Ø—9‘9 × 7Ñ 7Ð7Ð7Ü˜¤Ô'¬G°G¸_Ô,MØ×(Ñ(¨D×,EÑ,EÐEÐEØrC   c                óT   — t        |t        «      r|j                  | j                  v S yrf  )ra  r	  r  Ú_dropsub_symbolsr¥  s     r2   Ú
is_dropsubzParser.is_dropsub
  s$   € Ü�gœtÔ$Ø—9‘9 × 5Ñ 5Ð5Ð5ØrC   c                óD   — t        |t        «      r|j                  «       S yrf  )ra  r	  r  r¥  s     r2   r  zParser.is_slanted
  s   € Ü�gœtÔ$Ø×%Ñ%Ó'Ð'ØrC   c           	     ó²  •— |j                  dt        d«      «      }|j                  dg «      }t        |j                  dg «      «      }|s|s|S d x}}|r,|^}	}
}|	dk(  r|�t        d«      ‚|
}n|�t        d«      ‚|
}|rŒ,| j	                  «       }|j
                  j                  |j                  |j                  |j                  «      }|j
                  j                  |j                  |j                  |j                  «      }|rk|€t        g «      }t        |«      D ]0  }|j                  j                  | j                  ||dd	i«      «       Œ2 |j!                  «        |j#                  «        | j%                  |«      �r�g }d
}|j&                  }|�&|j)                  «        t+        ||j&                  «      }|�&|j)                  «        t+        ||j&                  «      }|dz  }|�;t-        |g«      }|j#                  |d«       |j                  |t/        d|«      g«       t-        |g«      }|j#                  |d«       |j1                  |«       |�Wt-        |g«      }|j#                  |d«       |j                  t/        d|«      |g«       |j2                  |z   |j4                  z   }t7        |«      }||_        | j:                  r| j=                  | j>                  d   «      gng }d| _        t        |g|¢«      }|gS |}tA        |t        «      r€|j                  }t        |«      r[tA        |d   tB        «      rtA        |d   tD        «      r|d d }|d   }tA        |tD        «      r|jF                  jH                  |_        t        |d¬«      }n7tA        |tD        «      r|jF                  jH                  |_        t        |g«      }|j
                  jK                  «       }|j2                  }d
}| jM                  |«      r|j4                  }|jN                  |z  }|jN                  |z  }| jQ                  |«      r||jN                  |z  z  }||jR                  ||dz  dz  z
  z  z  }| jM                  |«      r?d|jN                  z  |jT                  z
  |z  }d|jN                  z  |jT                  z   |z  }nd}|jW                  «       rd
}d
}nz|j
                  j                  |j                  |j                  tX        z  |j                  «      } |j2                  |jZ                  | z  z
  }|j4                  |j\                  | z  z   }|€˜t        tC        |«      t_        j`                  tb        |«      g«      }!|!j)                  «        | jM                  |«      r||j\                  |z  z   }n-t+        ||jd                  |z  |!j2                  |dz  dz  z
  «      }||!_        �nst        tC        |«      |g«      }!|!j)                  «        | jM                  |«      r||j\                  |z  z
  }n*t+        ||jf                  |z  |!j4                  |dz  z   «      }|€	| |!_        nôt        tC        |«      |g«      }"|"j)                  «        | jM                  |«      r||j\                  |z  z   }nt+        ||jh                  |z  «      }d|z  ||!j4                  z
  |"j2                  |z
  z
  z
  }#|#d
kD  r,||#z  }|dz  dz  |z
  |!j4                  z   }#|#dkD  r
||#z  }||#z  }t7        |!tC        ||!j4                  z
  |"j2                  |z
  z
  «      |"g«      }!||!_        | jM                  |«      s"|!xj&                  |jj                  |z  z  c_        | j:                  r| j=                  | j>                  d   «      gng }d| _        t        ||!g|¢«      }|gS )Nr  r   r  r  rê  zDouble subscriptzDouble superscriptr¢   r‰  r‘   g      @rŽ  r_  Frª  éþÿÿÿr�  rf   râ   rQ  é   )6rÖ   r  r(  r   rL  r  r·   rT   rU   rš   rµ   r>  r§  r%  Úextendr0   r  r@  r¦  r7   rê  rl   r‹  rÿ  r¨   r8   r9   rb  r$  r@  r^  r  ra  rK  r	  r  r„   r¿   r©  r½  r  r¿  rÁ  rï  rù  r¶  r·  rÛ   rÜ   rß  rº  r¸  r¼  rµ  )%rN   rH  rÃ  rÄ  r  r  ÚnapostrophesÚsubrÍ   ÚopÚargr  Úrule_thicknessr  r¬  Úvlistr�  r7   ÚvgaprW  ÚvltÚoptional_spacingrI  Ú	last_charrL  rü   Ú	lc_heightÚlc_baselineÚ	superkernÚsubkernÚshift_upÚ
shift_downÚshrunk_x_heightrx   ry   ÚclrrÔ   s%                                       €r2   r  zParser.subsuper
  s7  ø€ Ø—(‘(˜9¤d¨1£gÓ.ˆØ—8‘8˜J¨Ó+ˆÜ˜4Ÿ8™8 M°2Ó6Ó7ˆá¡ØˆNàÐˆˆeÙØ!)ÐˆB��hØ�SŠyØ�?Ü-Ð.@ÓAÐAØ‘àÐ$Ü-Ð.BÓCÐCØ�ò ð —‘Ó ˆØŸ™×>Ñ>Ø�J‰J˜Ÿ™¨¯	©	ó3ˆà—=‘=×,Ñ,¨U¯Z©Z¸¿¹ÈÏÉÓSˆáØˆ}Ü˜b›	�Ü˜<Ó(ò O�Ø—‘×%Ñ% d§k¡k°!°S¸5À)Ð:LÓ&MÕNðOð �J‰JŒLØ�K‰KŒMð ×Ñ˜WÕ%ØˆEØˆEØ—M‘MˆEØÐ Ø—‘”Ü˜E 5§;¡;Ó/�ØˆØ—
‘
”Ü˜E 3§9¡9Ó-�à! CÑ'ˆDØÐ Ü! 5 'Ó*�Ø—‘˜E 9Ô-Ø—‘˜e¤T¨!¨T£]Ð3Ô4Ü˜w˜iÓ(ˆEØ�K‰K˜˜yÔ)Ø�L‰L˜ÔØˆÜ! 3 %Ó(�Ø—‘˜E 9Ô-Ø—‘œd 1 d›m¨UÐ3Ô4ØŸ™ tÑ+¨g¯m©mÑ;�Ü˜“,ˆCØ$ˆCÔà#'×#CÒ#Cð "&×!1Ñ!1°$×2DÑ2DÀUÑ2KÓ!LÑ MØIKð à/4ˆDÔ,Ü˜CÐ3Ð"2Ð3Ó4ˆFØ�8ˆOð ˆ	Ü�gœuÔ%Ø"×+Ñ+ˆLÜ�<Ô ä˜|¨BÑ/´Ô6Ü" <°Ñ#3´TÔ:Ø#/°°Ð#4�LØ(¨Ñ,�	Ü˜i¬Ô.Ø&/×&8Ñ&8×&@Ñ&@�I”Oä˜L°%Ô8‰Gä˜'¤4Ô(Ø"+×"4Ñ"4×"<Ñ"<�	”Ü˜W˜IÓ&ˆGð —‘×1Ñ1Ó3ˆØ×&Ñ&ˆ	ØˆØ�?‰?˜9Ô%Ø#Ÿ/™/ˆKð —L‘L 8Ñ+ˆ	Ø—,‘, Ñ)ˆØ�?‰?˜9Ô%Ø˜Ÿ™¨Ñ0Ñ0ˆIØ˜×-Ñ-°¸XÈ¹\ÈAÑ=MÑ1MÑNÑNˆIØ�‰˜yÔ)Ø˜vŸ|™|Ñ+¨f×.CÑ.CÑCÀyÑP�Ø §¡Ñ-°×0EÑ0EÑEÈÑR‘	à�ð ×ÑÔ!ØˆHØ‰Jà#Ÿm™m×7Ñ7Ø—
‘
˜EŸN™N¬]Ñ:¸E¿I¹IóGˆOà—~‘~¨¯©¸Ñ(HÑHˆHØ Ÿ™¨¯©¸/Ñ)IÑIˆJð ˆ=ô
 ”t˜G“}¤a§f¡f¬T°3Ó&7Ð8Ó9ˆAØ�H‰HŒJØ�‰˜yÔ)Ø(¨6¯>©>¸HÑ+DÑD‘
ä  ¨V¯[©[¸8Ñ-CØ!"§¡¨H°q©L¸1Ñ,<Ñ!<ó>�
à'ˆAŽNô ”t˜I“¨Ð.Ó/ˆAØ�H‰HŒJØ�‰˜yÔ)Ø$ v§~¡~¸Ñ'@Ñ@‘ä˜x¨¯©°xÑ)?ÀÇÁÈ8ÐVWÉ<ÑAWÓX�Øˆ{Ø"* �•ô œ4 ›=¨#Ð.Ó/�Ø—‘”
Ø—?‘? 9Ô-Ø!,¨v¯~©~ÀÑ/HÑ!H‘Jä!$ Z°·±¸xÑ1GÓ!H�Jð ˜>Ñ)Ø! A§G¡GÑ+°·±¸:Ñ0EÑFñH�à˜’8Ø #Ñ%�JØ" Q™,¨Ñ*¨XÑ5¸¿¹Ñ?�CØ˜Q’wØ  C™˜Ø" cÑ)˜
ÜØÜ˜( Q§W¡WÑ,°·±¸JÑ1FÑGÓHØðó �ð ",�”à�‰˜yÔ)Ø�GŠG�v×*Ñ*¨XÑ5Ñ5�Gð
  $×?Ò?ð "×-Ñ-¨d×.@Ñ.@ÀÑ.GÓHÑIØEGð 	à+0ˆÔ(Ü˜ Ð6Ð%5Ð6Ó7ˆØˆxˆrC   c           	     óŠ  — | j                  «       }|j                  «       }|j                  j                  |j                  |j
                  |j                  «      }	|j                  j                  «       }
|j                  j                  |j                  |j
                  |j                  «      }t        |j                  «      D ]+  }|t        z  }|j                  «        |j                  «        Œ- t        |g«      }t        |g«      }t        |j                  |j                  «      }|j!                  |d«       |j!                  |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
  |j0                  |z
  z
  |«      }t3        |t5        d|«      t7        ||«      t5        d|«      |g«      }|j0                  |z   |z   |	z
  |_        nÉ|| j"                  j$                  u r$|
j&                  |z  }|
j(                  |z  }d|z  }n#|
j:                  |z  }|
j,                  |z  }d|z  }||j.                  z
  |j0                  |z
  z
  }t        ||«      }t3        |t5        d|«      |g«      }||_        ||k  r|xj8                  ||z
  dz  z  c_        t=        t?        |«      |t?        |«      g«      g}|s|r| jA                  |xs d||xs d«      S |S )NrŽ  râ   rf   r   é   rm  )!rL  rs  r  r°   rT   rU   rš   r¿   rµ   r§  r¨  rù  rê  r‹  rl   r7   r@  rç  rã  rÂ  rÅ  rÃ  rÆ  r9   r8   rb  rÿ  rp  r$  rÄ  r>  r  Ú_auto_sized_delimiter)rN   r  r  Úruler  rV   r   r  rt  rø   rü   r  rê  ÚcnumÚcdenr7   Únum_shift_upÚden_shift_downrÀ  r½  Únum_clrÚden_clrr´  Úmin_clrÚdef_clrrI  s                             r2   Ú_genfraczParser._genfracË
  s	  € à—‘Ó ˆØ×9Ñ9Ó;ˆ	à—m‘m×3Ñ3Ø�J‰J˜Ÿ™¨¯	©	ó3ˆà—‘×1Ñ1Ó3ˆØ—=‘=×,Ñ,¨U¯Z©Z¸¿¹ÈÏÉÓSˆä�u—{‘{Ó#ò 	ˆAØœÑ%ˆHØ�J‰JŒLØ�J‰J�Lð	ô ˜#˜ÓˆÜ˜#˜ÓˆÜ�C—I‘I˜sŸy™yÓ)ˆØ�
‰
�5˜)Ô$Ø�
‰
�5˜)Ô$ñ Ø˜Ÿ™×4Ñ4Ñ4Ø%Ÿ{™{¨XÑ5�Ø!'§¡°Ñ!9�Ø˜$‘h‘à%Ÿ{™{¨XÑ5�Ø!'§¡°Ñ!9�Ø�Ø˜1‘HˆEÜ˜<¨$¯*©*Ñ4¸ÀuÑ9LÑMÈsÓSˆGÜ˜;¨Ñ.°4·;±;ÀÑ3OÑPÐRUÓVˆGÜ˜4Ü  7Ó+Ü  ¨Ó-Ü  7Ó+Øð	ó ˆEð "&§¡¨wÑ!6¸Ñ!>ÀÑ!LˆEÕð ˜Ÿ™×4Ñ4Ñ4Ø%Ÿ{™{¨XÑ5�Ø!'§¡°Ñ!9�Ø˜i™-‘à%Ÿ{™{¨XÑ5�Ø!'§¡°Ñ!9�Ø˜i™-�Ø# d§j¡jÑ0°T·[±[À>Ñ5QÑRˆGÜ�g˜wÓ'ˆCÜ˜4Ü  3›<Øðó ˆEð "0ˆEÔØ˜Ò Ø×"Ò" w°Ñ'8¸AÑ&=Ñ=Õ"ä*/Ü�‹OØÜ�‹Oð1
ó +ð *ˆñ
 ‘VØ×-Ñ-¨fªm¸¸VÀVÂ]ÈsÓSÐSØˆrC   c                ó<   — | j                  t        |d   «      «      S )Nrþ  )rç  rt   rS  s     r2   rþ  zParser.style_literal  s   € Ø�‰œs 4¨Ñ#8Ó9Ó:Ð:rC   c           	     óÈ   — | j                  |j                  dd«      |j                  dd«      |d   |j                  d| j                  j                  «      |d   |d   «      S )Nr  r-  r  r  r  rV   r   )rÍ  rÖ   rç  rä  rS  s     r2   r/  zParser.genfrac  sZ   € Ø�}‰}Ø�H‰H�X˜rÓ" D§H¡H¨X°rÓ$:Ø�Ñ˜dŸh™h w°·±×0IÑ0IÓJØ�‰K˜˜e™ó&ð 	&rC   c           	     óš   — | j                  dd| j                  «       j                  «       | j                  j                  |d   |d   «      S ©Nr-  rV   r   )rÍ  rL  rs  rç  rä  rS  s     r2   r,  zParser.frac  sE   € Ø�}‰}Ø��D—N‘NÓ$×DÑDÓFØ�O‰O×%Ñ% t¨E¡{°D¸±KóAð 	ArC   c           	     óš   — | j                  dd| j                  «       j                  «       | j                  j                  |d   |d   «      S rÑ  )rÍ  rL  rs  rç  rã  rS  s     r2   r-  zParser.dfrac  sE   € Ø�}‰}Ø��D—N‘NÓ$×DÑDÓFØ�O‰O×(Ñ(¨$¨u©+°t¸E±{óDð 	DrC   c           	     ób   — | j                  ddd| j                  j                  |d   |d   «      S )Nr.  r0  r   rV   r   )rÍ  rç  rä  rS  s     r2   r.  zParser.binom$  s5   € Ø�}‰}Ø��aØ�O‰O×%Ñ% t¨E¡{°D¸±KóAð 	ArC   c                óô  — |d   }|d   }| j                  «       j                  «       }|j                  «        t        |g«      }t        |g«      }t	        |j
                  |j
                  «      }	|j                  |	d«       |j                  |	d«       |dz  }
||dz      dk(  r;t        |t        d|
«      |g«      }|j                  |j                  z   |
z   |_        |S t        |t        d|
«      |g«      }|S )Nr  r  rŽ  râ   r   Úur   )rL  rs  rê  r‹  rl   r7   r@  rb  rÿ  r9   r8   r$  )rN   rH  rÃ  rÄ  r  r  rt  Úcentered_annotationÚcentered_bodyr7   rµ  r´  s               r2   Ú_gensetzParser._genset)  s  € Ø˜,Ñ'ˆ
Ø�F‰|ˆØ—N‘NÓ$×DÑDÓFˆ	à×ÑÔÜ'¨¨Ó5ÐÜ! 4 &Ó)ˆÜÐ'×-Ñ-¨}×/BÑ/BÓCˆØ×!Ñ! %¨Ô3Ø×Ñ˜E 9Ô-à˜1‰}ˆØˆS�1‰W‰:˜ÒÜØÜ�Q˜“Ø#ðó ˆEð "/×!4Ñ!4Ð7J×7QÑ7QÑ!QÐTXÑ!XˆEÔð ˆô Ø#Ü�Q˜“Øðó ˆEð ˆrC   c                ól  — |j                  d«      }|d   }| j                  «       }|j                  «       }|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                  |j                  z  dz  z   d|«       |st        d	|j                   z  d
d
«      }n+t        |«      }|j#                  «        |j#                  «        t        t        |g«      g«      }| dz  |_        t        |t%        d|j                   z  «      ||
g«      }|gS )Nr  r¨  r­  r7  rf   r|  é°  rŽ  r»  r‘   rÎ  g      à¿)rÖ   rL  rs  r8   r$  r9   r˜  r>  r  rb  rp  rW  rd  rU   rš   r   r7   rê  rK  )rN   rÄ  r  r  r  rt  r8   r9   ÚcheckÚpadded_bodyÚ	rightsideÚ
root_vlistrW  s                r2   r0  zParser.sqrtK  s�  € Ø�x‰x˜ÓˆØ�G‰}ˆØ—‘Ó ˆØ×9Ñ9Ó;ˆ	ð —‘˜t×0Ñ0Ñ0°1°y±=Ñ@ˆØ—
‘
˜T×.Ñ.Ñ.ˆÜ˜|¨V°U¸EÓBˆØ—‘ × 2Ñ 2Ñ2ˆØ—‘˜e×0Ñ0Ñ0ˆô œT ! i¡-Ó0°$¼¸QÀ¹]Ó8KÐLÓMˆÜœ5 ›<¬¨f«°{ÐCÓDˆ	à�‰˜ %§.¡.°5·9±9Ñ"<ÀÑ!JÑJØ! 5ô	*ñ
 Ü�s˜UŸ[™[Ñ(¨"¨bÓ1‰Dä˜“;ˆDØ�K‰KŒMØ�K‰KŒMäœE 4 &›M˜?Ó+ˆ
Ø#) '¨C¡-ˆ
ÔäØÜ�˜Ÿ™Ñ#Ó$ØØð	
ó ˆð ˆwˆrC   c                óŽ  — |d   }| j                  «       }|j                  «       }|j                  |j                  z
  d|z  z   }|j                  |j                  z   }t        t        |«      t        d«      t        |g«      g«      }|j                  ||j                  |j                  z  dz  z   d|«       t        |g«      }|gS )Nr  râ   r|  rÚ  rŽ  )rL  rs  r8   r$  r9   rb  rp  rW  r>  rd  rU   rš   )	rN   rÄ  r  r  rt  r8   r9   rÝ  rW  s	            r2   r1  zParser.overlinet  s¸   € Ø�F‰|ˆà—‘Ó ˆØ×9Ñ9Ó;ˆ	à—‘˜t×0Ñ0Ñ0°1°y±=Ñ@ˆØ—
‘
˜T×.Ñ.Ñ.ˆô œ5 ›<¬¨f«´u¸d¸V³}ÐEÓFˆ	ð 	�‰˜ %§.¡.°5·9±9Ñ"<ÀÑ!JÑJØ! 5ô	*ô �y�kÓ"ˆØˆwˆrC   c                óD  — |d   }| j                  «       }|j                  «       }t        t        |g«      t	        d|z  «      t        ||«      g«      }|j                  |j                  z   |z   }|j                  |_        ||j                  z
  |_        t        |g«      gS )Nr  râ   )rL  rs  rb  r>  rK  rp  r8   r9   )rN   rÄ  r  r  rt  r´  r½  s          r2   r2  zParser.underline‡  s–   € Ø�F‰|ˆØ—‘Ó ˆØ×9Ñ9Ó;ˆ	äÜ�4�&‹MÜ��Y‘ÓÜ�%˜Ó#ð
ó ˆð
 —‘˜uŸ{™{Ñ*¨YÑ6ˆØ—{‘{ˆŒØ˜eŸl™lÑ*ˆŒÜ�u�g“ÐÐrC   c           	     ó$  — | j                  «       }t        |«      rüt        |D �cg c]  }t        |t        «      rŒ|j
                  ‘Œ! c}«      }t        |D �cg c]  }t        |t        «      rŒ|j                  ‘Œ! c}«      }d }t        |«      D ][  \  }	}
|
dk(  sŒt        j                  t        ||	dz      «      }|dk7  rt        |||||¬«      ||	dz   <   n|j                  |«       ||	= Œ] t        j                  t        t        t        z     |«      }nd}d}d}g }g }|dk7  r|j                  t        |||||¬«      «       |j!                  |«       |dk7  r|j                  t        |||||¬«      «       t#        |«      }|S c c}w c c}w )Nr  r   rm  )r›  r   rÌ  )rL  r(  rl   ra  rˆ   r8   r9   Ú	enumeraterÛ   rÜ   r˜  Úremover   r   r	  r¨   r®  r>  )rN   ÚfrontÚmiddleÚbackr  rx   r8   r9   r›  ÚidxÚelr  Úmiddle_partr  rW  s                  r2   rÃ  zParser._auto_sized_delimiter–  sq  € ð —‘Ó ˆÜˆvŒ;Ü¨FÖM q¼*ÀQÌÕ:L˜!Ÿ(›(ÒMÓNˆFÜ¨&ÖK Q¼
À1ÄcÕ8J˜Ÿ›ÒKÓLˆEØˆFÜ$ VÓ,ò $‘��RØ˜Ó#ÜŸ™œs F¨3°©7¡OÓ4�AØ˜C’xÜ*8Ø ! 6¨5°%Àô+H˜˜s Q™wšð Ÿ™ aÔ(Ø˜s™ð$ô Ÿ&™&¤¤c¬D¡jÑ!1°6Ó:‰KàˆFØˆEØˆFØˆKàˆà�CŠ<Ø�L‰LÜ˜u f¨e°UÀ6ÔJôLà�‰�[Ô!Ø�3Š;Ø�L‰LÜ˜t V¨U°EÀ&ÔIôKä�e“ˆØˆùò? NùÚKs   ¥F»FÁFÁ/Fc                óV   — | j                  |d   |d   j                  «       |d   «      S )Nr  r¦  r  )rÃ  rR  rS  s     r2   rí  zParser.auto_delim¼  s3   € Ø×)Ñ)Ø�‰L˜$˜u™+×-Ñ-Ó/°°g±ó@ð 	@rC   c                ól  — | j                  «        | j                  «       }g }|d   }|D ]î  }t        |t        «      rH|j                  d   }t        |t
        «      rd|_        |j                  «        |j                  |«       Œ[t        |t
        «      rsd|_        |j                  | j                  v s|j                  dd  | j                  v rd|_        |j                  «        |j                  «        |j                  |«       ŒÞ|j                  |«       Œð | j                  «        t        |«      S )Nr¨  r   r  rŽ  )rP  rL  ra  r>  r%  r	  rT   r  r¨   r  Ú_latin_alphabetsÚ_small_greekrN  )rN   rÄ  r  rW  rh  r  Úks          r2   r:  zParser.boldsymbolÀ  sú   € Ø�‰ÔØ—‘Ó ˆØˆØ�G‰}ˆØò 	 ˆAÜ˜!œUÔ#Ø—J‘J˜q‘M�Ü˜a¤Ô&Ø!�A”FØ×%Ñ%Ô'Ø—‘˜Q•Ü˜AœtÔ$Ø�”Ø—C‘C˜4×0Ñ0Ñ0Ø—3‘3�q�r�7˜d×/Ñ/Ñ/Ø#�A”FØ×%Ñ%Ô'Ø×!Ñ!Ô#Ø—‘˜Q•à—‘˜Q•ð!	 ð" 	�‰Ôä�U‹|ÐrC   c                óæ  — |d   }| j                  «       }|j                  «       }|d   D �cg c]  }t        |«      ‘Œ }}t        t	        d„ |«      «      }g }|D ]1  }	t        |	g«      }
|
j                  |d«       |j                  |
«       Œ3 t        |t        d|dz  «      gt        |«      z  «      D ��cg c]  }|D ]  }|‘Œ Œ }}}|d= t        |«      }t        |g«      g}|S c c}w c c}}w )Nr  r   c                ó   — | j                   S rL   rˆ  r  s    r2   rF  z!Parser.substack.<locals>.<lambda>à  s
   €  a§g¡g€ rC   rŽ  rf   rª  )rL  rs  r>  rl   rQ   r‹  r@  r¨   Úziprÿ  r(  rb  )rN   rÄ  r  r  rt  rî  rW  Ú	max_widthr´  r°  ÚcpÚpairrë   Ústackr¶  rI  s                   r2   r7  zParser.substackÚ  s	  € Ø�W‘ˆØ—‘Ó ˆØ×9Ñ9Ó;ˆ	à#(¨¡8Ö,˜a”�q•Ð,ˆÐ,ÜœÑ-¨uÓ5Ó6ˆ	àˆØò 	ˆCÜ˜C˜5Ó!ˆBØ�H‰H�Y 	Ô*Ø�L‰L˜Õð	ô ! ¬¨a°¸Q±Ó)?Ð(@Ä3ÀuÃ:Ñ(MÓN÷"ØØ ò"àò ð "�ð "ˆñ "ð �"ˆIÜ�E‹lˆÜ˜˜“,�ˆØˆùò -ùó"s   ­C(Â8C-rð  )
rH  rˆ   rH  rŒ   rU   r6   rš   r6   r€   r>  rÒ  )rÄ  r   r€   zlist[Hlist])rÄ  r   r€   r   )rÄ  r   r€   rÈ  )r]  r6   r€   rK  )rH  rˆ   rÃ  rt   rÄ  zParseResults | dict[str, str]r€   rÈ  rÇ  )r€   rÈ  )r  rß  r€   r�   )r  rˆ   r  rˆ   rÄ  ru  r  rç  rV   r>  r   r>  r€   rÈ  )rä  rˆ   rå  zlist[Box | Char | str]ræ  rˆ   r€   rÈ  )Yr=   r>   r?   r@   ÚenumÚEnumrç  rC  rD  ro  rq  Ú_arrow_symbolsrn  rr  r£  r¤  r¨  r  r)  Ú_ambi_delimsrp  Ú_right_delimsr  r§  r+   rs  rh  rr  rÚ   rí  ÚstringÚascii_lettersrì  rO   rJ  rL  rN  rP  r=  r;  rp   r<  Ústaticmethodr   Úconvert_to_floatr  r5  r^  r  rý  r$  r0   r  r¦  r%  r&  r'  r(  rÿ  r*  r9  r  rò  r"  r#  r  r+  rT   r¦  r©  r  r  rÍ  rþ  r/  r,  r-  r.  rØ  r3  r4  r0  r1  r2  rÃ  rí  r:  r7  r	  )rê   r¬  rs  rr  rÔ   s   0000@r2   rà  rà  “  sq  ø„ ñô�T—Y‘Yô ñ ð
÷0 ‰%‹'ó3Ðñ6 ð 5÷j  %™u›wók5(Ðñn ð 	÷0 
‰‹ó1€Nð4 (Ð*;Ñ;¸nÑL€OáÐ7×=Ñ=Ó?Ó@Ðáð ÷ ‰5‹7óÐñ
 Ð>×DÑDÓFÓGÐáÐL×RÑRÓTÓUÐáð :ß:?¹%»'óC€Jñ ð ÷ !™5›7ó$€Oñ
 ð /ç/4©u«wó8€Lñ ð 
ç
‰%‹'ó€Lñ ð 
ç
‰%‹'ó€Mð ˜]Ñ*¨\Ñ9€GáÙ™SÐ!?Ó@Ù Ð!?Ó@À1ÑDóF÷Gñ GÈœ×(Ñ(¬¨Q«Ó0×6Ñ6Ó8¸Ñ<×BÑBÕDõ Gó H€Lñ ˜6×/Ñ/Ó0Ðó@1óD(ó*%ó ó:ó'óQóó
ñ !Ð!1×!BÑ!BÓC€Móó(ð  ØØØØØØØØØØØñ€Móó
1ð.Ø2ð.Ø7<ó.ó`MóóDóDðØÐ/ðàÐ-ðð 	Ð0ðð 	Ð3ð	ð
 	Ð3ðð 	Ð-ðð 	Ð0ðð 	Ð1ðð 	Ð6ðð 	Ð5ðð 	Ð7ðð 	Ð1ðð 	Ð3ðð 	Ð3ðð 	Ð-ðð  	Ð0ð!ð" 	Ð/ð#ð$ *Ø(Ø#ò)€Kñ. Ð4×:Ñ:Ó<Ó=€Móó.ó
!ó<óó,ð $€Nóó=óóóó
õ
sðjDØðDØ"'ðDØ,1óDóL;ó&óAó
Dó
Aó
ð@ !Ð €Gˆhó'óRó& ð$Ø&<ð$à$'ð$à,1ó$óL@ó÷4ùõYGs   ÅAK6rà  )r0   rˆ   r€   r&   ))r   r   )rM   r   r¿  ztuple[float, float]r€   rJ   )rÅ  rˆ   r€   r   )rÚ  rˆ   r¥  r   r€   r   )xr@   Ú
__future__r   Úabcrš  rö  rÎ   rI  Úloggingrp   r×   rø  r  rs  rû  r/  ÚtypingrÛ   r   ÚnumpyrR   Únumpy.typingr   Ú	pyparsingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
matplotlibrù   r-  r   Ú_mathtext_datar   r   r   r   Úfont_managerr   r    r!   Úft2fontr"   r#   r$   ÚTYPE_CHECKINGÚcollections.abcr%   r&   r'   r(   Úenable_packratÚ	getLoggerrp  r3   r5   r>   rE   rJ   rƒ   r‡   ÚABCrŒ   ÚABCMetarÉ   r  rJ  r‚  r„  r“  r  r_  rù  rø  r½   rB  r°  r¯  r�  r•  rß  r   rÿ  r  r	  r  r"  r>  rb  rl  rp  rw  rz  r…  rW  r‹  r‘  rK  r˜  rŸ  rr   rÊ  r  rÞ  rà  rB   rC   r2   ú<module>r     s¡  ðñõ #ã 
Û Û Û Û Û Û Û 	Û 	Û Û Û Û Û Ý ã Ý  ÷+÷ +÷ +÷ +÷ +ñ +ó Ý ÷Dó Dç <Ñ <ß 0Ñ 0ð ‡?‚?Ý(ßAÑAð €× Ñ Ô Ø€w×ÑÐ.Ó/€óô,3�*ô 3ð& /€Ô ô�*ô ð( /€Ô ÷<5ñ <5ô~�*ô ô@ˆzô ôy!ˆC�G‰Gô y!ôxxI�E S§[¡[õ xIôv]+�-ô ]+ô@C!�=ô C!ôL&A�,¨#¯+©+õ &AôR(�{ô (ô*'�kô 'ô*t%�ô t%ôn�Iô ðB €ð €÷A.ñ A.ôH!Ð"3ô !ô<Ð)ô ô4Ð-ô ôÐ0ô ô*Ð/ô ÷*ñ ô@ˆ$ô ô*,ˆ3ô ,ô(ˆ3ô (ôD+ˆ4ô D+ôNIˆTô Iô.-/ˆ3ô -/ô``<ˆDô `<ôFS<ˆDô S<ôl@ˆ3ô @ô(7ˆDô 7ô;ˆDô ;ô�
ô ñ ˜R  Q¨¨AÓ.Ù˜R  Q¨¨AÓ.Ù˜R  Q¨¨AÓ.Ù˜R  Q¨¨AÓ.Ù˜R  Q¨¨AÓ.Ù˜R  Q¨¨AÓ.Ù˜R  Q¨¨AÓ.Ù˜R  Q¨¨QÓ/ñ	€	Ô ôGˆ4ô Gô8M�ô Mô>�ô >ô(ˆ4ô (ô6#"�Uô #"ôL �Eô  ô8Yó@1÷#0ñ #0óL6÷2[ò [rC   