Ë
    /æjÏ ã                  ó®  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlmZ ddlZddlmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-Z.ddl/m0Z0 dd	l1m2Z2m3Z3m4Z4m5Z5 dd
l6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z= ej|                  rddl?m@Z@ ddl:mAZAmBZBmCZC  e#jˆ                  «         ejŠ                  d«      ZFdpd„ZG G d„ de«      ZHdeH_I         G d„ de«      ZJdeJ_I         G d„ d«      ZK G d„ de«      ZL G d„ de«      ZM G d„ dejœ                  «      ZO G d„ deOej                   ¬«      ZQ G d„ d eQ«      ZR G d!„ d"eQ«      ZS G d#„ d$eSej                   ¬«      ZT G d%„ d&eT«      ZU G d'„ d(eT«      ZV G d)„ d*eS«      ZW G d+„ d,eW«      ZXd-ZYd.ZZ G d/„ d0«      Z[ G d1„ d2e[«      Z\ G d3„ d4e[«      Z] G d5„ d6e]«      Z^ G d7„ d8e[«      Z_ G d9„ d:e[«      Z` G d;„ d<«      Za G d=„ d>ea«      Zb G d?„ d@eb«      Zc G dA„ dBeb«      Zd G dC„ dDea«      Ze G dE„ dFee«      Zf G dG„ dHeb«      Zg G dI„ dJeg«      Zh G dK„ dLeg«      Zi G dM„ dNeb«      Zj G dO„ dPej«      Zk G dQ„ dRej«      Zl G dS„ dTe«      Zm emdUdVddUd«       emdUdVdWdUd«       emdUdVdXdUd«       emdUdUddVd«       emdUdUddVdW«       emdUdUddVdX«       emdUdUddUd«       emdUdVddYd«      dZœem_n         G d[„ d\ea«      Zo G d]„ d^eh«      Zp G d_„ d`ei«      Zq G da„ dbea«      Zr G dc„ ddeh«      Zs G de„ dfeh«      Ztdqdrdg„Zudsdh„Zv G di„ dje(«      Zw G dk„ dl«      Zxdtdm„Zy G dn„ do«      Zzy)uz.
Implementation details for :mod:`.mathtext`.
é    )ÚannotationsN)Ú
NamedTuple)ÚNDArray)ÚEmptyÚForwardÚLiteralÚGroupÚNotAnyÚ	OneOrMoreÚOptionalÚParseBaseExceptionÚParseExceptionÚParseExpressionÚParseFatalExceptionÚParserElementÚParseResultsÚQuotedStringÚRegexÚ	StringEndÚTokenÚ
ZeroOrMoreÚpyparsing_commonÚnested_exprÚone_ofé   )Úcbook)Úlatex_to_bakomaÚstix_glyph_fixesÚstix_virtual_fontsÚtex2uni)ÚFontPropertiesÚfindfontÚget_font)ÚFT2FontÚKerningÚ	LoadFlags)ÚIterable)ÚCharacterCodeTypeÚGlyphÚGlyphIndexTypezmatplotlib.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     úW/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/matplotlib/_mathtext.pyÚget_unicode_indexr5   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__© ó    r4   r7   r7   J   s$   … ñð ƒLØƒMØƒLØXÓXØ2Ô2rE   r7   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.
    r8   ÚoxÚoyr9   r:   r;   zNDArray[np.uint8]ÚimageNr>   rD   rE   r4   rG   rG   `   s(   … ñð 	ƒIØƒIØƒLØƒMØƒLØÔrE   rG   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=   )ÚselfrO   s     r4   Ú__init__zOutput.__init__   s   € ØˆŒØ;=ˆŒØ>@ˆ�
rE   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 rN   )ÚmapÚnpÚceilrO   r9   r:   r;   r<   ÚfontÚfontsizeÚnumÚglyph_indexÚoffsetr=   r7   )rP   ÚwÚhÚdrH   rI   ÚinfoÚgsÚbxÚbyÚbwÚbhÚrss                r4   Ú	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ÚyminrO   r;   r:   rT   ÚzerosÚmathrU   Úuint8ÚshiprV   Údraw_glyph_to_bitmapÚintÚicebergÚglyphÚfloorrG   )rP   rg   rH   rI   r^   ÚxÚyr[   r\   rl   rp   ro   rm   r]   rJ   Úshiftedrb   rc   r:   ÚcenterÚx1Úx2s                         r4   Ú	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)rO   ÚBox)Úreturnr7   )rg   Úboolr‚   rG   )r?   r@   rA   rB   rQ   re   r€   rD   rE   r4   rL   rL   w   s   „ ñóAó
	0ô$5rE   rL   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).
    r8   Úadvancer:   r9   rl   ro   rp   rm   rw   rƒ   ÚslantedNr>   rD   rE   r4   r…   r…   ¶   s6   … ñð( ƒNØƒMØƒLØ
ƒKØ
ƒKØ
ƒKØ
ƒKØƒNØ„MrE   r…   c                  ó^   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   y)ÚFontInfor$   rV   r8   rW   ÚstrÚpostscript_namer…   rk   r(   rX   r*   rY   r)   rx   rZ   N©r?   r@   rA   rC   rD   rE   r4   r‰   r‰   Ö   s.   … Ø
ƒMØƒOØÓØÓØ	ÓØÓØƒLØ„MrE   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)rP   r�   r‘   s      r4   rQ   zFonts.__init__ê   s   € ð "3ˆÔØ 0ˆÕrE   c
                 ó   — y)zŸ
        Get the kerning distance for font between *sym1* and *sym2*.

        See `~.Fonts.get_metrics` for a detailed description of the parameters.
        ç        rD   )
rP   Úfont1Ú
fontclass1Úsym1Ú	fontsize1Úfont2Ú
fontclass2Úsym2Ú	fontsize2Údpis
             r4   Úget_kernzFonts.get_kernø   s   € ð rE   c                ó   — t         ‚rN   ©ÚNotImplementedError)rP   rV   s     r4   Ú	_get_fontzFonts._get_font  s   € Ü!Ð!rE   c                ó   — t         ‚rN   rŸ   )rP   rV   Ú
font_classÚsymrW   rœ   s         r4   Ú	_get_infozFonts._get_info  ó   € ä!Ð!rE   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¥   rk   )rP   rV   r£   r¤   rW   rœ   r^   s          r4   Úget_metricszFonts.get_metrics	  s$   € ð4 �~‰~˜d J°°X¸sÓCˆØ�|‰|ÐrE   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)
rP   ÚoutputrH   rI   rV   r£   r¤   rW   rœ   r^   s
             r4   Úrender_glyphzFonts.render_glyph&  s2   € ð �~‰~˜d J°°X¸sÓCˆØ�‰×Ñ˜b " d˜^Õ,rE   c                óB   — |j                   j                  ||||f«       y)zM
        Draw a filled rectangle at (*x*, *y*) with size (*w*, *h*).
        N)r=   rª   ©rP   r«   rz   r{   r[   r\   s         r4   Úrender_rect_filledzFonts.render_rect_filled/  s   € ð
 	�‰×Ñ˜Q  1 a˜LÕ)rE   c                ó   — t        «       ‚)zJ
        Get the axis height for the given *font* and *fontsize*.
        rŸ   ©rP   rV   rW   rœ   s       r4   Úget_axis_heightzFonts.get_axis_height6  ó   € ô "Ó#Ð#rE   c                ó   — t        «       ‚)zM
        Get the size of a quad for the given *font* and *fontsize*.
        rŸ   r±   s       r4   Úget_quadzFonts.get_quad<  r³   rE   c                ó   — t        «       ‚)zF
        Get the xheight for the given *font* and *fontsize*.
        rŸ   r±   s       r4   Úget_xheightzFonts.get_xheightB  r³   rE   c                ó   — t        «       ‚)z–
        Get the line thickness that matches the given font.  Used as a
        base unit for drawing lines such as in a fraction or radical.
        rŸ   r±   s       r4   Úget_underline_thicknesszFonts.get_underline_thicknessH  s   € ô
 "Ó#Ð#rE   c                ó   — ||fgS )a  
        Override if your font provides multiple sizes of the same
        symbol.  Should return a list of symbols matching *sym* in
        various sizes.  The expression renderer will select the most
        appropriate size for a given situation from this list.
        rD   ©rP   Úfontnamer¤   s      r4   Ú!get_sized_alternatives_for_symbolz'Fonts.get_sized_alternatives_for_symbolO  s   € ð ˜3�Ð Ð rE   c                ó   — t         S rN   )ÚFontConstantsBase©rP   s    r4   Úget_font_constantszFonts.get_font_constantsY  s   € Ü Ð rE   N©r�   r!   r‘   r&   ©r”   rŠ   r•   rŠ   r–   rŠ   r—   r8   r˜   rŠ   r™   rŠ   rš   rŠ   r›   r8   rœ   r8   r‚   r8   ©rV   rŠ   r‚   r$   )rV   rŠ   r£   rŠ   r¤   rŠ   rW   r8   rœ   r8   r‚   r‰   )rV   rŠ   r£   rŠ   r¤   rŠ   rW   r8   rœ   r8   r‚   r…   )r«   rL   rH   r8   rI   r8   rV   rŠ   r£   rŠ   r¤   rŠ   rW   r8   rœ   r8   r‚   ÚNone©r«   rL   rz   r8   r{   r8   r[   r8   r\   r8   r‚   rÅ   ©rV   rŠ   rW   r8   rœ   r8   r‚   r8   ©r¼   rŠ   r¤   rŠ   r‚   zlist[tuple[str, str]]©r‚   ztype[FontConstantsBase])r?   r@   rA   rB   rQ   r�   r¡   r¥   r¨   r¬   r¯   r²   rµ   r·   r¹   r½   rÁ   rD   rE   r4   rŽ   rŽ   á   sø   „ ñó1ðØðØ),ðØ47ðØDIðàðà %óó"ð"Øð"Ø!)ó"ðØðØ#.óð:-Ø!$ð-Ø+.ð-Ø:?ð-ØFKð-ØPTó-ð*Ø#ð*Ø(-ð*Ø27ð*Ø<Að*ØFJó*ó$ó$ó$ó$ð!Ø/2ð!Ø7Ló!ô!rE   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)
ÚsuperrQ   Ú	functoolsÚcacher¥   Ú_fontsÚfontmapr"   r�   r#   )rP   r�   r‘   ÚfilenameÚdefault_fontÚ	__class__s        €r4   rQ   zTruetypeFonts.__init__c  sl   ø€ Ü‰ÑÐ*Ð,<Ô=ä"Ÿ™¨¯©Ó8ˆŒØˆŒØ')ˆŒä˜D×2Ñ2Ó3ˆÜ Ó)ˆØ!-ˆ�‰�IÑØ!-ˆ�‰�IÒrE   c                óš  — | j                   j                  ||«      }| j                  j                  |«      }|€yt        j                  j                  |«      rZt        |«      }|| j                  |<   || j                  |j                  <   || j                  |j                  j                  «       <   t        j                  t        |«      S rN   )rÓ   ÚgetrÒ   ÚosÚpathÚexistsr#   r‹   ÚlowerÚTÚcastr$   )rP   rV   ÚbasenameÚcached_fonts       r4   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˜{Ó+Ð+rE   c                ó^   — |j                   dk(  r|j                  dz  dz  |dz  |z  dz  z   S y)NÚCmex10é@   rh   é   éH   r“   )r‹   r:   )rP   rV   rx   rW   rœ   s        r4   Ú_get_offsetzTruetypeFonts._get_offsety  s:   € à×Ñ 8Ò+Ø—L‘L 2Ñ%¨Ñ)¨h°q©j¸3Ñ.>¸rÑ.AÑBÐBØrE   c                ó   — t         ‚rN   rŸ   )rP   r¼   r£   r¤   s       r4   Ú
_get_glyphzTruetypeFonts._get_glyph  r¦   rE   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ã   NrD   )Ú.0Úvals     r4   ú	<genexpr>z*TruetypeFonts._get_info.<locals>.<genexpr>‹  s   è ø€ Ò!A¨s #¨¥(Ñ!Aùó   ‚é   rã   )	r†   r:   r9   rl   ro   rp   rm   rw   r‡   )rV   rW   r‹   rk   rX   rY   rx   rZ   )rè   Úset_sizeÚget_char_indexÚ
load_glyphr‘   Úbboxræ   r…   ÚlinearHoriAdvancer:   r9   ÚhoriBearingYr‰   r‹   )rP   r¼   r£   r¤   rW   rœ   rV   rX   r‡   rY   rx   rl   rp   ro   rm   rZ   rk   s                    r4   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ØØØ#ØØô	
ð 		
rE   c                óè   — | j                  «       }|j                  �|j                  |z  |z  dz  S | j                  |t        j                  d   d||«      }|j
                  |j                  z   dz  S )Nrå   úmathtext.defaultõ   âˆ’rh   )rÁ   Úaxis_heightr¨   ÚmplÚrcParamsrm   rp   ©rP   r¼   rW   rœ   Úconstsrk   s         r4   r²   zTruetypeFonts.get_axis_height¥  sx   € Ø×(Ñ(Ó*ˆØ×ÑÐ)Ø×%Ñ%¨Ñ0°3Ñ6¸Ñ;Ð;ð ×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸HÀhÐPSóUˆGà—L‘L 7§<¡<Ñ/°1Ñ4Ð4rE   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         r4   rµ   zTruetypeFonts.get_quad°  se   € Ø×(Ñ(Ó*ˆØ�;‰;Ð"Ø—;‘; Ñ)¨CÑ/°"Ñ4Ð4ð ×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸CÀÈ3óPˆGà—?‘?Ð"rE   c                óÈ   — | j                  «       }|j                  �|j                  |z  |z  dz  S | j                  |t        j                  d   d||«      }|j
                  S )Nrå   rø   rz   )rÁ   Úx_heightr¨   rû   rü   rw   rý   s         r4   r·   zTruetypeFonts.get_xheightº  se   € Ø×(Ñ(Ó*ˆØ�?‰?Ð&Ø—?‘? XÑ-°Ñ3°bÑ8Ð8ð ×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸CÀÈ3óPˆGà—?‘?Ð"rE   c                ó   — d|z  |z  dz  S )Ng      °?rå   rD   r±   s       r4   r¹   z%TruetypeFonts.get_underline_thicknessÅ  s   € ð ˜hÑ&¨Ñ,°Ñ2Ð2rE   c
                ó"  •— ||k(  rs||k(  rn| j                  |||||	«      }
| j                  |||||	«      }|
j                  }|j                  |
j                  |j                  t        j
                  «      dz  S t        ‰| �  |||||||||	«	      S )Nrã   )r¥   rV   Úget_kerningrY   r%   ÚDEFAULTrÏ   r�   )rP   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   Úinfo1Úinfo2rV   rÖ   s                €r4   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rE   rÂ   rÄ   )
rV   r$   rx   r)   rW   r8   rœ   r8   r‚   r8   ©r¼   rŠ   r£   rŠ   r¤   rŠ   r‚   z'tuple[FT2Font, CharacterCodeType, bool])r¼   rŠ   r£   rŠ   r¤   rŠ   rW   r8   rœ   r8   r‚   r‰   )r¼   rŠ   rW   r8   rœ   r8   r‚   r8   rÇ   rÃ   )r?   r@   rA   rB   rQ   r¡   ræ   rè   r¥   r²   rµ   r·   r¹   r�   Ú__classcell__©rÖ   s   @r4   rË   rË   ]  s¨   ø„ ñõ

.ó,ðØðØ#(óð"Øð"Ø Gó"ð

Øð
Ø!)ó
óB	5ó#ó	#ó3ð
IØð
IØ),ð
IØ47ð
IØDIð
Iàð
Ià %÷
Iñ 
IrE   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 rN   )Ú	StixFontsÚ_stix_fallbackrÏ   rQ   Ú_fontmapÚitemsr"   rÓ   )rP   r�   r‘   Úkeyrí   ÚfullpathrÖ   s         €r4   rQ   zBakomaFonts.__init__ê  sj   ø€ Ü'Ð(9Ð;KÓLˆÔä‰ÑÐ*Ð,<Ô=ØŸ™×+Ñ+Ó-ò 	)‰HˆC�Ü “}ˆHØ (ˆD�L‰L˜ÑØ (ˆD�L‰L˜Òñ	)rE   ú
\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è   )rP   r¼   r£   r¤   rV   rß   rX   r‡   s           r4   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ÐLrE   )ÚbigÚBigÚbiggÚBiggú()r  r0  r  z\__parenleftÚ__ú))r  r2  z\__parenrightú{z\__braceleftú}z\__bracerightú[)r  r5  z\__bracketleftú])r  r6  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  r:  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
\leftparenr0  )z\rightparenr2  )z
\leftbracer3  )z\rightbracer4  )z\leftbracketr5  )z\rightbracketr6  )z\langler7  )z\rangler8  )ú\{r3  )ú\}r4  )ú\[r5  )ú\]r6  c                ó@   — | j                   j                  |||fg«      S rN   )Ú_size_alternativesrØ   r»   s      r4   r½   z-BakomaFonts.get_sized_alternatives_for_symbol0  s"   € à×&Ñ&×*Ñ*¨3°(¸C°Ð0AÓBÐBrE   c                ó   — t         S rN   )ÚComputerModernFontConstantsrÀ   s    r4   rÁ   zBakomaFonts.get_font_constants4  s   € Ü*Ð*rE   rÂ   r
  rÈ   rÉ   )r?   r@   rA   rB   r#  rQ   ÚsetÚsplitr)  rè   Ú_latex_sizesrB  ÚaliasÚtargetr½   rÁ   r  )rì   ÚsrÖ   s   00@r4   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Ï   rQ   rF  r"   rÓ   r!   Ú
isinstancer$  )rP   r�   r‘   Úfallback_rcÚfont_clsÚtexfontÚproprV   ÚstixsizedaltfontsÚsizeÚnamer&  rÖ   s               €r4   rQ   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Ò"ñ.ð 6rE   r'  c                ó
   — ||fS rN   rD   )rP   r¼   r£   Úuniindexs       r4   Ú_map_virtual_fontzUnicodeFonts._map_virtual_fontr  s   € à˜Ð!Ð!rE   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.é¤   )r5   r1   r-   Ú_logÚwarningrm  ÚchrÚunicodedataÚcategoryrj  Ú
startswithr)  r¡   rP  Úfamily_namer#   r   Ú_get_data_pathrò   rb  rc  r!  rè   r  r#  Úvaluesr^   )rP   r¼   r£   r¤   rl  Úfound_symbolÚnew_fontnameÚcharr‡   rV   Ú
glyphindexÚgÚfamilys                r4   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 rN   )rb  r½   r»   s      r4   r½   z.UnicodeFonts.get_sized_alternatives_for_symbol·  s2   € à×ÒØ×&Ñ&×HÑHÈÐSVÓWÐWØ˜3�Ð Ð rE   rÂ   ©r¼   rŠ   r£   rŠ   rl  r(   r‚   ztuple[str, CharacterCodeType]r
  rÈ   )r?   r@   rA   rB   rP  rC   rQ   rE  rF  r)  rm  rè   r½   r  r  s   @r4   rL  rL  8  s}   ø… ñ	ð ØñHÐÐDó õ
".ñH ˜=×.Ñ.Ó0Ó1Ðð"Ø$5ð"Ø:Wó"ð?'Øð?'Ø Gó?'ðB!Ø/2ð!Ø7L÷!rE   rL  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 )NrV  rW  rX  rY  rZ  )r\  r]  r^  r_  r`  )rc  ÚDejaVuSerifFontsr!  rb  ra  r  ÚbakomarË   rQ   r#  Úupdater$  r"   rÓ   ©rP   r�   r‘   r%  rj  r&  s         r4   rQ   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˜Òñ	*rE   c                óô   •— |dk(  r| j                   j                  |||«      S t        |«      }| j                  d«      }|�'|j	                  |«      }|dk7  rt
        ‰| �  d||«      S t
        ‰| �  |||«      S )Nú\primer  r   )r‡  rè   r5   r¡   rò   rÏ   )rP   r¼   r£   r¤   rl  rV   r~  rÖ   s          €r4   rè   zDejaVuFonts._get_glyphÖ  s…   ø€ ð �)ÒØ—;‘;×)Ñ)¨(°JÀÓDÐDô )¨Ó-ˆHØ—>‘> $Ó'ˆDØÐØ!×0Ñ0°Ó:�
Ø ’?Ü ™7Ñ-¨d°JÀÓDÐDä‘7Ñ% h°
¸CÓ@Ð@rE   rÂ   r
  )r?   r@   rA   r#  rC   rQ   rè   r  r  s   @r4   r„  r„  ¾  s0   ø… Ø!€HˆnÓ!ó*ð*AØðAØ G÷Añ ArE   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  r[  c                ó   — t         S rN   )ÚDejaVuSerifFontConstantsrÀ   s    r4   rÁ   z#DejaVuSerifFonts.get_font_constantsø  s   € Ü'Ð'rE   NrÉ   ©r?   r@   rA   rB   r#  rÁ   rD   rE   r4   r†  r†  ç  s-   „ ñð Ø#Ø(Ø*ØØ Ø$Øñ	€Hô(rE   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 rN   )ÚDejaVuSansFontConstantsrÀ   s    r4   rÁ   z"DejaVuSansFonts.get_font_constants  s   € Ü&Ð&rE   NrÉ   r“  rD   rE   r4   r•  r•  ü  s-   „ ñð Ø"Ø'Ø)ØØ Ø#Øñ	€Hô'rE   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.
    rU  zSTIXGeneral:italiczSTIXGeneral:weight=boldzSTIXGeneral:italic:boldÚSTIXNonUnicodezSTIXNonUnicode:italiczSTIXNonUnicode:weight=boldrV  rW  rX  rY  rZ  )r  r  r  r�  ÚnonunirmÚnonuniitÚnonunibfr[  r\  r]  r^  r_  r`  NFc                óÈ   — t         j                  | ||«       | j                  j                  «       D ].  \  }}t	        |«      }|| j
                  |<   || j
                  |<   Œ0 y rN   )rË   rQ   r#  r$  r"   rÓ   r‰  s         r4   rQ   zStixFonts.__init__/  s[   € Ü×Ñ˜tÐ%6Ð8HÔIØŸ™×,Ñ,Ó.ò 	*‰IˆC�Ü “~ˆHØ (ˆD�L‰L˜ÑØ!)ˆD�L‰L˜Òñ	*rE   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   rh   r   rä   rø   )r  r  r  )r  r  r  r�  i à  iÿø  Únonuni)r   rØ   Ú_sansrc  Údictr0   Úlistr*  rû   rü   r   )rP   r¼   r£   rl  Úfont_mappingÚdoing_sans_conversionÚmappingÚloÚhiÚmidÚranges              r4   rm  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 )Nr3  r4  r5  r6  u   âŸ¨u   âŸ©)r=  r>  r?  r@  r7  r8  é   r   r9  éÿÿÿÿ)rØ   r5   r1   r©  r¡   rŠ   rò   rt  )rP   r¼   r¤   Úfixesrl  ÚiÚalternativess          r4   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 rN   )r   ÚSTIXSansFontConstantsÚSTIXFontConstantsrÀ   s    r4   rÁ   zStixFonts.get_font_constants�  s   € Ø�:Š:Ü(Ð(ä$Ð$rE   rÂ   r‚  rÈ   rÉ   )r?   r@   rA   rB   r#  rb  r   rQ   rm  rÐ   rÑ   r½   rÁ   rD   rE   r4   r!  r!    s‹   „ ñ
ð Ø"Ø'Ø)Ø$Ø+Ø0ØØØØØØñ€Hð €NØ€Eó*ð4"Ø$5ð4"Ø:Wó4"ðl ‡_�_ðØ/2ðØ7Lòó ðô(%rE   r!  c                  ó   — e Zd ZdZdZy)ra  zd
    A font handling class for the STIX fonts (that uses sans-serif
    characters by default).
    TN)r?   r@   rA   rB   r   rD   rE   r4   ra  ra  ˆ  s   „ ñð �ErE   ra  ç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@   rA   rB   r·  rC   r¸  r¹  rº  r¼  r¾  r¿  rÁ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rú   r  r  rD   rE   r4   r¿   r¿   ¯  sä   … ñð '+€LÐ#Ó*ð "%€GÐÓ$ð "%€GÐÓ$ð "€DÐ
Ó!ð "€DÐ
Ó!ð "€DÐ
Ó!ð  %€EÐÓ$ð
 (+€MÐ$Ó*ð ),€NÐ%Ó+ð "€DÐ
Ó!ð "€DÐ
Ó!ð "€DÐ
Ó!ð !$€FÐÓ#ð !$€FÐÓ#ð -1€KÐ)Ó0ð &*€DÐ
"Ó)ð *.€HÐ&Ô-rE   r¿   c                  ó–   — e Zd ZdZdZdZdZdZdez  Zdez  Z	dez  Z
dez  Zdez  Zd	ez  Zd
ez  Zdez  Zdez  Zdez  ZdZdZedz  Zy)rD  gš™™™™Á?r»  iŽã i€- iÍÌ  i5› iff išô iúÒ
 iºL i† i¨ù
 ix„ ç      Ð?g     ð?i   N)r?   r@   rA   r·  r¿  rÁ  rÃ  Ú	_x_heightr¸  r¹  rº  r¼  r¾  rÄ  rÅ  rÆ  rÇ  rÈ  rú   r  r  rD   rE   r4   rD  rD  ó  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Ñ �HrE   rD  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@   rA   r·  r¿  rÁ  rÃ  rË  r  r¸  r¹  rº  r¼  r¾  rÄ  rÅ  rÆ  rÇ  rÈ  rú   r  rD   rE   r4   r²  r²    sŽ   „ Ø€LØ€EØ€MØ€NØ€IØ˜4Ñ€Hð �I‰o€GØ˜	Ñ!€GØ�‰?€DØ�‰?€DØ�‰?€DØ�‰?€DØ�‰?€DØ�‰?€DØ�9‰_€FØ�9‰_€Fð €KØ�DrE   r²  c                  ó   — e Zd ZdZdZdZy)r±  r¶  ç333333ã?r»  N)r?   r@   rA   r·  rÁ  rÃ  rD   rE   r4   r±  r±  +  s   „ Ø€LØ€MØ�NrE   r±  c                  ó‚   — e Zd ZdZedz  Zdez  Zdez  Zdez  Zdez  Zdez  Z	dez  Z
d	ez  Zd
ez  Zdez  Zdez  ZdZy)r’  i'  é   çð§ÆK7´ˆ@çš™™™™™Y@ç;ßO�—nŠ@çw¾Ÿ/3s@ç-²�ï§Æƒ@ç=
×£pç—@ç‰A`åÐ"‹@ç¼t“VŽ@ç\�Âõ(1˜@é   rÊ  N©r?   r@   rA   rË  r  r¸  r¹  rº  r¼  r¾  rÄ  rÅ  rÆ  rÇ  rÈ  rú   rD   rE   r4   r’  r’  1  ó}   „ Ø€IØ˜4Ñ€Hð ˜	Ñ!€GØ�iÑ€GØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�YÑ€DØ�yÑ €FØ�9‰_€Fð �KrE   r’  c                  ó‚   — e Zd ZdZedz  Zdez  Zdez  Zdez  Zdez  Zdez  Z	dez  Z
d	ez  Zd
ez  Zdez  Zdez  ZdZy)r—  i`  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÊ  NrÝ  rD   rE   r4   r—  r—  F  rÞ  rE   r—  c                  ó@   — 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   ©ri  rÀ   s    r4   rQ   zNode.__init__^  s	   € Øˆ�	rE   c                ó,   — t        | «      j                  S rN   )Útyper?   rÀ   s    r4   Ú__repr__zNode.__repr__a  s   € Ü�D‹z×"Ñ"Ð"rE   c                 ó   — y©Nr“   rD   )rP   Únexts     r4   r  zNode.get_kerningd  s   € ØrE   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    r4   ÚshrinkzNode.shrinkg  s   € ð
 	�	Š	�Q‰Ž	rE   c                 ó   — y)zRender this node.NrD   ©rP   r«   rz   r{   s       r4   ÚrenderzNode.rendern  s   � rE   c                 ó   — y)NTrD   rÀ   s    r4   Úis_char_nodezNode.is_char_nodeq  s   € ð rE   N©r‚   rÅ   ©r‚   rŠ   ©rê  zNode | Noner‚   r8   ©r«   rL   rz   r8   r{   r8   r‚   rÅ   ©r‚   rƒ   )
r?   r@   rA   rB   rQ   rç  r  rì  rï  rñ  rD   rE   r4   rá  rá  [  s#   „ Ù&óó#óóó ôrE   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 rN   )rÏ   rQ   r9   r:   r;   )rP   r9   r:   r;   rÖ   s       €r4   rQ   zBox.__init__~  s#   ø€ Ü‰ÑÔØˆŒ
ØˆŒØˆ�
rE   c                óà   •— t         ‰| �  «        | j                  t        k  rL| xj                  t
        z  c_        | xj                  t
        z  c_        | xj                  t
        z  c_        y y rN   )rÏ   rì  ri  ÚNUM_SIZE_LEVELSr9   ÚSHRINK_FACTORr:   r;   ©rP   rÖ   s    €r4   rì  z
Box.shrink„  sH   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�JŠJœ=Ñ(�JØ�KŠKœ=Ñ(�KØ�JŠJœ=Ñ(ŽJð 'rE   c                 ó   — y rN   rD   )rP   r«   r~   Úy1r   Úy2s         r4   rï  z
Box.render‹  s   € àrE   )r9   r8   r:   r8   r;   r8   r‚   rÅ   rò  )r«   rL   r~   r8   rþ  r8   r   r8   rÿ  r8   r‚   rÅ   )r?   r@   rA   rB   rQ   rì  rï  r  r  s   @r4   r�   r�   {  s=   ø„ Ù*õõ)ðØðØ#ðØ).ðØ49ðØ>B÷rE   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Ï   rQ   )rP   r:   r;   rÖ   s      €r4   rQ   zVbox.__init__“  s   ø€ Ü‰Ñ˜˜V UÕ+rE   )r:   r8   r;   r8   ©r?   r@   rA   rB   rQ   r  r  s   @r4   r  r  �  s   ø„ Ù.÷,ñ ,rE   r  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚHboxz.A box with only width (zero height and depth).c                ó(   •— t         ‰| �  |dd«       y ré  r  ©rP   r9   rÖ   s     €r4   rQ   zHbox.__init__š  s   ø€ Ü‰Ñ˜  BÕ'rE   ©r9   r8   r  r  s   @r4   r  r  —  s   ø„ Ù8÷(ñ (rE   r  c                  óX   ‡ — e Zd ZdZd	ˆ fd„Zd
d„Zdd„Zdd„Zdd„Zdd„Z	dˆ fd„Z
ˆ xZS )ÚCharaþ  
    A single character.

    Unlike TeX, the font information and metrics are stored with each `Char`
    to make it easier to lookup the font metrics when needed.  Note that TeX
    boxes have a width, height, and depth, unlike Type1 and TrueType which use
    a full bounding box and an advance in the x-direction.  The metrics must
    be converted to the TeX model, and the advance (if different from width)
    must be converted into a `Kern` node when the `Char` is added to its parent
    `Hlist`.
    c                óú   •— t         ‰| �  «        || _        |j                  | _        |j                  | _        |j
                  | _        |j                  | _        |j                  | _        | j                  «        y rN   )	rÏ   rQ   ÚcÚfontsetrV   r£   rW   rœ   Ú_update_metrics)rP   r  ÚstaterÖ   s      €r4   rQ   zChar.__init__«  s\   ø€ Ü‰ÑÔØˆŒØ—}‘}ˆŒØ—J‘JˆŒ	Ø×*Ñ*ˆŒØŸ™ˆŒØ—9‘9ˆŒð 	×ÑÕrE   c                ó    — d| j                   z  S )Nz`%s`©r  rÀ   s    r4   rç  zChar.__repr__·  s   € Ø˜Ÿ™‰ÐrE   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¨   rV   r£   r  rW   rœ   Ú_metricsr†   r9   rw   r:   r;   ©rP   rk   s     r4   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ˆ�
rE   c                ó.   — | j                   j                  S rN   )r  r‡   rÀ   s    r4   Ú
is_slantedzChar.is_slantedÄ  s   € Ø�}‰}×$Ñ$Ð$rE   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†   r9   rc  r  r  r�   rV   r£   r  rW   rœ   )rP   rê  r†   Úkerns       r4   r  zChar.get_kerningÇ  s„   € ð —-‘-×'Ñ'¨$¯*©*Ñ4ˆØˆÜ�dœDÔ!Ø—<‘<×(Ñ(Ø—	‘	˜4Ÿ?™?¨D¯F©F°D·M±MØ—	‘	˜4Ÿ?™?¨D¯F©F°D·M±MØ—‘óˆDð ˜‰~ÐrE   c           
     ó¬   — | j                   j                  |||| j                  | j                  | j                  | j
                  | j                  «       y rN   )r  r¬   rV   r£   r  rW   rœ   rî  s       r4   rï  zChar.render×  s;   € Ø�‰×!Ñ!Ø�A�qØ�I‰I�t—‘¨¯©°·±¸t¿x¹xõ	IrE   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 rN   )	rÏ   rì  ri  rú  rW   rû  r9   r:   r;   rü  s    €r4   rì  zChar.shrinkÜ  sV   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�MŠMœ]Ñ*�MØ�JŠJœ]Ñ*�JØ�KŠKœ]Ñ*�KØ�JŠJœ]Ñ*ŽJð	 'rE   )r  rŠ   r  ÚParserStateró  rò  rö  rô  rõ  )r?   r@   rA   rB   rQ   rç  r  r  r  rï  rì  r  r  s   @r4   r  r  ž  s1   ø„ ñ
õ
óó9ó%óó I÷
+ñ +rE   r  c                  ó4   ‡ — e Zd ZdZdd„Zdˆ fd„Zdd„Zˆ xZS )ÚAccentzž
    The font metrics need to be dealt with differently for accents,
    since they are already offset correctly from the baseline in
    TrueType fonts.
    c                ó:  — | j                   j                  | j                  | j                  | j                  | j
                  | j                  «      x}| _        |j                  |j                  z
  | _
        |j                  |j                  z
  | _        d| _        y rã  )r  r¨   rV   r£   r  rW   rœ   r  ro   rl   r9   rm   rp   r:   r;   r  s     r4   r  zAccent._update_metricsë  so   € Ø"&§,¡,×":Ñ":Ø�I‰I�t—‘¨¯©°·±¸t¿x¹xó#Ið 	Iˆ�$”-à—\‘\ G§L¡LÑ0ˆŒ
Ø—l‘l W§\¡\Ñ1ˆŒØˆ�
rE   c                óB   •— t         ‰| �  «        | j                  «        y rN   )rÏ   rì  r  rü  s    €r4   rì  zAccent.shrinkò  s   ø€ Ü‰‰ÔØ×ÑÕrE   c           
     ó  — | j                   j                  ||| j                  j                  z
  || j                  j                  z   | j
                  | j                  | j                  | j                  | j                  «       y rN   )
r  r¬   r  rl   rp   rV   r£   r  rW   rœ   rî  s       r4   rï  zAccent.renderö  sY   € Ø�‰×!Ñ!Ø�A˜Ÿ™×*Ñ*Ñ*¨A°·±×0BÑ0BÑ,BØ�I‰I�t—‘¨¯©°·±¸t¿x¹xõ	IrE   rò  rõ  )r?   r@   rA   rB   r  rì  rï  r  r  s   @r4   r  r  å  s   ø„ ñó
õ÷IrE   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Ï   rQ   Úshift_amountÚchildrenÚglue_setÚ	glue_signÚ
glue_order©rP   ÚelementsrÖ   s     €r4   rQ   zList.__init__ÿ  s<   ø€ Ü‰Ñ˜˜R Ô$ØˆÔØ#˜(˜ˆŒàˆŒØˆŒØˆ�rE   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ç  r9   r:   r;   r&  r'  ÚtextwrapÚindentÚjoinrS   rü  s    €r4   rç  zList.__repr__  s�   ø€ Ø@×GÑGÜ‰GÑÓØ�J‰J˜Ÿ™Ø�J‰J˜×)Ñ)ð �}Š}ð ”8—?‘?Ø—	‘	œ#˜gŸn™n¨d¯m©mÓ<Ó=Øóñ àñó	
ð 	
ð #%ó
ð 	
rE   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   NrD   )rì   r®  Útotalss     €r4   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'  rr  rs  ræ  r?   )rP   rz   Úsignr6  Ú
error_typeÚos      `  r4   Ú	_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ð "ð rE   c                óð   •— | j                   D ]  }|j                  «        Œ t        ‰| �  «        | j                  t        k  r3| xj
                  t        z  c_        | xj                  t        z  c_        y y rN   )r'  rì  rÏ   ri  rú  r&  rû  r(  )rP   ÚchildrÖ   s     €r4   rì  zList.shrink#  sY   ø€ Ø—]‘]ò 	ˆEØ�L‰L�Nð	ä‰‰ÔØ�9‰9”Ò&Ø×Ò¤Ñ.ÕØ�MŠM¤Ñ.ŽMð 'rE   )r,  úT.Sequence[Node]ró  )
rz   r8   r8  rv   r6  zlist[float]r9  rŠ   r‚   rÅ   rò  )	r?   r@   rA   rB   rQ   rç  r;  rì  r  r  s   @r4   r$  r$  ü  s2   ø„ Ù:õõ	
ðDØ!ðDØ&*óD÷ /ñ /rE   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)r[   r   F)rÏ   rQ   r  ÚhpackÚ
is_phantom)rP   r,  r[   r   Údo_kernrÖ   s        €r4   rQ   zHlist.__init__/  s5   ø€ ô 	‰Ñ˜Ô"ÙØ�I‰IŒKØ�
‰
�Q˜!ˆ
ÔØˆ�rE   c                óB   — t        t        d„ | j                  «      «      S )Nc                ó"   — | j                  «       S rN   )rñ  )Únodes    r4   ú<lambda>z$Hlist.is_char_node.<locals>.<lambda>:  s   €  D×$5Ñ$5Ó$7€ rE   )ÚallrS   r'  rÀ   s    r4   rñ  zHlist.is_char_node8  s   € ä”3Ñ7¸¿¹ÓGÓHÐHrE   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)rP   Únew_childrenÚelem0Úelem1Úkerning_distancer  s         r4   r  z
Hlist.kern<  s�   € ð ˆÜ%×1Ñ1°$·-±-ÀÇÁÈqÈrÐARÓSò 	*‰LˆE�5Ø×Ñ Ô&Ø$×0Ñ0°Ó7ÐØ 2Ó%ÜÐ,Ó-�Ø×#Ñ# DÕ)ð	*ð %ˆ�rE   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'  rc  r  r9   rn   r:   r;   r�   rT   ÚisinfÚgetattrÚGlueÚ	glue_specÚstretch_orderÚstretchÚshrink_orderrì  rM  r)  r*  r7  r;  )rP   r[   r   r\   r]   rz   Útotal_stretchÚtotal_shrinkÚprJ  rZ  s              r4   rB  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 ,°
Õ;rE   )r“   rT  T)r,  r>  r[   r8   r   ú"T.Literal['additional', 'exactly']rD  rƒ   rö  rò  ©r“   rT  )r[   r8   r   ra  r‚   rÅ   )	r?   r@   rA   rB   rQ   rñ  r  rB  r  r  s   @r4   r@  r@  ,  sL   ø„ Ù%à>AØ9EØ!%ð Ø6ð àõ óIó%ð"  #Ø6Bð?<Ø3ð?<ØGK÷?<rE   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“   rT  c                óJ   •— t         ‰| �  |«       | j                  ||¬«       y )N)r\   r   )rÏ   rQ   Úvpack)rP   r,  r\   r   rÖ   s       €r4   rQ   zVlist.__init__’  s    ø€ ä‰Ñ˜Ô"Ø�
‰
�Q˜!ˆ
ÕrE   c                 ó   — y©NFrD   rÀ   s    r4   rñ  zVlist.is_char_node—  s   € àrE   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“   rS  r&  z1Internal mathtext error: Char node found in VlistrT  r   Nr   rU  r¬  rV  )r'  rc  r�   r:   r;   rT   rW  r9   rX  rn   rY  rZ  r[  r\  r]  rì  rM  r  ÚRuntimeErrorr)  r*  r7  r;  )rP   r\   r   Úlr[   r]   rz   r^  r_  r`  rJ  rZ  s               r4   rf  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 ,°
Õ;rE   rb  )r,  r>  r\   r8   r   ra  rö  )r\   r8   r   ra  rk  r8   r‚   rÅ   )
r?   r@   rA   rB   rQ   rñ  rT   Úinfrf  r  r  s   @r4   rd  rd  �  sN   ø„ Ù#à>AØ9EðØ6õó
ð  #Ø6BØŸ™ðG<Ø3ðG<àðG<à$(÷G<rE   rd  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 rN   )rÏ   rQ   r  )rP   r9   r:   r;   r  rÖ   s        €r4   rQ   zRule.__init__ð  s   ø€ Ü‰Ñ˜ ¨Ô.Ø—}‘}ˆ�rE   c                óH   — | j                   j                  ||||z
  ||«       y rN   )r  r¯   r®   s         r4   rï  zRule.renderô  s    € à�‰×'Ñ'¨°°1°q±5¸!¸QÕ?rE   )r9   r8   r:   r8   r;   r8   r  r  rÆ   )r?   r@   rA   rB   rQ   rï  r  r  s   @r4   rn  rn  å  s@   ø„ ñõ%ð@Øð@Ø!ð@Ø&+ð@Ø05ð@Ø:>÷@rE   rn  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Ï   rQ   rT   rl  )rP   r  Ú	thicknessr:   r;   rÖ   s        €r4   rQ   zHrule.__init__ü  s<   ø€ ØÐØ×=Ñ=Ó?ˆIØ" S™Ð(ˆ�Ü‰ÑœŸ™ ¨°Õ6rE   rN   )r  r  rv  úfloat | Noner  r  s   @r4   rr  rr  ù  s   ø„ Ù8÷7ò 7rE   rr  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 rN   rt  )rP   r  rv  rÖ   s      €r4   rQ   zVrule.__init__  s,   ø€ Ø×9Ñ9Ó;ˆ	Ü‰Ñ˜¤B§F¡F¬B¯F©F°EÕ:rE   )r  r  r  r  s   @r4   ry  ry    s   ø„ Ù6÷;ñ ;rE   ry  c                  ó@   — e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	Ú	_GlueSpecr8   r9   r\  rv   r[  rì  r]  NrŒ   rD   rE   r4   r|  r|    s   … ØƒLØƒNØÓØƒMØÔrE   r|  r“   rÎ  rh   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 )rY  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Ï   rQ   rc  rŠ   r|  Ú_namedr1   rZ  )rP   Ú	glue_typerZ  rÖ   s      €r4   rQ   zGlue.__init__'  s[   ø€ ô 	‰ÑÔÜ�i¤Ô%Ü!×(Ñ(¨Ñ3ˆIð
 #ˆ�ô	 ˜	¤9Ô-Ø!ˆIð #ˆ�ô ÐMÓNÐNrE   c                ó²   •— t         ‰| �  «        | j                  t        k  r5| j                  }|j                  |j                  t        z  ¬«      | _        y y )N©r9   )rÏ   rì  ri  rú  rZ  Ú_replacer9   rû  )rP   r  rÖ   s     €r4   rì  zGlue.shrink4  sB   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø—‘ˆAØŸZ™Z¨a¯g©g¼Ñ.E˜ZÓFˆD�Nð 'rE   )rˆ  z`_GlueSpec | T.Literal['fil', 'fill', 'filll', 'neg_fil', 'neg_fill', 'neg_filll', 'empty', 'ss']rò  )r?   r@   rA   rB   rQ   rì  r  r  s   @r4   rY  rY    s$   ø„ ñð#ðAõ#÷Gñ GrE   rY  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©rD  ©rÏ   rQ   rY  r+  s     €r4   rQ   zHCentered.__init__A  s*   ø€ Ü‰Ñœ$˜t›*Ð< xÐ<´°d³Ð<ÀeÐÕLrE   ©r,  z
list[Node]r  r  s   @r4   r�  r�  ;  s   ø„ ñ÷
Mñ MrE   r�  c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )Ú	VCenteredzk
    A convenience class to create a `Vlist` whose contents are
    centered within its enclosing box.
    c                óR   •— t         ‰| �  t        d«      g|¢t        d«      ‘«       y )Nr„  r�  r+  s     €r4   rQ   zVCentered.__init__K  s%   ø€ Ü‰Ñœ$˜t›*Ð< xÐ<´°d³Ð<Õ=rE   r‘  r  r  s   @r4   r“  r“  E  s   ø„ ñ÷
>ñ >rE   r“  c                  ó@   ‡ — e Zd ZdZdZdZdˆ fd„Zdd„Zdˆ fd„Zˆ xZ	S )	rM  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 rN   )rÏ   rQ   r9   r  s     €r4   rQ   zKern.__init__]  s   ø€ Ü‰ÑÔØˆ�
rE   c                ó    — d| j                   z  S )Nzk%.02frŠ  rÀ   s    r4   rç  zKern.__repr__a  s   € Ø˜$Ÿ*™*Ñ$Ð$rE   c                ó|   •— t         ‰| �  «        | j                  t        k  r| xj                  t
        z  c_        y y rN   )rÏ   rì  ri  rú  r9   rû  rü  s    €r4   rì  zKern.shrinkd  s,   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�JŠJœ-Ñ'ŽJð 'rE   r	  ró  rò  )
r?   r@   rA   rB   r:   r;   rQ   rç  rì  r  r  s   @r4   rM  rM  O  s(   ø„ ñð €FØ€Eõó%÷(ñ (rE   rM  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“   r[  r   )r  r½   rV   r·   rW   rœ   Úcopyr  r:   r;   r*  rÏ   rQ   r&  )rP   r  r:   r;   r  Úfactorr¯  r  Útarget_totalr¼   r¤   r}  ÚshiftrÖ   s                €r4   rQ   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ä‰Ñ˜$˜Ô Ø!ˆÕrE   rN   )
r  rŠ   r:   r8   r;   r8   r  r  r�  rw  r  r  s   @r4   rš  rš  j  s   ø„ ñð )-ð"Ø%÷"ñ "rE   rš  c                  ó*   ‡ — e Zd ZdZef	 dˆ fd„Zˆ xZS )ÚAutoWidthChara  
    A character as close to the given width as possible.

    When using a font with multiple width versions of some characters (such as
    the BaKoMa fonts), the correct glyph will be selected, otherwise this will
    always just return a scaled version of the glyph.
    c                ód  •— |j                   j                  |j                  |«      }|j                  «       }|D ]&  \  }}||_         |||«      }|j                  |k\  sŒ& n |j                  z  }	|xj
                  |	z  c_         ||«      }t        ‰
| �  |g«       |j                  | _        y rN   )r  r½   rV   rœ  r9   rW   rÏ   rQ   )rP   r  r9   r  Ú
char_classr¯  r¼   r¤   r}  r�  rÖ   s             €r4   rQ   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ˆ�
rE   )r  rŠ   r9   r8   r  r  r£  z
type[Char])r?   r@   rA   rB   r  rQ   r  r  s   @r4   r¡  r¡  �  s   ø„ ñð +/ð Ø'÷ ñ  rE   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 rN   )Úanyrï  )rG  ÚargsÚphantoms     €r4   rï  zship.<locals>.render¾  s   ø€ Ü�7Œ|ØˆD�K‰K˜Òð rE   c                ó"   — | dk  rdS | dkD  rdS | S )Ng    eÍÍÁg    eÍÍArD   )Úvalues    r4   Úclampzship.<locals>.clampÂ  s   € Ø˜t’|ˆtÐH°¸²¨ÐHÀ5ÐHrE   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ª   rC  r'  rc  r  r9   rM  r$  r*  r&  r@  rd  r�   r:   r;   rT   rW  rY  rZ  r[  r\  Úroundr(  r]  rì  Úpop)rO   Úcur_gÚcur_gluer*  r)  Ú	base_lineÚ	left_edger`  ÚedgeÚrule_heightÚ
rule_depthÚ
rule_widthrZ  r«  Úcur_hÚcur_vÚ	hlist_outÚoff_hÚoff_vr«   r¨  rï  Ú	vlist_outs                €€€€€€€€€€r4   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 	�‰�rE   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)  r:   r'  rc  rM  r9   r$  r*  r;   r&  r@  rd  r�   rT   rW  rY  rZ  r[  r\  r®  r(  r]  rì  r  rj  )rO   r°  r±  r*  r)  r³  Útop_edger`  Úsave_vrµ  r¶  r·  rZ  r«  r¸  r¹  rº  r»  r¼  r«   rï  r½  s                €€€€€€€€€r4   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rE   )rª  r8   r‚   r8   )rO   r@  r‚   rÅ   )rO   rd  r‚   rÅ   )r:   rL   rc  r@  )rO   ÚxyrH   rI   r«  r¸  r¹  rº  r»  r¼  r«   r¨  rï  r½  s       @@@@@@@@@@r4   rt   rt   ¬  s|   ÿù€ ð �F€BˆØ€EØ€EØ€EØ�—‘‰O€EÜ�C‹[€FØ€GôóI÷Aö A÷F9Iõ 9Iôv �cœ5Ô!Ð!Ð!Ùˆc„NØ€MrE   c                óB   ‡ — dˆ fd„}t        «       j                  |«      S )z$Helper class to raise parser errors.c                ó   •— t        | |‰«      ‚rN   ©r   )rJ  ÚlocÚtoksÚmsgs      €r4   Úraise_errorzError.<locals>.raise_errorN  s   ø€ Ü! ! S¨#Ó.Ð.rE   ©rJ  rŠ   rÅ  rv   rÆ  r   r‚   úT.Any)r   Úset_parse_action)rÇ  rÈ  s   ` r4   ÚErrorrÌ  L  s   ø€ õ/ô ‹7×#Ñ# KÓ0Ð0rE   c                  óD   ‡ — e Zd ZdZdddddœZd	ˆ fd„Z	 d
	 	 	 dd„Zˆ xZS )Ú_BracedTextaÅ  
    Match a brace-delimited literal string, allowing nested braces.

    This is similar to ``QuotedString("{", "\\", end_quote_char="}")``, except
    that brace depth is tracked, so that the string does not end at the first
    ``}``.  As in TeX, nested unescaped braces only group, and are not
    rendered; a literal brace is written as ``\{`` or ``\}``.  A backslash
    escapes the following character, which therefore does not affect depth.
    ú	r.  úú)ÚtÚnÚfÚrc                ó>   •— t         ‰| �  «        d| _        d| _        y )NTF)rÏ   rQ   ÚmayReturnEmptyÚmayIndexErrorrü  s    €r4   rQ   z_BracedText.__init__a  s   ø€ Ü‰ÑÔØ"ˆÔØ"ˆÕrE   c                óØ  — |t        |«      k\  s||   dk7  rt        ||d| «      ‚g }d}|t        |«      k  r§||   }|dk(  rJ|dz   t        |«      k  r9||dz      }|j                  | j                  j	                  ||«      «       |dz  }Œb|dz  }|dk(  r|dz  }Œr|dk(  r|dz  }|dk(  r|dj                  |«      fS Œ•|j                  |«       |t        |«      k  rŒ§t        ||d	| «      ‚)
Nr3  zExpected '{'r   r,   r   rh   r4  r/  úExpected '}')r*  r   rª   Ú_escapesrØ   r3  )rP   ÚinstringrÅ  Ú
do_actionsÚcharsr;   r}  Úescapeds           r4   Ú	parseImplz_BracedText.parseImplf  s  € à”#�h“-Ò 8¨C¡=°CÒ#7Ü  ¨3°ÀÓEÐEØˆØˆØ”C˜“MÒ!Ø˜C‘=ˆDØ�tŠ|  a¡¬#¨h«-Ò 7Ø" 3¨¡7Ñ+�Ø—‘˜TŸ]™]×.Ñ.¨w¸Ó@ÔAØ�q‘�ØØ�1‰HˆCØ�sŠ{Ø˜‘
�ØØ˜’Ø˜‘
�Ø˜A’:Ø §¡¨£Ð.Ð.ØØ�L‰L˜Ôð! ”C˜“MÓ!ô" ˜X s¨N¸DÓAÐArE   rò  )T)rÜ  rŠ   rÅ  rv   rÝ  rƒ   r‚   ztuple[int, str])r?   r@   rA   rB   rÛ  rQ   rà  r  r  s   @r4   rÎ  rÎ  T  s:   ø„ ñð  ¨4°dÑ;€Hõ#ð &*ðBØ"ðBØ.=÷BrE   rÎ  c                  ód   — e Zd ZdZ	 	 dd„Zd	d„Zed
d„«       Zej                  dd„«       Zdd„Z	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 rN   )r  Ú_fontr£   rW   rœ   )rP   r  rV   r£   rW   rœ   s         r4   rQ   zParserState.__init__‹  s%   € àˆŒØˆŒ
Ø$ˆŒØ ˆŒØˆ�rE   c                ó,   — t        j                   | «      S rN   )rœ  rÀ   s    r4   rœ  zParserState.copy“  s   € Ü�y‰y˜‹ÐrE   c                ó   — | j                   S rN   )rã  rÀ   s    r4   rV   zParserState.font–  s   € à�z‰zÐrE   c                ó(   — |dv r|| _         || _        y )N)r  r  r  r  r�  )r£   rã  )rP   rj  s     r4   rV   zParserState.fontš  s   € àÐ7Ñ7Ø"ˆDŒOØˆ�
rE   c                óx   — | j                   j                  | j                  | j                  | j                  «      S )z.Return the underline thickness for this state.)r  r¹   rV   rW   rœ   rÀ   s    r4   ru  z+ParserState.get_current_underline_thickness   s,   € à�|‰|×3Ñ3Ø�I‰I�t—}‘} d§h¡hó0ð 	0rE   N)
r  rŽ   rV   rŠ   r£   rŠ   rW   r8   rœ   r8   ©r‚   r  ró  )rj  rŠ   r‚   rÅ   )r‚   r8   )
r?   r@   rA   rB   rQ   rœ  ÚpropertyrV   Úsetterru  rD   rE   r4   r  r  €  sJ   „ ñðØóóð òó ðð 
‡[�[òó ðô
0rE   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rN   )rc  r   ÚexprsÚresultsName)ÚeltÚexprÚnamess     €r4   rñ  zcmd.<locals>.names²  sL   øè ø€ Ü�cœ?Ô+ØŸ	™	ò '�Ù  ›;×&Ñ&ñ'à�_Š_Ø—/‘/Ó!ð ð 'ús   ƒ+A®A¯$Ar3  r   r   r/  c              3  ó&   K  — | ]	  }d |z  –— Œ y­w)z{%s}NrD   )rì   rj  s     r4   rî   zcmd.<locals>.<genexpr>º  s   è ø€ ÒB¨d˜F T�MÑBùrï   z	Expected )rï  r   r‚   zT.Generator[str, None, None])rF  r3  rÌ  )rð  r§  Úcsnamer3   rñ  s       @r4   Úcmdrô  ¦  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Ð5rE   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   rh   rä   N)r?   r@   rA   ÚDISPLAYSTYLEÚ	TEXTSTYLEÚSCRIPTSTYLEÚSCRIPTSCRIPTSTYLErD   rE   r4   Ú
_MathStylerø  È  s   „ ØˆØˆ	ØˆØÑrE   rý  uÂ  + * - âˆ’
      \pm             \sqcap                   \rhd
      \mp             \sqcup                   \unlhd
      \times          \vee                     \unrhd
      \div            \wedge                   \oplus
      \ast            \setminus                \ominus
      \star           \wr                      \otimes
      \circ           \diamond                 \oslash
      \bullet         \bigtriangleup           \odot
      \cdot           \bigtriangledown         \bigcirc
      \cap            \triangleleft            \dagger
      \cup            \triangleright           \ddagger
      \uplus          \lhd                     \amalg
      \dotplus        \dotminus                \Cap
      \Cup            \barwedge                \boxdot
      \boxminus       \boxplus                 \boxtimes
      \curlyvee       \curlywedge              \divideontimes
      \doublebarwedge \leftthreetimes          \rightthreetimes
      \slash          \veebar                  \barvee
      \cupdot         \intercal                \amalg
      \circledcirc    \circleddash             \circledast
      \boxbar         \obar                    \merge
      \minuscolon     \dotsminusdots
      aF  
      = < > :
      \leq          \geq          \equiv       \models
      \prec         \succ         \sim         \perp
      \preceq       \succeq       \simeq       \mid
      \ll           \gg           \asymp       \parallel
      \subset       \supset       \approx      \bowtie
      \subseteq     \supseteq     \cong        \Join
      \sqsubset     \sqsupset     \neq         \smile
      \sqsubseteq   \sqsupseteq   \doteq       \frown
      \in           \ni           \propto      \vdash
      \dashv        \dots         \doteqdot    \leqq
      \geqq         \lneqq        \gneqq       \lessgtr
      \leqslant     \geqslant     \eqgtr       \eqless
      \eqslantless  \eqslantgtr   \lesseqgtr   \backsim
      \backsimeq    \lesssim      \gtrsim      \precsim
      \precnsim     \gnsim        \lnsim       \succsim
      \succnsim     \nsim         \lesseqqgtr  \gtreqqless
      \gtreqless    \subseteqq    \supseteqq   \subsetneqq
      \supsetneqq   \lessapprox   \approxeq    \gtrapprox
      \precapprox   \succapprox   \precnapprox \succnapprox
      \npreccurlyeq \nsucccurlyeq \nsqsubseteq \nsqsupseteq
      \sqsubsetneq  \sqsupsetneq  \nlesssim    \ngtrsim
      \nlessgtr     \ngtrless     \lnapprox    \gnapprox
      \napprox      \approxeq     \approxident \lll
      \ggg          \nparallel    \Vdash       \Vvdash
      \nVdash       \nvdash       \vDash       \nvDash
      \nVDash       \oequal       \simneqq     \triangle
      \triangleq         \triangleeq         \triangleleft
      \triangleright     \ntriangleleft      \ntriangleright
      \trianglelefteq    \ntrianglelefteq    \trianglerighteq
      \ntrianglerighteq  \blacktriangleleft  \blacktriangleright
      \equalparallel     \measuredrightangle \varlrtriangle
      \Doteq        \Bumpeq       \Subset      \Supset
      \backepsilon  \because      \therefore   \bot
      \top          \bumpeq       \circeq      \coloneq
      \curlyeqprec  \curlyeqsucc  \eqcirc      \eqcolon
      \eqsim        \fallingdotseq \gtrdot     \gtrless
      \ltimes       \rtimes       \lessdot     \ne
      \ncong        \nequiv       \ngeq        \ngtr
      \nleq         \nless        \nmid        \notin
      \nprec        \nsubset      \nsubseteq   \nsucc
      \nsupset      \nsupseteq    \pitchfork   \preccurlyeq
      \risingdotseq \subsetneq    \succcurlyeq \supsetneq
      \varpropto    \vartriangleleft \scurel
      \vartriangleright \rightangle \equal     \backcong
      \eqdef        \wedgeq       \questeq     \between
      \veeeq        \disin        \varisins    \isins
      \isindot      \varisinobar  \isinobar    \isinvb
      \isinE        \nisd         \varnis      \nis
      \varniobar    \niobar       \bagmember   \ratio
      \Equiv        \stareq       \measeq      \arceq
      \rightassert  \rightModels  \smallin     \smallowns
      \notsmallowns \nsimeqa­  
     \leftarrow \longleftarrow \uparrow \Leftarrow \Longleftarrow
     \Uparrow \rightarrow \longrightarrow \downarrow \Rightarrow
     \Longrightarrow \Downarrow \leftrightarrow \updownarrow
     \longleftrightarrow \updownarrow \Leftrightarrow
     \Longleftrightarrow \Updownarrow \mapsto \longmapsto \nearrow
     \hookleftarrow \hookrightarrow \searrow \leftharpoonup
     \rightharpoonup \swarrow \leftharpoondown \rightharpoondown
     \nwarrow \rightleftharpoons \leadsto \dashrightarrow
     \dashleftarrow \leftleftarrows \leftrightarrows \Lleftarrow
     \Rrightarrow \twoheadleftarrow \leftarrowtail \looparrowleft
     \leftrightharpoons \curvearrowleft \circlearrowleft \Lsh
     \upuparrows \upharpoonleft \downharpoonleft \multimap
     \leftrightsquigarrow \rightrightarrows \rightleftarrows
     \rightrightarrows \rightleftarrows \twoheadrightarrow
     \rightarrowtail \looparrowright \rightleftharpoons
     \curvearrowright \circlearrowright \Rsh \downdownarrows
     \upharpoonright \downharpoonright \rightsquigarrow \nleftarrow
     \nrightarrow \nLeftarrow \nRightarrow \nleftrightarrow
     \nLeftrightarrow \to \Swarrow \Searrow \Nwarrow \Nearrow
     \leftsquigarrow \overleftarrow \overleftrightarrow \cwopencirclearrow
     \downzigzagarrow \cupleftarrow \rightzigzagarrow \twoheaddownarrow
     \updownarrowbar \twoheaduparrow \rightarrowbar \updownarrows
     \barleftarrow \mapsfrom \mapsdown \mapsup \Ldsh \Rdsh
     z, ; . ! \ldotp \cdotpz}
       \sum \prod \coprod \bigcap \bigcup \bigsqcup \bigvee
       \bigwedge \bigodot \bigotimes \bigoplus \biguplus
       zlim liminf limsup sup max minz.\int \oint \iint \oiint \iiint \oiiint \iiiintz:rm cal it tt sf bf bfit default bb frak scr regular normalz¢
      arccos csc ker min arcsin deg lg Pr arctan det lim sec arg dim
      liminf sin cos exp limsup sinh cosh gcd ln sup cot hom log tan
      coth inf max tanhzn
      | \| / \backslash \uparrow \downarrow \updownarrow \Uparrow
      \Downarrow \Updownarrow . \vert \Vertz[
      ( [ \{ < \lfloor \langle \lceil \lbrace \leftbrace \lbrack \leftparen \lgroup
      z]
      ) ] \} > \rfloor \rangle \rceil \rbrace \rightbrace \rbrack \rightparen \rgroup
      u   Î±u   Ï‰r   r¬  c                ó´  ‡ ‡— t        j                  «       ŠdFˆˆ fd„}dGd„}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        «       «      ‰_=        tK        d, t}        ddt        tI        ‰jD                  «      «      tG        t1        d-«      j�                  «       «      z   ¬.«      d/«      «      ‰_A         t-        ‰j<                  «      d0«       tI        t	        d1d2g«      ‰j<                  z
  «      d3«      z    t        d4«      d5«      z    t        d6«      d5«      z  ‰j?                  d0«       t        d4«      d5«      z   z  ‰_B        ‰j                  ‰jL                  z  ‰j*                  z  ‰j„                  z  ‰_C        ‰xjD                  ‰j†                  ‰j:                  z  ‰jb                  z  ‰j&                  z  z  c_"        tK        d7d tG        ‰j†                  «      d«      z   dz   «      ‰_D        tK        d8d 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_        d9‰j7                  d:«      t�        d;«      z  z
  }‰xj:                  d<‰j7                  d=«      t�        d;«      z  z
   tG        ‰j†                  ‰j:                  z  |z  «      d>«      z   d?z   ‰j7                  d@«      t�        d;«      z  z
  z  c_        tI        ‰jD                  «      ‰_G        t‘        dAdBdC¬D«      ‰_I        t        dE«      j#                  «       ‰_J        ‰j”                  tG        ‰j’                  ‰j”                  z   «      z   ta        «       z   ‰_K         |«        ‰j–                  ‰ _L        ‰jŽ                  ‰ _M        dC‰ _N        y c c}w )HNc                 óæ   •— t        ‰«      j                  «       D ]T  \  } }| j                  d«      rŒ| dvr|j                  | «       t	        ‰| «      sŒ:|j                  t        ‰| «      «       ŒV y )NÚ_)ÚtokenÚ	placeableÚ
auto_delim)Úvarsr$  rw  Úset_nameÚhasattrrË  rX  )r%  rí   r`  rP   s     €€r4   Úset_names_and_parse_actionsz4Parser.__init__.<locals>.set_names_and_parse_actionsb  sd   ø€ Ü  ›GŸM™M›Oò 	A‘��SØ—~‘~ cÕ*ð Ð"FÑFØŸ™ SÔ)ä˜t SÕ)Ø×,Ñ,¬W°T¸3Ó-?Õ@ñ	ArE   Ú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  ÚalpharT  Únonalpha)Úisalpharª   r   r0  r3  rS   ÚreÚescape)r  rñ  Úends_with_alphaÚends_with_nonalpharj  s        r4   Úcsnamesz Parser.__init__.<locals>.csnamesq  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ó óð rE   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]+rj  rV   z\mathr3  r4  z\hspacez\phantomrª  z\llapz\rlapÚaccentz\fracrX   Údenz\dfracz\binomz\genfracÚldelimÚrdelimÚrulesizeÚstylez\sqrt{value}r5  r6  Úrootz	\overlineÚbodyz
\underlinez\oversetÚ
annotationz	\undersetz\textz	\substackz\\)ÚopenerÚcloserÚcontentÚpartsÚnucleusr   r;  Úsubsuperz'*Úapostrophesz'+z\operatornamez\boldsymbolú\middleÚmdelimzExpected a delimiterz\leftÚleftr¨  z\rightÚrightú$r,   F)Úunquote_resultsz(?:(?:\\[$])|[^$])*rò  )r  rŠ   rñ  zIterable[str]r‚   r   )OÚtypesÚSimpleNamespacer   Úfloat_literalr   Ú_space_widthsr  rý  rŠ   rª  r  r0  r3  rS   r  r  r    Úleave_whitespacer2   Úunknown_symbolÚ
_fontnamesrV   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Ì  rr   r   Úmath_stringÚnon_mathÚmainÚ_expressionÚ_math_expressionÚ_needs_space_after_subsuper)rP   r  r  Úer&  r`  s   `    @r4   rQ   zParser.__init___  s*	  ù€ Ü×!Ñ!Ó#ˆö
	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œ{›}Ó-ˆŒä˜ð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_cacherS  Úparse_stringr   r1   ÚexplainrU  r   Úreset_cacherÝ   rÞ   r@  )rP   rJ  Úfonts_objectrW   rœ   Úresultr3   s          r4   Ú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¬  )rX  rÀ   s    r4   Ú	get_statezParser.get_state6	  s   € à× Ñ  Ñ$Ð$rE   c                ó8   — | j                   j                  «        y)zPop a `State` off of the stack.N)rX  r¯  rÀ   s    r4   Ú	pop_statezParser.pop_state:	  s   € à×Ñ×ÑÕrE   c                ór   — | j                   j                  | j                  «       j                  «       «       y)z=Push a new `State` onto the stack, copying the current state.N)rX  rª   ra  rœ  rÀ   s    r4   Ú
push_statezParser.push_state>	  s&   € à×Ñ× Ñ  §¡Ó!1×!6Ñ!6Ó!8Õ9rE   c                ó6   — t        |j                  «       «      gS rN   )r@  Úas_list©rP   rÆ  s     r4   rR  zParser.mainB	  s   € Ü�d—l‘l“nÓ%Ð&Ð&rE   c                óH   — | j                   j                  |d   dd d¬«      S )Nr   r   r¬  T)Ú	parse_all)rT  rZ  rh  s     r4   rP  zParser.math_stringE	  s(   € Ø×$Ñ$×1Ñ1°$°q±'¸!¸B°-È4Ð1ÓPÐPrE   c                óZ   — t        |j                  «       «      }| j                  «        |gS rN   )r@  rg  rc  )rP   rÆ  Úhlists      r4   rr   zParser.mathH	  s#   € Ü�d—l‘l“nÓ%ˆØ�‰ÔØˆwˆrE   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  ra  r@  re  rû   rü   rV   )rP   rÆ  rJ  r  Úsymbolsrl  s         r4   rQ  zParser.non_mathM	  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   )re  ra  rV   r@  r  rc  )rP   rÆ  r  r  rl  s        r4   rJ  zParser.textX	  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  )	ra  rV   rW   rœ   rY  rØ   r  rµ   rM  )rP   Ú
percentager  r%  r9   s        r4   Ú_make_spacezParser._make_space`	  sƒ   € ð —‘Ó ˆØ�z‰z˜5Ÿ>™>¨5¯9©9Ð5ˆØ×$Ñ$×(Ñ(¨Ó-ˆØˆ=Ø—M‘M×*Ñ*¨8°U·^±^ÀUÇYÁYÓOˆEØ(-ˆD× Ñ  Ñ%Ü�E˜JÑ&Ó'Ð'rE   g…¶œKqUÅ?gý0Bx´qÌ?g‚çÞÃ%ÇÑ?g¾¤1ZGUÕ?r½  rh   g…¶œKqUÅ¿)ú\,z
\thinspacez\/z\>z\:z\;z\ r<  z\enspacez\quadz\qquadz\!c                óN   — | j                   |d      }| j                  |«      }|gS ©Nr  )r.  rs  )rP   rÆ  rX   rO   s       r4   r  zParser.space~	  s-   € Ø× Ñ   g¡Ñ/ˆØ×Ñ˜sÓ#ˆØˆuˆrE   c                ó,   — | j                  |d   «      gS rv  )rs  rh  s     r4   r9  zParser.customspaceƒ	  s   € Ø× Ñ   g¡Ó/Ð0Ð0rE   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  NrD   ©rì   r  s     r4   rî   z Parser.symbol.<locals>.<genexpr>™	  ó   è ø€ ÒC A¸!¸s»(œaÑCùó   ‚
�r¬  r/  r   r3  rÀ  Tr�  c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wr{  rD   r|  s     r4   rî   z Parser.symbol.<locals>.<genexpr>§	  r}  r~  c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wr{  rD   r|  s     r4   rî   z Parser.symbol.<locals>.<genexpr>¨	  s   è ø€ ÒA A¸¸S»œaÑAùr~  r   ú,r4  ú.)r  ra  r1   r   Ú_spaced_symbolsrê  rU  Ú_binary_operatorsr*  rF  Ú_left_delimsÚ_relation_symbolsr@  rs  Ú_punctuation_symbolsr+  )	rP   rJ  rÅ  rÆ  r  r}  r3   Ú	prev_charÚ	next_chars	            r4   r2   zParser.symbol†	  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: rj  rÄ  ©rP   rJ  rÅ  rÆ  s       r4   r0  zParser.unknown_symbol¶	  s   € Ü! ! SÐ,<¸TÀ&¹\¸NÐ*KÓLÐLrE   c                ó    — d|d   _         |d   S )NTrª  )rC  rh  s     r4   r¨  zParser.phantom¹	  s   € Ø#'ˆˆW‰Ô Ø�G‰}ÐrE   c                óR   — t        t        |d   j                   «      |d   g«      gS ©Nrª  ©r@  rM  r9   rh  s     r4   r:  zParser.llap½	  s+   € Ü”t˜T '™]×0Ñ0Ð0Ó1°4¸±=ÐAÓBÐCÐCrE   c                óR   — t        |d   t        |d   j                   «      g«      gS rŽ  r�  rh  s     r4   r;  zParser.rlapÀ	  s+   € Ü�t˜G‘}¤d¨D°©M×,?Ñ,?Ð+?Ó&@ÐAÓBÐCÐCrE   Úhatz\circumflexaccentÚbrevez\combiningbreveÚbarz\combiningoverlineÚgravez\combininggraveaccentÚacutez\combiningacuteaccentÚtildez\combiningtildeÚdotz\combiningdotaboveÚddotz\combiningdiaeresisÚdddotz\combiningthreedotsaboveÚddddotz\combiningfourdotsaboveÚvecz\combiningrightarrowaboveú"ú`ú'r<  r‚  r;  z\rightarrowz
\leftarrowz\circ)ÚoverrightarrowÚoverleftarrowÚmathringzwidehat widetilde widebarc                ó  — | 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       @)ra  ru  r=  r¡  r9   r  r�  r<  rì  r  rB  rd  r  r@  )rP   rÆ  r  rv  r  r¤   Ú
accent_boxÚcentereds           r4   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“ðó ð 	rE   c                ó@   — | j                  |||«      }|d   |_        |S )Nrj  )rN  Úfunction_name)rP   rJ  rÅ  rÆ  rl  s        r4   r?  zParser.functionó	  s'   € Ø×!Ñ! ! S¨$Ó/ˆØ" 6™lˆÔØˆrE   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  rj  r   zoperatorname{}c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wr{  rD   r|  s     r4   rî   z&Parser.operatorname.<locals>.<genexpr>
  s   è ø€ ÒC ¸!¸s»(œ!ÑCùr~  r/  r;  r   rt  >   r   r;  )re  ra  rV   rc  r  r  rª   rŠ   r*  r   rê  r4  rs  r.  rc  rU  r@  )rP   rJ  rÅ  rÆ  r  Ú
hlist_listrj  r  Únext_char_locr‰  Ú
delimiterss              r4   rN  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Ó Ð rE   c                ó�   — | j                  «        |j                  d«      r$|j                  d«      | j                  «       _        g S ©NrV   )re  rØ   ra  rV   rh  s     r4   r2  zParser.start_group
  s5   € Ø�‰Ôà�8‰8�FÔØ$(§H¡H¨VÓ$4ˆD�N‰NÓÔ!Øˆ	rE   c                ó>   — t        |j                  dg «      «      }|gS ©Nr  ©r@  rØ   )rP   rÆ  Úgrps      r4   r  zParser.group
  s   € Ü�D—H‘H˜W bÓ)Ó*ˆØˆuˆrE   c                ó8   — t        |j                  dg «      «      S r°  r±  rh  s     r4   r7  zParser.required_group!
  s   € Ü�T—X‘X˜g rÓ*Ó+Ð+rE   c                ó&   — | j                  «        g S rN   )rc  rÀ   s    r4   r3  zParser.end_group&
  s   € Ø�‰ÔØˆ	rE   c                ó.   — t        |t        |«      d«      ‚)NrÚ  )r   r*  r‹  s       r4   r@  zParser.unclosed_group*
  s   € Ü! !¤S¨£V¨^Ó<Ð<rE   c                ó6   — |d   | j                  «       _        g S r®  )ra  rV   rh  s     r4   rV   zParser.font-
  s   € Ø $ V¡ˆ�‰ÓÔØˆ	rE   c                ó¼   — t        |t        «      r|j                  | j                  v S t        |t        «      r$t        |d«      r|j                  | j                  v S y)Nr§  F)rc  r  r  Ú_overunder_symbolsr@  r  r§  Ú_overunder_functions©rP   r"  s     r4   Úis_overunderzParser.is_overunder1
  sN   € Ü�gœtÔ$Ø—9‘9 × 7Ñ 7Ð7Ð7Ü˜¤Ô'¬G°G¸_Ô,MØ×(Ñ(¨D×,EÑ,EÐEÐEØrE   c                óT   — t        |t        «      r|j                  | j                  v S yrh  )rc  r  r  Ú_dropsub_symbolsrº  s     r4   Ú
is_dropsubzParser.is_dropsub8
  s$   € Ü�gœtÔ$Ø—9‘9 × 5Ñ 5Ð5Ð5ØrE   c                óD   — t        |t        «      r|j                  «       S yrh  )rc  r  r  rº  s     r4   r  zParser.is_slanted=
  s   € Ü�gœtÔ$Ø×%Ñ%Ó'Ð'ØrE   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                  «      }|rˆ|€t        g «      }nt        |t        «      s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                  |t1        d|«      g«       t/        |g«      }|j%                  |d«       |j3                  |«       |�Wt/        |g«      }|j%                  |d«       |j                  t1        d|«      |g«       |j4                  |z   |j6                  z   }t9        |«      }||_        | j<                  r| j?                  | j@                  d   «      gng }d| _        t        |g|¢«      }|gS |}t        |t        «      r€|j                  }t        |«      r[t        |d   tB        «      rt        |d   tD        «      r|d d }|d   }t        |tD        «      r|jF                  jH                  |_        t        |d¬«      }n7t        |tD        «      r|jF                  jH                  |_        t        |g«      }|j
                  jK                  «       }|j4                  }d
}| jM                  |«      r|j6                  }|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                  «      } |j4                  |jZ                  | z  z
  }|j6                  |j\                  | z  z   }|€˜t        tC        |«      t_        j`                  tb        |«      g«      }!|!j+                  «        | jM                  |«      r||j\                  |z  z   }n-t-        ||jd                  |z  |!j4                  |dz  dz  z
  «      }||!_        �nst        tC        |«      |g«      }!|!j+                  «        | jM                  |«      r||j\                  |z  z
  }n*t-        ||jf                  |z  |!j6                  |dz  z   «      }|€	| |!_        nôt        tC        |«      |g«      }"|"j+                  «        | jM                  |«      r||j\                  |z  z   }nt-        ||jh                  |z  «      }d|z  ||!j6                  z
  |"j4                  |z
  z
  z
  }#|#d
kD  r,||#z  }|dz  dz  |z
  |!j6                  z   }#|#dkD  r
||#z  }||#z  }t9        |!tC        ||!j6                  z
  |"j4                  |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£  rt  Fr¬  éþÿÿÿr�  rh   rä   rS  é   )6rØ   r  r*  r   ra  r  r¹   rV   rW   rœ   r·   r@  rc  r©  r'  Úextendr2   r  rB  r»  r9   rì  rn   r�  r  rª   r:   r;   rd  r&  rU  rs  r.  rM  r  r  r†   rÁ   r¾  r¿  r  rÁ  rÃ  rñ  rû  r¸  r¹  rÝ   rÞ   rá  r¼  rº  r¾  r·  )%rP   rJ  rÅ  rÆ  r"  r#  ÚnapostrophesÚsubrÏ   ÚopÚargr  Úrule_thicknessr  r®  ÚvlistrŸ  r9   Úvgaprl  ÚvltÚoptional_spacingr^  Ú	last_charrN  rþ   Ú	lc_heightÚlc_baselineÚ	superkernÚsubkernÚshift_upÚ
shift_downÚshrunk_x_heightrz   r{   ÚclrrÖ   s%                                       €r4   r#  zParser.subsuperB
  sN  ø€ Ø—(‘(˜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›	‘Ü ¤uÔ-ô ˜u˜g›�Ü˜<Ó(ò 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ˆrE   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ä   rh   r   é   r‚  )!ra  ru  r  r²   rV   rW   rœ   rÁ   r·   r©  rª  rû  rì  r�  rn   r9   rB  rý  rù  rÄ  rÇ  rÅ  rÈ  r;   r:   rd  r  rr  r&  rÆ  r@  r  Ú_auto_sized_delimiter)rP   r  r  Úruler  rX   r  r  rv  rú   rþ   r  r   ÚcnumÚcdenr9   Únum_shift_upÚden_shift_downrÕ  r¿  Únum_clrÚden_clrrÉ  Úmin_clrÚdef_clrr^  s                             r4   Ú_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ØˆrE   c                ó<   — | j                  t        |d   «      «      S )Nr  )rý  rv   rh  s     r4   r  zParser.style_literalA  s   € Ø�‰œs 4¨Ñ#8Ó9Ó:Ð:rE   c           	     óÈ   — | j                  |j                  dd«      |j                  dd«      |d   |j                  d| j                  j                  «      |d   |d   «      S )Nr  r/  r  r  r  rX   r  )râ  rØ   rý  rú  rh  s     r4   rD  zParser.genfracD  sZ   € Ø�}‰}Ø�H‰H�X˜rÓ" D§H¡H¨X°rÓ$:Ø�Ñ˜dŸh™h w°·±×0IÑ0IÓJØ�‰K˜˜e™ó&ð 	&rE   c           	     óš   — | j                  dd| j                  «       j                  «       | j                  j                  |d   |d   «      S ©Nr/  rX   r  )râ  ra  ru  rý  rú  rh  s     r4   rA  zParser.fracJ  sE   € Ø�}‰}Ø��D—N‘NÓ$×DÑDÓFØ�O‰O×%Ñ% t¨E¡{°D¸±KóAð 	ArE   c           	     óš   — | j                  dd| j                  «       j                  «       | j                  j                  |d   |d   «      S ræ  )râ  ra  ru  rý  rù  rh  s     r4   rB  zParser.dfracO  sE   € Ø�}‰}Ø��D—N‘NÓ$×DÑDÓFØ�O‰O×(Ñ(¨$¨u©+°t¸E±{óDð 	DrE   c           	     ób   — | j                  ddd| j                  j                  |d   |d   «      S )Nr0  r2  r   rX   r  )râ  rý  rú  rh  s     r4   rC  zParser.binomT  s5   € Ø�}‰}Ø��aØ�O‰O×%Ñ% t¨E¡{°D¸±KóAð 	ArE   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   )ra  ru  rì  r�  rn   r9   rB  rd  r  r;   r:   r&  )rP   rJ  rÅ  rÆ  r  r  rv  Úcentered_annotationÚcentered_bodyr9   rÊ  rÉ  s               r4   Ú_gensetzParser._gensetY  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ð ˆrE   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Â  r9  rh   r~  é°  r£  r½  r“   rÐ  g      à¿)rØ   ra  ru  r:   r&  r;   rš  r@  r  rd  rr  rY  rf  rW   rœ   r�   r9   rì  rM  )rP   rÆ  r  r  r  rv  r:   r;   ÚcheckÚpadded_bodyÚ	rightsideÚ
root_vlistrl  s                r4   rE  zParser.sqrt{  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ˆrE   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£  )ra  ru  r:   r&  r;   rd  rr  rY  r@  rf  rW   rœ   )	rP   rÆ  r  r  rv  r:   r;   rò  rl  s	            r4   rF  zParser.overline¤  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ˆrE   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ä   )ra  ru  rd  r@  rM  rr  r:   r;   )rP   rÆ  r  r  rv  rÉ  r¿  s          r4   rG  zParser.underline·  s–   € Ø�F‰|ˆØ—‘Ó ˆØ×9Ñ9Ó;ˆ	äÜ�4�&‹MÜ��Y‘ÓÜ�%˜Ó#ð
ó ˆð
 —‘˜uŸ{™{Ñ*¨YÑ6ˆØ—{‘{ˆŒØ˜eŸl™lÑ*ˆŒÜ�u�g“ÐÐrE   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   r‚  )r�  r   rÎ  )ra  r*  rn   rc  rŠ   r:   r;   Ú	enumeraterÝ   rÞ   rš  Úremover¢  r�   r  rª   rÃ  r@  )rP   ÚfrontÚmiddleÚbackr  rz   r:   r;   r�  ÚidxÚelr  Úmiddle_partr!  rl  s                  r4   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Ø  rg  rh  s     r4   r  zParser.auto_delimì  s3   € Ø×)Ñ)Ø�‰L˜$˜u™+×-Ñ-Ó/°°g±ó@ð 	@rE   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�  )re  ra  rc  r@  r'  r  rV   r  rª   r  Ú_latin_alphabetsÚ_small_greekrc  )rP   rÆ  r  rl  rj  r  Úks          r4   rO  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‹|ÐrE   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 rN   rŠ  r  s    r4   rH  z!Parser.substack.<locals>.<lambda>  s
   €  a§g¡g€ rE   r£  rh   r¬  )ra  ru  r@  rn   rS   r�  rB  rª   Úzipr  r*  rd  )rP   rÆ  r!  r  rv  r  rl  Ú	max_widthrÉ  rÅ  ÚcpÚpairrí   ÚstackrË  r^  s                   r4   rL  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ò  )
rJ  rŠ   r]  rŽ   rW   r8   rœ   r8   r‚   r@  rè  )rÆ  r   r‚   zlist[Hlist])rÆ  r   r‚   r   )rÆ  r   r‚   rÊ  )rr  r8   r‚   rM  )rJ  rŠ   rÅ  rv   rÆ  zParseResults | dict[str, str]r‚   rÊ  rÉ  )r‚   rÊ  )r"  rá  r‚   rƒ   )r  rŠ   r  rŠ   rÙ  rw  r  rý  rX   r@  r  r@  r‚   rÊ  )rù  rŠ   rú  zlist[Box | Char | str]rû  rŠ   r‚   rÊ  )Yr?   r@   rA   rB   ÚenumÚEnumrý  rE  rF  r„  r†  Ú_arrow_symbolsrƒ  r‡  r¸  r¹  r½  r1  r>  Ú_ambi_delimsr…  Ú_right_delimsr4  r©  r-   ru  rj  rt  rÜ   r  ÚstringÚascii_lettersr  rQ   r_  ra  rc  re  rR  rP  rr   rQ  Ústaticmethodr   Úconvert_to_floatr-  rJ  rs  r.  r  r9  r2   r0  r¨  r:  r;  r<  r=  r  r?  rN  r2  r  r7  r8  r3  r@  rV   r»  r¾  r  r#  râ  r  rD  rA  rB  rC  rí  rH  rI  rE  rF  rG  rØ  r  rO  rL  r  )rì   r®  ru  rt  rÖ   s   0000@r4   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óó=óóóó
õ
wðrDØðDØ"'ðDØ,1óDóL;ó&óAó
Dó
Aó
ð@ !Ð €Gˆhó'óRó& ð$Ø&<ð$à$'ð$à,1ó$óL@ó÷4ùõaGs   ÅAK6rö  )r2   rŠ   r‚   r(   ))r   r   )rO   r�   rÁ  ztuple[float, float]r‚   rL   )rÇ  rŠ   r‚   r   )rð  rŠ   r§  r   r‚   r   ){rB   Ú
__future__r   Úabcrœ  r  rÐ   rK  Úloggingrr   rÙ   r  r+  ru  r  r1  ÚtypingrÝ   r   ÚnumpyrT   Únumpy.typingr   Ú	pyparsingr   r   r   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Ú	getLoggerrr  r5   r7   r@   rG   rL   r…   r‰   ÚABCrŽ   ÚABCMetarË   r  rL  r„  r†  r•  r!  ra  rû  rú  r¿   rD  r²  r±  r’  r—  rá  r�   r  r  r  r  r$  r@  rd  rn  rr  ry  r|  r‡  rY  r�  r“  rM  rš  r¡  rt   rÌ  rÎ  r  rô  rö  rD   rE   r4   ú<module>r%     s°  ðñõ #ã 
Û Û Û Û Û Û Û 	Û 	Û Û Û Û Û Ý ã Ý  ÷7÷ 7÷ 7÷ 7÷ 7õ 7ó Ý ÷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ô)B�%ô )B÷X#0ñ #0óL6÷2_ò _rE   