Ë
    ¨ehC¥ ã                  ó@  — 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mZ ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&Z'ddl(m)Z) ddl*m+Z+m,Z,m-Z-m.Z. dd	l/m0Z0m1Z1m2Z2 dd
l3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z: ddlm;Z<  e:e<«      jz                  dk  rddlm>Z? nddlm?Z? ej€                  rddlAmBZB ddl3mCZC  ejˆ                  «         ejŠ                  d«      ZFd„d„ZG G d„ de«      ZHdeH_I         G d„ de«      ZJdeJ_I         G d„ d«      ZK G d„ de«      ZL G d„ de«      ZM G d„ de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/„ d0eW«      ZXd1ZYd2ZZ G d3„ d4«      Z[ G d5„ d6e[«      Z\ G d7„ d8e[«      Z] G d9„ d:e[«      Z^ G d;„ d<e[«      Z_ G d=„ d>e[«      Z`i d?e`“d@e`“dAe_“dBe\“dCe\“dDe\“dEe\“dFe\“dGe\“dHe\“dIe]“dJe]“dKe]“dLe]“dMe]“dNe]“dOe]“e`e`dPœ¥Zad…dR„Zb G dS„ dT«      Zc G dU„ dVec«      Zd G dW„ dXed«      Ze G dY„ dZed«      Zf G d[„ d\ec«      Zg G d]„ d^eg«      Zh G d_„ d`ed«      Zi G da„ dbei«      Zj G dc„ ddei«      Zk G de„ dfed«      Zl G dg„ dhel«      Zm G di„ djel«      Zn G dk„ dle«      Zo eodmdnddmd«       eodmdndodmd«       eodmdnddmd«       eodmdmddnd«       eodmdmddndo«       eodmdmddnd«       eodmdmddmd«       eodmdnddpd«      dqœeo_p         G dr„ dsec«      Zq G dt„ duej«      Zr G dv„ dwek«      Zs G dx„ dyec«      Zt G dz„ d{ej«      Zu G d|„ d}ej«      Zvd†d‡d~„Zwdˆd„Zx G d€„ dQ«      Zyd‰d�„Zz G d‚„ dƒ«      Z{y)Šz.
Implementation details for :mod:`.mathtext`.
é    )ÚannotationsN)Ú
NamedTuple)ÚEmptyÚForwardÚLiteralÚNotAnyÚoneOfÚ	OneOrMoreÚOptionalÚParseBaseExceptionÚParseExceptionÚParseExpressionÚParseFatalExceptionÚParserElementÚParseResultsÚQuotedStringÚRegexÚ	StringEndÚ
ZeroOrMoreÚpyparsing_commonÚGroupé   )Úcbook)Úlatex_to_bakomaÚstix_glyph_fixesÚstix_virtual_fontsÚtex2uni)ÚFontPropertiesÚfindfontÚget_font)ÚFT2FontÚFT2ImageÚKerningÚ	LoadFlags)Úparse)Ú__version__é   )Ú
nestedExpr)Únested_expr)ÚIterable)ÚGlyphz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     úR/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/matplotlib/_mathtext.pyÚget_unicode_indexr6   5   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Údepthz.list[tuple[FT2Font, float, int, float, float]]Úglyphsz'list[tuple[float, float, float, float]]ÚrectsN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    r5   r8   r8   K   s$   … ñð ƒLØƒMØƒLØ:Ó:Ø2Ô2rF   r8   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 : FT2Image
        A raster image.
    r9   ÚoxÚoyr:   r;   r<   r"   ÚimageNr?   rE   rF   r5   rH   rH   a   s'   … ñð 	ƒIØƒIØƒLØƒMØƒLØ„OrF   rH   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>   )ÚselfrP   s     r5   Ú__init__zOutput.__init__€   s   € ØˆŒØ;=ˆŒØ>@ˆ�
rF   c                ó  — t        t        j                  | j                  j                  | j                  j
                  | j                  j                  g«      \  }}}| j                  D ���cg c];  \  }}}|j                  |j                  |j                  |||z
  |j                  z   f‘Œ= }}}}| j                  D ��	�
�cg c]  \  }}	}
}|||z
  |
|z
  ||	z
  f‘Œ }}
}	}}t        |||z   |||«      S c c}}}w c c}}
}	}w rO   )ÚmapÚnpÚceilrP   r:   r;   r<   r=   ÚfontÚfontsizeÚnumÚoffsetr>   r8   )rQ   ÚwÚhÚdrI   rJ   ÚinfoÚgsÚx1Úy1Úx2Úy2Úrss                r5   Ú	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˜$Ÿ-™-¨¯©°2°q¸2±vÀÇÁÑ7KÒLð /ˆò /ð %)§J¡J÷0ñ 0Ù �"�b˜"˜bð �1�r‘6˜2 ™7 B¨¡GÒ,ð 0ˆó 0ä˜1˜a !™e Q¨¨BÓ/Ð/ùô	/ùõ0s   Á.A C5ÃC<
c               ód  — 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]	  \  }}}}|‘Œ c}}}}¢d‘«      dz   }t        g | j                  D ���cg c]  \  }}}||j                  j                  z
  ‘Œ! c}}}¢| j                  D ����cg c]	  \  }}}}|‘Œ c}}}}¢d‘«      dz   }||	z
  }||
z
  | j                  j                  z
  }||
z
  | j                  j                  z
  }t        t        t        j                  |«      «      t        t        j                  |t        |d«      z   «      «      «      }t!        | j                  |	 |
 f«      }|j                  D ]Y  \  }}}|j"                  j%                  |t        |«      t        ||j                  j&                  z
  «      |j(                  |¬«       Œ[ |j                  D ]‹  \  }}}}t        t        ||z
  «      dz
  d«      }|dk(  r||z   dz  }t        ||dz   dz  z
  «      }nt        |«      }|j+                  t        |«      |t        t        j                  |«      «      ||z   «       Œ� t-        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ÚyminrP   r<   r;   r"   ÚintrU   rV   ÚshiprW   Údraw_glyph_to_bitmapÚicebergÚglyphÚdraw_rect_filledrH   )rQ   rg   rI   rJ   r^   r`   ra   rb   rc   rk   ro   rn   rl   r[   r\   r]   rK   Úshiftedr;   ÚcenterÚys                        r5   Ú	to_rasterzOutput.to_rasterŽ   sk  € ô ð ?ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð ?Ø/3¯z©z×:Ñ:™^˜R  R¨’bÕ:ð?Ø<=ð?ó @ØBCñDˆäð ?ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð ?Ø/3¯z©z×:Ñ:™^˜R  R¨’bÕ:ð?Ø<=ð?ó @ØBCñDˆäð ?ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð ?Ø/3¯z©z×:Ñ:™^˜R  R¨’bÕ:ð?Ø<=ð?ó @ØBCñDˆäð ?ÀÇÁ×MÐM±°°R¸�b˜4Ÿ<™<×,Ñ,Ó,ÔMð ?Ø/3¯z©z×:Ñ:™^˜R  R¨’bÕ:ð?Ø<=ð?ó @ØBCñDˆà�4‰KˆØ�4‰K˜$Ÿ(™(Ÿ.™.Ñ(ˆØ�4‰K˜$Ÿ(™(Ÿ/™/Ñ)ˆÜœœRŸW™W Q›Z›¬#¬b¯g©g°a¼#¸aÀ»)±mÓ.DÓ*EÓFˆô �t—x‘x 4 %¨$¨ Ó0ˆà#ŸN™Nò 	)‰LˆB��DØ�I‰I×*Ñ*Ø”s˜2“w¤ B¨¯©×)=Ñ)=Ñ$=Ó >ÀÇ
Á
Ø'ð +õ )ð	)ð &Ÿm™mò 	M‰NˆB��B˜Üœ˜R "™W›¨Ñ)¨1Ó-ˆFØ˜Š{Ø˜r™' Q™�Ü˜ &¨1¡*°Ñ!1Ñ1Ó2‘ä˜“G�Ø×"Ñ"¤3 r£7¨A¬s´2·7±7¸2³;Ó/?ÀÀVÁÕLð	Mô ˜1˜a  A¨¡E¨1¨eÓ4Ð4ùô? NùÝ:ùÜMùÝ:ùÜMùÝ:ùÜMùÝ:s/   —$M6ÁM=Â$NÂ?NÃ3$NÄ-NÅ!$N#ÆN*N)rP   ÚBox)Úreturnr8   )rg   Úboolr{   rH   )r@   rA   rB   rC   rR   re   ry   rE   rF   r5   rM   rM   x   s   „ ñóAó
0ô"5rF   rM   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).
    r9   Úadvancer;   r:   rk   rn   ro   rl   rs   r|   ÚslantedNr?   rE   rF   r5   r~   r~   ³   s6   … ñð( ƒNØƒMØƒLØ
ƒKØ
ƒKØ
ƒKØ
ƒKØƒNØ„MrF   r~   c                  óT   — 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<   y)ÚFontInfor!   rW   r9   rX   ÚstrÚpostscript_namer~   rj   rp   rY   r+   rt   rZ   N©r@   rA   rB   rD   rE   rF   r5   r‚   r‚   Ó   s'   … Ø
ƒMØƒOØÓØÓØ	ƒHØƒLØ„MrF   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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)rQ   r‰   rŠ   s      r5   rR   zFonts.__init__æ   s   € ð "3ˆÔØ 0ˆÕrF   c
                 ó   — y)zŸ
        Get the kerning distance for font between *sym1* and *sym2*.

        See `~.Fonts.get_metrics` for a detailed description of the parameters.
        ç        rE   )
rQ   Úfont1Ú
fontclass1Úsym1Ú	fontsize1Úfont2Ú
fontclass2Úsym2Ú	fontsize2Údpis
             r5   Úget_kernzFonts.get_kernô   s   € ð rF   c                ó   — t         ‚rO   ©ÚNotImplementedError)rQ   rW   s     r5   Ú	_get_fontzFonts._get_fontþ   s   € Ü!Ð!rF   c                ó   — t         ‚rO   r˜   )rQ   rW   Ú
font_classÚsymrX   r•   s         r5   Ú	_get_infozFonts._get_info  ó   € ä!Ð!rF   c                óD   — | j                  |||||«      }|j                  S )a#  
        Parameters
        ----------
        font : str
            One of the TeX font names: "tt", "it", "rm", "cal", "sf", "bf",
            "default", "regular", "bb", "frak", "scr".  "default" and "regular"
            are synonyms and use the non-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ž   rj   )rQ   rW   rœ   r�   rX   r•   r^   s          r5   Úget_metricszFonts.get_metrics  s$   € ð2 �~‰~˜d J°°X¸sÓCˆØ�|‰|ÐrF   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)
rQ   ÚoutputrI   rJ   rW   rœ   r�   rX   r•   r^   s
             r5   Úrender_glyphzFonts.render_glyph!  s2   € ð �~‰~˜d J°°X¸sÓCˆØ�‰×Ñ˜b " d˜^Õ,rF   c                óB   — |j                   j                  ||||f«       y)zL
        Draw a filled rectangle from (*x1*, *y1*) to (*x2*, *y2*).
        N)r>   r£   ©rQ   r¤   r`   ra   rb   rc   s         r5   Úrender_rect_filledzFonts.render_rect_filled*  s   € ð
 	�‰×Ñ˜R  R¨Ð,Õ-rF   c                ó   — t        «       ‚)zF
        Get the xheight for the given *font* and *fontsize*.
        r˜   ©rQ   rW   rX   r•   s       r5   Úget_xheightzFonts.get_xheight1  s   € ô "Ó#Ð#rF   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       r5   Úget_underline_thicknesszFonts.get_underline_thickness7  s   € ô
 "Ó#Ð#rF   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.
        rE   ©rQ   Úfontnamer�   s      r5   Ú!get_sized_alternatives_for_symbolz'Fonts.get_sized_alternatives_for_symbol>  s   € ð ˜3�Ð Ð rF   N©r‰   r   rŠ   r$   ©r�   rƒ   rŽ   rƒ   r�   rƒ   r�   r9   r‘   rƒ   r’   rƒ   r“   rƒ   r”   r9   r•   r9   r{   r9   )rW   rƒ   r{   r!   )rW   rƒ   rœ   rƒ   r�   rƒ   rX   r9   r•   r9   r{   r‚   )rW   rƒ   rœ   rƒ   r�   rƒ   rX   r9   r•   r9   r{   r~   )r¤   rM   rI   r9   rJ   r9   rW   rƒ   rœ   rƒ   r�   rƒ   rX   r9   r•   r9   r{   ÚNone©r¤   rM   r`   r9   ra   r9   rb   r9   rc   r9   r{   r´   ©rW   rƒ   rX   r9   r•   r9   r{   r9   ©r°   rƒ   r�   rƒ   r{   zlist[tuple[str, str]])r@   rA   rB   rC   rR   r–   rš   rž   r¡   r¥   r¨   r«   r­   r±   rE   rF   r5   r‡   r‡   Ý   sé   „ ñó1ðØðØ),ðØ47ðØDIðàðà %óó"ð"Øð"Ø!)ó"ðØðØ#.óð8-Ø!$ð-Ø+.ð-Ø:?ð-ØFKð-ØPTó-ð.Ø$ð.Ø*/ð.Ø5:ð.Ø@Eð.ØJNó.ó$ó$ð!Ø/2ð!Ø7Lô!rF   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ˆ 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)
ÚsuperrR   Ú	functoolsÚcacherž   Ú_fontsÚfontmapr   r‰   r    )rQ   r‰   rŠ   ÚfilenameÚdefault_fontÚ	__class__s        €r5   rR   zTruetypeFonts.__init__O  sl   ø€ Ü‰ÑÐ*Ð,<Ô=ä"Ÿ™¨¯©Ó8ˆŒØˆŒØ-/ˆŒä˜D×2Ñ2Ó3ˆÜ Ó)ˆØ!-ˆ�‰�IÑØ!-ˆ�‰�IÒrF   c                óÒ  — || j                   v r| j                   |   }nt        j                  t        |«      }| j                  j                  |«      }|€yt        j                  j                  |«      rZt        |«      }|| j                  |<   || j                  |j                  <   || j                  |j                  j                  «       <   t        j                  t        |«      S rO   )rÁ   ÚTÚcastrƒ   rÀ   ÚgetÚosÚpathÚexistsr    r„   Úlowerr!   )rQ   rW   ÚbasenameÚcached_fonts       r5   rš   zTruetypeFonts._get_font[  s¯   € Ø�4—<‘<ÑØ—|‘| DÑ)‰Hô —v‘vœc 4Ó(ˆHØ—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˜{Ó+Ð+rF   c                ó^   — |j                   dk(  r|j                  dz  dz  |dz  |z  dz  z   S y)NÚCmex10é@   rh   r'   éH   rŒ   )r„   r;   )rQ   rW   rt   rX   r•   s        r5   Ú_get_offsetzTruetypeFonts._get_offsetj  s:   € à×Ñ 8Ò+Ø—L‘L 2Ñ%¨Ñ)¨h°q©j¸3Ñ.>¸rÑ.AÑBÐBØrF   c                ó   — t         ‚rO   r˜   )rQ   r°   rœ   r�   s       r5   Ú
_get_glyphzTruetypeFonts._get_glyphp  rŸ   rF   c                óÀ  — | 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Ñ   NrE   )Ú.0Úvals     r5   ú	<genexpr>z*TruetypeFonts._get_info.<locals>.<genexpr>{  s   è ø€ Ò!A¨s #¨¥(Ñ!Aùó   ‚é   rÑ   )	r   r;   r:   rk   rn   ro   rl   rs   r€   )rW   rX   r„   rj   rY   rt   rZ   )rÕ   Úset_sizeÚ	load_charrŠ   ÚbboxrÓ   r~   ÚlinearHoriAdvancer;   r:   ÚhoriBearingYr‚   r„   )rQ   r°   rœ   r�   rX   r•   rW   rY   r€   rt   rk   ro   rn   rl   rZ   rj   s                   r5   rž   zTruetypeFonts._get_infou  sò   € à!Ÿ_™_¨X°zÀ3ÓGÑˆˆc�7Ø�‰�h Ô$Ø—‘˜s¨$×*?Ñ*?�Ó@ˆá!A°e·j±jÔ!AÑˆˆd�D˜$Ø×!Ñ! $¨¨x¸Ó=ˆÜØ×+Ñ+¨eÑ3Ø—<‘< "Ñ$Ø—+‘+ Ñ"ØØØ˜‘Ø˜‘à×&Ñ&¨Ñ+¨fÑ4Øô
ˆô ØØØ ×0Ñ0ØØØØô
ð 	
rF   c                óþ   — | j                  |«      }|j                  ||«       |j                  d«      }|€2| j                  |t        j
                  d   d||«      }|j                  S |d   dz  |dz  z  |dz  z  }|S )NÚpcltúmathtext.defaultÚxÚxHeightg      P@g      (@g      Y@)rš   rÞ   Úget_sfnt_tabler¡   ÚmplÚrcParamsrs   )rQ   r°   rX   r•   rW   rä   rj   rç   s           r5   r«   zTruetypeFonts.get_xheight”  sˆ   € Ø�~‰~˜hÓ'ˆØ�‰�h Ô$Ø×"Ñ" 6Ó*ˆØˆ<à×&Ñ&Øœ#Ÿ,™,Ð'9Ñ:¸CÀÈ3óPˆGà—?‘?Ð"Ø˜	‘? TÑ)¨h¸©oÑ>À#ÈÁ+ÑNˆØˆrF   c                ó   — d|z  |z  dz  S )Ng      °?g      R@rE   rª   s       r5   r­   z%TruetypeFonts.get_underline_thickness   s   € ð  Ñ(¨3Ñ.°$Ñ6Ð6rF   c
                ó"  •— ||k(  rs||k(  rn| j                  |||||	«      }
| j                  |||||	«      }|
j                  }|j                  |
j                  |j                  t        j
                  «      dz  S t        ‰| �  |||||||||	«	      S )NrÑ   )rž   rW   Úget_kerningrY   r#   ÚDEFAULTr½   r–   )rQ   r�   rŽ   r�   r�   r‘   r’   r“   r”   r•   Úinfo1Úinfo2rW   rÄ   s                €r5   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§I¡I¨u¯y©y¼'¿/¹/ÓJÈRÑOÐOÜ‰wÑ  z°4¸Ø % z°4¸ÀCóIð 	IrF   r²   )rW   z	str | intr{   r!   )
rW   r!   rt   r+   rX   r9   r•   r9   r{   r9   ©r°   rƒ   rœ   rƒ   r�   rƒ   r{   ztuple[FT2Font, int, bool])r°   rƒ   rœ   rƒ   r�   rƒ   rX   r9   r•   r9   r{   r‚   )r°   rƒ   rX   r9   r•   r9   r{   r9   r¶   r³   )r@   rA   rB   rC   rR   rš   rÓ   rÕ   rž   r«   r­   r–   Ú__classcell__©rÄ   s   @r5   r¹   r¹   I  s�   ø„ ñõ

.ó,ðØðØ#(óð"Øð"Ø 9ó"ð

Øð
Ø!)ó
ó>
ó7ð	IØð	IØ),ð	IØ47ð	IØDIð	Iàð	Ià %÷	Iñ 	IrF   r¹   )Ú	metaclassc                  óh  ‡ — e Zd ZdZdddddddd	œZd6ˆ fd
„Z edj                  «       «      Z	 	 	 	 d7d„Z	i dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d ¢“d!g d"¢“d#g d$¢“d%g d&¢“d'g d(¢“d)g d*¢“d+g d,¢“d-g d.¢“d/d0gd1d2gd3œ¥Z
d4D ]  \  ZZe
e   e
e<   Œ 	 	 	 	 d8d5„Zˆ xZS )9Ú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.
    Úcmsy10Úcmr10Úcmtt10Úcmmi10Úcmb10Úcmss10Úcmex10)ÚcalÚrmÚttÚitÚbfÚsfÚexc                óÞ   •— t        ||«      | _        t        ‰| �  ||«       | j                  j                  «       D ].  \  }}t        |«      }|| j                  |<   || j                  |<   Œ0 y rO   )Ú	StixFontsÚ_stix_fallbackr½   rR   Ú_fontmapÚitemsr   rÁ   )rQ   r‰   rŠ   ÚkeyrÚ   ÚfullpathrÄ   s         €r5   rR   zBakomaFonts.__init__Ã  sj   ø€ Ü'Ð(9Ð;KÓLˆÔä‰ÑÐ*Ð,<Ô=ØŸ™×+Ñ+Ó-ò 	)‰HˆC�Ü “}ˆHØ (ˆD�L‰L˜ÑØ (ˆD�L‰L˜Òñ	)rF   ú
\int \ointc                ój  — d }|| j                   v r;|t        v r3t        |   \  }}|dk(  xs || j                  v }| j                  |«      }n1t	        |«      dk(  r#|dk(  }| j                  |«      }|�t        |«      }|�|j                  «      dk7  r||fS | j                  j                  |||«      S )Nrú   r   r  r   )	rÁ   r   Ú_slanted_symbolsrš   Úlenr.   Úget_char_indexr  rÕ   )rQ   r°   rœ   r�   rW   rÍ   rY   r€   s           r5   rÕ   zBakomaFonts._get_glyphÎ  sÂ   € àˆØ�t—|‘|Ñ#¨¬Ñ(>Ü+¨CÑ0‰MˆH�cØ 8Ñ+ÒL°°t×7LÑ7LÐ0LˆGØ—>‘> (Ó+‰DÜ�‹X˜Š]Ø 4Ñ'ˆGØ—>‘> (Ó+ˆDØÐÜ˜#“h�ØÐ × 3Ñ 3°CÓ 8¸AÒ =Ø˜˜gÐ%Ð%à×&Ñ&×1Ñ1°(¸JÈÓLÐLrF   ú())rÿ   r  )r  õ   Â¡)r  õ   Â³)r  õ   Âµ)r  õ   Ãƒú)))rÿ   r  )r  õ   Â¢)r  õ   Â´)r  õ   Â¶)r  ú!ú{))rþ   r  )r  õ   Â©)r  Ún)r  õ   Â½)r  r  ú}))rþ   r  )r  õ   Âª)r  Úo)r  õ   Â¾)r  r  ú[))rÿ   r#  )r  õ   Â£)r  r\   )r  ú"ú]))rÿ   r&  )r  õ   Â¤)r  Úi)r  ú#z\lfloor))r  õ   Â¥)r  Új)r  õ   Â¹)r  ú$z\rfloor))r  õ   Â¦)r  Úk)r  õ   Âº)r  ú%z\lceil))r  õ   Â§)r  Úl)r  õ   Â»)r  ú&z\rceil))r  õ   Â¨)r  Úm)r  õ   Â¼)r  ú'z\langle))r  õ   Â­©r  ÚD)r  õ   Â¿)r  Ú*z\rangle))r  õ   Â®©r  ÚE)r  õ   Ã€)r  ú+ú	\__sqrt__))r  Úp)r  Úq)r  Úr)r  Úsz
\backslash))r  õ   Â²)r  ú/)r  õ   Ã‚)r  ú-rJ  ))rÿ   rJ  )r  õ   Â±)r  ú.)r  õ   Ã‹)r  ú,z\widehat))rÿ   ú^)r  Úb)r  Úc)r  r]   z
\widetilde))rÿ   ú~)r  Úe)r  Úf)r  Úg)rþ   r\   r;  )rþ   r(  r@  )ú<ú>)
)z
\leftparenr  )z\rightparentr  )z
\leftbracer  )z\rightbracer  )z\leftbracketr#  )z\rightbracketr&  )ú\{r  )ú\}r  )ú\[r#  )ú\]r&  c                ó@   — | j                   j                  |||fg«      S rO   )Ú_size_alternativesrÈ   r¯   s      r5   r±   z-BakomaFonts.get_sized_alternatives_for_symbol  s"   € à×&Ñ&×*Ñ*¨3°(¸C°Ð0AÓBÐBrF   r²   rñ   r·   )r@   rA   rB   rC   r  rR   ÚsetÚsplitr  rÕ   r_  ÚaliasÚtargetr±   rò   ró   s   @r5   rö   rö   ²  s»  ø„ ñð ØØØØØØñ€Hõ)ñ ˜=×.Ñ.Ó0Ó1ÐðMØðMØ 9óMð('
Øò 8ð'
ð 	ò 8ð'
ð
 	ò 8ð'
ð 	ò 8ð'
ð 	ò (ð'
ð 	ò (ð'
ð 	ò 8ð'
ð" 	ò 8ð#'
ð& 	ò 8ð''
ð* 	ò 8ð+'
ð. 	ò 8ð/'
ð2 	ò 8ð3'
ð6 	ò 8ð7'
ð: 	ò 8ð;'
ð> 	ò 8ð?'
ðB 	ò (ðC'
ðF 	ò (ðG'
ðJ % kÐ2Ø$ kÐ2òM'
ÐðR	(ò 
?‰ˆˆvð %7°vÑ$>Ð˜5Ò!ð
?ðCØ/2ðCØ7L÷CrF   rö   c                  óŠ   ‡ — e Zd ZdZdddœZ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"  c                ó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)r   r   rh   r'   é   é   )ré   rê   r  ÚStixSansFontsrö   rÈ   Ú_fallback_fontr½   rR   ra  r   rÁ   r   Ú
isinstancer	  )rQ   r‰   rŠ   Úfallback_rcÚfont_clsÚtexfontÚproprW   ÚstixsizedaltfontsÚsizeÚnamer  rÄ   s               €r5   rR   zUnicodeFonts.__init__0  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Ò"ñ.ð 6rF   r  c                ó
   — ||fS rO   rE   )rQ   r°   rœ   Úuniindexs       r5   Ú_map_virtual_fontzUnicodeFonts._map_virtual_fontU  s   € à˜Ð!Ð!rF   c                ój  — 	 t        |«      }d}| j                  |||«      \  }}|}|râ|dk(  rQ|dk  rLt        |«      }t        j                  |«      d   dk7  s$t        j                  |«      j                  d	«      r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/        t0        j2                  j5                  «       «      v rd}t        j7                  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ø   zfonts/ttf/cmsy10.ttf)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.é¤   )r6   r2   r.   Ú_logÚwarningr�  ÚchrÚunicodedataÚcategoryr~  Ú
startswithr  rš   Ú_cmr10_substitutionsÚfamily_namer    r   Ú_get_data_pathr  rv  rw  r  rÕ   Úliströ   r  Úvaluesr^   )rQ   r°   rœ   r�   r€  Úfound_symbolÚnew_fontnameÚcharr€   rW   Ú
glyphindexrW  Úfamilys                r5   rÕ   zUnicodeFonts._get_glyphY  sG  € ð	CÜ(¨Ó-ˆHØˆLð "×3Ñ3Ø�j (ó,Ñˆ�(ð  ˆñ Ø˜4Ò H¨wÒ$6Ü˜8“}�Ü×(Ñ(¨Ó.¨qÑ1°SÒ8Ü&×+Ñ+¨DÓ1×<Ñ<¸_ÔMØ#'�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áØ×"Ò"ØÐ 1Ñ1Ü& t×':Ñ':¼IÔFØ#�Hà×'Ñ'×2Ñ2°8¸ZÈÓM�Ø˜1™×)Ñ)�ØœT¤+×"6Ñ"6×"=Ñ"=Ó"?Ó@Ñ@Ø.�FÜ—	‘	Ð:¸CÀÔHØ�ð Ð 1Ñ1Ü& t¬YÔ7ØŸ?™?¨4°¸SÓAÐAÜ—‘ð Aà)¨3°ô:ð —~‘~ dÓ+�Ø�Ø�à�X˜wÐ&Ð&øôq ò 	CÜ˜3“xˆHØ ˆLÜ�L‰LÐ<¸c×Bð	Cús   ‚H È,H2È1H2c                ó\   — | j                   r| j                   j                  ||«      S ||fgS rO   )rv  r±   r¯   s      r5   r±   z.UnicodeFonts.get_sized_alternatives_for_symbol˜  s6   € à×ÒØ×&Ñ&×HÑHØ˜#óð à˜3�Ð Ð rF   r²   ©r°   rƒ   rœ   rƒ   r€  rp   r{   ztuple[str, int]rñ   r·   )r@   rA   rB   rC   rŒ  rR   r`  ra  r  r�  rÕ   r±   rò   ró   s   @r5   re  re    st   ø„ ñ	ð ØñÐõ
!.ñF ˜=×.Ñ.Ó0Ó1Ðð"Ø$'ð"Ø,;ó"ð='Øð='Ø 9ó='ð~!Ø/2ð!Ø7L÷!rF   re  c                  ó@   ‡ — e Zd ZU i Zded<   dd„Z	 	 	 	 dˆ fd„Zˆ xZS )ÚDejaVuFontsúdict[str | int, 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 )Nrn  ro  rp  rq  rr  )r   rh   r'   rs  rt  )rw  ÚDejaVuSerifFontsr  rv  ru  rö   Úbakomar¹   rR   r  Úupdater	  r   rÁ   ©rQ   r‰   rŠ   r
  r~  r  s         r5   rR   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˜Òñ	*rF   c                óô   •— |dk(  r| j                   j                  |||«      S t        |«      }| j                  d«      }|�'|j	                  |«      }|dk7  rt
        ‰| �  d||«      S t
        ‰| �  |||«      S )Nú\primer  r   )r�  rÕ   r6   rš   r  r½   )rQ   r°   rœ   r�   r€  rW   r”  rÄ   s          €r5   rÕ   zDejaVuFonts._get_glyph¸  s…   ø€ ð �)ÒØ—;‘;×)Ñ)¨(°JÀÓDÐDô )¨Ó-ˆHØ—>‘> $Ó'ˆDØÐØ!×0Ñ0°Ó:�
Ø ’?Ü ™7Ñ-¨d°JÀÓDÐDä‘7Ñ% h°
¸CÓ@Ð@rF   r²   rñ   )r@   rA   rB   r  rD   rR   rÕ   rò   ró   s   @r5   r™  r™     s1   ø… Ø%'€HÐ"Ó'ó*ð*AØðAØ 9÷Añ ArF   r™  c            	      ó&   — e Zd ZdZddddddd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
    ú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   N©r@   rA   rB   rC   r  rE   rF   r5   rœ  rœ  É  s(   „ ñð Ø#Ø(Ø*ØØ Ø$Øñ	�HrF   rœ  c            	      ó&   — e Zd ZdZddddddd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¦  Nr¨  rE   rF   r5   rª  rª  Û  s(   „ ñð Ø"Ø'Ø)ØØ Ø#Øñ	�HrF   rª  c                  óŽ   — e Zd ZU dZddddddddd	d
ddddœZded<   dZdZdd„Z	 	 	 	 dd„Z	e
j                  	 	 	 	 	 	 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.
    rm  zSTIXGeneral:italiczSTIXGeneral:weight=boldzSTIXGeneral:italic:boldÚSTIXNonUnicodezSTIXNonUnicode:italiczSTIXNonUnicode:weight=boldrn  ro  rp  rq  rr  )rÿ   r  r  r§  ÚnonunirmÚnonuniitÚnonunibfr   r   rh   r'   rs  rt  rš  r  NFc                óÈ   — t         j                  | ||«       | j                  j                  «       D ].  \  }}t	        |«      }|| j
                  |<   || j
                  |<   Œ0 y rO   )r¹   rR   r  r	  r   rÁ   rŸ  s         r5   rR   zStixFonts.__init__  s[   € Ü×Ñ˜tÐ%6Ð8HÔIØŸ™×,Ñ,Ó.ò 	*‰IˆC�Ü “~ˆHØ (ˆD�L‰L˜ÑØ!)ˆD�L‰L˜Òñ	*rF   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§  i à  iÿø  Únonuni)r   rÈ   Ú_sansrw  Údictr1   r�  r  ré   rê   r   )rQ   r°   rœ   r€  Úfont_mappingÚdoing_sans_conversionÚmappingÚloÚhiÚmidÚranges              r5   r�  zStixFonts._map_virtual_font  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                ó&  — dddddddœ}|j                  ||«      }	 t        |«      }t        d«      D �cg c]2  }| j	                  |«      j                  |«      d	k7  r|t        |«      f‘Œ4 }}|d
k(  r|d d }|S # t        $ r ||fgcY S w xY wc c}w )Nr  r  r#  r&  u   âŸ¨u   âŸ©)rZ  r[  r\  r]  rX  rY  é   r   rD  éÿÿÿÿ)rÈ   r6   r2   r»  rš   r  rˆ  )rQ   r°   r�   Úfixesr€  r(  Úalternativess          r5   r±   z+StixFonts.get_sized_alternatives_for_symbolH  sÄ   € ð ˜s¨3°sØ6Ø7ñ
ˆð
 �i‰i˜˜SÓ!ˆð	%Ü(¨Ó-ˆHô 5:¸!³Hö L¨qØŸ>™>¨!Ó,×;Ñ;¸HÓEÈÒJð œC ›MÒ*ð Lˆð Lð �,ÒØ'¨¨Ð,ˆLØÐøô ò 	%Ø˜s�OÐ$Ò$ð	%üòLs   �A: µ7BÁ:BÂ
Br²   r—  )r°   rƒ   r�   rƒ   r{   z-list[tuple[str, str]] | list[tuple[int, str]])r@   rA   rB   rC   r  rD   rv  r³  rR   r�  r¾   r¿   r±   rE   rF   r5   r  r  í  s›   … ñ
ð Ø"Ø'Ø)Ø$Ø+Ø0ØØØØØØñ&€HÐ"ó ð €NØ€Eó*ð4"Ø$'ð4"Ø,;ó4"ðl ‡_�_ðàðð ðð Gòó ñrF   r  c                  ó   — e Zd ZdZdZy)ru  zd
    A font handling class for the STIX fonts (that uses sans-serif
    characters by default).
    TN)r@   rA   rB   rC   r³  rE   rF   r5   ru  ru  `  s   „ ñð �ErF   ru  ç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<   y)ÚFontConstantsBasezÔ
    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š™™™™™Ù?ÚsubdroprÂ  Úsup1ç333333Ó?Úsub1ç      à?Úsub2gš™™™™™™?Údeltaçš™™™™™É?Údelta_slantedçš™™™™™¹?Údelta_integralN)r@   rA   rB   rC   rÆ  rD   rÇ  rÈ  rÊ  rÌ  rÍ  rÏ  rÑ  rE   rF   r5   rÄ  rÄ  ‡  so   … ñð '+€LÐ#Ó*ð "%€GÐÓ$ð "€DÐ
Ó!ð "€DÐ
Ó!ð "€DÐ
Ó!ð  %€EÐÓ$ð
 (+€MÐ$Ó*ð ),€NÐ%Ô+rF   rÄ  c                  ó,   — e Zd ZdZdZdZdZdZdZdZ	dZ
y)ÚComputerModernFontConstantsg333333³?rÎ  gÍÌÌÌÌÌÜ?rÉ  N)r@   rA   rB   rÆ  rÇ  rÈ  rÊ  rÌ  rÍ  rÏ  rÑ  rE   rF   r5   rÓ  rÓ  «  s*   „ Ø€LØ€GØ€DØ€DØ€DØ€EØ€MØ�NrF   rÓ  c                  ó$   — e Zd ZdZdZdZdZdZdZy)ÚSTIXFontConstantsrÐ  çš™™™™™é?ç333333ã?rÅ  rÉ  N)	r@   rA   rB   rÆ  rÈ  rÌ  rÍ  rÏ  rÑ  rE   rF   r5   rÕ  rÕ  ¶  s    „ Ø€LØ€DØ€DØ€EØ€MØ�NrF   rÕ  c                  ó   — e Zd ZdZdZdZdZy)ÚSTIXSansFontConstantsrÅ  rÖ  r×  rÉ  N)r@   rA   rB   rÆ  rÈ  rÏ  rÑ  rE   rF   r5   rÙ  rÙ  ¿  s   „ Ø€LØ€DØ€MØ�NrF   rÙ  c                  ó   — e Zd Zy)ÚDejaVuSerifFontConstantsN©r@   rA   rB   rE   rF   r5   rÛ  rÛ  Æ  ó   „ ØrF   rÛ  c                  ó   — e Zd Zy)ÚDejaVuSansFontConstantsNrÜ  rE   rF   r5   rß  rß  Ê  rÝ  rF   rß  r¤  r¥  r£  rû   rý   rú   rø   rü   r÷   rù   rm  r¬  rr  rq  rp  ro  rn  )zBitstream Vera SanszBitstream VeraÚParserStatec                óä   — t         j                  | j                  j                  | j                  «      j
                  t        «      }|t        u r t        | j                  t        «      rt        S |S rO   )Ú_font_constant_mappingrÈ   Úfontsetrš   rW   r�  rÄ  rÕ  rw  ru  rÙ  )ÚstateÚ	constantss     r5   Ú_get_font_constant_setræ  ç  sW   € Ü&×*Ñ*Ø�‰×Ñ §
¡
Ó+×7Ñ7Ô9JóL€Ið 	Ô&Ñ&Ü�u—}‘}¤mÔ4Ü$Ð$ØÐrF   c                  ó8   — e Zd Z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   ©r}  ©rQ   s    r5   rR   zNode.__init__õ  s	   € Øˆ�	rF   c                ó,   — t        | «      j                  S rO   )Útyper@   rì  s    r5   Ú__repr__zNode.__repr__ø  s   € Ü�D‹z×"Ñ"Ð"rF   c                 ó   — y©NrŒ   rE   )rQ   Únexts     r5   rí   zNode.get_kerningû  s   € ØrF   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    r5   ÚshrinkzNode.shrinkþ  s   € ð
 	�	Š	�Q‰Ž	rF   c                 ó   — y)zRender this node.NrE   ©rQ   r¤   ræ   rx   s       r5   ÚrenderzNode.render  s   � rF   N©r{   r´   ©r{   rƒ   ©rò  zNode | Noner{   r9   ©r¤   rM   ræ   r9   rx   r9   r{   r´   )	r@   rA   rB   rC   rR   rï  rí   rô  r÷  rE   rF   r5   rè  rè  ò  s   „ Ù&óó#óóô rF   rè  c                  óL   ‡ — e Zd ZdZdˆ fd„Zdˆ fd„Z	 	 	 	 	 	 	 	 	 	 dd„Zˆ xZS )rz   z A node with a physical location.c                óL   •— t         ‰| �  «        || _        || _        || _        y rO   )r½   rR   r:   r;   r<   )rQ   r:   r;   r<   rÄ   s       €r5   rR   zBox.__init__  s#   ø€ Ü‰ÑÔØˆŒ
ØˆŒØˆ�
rF   c                óà   •— t         ‰| �  «        | j                  t        k  rL| xj                  t
        z  c_        | xj                  t
        z  c_        | xj                  t
        z  c_        y y rO   )r½   rô  r}  ÚNUM_SIZE_LEVELSr:   ÚSHRINK_FACTORr;   r<   ©rQ   rÄ   s    €r5   rô  z
Box.shrink  sH   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�JŠJœ=Ñ(�JØ�KŠKœ=Ñ(�KØ�JŠJœ=Ñ(ŽJð 'rF   c                 ó   — y rO   rE   r§   s         r5   r÷  z
Box.render  s   € àrF   )r:   r9   r;   r9   r<   r9   r{   r´   rø  rµ   )r@   rA   rB   rC   rR   rô  r÷  rò   ró   s   @r5   rz   rz   	  s=   ø„ Ù*õõ)ðØðØ#ðØ).ðØ49ðØ>B÷rF   rz   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½   rR   )rQ   r;   r<   rÄ   s      €r5   rR   zVbox.__init__!  s   ø€ Ü‰Ñ˜˜V UÕ+rF   )r;   r9   r<   r9   ©r@   rA   rB   rC   rR   rò   ró   s   @r5   r  r    s   ø„ Ù.÷,ñ ,rF   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  ©rQ   r:   rÄ   s     €r5   rR   zHbox.__init__(  s   ø€ Ü‰Ñ˜  BÕ'rF   ©r:   r9   r  ró   s   @r5   r	  r	  %  s   ø„ Ù8÷(ñ (rF   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 rO   )	r½   rR   rS  rã  rW   rœ   rX   r•   Ú_update_metrics)rQ   rS  rä  rÄ   s      €r5   rR   zChar.__init__9  s\   ø€ Ü‰ÑÔØˆŒØ—}‘}ˆŒØ—J‘JˆŒ	Ø×*Ñ*ˆŒØŸ™ˆŒØ—9‘9ˆŒð 	×ÑÕrF   c                ó    — d| j                   z  S )Nz`%s`©rS  rì  s    r5   rï  zChar.__repr__E  s   € Ø˜Ÿ™‰ÐrF   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¡   rW   rœ   rS  rX   r•   Ú_metricsr   r:   rs   r;   r<   ©rQ   rj   s     r5   r  zChar._update_metricsH  sƒ   € Ø"&§,¡,×":Ñ":Ø�I‰I�t—‘¨¯©°·±¸t¿x¹xó#Ið 	Iˆ�$”-à�6‰6�SŠ=Ø Ÿ™ˆD�Jà Ÿ™ˆDŒJØ—o‘oˆŒØ—‘¨¯©Ñ7Ð8ˆ�
rF   c                ó.   — | j                   j                  S rO   )r  r€   rì  s    r5   Ú
is_slantedzChar.is_slantedR  s   € Ø�}‰}×$Ñ$Ð$rF   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   r:   rw  r  rã  r–   rW   rœ   rS  rX   r•   )rQ   rò  r   Úkerns       r5   rí   zChar.get_kerningU  s„   € ð —-‘-×'Ñ'¨$¯*©*Ñ4ˆØˆÜ�dœDÔ!Ø—<‘<×(Ñ(Ø—	‘	˜4Ÿ?™?¨D¯F©F°D·M±MØ—	‘	˜4Ÿ?™?¨D¯F©F°D·M±MØ—‘óˆDð ˜‰~ÐrF   c           
     ó¬   — | j                   j                  |||| j                  | j                  | j                  | j
                  | j                  «       y rO   )rã  r¥   rW   rœ   rS  rX   r•   rö  s       r5   r÷  zChar.rendere  s;   € Ø�‰×!Ñ!Ø�A�qØ�I‰I�t—‘¨¯©°·±¸t¿x¹xõ	IrF   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 rO   )	r½   rô  r}  rÿ  rX   r   r:   r;   r<   r  s    €r5   rô  zChar.shrinkj  sV   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�MŠMœ]Ñ*�MØ�JŠJœ]Ñ*�JØ�KŠKœ]Ñ*�KØ�JŠJœ]Ñ*ŽJð	 'rF   )rS  rƒ   rä  rà  rù  rø  )r{   r|   rú  rû  )r@   rA   rB   rC   rR   rï  r  r  rí   r÷  rô  rò   ró   s   @r5   r  r  ,  s1   ø„ ñ
õ
óó9ó%óó I÷
+ñ +rF   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¡   rW   rœ   rS  rX   r•   r  rn   rk   r:   rl   ro   r;   r<   r  s     r5   r  zAccent._update_metricsy  so   € Ø"&§,¡,×":Ñ":Ø�I‰I�t—‘¨¯©°·±¸t¿x¹xó#Ið 	Iˆ�$”-à—\‘\ G§L¡LÑ0ˆŒ
Ø—l‘l W§\¡\Ñ1ˆŒØˆ�
rF   c                óB   •— t         ‰| �  «        | j                  «        y rO   )r½   rô  r  r  s    €r5   rô  zAccent.shrink€  s   ø€ Ü‰‰ÔØ×ÑÕrF   c           
     ó  — | j                   j                  ||| j                  j                  z
  || j                  j                  z   | j
                  | j                  | j                  | j                  | j                  «       y rO   )
rã  r¥   r  rk   ro   rW   rœ   rS  rX   r•   rö  s       r5   r÷  zAccent.render„  sY   € Ø�‰×!Ñ!Ø�A˜Ÿ™×*Ñ*Ñ*¨A°·±×0BÑ0BÑ,BØ�I‰I�t—‘¨¯©°·±¸t¿x¹xõ	IrF   rø  rû  )r@   rA   rB   rC   r  rô  r÷  rò   ró   s   @r5   r  r  s  s   ø„ ñó
õ÷IrF   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½   rR   Úshift_amountÚchildrenÚglue_setÚ	glue_signÚ
glue_order©rQ   ÚelementsrÄ   s     €r5   rR   zList.__init__�  s<   ø€ Ü‰Ñ˜˜R Ô$ØˆÔØ#˜(˜ˆŒàˆŒØˆŒØˆ�rF   c                ó  •— dj                  t        ‰| �	  «       | j                  | j                  | j
                  | j                  dj                  | j                  D �cg c]  }t        |«      ‘Œ c}«      «      S c c}w )Nz/{}<w={:.02f} h={:.02f} d={:.02f} s={:.02f}>[{}]z, )
Úformatr½   rï  r:   r;   r<   r%  Újoinr&  Úrepr)rQ   ræ   rÄ   s     €r5   rï  zList.__repr__–  sa   ø€ Ø@×GÑGÜ‰GÑÓØ�J‰J˜Ÿ™Ø�J‰J˜×)Ñ)Ø�I‰I¨¯©Ö6 1”t˜A•wÒ6Ó7ó	9ð 	9ùò 7s   ÁA<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   NrE   )rÙ   r(  Útotalss     €r5   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&  r†  r‡  rî  r@   )rQ   ræ   Úsignr2  Ú
error_typer!  s      `  r5   Ú	_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ð "ð rF   c                óð   •— | j                   D ]  }|j                  «        Œ t        ‰| �  «        | j                  t        k  r3| xj
                  t        z  c_        | xj                  t        z  c_        y y rO   )r&  rô  r½   r}  rÿ  r%  r   r'  )rQ   ÚchildrÄ   s     €r5   rô  zList.shrink­  sY   ø€ Ø—]‘]ò 	ˆEØ�L‰L�Nð	ä‰‰ÔØ�9‰9”Ò&Ø×Ò¤Ñ.ÕØ�MŠM¤Ñ.ŽMð 'rF   )r+  úT.Sequence[Node]rù  )
ræ   r9   r4  rp   r2  zlist[float]r5  rƒ   r{   r´   rø  )	r@   rA   rB   rC   rR   rï  r6  rô  rò   ró   s   @r5   r#  r#  Š  s2   ø„ Ù:õõ9ðDØ!ðDØ&*óD÷ /ñ /rF   r#  c                  óN   ‡ — e Zd ZdZ	 	 	 d	 	 	 dˆ fd„Zdd„Z	 	 d	 	 	 d	d„Zˆ xZS )
ÚHlistzA horizontal list of boxes.c                ón   •— t         ‰| �  |«       |r| j                  «        | j                  ||¬«       y )N)r[   r7  )r½   rR   r  Úhpack)rQ   r+  r[   r7  Údo_kernrÄ   s        €r5   rR   zHlist.__init__¹  s.   ø€ ô 	‰Ñ˜Ô"ÙØ�I‰IŒKØ�
‰
�Q˜!ˆ
ÕrF   c                óF  — g }t        | j                  «      }|rˆt        |«      D ]r  }| j                  |   }||dz
  k  r| j                  |dz      }nd}|j                  |«       |j	                  |«      }|dk7  sŒWt        |«      }|j                  |«       Œt || _        y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Œ   )r  r&  r»  r£   rí   ÚKern)rQ   Únew_childrenÚnum_childrenr(  Úelemrò  Úkerning_distancer  s           r5   r  z
Hlist.kernÁ  s®   € ð ˆÜ˜4Ÿ=™=Ó)ˆÙÜ˜<Ó(ò .�Ø—}‘} QÑ'�Ø�| aÑ'Ò'ØŸ=™=¨¨Q©Ñ/‘Dà�Dà×#Ñ# DÔ)Ø#'×#3Ñ#3°DÓ#9Ð Ø# rÓ)ÜÐ 0Ó1�DØ ×'Ñ'¨Õ-ð.ð )ˆD�Mð rF   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Œ   rs  r%  Ú
additionalr   Nr   ÚOverfulr¾  ÚUnderful)r&  rw  r  r:   rm   r;   r<   rz   rU   ÚisinfÚgetattrÚGlueÚ	glue_specÚstretch_orderÚstretchÚshrink_orderrô  r@  r(  r)  r3  r6  )rQ   r[   r7  r\   r]   ræ   Útotal_stretchÚtotal_shrinkrE  rH  rL  s              r5   r=  zHlist.hpackÚ  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 ,°
Õ;rF   )rŒ   rF  T)r+  r9  r[   r9   r7  ú"T.Literal['additional', 'exactly']r>  r|   rø  ©rŒ   rF  )r[   r9   r7  rR  r{   r´   )r@   rA   rB   rC   rR   r  r=  rò   ró   s   @r5   r;  r;  ¶  sF   ø„ Ù%à>AØ9EØ!%ðØ6ðàõó)ð2  #Ø6Bð?<Ø3ð?<ØGK÷?<rF   r;  c                  óZ   ‡ — e Zd ZdZ	 	 d	 dˆ fd„Zddej                  f	 	 	 	 	 dd„Zˆ xZS )	ÚVlistzA vertical list of boxes.rŒ   rF  c                óJ   •— t         ‰| �  |«       | j                  ||¬«       y )N)r\   r7  )r½   rR   Úvpack)rQ   r+  r\   r7  rÄ   s       €r5   rR   zVlist.__init__  s    ø€ ä‰Ñ˜Ô"Ø�
‰
�Q˜!ˆ
ÕrF   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 VlistrF  r   Nr   rG  r¾  rH  )r&  rw  rz   r;   r<   rU   rI  r:   rJ  rm   rK  rL  rM  rN  rO  rô  r@  r  ÚRuntimeErrorr(  r)  r3  r6  )rQ   r\   r7  r3  r[   r]   ræ   rP  rQ  rE  rH  rL  s               r5   rW  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 ,°
Õ;rF   rS  )r+  r9  r\   r9   r7  rR  )r\   r9   r7  rR  r3  r9   r{   r´   )	r@   rA   rB   rC   rR   rU   ÚinfrW  rò   ró   s   @r5   rU  rU    sI   ø„ Ù#à>AØ9EðØ6õð
  #Ø6BØŸ™ðG<Ø3ðG<àðG<à$(÷G<rF   rU  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 rO   )r½   rR   rã  )rQ   r:   r;   r<   rä  rÄ   s        €r5   rR   zRule.__init__y  s   ø€ Ü‰Ñ˜ ¨Ô.Ø—}‘}ˆ�rF   c                óN   — | j                   j                  |||||z   ||z   «       y rO   )rã  r¨   )rQ   r¤   ræ   rx   r[   r\   s         r5   r÷  zRule.render}  s$   € à�‰×'Ñ'¨°°1°a¸!±e¸QÀ¹UÕCrF   )r:   r9   r;   r9   r<   r9   rä  rà  )r¤   rM   ræ   r9   rx   r9   r[   r9   r\   r9   r{   r´   )r@   rA   rB   rC   rR   r÷  rò   ró   s   @r5   r\  r\  n  s@   ø„ ñõ%ðDØðDØ!ðDØ&+ðDØ05ðDØ:>÷DrF   r\  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½   rR   rU   rZ  )rQ   rä  Ú	thicknessr;   r<   rÄ   s        €r5   rR   zHrule.__init__…  s<   ø€ ØÐØ×=Ñ=Ó?ˆIØ" S™Ð(ˆ�Ü‰ÑœŸ™ ¨°Õ6rF   rO   )rä  rà  rd  úfloat | Noner  ró   s   @r5   r`  r`  ‚  s   ø„ Ù8÷7ò 7rF   r`  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 rO   rb  )rQ   rä  rd  rÄ   s      €r5   rR   zVrule.__init__�  s,   ø€ Ø×9Ñ9Ó;ˆ	Ü‰Ñ˜¤B§F¡F¬B¯F©F°EÕ:rF   )rä  rà  r  ró   s   @r5   rg  rg  Œ  s   ø„ Ù6÷;ñ ;rF   rg  c                  ó@   — e Zd ZU ded<   ded<   ded<   ded<   ded<   y)	Ú	_GlueSpecr9   r:   rN  rp   rM  rô  rO  Nr…   rE   rF   r5   rj  rj  ”  s   … ØƒLØƒNØÓØƒMØÔrF   rj  rŒ   ç      ð?rh   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 )rK  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½   rR   rw  rƒ   rj  Ú_namedr2   rL  )rQ   Ú	glue_typerL  rÄ   s      €r5   rR   zGlue.__init__°  s[   ø€ ô 	‰ÑÔÜ�i¤Ô%Ü!×(Ñ(¨Ñ3ˆIð
 #ˆ�ô	 ˜	¤9Ô-Ø!ˆIð #ˆ�ô ÐMÓNÐNrF   c                ó²   •— t         ‰| �  «        | j                  t        k  r5| j                  }|j                  |j                  t        z  ¬«      | _        y y )N©r:   )r½   rô  r}  rÿ  rL  Ú_replacer:   r   )rQ   rW  rÄ   s     €r5   rô  zGlue.shrink½  sB   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø—‘ˆAØŸZ™Z¨a¯g©g¼Ñ.E˜ZÓFˆD�Nð 'rF   )rw  z`_GlueSpec | T.Literal['fil', 'fill', 'filll', 'neg_fil', 'neg_fill', 'neg_filll', 'empty', 'ss']rø  )r@   rA   rB   rC   rR   rô  rò   ró   s   @r5   rK  rK  ¨  s$   ø„ ñð#ðAõ#÷Gñ GrF   rK  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 )Nrs  F©r>  ©r½   rR   rK  r*  s     €r5   rR   zHCentered.__init__Ê  s*   ø€ Ü‰Ñœ$˜t›*Ð< xÐ<´°d³Ð<ÀeÐÕLrF   ©r+  z
list[Node]r  ró   s   @r5   r|  r|  Ä  s   ø„ ñ÷
Mñ MrF   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 )Nrs  r  r*  s     €r5   rR   zVCentered.__init__Ô  s%   ø€ Ü‰Ñœ$˜t›*Ð< xÐ<´°d³Ð<Õ=rF   r€  r  ró   s   @r5   r‚  r‚  Î  s   ø„ ñ÷
>ñ >rF   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 )	r@  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 rO   )r½   rR   r:   r  s     €r5   rR   zKern.__init__æ  s   ø€ Ü‰ÑÔØˆ�
rF   c                ó    — d| j                   z  S )Nzk%.02fry  rì  s    r5   rï  zKern.__repr__ê  s   € Ø˜$Ÿ*™*Ñ$Ð$rF   c                ó|   •— t         ‰| �  «        | j                  t        k  r| xj                  t
        z  c_        y y rO   )r½   rô  r}  rÿ  r:   r   r  s    €r5   rô  zKern.shrinkí  s,   ø€ Ü‰‰ÔØ�9‰9”Ò&Ø�JŠJœ-Ñ'ŽJð 'rF   r  rù  rø  )
r@   rA   rB   rC   r;   r<   rR   rï  rô  rò   ró   s   @r5   r@  r@  Ø  s(   ø„ ñð €FØ€Eõó%÷(ñ (rF   r@  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±   rW   r«   rX   r•   Úcopyr  r;   r<   r  r½   rR   r%  )rQ   rS  r;   r<   rä  ÚalwaysÚfactorrÀ  rç   Útarget_totalr°   r�   r“  ÚshiftrÄ   s                 €r5   rR   zAutoHeightChar.__init__ü  s!  ø€ à—}‘}×FÑFØ�J‰J˜óˆð —-‘-×+Ñ+Ø�J‰J˜Ÿ™¨¯	©	ó3ˆð —
‘
“ˆØ ‘~ˆØ)ò 	‰MˆH�cØ!ˆEŒJÜ˜˜UÓ#ˆDð �{‰{˜TŸZ™ZÑ'¨<¸#À¹-Ñ+GÓGÙð	ð ˆØ�:‰:˜Š?œc ,Ó/°1Ò4Øˆ~Ø%¨¯©°t·z±zÑ)AÑB�Ø�NŠN˜fÑ$�NÜ˜˜UÓ#ˆDà˜TŸZ™ZÑ'ˆEä‰Ñ˜$˜Ô Ø!ˆÕrF   )FN)rS  rƒ   r;   r9   r<   r9   rä  rà  rŒ  r|   r�  re  r  ró   s   @r5   r‰  r‰  ó  s(   ø„ ñð ?Cð"Øð"Ø/;÷"ñ "rF   r‰  c                  ó,   ‡ — e Zd ZdZd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.
    Fc                ód  •— |j                   j                  |j                  |«      }|j                  «       }|D ]&  \  }}||_         |||«      }	|	j                  |k\  sŒ& n |	j                  z  }
|xj
                  |
z  c_         ||«      }	t        ‰| �  |	g«       |	j                  | _        y rO   )rã  r±   rW   r‹  r:   rX   r½   rR   )rQ   rS  r:   rä  rŒ  Ú
char_classrÀ  r°   r�   r“  r�  rÄ   s              €r5   rR   zAutoWidthChar.__init__$  s¦   ø€ à—}‘}×FÑFØ�J‰J˜óˆð —
‘
“ˆØ)ò 	‰MˆH�cØ!ˆEŒJÙ˜c 5Ó)ˆDØ�z‰z˜UÓ"Ùð		ð ˜Ÿ™Ñ#ˆØ�Š˜&Ñ �Ù˜#˜uÓ%ˆä‰Ñ˜$˜Ô Ø—Z‘Zˆ�
rF   )
rS  rƒ   r:   r9   rä  rà  rŒ  r|   r“  z
type[Char])r@   rA   rB   rC   r  rR   rò   ró   s   @r5   r‘  r‘    s$   ø„ ñð QVØ*.ð Ø'÷ ñ  rF   r‘  c           	     óÐ   ‡‡‡‡‡‡	‡
‡— |\  }}dŠdŠ|Š|| j                   z   Š	t        | «      Š
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                ó"   — | dk  rdS | dkD  rdS | S )Ng    eÍÍÁg    eÍÍArE   )Úvalues    r5   Úclampzship.<locals>.clampI  s   € Ø˜t’|ˆtÐH°¸²¨ÐHÀ5ÐHrF   c                ó  •— d}d}| j                   }| j                  }‰}‰}| j                  D �]S  }t        |t        «      r)|j                  ‰‰‰z   ‰‰z   «       ‰|j                  z  ŠŒ=t        |t        «      r‰|j                  z  ŠŒ]t        |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   Š|j                  ‰‰‰z   ‰‰z   ||	«       |Š‰|z  Š�Œšt        |t$        «      s�Œ¬|j&                  }|j                  |z
  }|dk7  r~|dk(  r=|j(                  |k(  rj||j*                  z  }t-         ‰| j.                  |z  «      «      }n<|j0                  |k(  r-||j2                  z  }t-         ‰| j.                  |z  «      «      }||z  }‰|z  Š�ŒV y )Nr   rŒ   úunreachable coder   )r)  r(  r&  rw  r  r÷  r:   r@  r#  r  r%  r;  rU  rz   r;   r<   rU   rI  rK  rL  rM  rN  Úroundr'  rO  rô  )rP   Úcur_gÚcur_gluer)  r(  Ú	base_lineÚ	left_edgerE  ÚedgeÚrule_heightÚ
rule_depthÚ
rule_widthrL  r—  Úcur_hÚcur_vÚ	hlist_outÚoff_hÚoff_vr¤   Ú	vlist_outs                €€€€€€€€r5   r¥  zship.<locals>.hlist_outL  sG  ø€ ð ˆØˆØ—^‘^ˆ
Ø—M‘Mˆ	Øˆ	Øˆ	à—‘ó 3	$ˆAÜ˜!œTÔ"Ø—‘˜ ¨¡°¸±Ô>Ø˜Ÿ™Ñ ‘Ü˜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Ø—H‘H˜VØ" U™]¨E°E©MØ'¨ô6ð &�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	$rF   c                ó
  •— d}d}| j                   }| j                  }‰}‰| j                  z  Š‰}| j                  D �]C  }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        «      rz|j                  }	|j                  }
|j                  }t        j                  |«      r| j                  }|	|
z  }	|	dkD  s�ŒF|
dkD  s�ŒM‰|	z  Š|j!                  ‰‰‰z   ‰‰z   ||	«       �Œot	        |t"        «      rª|j$                  }|j                  |z
  }	|dk7  r~|dk(  r=|j&                  |k(  rj||j(                  z  }t+         ‰| j,                  |z  «      «      }n<|j.                  |k(  r-||j0                  z  }t+         ‰| j,                  |z  «      «      }|	|z  }	‰|	z  Š�Œ)t	        |t2        «      s�Œ;t5        d«      ‚ y )Nr   rŒ   r™  r   z1Internal mathtext error: Char node found in vlist)r)  r(  r;   r&  rw  r@  r:   r#  r  r<   r%  r;  rU  rz   rU   rI  r÷  rK  rL  rM  rN  rš  r'  rO  rô  r  rY  )rP   r›  rœ  r)  r(  rž  Útop_edgerE  Úsave_vr   r¡  r¢  rL  r—  r£  r¤  r¥  r¦  r§  r¤   r¨  s                €€€€€€€€r5   r¨  zship.<locals>.vlist_out‹  sL  ø€ ð ˆØˆØ—^‘^ˆ
Ø—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Ø—H‘H˜VØ" U™]¨E°E©MØ'¨ö6ô ˜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rF   )r–  r9   r{   r9   )rP   r;  r{   r´   )rP   rU  r{   r´   )r;   rM   rw  r;  )rP   ÚxyrI   rJ   r—  r£  r¤  r¥  r¦  r§  r¤   r¨  s       @@@@@@@@r5   rq   rq   8  so   ÿ€ ð �F€BˆØ€EØ€EØ€EØ�—‘‰O€EÜ�C‹[€FóI÷=$ô =$÷~9Iô 9Iôv �cœ5Ô!Ð!Ð!Ùˆc„NØ€MrF   c                óB   ‡ — dˆ fd„}t        «       j                  |«      S )z$Helper class to raise parser errors.c                ó   •— t        | |‰«      ‚rO   ©r   )rH  ÚlocÚtoksÚmsgs      €r5   Úraise_errorzError.<locals>.raise_errorÑ  s   ø€ Ü! ! S¨#Ó.Ð.rF   ©rH  rƒ   r°  rp   r±  r   r{   úT.Any)r   ÚsetParseAction)r²  r³  s   ` r5   ÚErrorr·  Ï  s   ø€ õ/ô ‹7×!Ñ! +Ó.Ð.rF   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 rO   )rã  Ú_fontrœ   rX   r•   )rQ   rã  rW   rœ   rX   r•   s         r5   rR   zParserState.__init__â  s%   € àˆŒØˆŒ
Ø$ˆŒØ ˆŒØˆ�rF   c                ó,   — t        j                   | «      S rO   )r‹  rì  s    r5   r‹  zParserState.copyê  s   € Ü�y‰y˜‹ÐrF   c                ó   — | j                   S rO   )rº  rì  s    r5   rW   zParserState.fontí  s   € à�z‰zÐrF   c                ó(   — |dv r|| _         || _        y )N)rÿ   r  r  r§  )rœ   rº  )rQ   r~  s     r5   rW   zParserState.fontñ  s   € àÐ-Ñ-Ø"ˆDŒOØˆ�
rF   c                óx   — | j                   j                  | j                  | j                  | j                  «      S )z.Return the underline thickness for this state.)rã  r­   rW   rX   r•   rì  s    r5   rc  z+ParserState.get_current_underline_thickness÷  s,   € à�|‰|×3Ñ3Ø�I‰I�t—}‘} d§h¡hó0ð 	0rF   N)
rã  r‡   rW   rƒ   rœ   rƒ   rX   r9   r•   r9   ©r{   rà  rù  )r~  rƒ   r{   r´   )r{   r9   )
r@   rA   rB   rC   rR   r‹  ÚpropertyrW   Úsetterrc  rE   rF   r5   rà  rà  ×  sJ   „ ñðØóóð òó ðð 
‡[�[òó ðô
0rF   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rO   )rw  r   ÚexprsÚresultsName)ÚeltÚexprÚnamess     €r5   rÈ  zcmd.<locals>.names	  sL   øè ø€ Ü�cœ?Ô+ØŸ	™	ò '�Ù  ›;×&Ñ&ñ'à�_Š_Ø—/‘/Ó!ð ð 'ús   ƒ+A®A¯$Ar  r   r   Ú c              3  ó&   K  — | ]	  }d |z  –— Œ y­w)z{%s}NrE   )rÙ   r~  s     r5   rÛ   zcmd.<locals>.<genexpr>  s   è ø€ ÒB¨d˜F T�MÑBùrÜ   z	Expected )rÆ  r   r{   zT.Generator[str, None, None])ra  r.  r·  )rÇ  ÚargsÚcsnamer4   rÈ  s       @r5   Ú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Ð5rF   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 dfd„Z!dgd„Z"dhd„Z#dfd„Z$dfd„Z%did„Z&djd„Z'dkd„Z(dkd„Z) e*e+jX                  «      Z-dkd„Z.dld„Z/dddd d d!d"d"d#dd$d%d&œZ0dkd'„Z1dkd(„Z2	 	 	 	 dmd)„Z3dnd*„Z4i d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAd:“dBd2“dCd4“dDd6“dEd8“dFd,“dGdHdIdJœ¥Z5 edKj                  «       «      Z6dkdL„Z7dndM„Z8dndN„Z9dkdO„Z:dkdP„Z;dkdQ„Z<e<Z=dodR„Z>dndS„Z?dkdT„Z@dpdU„ZAdpdV„ZBdpdW„ZCdnˆfdX„ZD	 	 	 	 	 	 dqdY„ZEdkdZ„ZFdkd[„ZGdkd\„ZHdkd]„ZIdkd^„ZJdnd_„ZKeKxZLZMdkd`„ZNdkda„ZO	 	 	 	 	 	 drdb„ZPdkdc„ZQdkdd„ZRdkde„ZSˆxZTS c c}}}} w )sÚ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@   rA   rB   ÚDISPLAYSTYLEÚ	TEXTSTYLEÚSCRIPTSTYLEÚSCRIPTSCRIPTSTYLErE   rF   r5   Ú
_MathStylerÑ    s   „ ØˆØˆ	ØˆØÑrF   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 \iiiintz3rm cal it tt sf bf bfit default bb frak scr regularz¢
      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                  «       ŠdCˆˆ fd„}dDd„}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   «      ‰_&         |dg ‰ jN                  ¢‰ jP                  ¢«      ‰j?                  d
«      z
  ‰_)         |d‰ jT                  «      ‰_+        ‰j.                   tG        ‰jD                  «      d«      z   ‰j2                  z   ‰_,        ‰j.                   tG        ‰jD                  «      d«      z   t[        «       z   ‰_.        tK        d‰jA                  d«      ‰jA                  d«      z   «      ‰_/        tK        d‰jA                  d«      ‰jA                  d«      z   «      ‰_0        tK        d‰jA                  d«      ‰jA                  d«      z   «      ‰_1        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   «      ‰_2        tK        dt-        d tI        tg        d«      ‰jD                  z   «      d «      z   dz   «      ‰jA                  d!«      z   «      ‰_4        tK        d"‰jA                  d#«      «      ‰_5        tK        d$‰jC                  d%«      ‰jC                  d#«      z   «      ‰_6        tK        d&‰jC                  d%«      ‰jC                  d#«      z   «      ‰_7        tK        d'tq        dd(d¬)«      «      ‰_9        tK        d* tu        ddtw        tI        ‰jD                  «      «      tG        t1        d+«      jy                  «       «      z   ¬,«      d-«      «      ‰_=         t-        ‰j<                  «      d.«       tI        t	        d/d0g«      ‰j<                  z
  «      d1«      z    t        d2«      d3«      z    t        d4«      d3«      z  ‰j?                  d.«       t        d2«      d3«      z   z  ‰_>        ‰j                  ‰jL                  z  ‰j*                  z  ‰j|                  z  ‰_?        ‰xjD                  ‰j~                  ‰j:                  z  ‰j\                  z  ‰j&                  z  z  c_"        tK        d5d tG        ‰j~                  «      d«      z   dz   «      ‰_@        tK        d6d tG        ‰j~                  «      d!«      z   dz   «      ‰_A        ‰xj<                  ‰jR                  ‰j$                  z  ‰jV                  z  ‰j€                  z  ‰jX                  z  ‰j^                  z  ‰j`                  z  ‰jb                  z  ‰jd                  z  ‰jl                  z  ‰jn                  z  ‰jh                  z  ‰jj                  z  ‰jr                  z  ‰j‚                  z  ‰jz                  z  z  c_        d7‰j7                  d8«      t…        d9«      z  z
  }‰xj:                  d:‰j7                  d;«      t…        d9«      z  z
   tG        ‰j~                  ‰j:                  z  |z  «      d<«      z   d=z   ‰j7                  d>«      t…        d9«      z  z
  z  c_        tI        ‰jD                  «      ‰_C        tq        d?d(d@¬A«      ‰_D        t        dB«      j#                  «       ‰_E        ‰jŠ                  tG        ‰jˆ                  ‰jŠ                  z   «      z   t[        «       z   ‰_F         |«        ‰jŒ                  ‰ _G        ‰j†                  ‰ _H        d@‰ _I        y c c}w )ENc                 óæ   •— t        ‰«      j                  «       D ]T  \  } }| j                  d«      rŒ| dvr|j                  | «       t	        ‰| «      sŒ:|j                  t        ‰| «      «       ŒV y )NÚ_)ÚtokenÚ	placeableÚ
auto_delim)Úvarsr	  r‹  ÚsetNameÚhasattrr¶  rJ  )r
  rÚ   rE  rQ   s     €€r5   Úset_names_and_parse_actionsz4Parser.__init__.<locals>.set_names_and_parse_actions¹  sb   ø€ Ü  ›GŸM™M›Oò 	?‘��SØ—~‘~ cÕ*ð Ð"FÑFØŸ™ CÔ(ä˜t SÕ)Ø×*Ñ*¬7°4¸Ó+=Õ>ñ	?rF   Ú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á  ÚalpharF  Únonalpha)Úisalphar£   r   r-  r.  rT   ÚreÚescape)rá  rÈ  Úends_with_alphaÚends_with_nonalphar~  s        r5   Úcsnamesz Parser.__init__.<locals>.csnamesÈ  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ó óð rF   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]+r~  rW   z\mathr  r  z\hspaceÚaccentz\fracrY   Údenz\dfracz\binomz\genfracÚldelimÚrdelimÚrulesizeÚstylez\sqrt{value}r#  r&  Úrootr–  z	\overlineÚbodyz\oversetÚ
annotationz	\undersetz\textr-   )ÚendQuoteCharz	\substackz\\)ÚopenerÚcloserÚcontentÚpartsÚnucleusrÙ  rQ  Úsubsuperz'*Úapostrophesz'+z\operatornamez\boldsymbolú\middleÚmdelimzExpected a delimiterz\leftÚleftrº  z\rightÚrightr-  F)ÚunquoteResultsz(?:(?:\\[$])|[^$])*rø  )rá  rƒ   rÈ  zIterable[str]r{   r   )JÚtypesÚSimpleNamespacer   Úfloat_literalr	   Ú_space_widthsrì  rÖ  rƒ   r–  rí  r-  r.  rT   rç  rè  r   ÚleaveWhitespacer3   Úunknown_symbolÚ
_fontnamesrW   r   Ústart_groupr   Ú	end_groupÚ_delimsÚdelimr   rÜ  rÛ  Únamed_placeableÚrequired_groupÚoptional_grouprÚ  r   r
   rÍ  ÚcustomspaceÚ_accent_mapÚ_wide_accentsrî  Ú_function_namesÚfunctionrá  r   Úunclosed_groupÚfracÚdfracÚbinomÚgenfracr   ÚsqrtÚoverlineÚoversetÚundersetr   Útextr)   r   ÚsuppressÚsubstackrý  ÚsimpleÚoperatornameÚ
boldsymbolr·  ÚmathÚmath_stringÚnon_mathÚmainÚ_expressionÚ_math_expressionÚ_in_subscript_or_superscript)rQ   rà  rë  rU  r   rE  s   `    @r5   rR   zParser.__init__¶  s‘  ù€ Ü×!Ñ!Ó#ˆö
	?ó	ô" !Ð!CÓDˆŒØ4œ5 ×!3Ñ!3Ó4°WÓ=ˆŒð5œ5Ø#'§?¡?Ö3˜aŒS�—‘�\Ò3ó5Ø5DóFˆŒð
œ5ðà&×-Ñ-Ø—‘œœRŸY™Y¬Ó0Ó1ó3ñ3ó
ð
 ó÷
 !‘Ó"ð 	
Œð 1œ5 Ó0°Ó8ˆÔá" 6¨4¯?©?Ó;ˆŒÜ# HÐ/E¬u°T·_±_Ó/EÀfÓ/MÑ$MÓNÐQTÑTˆŒÜ" 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ˆŒñ �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¸Ó'?Ó@ˆŒ
äØØ×Ñ˜\Ó*¨Q×-=Ñ-=¸fÓ-EÑEóGˆŒ	ô ØØ×Ñ˜\Ó*¨Q×-=Ñ-=¸fÓ-EÑEóGˆŒ
ô �Xœ|¨C°ÀCÔHÓIˆŒä˜ðOœ;¨c¸#Ü/4´Y¸q¿w¹wÓ5GÓ/HÜ'1´'¸&³/×2JÑ2JÓ2LÓ'Mñ0NôOàOVóXóYˆŒ
ð #ŒX�a—k‘kÓ" 9Ó-Ø9Œyœ  S˜zÓ*¨Q¯[©[Ñ8Ó9¸*ÓEñFàŒ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ˆŒð 	
�ŠØ�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ñð �f‰fñð �l‰lñð  �j‰jñ!ñ	
�ð( ˜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ÀÔGˆŒÜÐ 6Ó7×GÑGÓIˆŒ
à�J‰Jœ A§M¡M°A·J±JÑ$>Ó?Ñ?Ä)Ã+ÑMð 	
Œñ 	$Ô%àŸ6™6ˆÔØ !§¡ˆÔð -2ˆÕ)ùòa 4s   Á&f
c                óf  — t        |dd||«      g| _        i | _        	 | j                  j	                  |«      }g | _        d| _	        i | _        t        j                  «        t        j                  t        |d   «      S # t
        $ r(}t        dt        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   NF)rà  Ú_state_stackÚ_em_width_cacher*  ÚparseStringr   r2   r   Úexplainr,  r   Ú
resetCacherÆ   rÇ   r;  )rQ   rH  Úfonts_objectrX   r•   Úresultr4   s          r5   r%   zParser.parseo  s±   € ô ˜ i°°xÀÓEðGˆÔàFHˆÔð	NØ×%Ñ%×1Ñ1°!Ó4ˆFð ˆÔØ,1ˆÔ)à!ˆÔÜ× Ñ Ô"Ü�v‰v”e˜V A™YÓ'Ð'øô "ò 	Nä˜T¤N×$:Ñ$:¸3ÀÓ$BÑBÓCÈÐMûð	Nús   žA? Á?	B0Â#B+Â+B0c                ó    — | j                   d   S )z&Get the current `State` of the parser.r¾  )r/  rì  s    r5   Ú	get_statezParser.get_state…  s   € à× Ñ  Ñ$Ð$rF   c                ó8   — | j                   j                  «        y)zPop a `State` off of the stack.N)r/  Úpoprì  s    r5   Ú	pop_statezParser.pop_state‰  s   € à×Ñ×ÑÕrF   c                ór   — | j                   j                  | j                  «       j                  «       «       y)z=Push a new `State` onto the stack, copying the current state.N)r/  r£   r7  r‹  rì  s    r5   Ú
push_statezParser.push_state�  s&   € à×Ñ× Ñ  §¡Ó!1×!6Ñ!6Ó!8Õ9rF   c                ó6   — t        |j                  «       «      gS rO   )r;  ÚasList©rQ   r±  s     r5   r)  zParser.main‘  s   € Ü�d—k‘k“mÓ$Ð%Ð%rF   c                óH   — | j                   j                  |d   dd d¬«      S )Nr   r   r¾  T)ÚparseAll)r+  r1  r?  s     r5   r'  zParser.math_string”  s(   € Ø×$Ñ$×0Ñ0°°a±¸¸2°ÈÐ0ÓNÐNrF   c                óZ   — t        |j                  «       «      }| j                  «        |gS rO   )r;  r>  r:  )rQ   r±  Úhlists      r5   r&  zParser.math—  s#   € Ü�d—k‘k“mÓ$ˆØ�‰ÔØˆwˆrF   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  r7  r;  r<  ré   rê   rW   )rQ   r±  rH  rS  ÚsymbolsrC  s         r5   r(  zParser.non_mathœ  so   € Ø�‰G�O‰O˜E 3Ó'ˆØ67Ö8°”4˜˜4Ÿ>™>Ó+Õ,Ð8ˆÐ8Ü�g“ˆà�‰ÔÜ #§¡Ð-?Ñ @ˆ�‰ÓÔØˆwˆùò 9s   š!Bc           	     óÌ   — | j                  «        | j                  «       }d|_        t        |d   D �cg c]  }t	        ||«      ‘Œ c}«      }| j                  «        |gS c c}w )Nrÿ   r   )r<  r7  rW   r;  r  r:  )rQ   r±  rä  rS  rC  s        r5   r   zParser.text§  sT   € Ø�‰ÔØ—‘Ó ˆØˆŒ
Ü¨t°A©wÖ7¨!”t˜A˜u•~Ò7Ó8ˆØ�‰ÔØˆwˆùò 8s   ´A!c                ó|  — | j                  «       }|j                  |j                  |j                  f}| j                  j                  |«      }|€_|j                  j                  dt        j                  d   d|j                  |j                  «      }|j                  }|| j                  |<   t        ||z  «      S )Nr  rå   r7  )r7  rW   rX   r•   r0  rÈ   rã  r¡   ré   rê   r   r@  )rQ   Ú
percentagerä  r
  r:   rj   s         r5   Ú_make_spacezParser._make_space¯  s    € ð —‘Ó ˆØ�z‰z˜5Ÿ>™>¨5¯9©9Ð5ˆØ×$Ñ$×(Ñ(¨Ó-ˆØˆ=Ø—m‘m×/Ñ/Ø”c—l‘lÐ#5Ñ6¸Ø—‘ §	¡	ó+ˆGð —O‘OˆEØ(-ˆD× Ñ  Ñ%Ü�E˜JÑ&Ó'Ð'rF   g…¶œKqUÅ?gý0Bx´qÌ?g‚çÞÃ%ÇÑ?g¾¤1ZGUÕ?rË  rh   g…¶œKqUÅ¿)ú\,z
\thinspacez\/z\>z\:z\;z\ rT  z\enspacez\quadz\qquadz\!c                óN   — | j                   |d      }| j                  |«      }|gS ©Nrì  )r  rJ  )rQ   r±  rY   rP   s       r5   rì  zParser.spaceÏ  s-   € Ø× Ñ   g¡Ñ/ˆØ×Ñ˜sÓ#ˆØˆuˆrF   c                ó,   — | j                  |d   «      gS rM  )rJ  r?  s     r5   r  zParser.customspaceÔ  s   € Ø× Ñ   g¡Ó/Ð0Ð0rF   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�   rL  u   âˆ’zUnknown symbol: %sc              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­w©r  NrE   ©rÙ   rS  s     r5   rÛ   z Parser.symbol.<locals>.<genexpr>ê  ó   è ø€ ÒC A¸!¸s»(œaÑCùó   ‚
�r¾  rÉ  r   r  rÎ  Tr~  c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wrQ  rE   rR  s     r5   rÛ   z Parser.symbol.<locals>.<genexpr>ø  rS  rT  c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wrQ  rE   rR  s     r5   rÛ   z Parser.symbol.<locals>.<genexpr>ù  s   è ø€ ÒA A¸¸S»œaÑAùrT  r   rP  r  rN  )r  r7  r2   r   Ú_spaced_symbolsrò  r,  Ú_binary_operatorsr  ra  Ú_left_delimsÚ_relation_symbolsr;  rJ  Ú_punctuation_symbolsÚisdigit)	rQ   rH  r°  r±  rS  r“  r4   Ú	prev_charÚ	next_chars	            r5   r3   zParser.symbol×  sñ  € à�‰KˆØ�Š8ð !ˆAð	IÜ˜˜4Ÿ>™>Ó+Ó,ˆDð
 �×$Ñ$Ñ$ô ÑC¨¨4¨C¨±°2°©ÔCÀRÓHˆIð ×1Ò1Ø˜×/Ñ/Ñ/Ü˜˜$˜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: r~  r¯  ©rQ   rH  r°  r±  s       r5   r	  zParser.unknown_symbol	  s   € Ü! ! SÐ,<¸TÀ&¹\¸NÐ*KÓLÐLrF   Úhatz\circumflexaccentÚbrevez\combiningbreveÚbarz\combiningoverlineÚgravez\combininggraveaccentÚacutez\combiningacuteaccentÚtildez\combiningtildeÚdotz\combiningdotaboveÚddotz\combiningdiaeresisÚdddotz\combiningthreedotsaboveÚddddotz\combiningfourdotsaboveÚvecz\combiningrightarrowabover%  ú`r9  rT  rN  rQ  z\rightarrowz
\leftarrowz\circ)ÚoverrightarrowÚoverleftarrowÚmathringzwidehat widetilde widebarc                óø  — | j                  «       }|j                  «       }|d   }|d   }|| j                  v r!t        d|z   |j                  |t
        ¬«      }nt        | 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“  ro  g      @ÚexactlyrŒ   ç       @)r7  rc  r  r‘  r:   r  r  rô  r|  r	  r=  rU  r  r;  )rQ   r±  rä  rd  rî  r�   Ú
accent_boxÚcentereds           r5   rî  zParser.accent#	  së   € Ø—‘Ó ˆØ×9Ñ9Ó;ˆ	Ø�h‘ˆØ�5‰kˆà�T×'Ñ'Ñ'Ü&Ø�v‘˜sŸy™y¨%¼FôD‰Jô   × 0Ñ 0°Ñ 8¸%Ó@ˆJØ�ZÒØ×ÑÔØ×ÑÔÜœd 3§9¡9¨s¡?Ó3°ZÐ@ÓAˆØ�‰�s—y‘y )Ô,ÜØÜ�R˜ S™Ó)Ü�s�e“ðó ð 	rF   c                ó@   — | j                  |||«      }|d   |_        |S )Nr~  )r$  Úfunction_name)rQ   rH  r°  r±  rC  s        r5   r  zParser.function9	  s'   € Ø×!Ñ! ! S¨$Ó/ˆØ" 6™lˆÔØˆrF   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r0|| j                  vr"|| j                  | j                  d	   «      gz  }| j                  «        |	d
v rd| _        t#        |«      S d| _        t#        |«      S )Nrÿ   r~  r   zoperatorname{}c              3  ó,   K  — | ]  }|d k7  sŒ	|–— Œ y­wrQ  rE   rR  s     r5   rÛ   z&Parser.operatorname.<locals>.<genexpr>Q	  s   è ø€ ÒC ¸!¸s»(œ!ÑCùrT  rÉ  rQ  rÙ  rK  >   rÙ  rQ  TF)r<  r7  rW   rw  r  r  r£   rƒ   r  r   rò  r  Ú_overunder_functionsrJ  r  r:  r,  r;  )rQ   rH  r°  r±  rä  Ú
hlist_listr~  rS  Únext_char_locr^  Ú
delimiterss              r5   r$  zParser.operatorname>	  sc  € Ø�‰ÔØ—‘Ó ˆØˆŒ
Ø!#ˆ
à�F‰|ˆØò 	%ˆAÜ˜!œTÔ"Ø�”Ø×!Ñ!Ô#Ø×!Ñ! !Õ$Ü˜AœsÔ#Ø×!Ñ!¤$ q¨%£.Õ1à×!Ñ! !Õ$ð	%ð œc $›i™¨!Ñ+ˆÜ�dœLÔ)ØœSÐ!1Ó2Ñ2ˆMÜÑC Q } ~Ð%6ÔCÀRÓHˆ	Ø—\‘\ S¨# JÑ.ˆ
Ø˜ZÑ'Ø˜D×5Ñ5Ñ5à˜4×+Ñ+¨D×,>Ñ,>¸uÑ,EÓFÐGÑGˆJØ�‰Ôð ˜
Ñ"Ø04ˆDÔ-ô �ZÓ Ð ð 16ˆDÔ-ä�ZÓ Ð rF   c                ó�   — | j                  «        |j                  d«      r$|j                  d«      | j                  «       _        g S ©NrW   )r<  rÈ   r7  rW   r?  s     r5   r  zParser.start_groupa	  s5   € Ø�‰Ôà�8‰8�FÔØ$(§H¡H¨VÓ$4ˆD�N‰NÓÔ!Øˆ	rF   c                ó>   — t        |j                  dg «      «      }|gS ©Nrá  ©r;  rÈ   )rQ   r±  Úgrps      r5   rá  zParser.grouph	  s   € Ü�D—H‘H˜W bÓ)Ó*ˆØˆuˆrF   c                ó8   — t        |j                  dg «      «      S r€  r�  r?  s     r5   r  zParser.required_groupl	  s   € Ü�T—X‘X˜g rÓ*Ó+Ð+rF   c                ó&   — | j                  «        g S rO   )r:  rì  s    r5   r  zParser.end_groupq	  s   € Ø�‰ÔØˆ	rF   c                ó.   — t        |t        |«      d«      ‚)NzExpected '}')r   r  r`  s       r5   r  zParser.unclosed_groupu	  s   € Ü! !¤S¨£V¨^Ó<Ð<rF   c                ó6   — |d   | j                  «       _        g S r~  )r7  rW   r?  s     r5   rW   zParser.fontx	  s   € Ø $ V¡ˆ�‰ÓÔØˆ	rF   c                ó¼   — t        |t        «      r|j                  | j                  v S t        |t        «      r$t        |d«      r|j                  | j                  v S y)Nrv  F)rw  r  rS  Ú_overunder_symbolsr;  rß  rv  ry  ©rQ   rü  s     r5   Úis_overunderzParser.is_overunder|	  sN   € Ü�gœtÔ$Ø—9‘9 × 7Ñ 7Ð7Ð7Ü˜¤Ô'¬G°G¸_Ô,MØ×(Ñ(¨D×,EÑ,EÐEÐEØrF   c                óT   — t        |t        «      r|j                  | j                  v S y©NF)rw  r  rS  Ú_dropsub_symbolsr‰  s     r5   Ú
is_dropsubzParser.is_dropsubƒ	  s$   € Ü�gœtÔ$Ø—9‘9 × 5Ñ 5Ð5Ð5ØrF   c                óD   — t        |t        «      r|j                  «       S yrŒ  )rw  r  r  r‰  s     r5   r  zParser.is_slantedˆ	  s   € Ü�gœtÔ$Ø×%Ñ%Ó'Ð'ØrF   c           	     ó(  •— |j                  dt        d«      «      }|j                  dg «      }t        |j                  dg «      «      }|s|s|S d x}}|r,|^}	}
}|	dk(  r|�t        d«      ‚|
}n|�t        d«      ‚|
}|rŒ,| j	                  «       }|j
                  j                  |j                  |j                  |j                  «      }|j
                  j                  |j                  |j                  |j                  «      }|rk|€t        g «      }t        |«      D ]0  }|j                  j                  | j                  ||dd	i«      «       Œ2 |j!                  «        |j#                  «        | j%                  |«      �rKg }d
}|j&                  }|�&|j)                  «        t+        ||j&                  «      }|�&|j)                  «        t+        ||j&                  «      }|dz  }|�;t-        |g«      }|j#                  |d«       |j                  |t/        d|«      g«       t-        |g«      }|j#                  |d«       |j1                  |«       |�Wt-        |g«      }|j#                  |d«       |j                  t/        d|«      |g«       |j2                  |z   |j4                  z   }t7        |«      }||_        t        |g«      }|gS |}t;        |t        «      rx|j                  }t        |«      rSt;        |d   t<        «      rt?        |d   d«      r|d d }|d   }t?        |d«      r|j@                  jB                  |_        t        |d¬«      }n7t;        |tD        «      r|j@                  jB                  |_        t        |g«      }tG        |«      }|j2                  }d}| jI                  |«      r|j4                  }|jJ                  |z  }|jJ                  |z  }| jM                  |«      r||jJ                  |z  z  }||jN                  ||dz  dz  z
  z  z  }| jI                  |«      r?d|jJ                  z  |jP                  z
  |z  }d|jJ                  z  |jP                  z   |z  }nd}|€zt        t=        |«      tS        jT                  tV        |«      g«      }|j)                  «        | jI                  |«      r||jX                  |z  z   }n|jZ                  |z  }||_        �n't        t=        |«      |g«      }|j)                  «        | jI                  |«      r||jX                  |z  z
  }n|j\                  |z  }|€	| |_        nÃt        t=        |«      |g«      } | j)                  «        | jI                  |«      r||jX                  |z  z   }n|j^                  |z  }d|z  ||j4                  z
  | j2                  |z
  z
  z
  }!|!d
kD  r||!z  }t7        |t=        ||j4                  z
  | j2                  |z
  z
  «      | g«      }||_        | jI                  |«      s"|xj&                  |j`                  |z  z  c_        ||g}"| jb                  r)|"| je                  | jf                  d   «      gz  }"d| _1        t        |"«      }|gS )Nrü  r   rý  rþ  rÙ  zDouble subscriptzDouble superscriptr�   r¡  rŒ   ç      @rq  r¾  éþÿÿÿr  Fr~  rr  r'   rK  )4rÈ   r	  r  r   r7  rã  r­   rW   rX   r•   r«   r;  r»  r&  Úextendr3   r  r=  rŠ  r:   rô  rm   r|  r  r£   r;   r<   rU  r%  rw  r@  rß  r  r   r  ræ  rŽ  rÍ  r  rÏ  rÑ  rÆ   rÇ   rè  rÇ  rÊ  rÈ  rÌ  rÆ  r,  rJ  r  )$rQ   rH  r°  r±  rü  rý  ÚnapostrophesÚsubr½   ÚopÚargrä  Úrule_thicknessrç   r(  Úvlistr�  r:   ÚvgaprC  Úvltr5  Ú	last_charrA  rå  Ú	lc_heightÚlc_baselineÚ	superkernÚsubkernræ   Ú
shift_downÚshift_uprx   ÚclrÚspaced_nucleusrÄ   s$                                      €r5   rý  zParser.subsuper�	  s  ø€ Ø—(‘(˜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ˆà—-‘-×+Ñ+Ø�J‰J˜Ÿ™¨¯	©	ó3ˆñ Øˆ}Ü˜b›	�Ü˜<Ó(ò O�Ø—‘×%Ñ% d§k¡k°!°S¸5À)Ð:LÓ&MÕNðOð �J‰JŒLØ�K‰KŒMð ×Ñ˜WÕ%ØˆEØˆEØ—M‘MˆEØÐ Ø—‘”Ü˜E 5§;¡;Ó/�ØˆØ—
‘
”Ü˜E 3§9¡9Ó-�à! CÑ'ˆDØÐ Ü! 5 'Ó*�Ø—‘˜E 9Ô-Ø—‘˜e¤T¨!¨T£]Ð3Ô4Ü˜w˜iÓ(ˆEØ�K‰K˜˜yÔ)Ø�L‰L˜ÔØˆÜ! 3 %Ó(�Ø—‘˜E 9Ô-Ø—‘œd 1 d›m¨UÐ3Ô4ØŸ™ tÑ+¨g¯m©mÑ;�Ü˜“,ˆCØ$ˆCÔÜ˜C˜5“\ˆFØ�8ˆOð ˆ	Ü�gœuÔ%Ø"×+Ñ+ˆLÜ�<Ô ä˜|¨BÑ/´Ô6Ü ¨RÑ 0°*Ô=Ø#/°°Ð#4�LØ(¨Ñ,�	Ü˜9 jÔ1Ø&/×&8Ñ&8×&@Ñ&@�I”Oä˜L°%Ô8‰Gä˜'¤4Ô(Ø"+×"4Ñ"4×"<Ñ"<�	”Ü˜W˜IÓ&ˆGô +¨5Ó1ˆ	Ø×&Ñ&ˆ	ØˆØ�?‰?˜9Ô%Ø#Ÿ/™/ˆKð —O‘O gÑ-ˆ	Ø—/‘/ GÑ+ˆØ�?‰?˜9Ô%Ø˜Ÿ™¨7Ñ2Ñ2ˆIØ˜)×1Ñ1Ø$ w°¡|°bÑ'8Ñ8ñ:ñ ;ˆIà�‰˜yÔ)Ø˜yŸ™Ñ.Ø$×3Ñ3ñ4Ø7@ñA�à §¡Ñ0Ø&×5Ñ5ñ6Ø9BñC‘	ð �ð ˆ=ô
 ”t˜G“}¤a§f¡f¬T°3Ó&7Ð8Ó9ˆAØ�H‰HŒJØ�‰˜yÔ)Ø(¨9×+<Ñ+<¸wÑ+FÑF‘
à&Ÿ^™^¨gÑ5�
Ø'ˆAŽNä”t˜I“¨Ð.Ó/ˆAØ�H‰HŒJØ�‰˜yÔ)Ø$ y×'8Ñ'8¸7Ñ'BÑB‘à$Ÿ>™>¨GÑ3�Øˆ{Ø"* �•äœ4 ›=¨#Ð.Ó/�Ø—‘”
Ø—?‘? 9Ô-Ø!,¨y×/@Ñ/@À7Ñ/JÑ!J‘Jà!*§¡°'Ñ!9�Jà˜^Ñ+Ø! A§G¡GÑ+°·±¸:Ñ0EÑFñH�à˜’8Ø ‘O�HÜØÜ˜( Q§W¡WÑ,°·±¸JÑ1FÑGÓHØðó �ð ",�”à�‰˜yÔ)Ø�GŠG�y×-Ñ-°Ñ7Ñ7�Gð " 1˜ˆØ×,Ò,Ø˜t×/Ñ/°×0BÑ0BÀ5Ñ0IÓJÐKÑKˆNØ05ˆDÔ-ä�~Ó&ˆØˆxˆrF   c           
     óº  — | j                  «       }|j                  «       }t        |j                  «      D ]"  }	|j	                  «        |j	                  «        Œ$ t        |g«      }
t        |g«      }t        |j                  |j                  «      }|
j                  |d«       |j                  |d«       t        |
t        d|dz  «      t        ||«      t        d|dz  «      |g«      }|j                  j                  |j                  t        j                   d   d|j"                  |j$                  «      }|j&                  |j(                  |j*                  z   dz  |dz  z
  z
  }||_        t/        |t1        |dz  «      g«      g}|s|rN|dk(  rd	}|dk(  rd	}| j3                  |t5        j6                  t8        t:        t<        z  t>        z     |«      |«      S |S )
Nrq  r   rr  rå   ú=rh   r‘  rÉ  rN  ) r7  rc  r»  r–  rô  r|  rm   r:   r=  rU  r  r`  rã  r¡   rW   ré   rê   rX   r•   r;   rl   ro   r%  r;  r	  Ú_auto_sized_delimiterrÆ   rÇ   r�  rz   r  rƒ   )rQ   rð  rñ  Úruleró  rY   rï  rä  rd  rÙ  ÚcnumÚcdenr:   r™  rj   r�  r5  s                    r5   Ú_genfraczParser._genfrac3
  s³  € à—‘Ó ˆØ×9Ñ9Ó;ˆ	ä�u—{‘{Ó#ò 	ˆAØ�J‰JŒLØ�J‰J�Lð	ô ˜#˜ÓˆÜ˜#˜ÓˆÜ�C—I‘I˜sŸy™yÓ)ˆØ�
‰
�5˜)Ô$Ø�
‰
�5˜)Ô$Ü�tÜ˜A˜y¨3™Ó/Ü˜U DÓ)Ü˜A˜y¨3™Ó/Øð	ó ˆð —-‘-×+Ñ+Ø�J‰JœŸ™Ð%7Ñ8Ø�—‘ §¡ó,ˆð —‘Ø—<‘< '§,¡,Ñ.°!Ñ3Ø˜c‘/ñ"ñ#ˆð #ˆÔä˜¤ Y°¡^Ó 4Ð5Ó6Ð7ˆÙ‘VØ˜Š|Ø�Ø˜Š|Ø�Ø×-Ñ-¨fÜ./¯f©f´T¼#Ä¹*ÄsÑ:JÑ5KØ5;ó/=à.4ó6ð 6ð ˆrF   c                ó<   — | j                  t        |d   «      «      S )Nrí  )rÖ  rp   r?  s     r5   rí  zParser.style_literal]
  s   € Ø�‰œs 4¨Ñ#8Ó9Ó:Ð:rF   c           	     óÈ   — | j                  |j                  dd«      |j                  dd«      |d   |j                  d| j                  j                  «      |d   |d   «      S )Nrð  rÉ  rñ  rò  ró  rY   rï  )r«  rÈ   rÖ  rÓ  r?  s     r5   r  zParser.genfrac`
  sZ   € Ø�}‰}Ø�H‰H�X˜rÓ" D§H¡H¨X°rÓ$:Ø�Ñ˜dŸh™h w°·±×0IÑ0IÓJØ�‰K˜˜e™ó&ð 	&rF   c           	     óš   — | j                  dd| j                  «       j                  «       | j                  j                  |d   |d   «      S ©NrÉ  rY   rï  )r«  r7  rc  rÖ  rÓ  r?  s     r5   r  zParser.fracf
  sE   € Ø�}‰}Ø��D—N‘NÓ$×DÑDÓFØ�O‰O×%Ñ% t¨E¡{°D¸±KóAð 	ArF   c           	     óš   — | j                  dd| j                  «       j                  «       | j                  j                  |d   |d   «      S r¯  )r«  r7  rc  rÖ  rÒ  r?  s     r5   r  zParser.dfrack
  sE   € Ø�}‰}Ø��D—N‘NÓ$×DÑDÓFØ�O‰O×(Ñ(¨$¨u©+°t¸E±{óDð 	DrF   c           	     ób   — | j                  ddd| j                  j                  |d   |d   «      S )Nr  r  r   rY   rï  )r«  rÖ  rÓ  r?  s     r5   r  zParser.binomp
  s5   € Ø�}‰}Ø��aØ�O‰O×%Ñ% t¨E¡{°D¸±KóAð 	ArF   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õ  rq  r'   r   Úur   )r7  rc  rô  r|  rm   r:   r=  rU  r  r<   r;   r%  )rQ   rH  r°  r±  rö  rõ  rd  Úcentered_annotationÚcentered_bodyr:   rš  r™  s               r5   Ú_gensetzParser._gensetu
  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ð ˆrF   c                ór  — |j                  d«      }|d   }| j                  «       }|j                  «       }|j                  |j                  z
  |dz  z   }|j
                  |j                  z   }t        d|||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        |j                   dz  dd«      }n+t        |«      }|j#                  «        |j#                  «        t        t        |g«      g«      }| dz  |_        t        |t%        |j                    dz  «      ||
g«      }|gS )Nrô  r–  g      @rD  T)rŒ  rh   rm  ç     À’@rq  rË  rŒ   r×  )rÈ   r7  rc  r;   r%  r<   r‰  r;  r	  rU  r`  rK  rW  rX   r•   rz   r:   rô  r@  )rQ   r±  rô  rõ  rä  rd  r;   r<   ÚcheckÚpadded_bodyÚ	rightsideÚ
root_vlistrC  s                r5   r  zParser.sqrt—
  s’  € Ø�x‰x˜ÓˆØ�G‰}ˆØ—‘Ó ˆØ×9Ñ9Ó;ˆ	ð —‘˜t×0Ñ0Ñ0°9¸s±?ÑBˆØ—
‘
˜T×.Ñ.Ñ.ˆÜ˜|¨V°U¸EÈ$ÔOˆØ—‘ × 2Ñ 2Ñ2ˆØ—‘˜e×0Ñ0Ñ0ˆô œT ! i¡-Ó0°$¼¸QÀ¹]Ó8KÐLÓMˆÜœ5 ›<¬¨f«°{ÐCÓDˆ	à�‰˜ %§.¡.°5·9±9Ñ"<ÀÑ!NÑNØ! 5ô	*ñ
 Ü�u—{‘{ SÑ(¨"¨bÓ1‰Dä˜“;ˆDØ�K‰KŒMØ�K‰KŒMäœE 4 &›M˜?Ó+ˆ
Ø#) '¨C¡-ˆ
Ôä�zä˜UŸ[™[˜L¨3Ñ.Ó/ØØ ð	"ó #ˆð
 ˆwˆrF   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‘  rm  r¸  rq  )r7  rc  r;   r%  r<   rU  r`  rK  r;  rW  rX   r•   )	rQ   r±  rõ  rä  rd  r;   r<   r»  rC  s	            r5   r  zParser.overline¿
  s¸   € Ø�F‰|ˆà—‘Ó ˆØ×9Ñ9Ó;ˆ	à—‘˜t×0Ñ0Ñ0°9¸s±?ÑBˆØ—
‘
˜T×.Ñ.Ñ.ˆô œ5 ›<¬¨f«´u¸d¸V³}ÐEÓFˆ	ð 	�‰˜ %§.¡.°5·9±9Ñ"<ÀÑ!NÑNØ! 5ô	*ô �y�kÓ"ˆØˆwˆrF   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   rN  )r�  r   rk  )r7  r  rm   rw  rƒ   r;   r<   Ú	enumeraterÆ   rÇ   r‰  Úremover�  rz   r  r£   r“  r;  )rQ   ÚfrontÚmiddleÚbackrä  ræ   r;   r<   r�  ÚidxÚelrS  Úmiddle_partrû  rC  s                  r5   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                ób   — | j                  |d   d|v r|d   j                  «       ng |d   «      S )Nr  rº  r  )r§  r>  r?  s     r5   rÜ  zParser.auto_delimø
  s;   € Ø×)Ñ)Ø�‰Là$)¨T¡MˆD�‰K×ÑÔ °rØ�‰Mó	ð 	rF   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§  )r<  r7  rw  r;  r&  r  rW   r  r£   rS  Ú_latin_alphabetsÚ_small_greekr:  )rQ   r±  rä  rC  r~  rS  r/  s          r5   r%  zParser.boldsymbolÿ
  sú   € Ø�‰ÔØ—‘Ó ˆØˆØ�G‰}ˆØò 	 ˆAÜ˜!œUÔ#Ø—J‘J˜q‘M�Ü˜a¤Ô&Ø!�A”FØ×%Ñ%Ô'Ø—‘˜Q•Ü˜AœtÔ$Ø�”Ø—C‘C˜4×0Ñ0Ñ0Ø—3‘3�q�r�7˜d×/Ñ/Ñ/Ø#�A”FØ×%Ñ%Ô'Ø×!Ñ!Ô#Ø—‘˜Q•à—‘˜Q•ð!	 ð" 	�‰Ôä�U‹|ÐrF   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 rO   ry  r  s    r5   ú<lambda>z!Parser.substack.<locals>.<lambda>  s
   €  a§g¡g€ rF   rq  rh   r¾  )r7  rc  r;  rm   rT   r|  r=  r£   Úzipr  r  rU  )rQ   r±  rû  rä  rd  r/  rC  Ú	max_widthr™  r•  ÚcpÚpairrÚ   Ústackr›  r5  s                   r5   r"  zParser.substack  s	  € Ø�W‘ˆØ—‘Ó ˆØ×9Ñ9Ó;ˆ	à#(¨¡8Ö,˜a”�q•Ð,ˆÐ,ÜœÑ-¨uÓ5Ó6ˆ	àˆØò 	ˆCÜ˜C˜5Ó!ˆBØ�H‰H�Y 	Ô*Ø�L‰L˜Õð	ô ! ¬¨a°¸Q±Ó)?Ð(@Ä3ÀuÃ:Ñ(MÓN÷"ØØ ò"àò ð "�ð "ˆñ "ð �"ˆIÜ�E‹lˆÜ˜˜“,�ˆØˆùò -ùó"s   ­C(Â8C-rø  )
rH  rƒ   r4  r‡   rX   r9   r•   r9   r{   r;  r¿  )r±  r   r{   zlist[Hlist])r±  r   r{   r   )r±  r   r{   rµ  )rI  r9   r{   r@  )rH  rƒ   r°  rp   r±  zParseResults | dict[str, str]r{   rµ  r´  )r{   rµ  )rü  rè  r{   r|   )rð  rƒ   rñ  rƒ   r¨  re  ró  rÖ  rY   r;  rï  r;  r{   rµ  )rÁ  rƒ   rÂ  zlist[Box | Char | str]rÃ  rƒ   r{   rµ  )Ur@   rA   rB   rC   ÚenumÚEnumrÖ  r`  ra  rX  rZ  Ú_arrow_symbolsrW  r[  rˆ  ry  r�  r
  r  Ú_ambi_delimsrY  Ú_right_delimsr  r»  r.   r‰  r~  rˆ  rÌ   rÊ  ÚstringÚascii_lettersrÉ  rR   r%   r7  r:  r<  r)  r'  r&  r(  Ústaticmethodr   ÚconvertToFloatr  r   rJ  r  rì  r  r3   r	  r  r  rî  r  r$  r  rá  r  r  r  r  rW   rŠ  rŽ  r  rý  r«  rí  r  r  r  r  r¶  r  r  r  r  r§  rÜ  r%  r"  rò   )rÙ   r(  r‰  rˆ  rÄ   s   0000@r5   rÏ  rÏ    sV  ø„ ñô�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Ðáð 3ß38±5³7ó<€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Ðów2ór(ó,%ó ó:ó&óOóó
ñ !Ð!1×!@Ñ!@ÓA€Móó(ð$ ØØØØØØØØØØØñ€Móó
1ð.Ø2ð.Ø7<ó.ó`MðØÐ/ðàÐ-ðð 	Ð0ðð 	Ð3ð	ð
 	Ð3ðð 	Ð-ðð 	Ð0ðð 	Ð1ðð 	Ð6ðð 	Ð5ðð 	Ð7ðð 	Ð1ðð 	Ð3ðð 	Ð3ðð 	Ð-ðð  	Ð0ð!ð" 	Ð/ð#ð$ *Ø(Ø#ò)€Kñ. Ð4×:Ñ:Ó<Ó=€Móó,ó
!!óFóó,ð $€Nóó=óóóó
õ
dðL(Øð(Ø"'ð(Ø,1ó(óT;ó&óAó
Dó
Aó
ð@ !Ð €Gˆhó&óPð&$Ø&<ð$à$'ð$à,1ó$óLó÷4ùõQGs   ÅAK&rÏ  )r3   rƒ   r{   rp   )rä  rà  r{   ztype[FontConstantsBase]))r   r   )rP   rz   r¬  ztuple[float, float]r{   rM   )r²  rƒ   r{   r   )rÇ  rƒ   rË  r   r{   r   )|rC   Ú
__future__r   Úabcr‹  rÓ  r¾   ÚloggingrÉ   rç  r  r‰  rØ  ÚtypingrÆ   r   ÚnumpyrU   Ú	pyparsingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú
matplotlibré   rÉ  r   Ú_mathtext_datar   r   r   r   Úfont_managerr   r   r    Úft2fontr!   r"   r#   r$   Úpackaging.versionr%   Úparse_versionr&   Úpyparsing_versionÚmajorr(   r)   ÚTYPE_CHECKINGÚcollections.abcr*   r+   ÚenablePackratÚ	getLoggerr†  r6   r8   rA   rH   rM   r~   r‚   ÚABCr‡   ÚABCMetar¹   rö   re  r™  rœ  rª  r  ru  r   rÿ  rÄ  rÓ  rÕ  rÙ  rÛ  rß  râ  ræ  rè  rz   r  r	  r  r  r#  r;  rU  r\  r`  rg  rj  rv  rK  r|  r‚  r@  r‰  r‘  rq   r·  rà  rÍ  rÏ  rE   rF   r5   ú<module>rð     s   ðñõ #ã 
Û Û Û Û Û 	Û 	Û Û Û Û Ý ã ÷÷ ÷ ÷ ÷ ñ ó Ý ÷Dó Dç <Ñ <ß :Ó :å 4Ý 6ÙÐ"Ó#×)Ñ)¨AÒ-Þ3å%à‡?‚?Ý(Ýà €× Ñ Ô Ø€w×ÑÐ.Ó/€óô,3�*ô 3ð& /€Ô ô�*ô ð( /€Ô ÷85ñ 85ôv�*ô ô@ˆzô ôi!ˆC�G‰Gô i!ôXfI�E S§[¡[õ fIôRgC�-ô gCôTA!�=ô A!ôH&A�,¨#¯+©+õ &AôR�{ô ô$�kô ô$p�ô pôf�Iô ðB €ð €÷!,ñ !,ôHÐ"3ô ôÐ)ô ôÐ-ô ô	Ð0ô 	ô	Ð/ô 	ð
ØÐ*ðàÐ/ðð Ð,ðð Ð(ð	ð
 Ð)ðð Ð)ðð Ð(ðð Ð)ðð Ð)ðð Ð)ðð Ð$ðð Ð'ðð Ð(ðð Ð(ðð Ð)ðð  Ð'ð!ð" Ð'ð#ð& 3Ø-ò)Ð ó0÷ ñ  ô.ˆ$ô ô*,ˆ3ô ,ô(ˆ3ô (ôD+ˆ4ô D+ôNIˆTô Iô.)/ˆ3ô )/ôXc<ˆDô c<ôLO<ˆDô O<ôdDˆ3ô Dô(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ô %"ôP �Eô  ô:Pón/÷#0ñ #0óL6÷2Wò WrF   