+
     ]it c                  s   R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIHt ^ RIt^ RIHtHtHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t& ^ RI't(^RI)H*t* ^RI+H,t,H-t-H.t.H/t/ ^RI0H1t1H2t2H3t3 ^RI4H5t5H6t6H7t7H8t8 ]Pr                  '       d   ^ R	I:H;t; ^R
I4H<t< ]Pz                  ! 4        ]P|                  ! R4      t?R R lt@ ! R R]4      tAR]AnB         ! R R]4      tCR]CnB         ! R R4      tD ! R R]4      tE ! R R]4      tF ! R R]P                  4      tH ! R R]H]P                  R7      tJ ! R R]J4      tK ! R R ]J4      tL ! R! R"]L]P                  R7      tM ! R# R$]M4      tN ! R% R&]M4      tO ! R' R(]L4      tP ! R) R*]P4      tQR+tR^tS ! R, R-4      tT ! R. R/]T4      tU ! R0 R1]T4      tV ! R2 R3]T4      tW ! R4 R5]T4      tX ! R6 R7]T4      tY/ R8]YbR9]YbR:]XbR;]UbR<]UbR=]UbR>]UbR?]UbR@]UbRA]UbRB]VbRC]VbRD]VbRE]VbRF]VbRG]VbRH]VbRI]YRJ]Y/CtZRK RL lt[ ! RM RN4      t\ ! RO RP]\4      t] ! RQ RR]]4      t^ ! RS RT]]4      t_ ! RU RV]\4      t` ! RW RX]`4      ta ! RY RZ]]4      tb ! R[ R\]b4      tc ! R] R^]b4      td ! R_ R`]]4      te ! Ra Rb]e4      tf ! Rc Rd]e4      tg ! Re Rf]4      thRg]h! RhRi^Rh^ 4      Rj]h! RhRi^Rh^ 4      Rk]h! RhRi^Rh^ 4      Rl]h! RhRh^ Ri^4      Rm]h! RhRh^ Ri^4      Rn]h! RhRh^ Ri^4      Ro]h! RhRh^ Rh^ 4      Rp]h! RhRi^R^4      /]hni         ! Rq Rr]\4      tj ! Rs Rt]c4      tk ! Ru Rv]d4      tl ! Rw Rx]\4      tm ! Ry Rz]c4      tn ! R{ R|]c4      toRR} R~ lltpR R ltq ! R R4      trR R lts ! R R4      ttR# )z.
Implementation details for :mod:`.mathtext`.
)annotationsN)
NamedTuple)EmptyForwardLiteralGroupNotAny	OneOrMoreOptionalParseBaseExceptionParseExceptionParseExpressionParseFatalExceptionParserElementParseResultsQuotedStringRegex	StringEnd
ZeroOrMorepyparsing_commonnested_exprone_of)cbook)latex_to_bakomastix_glyph_fixesstix_virtual_fontstex2uni)FontPropertiesfindfontget_font)FT2FontFT2ImageKerning	LoadFlags)Iterable)Glyphzmatplotlib.mathtextc                    V ^8  d   QhRRRR/# )   symbolstrreturnint format   ";/usr/lib64/python3.14/site-packages/matplotlib/_mathtext.py__annotate__r/   /   s      c c     c                s     \        V 4      #   \         d     Mi ; i \        T P                  R4      ,          #   \         d   p\        T : R24      ThRp?ii ; i)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)ordZ	TypeErrorr   ZstripKeyError
ValueError)r&   err   & r.   get_unicode_indexr7   /   sg    6{ v||D)** jMN	s!   
 ; AAAc                  sN    ] tR t^Et$ RtR]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )VectorParsez
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]]rectsr*   N__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r*   r0   r.   r8   r8   E   s$     LML::22r0   r8   c                  sX    ] tR t^[t$ RtR]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )RasterParsez
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   imager*   Nr?   r*   r0   r.   rG   rG   [   s'     	IILMLOr0   rG   c                  s>    ] tR t^rtRtR R ltR R ltR R ltRtR	# )
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                   V ^8  d   QhRR/# )r%   boxBoxr*   r+   r-   r.   r/   Output.__annotate__z   s     A AC Ar0   c                	s.    Wn         . V n        . V n        R # NrM   r=   r>   )selfrM      &&r.   __init__ZOutput.__init__z   s    ;=>@
r0   c               rL   )r%   r(   r8   r*   r+   r-   r.   r/   rO      s     0 0; 0r0   c                	s,   \        \        P                  V P                  P                  V P                  P
                  V P                  P                  .4      w  rpV P                   UUUu. uFB  w  rEpVP                  VP                  VP                  WBV,
          VP                  ,           3NKD  	  ppppV P                   UU	U
Uu. uF  w  rrWV,
          W,
          W,
          3NK   	  pp
p	pp\        WV,           W7V4      # u upppi u upp
p	pi rP   )mapnpceilrM   r:   r;   r<   r=   fontfontsizenumoffsetr>   r8   )rR   whdrH   rI   infoZgsx1y1x2y2Zrss   &            r.   	to_vectorZOutput.to_vector   s    GGdhhnndhhootxx~~FHa #'++/"-,"$ yy$--22v7KL"- 	 / %)JJ0$.."" r627BG,$. 	 01!eQB//	/0s   -AD
$D
c               r$   )r%   antialiasedboolr(   rG   r*   r+   r-   r.   r/   rO      s     "5 "5 "5 "5r0   c               	s"   \        . V P                   UUUu. uF"  w  r#qBVP                  P                  ,           NK$  	  upppOV P                   UUUUu. uF  w  rVrxVNK
  	  uppppO^ N4      ^,
          p	\        . V P                   UUUu. uF"  w  r#qCVP                  P
                  ,
          NK$  	  upppOV P                   UUUUu. uF  w  rVrxVNK
  	  uppppO^ N4      ^,
          p
\        . V P                   UUUu. uF"  w  r#qBVP                  P                  ,           NK$  	  upppOV P                   UUUUu. uF  w  rVrxVNK
  	  uppppO^ N4      ^,           p\        . V P                   UUUu. uF"  w  r#qCVP                  P                  ,
          NK$  	  upppOV P                   UUUUu. uF  w  rVrxVNK
  	  uppppO^ N4      ^,           pW,
          pW,
          V P                  P                  ,
          pW,
          V P                  P                  ,
          p\        \        \        P                  ! V4      4      \        \        P                  ! V\        V^ 4      ,           4      4      4      p\!        V P                  V	) V
) 34      pVP                   F\  w  r#pVP"                  P%                  V\        V4      \        W4P                  P&                  ,
          4      VP(                  VR7       K^  	  VP                   F  w  rVrx\        \        W,
          4      ^,
          ^ 4      pV^ 8X  d1   W,           ^,          p\        VV^,           ^,          ,
          4      pM\        V4      pVP+                  \        V4      V\        \        P                  ! V4      4      VV,           4       K  	  \-        ^ ^ WV,           VV4      # u upppi u uppppi u upppi u uppppi u upppi u uppppi u upppi u uppppi )    )re   )Zminr=   metricsxminr>   ymaxmaxxmaxyminrM   r<   r;   r   r)   rV   rW   shiprX   Zdraw_glyph_to_bitmapicebergglyphZdraw_rect_filledrG   )rR   re   rH   rI   r_   r`   ra   rb   rc   ri   rm   rl   rj   r\   r]   r^   rJ   Zshiftedr;   Zcenterys   &$                   r.   	to_rasterZOutput.to_raster   s?     ?M4<<,,,,M ?/3zz:z^RRbz:?<=? @BCD ?M4<<,,,,M ?/3zz:z^RRbz:?<=? @BCD ?M4<<,,,,M ?/3zz:z^RRbz:?<=? @BCD ?M4<<,,,,M ?/3zz:z^RRbz:?<=? @BCDKK$((..(K$((//)RWWQZ#bgga#a)m.D*EF txx4%$0#NNLBDII**s2wB)=)=$= >

' + ) + &mmNBBRW)1-F{'Q&1*!112G""3r7As2772;/?VL , 1aE1e44? N:M:M:M:s/   (OO(O$O+(O3O:9(P7P	rQ   N)	r@   rA   rB   rC   rD   rT   rd   rr   rF   r*   r0   r.   rK   rK   r   s    A
0"5 "5r0   rK   c                  sv    ] tR t^t$ RtR]R&   R]R&   R]R&   R]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   RtR# )FontMetricsa  
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:   ri   rl   rm   rj   ro   rf   slantedr*   Nr?   r*   r0   r.   rs   rs      s6    ( NML
K
K
K
KNMr0   rs   c                  s^    ] tR t^t$ R]R&   R]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   RtR# )FontInfor   rX   r9   rY   r'   postscript_namers   rh   r)   rZ   r#   rp   r[   r*   Nr@   rA   rB   rC   rE   rF   r*   r0   r.   rv   rv      s'    
MO	HLMr0   rv   c                  s    ] tR t^tRtR R ltR R ltR R ltR R	 ltR
 R lt	R R lt
R R ltR R ltR R ltR R ltRtR# )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               r$   r%   default_font_propr   load_glyph_flagsr!   r*   r+   r-   r.   r/   Fonts.__annotate__   s     1 1. 1I 1r0   c                s    Wn         W n        R# )a>  
Parameters
----------
default_font_prop : `~.font_manager.FontProperties`
    The default non-math font, or the base font for Unicode (generic)
    font rendering.
load_glyph_flags : `.ft2font.LoadFlags`
    Flags passed to the glyph loader (e.g. ``FT_Load_Glyph`` and
    ``FT_Load_Char`` for FreeType-based fonts).
Nr{   r|   )rR   r{   r|      &&&r.   rT   ZFonts.__init__   s     "3 0r0   c               @    V ^8  d   QhRRRRRRRRRRRRR	RR
RRRRR/
# r%   font1r'   
fontclass1sym1	fontsize1r9   font2
fontclass2sym2	fontsize2dpir(   r*   r+   r-   r.   r/   r}      sX      c s # % ),47DI %r0   c
                    R# )z
Get the kerning distance for font between *sym1* and *sym2*.

See `~.Fonts.get_metrics` for a detailed description of the parameters.
        r*   )
rR   r   r   r   r   r   r   r   r   r   s
   &&&&&&&&&&r.   get_kernZFonts.get_kern   s     r0   c               r$   )r%   rX   r'   r(   r   r*   r+   r-   r.   r/   r}      s     " "c "g "r0   c                	    \         hrP   ZNotImplementedError)rR   rX   rS   r.   	_get_fontZFonts._get_font   s    !!r0   c               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r%   rX   r'   
font_classsymrY   r9   r   r(   rv   r*   r+   r-   r.   r/   r}      s8     " "c "s " " ""!)"r0   c                	r   rP   r   )rR   rX   r   r   rY   r      &&&&&&r.   	_get_infoZFonts._get_info       !!r0   c               r   )
r%   rX   r'   r   r   rY   r9   r   r(   rs   r*   r+   r-   r.   r/   r}      s8        3 % #.r0   c                s@    V P                  WW4V4      pVP                  # )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   rh   )rR   rX   r   r   rY   r   r_   s   &&&&&& r.   get_metricsZFonts.get_metrics   s     2 ~~dsC||r0   c               s<    V ^8  d   QhRRRRRRRRRRR	RR
RRRRR/	# )r%   outputrK   rH   r9   rI   rX   r'   r   r   rY   r   r(   Noner*   r+   r-   r.   r/   r}     sP     - -6 -u -% -s -!$-+.-:?-FK-PT-r0   c	                sf    V P                  WEWgV4      p	VP                  P                  W#V	34       R# )z
At position (*ox*, *oy*), draw the glyph specified by the remaining
parameters (see `get_metrics` for their detailed description).
N)r   r=   append)
rR   r   rH   rI   rX   r   r   rY   r   r_   s
   &&&&&&&&& r.   render_glyphZFonts.render_glyph  s,     ~~dsCbd^,r0   c               0    V ^8  d   QhRRRRRRRRRRRR	/# 
r%   r   rK   r`   r9   ra   rb   rc   r(   r   r*   r+   r-   r.   r/   r}   $  s;     . . .$.*/.5:.@E.JN.r0   c                s@    VP                   P                  W#WE34       R# )z<
Draw a filled rectangle from (*x1*, *y1*) to (*x2*, *y2*).
N)r>   r   rR   r   r`   ra   rb   rc   r   r.   render_rect_filledZFonts.render_rect_filled$  s    
 	RR,-r0   c               (    V ^8  d   QhRRRRRRRR/# r%   rX   r'   rY   r9   r   r(   r*   r+   r-   r.   r/   r}   +  s(     $ $ $u $5 $U $r0   c                    \        4       h)z6
Get the xheight for the given *font* and *fontsize*.
r   rR   rX   rY   r      &&&&r.   get_xheightZFonts.get_xheight+  s     "##r0   c               r   r   r*   r+   r-   r.   r/   r}   1  s)     $ $C $5 $u $QV $r0   c                r   )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   r   r.   get_underline_thicknessZFonts.get_underline_thickness1  s    
 "##r0   c               $    V ^8  d   QhRRRRRR/# r%   fontnamer'   r   r(   zlist[tuple[str, str]]r*   r+   r-   r.   r/   r}   8  s#     ! !# !/2!7L!r0   c                s
    W3.# )z
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.
r*   rR   r   r   r   r.   !get_sized_alternatives_for_symbolZ'Fonts.get_sized_alternatives_for_symbol8  s       r0   r~   N)r@   rA   rB   rC   rD   rT   r   r   r   r   r   r   r   r   r   rF   r*   r0   r.   ry   ry      s>    1""8-.$$! !r0   ry   c                  s   a  ] tR tRtRtR V 3R lltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR V 3R lltRtV ;t# )TruetypeFontsiC  zU
A generic base class for all font setups that use Truetype fonts
(through FT2Font).
c               r$   rz   r*   r+   r-   r.   r/   TruetypeFonts.__annotate__I  s     
. 
.. 
.I 
.r0   c                	s  < \         SV `  W4       \        P                  ! V P                  4      V n        / V n        / V n        \        V P                  4      p\        V4      pW@P
                  R &   W@P
                  R&   R# )defaultregularN)
superrT   	functoolscacher   _fontsfontmapr   r{   r   )rR   r{   r|   ZfilenameZdefault_font	__class__   &&&  r.   rT   ZTruetypeFonts.__init__I  se    *="8-/D223)!-I!-Ir0   c               r$   )r%   rX   z	str | intr(   r   r*   r+   r-   r.   r/   r   U  s     , ,i ,G ,r0   c                	s   WP                   9   d   V P                   V,          pM\        P                  ! \        V4      pV P                  P                  V4      pVf}   \        P                  P                  V4      '       dX   \        V4      pW0P                  V&   W0P                  VP                  &   W0P                  VP                  P                  4       &   \        P                  ! \        V4      # rP   )r   Tcastr'   r   getosZpathZexistsr   rw   lowerr   )rR   rX   basenameZcached_font   &&  r.   r   ZTruetypeFonts._get_fontU  s    <<||D)H vvc4(Hkkooh/277>>(#;#;"8,K$/KK!7BKK334?JKK3399;<vvg{++r0   c          
     s,    V ^8  d   QhRRRRRRRRRR/# )	r%   rX   r   rp   r#   rY   r9   r   r(   r*   r+   r-   r.   r/   r   d  s1         #(r0   c                	s    VP                   R 8X  d7   VP                  ^@,          ^,          V^,          V,          ^H,          ,           # R# )ZCmex10r   )rw   r;   )rR   rX   rp   rY   r   s   &&&&&r.   _get_offsetZTruetypeFonts._get_offsetd  s:    8+LL2%)hqj3.>r.ABBr0   c               (    V ^8  d   QhRRRRRRRR/# r%   r   r'   r   r   r(   ztuple[FT2Font, int, bool]r*   r+   r-   r.   r/   r   j  s*     " "3 "C "" 9"r0   c                	r   rP   r   )rR   r   r   r   r   r.   
_get_glyphZTruetypeFonts._get_glyphj  r   r0   c               r   )
r%   r   r'   r   r   rY   r9   r   r(   rv   r*   r+   r-   r.   r/   r   o  s8     
 
# 
3 
S 
E 

!)
r0   c                	s   V P                  WV4      w  rgpVP                  WE4       VP                  WpP                  R 7      p	R V	P                   4       w  rrV P                  WiWE4      p\        V	P                  R,          V	P                  ^@,          V	P                  ^@,          V
VW,           W,           V	P                  ^@,          V,           VR7	      p\        VVVP                  VVV	VR7      # ))Zflagsc              3  s2   "   T F  q^@,          x  K  	  R# 5i)@   Nr*   ).0valr6   r.   	<genexpr>Z*TruetypeFonts._get_info.<locals>.<genexpr>u  s     !Ajs((js      )	rt   r;   r:   ri   rl   rm   rj   ro   ru   )rX   rY   rw   rh   rZ   rp   r[   )r   set_sizeZ	load_charr|   Zbboxr   rs   ZlinearHoriAdvancer;   r:   ZhoriBearingYrv   rw   )rR   r   r   r   rY   r   rX   rZ   ru   rp   ri   rm   rl   rj   r[   rh   s   &&&&&&          r.   r   ZTruetypeFonts._get_infoo  s    !__X3G7h$s*?*?@!Aejj!AD!!$x=++e3<<"$++"&&+f4
  00
 	
r0   c               r   )r%   r   r'   rY   r9   r   r(   r*   r+   r-   r.   r/   r     s(     
 
C 
5 
u 
 
r0   c                	s6   V P                  V4      pVP                  W#4       VP                  R 4      pVf6   V P                  V\        P
                  R,          RW#4      pVP                  # VR,          R,          VR,          ,          VR,          ,          pV# )pcltmathtext.defaultxxHeightg      P@g      (@g      Y@)r   r   Zget_sfnt_tabler   mplrcParamsro   )rR   r   rY   r   rX   r   rh   r      &&&&    r.   r   ZTruetypeFonts.get_xheight  s    ~~h'h$""6*<&&#,,'9:CPG??"	?T)ho>#+Nr0   c               r   r   r*   r+   r-   r.   r/   r     s)     7 7C 75 7u 7QV 7r0   c                	s0    RV,          V,          R,          # )g      ?g      R@g      ?r*   r   r   r.   r   Z%TruetypeFonts.get_underline_thickness  s     (3.$66r0   c               r   r   r*   r+   r-   r.   r/   r     sd     	I 	Ic 	Is 	I# 	I% 	I	I),	I47	IDI	I	I %	Ir0   c
                	s  < W8X  du   WH8X  do   V P                  WW4V	4      p
V P                  WVWxV	4      pV
P                  pVP                  V
P                  VP                  \        P
                  4      ^@,          # \        SV `  WW4WVWxV	4	      # )r   )r   rX   get_kerningrZ   r    ZDEFAULTr   r   )rR   r   r   r   r   r   r   r   r   r   Zinfo1Zinfo2rX   r   s   &&&&&&&&&&   r.   r   ZTruetypeFonts.get_kern  s     >i4NN5dsKENN5dsKE::D##EIIuyy'//JROOw4 %4CI 	Ir0   )r   r   r   )r@   rA   rB   rC   rD   rT   r   r   r   r   r   r   r   rF   __classcell__r      @r.   r   r   C  s<    

. 
.,"

>
7	I 	Ir0   r   )Z	metaclassc                  s  a  ] tR tRtRtRRRRRRR	R
RRRRRR/tR V 3R llt]! RP                  4       4      t	R R lt
/ R. R,ObR. R-ObR. R.ObR. R/ObR. R0ObR. R1ObR. R2ObR. R3ObR. R4ObR. R5ObR . R7ObR!. R9ObR". R:ObR#. R;ObR$. R<ObR%. R=ObR&. R>ObR'R?R6.R(R@R8./CtRA F  w  tt]],          ]]&   K  	  R) R* ltR+tV ;t# )BBakomaFontsi  z
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.
calcmsy10rmcmr10ttcmtt10itcmmi10bfcmb10sfcmss10excmex10c               r$   rz   r*   r+   r-   r.   r/   BakomaFonts.__annotate__  s     ) ). )I )r0   c                	s   < \        W4      V n        \        SV `  W4       V P                  P                  4        F,  w  r4\        V4      pWPP                  V&   WPP                  V&   K.  	  R # rP   )	StixFonts_stix_fallbackr   rT   _fontmapitemsr   r   )rR   r{   r|   keyr   fullpathr   s   &&&   r.   rT   ZBakomaFonts.__init__  sY    '(9L*=++-HC}H (LL (LL .r0   
\int \ointc               r   r   r*   r+   r-   r.   r/   r     s0     M M3 MC MM 9Mr0   c                	s   R pWP                   9   dH   V\        9   d=   \        V,          w  rVVR8H  ;'       g    W0P                  9   pV P                  V4      pM5\	        V4      ^8X  d&   VR8H  pV P                  V4      pVe   \        V4      pVe   VP                  X4      ^ 8w  d   WFX3# V P                  P                  WV4      # )Nr   r   )	r   r   _slanted_symbolsr   lenr2   get_char_indexr   r   )rR   r   r   r   rX   r   rZ   ru   r   r.   r   ZBakomaFonts._get_glyph  s    ||#(>+C0MH8+LL7L7L0LG>>(+DX]4'G>>(+D#h 3 3C 8A =g%%&&11(LLr0   (){}[]z\lfloorz\rfloorz\lceilz\rceilz\langlez\rangle	\__sqrt__z
\backslash/z\widehatz
\widetilde<>c               r   r   r*   r+   r-   r.   r/   r     s(     C C# C/2C7LCr0   c                	s>    V P                   P                  W!V3.4      # rP   )_size_alternativesr   r   r   r.   r   Z-BakomaFonts.get_sized_alternatives_for_symbol  s     &&**3C0ABBr0   )r   ))r   r   )r   t   ¡)r   t   ³)r   t   µ)r   t   Ã))r   r   )r   t   ¢)r   t   ´)r   t   ¶)r   Z!))r   r   )r   t   ©)r   Zn)r   t   ½)r   r   ))r   r   )r   t   ª)r   o)r   t   ¾)r   r   ))r   r   )r   t   £)r   r]   )r   "))r   r   )r   t   ¤)r   i)r   Z#))r   t   ¥)r   Zj)r   t   ¹)r   $))r   t   ¦)r   k)r   t   º)r   Z%))r   t   §)r   l)r   t   »)r   Z&))r   t   ¨)r   m)r   t   ¼)r   'r   ZD))r   t   ­r   )r   t   ¿)r   Z*r   ZE))r   t   ®r  )r   t   À)r   Z+))r   p)r   Zq)r   Zr)r   s))r   t   ²)r   r   )r   t   Â)r   -))r   r   )r   t   ±)r   .)r   t   Ë)r   ,))r   ^)r   Zb)r   c)r   r^   ))r   ~)r   e)r   Zf)r   g)r   r]   )r   r   )
)z
\leftparenr   )z\rightparenr   )z
\leftbracer   )z\rightbracer   )z\leftbracketr   )z\rightbracketr   )\{r   )\}r   )\[r   )\]r   )r@   rA   rB   rC   rD   r   rT   setsplitr   r   r   ZaliasZtargetr   rF   r   r   r   r.   r   r     s    	xwxxwxxH) ) =..01M('
 8'
 	 8'

 	 8'
 	 8'
 	 ('
 	 ('
 	 8'
" 	 8#'
& 	 8''
* 	 8+'
. 	 8/'
2 	 83'
6 	 87'
: 	 8;'
> 	 8?'
B 	 (C'
F 	 (G'
J 	k2k2M'
R	(v %7v$>5!	(C Cr0   r   c                  s   a  ] tR tRtRt^^R^/tR V 3R llt]! RP                  4       4      t	R R lt
R	 R
 ltR R ltRtV ;t# )UnicodeFontsi  aD  
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               r$   rz   r*   r+   r-   r.   r/   UnicodeFonts.__annotate__*  s     !. !.. !.I !.r0   c                	s  < \         P                  R ,          pR\        R\        R\        /P                  V4      pV'       d	   V! W4      MRV n        \        SV `!  W4       RP                  4        F:  p\         P                  RV,           ,          p\        V4      pWpP                  V&   K<  	  \        R4      p\        V4      pWpP                  R&   \        V P                  \        4      '       dQ   ^ R	^R
^R^R^R^R/pVP                  4        F,  w  r\        V
4      pWP                  V	&   WP                  V
&   K.  	  R# R# )zmathtext.fallbackZstixZstixsansZcmNzcal rm tt it bf sf bfitz	mathtext.r   r   STIXGeneralSTIXSizeOneSymSTIXSizeTwoSymSTIXSizeThreeSymSTIXSizeFourSymSTIXSizeFiveSym)r   r   r   StixSansFontsr   r   _fallback_fontr   rT   r  r   r   r   
isinstancer   )rR   r{   r|   Zfallback_rcZfont_clsZtexfontZproprX   Zstixsizedaltfontssizenamer   r   s   &&&         r.   rT   ZUnicodeFonts.__init__*  s;   ll#67I+0
 #k
	 	 #+  ((9L04 	 	*=0668G<<g 56DD>D$(LL! 9 h'~!T d))955M$$&%%!' 0557
#D>%-T"%-T" 8 6r0   r   c               (    V ^8  d   QhRRRRRRRR/# r%   r   r'   r   uniindexr)   r(   ztuple[str, int]r*   r+   r-   r.   r/   r  O  s*     " "# "3 "$'",;"r0   c                	s    W3# rP   r*   )rR   r   r   r!  r   r.   _map_virtual_fontZUnicodeFonts._map_virtual_fontO  s    !!r0   c               r   r   r*   r+   r-   r.   r/   r  S  s*     =' ='3 ='C ='=' 9='r0   c                	s    \        V4      pR pV P                  WV4      w  rTpV'       Ed   VR8X  db   VR8  d[   \        V4      p\        P                  ! V4      ^ ,          R8w  g,   \        P                  ! V4      P                  R4      '       d   RpVR8H  ;'       g    W0P                  9   pRpV P                  V4      p	V	en   W@P                  9   dD   V	P                  R	8X  d3   \        \         P"                  ! R
4      4      p	V P                  V,          pV	P%                  V4      p
V
^ 8w  d   R pV'       Eg   V P&                  '       d   VR9   d#   \)        V P&                  \*        4      '       d   RpV P&                  P-                  WV4      pV^ ,          P                  pV\/        \0        P2                  P5                  4       4      9   d   Rp\        P7                  RW<4       V# VR9   d)   \)        V \*        4      '       d   V P-                  RW#4      # \        P	                  RWcV4       V P                  R4      p	^pRpX	VX3#   \         d(    \        R4      pRp\        P	                  RT4        ELpi ; i)TZ?Fz!No TeX to Unicode mapping for %a.r   r   ZLzGREEK CAPITALr   r   zfonts/ttf/cmsy10.ttfzComputer ModernzSubstituting symbol %s from %szNFont %r does not have a glyph for %a [U+%x], substituting with a dummy symbol.)r   r   )r7   r4   r2   _logwarningr"  chrunicodedataZcategoryr  
startswithr   r   _cmr10_substitutionsfamily_namer   r   Z_get_data_pathr   r  r  r   r   listr   r   Zvaluesr_   )rR   r   r   r   r!  Zfound_symbolZnew_fontnamecharru   rX   
glyphindexr  Zfamilys   &&&&         r.   r   ZUnicodeFonts._get_glyphS  sJ   	C(-HL "33(,   <4Hw$68}((.q1S8&++D1<<_MM#'L#t+LL7L7L0LG L>>,/D 9 99 ,,7#,,-CDFD#88BH!00:
?#'L|""" 11&t':':IFF#H''228M1))T+"6"6"="="?@@.F		:CH  11&tY77??4AA A): ~~d+Xw&&q  	C3xH LLL<cB	Cs   I .J ?J c               r   r   r*   r+   r-   r.   r/   r    s#     ! !# !/2!7L!r0   c                	sd    V P                   '       d   V P                   P                  W4      # W3.# rP   )r  r   r   r   r.   r   Z.UnicodeFonts.get_sized_alternatives_for_symbol  s5    &&HH   r0   )r  )r@   rA   rB   rC   rD   r(  rT   r  r  r   r"  r   r   rF   r   r   r   r.   r  r    sR    	 	
!. !.F =..01"='~! !r0   r  c                  sJ   a  ] tR tRt$ / tR]R&   R R ltR V 3R lltRtV ;t	# )	DejaVuFontsi  dict[str | int, str]r   c               r$   rz   r*   r+   r-   r.   r/   DejaVuFonts.__annotate__  s     * *. *I *r0   c                	s   \        V \        4      '       d   \        W4      V n        M\	        W4      V n        \        W4      V n        \        P                  WV4       V P                  P                  ^R^R^R^R^R/4       V P                  P                  4        F,  w  r4\        V4      pWPP                  V&   WPP                  V&   K.  	  R# )   r  r  r  r  r  N)r  DejaVuSerifFontsr   r  r  r   bakomar   rT   r   Zupdater   r   r   rR   r{   r|   r   r  r      &&&   r.   rT   ZDejaVuFonts.__init__  s    d,--"+,="PD"/0A"TD!"3Ft8HI!  
 	 ,,.IC~H (LL!)LL /r0   c               r   r   r*   r+   r-   r.   r/   r/    s0     A A3 AC AA 9Ar0   c                	s   < VR 8X  d   V P                   P                  WV4      # \        V4      pV P                  R4      pVe)   VP	                  V4      pV^ 8w  d   \
        SV `  RW#4      # \
        SV `  WV4      # )\primer   )r2  r   r7   r   r   r   )rR   r   r   r   r!  rX   r,  r   s   &&&&   r.   r   ZDejaVuFonts._get_glyph  s     );;))(DD )-H>>$'D!00:
? 7-dJDD7%hC@@r0   )r  r2  )
r@   rA   rB   rC   r   rE   rT   r   rF   r   r   r   r.   r-  r-    s    %'H"'**A Ar0   r-  c                  s>    ] tR tRtRtRRRRRRR	R
RRRRRR^ R/tRtR# )r1  i  zj
A font handling class for the DejaVu Serif fonts

If a glyph is not found it will fallback to Stix Serif
r   DejaVu Serifr   zDejaVu Serif:italicr   zDejaVu Serif:weight=boldbfitzDejaVu Serif:italic:boldr   DejaVu Sansr   DejaVu Sans Monor   zDejaVu Serif Displayr*   Nr@   rA   rB   rC   rD   r   rF   r*   r0   r.   r1  r1    s=     	n#(*m $	n	Hr0   r1  c                  s>    ] tR tRtRtRRRRRRR	R
RRRRRR^ R/tRtR# )DejaVuSansFontsi  zh
A font handling class for the DejaVu Sans fonts

If a glyph is not found it will fallback to Stix Sans
r   r8  r   zDejaVu Sans:italicr   zDejaVu Sans:weight=boldr7  zDejaVu Sans:italic:boldr   r   r9  r   zDejaVu Sans Displayr*   Nr:  r*   r0   r.   r;  r;    s=     	m"')m #	m	Hr0   r;  c                  s    ] tR tRt$ RtRRRRRRR	R
RRRRRR^ R^R^R^R^R^R/tR]R&   RtRtR R lt	R R lt
]P                  R R l4       tR tR# )!r   i  aE  
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.
r   r  r   zSTIXGeneral:italicr   zSTIXGeneral:weight=boldr7  zSTIXGeneral:italic:boldZnonunirmSTIXNonUnicodeZnonuniitzSTIXNonUnicode:italicZnonunibfzSTIXNonUnicode:weight=boldr  r  r  r  r  r.  r   NFc               r$   rz   r*   r+   r-   r.   r/   StixFonts.__annotate__  s     * *. *I *r0   c                	s    \         P                  WV4       V P                  P                  4        F,  w  r4\	        V4      pWPP
                  V&   WPP
                  V&   K.  	  R # rP   )r   rT   r   r   r   r   r3  r4  r.   rT   ZStixFonts.__init__  sM    t8HI,,.IC~H (LL!)LL /r0   c               r  r   r*   r+   r-   r.   r/   r=    s*     4" 4"# 4"3 4"$'4",;4"r0   c                	s@   \         P                  ! V4      pV P                  '       d   Vf   VR	9  d   \         R,          pRpMRp\        V\        4      '       d    WB,          pM\        V\        4      '       d   TpMR pVe   ^ p\        V4      pWx8  dB   Wx,           ^,          p	Wi,          p
W:^ ,          8  d   T	pK.  W:^,          8:  d   MV	^,           pKG  X
^ ,          Tu;8:  d   V
^,          8:  d+   M M'W:^ ,          ,
          V
^,          ,           pV
^,          pM!V'       g   ^p\        P                  R,          pVR
9   d   \        P                  ! W34      pVR9   d   RTu;8:  d   R8:  d   M W3# RV,           pW3#   \
         d    TR,          p ELi ; i)Nr   TFr   r   i   i  Znonuni)r   r   )r   r   )r   r   r   r7  )r   r   _sansr  Zdictr3   r*  r   r   r   r   )rR   r   r   r!  Zfont_mappingZdoing_sans_conversionZmappingZloZhimidrange   &&&&       r.   r"  ZStixFonts._map_virtual_font  s{    *--h7JJJ</$::-d3L$(!$)!lD))-&2 d++"GGBWB'uqjAh&Bq)qBQx8/uQx/#Ah.q9 8*<<(:; |#'++H?H 11f6RF6R !!  (*H!!K  -&t,-s   F FFc               r   )r%   r   r'   r   r(   z-list[tuple[str, str]] | list[tuple[int, str]]r*   r+   r-   r.   r/   r=  C  s)        Gr0   c                	s@   R RRRRRRRRR	R
R/pVP                  W"4      p \        V4      p\        ^4       Uu. uF7  pT P	                  T4      P                  T4      ^ 8w  g   K*  T\        T4      3NK9  	  ppTR8X  d   TRR pT#   \         d    Y3.u # i ; iu upi )r  r   r  r   r  r   r  r   r   u   ⟨r   u   ⟩r   N)r   r7   r4   r@  r   r   r%  )rR   r   r   Zfixesr!  r   alternativess   &&&    r.   r   Z+StixFonts.get_sized_alternatives_for_symbolB  s     3sE3s67

 ii!	%(-H 5:!H LHq>>!,;;HEJ +CM*H L ,',L  	%O$$	%Ls   B 'B%BBBr*   )r@   rA   rB   rC   rD   r   rE   r  r>  rT   r"  r   r   r   rF   r*   r0   r.   r   r     s    
 	m"')$+0	=					&H"  NE*4"l __ r0   r   c                  s    ] tR tRtRtRtRtR# )r  iZ  zX
A font handling class for the STIX fonts (that uses sans-serif
characters by default).
Tr*   N)r@   rA   rB   rC   rD   r>  rF   r*   r0   r.   r  r  Z  s     Er0   r  ffffff?c                  s    ] tR tRt$ RtRtR]R&   RtR]R&   RtR]R	&   R
t	R]R&   Rt
R]R&   RtR]R&   RtR]R&   RtR]R&   RtR# )FontConstantsBasei  z
A set of constants that controls how certain things, such as sub-
and superscripts are laid out.  These are all metrics that can't
be reliably retrieved from the font metrics in the font itself.
皙?zT.ClassVar[float]script_spaceg?subdroprD  sup1333333?sub1      ?sub2g?delta皙?delta_slanted皙?delta_integralr*   N)r@   rA   rB   rC   rD   rG  rE   rH  rI  rK  rM  rN  rP  rR  rF   r*   r0   r.   rE  rE    so     '+L#* "%G$ "D
! "D
! "D
!  %E$
 (+M$* ),N%+r0   rE  c                  s6    ] tR tRtRtRtRtRtRtRt	Rt
RtRtR# )ComputerModernFontConstantsi  g333333?rO  g?rJ  r*   N)r@   rA   rB   rC   rG  rH  rI  rK  rM  rN  rP  rR  rF   r*   r0   r.   rS  rS    s*    LGDDDEMNr0   rS  c                  s.    ] tR tRtRtRtRtRtRtRt	Rt
R# )	STIXFontConstantsi  rQ  皙?333333?rF  rJ  r*   N)r@   rA   rB   rC   rG  rI  rM  rN  rP  rR  rF   r*   r0   r.   rT  rT    s     LDDEMNr0   rT  c                  s&    ] tR tRtRtRtRtRtRtR# )STIXSansFontConstantsi  rF  rU  rV  rJ  r*   N)	r@   rA   rB   rC   rG  rI  rP  rR  rF   r*   r0   r.   rW  rW    s    LDMNr0   rW  c                      ] tR tRtRtR# )DejaVuSerifFontConstantsi  r*   Nr@   rA   rB   rC   rF   r*   r0   r.   rY  rY        r0   rY  c                  rX  )DejaVuSansFontConstantsi  r*   NrZ  r*   r0   r.   r\  r\    r[  r0   r\  r8  r9  r6  r   r   r   r   r   r   r   r  r<  r  r  r  r  r  zBitstream Vera SanszBitstream Verac               r$   )r%   stateParserStater(   ztype[FontConstantsBase]r*   r+   r-   r.   r/   r/     s      + 2I r0   c                s    \         P                  V P                  P                  V P                  4      P
                  \        4      pV\        J d'   \        V P                  \        4      '       d   \        # V# rP   )_font_constant_mappingr   fontsetr   rX   r)  rE  rT  r  r  rW  )r]  	constantsr6   r.   _get_font_constant_setrb    sZ    &**

+779JLI 	&&u}}m44$$r0   c                  sV    ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	Rt
R# )Nodei  zA node in the TeX box model.c               rL   r%   r(   r   r*   r+   r-   r.   r/   Node.__annotate__  s      $ r0   c                	s    ^ V n         R# rg   Nr  rR      &r.   rT   ZNode.__init__  s	    	r0   c               rL   r%   r(   r'   r*   r+   r-   r.   r/   re    s     # ## #r0   c                	s,    \        V 4      P                  # rP   )typer@   rh  ri  r.   __repr__ZNode.__repr__  s    Dz"""r0   c               r$   r%   nextzNode | Noner(   r9   r*   r+   r-   r.   r/   re    s        r0   c                	    R # )r   r*   )rR   rn  rS   r.   r   ZNode.get_kerning  s    r0   c               rL   rd  r*   r+   r-   r.   r/   re    s       r0   c                s8    V ;P                   ^,          un         R# )zr
Shrinks one level smaller.  There are only three levels of
sizes, after which things will no longer get smaller.
Nrg  rh  ri  r.   shrinkZNode.shrink  s    
 			Q	r0   c               (    V ^8  d   QhRRRRRRRR/# r%   r   rK   r   r9   rq   r(   r   r*   r+   r-   r.   r/   re    s(        V    %  D  r0   c                r   )zRender this node.Nr*   rR   r   r   rq   r   r.   renderZNode.render  s    r0   rg  N)r@   rA   rB   rC   rD   rT   rl  r   rp  rt  rF   r*   r0   r.   rc  rc    s#    &#   r0   rc  c                  sP   a  ] tR tRtRtR V 3R lltR V 3R lltR R ltR	tV ;t	# )
rN   i  z A node with a physical location.c               r   )r%   r:   r9   r;   r<   r(   r   r*   r+   r-   r.   r/   Box.__annotate__  s(      e U 5 T r0   c                	sH   < \         SV `  4        Wn        W n        W0n        R # rP   )r   rT   r:   r;   r<   )rR   r:   r;   r<   r      &&&&r.   rT   ZBox.__init__  s    

r0   c               rL   rd  r*   r+   r-   r.   r/   ru    s     ) ) )r0   c                	s   < \         SV `  4        V P                  \        8  dZ   V ;P                  \
        ,          un        V ;P                  \
        ,          un        V ;P                  \
        ,          un        R # R # rP   )r   rp  r  NUM_SIZE_LEVELSr:   SHRINK_FACTORr;   r<   rR   r      &r.   rp  Z
Box.shrink  sH    99&JJ=(JKK=(KJJ=(J 'r0   c               r   r   r*   r+   r-   r.   r/   ru    s;      V #).49>Br0   c                	ro  rP   r*   r   r   r.   rt  Z
Box.render  s    r0   )r<   r;   r:   )
r@   rA   rB   rC   rD   rT   rp  rt  rF   r   r   r   r.   rN   rN     s$    * ) ) r0   rN   c                  2   a  ] tR tRtRtR V 3R lltRtV ;t# )Vboxi  z$A box with only height (zero width).c                    V ^8  d   QhRRRR/# )r%   r;   r9   r<   r*   r+   r-   r.   r/   ZVbox.__annotate__  s     , ,u ,U ,r0   c                	s(   < \         SV `  R W4       R# r   Nr   rT   )rR   r;   r<   r      &&&r.   rT   ZVbox.__init__  s    V+r0   r*   r@   rA   rB   rC   rD   rT   rF   r   r   r   r.   r|  r|    s    ., ,r0   r|  c                  r{  )Hboxi  z.A box with only width (zero height and depth).c               rL   r%   r:   r9   r*   r+   r-   r.   r/   ZHbox.__annotate__"  s     ( (e (r0   c                	s*   < \         SV `  VR R 4       R# r~  r  rR   r:   r      &&r.   rT   ZHbox.__init__"  s    B'r0   r*   r  r   r   r.   r  r    s    8( (r0   r  c                  s   a  ] tR tRtRtR V 3R lltR R ltR R ltR	 R
 ltR R lt	R R lt
R V 3R lltRtV ;t# )Chari&  a  
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               r$   )r%   r  r'   r]  r^  r*   r+   r-   r.   r/   Char.__annotate__3  s     
 
# 
k 
r0   c                	s   < \         SV `  4        Wn        VP                  V n        VP                  V n        VP
                  V n        VP                  V n        VP                  V n        V P                  4        R # rP   )	r   rT   r  r`  rX   r   rY   r   _update_metrics)rR   r  r]  r   r  r.   rT   ZChar.__init__3  sZ    }}JJ	**99 	r0   c               rL   rj  r*   r+   r-   r.   r/   r  ?  s      # r0   c                	(    R V P                   ,          # )z`%s`r  rh  ri  r.   rl  ZChar.__repr__?  s    r0   c               rL   rd  r*   r+   r-   r.   r/   r  B  s     9 9 9r0   c                	s   V P                   P                  V P                  V P                  V P                  V P
                  V P                  4      ;qn        V P                  R 8X  d   VP                  V n	        MVP                  V n	        VP                  V n        VP                  VP                  ,
          ) V n        R# Z N)r`  r   rX   r   r  rY   r   _metricsrt   r:   ro   r;   r<   rR   rh   r6   r.   r  ZChar._update_metricsB  s    "&,,":":IIttxx#I 	I-66S= DJ DJoo78
r0   c               rL   )r%   r(   rf   r*   r+   r-   r.   r/   r  L  s     % %D %r0   c                	s.    V P                   P                  # rP   )r  ru   rh  ri  r.   
is_slantedZChar.is_slantedL  s    }}$$$r0   c               r$   rm  r*   r+   r-   r.   r/   r  O  s        r0   c                s   V P                   P                  V P                  ,
          pRp\        V\        4      '       d~   V P
                  P                  V P                  V P                  V P                  V P                  VP                  VP                  VP                  VP                  V P                  4	      pW#,           # )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  rt   r:   r  r  r`  r   rX   r   r  rY   r   )rR   rn  rt   kernr   r.   r   ZChar.get_kerningO  s     --''$**4dD!!<<((		4??DFFDMM		4??DFFDMMD ~r0   c               rq  rr  r*   r+   r-   r.   r/   r  _  .     I IV I I% ID Ir0   c           
     	s    V P                   P                  WVV P                  V P                  V P                  V P
                  V P                  4       R # rP   )r`  r   rX   r   r  rY   r   rs  r   r.   rt  ZChar.render_  s9    !!qIIttxx	Ir0   c               rL   rd  r*   r+   r-   r.   r/   r  d  s     + + +r0   c                	s:  < \         SV `  4        V P                  \        8  dw   V ;P                  \
        ,          un        V ;P                  \
        ,          un        V ;P                  \
        ,          un        V ;P                  \
        ,          un        R # R # rP   )	r   rp  r  rw  rY   rx  r:   r;   r<   ry  rz  r.   rp  ZChar.shrinkd  sV    99&MM]*MJJ]*JKK]*KJJ]*J	 'r0   )
r  r  r<   r   rX   r   r`  rY   r;   r:   )r@   rA   rB   rC   rD   rT   rl  r  r  r   rt  rp  rF   r   r   r   r.   r  r  &  s6    

 
9% I
+ +r0   r  c                  sJ   a  ] tR tRtRtR R ltR V 3R lltR R ltR	tV ;t	# )
Accentim  z
The font metrics need to be dealt with differently for accents,
since they are already offset correctly from the baseline in
TrueType fonts.
c               rL   rd  r*   r+   r-   r.   r/   Accent.__annotate__s  s       r0   c                	sJ   V P                   P                  V P                  V P                  V P                  V P
                  V P                  4      ;qn        VP                  VP                  ,
          V n
        VP                  VP                  ,
          V n        ^ V n        R# rf  )r`  r   rX   r   r  rY   r   r  rl   ri   r:   rj   rm   r;   r<   r  r6   r.   r  ZAccent._update_metricss  sm    "&,,":":IIttxx#I 	I-\\GLL0
llW\\1
r0   c               rL   rd  r*   r+   r-   r.   r/   r  z  s       r0   c                	sD   < \         SV `  4        V P                  4        R # rP   )r   rp  r  ry  rz  r.   rp  ZAccent.shrinkz  s    r0   c               rq  rr  r*   r+   r-   r.   r/   r  ~  r  r0   c           
     	s   V P                   P                  WV P                  P                  ,
          W0P                  P                  ,           V P
                  V P                  V P                  V P                  V P                  4       R # rP   )
r`  r   r  ri   rm   rX   r   r  rY   r   rs  r   r.   rt  ZAccent.render~  sU    !!***A0B0B,BIIttxx	Ir0   )r  r<   r;   r:   )
r@   rA   rB   rC   rD   r  rp  rt  rF   r   r   r   r.   r  r  m  s#    
 I Ir0   r  c                  sb   a  ] tR tRtRtR V 3R lltR V 3R lltR R ltR	 V 3R
 lltRt	V ;t
# )Listi  z0A list of nodes (either horizontal or vertical).c               rL   )r%   elementsT.Sequence[Node]r*   r+   r-   r.   r/   List.__annotate__  s      !1 r0   c                	st   < \         SV `  R R R 4       R V n        . VOV n        R V n        ^ V n        ^ V n        R# r~  )r   rT   shift_amountchildrenglue_set	glue_sign
glue_orderrR   r  r   r  r.   rT   ZList.__init__  s<    R$#(r0   c               rL   rj  r*   r+   r-   r.   r/   r    s     9 9# 9r0   c                	s  < R P                  \        SV `	  4       V P                  V P                  V P
                  V P                  RP                  V P                   Uu. uF  p\        V4      NK  	  up4      4      # u upi )z/{}<w={:.02f} h={:.02f} d={:.02f} s={:.02f}>[{}]z, )
r,   r   rl  r:   r;   r<   r  joinr  Zrepr)rR   r   r      & r.   rl  ZList.__repr__  se    @GGGJJJJ))II61tAw67	9 	9 7s   A>c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r%   r   r9   signr)   totalszlist[float]
error_typer'   r(   r   r*   r+   r-   r.   r/   r    s8     D D5 D D[ D!D&*Dr0   c                	s  a \        V3R  l\        \        S4      4      RRR1,           4       ^ 4      ;V n        pW n        SV,          R8w  d   VSV,          ,          V n        M^ V n        RV n        V^ 8X  dK   \        V P                  4      '       d.   \        P                  RV\        V 4      P                  V 4       R# R# R# )c              3  sH   <"   T F  pSV,          ^ 8w  g   K  Vx  K  	  R# 5irf  r*   )r   r   r  r  r.   r   Z!List._set_glue.<locals>.<genexpr>  s     C01F1INQQ0s   "
"Nr   z	%s %s: %rrB  )rn  r@  r   r  r  r  
glue_ratior  r#  r$  rk  r@   )rR   r   r  r  r  r   s   &&&f& r.   	_set_glueZList._set_glue  s    "Cc&k*4R40CQH 	H! !9?q	MDMDN DO64==!!['d)<)<dD " r0   c               rL   rd  r*   r+   r-   r.   r/   r    s     / / /r0   c                	s  < V P                    F  pVP                  4        K  	  \        SV `  4        V P                  \        8  d=   V ;P
                  \        ,          un        V ;P                  \        ,          un        R # R # rP   )r  rp  r   r  rw  r  rx  r  )rR   Zchildr   r  r.   rp  ZList.shrink  sT    ]]ELLN #99&.MM.M 'r0   )r  r  r  r  r  r  )r@   rA   rB   rC   rD   rT   rl  r  rp  rF   r   r   r   r.   r  r    s*    : 9 9D / /r0   r  c                  sR   a  ] tR tRtRtR
R V 3R llltR R ltRR R lltR	tV ;t	# )Hlisti  zA horizontal list of boxes.c               (    V ^8  d   QhRRRRRRRR/# )	r%   r  r  r\   r9   r   "T.Literal['additional', 'exactly']do_kernrf   r*   r+   r-   r.   r/   Hlist.__annotate__  s+      !1 e 6r0   c                	sz   < \         SV `  V4       V'       d   V P                  4        V P                  W#R 7       R# ))r\   r   N)r   rT   r  hpack)rR   r  r\   r   r  r      &&&&&r.   rT   ZHlist.__init__  s,     	"IIK

Q
r0   c               rL   rd  r*   r+   r-   r.   r/   r    s     ) )d )r0   c                s   . p\        V P                  4      pV'       d   \        V4       F  pV P                  V,          pW2^,
          8  d   V P                  V^,           ,          pMRpVP                  V4       VP	                  V4      pVR8w  g   Kk  \        V4      pVP                  V4       K  	  Wn        R# R# )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.
Nr   )r   r  r@  r   r   Kern)rR   new_childrenZnum_childrenr   Zelemrn  Zkerning_distancer  s   &       r.   r  Z
Hlist.kern  s     4==)<(}}Q'a''==Q/DD##D)#'#3#3D#9 #r) 01D ''- ) )M r0   c               $    V ^8  d   QhRRRRRR/# )r%   r\   r9   r   r  r(   r   r*   r+   r-   r.   r/   r    s#     ?< ?<u ?<3?<GK?<r0   c                s   RpRpRpR.^,          pR.^,          pV P                    EF  p\        V\        4      '       d?   WXP                  ,          p\	        W8P
                  4      p\	        WHP                  4      pKX  \        V\        4      '       d   WXP                  ,          p\        P                  ! VP
                  4      '       gr   \        P                  ! VP                  4      '       gI   \        VRR4      p	\	        W8P
                  V	,
          4      p\	        WHP                  V	,           4      pEK  EK  EK  \        V\        4      '       dr   VP                  p
WZP                  ,          pWjP                  ;;,          V
P                  ,          uu&   WzP                  ;;,          V
P                   ,          uu&   EK  \        V\"        4      '       g   EK  WXP                  ,          pEK  	  W0n        W@n        VR8X  d	   W,          pWn        W,
          pVR8X  d   ^ V n        ^ V n        RV n        R# VR8  d   V P+                  V^VR4       R# V P+                  VRVR4       R# )a  
Compute the dimensions of the resulting boxes, and adjust the glue if
one of those dimensions is pre-specified.  The computed sizes normally
enclose all of the material inside the new box; but some items may
stick out if negative glue is used, if the box is overfull, or if a
``\vbox`` includes other boxes that have been shifted left.

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

Notes
-----
The defaults produce a box with the natural width of the contents.
r   r  
additionalNOverfulUnderfulrB  )r  r  r  r:   rk   r;   r<   rN   rV   isinfgetattrGlue	glue_specstretch_orderstretchshrink_orderrp  r  r  r  r  r  )rR   r\   r   r]   r^   r   total_stretchtotal_shrinkr  r  r  s   &&&        r.   r  ZHlist.hpack  s   0 qtaxA!T""WW88$77OAs##WWxx))"((1772C2C>26AAxx!|,AAww{+A 3D) At$$KK	__$556):K:KK6334	8H8HH4At$$WW# $ 
FA
E7DNDO DOr6NN1a	:NN1b,
;r0   )r  r<   r  r  r  r;   r:   )r   r  Tr   r  )
r@   rA   rB   rC   rD   rT   r  r  rF   r   r   r   r.   r  r    s    % )2?< ?<r0   r  c                  s`   a  ] tR tRtRtR
R V 3R llltRR]P                  3R R lltR	t	V ;t
# )Vlisti  zA vertical list of boxes.r   r  c               r  )r%   r  r  r]   r9   r   r  r*   r+   r-   r.   r/   Vlist.__annotate__  s#      !1 e 6r0   c                	sJ   < \         SV `  V4       V P                  W#R 7       R# ))r]   r   N)r   rT   vpack)rR   r  r]   r   r   rv  r.   rT   ZVlist.__init__  s    "

Q
r0   c               (    V ^8  d   QhRRRRRRRR/# )r%   r]   r9   r   r  r   r(   r   r*   r+   r-   r.   r/   r    s1     G< G<u G<3G<G<$(G<r0   c                st   RpRpRpR.^,          pR.^,          pV P                    EFx  p	\        V	\        4      '       dy   WeV	P                  ,           ,          pV	P                  p\
        P                  ! V	P                  4      '       g,   \        V	RR4      p
\        WIP                  V
,           4      pK  K  \        V	\        4      '       d|   We,          pRpV	P                  pWkP                  ,          pW{P                  ;;,          VP                  ,          uu&   WP                  ;;,          VP                  ,          uu&   EK#  \        V	\         4      '       d   WeV	P                  ,           ,          pRpEKW  \        V	\"        4      '       g   EKp  \%        R4      h	  W@n        WS8  d   WeV,
          ,          pW0n        MWPn        VR8X  d	   W,          pWn        W,
          pV^ 8X  d   ^ V n        ^ V n        RV n        R# VR8  d   V P-                  V^VR4       R# V P-                  VRVR4       R# )	a  
Compute the dimensions of the resulting boxes, and to adjust the glue
if one of those dimensions is pre-specified.

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

Notes
-----
The defaults produce a box with the natural height of the contents.
r   r  z1Internal mathtext error: Char node found in Vlistr  Nr  r  rB  )r  r  rN   r;   r<   rV   r  r:   r  rk   r  r  r  r  r  rp  r  r  RuntimeErrorr  r  r  r  )rR   r]   r   r   r\   r^   r   r  r  r  r  r     &&&&        r.   r  ZVlist.vpack  s   0 qtaxA!S!!\!GGxx((>26AAww{+A ) At$$KK	__$556):K:KK6334	8H8HH4At$$[ At$$"GI I% * 
5QJAJJFAE6DNDO DOr6NN1a	:NN1b,
;r0   )r<   r  r  r  r;   r:   r  )r@   rA   rB   rC   rD   rT   rV   infr  rF   r   r   r   r.   r  r    s+    # 
  #6BG< G<r0   r  c                  s>   a  ] tR tRtRtR V 3R lltR R ltRtV ;t# )Ruleih  a}  
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               r   )r%   r:   r9   r;   r<   r]  r^  r*   r+   r-   r.   r/   Rule.__annotate__s  s(     % %e %U %5 % %r0   c                	sJ   < \         SV `  WV4       VP                  V n        R # rP   )r   rT   r`  )rR   r:   r;   r<   r]  r   r  r.   rT   ZRule.__init__s  s    .}}r0   c               r   )
r%   r   rK   r   r9   rq   r\   r]   r(   r   r*   r+   r-   r.   r/   r  w  sC     D DV DD!D&+D05D:>Dr0   c                	sZ    V P                   P                  WW2V,           W5,           4       R # rP   )r`  r   )rR   r   r   rq   r\   r]   r   r.   rt  ZRule.renderw  s    ''1!eQUCr0   )r`  )	r@   rA   rB   rC   rD   rT   rt  rF   r   r   r   r.   r  r  h  s    % %D Dr0   r  c                  6   a  ] tR tRtRtRR V 3R llltRtV ;t# )Hrulei|  z.Convenience class to create a horizontal rule.c               r$   )r%   r]  r^  	thicknessfloat | Noner*   r+   r-   r.   r/   ZHrule.__annotate__  s     7 7k 7l 7r0   c                	s   < Vf   VP                  4       pVR,          ;r4\        SV `	  \        P                  W4V4       R # )NrL  get_current_underline_thicknessr   rT   rV   r  )rR   r]  r  r;   r<   r   r   r.   rT   ZHrule.__init__  s8    ==?I"S(6r0   r*   rP   r  r   r   r.   r  r  |  s    87 7 7r0   r  c                  r{  )Vrulei  z,Convenience class to create a vertical rule.c               rL   )r%   r]  r^  r*   r+   r-   r.   r/   ZVrule.__annotate__  s     ; ;k ;r0   c                	s   < VP                  4       p\        SV `	  V\        P                  \        P                  V4       R # rP   r  )rR   r]  r  r      && r.   rT   ZVrule.__init__  s,    99;	BFFBFFE:r0   r*   r  r   r   r.   r  r    s    6; ;r0   r  c                  sJ    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R	tR
# )	_GlueSpeci  r9   r:   r  r)   r  rp  r  r*   Nrx   r*   r0   r.   r  r    s    LNMr0   r  Zfilr         ?fillZfilllZneg_filZneg_fillZ	neg_filllZemptyssc                  sD   a  ] tR tRtRtR V 3R lltR V 3R lltRtV ;t# )r  i  z
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               rL   )r%   	glue_typez`_GlueSpec | T.Literal['fil', 'fill', 'filll', 'neg_fil', 'neg_fill', 'neg_filll', 'empty', 'ss']r*   r+   r-   r.   r/   Glue.__annotate__  s     # #A#r0   c                	s   < \         SV `  4        \        V\        4      '       d   \        P
                  V,          pM$\        V\        4      '       d   TpM\        R 4      hW n        R# )z.glue_type must be a glue spec name or instanceN)r   rT   r  r'   r  _namedr4   r  )rR   r  r  r   r  r.   rT   ZGlue.__init__  sP     	i%%!((3I	9--!IMNN"r0   c               rL   rd  r*   r+   r-   r.   r/   r    s     G G Gr0   c                	s   < \         SV `  4        V P                  \        8  d;   V P                  pVP                  VP                  \        ,          R 7      V n        R# R# )r:   N)r   rp  r  rw  r  Z_replacer:   rx  )rR   r  r   r  r.   rp  ZGlue.shrink  sB    99&AZZagg.EZFDN 'r0   )r  )	r@   rA   rB   rC   rD   rT   rp  rF   r   r   r   r.   r  r    s    # #G Gr0   r  c                  r{  )	HCenteredi  z`
A convenience class to create an `Hlist` whose contents are
centered within its enclosing box.
c               rL   r%   r  z
list[Node]r*   r+   r-   r.   r/   ZHCentered.__annotate__  s     M M Mr0   c                	sX   < \         SV `  \        R 4      .VO\        R 4      NRR7       R# )r  Fr  Nr   rT   r  r  r  r.   rT   ZHCentered.__init__  s*    $t*<x<d<eLr0   r*   r  r   r   r.   r  r    s    
M Mr0   r  c                  r{  )	VCenteredi  z_
A convenience class to create a `Vlist` whose contents are
centered within its enclosing box.
c               rL   r  r*   r+   r-   r.   r/   ZVCentered.__annotate__  s     > > >r0   c                	sT   < \         SV `  \        R 4      .VO\        R 4      N4       R# )r  Nr  r  r  r.   rT   ZVCentered.__init__  s%    $t*<x<d<=r0   r*   r  r   r   r.   r  r    s    
> >r0   r  c                  sX   a  ] tR tRtRt^ t^ tR V 3R lltR R ltR V 3R llt	R	t
V ;t# )
r  i  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.
c               rL   r  r*   r+   r-   r.   r/   Kern.__annotate__  s      e r0   c                	s0   < \         SV `  4        Wn        R # rP   )r   rT   r:   r  r  r.   rT   ZKern.__init__  s    
r0   c               rL   rj  r*   r+   r-   r.   r/   r    s     % %# %r0   c                	r  )zk%.02fr  rh  ri  r.   rl  ZKern.__repr__  s    $**$$r0   c               rL   rd  r*   r+   r-   r.   r/   r    s     ( ( (r0   c                	s   < \         SV `  4        V P                  \        8  d    V ;P                  \
        ,          un        R # R # rP   )r   rp  r  rw  r:   rx  ry  rz  r.   rp  ZKern.shrink  s,    99&JJ-'J 'r0   r  )r@   rA   rB   rC   rD   r;   r<   rT   rl  rp  rF   r   r   r   r.   r  r    s-     FE %( (r0   r  c                  r  )AutoHeightChari  a  
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               s0    V ^8  d   QhRRRRRRRRRR	R
R/# )r%   r  r'   r;   r9   r<   r]  r^  alwaysrf   factorr  r*   r+   r-   r.   r/   ZAutoHeightChar.__annotate__  s8     " "# "u "U "; ""/;"r0   c                	s  < VP                   P                  VP                  V4      pVP                   P                  VP                  VP                  VP
                  4      pVP                  4       pW#,           p	V FH  w  rWn        \        W4      pVP                  VP                  ,           V	R V,          ,
          8  g   KH   M	  RpVP                  ^ 8w  g   \        V4      ^8X  d`   Vf%   V	XP                  VP                  ,           ,          pV;P                  V,          un        \        XV4      pW<P                  ,
          p\        SV `1  X.4       Wn        R# )rO  r   N)r`  r   rX   r   rY   r   copyr  r;   r<   r   r   rT   r  )rR   r  r;   r<   r]  r  r  rC  r   Ztarget_totalr   r   r+  shiftr   s   &&&&&&&       r.   rT   ZAutoHeightChar.__init__  s   }}FFJJ --++JJ		3 

~)MH!J#D {{TZZ'<#-+GG * ::?c,/14~%tzz)ABNNf$NU#DZZ'E$ !r0   )r  )FNr  r   r   r.   r  r    s    " " "r0   r  c                  s:   a  ] tR tRtRtR]3R V 3R llltRtV ;t# )AutoWidthChari  z
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          
     r  )r%   r  r'   r:   r9   r]  r^  r  rf   
char_classz
type[Char]r*   r+   r-   r.   r/   ZAutoWidthChar.__annotate__  s0        #  e  K    ' r0   c                	sx  < VP                   P                  VP                  V4      pVP                  4       pV F&  w  rxWsn        V! W4      p	V	P                  V8  g   K&   M	  VX	P                  ,          p
V;P
                  V
,          un        V! XV4      p	\        SV `  V	.4       V	P                  V n        R # rP   )r`  r   rX   r  r:   rY   r   rT   )rR   r  r:   r]  r  r  rC  r   r   r+  r  r   s   &&&&&&     r.   rT   ZAutoWidthChar.__init__  s    }}FFJJ 

)MH!Jc)DzzU"	 * #& #u%$ ZZ
r0   r  )	r@   rA   rB   rC   rD   r  rT   rF   r   r   r   r.   r  r    s!     QV*.     r0   r  c               r  )r%   rM   rN   xyztuple[float, float]r(   rK   r*   r+   r-   r.   r/   r/   2  s'     P Pc P* P Pr0   c           	     s   aaaaaa	a
a Vw  r#RoRoVoW0P                   ,           o	\        V 4      o
R R loR VVVVVV	V
V3R lloR VVVVVV	V
V3R lloS! V 4       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               r}  )r%   valuer9   r(   r*   r+   r-   r.   r/   ship.<locals>.__annotate__C  s     I IU Iu Ir0   c                s*    V R8  d   R# V R 8  d   R # T # )g    eAg    er*   )r  ri  r.   clampZship.<locals>.clampC  s    t|tHH5Hr0   c               r$   )r%   rM   r  r(   r   r*   r+   r-   r.   r/   r  F  s     =$ =$u =$ =$r0   c                s  < ^ pRpV P                   pV P                  pSpSpV P                   EF  p\        V\        4      '       d7   VP                  SSS,           SS,           4       SVP                  ,          oKP  \        V\        4      '       d   SVP                  ,          oK{  \        V\        4      '       d   \        VP                  4      ^ 8X  d   SVP                  ,          oK  SpWWP                  ,           o\        V\        4      '       d
   S! V4       M\        V\        4      '       d	   S! V4       WP                  ,           oVoEK(  \        V\        4      '       d   VP                  p	VP                  p
VP                  p\         P"                  ! V	4      '       d   V P                  p	\         P"                  ! V
4      '       d   V P                  p
V	^ 8  d4   V^ 8  d-   WZ,           oVP                  SSS,           SS,           W4       VoSV,          oEK  \        V\$        4      '       g   EK  VP&                  pVP                  V,
          pV^ 8w  d   V^8X  dG   VP(                  V8X  d5   W,P*                  ,          p\-        S! V P.                  V,          4      4      pMEVP0                  V8X  d5   W,P2                  ,          p\-        S! V P.                  V,          4      4      pW,          pSV,          oEK  	  R# )rg   r   N)r  r  r  r  r  rt  r:   r  r  r   r  r  r  rN   r;   r<   rV   r  r  r  r  r  roundr  r  rp  )rM   cur_gcur_gluer  r  Z	base_line	left_edger  Zedgerule_height
rule_depth
rule_widthr  r  cur_hcur_v	hlist_outoff_hoff_vr   	vlist_out   &            r.   r  Zship.<locals>.hlist_outF  sG    ^^
MM			A!T""> At$$ At$$qzz?a'QWW$E D%6E!!U++!!#Au--!! !77NE%EAs##hhWW
WW
88K(("%**K88J''!$J?zA~%2EHHV"U]EEM'6 &E#At$$KK	&__u4
> A~$22j@$(9(99H$)%x0G*H$IE"//:= $4$44 %eCLL8,C&D E#
#g r0   c               r$   )r%   rM   r  r(   r   r*   r+   r-   r.   r/   r    s     9I 9Iu 9I 9Ir0   c                s  < ^ pRpV P                   pV P                  pSpSV P                  ,          oSpV P                   EF  p\	        V\
        4      '       d   SVP                  ,          oK/  \	        V\        4      '       d   \        VP                  4      ^ 8X  d'   SVP                  VP                  ,           ,          oK  SVP                  ,          oWWP                  ,           oSpV P                  Vn        \	        V\        4      '       d
   S! V4       M\	        V\        4      '       d	   S! V4       WP                  ,           oVoEK  \	        V\        4      '       d   VP                  p	VP                  p
VP                  p\        P                  ! V4      '       d   V P                  pW,          p	V	^ 8  d9   V
^ 8  d/   SV	,          oVP!                  SSS,           SS,           W4       EK  EK  EK  \	        V\"        4      '       d   VP$                  pVP                  V,
          p	V^ 8w  d   V^8X  dG   VP&                  V8X  d5   W,P(                  ,          p\+        S! V P,                  V,          4      4      pMEVP.                  V8X  d5   W,P0                  ,          p\+        S! V P,                  V,          4      4      pW,          p	SV	,          oEK  \	        V\2        4      '       g   EK  \5        R4      h	  R# )rg   r   z1Internal mathtext error: Char node found in vlistN)r  r  r;   r  r  r  r:   r  r   r<   r  r  r  rN   rV   r  rt  r  r  r  r  r  r  r  rp  r  r  )rM   r  r  r  r  r  Ztop_edger  Zsave_vr  r  r  r  r  r  r  r  r  r  r   r  r  r.   r  Zship.<locals>.vlist_out  sN    ^^
MM		A!T"" At$$qzz?a'QXX//EQXX%E%6E"F!iiAG!!U++!!#Au--!! #WW,E%EAs##hhWW
WW
88J''!$J)?zA~[(EHHV"U]EEM'6 (6?
 At$$KK	'oo5> A~$22j@$(9(99H$)%x0G*H$IE"//:= $4$44 %eCLL8,C&D E$$At$$"GI I[ r0   )r;   rK   )rM   r  rH   rI   r  r  r  r  r  r  r   r  s   &&  @@@@@@@@r.   rn   rn   2  s[     FBEEEOEC[FI=$ =$~9I 9Ix cNMr0   c               r$   )r%   msgr'   r(   r   r*   r+   r-   r.   r/   r/     s     1 1s 1} 1r0   c                sH   a  R V 3R llp\        4       P                  V4      # )z$Helper class to raise parser errors.c               r  	r%   r  r'   locr)   toksr   r(   T.Anyr*   r+   r-   r.   r/   ZError.<locals>.__annotate__  s(     / /s / /L /U /r0   c                s   < \        WS4      hrP   r   )r  r  r  r  r  r.   raise_errorZError.<locals>.raise_error  s    !!#..r0   )r   set_parse_action)r  r  s   f r.   Errorr    s"    / / 7##K00r0   c                  s~    ] tR tRtRtR R ltR R lt]R R l4       t]P                  R	 R
 l4       tR R lt
RtR# )r^  i  z
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          
     s,    V ^8  d   QhRRRRRRRRRR/# )	r%   r`  ry   rX   r'   r   rY   r9   r   r*   r+   r-   r.   r/   ParserState.__annotate__  s0       S c U r0   c                	sB    Wn         W n        W0n        W@n        WPn        R # rP   )r`  _fontr   rY   r   )rR   r`  rX   r   rY   r   r   r.   rT   ZParserState.__init__  s    
$ r0   c               rL   r%   r(   r^  r*   r+   r-   r.   r/   r    s      k r0   c                	s.    \         P                   ! V 4      # rP   )r  rh  ri  r.   r  ZParserState.copy  s    yyr0   c               rL   rj  r*   r+   r-   r.   r/   r    s      c r0   c                	    V P                   # rP   )r  rh  ri  r.   rX   ParserState.font  s    zzr0   c               r$   )r%   r  r'   r(   r   r*   r+   r-   r.   r/   r    s        r0   c                	s,    VR9   d   Wn         Wn        R# )r   N)r   r   r   r7  )r   r  )rR   r  rS   r.   rX   r    s    --"O
r0   c               rL   )r%   r(   r9   r*   r+   r-   r.   r/   r    s     0 0 0r0   c                sx    V P                   P                  V P                  V P                  V P                  4      # )z.Return the underline thickness for this state.)r`  r   rX   rY   r   rh  ri  r.   r  Z+ParserState.get_current_underline_thickness  s,    ||33IIt}}dhh0 	0r0   )r  r   r   r`  rY   N)r@   rA   rB   rC   rD   rT   r  ZpropertyrX   Zsetterr  rF   r*   r0   r.   r^  r^    sG       
[[ 
0 0r0   r^  c               s$    V ^8  d   QhRRRRRR/# )r%   exprr'   argsr   r(   r*   r+   r-   r.   r/   r/     s!     6 6c 6 6= 6r0   c                s   a R V3R lloV P                  R^4      ^ ,          pW8X  d&   VRP                  R S! V4       4       4      ,           MT pW!\        RV 24      ,          ,
          # )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               r$   )r%   eltr   r(   zT.Generator[str, None, None]r*   r+   r-   r.   r/   Zcmd.<locals>.__annotate__  s     " "= "%A "r0   c              3  s   <"   \        V \        4      '       d&   V P                   F  pS! V4       R j  xL
  K  	  R # V P                  '       d   V P                  x  R # R #  L.5irP   )r  r   ZexprsZresultsName)r  r  namesr  r.   r  Zcmd.<locals>.names  sK     c?++		 ;&& "___//!  's   1A%A#A%A%r    c              3  s4   "   T F  pR V,          x  K  	  R# 5i)z{%s}Nr*   )r   r  r6   r.   r   Zcmd.<locals>.<genexpr>  s     BkdFTMMks   z	Expected )r  r  r  )r  r  Zcsnamer5   r  s   &&  @r.   cmdr    sh    " " ZZQ"Fn BGGBeDkBBB"& EIcU"34455r0   c                  s  a ] tR tRtRt ! R R]P                  4      t]! RP                  4       4      t
]! RP                  4       4      t]! RP                  4       4      t]
],          ],          t]! RP                  4       4      t]! R	P                  4       4      t]! R
P                  4       4      t]! RP                  4       4      t]! RP                  4       4      t]! RP                  4       4      t]! RP                  4       4      t]! RP                  4       4      t]! RP                  4       4      t]],          ],          t]! ]! ]! R4      ]! R4      ^,           4       U u. uFE  p \4        P6                  ! \9        V 4      4      P                  4       R,          P;                  4       NKG  	  up 4      t]! ]P@                  4      t!R R lt"R R lt#R R lt$R R lt%R R lt&R R lt'R R  lt(R! R" lt)R# R$ lt*]+! ],PZ                  4      t.R% R& lt/R' R( lt0R)R*R+R*R,R*R-R.R/R.R0R1R2R3R4R3R5R6R7^R8^R9R/t1R: R; lt2R< R= lt3R> R? lt4R@ RA lt5/ RBRCbRDREbRFRGbRHRIbRJRKbRLRMbRNRObRPRQbRRRSbRTRUbRVRWbRXRQbRYRIbRZRKbR4RMbR[RObR\RCbR]R^R_R`RaRb/Ct6]! RcP                  4       4      t7Rd Re lt8Rf Rg lt9Rh Ri lt:Rj Rk lt;Rl Rm lt<Rn Ro lt=]=t>Rp Rq lt?Rr Rs lt@Rt Ru ltARv Rw ltBRx Ry ltCRz R{ ltDR| V3R} lltER~ R ltFR R ltGR R ltHR R ltIR R ltJR R ltKR R ltL]L;tMtNR R ltOR R ltPR R ltQR R ltRR R ltSR R ltTRtUV;tV# u up i )Parseri  z
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                  s&    ] tR tRt^ t^t^t^tRtR# )Parser._MathStylei  r*   N)	r@   rA   rB   rC   DISPLAYSTYLE	TEXTSTYLEZSCRIPTSTYLEZSCRIPTSCRIPTSTYLErF   r*   r0   r.   
_MathStyler	    s    	r0   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   ωc               rL   rd  r*   r+   r-   r.   r/   Parser.__annotate__  s     w2 w2$ w2r0   c                	s  a a \         P                  ! 4       oR  VV 3R llpR R lp\        R4      Sn        \	        S P
                  4      ! R4      Sn        \	        S P                   Uu. uF  p\        VP                  4      NK  	  up4      ! R4      Sn
        \        RRP                  R	P                  \        \        P                  \         4      4      4      ,           4      ! R
4      P#                  4       Sn        \        R4      ! R4      Sn        V! RS P(                  4      Sn        \-        R\	        S P(                  4      ! R4      ,           4      R,           Sn        \1        R4      Sn        \	        S P4                  4      Sn        \9        4       Sn        \9        4       Sn        \9        4       Sn        \9        4       Sn         \9        4       Sn!        \9        4       Sn"        S;P>                  SP<                  ,          un        V! 4        S;PB                  R\G        SPD                  4      ! R4      ,           R,           ,          un!        S;P@                  R\I        SPD                  4      ! R4      ,           R,           ,          un         \K        RRSP                  R4      ,           R,           4      Sn&        V! R. S PN                  OS PP                  O4      SP?                  R
4      ,
          Sn)        V! RS PT                  4      Sn+        SP.                  \G        SPD                  4      ! R4      ,           SP2                  ,           Sn,        SP.                  \G        SPD                  4      ! R4      ,           \[        4       ,           Sn.        \K        RSPA                  R4      SPA                  R4      ,           4      Sn/        \K        RSPA                  R4      SPA                  R4      ,           4      Sn0        \K        RSPA                  R4      SPA                  R4      ,           4      Sn1        \K        RR\-        SP6                  4      ! R4      ,           R,           R,           \-        SP6                  4      ! R4      ,           R,           R,           SP                  R4      ,           R,           R,           \-        SP                  4      ! R4      ,           R,           SPA                  R4      ,           SPA                  R4      ,           4      Sn2        \K        R\-        R\I        \g        R 4      SPD                  ,           4      ! R!4      ,           R ,           4      SPA                  R"4      ,           4      Sn4        \K        R#SPA                  R$4      4      Sn5        \K        R%SPC                  R&4      SPC                  R$4      ,           4      Sn6        \K        R'SPC                  R&4      SPC                  R$4      ,           4      Sn7        \K        R(\q        RR)RR*7      4      Sn9        \K        R+\u        RR\w        \I        SPD                  4      4      \G        \1        R,4      Py                  4       4      ,           R-7      ! R.4      4      Sn=        \-        SP<                  4      ! R/4      \I        \	        R0R1.4      SP<                  ,
          4      ! R24      ,           \        R34      ! R44      ,           \        R54      ! R44      ,          SP?                  R/4      \        R34      ! R44      ,           ,          Sn>        SP                  SPL                  ,          SP*                  ,          SP|                  ,          Sn?        S;PD                  SP~                  SP:                  ,          SP\                  ,          SP&                  ,          ,          un"        \K        R6R\G        SP~                  4      ! R4      ,           R,           4      Sn@        \K        R7R\G        SP~                  4      ! R"4      ,           R,           4      SnA        S;P<                  SPR                  SP$                  ,          SPV                  ,          SP                  ,          SPX                  ,          SP^                  ,          SP`                  ,          SPb                  ,          SPd                  ,          SPl                  ,          SPn                  ,          SPh                  ,          SPj                  ,          SPr                  ,          SP                  ,          SPz                  ,          ,          un        R8SP7                  R94      \        R:4      ,          ,
          pS;P:                  R;SP7                  R<4      \        R:4      ,          ,
          \G        SP~                  SP:                  ,          V,          4      ! R=4      ,           R>,           SP7                  R?4      \        R:4      ,          ,
          ,          un        \I        SPD                  4      SnC        \q        R@R)RARB7      SnD        \        RC4      P#                  4       SnE        SP                  \G        SP                  SP                  ,           4      ,           \[        4       ,           SnF        V! 4        SP                  S nG        SP                  S nH        RAS nI        RD# u upi )Ec               rL   rd  r*   r+   r-   r.   r/   %Parser.__init__.<locals>.__annotate__  s     
	A 
	AT 
	Ar0   c                 s  < \        S4      P                  4        Fe  w  rV P                  R 4      '       d   K  V R9  d   VP                  V 4       \	        SV 4      '       g   KJ  VP                  \        SV 4      4       Kg  	  R# )_N)token	placeable
auto_delim)Zvarsr   r'  Zset_namehasattrr  r  )r   r   r  rR   s     r.   set_names_and_parse_actionsZ4Parser.__init__.<locals>.set_names_and_parse_actions  sa     GMMO~~c** "FFS)tS)),,WT3-?@ ,r0   c               r  )r%   groupr'   r  zIterable[str]r(   r   r*   r+   r-   r.   r/   r    s!     	 	3 	} 	 	r0   c                s   . p. pV FD  pVR,          P                  4       '       d   VP                  V4       K3  VP                  V4       KF  	  \        RP                  T RP	                  \        \        P                  V4      4      V'       d   RMRRP	                  \        \        P                  V4      4      R7      4      # )r0  z<\\(?P<{group}>(?:{alpha})(?![A-Za-z]){additional}{nonalpha})|r  )r  Zalphar  ZnonalpharB  )Zisalphar   r   r,   r  rU   reescape)r  r  Zends_with_alphaZends_with_nonalphar     &&   r.   csnamesZ Parser.__init__.<locals>.csnames  s     O!#8##%%#**40&--d3	 
 OVV((3ryy/#BC&8sb XXc"))5G&HI	 W  r0   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  rX   z\mathr   r   r  z\hspaceaccentz\fracrZ   denz\dfracz\binomz\genfracldelimrdelimrulesizestylez\sqrt{value}r   r   rootr  z	\overlinebodyz\overset
annotationz	\undersetz\textr1   )Zend_quote_charz	\substackz\\)ZopenerZcloserZcontentpartsnucleusr  r  subsuperz'*apostrophesz'+z\operatornamez\boldsymbol\middlemdelimzExpected a delimiterz\leftleftr?  z\rightrightr   F)Zunquote_resultsz(?:(?:\\[$])|[^$])*N)JtypesZSimpleNamespacer   float_literalr   _space_widthsr  r  r'   r  r  r,   r  rU   r  r  r   Zleave_whitespacer&   unknown_symbol
_fontnamesrX   r   start_groupr   	end_group_delimsZdelimr   r  r  Z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   Zsuppresssubstackr(  Zsimpleoperatorname
boldsymbolr  mathmath_stringnon_mathmain_expression_math_expression_in_subscript_or_superscript)rR   r  r  r
  r+  r  s   f    @r.   rT   ZParser.__init__  sc   !!#
	A 
	A	" !!CD!$"4"45g>!#'??3?aS\?355DF !&--RYY0133

 
 "!# 	
 !08"64??;#Hvdoo/Fv/N$NORUU"3<!$,,/ %Y$Y$Y$Y$Y$Y 	
akk)#%	S:agg#6w#??#EE	S9QWW#5g#>>DDJaoog.F(F(LM HF 0 0F43E3EFG&' 	
 VT%9%9:
--*QWW"5g">>LMMJqww,?,HH9;Vh 0 0 7!:J:J5:Q QRi!1!1%!81;K;KE;R!RSi!1!1%!81;K;KE;R!RS(177#H--3QWW%h/0256OOJ/0256  Q__-g67 :== u%	&
 u%&'	 S9VC[177%:;FCCcIJw'()
 q'7'7'?@
\*Q-=-=f-EEG	 \*Q-=-=f-EEG
 X|CcJK&c#/4Yqww5G/H'1'&/2J2J2L'M0NOOVXY
 akk"9-c
+akk9::FGT{=)* Dk-()   +eDk-.HH	J 	

 77Q]]*QVV3ajj@	HHll 	
 -sZ5I&5Q/QTW/WXC*QXX"6w"??#EG 	
HHhh jj nn	
 gg ff gg gg ii	 ii
 jj ff jj ff ll  jj!	
( qwwx059O3PPQ	%0F*GGHALL069:5AB777+e4J.KKM	
 $AGG,&sD%H 67HHJ
JJAMMAJJ$>??)+M 	
 	$%66 ! -2)a 4s   +k=c          
     s,    V ^8  d   QhRRRRRRRRRR	/# )
r%   r  r'   fonts_objectry   rY   r9   r   r(   r  r*   r+   r-   r.   r/   r  i  s0     ( (s (% (5 (u (QV (r0   c                s~   \        VRRW44      .V n        / V n         V P                  P	                  V4      p. T n        RT n	        / T n        \        P                  ! 4        \        P                  ! \        T^ ,          4      #   \
         d.   p\        R\        P                  ! T^ 4      ,           4      RhRp?ii ; i)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   Z
NF)r^  _state_stack_em_width_cacherN  parse_stringr	   r4   r
   ZexplainrP  r   Zreset_cacher   r   r  )rR   r  rQ  rY   r   resultr5   s   &&&&&  r.   parseZParser.parsei  s     ixEGFH	N%%2215F ,1)!!!#vveVAY'' " 	NTN$:$:3$BBCM	Ns   B B<(B77B<c               rL   r  r*   r+   r-   r.   r/   r    s     % %; %r0   c                s(    V P                   R,          # )z&Get the current `State` of the parser.rB  )rR  rh  ri  r.   	get_stateZParser.get_state  s      $$r0   c               rL   rd  r*   r+   r-   r.   r/   r    s        4  r0   c                s:    V P                   P                  4        R# )zPop a `State` off of the stack.N)rR  Zpoprh  ri  r.   	pop_stateZParser.pop_state  s    r0   c               rL   rd  r*   r+   r-   r.   r/   r    s     : :D :r0   c                st    V P                   P                  V P                  4       P                  4       4       R# )z=Push a new `State` onto the stack, copying the current state.N)rR  r   rW  r  rh  ri  r.   
push_stateZParser.push_state  s&      !1!6!6!89r0   c               r$   )r%   r  r   r(   zlist[Hlist]r*   r+   r-   r.   r/   r    s     ' ' '+ 'r0   c                	s6    \        VP                  4       4      .# rP   )r  as_listrR   r  rS   r.   rM  ZParser.main  s    dlln%&&r0   c               r}  )r%   r  r   r(   r*   r+   r-   r.   r/   r    s     Q Q Q Qr0   c                	sP    V P                   P                  V^ ,          ^R RR7      # )rg   T)Z	parse_allrB  )rO  rT  r[  rS   r.   rK  ZParser.math_string  s(    $$11$q'!B-41PPr0   c               r$   r%   r  r   r(   r  r*   r+   r-   r.   r/   r    s       % r0   c                	sZ    \        VP                  4       4      pV P                  4        V.# rP   )r  rZ  rX  )rR   r  hlist   && r.   rJ  ZParser.math  s#    dlln%wr0   c               r$   r\  r*   r+   r-   r.   r/   r    s      \ e r0   c                	s   V^ ,          P                  RR4      pV Uu. uF  p\        W0P                  4       4      NK  	  pp\        V4      pV P	                  4        \
        P                  R,          V P                  4       n        V.# u upi )rg   z\$r   r   )Zreplacer  rW  r  rY  r   r   rX   )rR   r  r  r  Zsymbolsr]     &&    r.   rL  ZParser.non_math  sn    GOOE3'678a4>>+,a8g #-? @w 9s   "B
c               r$   r\  r*   r+   r-   r.   r/   r    s       % r0   c           	     	s    V P                  4        V P                  4       pR Vn        \        V^,           Uu. uF  p\	        W24      NK  	  up4      pV P                  4        V.# u upi )r   )rY  rW  rX   r  r  rX  )rR   r  r]  r  r]  r  r.   rF  ZParser.text  sV     
tAw7w!tA~w78w 8s   A&c               r$   )r%   
percentager9   r(   r  r*   r+   r-   r.   r/   r    s     ( (e ( (r0   c                	s   V P                  4       pVP                  VP                  VP                  3pV P                  P                  V4      pVfc   VP                  P                  R\        P                  R,          RVP                  VP                  4      pVP                  pW@P                  V&   \        WA,          4      # )Nr   r   r   )rW  rX   rY   r   rS  r   r`  r   r   r   rt   r  )rR   r`  r]  r   r:   rh   r_  r.   _make_spaceZParser._make_space  s      zz5>>5995$$((-=mm//cll#56		+G OOE(-  %E&''r0   \,gKqU?z
\thinspacez\/z\>g0Bxq?z\:z\;g%?z\ g1ZGU?r	  z\enspacerL  z\quadz\qquadz\!c               r$   r\  r*   r+   r-   r.   r/   r    s      , 5 r0   c                	s^    V P                   VR ,          ,          pV P                  V4      pV.# r  )r0  ra  )rR   r  rZ   rM   r   r.   r  ZParser.space  s-      g/s#ur0   c               r$   r\  r*   r+   r-   r.   r/   r    s     1 1 1 1r0   c                	s4    V P                  VR ,          4      .# rc  )ra  r[  rS   r.   r8  ZParser.customspace  s      g/00r0   c               r  )	r%   r  r'   r  r)   r  zParseResults | dict[str, str]r(   r  r*   r+   r-   r.   r/   r    s*     . . .# .2.7<.r0   c                	s   VR ,          pVR8X  d   Rp \        W@P                  4       4      pY@P                  9   d   \        R TRT RRR1,           4       R4      pT P                  '       gR   Y@P                  9   dE   \        TRT P                  4       4      ^ 8X  g!   TR0T P                  mT P                  m9   d   T.# \        T P                  R4      TT P                  R4      .R	R
7      .# Y@P                  9   d   \        R TRT RRR1,           4       R4      p\        R Y^,           R  4       R4      pTR8X  d   TR8X  d   TR8X  d   T.# TR8X  d0   TP                  4       '       d   TP                  4       '       d   T.# \        YPP                  R4      .R	R
7      .# T.#   \         d   p\        YRT,          4      ThRp?ii ; i)r   r  u   −zUnknown symbol: %sNc              3  6   "   T F  qR 8w  g   K  Vx  K  	  R# 5ir  r*   r   r  r6   r.   r    Parser.symbol.<locals>.<genexpr>       CAs(aa   
r  r   rO  Tr  c              3  rd  r  r*   re  r6   r.   r   rf    rg  rh  c              3  rd  r  r*   re  r6   r.   r   rf    s     AASaarh  r  r   r  rB  )r  rW  r4   r   _spaced_symbolsrn  rP  _binary_operatorsr   r  _left_delims_relation_symbolsr  ra  _punctuation_symbolsZisdigit)	rR   r  r  r  r  r+  r5   Z	prev_char	next_chars	   &&&&     r.   r&   ZParser.symbol  s   K8 !A	I>>+,D
 $$$ C4C2CRHI 111///$3(A-?J"//?J262H2H?J 2Jvt//4##//46 '+, - - +++C4C2CRHIA78A2FI Cx#	S(8 6M CxI--//I4E4E4G4Gvt%5%5c%:;TJKKvE  	I%a&:Q&>@EHI	Is   F- -G8GGc               r  r  r*   r+   r-   r.   r/   r  	  s.     M M M# M\ Me Mr0   c                	s.    \        WR VR,           24      h)zUnknown symbol: r  r  rR   r  r  r  r   r.   r1  ZParser.unknown_symbol	  s    !!,<T&\N*KLLr0   Zhatz\circumflexaccentZbrevez\combiningbreveZbarz\combiningoverlineZgravez\combininggraveaccentZacutez\combiningacuteaccentZtildez\combiningtildeZdotz\combiningdotaboveZddotz\combiningdiaeresisZdddotz\combiningthreedotsaboveZddddotz\combiningfourdotsaboveZvecz\combiningrightarrowabover   Z`r   r  r  Zoverrightarrowz\rightarrowZoverleftarrowz
\leftarrowmathringz\circzwidehat widetilde widebarc               r$   r\  r*   r+   r-   r.   r/   r  	  s      < E r0   c                	s0   V P                  4       pVP                  4       pVR ,          pVR,          pW@P                  9   d&   \        RV,           VP                  V\
        R7      pM\        V P                  V,          V4      pVR8X  d!   VP                  4        VP                  4        \        \        VP                  R,          4      V.4      pVP                  VP                  R4       \        V\        RVR,          4      \        V.4      .4      # )	r  r   r1   )r  rp  g      @exactlyr          @)rW  r  r:  r  r:   r  r9  rp  r  r  r  r  r|  r  )rR   r  r]  r  r  r   Z
accent_boxZcentereds   &&      r.   r  ZParser.accent	  s     99;	h5k'''&vsyy%FDJ   0 0 8%@JZd399s?3Z@Asyy),RS)se  	r0   c               r  r  r*   r+   r-   r.   r/   r  3	  s(      # C |  r0   c                	sF    V P                  WV4      pVR ,          Vn        V# )r  )rH  function_name)rR   r  r  r  r]  s   &&&& r.   r<  ZParser.function3	  s%    !!!$/"6lr0   c               r  r  r*   r+   r-   r.   r/   r  8	  s(     !! !!c !! !!< !!E !!r0   c                	s4   V P                  4        V P                  4       pR Vn        . pVR,          pV F  p\        V\        4      '       d+   R Vn        VP                  4        VP                  V4       KC  \        V\        4      '       d   VP                  \	        Wt4      4       Ku  VP                  V4       K  	  V\        V4      ,           ^,           p\        V\        4      '       d   V\        R4      ,          p\        R WR  4       R4      p	V P                  RR0,          p
W9  d:   W`P                  9  d*   WPP                  V P                  R,          4      .,          pV P                  4        V	R9   d	   R	V n        MR
V n        \#        V4      # )r   r  zoperatorname{}c              3  rd  r  r*   re  r6   r.   r   Z&Parser.operatorname.<locals>.<genexpr>K	  s     C%6s(!!%6rh  Nr  r  r  rb  TF>   r  r  )rY  rW  rX   r  r  r  r   r'   r   r   rn  r5  _overunder_functionsra  r0  rX  rP  r  )rR   r  r  r  r]  Z
hlist_listr  r  Znext_char_locrn  Z
delimitersrA  r.   rH  ZParser.operatorname8	  sN    
!#
F|A!T""!!#!!!$As##!!$q.1!!!$  c$i!+dL))S!122MCQ~%6CRH	\\S#J.
'555++D,>,>u,EFGGJ 
"04D-05D-Z  r0   c               r$   r\  r*   r+   r-   r.   r/   r  [	  s        r0   c                	s    V P                  4        VP                  R 4      '       d%   VP                  R 4      V P                  4       n        . # rX   )rY  r   rW  rX   r[  rS   r.   r3  ZParser.start_group[	  s8    88F$(HHV$4DNN!	r0   c               r$   r\  r*   r+   r-   r.   r/   r  b	  s      , 5 r0   c                	s>    \        VP                  R . 4      4      pV.# r  r  r   )rR   r  Zgrpr^  r.   r  ZParser.groupb	  s    DHHWb)*ur0   c               r$   r\  r*   r+   r-   r.   r/   r  f	  s     , ,< ,E ,r0   c                	s8    \        VP                  R . 4      4      # rv  rw  r[  rS   r.   r6  ZParser.required_groupf	  s    TXXgr*++r0   c               rL   )r%   r(   r  r*   r+   r-   r.   r/   r  k	  s      5 r0   c                	s&    V P                  4        . # rP   )rX  rh  ri  r.   r4  ZParser.end_groupk	  s    	r0   c               r  r  r*   r+   r-   r.   r/   r  o	  s(     = = =# =\ =e =r0   c                	s.    \        V\        V4      R 4      h)zExpected '}')r   r   ro  r   r.   r=  ZParser.unclosed_groupo	  s    !!SV^<<r0   c               r$   r\  r*   r+   r-   r.   r/   r  r	  s       % r0   c                	s>    VR ,          V P                  4       n        . # ru  )rW  rX   r[  rS   r.   rX   ZParser.fontr	  s     $V	r0   c               r$   r%   r'  rc  r(   rf   r*   r+   r-   r.   r/   r  v	  s      D T r0   c                	s    \        V\        4      '       d   VP                  V P                  9   # \        V\        4      '       d,   \        VR 4      '       d   VP                  V P                  9   # R# )rs  F)r  r  r  _overunder_symbolsr  r  rs  rt  rR   r'  rS   r.   is_overunderZParser.is_overunderv	  sW    gt$$99 7 777''GG_,M,M((D,E,EEEr0   c               r$   rx  r*   r+   r-   r.   r/   r  }	        $ 4 r0   c                	sd    \        V\        4      '       d   VP                  V P                  9   # R # F)r  r  r  _dropsub_symbolsrz  rS   r.   
is_dropsubZParser.is_dropsub}	  s'    gt$$99 5 555r0   c               r$   rx  r*   r+   r-   r.   r/   r  	  r|  r0   c                	sR    \        V\        4      '       d   VP                  4       # R # r}  )r  r  r  rz  rS   r.   r  ZParser.is_slanted	  s!    gt$$%%''r0   c               r  r  r*   r+   r-   r.   r/   r  	  s.     d d# dC d| d dr0   c           	     	s  < VP                  R \        ^ 4      4      pVP                  R. 4      p\        VP                  R. 4      4      pV'       g   V'       g   V# R;rxV'       d2   VvrpV	R8X  d   Ve   \        R4      hT
pK&  Ve   \        R4      hT
pK9  V P	                  4       pVP
                  P                  VP                  VP                  VP                  4      pVP
                  P                  VP                  VP                  VP                  4      pV'       do   Vf   \        . 4      p\        V4       F0  pVP                  P                  V P                  WRR/4      4       K2  	  VP!                  4        VP#                  4        V P%                  V4      '       Ed`   . pR	pVP&                  pVe'   VP)                  4        \+        VVP&                  4      pVe'   VP)                  4        \+        VVP&                  4      pVR
,          pVe<   \-        V.4      pVP#                  VR4       VP                  V\/        ^ V4      .4       \-        V.4      pVP#                  VR4       VP1                  V4       Ve`   \-        V.4      pVP#                  VR4       VP                  \/        ^ V4      V.4       VP2                  V,           VP4                  ,           p\7        V4      pVVn        \        V.4      pV.# Tp\;        V\        4      '       d   VP                  p\        V4      '       dz   \;        VR,          \<        4      '       d#   \;        VR,          \>        4      '       d   VRR pVR,          p\;        V\>        4      '       d   VP@                  PB                  Vn        \        VRR7      pM=\;        V\>        4      '       d   VP@                  PB                  Vn        \        V.4      p\E        V4      pVP2                  p^ pV PG                  V4      '       d   VP4                  pVPH                  V,          pVPH                  V,          pV PK                  V4      '       d   VVPH                  V,          ,          pVVPL                  VVR,          R
,          ,
          ,          ,          pV PG                  V4      '       dX   ^VPH                  ,          VPN                  ,
          V,          p^VPH                  ,          VPN                  ,           V,          pM^ pVf   \        \=        V4      \P        PR                  ! \T        V4      .4      pVP)                  4        V PG                  V4      '       d   VVPV                  V,          ,           pMVPX                  V,          pVVn        EMs\        \=        V4      V.4      pVP)                  4        V PG                  V4      '       d   VVPV                  V,          ,
          pMVPZ                  V,          pVf
   V) Vn        M\        \=        V4      V.4      p V P)                  4        V PG                  V4      '       d   VVPV                  V,          ,           pMVP\                  V,          pRV,          VVP4                  ,
          V P2                  V,
          ,
          ,
          p!V!R	8  d
   VV!,          p\7        V\=        VVP4                  ,
          V P2                  V,
          ,
          4      V .4      pVVn        V PG                  V4      '       g+   V;P&                  VP^                  V,          ,          un        VV.p"V P`                  '       d2   V"V Pc                  V Pd                  R,          4      .,          p"RV n0        \        V"4      pV.# )r'  r(  r)  Nr  zDouble subscriptzDouble superscriptr   r5  r         @rq  Fr  rr  rb  rB  i)3r   r  r   r   rW  r`  r   rX   rY   r   r   r  r@  r  extendr&   r  r  r{  r:   rp  rk   r  r|  r   r;   r<   r  r  r  r  r  r  rt   rb  r  rN  r  rP  rR  r   r   rc  rH  rK  rI  rM  rG  rP  ra  r0  )$rR   r  r  r  r'  r(  Znapostrophessubr   ZopZargr]  Zrule_thicknessr   r   vlistr  r:   vgapr]  vltrU  Z	last_charr  ra  Z	lc_heightZlc_baselineZ	superkernZsubkernr   Z
shift_downZshift_uprq   ZclrZspaced_nucleusr   s$   &&&&                               r.   r(  ZParser.subsuper	  s8   ((9d1g.88J+488M267N!)BhSy?-.@AA$-.BCC >>JJ		3--++JJ		3 }b	<(%%dkk!5):L&MN ) JJLKKM W%%EEMME E5;;/

E399-!C'D !5'*E9-eT!T]34wi(EKKy)LL!3%(E9-d1dmU34t+gmm;,C$CC5\F8O 	gu%%"++L<  |B/66"<#3T::#/#4L(,	i..&/&8&8&@&@IOL%8G'4(("+"4"4"<"<	WI&G +51	&&	??9%%#//K OOg-	//G+??9%%722I)11$w|b'88: ;Iy))y.$3347@A0&5569BC	  =
 tG}affT3&789AHHJy))(9+<+<w+FF
&^^g5
'ANtI./AHHJy))$y'8'87'BB$>>G3{"*4=#./
??9--!,y/@/@7/J!JJ!*'!9J^+!AGG+:0EFH8OH(QWW,J1FGH  ",y))GGy--77G '.q\,,,t//0B0B50IJKKN05D-~&xr0   c               s4    V ^8  d   QhRRRRRRRRRR	R
R	RR/# )r%   r  r'   r   ruler  r"  r  rZ   r  r  r(   r  r*   r+   r-   r.   r/   r  -
  s@     ( (s (C (| (J (("'(,1(r0   c           
     	s<   V P                  4       pVP                  4       p\        VP                  4       F#  p	VP	                  4        VP	                  4        K%  	  \        V.4      p
\        V.4      p\        VP                  VP                  4      pV
P                  VR 4       VP                  VR 4       \        V
\        ^ VR,          4      \        Ws4      \        ^ VR,          4      V.4      pVP                  P                  VP                  \        P                   R,          RVP"                  VP$                  4      pVP&                  VP(                  VP*                  ,           ^,          VR,          ,
          ,
          pWn        \/        V\1        VR,          4      .4      .pV'       g	   V'       d`   VR8X  d   RpVR8X  d   RpV P3                  V\4        P6                  ! \8        \:        \<        ,          \>        ,          ,          V4      V4      # V# )rq  rr  r   Z=r  r  r  ) rW  r  r@  r  rp  r  rk   r:   r  r  r|  r  r`  r   rX   r   r   rY   r   r;   rj   rm   r  r  r  _auto_sized_delimiterr   r   r*  rN   r  r'   )rR   r  r   r  r"  rZ   r  r]  r  r  ZcnumZcdenr:   r  rh   r  rU  s   &&&&&&&          r.   _genfracZParser._genfrac-
  s    99;	u{{#AJJLJJL $ ##CIIsyy)

5)$

5)$tAy3/U)Ay3/	  --++JJ%78, <<',,.!3c/"# #Y^ 4567V||--f./ffT#*s:J5K5;/=.46 6 r0   c               r$   r\  r*   r+   r-   r.   r/   r  W
  s     ; ;, ;5 ;r0   c                	sD    V P                  \        VR ,          4      4      # )r  )r  r)   r[  rS   r.   r  ZParser.style_literalW
  s    s4#89::r0   c               r$   r\  r*   r+   r-   r.   r/   r  Z
  s     & &L &U &r0   c           	     	s    V P                  VP                  R R4      VP                  RR4      VR,          VP                  RV P                  P                  4      VR,          VR,          4      # )r  r  r   r!  r"  rZ   r  )r  r   r  r  r[  rS   r.   rA  ZParser.genfracZ
  sZ    }}HHXr"DHHXr$:dhhw0I0IJKe& 	&r0   c               r$   r\  r*   r+   r-   r.   r/   r  `
  s     A A A% Ar0   c           	     	    V P                  R R V P                  4       P                  4       V P                  P                  VR,          VR,          4      # r  rZ   r  )r  rW  r  r  r  r[  rS   r.   r>  ZParser.frac`
  sE    }}DNN$DDFOO%%tE{DKA 	Ar0   c               r$   r\  r*   r+   r-   r.   r/   r  e
  s     D D, D5 Dr0   c           	     	r  r  )r  rW  r  r  r
  r[  rS   r.   r?  ZParser.dfrace
  sE    }}DNN$DDFOO(($u+tE{D 	Dr0   c               r$   r\  r*   r+   r-   r.   r/   r  j
  s     A A, A5 Ar0   c           	     	sr    V P                  R R^ V P                  P                  VR,          VR,          4      # )r   r   rZ   r  )r  r  r  r[  rS   r.   r@  ZParser.binomj
  s5    }}aOO%%tE{DKA 	Ar0   c               r  r  r*   r+   r-   r.   r/   r  o
  s(       3 l u r0   c                	s.   VR ,          pVR,          pV P                  4       P                  4       pVP                  4        \        V.4      p\        V.4      p\	        VP
                  VP
                  4      p	VP                  V	R4       VP                  V	R4       V^,          p
W^,           ,          R8X  dD   \        V\        ^ V
4      V.4      pVP                  VP                  ,           V
,           Vn        V# \        V\        ^ V
4      V.4      pV# )r%  r$  rq  Zu)rW  r  rp  r  rk   r:   r  r  r|  r<   r;   r  )rR   r  r  r  r%  r$  r  Zcentered_annotationZcentered_bodyr:   r  r  r  r.   _gensetZParser._genseto
  s   ,'
F|NN$DDF	'5!4&)'--}/B/BC!!%3E9-1}1W:Q# E "/!4!47J7Q7Q!QTX!XE  #Q E r0   c               r$   r\  r*   r+   r-   r.   r/   r  
  s     & & &% &r0   c                	s   VP                  R 4      pVR,          pV P                  4       pVP                  4       pVP                  VP                  ,
          VR,          ,           pVP
                  VP                  ,           p\        RWgVRR7      pVP                  VP                  ,
          pVP
                  VP                  ,           p\        \        ^V,          4      V\        ^V,          4      .4      p	\        \        V4      \        R4      V	.4      p
V
P                  WdP                  VP                  ,          R,          ,           RV4       V'       g    \        VP                   R,          R	R	4      pM+\        V4      pVP#                  4        VP#                  4        \        \        V.4      .4      pV) R
,          Vn        \        V\%        VP                   ) R,          4      VV
.4      pV.# )r#  r  g      @r   T)r  r  rq  rL  r   rV       @)r   rW  r  r;   r  r<   r  r  r  r  r  r  r  rY   r   rN   r:   rp  r  )rR   r  r#  r$  r]  r  r;   r<   ZcheckZpadded_body	rightsideZ
root_vlistr]  s   &&           r.   rB  ZParser.sqrt
  s   xxG} 99;	 t0009s?B

T...|VE$O 2 22e000 T!i-0$Q]8KLM5<f{CD	..599"<!NN!5	*
 u{{S("b1D;DKKMKKME4&M?+
#)'C-
zU[[L3./ 	" #
 wr0   c               r$   r\  r*   r+   r-   r.   r/   r  
  s      \ e r0   c                	s   VR ,          pV P                  4       pVP                  4       pVP                  VP                  ,
          VR,          ,           pVP                  VP                  ,           p\        \        V4      \        R4      \        V.4      .4      pVP                  WSP                  VP                  ,          R,          ,           RV4       \        V.4      pV.# )r$  r  r  rq  r  )rW  r  r;   r  r<   r  r  r  r  r  rY   r   )	rR   r  r$  r]  r  r;   r<   r  r]  s	   &&       r.   rC  ZParser.overline
  s    F| 99;	t0009s?B

T... 5<fudV}EF	 	..599"<!NN!5	* yk"wr0   c               r  )r%   frontr'   middlezlist[Box | Char | str]backr(   r  r*   r+   r-   r.   r/   r  
  s+     $ $3 $&<$$'$,1$r0   c           
     	s   V P                  4       p\        V4      '       Ed&   \        V Uu. uF'  p\        V\        4      '       d   K  VP
                  NK)  	  up4      p\        V Uu. uF'  p\        V\        4      '       d   K  VP                  NK)  	  up4      pR p\        V4       Fh  w  rV
R8X  g   K  \        P                  ! \        W)^,           ,          4      pVR8w  d   \        WWtVR7      W)^,           &   MVP                  V4       W) Kj  	  \        P                  ! \        \        \        ,          ,          V4      pM^ p^ pRp. p. pVR8w  d   VP                  \        WWtVR7      4       VP!                  V4       VR8w  d   VP                  \        W6WtVR7      4       \#        V4      pV# u upi u upi )Nr*  r  )r  r  )rW  r   rk   r  r'   r;   r<   Z	enumerater   r   r  Zremover*  rN   r  r   r  r  )rR   r  r  r  r]  r   r;   r<   r  ZidxZelr  Zmiddle_partr&  r]  s   &&&&           r.   r  ZParser._auto_sized_delimiter
  sf     v;;FMFq*Q:L(!((FMNF&K&Q
1c8J&KLEF$V,#sF7O4ACx*8 !5+HQw a( - &&cDj!16:KFEFKC<LLue6JL[!3;LLtU&IKe? NKs   F8	F8)F=F=c               r$   r\  r*   r+   r-   r.   r/   r  
  s      |  r0   c                	s    T P                  VR ,          RV9   d   VR,          P                  4       M. VR,          4      # )r,  r?  r-  )r  rZ  r[  rS   r.   r  ZParser.auto_delim
  s;    ))L%*d]DK!M	 	r0   c               r$   r\  r*   r+   r-   r.   r/   r  
  s      |  r0   c                	s   V P                  4        V P                  4       p. pVR ,          pV EF  p\        V\        4      '       dT   VP                  ^,          p\        V\
        4      '       d   RVn        VP                  4        VP                  V4       Km  \        V\
        4      '       d   RVn        VP                  V P                  9   g#   VP                  R,          V P                  9   d   RVn        VP                  4        VP                  4        VP                  V4       EK  VP                  V4       EK  	  V P                  4        \        V4      # )r  r   :r0  NNr7  )rY  rW  r  r  r  r  rX   r  r   r  _latin_alphabets_small_greekrX  )rR   r  r]  r]  r  r  r   s   &&     r.   rI  ZParser.boldsymbol
  s     G}A!U##JJqMa&&!AF%%'QAt$$CC400033r7d///#AF%%'!!#QQ! " 	U|r0   c               r$   r\  r*   r+   r-   r.   r/   r    s      \ e r0   c                	s   VR ,          pV P                  4       pVP                  4       pV^ ,           Uu. uF  p\        V4      NK  	  pp\        \	        R V4      4      p. pV F2  p	\        V	.4      p
V
P                  VR4       VP                  V
4       K4  	  \        V\        ^ V^,          4      .\        V4      ,          4       UUu. uF  pV F  pVNK  	  K  	  pppVR \        V4      p\        V.4      .pV# u upi u uppi )r&  c                r   rP   r  r  ri  r.   Z<lambda>Z!Parser.substack.<locals>.<lambda>  s    aggr0   rq  rB  )rW  r  r  rk   rU   r  r  r   Zzipr|  r   r  )rR   r  r&  r]  r  r   r]  Z	max_widthr  r  ZcpZpairr   Zstackr  rU  s   &&              r.   rG  ZParser.substack  s   W 99;	#(8,8aq8,-u56	CC5!BHHY	*LL  !aQ)?(@3u:(MN"NT S   N 	 " "IEl, -"s   D D)rS  rN  rP  rO  rR  rB  gKqUſ)Wr@   rA   rB   rC   rD   enumZEnumr  r  r  rj  rl  Z_arrow_symbolsri  rm  ry  rt  r~  r2  r;  Z_ambi_delimsrk  Z_right_delimsr5  r@  r2   r&  r  r%  r   r  stringZascii_lettersr  rT   rV  rW  rX  rY  rM  rK  rJ  rL  Zstaticmethodr   Zconvert_to_floatr/  rF  ra  r0  r  r8  r&   r1  r9  r:  r  r<  rH  r3  r  r6  r7  r4  r=  rX   r{  r  r  r(  r  r  rA  r>  r?  r@  r  rD  rE  rB  rC  r  r  rI  rG  rF   r   )r   r   s   0@r.   r  r    sJ   TYY  
0 %'36  5j  %uwk5(n  	0 
1N4 (*;;nLO7==?@  57
 >DDFGLRRTU 33857<J   !57$O
  //4uw8L  

%'L  

%'M ]*\9GS!?@ !?@1DFGF JK((Q0668<BBDFG HL 6//0w2r(,% :'Q
 !!1!B!BCM($ 	wwwwwwwwsqqxM
1.`M/- 	0 	3	
 	3 	- 	0 	1 	6 	5 	7 	1 	3 	3 	-  	0!" 	/#$ 	>=8)K. 4::<=M,
!!F, $N=

d dL(T;&A
D
A
@ ! Gh&P&$L4 QGs   'AMr  g      ))rg   rg   )urD   Z
__future__r    Zabcr  r  r   Zloggingr   r  r.  r&  r  Ztypingr   r   ZnumpyrV   Z	pyparsingr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Z
matplotlibr   r  r   Z_mathtext_datar   r   r   r   Zfont_managerr   r   r   Zft2fontr   r   r    r!   ZTYPE_CHECKINGZcollections.abcr"   r#   Zenable_packratZ	getLoggerr#  r7   r8   rA   rG   rK   rs   rv   ZABCry   ZABCMetar   r   r  r-  r1  r;  r   r  rx  rw  rE  rS  rT  rW  rY  r\  r_  rb  rc  rN   r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rn   r  r^  r  r  r*   r0   r.   <module>r     s   # 
     	 	      + + + + + +  D D < < : : ???(    ./,3* 3& / * ( / 85 85v* @z i!CGG i!XfIES[[ fIRgC- gCTA!= A!H&A,#++ &AR{ $k $p pfI B  !, !,H"3 ) - 	0 		/ 	
*/ , (	
 ) ) ( ) ) ) $ ' ( ( )  '!" '#& 2-) 0   .$ *,3 ,(3 (D+4 D+NIT I.)/3 )/Xc<D c<LO<D O<dD3 D(7D 7;D ;
  
9RQA.
9RQA.9RQA.9RQA.9RQA.9RQA.9RQA.9RQQ/		 G4 G8M M> >(4 (6%"U %"P E  :Pn1#0 #0L62W Wr0   