+
    it                      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 )formats   "t/Users/tonyclaw/.openclaw/workspace/skills/math-calculator/venv/lib/python3.14/site-packages/matplotlib/_mathtext.py__annotate__r/   /   s      c c     c                     \        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)ord	TypeErrorr   stripKeyError
ValueError)r(   errs   & r.   get_unicode_indexr9   /   sg    6{ v||D)** jMN	s!   
 ; AAAc                  N    ] 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.   r;   r;   E   s$     LML::22r0   r;   c                  X    ] 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.
r<   oxoyr=   r>   r?   r!   imager,   NrB   r,   r0   r.   rK   rK   [   s'     	IILMLOr0   rK   c                  >    ] 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-   s   "r.   r/   Output.__annotate__z   s     A AC Ar0   c                	.    Wn         . V n        . V n        R # NrR   r@   rA   )selfrR   s   &&r.   __init__Output.__init__z   s    ;=>@
r0   c                   V ^8  d   QhRR/# )r'   r*   r;   r,   )r-   s   "r.   r/   rT      s     0 0; 0r0   c                	,   \        \        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 rV   )mapnpceilrR   r=   r>   r?   r@   fontfontsizenumoffsetrA   r;   )rX   whdrL   rM   infogsx1y1x2y2rss   &            r.   	to_vectorOutput.to_vector   s    GGdhhnndhhootxx~~FHa #'++/"-,"$ yy$--22v7KL"- 	 / %)JJ0$.."" r627BG,$. 	 01!eQB//	/0s   -AD
$D
c                    V ^8  d   QhRRRR/# )r'   antialiasedboolr*   rK   r,   )r-   s   "r.   r/   rT      s     "5 "5 "5 "5r0   c               	"   \        . 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 )    )rq   )minr@   metricsxminrA   ymaxmaxxmaxyminrR   r?   r>   r!   r+   r^   r_   shipr`   draw_glyph_to_bitmapicebergglyphdraw_rect_filledrK   )rX   rq   rL   rM   rg   ri   rj   rk   rl   rw   r{   rz   rx   rd   re   rf   rN   shiftedr>   centerys   &$                   r.   	to_raster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	rW   N)	rC   rD   rE   rF   rG   rY   rn   r   rI   r,   r0   r.   rP   rP   r   s    A
0"5 "5r0   rP   c                  v    ] 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).
r<   advancer>   r=   rw   rz   r{   rx   r~   rr   slantedr,   NrB   r,   r0   r.   r   r      s6    ( NML
K
K
K
KNMr0   r   c                  ^    ] tR t^t$ R]R&   R]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   RtR# )FontInfor    r`   r<   ra   r)   postscript_namer   rv   r+   rb   r%   r   rc   r,   NrC   rD   rE   rF   rH   rI   r,   r0   r.   r   r      s'    
MO	HLMr0   r   c                      ] 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                    V ^8  d   QhRRRR/# r'   default_font_propr   load_glyph_flagsr#   r,   )r-   s   "r.   r/   Fonts.__annotate__   s     1 1. 1I 1r0   c                    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   )rX   r   r   s   &&&r.   rY   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	fontsize1r<   font2
fontclass2sym2	fontsize2dpir*   r,   )r-   s   "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,   )
rX   r   r   r   r   r   r   r   r   r   s
   &&&&&&&&&&r.   get_kernFonts.get_kern   s     r0   c                    V ^8  d   QhRRRR/# )r'   r`   r)   r*   r    r,   )r-   s   "r.   r/   r      s     " "c "g "r0   c                	    \         hrV   NotImplementedError)rX   r`   s   &&r.   	_get_font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'   r`   r)   
font_classsymra   r<   r   r*   r   r,   )r-   s   "r.   r/   r      s8     " "c "s " " ""!)"r0   c                	    \         hrV   r   )rX   r`   r   r   ra   r   s   &&&&&&r.   	_get_infoFonts._get_info       !!r0   c               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r'   r`   r)   r   r   ra   r<   r   r*   r   r,   )r-   s   "r.   r/   r      s8        3 % #.r0   c                @    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   rv   )rX   r`   r   r   ra   r   rg   s   &&&&&& r.   get_metricsFonts.get_metrics   s     2 ~~dsC||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'   outputrP   rL   r<   rM   r`   r)   r   r   ra   r   r*   Noner,   )r-   s   "r.   r/   r     sP     - -6 -u -% -s -!$-+.-:?-FK-PT-r0   c	                f    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)
rX   r   rL   rM   r`   r   r   ra   r   rg   s
   &&&&&&&&& r.   render_glyph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   rP   ri   r<   rj   rk   rl   r*   r   r,   )r-   s   "r.   r/   r   $  s;     . . .$.*/.5:.@E.JN.r0   c                @    VP                   P                  W#WE34       R# )z<
Draw a filled rectangle from (*x1*, *y1*) to (*x2*, *y2*).
N)rA   r   rX   r   ri   rj   rk   rl   s   &&&&&&r.   render_rect_filledFonts.render_rect_filled$  s    
 	RR,-r0   c               (    V ^8  d   QhRRRRRRRR/# r'   r`   r)   ra   r<   r   r*   r,   )r-   s   "r.   r/   r   +  s(     $ $ $u $5 $U $r0   c                    \        4       h)z6
Get the xheight for the given *font* and *fontsize*.
r   rX   r`   ra   r   s   &&&&r.   get_xheightFonts.get_xheight+  s     "##r0   c               (    V ^8  d   QhRRRRRRRR/# r   r,   )r-   s   "r.   r/   r   1  s)     $ $C $5 $u $QV $r0   c                    \        4       h)z~
Get the line thickness that matches the given font.  Used as a
base unit for drawing lines such as in a fraction or radical.
r   r   s   &&&&r.   get_underline_thickness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-   s   "r.   r/   r   8  s#     ! !# !/2!7L!r0   c                
    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,   rX   r   r   s   &&&r.   !get_sized_alternatives_for_symbol'Fonts.get_sized_alternatives_for_symbol8  s       r0   r   N)rC   rD   rE   rF   rG   rY   r   r   r   r   r   r   r   r   r   rI   r,   r0   r.   r   r      s>    1""8-.$$! !r0   r   c                     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                    V ^8  d   QhRRRR/# r   r,   )r-   s   "r.   r/   TruetypeFonts.__annotate__I  s     
. 
.. 
.I 
.r0   c                	  < \         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)
superrY   	functoolscacher   _fontsfontmapr   r   r   )rX   r   r   filenamedefault_font	__class__s   &&&  r.   rY   TruetypeFonts.__init__I  se    *="8-/D223)!-I!-Ir0   c                    V ^8  d   QhRRRR/# )r'   r`   z	str | intr*   r    r,   )r-   s   "r.   r/   r   U  s     , ,i ,G ,r0   c                	   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      # rV   )r   Tcastr)   r   getospathexistsr   r   lowerr    )rX   r`   basenamecached_fonts   &&  r.   r   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          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r'   r`   r    r   r%   ra   r<   r   r*   r,   )r-   s   "r.   r/   r   d  s1         #(r0   c                	    VP                   R 8X  d7   VP                  ^@,          ^,          V^,          V,          ^H,          ,           # R# )Cmex10r   )r   r>   )rX   r`   r   ra   r   s   &&&&&r.   _get_offset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-   s   "r.   r/   r   j  s*     " "3 "C "" 9"r0   c                	    \         hrV   r   )rX   r   r   r   s   &&&&r.   
_get_glyphTruetypeFonts._get_glyphj  r   r0   c               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r'   r   r)   r   r   ra   r<   r   r*   r   r,   )r-   s   "r.   r/   r   o  s8     
 
# 
3 
S 
E 

!)
r0   c                	   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      # ))flagsc              3  2   "   T F  q^@,          x  K  	  R# 5i)@   Nr,   ).0vals   & r.   	<genexpr>*TruetypeFonts._get_info.<locals>.<genexpr>u  s     !Ajs((js      )	r   r>   r=   rw   rz   r{   rx   r~   r   )r`   ra   r   rv   rb   r   rc   )r   set_size	load_charr   bboxr   r   linearHoriAdvancer>   r=   horiBearingYr   r   )rX   r   r   r   ra   r   r`   rb   r   r   rw   r{   rz   rx   rc   rv   s   &&&&&&          r.   r   TruetypeFonts._get_infoo  s    !__X3G7h$s*?*?@!Aejj!AD!!$x=++e3<<"$++"&&+f4
  00
 	
r0   c               (    V ^8  d   QhRRRRRRRR/# )r'   r   r)   ra   r<   r   r*   r,   )r-   s   "r.   r/   r     s(     
 
C 
5 
u 
 
r0   c                	6   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  get_sfnt_tabler   mplrcParamsr~   )rX   r   ra   r   r`   r  rv   r  s   &&&&    r.   r   TruetypeFonts.get_xheight  s    ~~h'h$""6*<&&#,,'9:CPG??"	?T)ho>#+Nr0   c               (    V ^8  d   QhRRRRRRRR/# r   r,   )r-   s   "r.   r/   r     s)     7 7C 75 7u 7QV 7r0   c                	0    RV,          V,          R,          # )g      ?g      R@g      ?r,   r   s   &&&&r.   r   %TruetypeFonts.get_underline_thickness  s     (3.$66r0   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   r,   )r-   s   "r.   r/   r     sd     	I 	Ic 	Is 	I# 	I% 	I	I),	I47	IDI	I	I %	Ir0   c
                	  < 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   r`   get_kerningrb   r"   DEFAULTr   r   )rX   r   r   r   r   r   r   r   r   r   info1info2r`   r   s   &&&&&&&&&&   r.   r   TruetypeFonts.get_kern  s     >i4NN5dsKENN5dsKE::D##EIIuyy'//JROOw4 %4CI 	Ir0   )r   r   r   )rC   rD   rE   rF   rG   rY   r   r   r   r   r   r   r   rI   __classcell__r   s   @r.   r   r   C  s<    

. 
.,"

>
7	I 	Ir0   r   )	metaclassc                    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                    V ^8  d   QhRRRR/# r   r,   )r-   s   "r.   r/   BakomaFonts.__annotate__  s     ) ). )I )r0   c                	   < \        W4      V n        \        SV `  W4       V P                  P                  4        F,  w  r4\        V4      pWPP                  V&   WPP                  V&   K.  	  R # rV   )	StixFonts_stix_fallbackr   rY   _fontmapitemsr   r   )rX   r   r   keyr  fullpathr   s   &&&   r.   rY   BakomaFonts.__init__  sY    '(9L*=++-HC}H (LL (LL .r0   
\int \ointc               (    V ^8  d   QhRRRRRRRR/# r   r,   )r-   s   "r.   r/   r4    s0     M M3 MC MM 9Mr0   c                	   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   lenr3   get_char_indexr7  r   )rX   r   r   r   r`   r   rb   r   s   &&&&    r.   r   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               $    V ^8  d   QhRRRRRR/# r   r,   )r-   s   "r.   r/   r4    s(     C C# C/2C7LCr0   c                	>    V P                   P                  W!V3.4      # rV   )_size_alternativesr   r   s   &&&r.   r   -BakomaFonts.get_sized_alternatives_for_symbol  s     &&**3C0ABBr0   )r7  ))r'  rD  )r1     ¡)r1     ³)r1     µ)r1     Ã))r'  rE  )r1     ¢)r1     ´)r1     ¶)r1  !))r%  rF  )r1     ©)r1  n)r1     ½)r1  rD  ))r%  rG  )r1     ª)r1  o)r1     ¾)r1  rE  ))r'  rH  )r1     £)r1  re   )r1  "))r'  rI  )r1     ¤)r1  i)r1  #))r1     ¥)r1  j)r1     ¹)r1  $))r1     ¦)r1  k)r1     º)r1  %))r1     §)r1  l)r1     »)r1  &))r1     ¨)r1  m)r1     ¼)r1  'r1  D))r1     ­ru  )r1     ¿)r1  *r1  E))r1     ®rz  )r1     À)r1  +))r1  p)r1  q)r1  r)r1  s))r1     ²)r1  rK  )r1     Â)r1  -))r'  rK  )r1     ±)r1  .)r1     Ë)r1  ,))r'  ^)r1  b)r1  c)r1  rf   ))r'  ~)r1  e)r1  f)r1  g)r%  re   )r%  rc  )
)z
\leftparenrD  )z\rightparenrE  )z
\leftbracerF  )z\rightbracerG  )z\leftbracketrH  )z\rightbracketrI  )\{rF  )\}rG  )\[rH  )\]rI  )rC   rD   rE   rF   rG   r8  rY   setsplitr@  r   rP  aliastargetr   rI   r   r!  s   @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                     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                    V ^8  d   QhRRRR/# r   r,   )r-   s   "r.   r/   UnicodeFonts.__annotate__*  s     !. !.. !.I !.r0   c                	  < \         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.fallbackstixstixsanscmNzcal rm tt it bf sf bfitz	mathtext.r2  r1  STIXGeneralSTIXSizeOneSymSTIXSizeTwoSymSTIXSizeThreeSymSTIXSizeFourSymSTIXSizeFiveSym)r  r  r6  StixSansFontsr$  r   _fallback_fontr   rY   r  r   r   r   
isinstancer9  )rX   r   r   fallback_rcfont_clstexfontpropr`   stixsizedaltfontssizenamer;  r   s   &&&         r.   rY   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-   s   "r.   r/   r  O  s*     " "# "3 "$'",;"r0   c                	    W3# rV   r,   )rX   r   r   r  s   &&&&r.   _map_virtual_fontUnicodeFonts._map_virtual_fontO  s    !!r0   c               (    V ^8  d   QhRRRRRRRR/# r   r,   )r-   s   "r.   r/   r  S  s*     =' ='3 ='C ='=' 9='r0   c                	    \        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)T?Fz!No TeX to Unicode mapping for %a.r+  r  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   )r9   r7   r3   _logwarningr  chrunicodedatacategoryr  
startswithr@  r   _cmr10_substitutionsfamily_namer   r   _get_data_pathrB  r  r  r6  r   listr$  r8  valuesrg   )rX   r   r   r   r  found_symbolnew_fontnamecharr   r`   
glyphindexr  familys   &&&&         r.   r   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               $    V ^8  d   QhRRRRRR/# r   r,   )r-   s   "r.   r/   r    s#     ! !# !/2!7L!r0   c                	d    V P                   '       d   V P                   P                  W4      # W3.# rV   )r  r   r   s   &&&r.   r   .UnicodeFonts.get_sized_alternatives_for_symbol  s5    &&HH   r0   )r  )rC   rD   rE   rF   rG   r  rY   r  r  r@  r  r   r   rI   r   r!  s   @r.   r  r    sR    	 	
!. !.F =..01"='~! !r0   r  c                  J   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]r8  c                    V ^8  d   QhRRRR/# r   r,   )r-   s   "r.   r/   DejaVuFonts.__annotate__  s     * *. *I *r0   c                	   \        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  DejaVuSerifFontsr6  r  r  r$  bakomar   rY   r8  updater9  r   r   rX   r   r   r:  r  r;  s   &&&   r.   rY   DejaVuFonts.__init__  s    d,--"+,="PD"/0A"TD!"3Ft8HI!  
 	 ,,.IC~H (LL!)LL /r0   c               (    V ^8  d   QhRRRRRRRR/# r   r,   )r-   s   "r.   r/   r    s0     A A3 AC AA 9Ar0   c                	   < 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      # )\primer1  )r  r   r9   r   rB  r   )rX   r   r   r   r  r`   r  r   s   &&&&   r.   r   DejaVuFonts._get_glyph  s     );;))(DD )-H>>$'D!00:
? 7-dJDD7%hC@@r0   )r  r  )
rC   rD   rE   rF   r8  rH   rY   r   rI   r   r!  s   @r.   r  r    s    %'H"'**A Ar0   r  c                  >    ] 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# )r  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 Monor1  zDejaVu Serif Displayr,   NrC   rD   rE   rF   rG   r8  rI   r,   r0   r.   r  r    s=     	n#(*m $	n	Hr0   r  c                  >    ] 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'  r  r+  zDejaVu Sans:italicr-  zDejaVu Sans:weight=boldr  zDejaVu Sans:italic:boldr/  r)  r  r1  zDejaVu Sans Displayr,   Nr  r,   r0   r.   r  r    s=     	m"')m #	m	Hr0   r  c                      ] 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# )!r6  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=boldr  zSTIXGeneral:italic:boldnonunirmSTIXNonUnicodenonuniitzSTIXNonUnicode:italicnonunibfzSTIXNonUnicode:weight=boldr  r  r  r  r  r  r8  NFc                    V ^8  d   QhRRRR/# r   r,   )r-   s   "r.   r/   StixFonts.__annotate__  s     * *. *I *r0   c                	    \         P                  WV4       V P                  P                  4        F,  w  r4\	        V4      pWPP
                  V&   WPP
                  V&   K.  	  R # rV   )r   rY   r8  r9  r   r   r  s   &&&   r.   rY   StixFonts.__init__  sM    t8HI,,.IC~H (LL!)LL /r0   c               (    V ^8  d   QhRRRRRRRR/# r  r,   )r-   s   "r.   r/   r    s*     4" 4"# 4"3 4"$'4",;4"r0   c                	@   \         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  nonuni)r   r   )r'  r+  )r+  r'  r-  r  )r   r   _sansr  dictr6   r  rA  r  r  r   )rX   r   r   r  font_mappingdoing_sans_conversionmappinglohimidranges   &&&&       r.   r  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               $    V ^8  d   QhRRRRRR/# )r'   r   r)   r   r*   z-list[tuple[str, str]] | list[tuple[int, str]]r,   )r-   s   "r.   r/   r  C  s)        Gr0   c                	@   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  rF  r  rG  r  rH  r  rI  rL  u   ⟨rM  u   ⟩rJ  N)r   r9   r7   r  r   rB  r  )rX   r   r   fixesr  rc  alternativess   &&&    r.   r   +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,   )rC   rD   rE   rF   rG   r8  rH   r  r  rY   r  r   r   r   rI   r,   r0   r.   r6  r6    s    
 	m"')$+0	=					&H"  NE*4"l __ r0   r6  c                      ] 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)rC   rD   rE   rF   rG   r  rI   r,   r0   r.   r  r  Z  s     Er0   r  ffffff?c                      ] 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?subdropr  sup1333333?sub1      ?sub2g?delta皙?delta_slanted皙?delta_integralr,   N)rC   rD   rE   rF   rG   r	  rH   r
  r  r  r  r  r  r  rI   r,   r0   r.   r  r    so     '+L#* "%G$ "D
! "D
! "D
!  %E$
 (+M$* ),N%+r0   r  c                  6    ] 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?r  g?r  r,   N)rC   rD   rE   rF   r	  r
  r  r  r  r  r  r  rI   r,   r0   r.   r  r    s*    LGDDDEMNr0   r  c                  .    ] tR tRtRtRtRtRtRtRt	Rt
R# )	STIXFontConstantsi  r  皙?333333?r  r  r,   N)rC   rD   rE   rF   r	  r  r  r  r  r  rI   r,   r0   r.   r  r    s     LDDEMNr0   r  c                  &    ] tR tRtRtRtRtRtRtR# )STIXSansFontConstantsi  r  r  r  r  r,   N)	rC   rD   rE   rF   r	  r  r  r  rI   r,   r0   r.   r  r    s    LDMNr0   r  c                      ] tR tRtRtR# )DejaVuSerifFontConstantsi  r,   NrC   rD   rE   rF   rI   r,   r0   r.   r  r        r0   r  c                      ] tR tRtRtR# )DejaVuSansFontConstantsi  r,   Nr  r,   r0   r.   r"  r"    r   r0   r"  r  r  r  r.  r2  r,  r(  r0  r&  r*  r  r  r  r  r  r  r  zBitstream Vera SanszBitstream Verac                    V ^8  d   QhRRRR/# )r'   stateParserStater*   ztype[FontConstantsBase]r,   )r-   s   "r.   r/   r/     s      + 2I r0   c                    \         P                  V P                  P                  V P                  4      P
                  \        4      pV\        J d'   \        V P                  \        4      '       d   \        # V# rV   )_font_constant_mappingr   fontsetr   r`   r  r  r  r  r  r  )r$  	constantss   & r.   _get_font_constant_setr*    sZ    &**

+779JLI 	&&u}}m44$$r0   c                  V    ] 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                   V ^8  d   QhRR/# r'   r*   r   r,   )r-   s   "r.   r/   Node.__annotate__  s      $ r0   c                	    ^ V n         R# rt   Nr  rX   s   &r.   rY   Node.__init__  s	    	r0   c                   V ^8  d   QhRR/# r'   r*   r)   r,   )r-   s   "r.   r/   r/    s     # ## #r0   c                	,    \        V 4      P                  # rV   )typerC   r3  s   &r.   __repr__Node.__repr__  s    Dz"""r0   c                    V ^8  d   QhRRRR/# r'   nextzNode | Noner*   r<   r,   )r-   s   "r.   r/   r/    s        r0   c                	    R # )r   r,   )rX   r=  s   &&r.   r  Node.get_kerning  s    r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r/    s       r0   c                8    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.
Nr2  r3  s   &r.   shrinkNode.shrink  s    
 			Q	r0   c               (    V ^8  d   QhRRRRRRRR/# r'   r   rP   r  r<   r   r*   r   r,   )r-   s   "r.   r/   r/    s(        V    %  D  r0   c                    R# )zRender this node.Nr,   rX   r   r  r   s   &&&&r.   renderNode.render  s    r0   r2  N)rC   rD   rE   rF   rG   rY   r9  r  rB  rH  rI   r,   r0   r.   r,  r,    s#    &#   r0   r,  c                  P   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	# )
rS   i  z A node with a physical location.c               (    V ^8  d   QhRRRRRRRR/# )r'   r=   r<   r>   r?   r*   r   r,   )r-   s   "r.   r/   Box.__annotate__  s(      e U 5 T r0   c                	H   < \         SV `  4        Wn        W n        W0n        R # rV   )r   rY   r=   r>   r?   )rX   r=   r>   r?   r   s   &&&&r.   rY   Box.__init__  s    

r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   rL    s     ) ) )r0   c                	   < \         SV `  4        V P                  \        8  dZ   V ;P                  \
        ,          un        V ;P                  \
        ,          un        V ;P                  \
        ,          un        R # R # rV   )r   rB  r  NUM_SIZE_LEVELSr=   SHRINK_FACTORr>   r?   rX   r   s   &r.   rB  
Box.shrink  sH    99&JJ=(JKK=(KJJ=(J 'r0   c               0    V ^8  d   QhRRRRRRRRRRRR	/# r   r,   )r-   s   "r.   r/   rL    s;      V #).49>Br0   c                	    R # rV   r,   r   s   &&&&&&r.   rH  
Box.render  s    r0   )r?   r>   r=   )
rC   rD   rE   rF   rG   rY   rB  rH  rI   r   r!  s   @r.   rS   rS     s$    * ) ) r0   rS   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>   r<   r?   r,   )r-   s   "r.   r/   Vbox.__annotate__  s     , ,u ,U ,r0   c                	(   < \         SV `  R W4       R# r   Nr   rY   )rX   r>   r?   r   s   &&&r.   rY   Vbox.__init__  s    V+r0   r,   rC   rD   rE   rF   rG   rY   rI   r   r!  s   @r.   rY  rY    s    ., ,r0   rY  c                  2   a  ] tR tRtRtR V 3R lltRtV ;t# )Hboxi  z.A box with only width (zero height and depth).c                   V ^8  d   QhRR/# r'   r=   r<   r,   )r-   s   "r.   r/   Hbox.__annotate__"  s     ( (e (r0   c                	*   < \         SV `  VR R 4       R# r]  r^  rX   r=   r   s   &&r.   rY   Hbox.__init__"  s    B'r0   r,   r`  r!  s   @r.   rb  rb    s    8( (r0   rb  c                     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                    V ^8  d   QhRRRR/# )r'   r  r)   r$  r%  r,   )r-   s   "r.   r/   Char.__annotate__3  s     
 
# 
k 
r0   c                	   < \         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 # rV   )	r   rY   r  r(  r`   r   ra   r   _update_metrics)rX   r  r$  r   s   &&&r.   rY   Char.__init__3  sZ    }}JJ	**99 	r0   c                   V ^8  d   QhRR/# r6  r,   )r-   s   "r.   r/   rl  ?  s      # r0   c                	(    R V P                   ,          # )z`%s`r  r3  s   &r.   r9  Char.__repr__?  s    r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   rl  B  s     9 9 9r0   c                	   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#  N)r(  r   r`   r   r  ra   r   _metricsr   r=   r~   r>   r?   rX   rv   s   & r.   rn  Char._update_metricsB  s    "&,,":":IIttxx#I 	I-66S= DJ DJoo78
r0   c                   V ^8  d   QhRR/# )r'   r*   rr   r,   )r-   s   "r.   r/   rl  L  s     % %D %r0   c                	.    V P                   P                  # rV   )rx  r   r3  s   &r.   
is_slantedChar.is_slantedL  s    }}$$$r0   c                    V ^8  d   QhRRRR/# r<  r,   )r-   s   "r.   r/   rl  O  s        r0   c                   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   )rx  r   r=   r  rj  r(  r   r`   r   r  ra   r   )rX   r=  r   kerns   &&  r.   r  Char.get_kerningO  s     --''$**4dD!!<<((		4??DFFDMM		4??DFFDMMD ~r0   c               (    V ^8  d   QhRRRRRRRR/# rE  r,   )r-   s   "r.   r/   rl  _  .     I IV I I% ID Ir0   c           
     	    V P                   P                  WVV P                  V P                  V P                  V P
                  V P                  4       R # rV   )r(  r   r`   r   r  ra   r   rG  s   &&&&r.   rH  Char.render_  s9    !!qIIttxx	Ir0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   rl  d  s     + + +r0   c                	:  < \         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 # rV   )	r   rB  r  rQ  ra   rR  r=   r>   r?   rS  s   &r.   rB  Char.shrinkd  sV    99&MM]*MJJ]*JKK]*KJJ]*J	 'r0   )
rx  r  r?   r   r`   r   r(  ra   r>   r=   )rC   rD   rE   rF   rG   rY   r9  rn  r}  r  rH  rB  rI   r   r!  s   @r.   rj  rj  &  s6    

 
9% I
+ +r0   rj  c                  J   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                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   Accent.__annotate__s  s       r0   c                	J   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# r1  )r(  r   r`   r   r  ra   r   rx  rz   rw   r=   rx   r{   r>   r?   ry  s   & r.   rn  Accent._update_metricss  sm    "&,,":":IIttxx#I 	I-\\GLL0
llW\\1
r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r  z  s       r0   c                	D   < \         SV `  4        V P                  4        R # rV   )r   rB  rn  rS  s   &r.   rB  Accent.shrinkz  s    r0   c               (    V ^8  d   QhRRRRRRRR/# rE  r,   )r-   s   "r.   r/   r  ~  r  r0   c           
     	   V P                   P                  WV P                  P                  ,
          W0P                  P                  ,           V P
                  V P                  V P                  V P                  V P                  4       R # rV   )
r(  r   rx  rw   r{   r`   r   r  ra   r   rG  s   &&&&r.   rH  Accent.render~  sU    !!***A0B0B,BIIttxx	Ir0   )rx  r?   r>   r=   )
rC   rD   rE   rF   rG   rn  rB  rH  rI   r   r!  s   @r.   r  r  m  s#    
 I Ir0   r  c                  b   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                   V ^8  d   QhRR/# )r'   elementsT.Sequence[Node]r,   )r-   s   "r.   r/   List.__annotate__  s      !1 r0   c                	t   < \         SV `  R R R 4       R V n        . VOV n        R V n        ^ V n        ^ V n        R# r]  )r   rY   shift_amountchildrenglue_set	glue_sign
glue_orderrX   r  r   s   &&r.   rY   List.__init__  s<    R$#(r0   c                   V ^8  d   QhRR/# r6  r,   )r-   s   "r.   r/   r    s     9 9# 9r0   c                	  < 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   r9  r=   r>   r?   r  joinr  repr)rX   r  r   s   & r.   r9  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  r<   signr+   totalszlist[float]
error_typer)   r*   r   r,   )r-   s   "r.   r/   r    s8     D D5 D D[ D!D&*Dr0   c                	  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  H   <"   T F  pSV,          ^ 8w  g   K  Vx  K  	  R# 5ir1  r,   )r  rc  r  s   & r.   r  !List._set_glue.<locals>.<genexpr>  s     C01F1INQQ0s   "
"Nr   z	%s %s: %rr   )r=  r  rA  r  r  r  
glue_ratior  r  r  r8  rC   )rX   r  r  r  r  r^  s   &&&f& r.   	_set_glueList._set_glue  s    "Cc&k*4R40CQH 	H! !9?q	MDMDN DO64==!!['d)<)<dD " r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r    s     / / /r0   c                	  < 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 # rV   )r  rB  r   r  rQ  r  rR  r  )rX   childr   s   & r.   rB  List.shrink  sT    ]]ELLN #99&.MM.M 'r0   )r  r  r  r  r  r  )rC   rD   rE   rF   rG   rY   r9  r  rB  rI   r   r!  s   @r.   r  r    s*    : 9 9D / /r0   r  c                  R   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  rd   r<   rr  "T.Literal['additional', 'exactly']do_kernrr   r,   )r-   s   "r.   r/   Hlist.__annotate__  s+      !1 e 6r0   c                	z   < \         SV `  V4       V'       d   V P                  4        V P                  W#R 7       R# ))rd   rr  N)r   rY   r  hpack)rX   r  rd   rr  r  r   s   &&&&&r.   rY   Hlist.__init__  s,     	"IIK

Q
r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r    s     ) )d )r0   c                   . 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   )rA  r  r  r   r  Kern)rX   new_childrennum_childrenrc  elemr=  kerning_distancer  s   &       r.   r  
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'   rd   r<   rr  r  r*   r   r,   )r-   s   "r.   r/   r    s#     ?< ?<u ?<3?<GK?<r0   c                   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Underfulr   )r  r  rj  r=   ry   r>   r?   rS   r^   isinfgetattrGlue	glue_specstretch_orderstretchshrink_orderrB  r  r  r  r  r  )rX   rd   rr  re   rf   r  total_stretchtotal_shrinkr  r  r  s   &&&        r.   r  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  )
rC   rD   rE   rF   rG   rY   r  r  rI   r   r!  s   @r.   r  r    s    % )2?< ?<r0   r  c                  `   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               $    V ^8  d   QhRRRRRR/# )r'   r  r  re   r<   rr  r  r,   )r-   s   "r.   r/   Vlist.__annotate__  s#      !1 e 6r0   c                	J   < \         SV `  V4       V P                  W#R 7       R# ))re   rr  N)r   rY   vpack)rX   r  re   rr  r   s   &&&&r.   rY   Vlist.__init__  s    "

Q
r0   c               (    V ^8  d   QhRRRRRRRR/# )r'   re   r<   rr  r  rn  r*   r   r,   )r-   s   "r.   r/   r    s1     G< G<u G<3G<G<$(G<r0   c                t   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  r   )r  r  rS   r>   r?   r^   r  r=   r  ry   r  r  r  r  r  rB  r  rj  RuntimeErrorr  r  r  r  )rX   re   rr  rn  rd   rf   r  r  r  r  r  r  s   &&&&        r.   r  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  )rC   rD   rE   rF   rG   rY   r^   infr  rI   r   r!  s   @r.   r  r    s+    # 
  #6BG< G<r0   r  c                  >   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               (    V ^8  d   QhRRRRRRRR/# )r'   r=   r<   r>   r?   r$  r%  r,   )r-   s   "r.   r/   Rule.__annotate__s  s(     % %e %U %5 % %r0   c                	J   < \         SV `  WV4       VP                  V n        R # rV   )r   rY   r(  )rX   r=   r>   r?   r$  r   s   &&&&&r.   rY   Rule.__init__s  s    .}}r0   c               0    V ^8  d   QhRRRRRRRRRRRR	/# )
r'   r   rP   r  r<   r   rd   re   r*   r   r,   )r-   s   "r.   r/   r  w  sC     D DV DD!D&+D05D:>Dr0   c                	Z    V P                   P                  WW2V,           W5,           4       R # rV   )r(  r   )rX   r   r  r   rd   re   s   &&&&&&r.   rH  Rule.renderw  s    ''1!eQUCr0   )r(  )	rC   rD   rE   rF   rG   rY   rH  rI   r   r!  s   @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                    V ^8  d   QhRRRR/# )r'   r$  r%  	thicknessfloat | Noner,   )r-   s   "r.   r/   Hrule.__annotate__  s     7 7k 7l 7r0   c                	   < Vf   VP                  4       pVR,          ;r4\        SV `	  \        P                  W4V4       R # )Nr  get_current_underline_thicknessr   rY   r^   r  )rX   r$  r  r>   r?   r   s   &&&  r.   rY   Hrule.__init__  s8    ==?I"S(6r0   r,   rV   r`  r!  s   @r.   r  r  |  s    87 7 7r0   r  c                  2   a  ] tR tRtRtR V 3R lltRtV ;t# )Vrulei  z,Convenience class to create a vertical rule.c                   V ^8  d   QhRR/# )r'   r$  r%  r,   )r-   s   "r.   r/   Vrule.__annotate__  s     ; ;k ;r0   c                	   < VP                  4       p\        SV `	  V\        P                  \        P                  V4       R # rV   r  )rX   r$  r  r   s   && r.   rY   Vrule.__init__  s,    99;	BFFBFFE:r0   r,   r`  r!  s   @r.   r  r    s    6; ;r0   r  c                  J    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R	tR
# )	_GlueSpeci  r<   r=   r  r+   r  rB  r  r,   Nr   r,   r0   r.   r  r    s    LNMr0   r  filr         ?fillfilllneg_filneg_fill	neg_filllemptyssc                  D   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                   V ^8  d   QhRR/# )r'   	glue_typez`_GlueSpec | T.Literal['fil', 'fill', 'filll', 'neg_fil', 'neg_fill', 'neg_filll', 'empty', 'ss']r,   )r-   s   "r.   r/   Glue.__annotate__  s     # #A#r0   c                	   < \         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   rY   r  r)   r  _namedr7   r  )rX   r
  r  r   s   && r.   rY   Glue.__init__  sP     	i%%!((3I	9--!IMNN"r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r    s     G G Gr0   c                	   < \         SV `  4        V P                  \        8  d;   V P                  pVP                  VP                  \        ,          R 7      V n        R# R# )r=   N)r   rB  r  rQ  r  _replacer=   rR  )rX   r  r   s   & r.   rB  Glue.shrink  sB    99&AZZagg.EZFDN 'r0   )r  )	rC   rD   rE   rF   rG   rY   rB  rI   r   r!  s   @r.   r  r    s    # #G Gr0   r  c                  2   a  ] tR tRtRtR V 3R lltRtV ;t# )	HCenteredi  z`
A convenience class to create an `Hlist` whose contents are
centered within its enclosing box.
c                   V ^8  d   QhRR/# r'   r  z
list[Node]r,   )r-   s   "r.   r/   HCentered.__annotate__  s     M M Mr0   c                	X   < \         SV `  \        R 4      .VO\        R 4      NRR7       R# )r  Fr  Nr   rY   r  r  s   &&r.   rY   HCentered.__init__  s*    $t*<x<d<eLr0   r,   r`  r!  s   @r.   r  r    s    
M Mr0   r  c                  2   a  ] tR tRtRtR V 3R lltRtV ;t# )	VCenteredi  z_
A convenience class to create a `Vlist` whose contents are
centered within its enclosing box.
c                   V ^8  d   QhRR/# r  r,   )r-   s   "r.   r/   VCentered.__annotate__  s     > > >r0   c                	T   < \         SV `  \        R 4      .VO\        R 4      N4       R# )r  Nr  r  s   &&r.   rY   VCentered.__init__  s%    $t*<x<d<=r0   r,   r`  r!  s   @r.   r  r    s    
> >r0   r  c                  X   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                   V ^8  d   QhRR/# rd  r,   )r-   s   "r.   r/   Kern.__annotate__  s      e r0   c                	0   < \         SV `  4        Wn        R # rV   )r   rY   r=   rg  s   &&r.   rY   Kern.__init__  s    
r0   c                   V ^8  d   QhRR/# r6  r,   )r-   s   "r.   r/   r%    s     % %# %r0   c                	(    R V P                   ,          # )zk%.02fr  r3  s   &r.   r9  Kern.__repr__  s    $**$$r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r%    s     ( ( (r0   c                	   < \         SV `  4        V P                  \        8  d    V ;P                  \
        ,          un        R # R # rV   )r   rB  r  rQ  r=   rR  rS  s   &r.   rB  Kern.shrink  s,    99&JJ-'J 'r0   r  )rC   rD   rE   rF   rG   r>   r?   rY   r9  rB  rI   r   r!  s   @r.   r  r    s-     FE %( (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# )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               0    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%  alwaysrr   factorr  r,   )r-   s   "r.   r/   AutoHeightChar.__annotate__  s8     " "# "u "U "; ""/;"r0   c                	  < 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# )r  r   N)r(  r   r`   r   ra   r   copyrj  r>   r?   rA  r   rY   r  )rX   r  r>   r?   r$  r1  r2  r  r  target_totalr   r   r  shiftr   s   &&&&&&&       r.   rY   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!  s   @r.   r/  r/    s    " " "r0   r/  c                  :   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          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r'   r  r)   r=   r<   r$  r%  r1  rr   
char_classz
type[Char]r,   )r-   s   "r.   r/   AutoWidthChar.__annotate__  s0        #  e  K    ' r0   c                	x  < 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 # rV   )r(  r   r`   r5  r=   ra   r   rY   )rX   r  r=   r$  r1  r<  r  r   r   r  r2  r   s   &&&&&&     r.   rY   AutoWidthChar.__init__  s    }}FFJJ 

)MH!Jc)DzzU"	 * #& #u%$ ZZ
r0   r  )	rC   rD   rE   rF   rG   rj  rY   rI   r   r!  s   @r.   r:  r:    s!     QV*.     r0   r:  c               $    V ^8  d   QhRRRRRR/# )r'   rR   rS   xyztuple[float, float]r*   rP   r,   )r-   s   "r.   r/   r/   2  s'     P Pc P* P Pr0   c           	        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\        V \        4      '       g   Q h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                    V ^8  d   QhRRRR/# )r'   valuer<   r*   r,   )r-   s   "r.   r/   ship.<locals>.__annotate__C  s     I IU Iu Ir0   c                *    V R8  d   R# V R 8  d   R # T # )g    eAg    er,   )rD  s   &r.   clampship.<locals>.clampC  s    t|tHH5Hr0   c                    V ^8  d   QhRRRR/# )r'   rR   r  r*   r   r,   )r-   s   "r.   r/   rE  F  s     =$ =$u =$ =$r0   c                .  < ^ 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       MQ R4       hWP                  ,           oVoEK0  \        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# )rt   r   unreachable codeN)r  r  r  r  rj  rH  r=   r  r  rA  r  r  r  rS   r>   r?   r^   r  r  r  r  r  roundr  r  rB  )rR   cur_gcur_gluer  r  	base_line	left_edger  edgerule_height
rule_depth
rule_widthr  rG  cur_hcur_v	hlist_outoff_hoff_vr   	vlist_outs   &            r.   rW  ship.<locals>.hlist_outF  sP    ^^
MM			A!T""> At$$ At$$qzz?a'QWW$E D%6E!!U++!!#Au--!!8&88u 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                    V ^8  d   QhRRRR/# )r'   rR   r  r*   r   r,   )r-   s   "r.   r/   rE    s     9I 9Iu 9I 9Ir0   c                   < ^ 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       MQ R4       h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# )rt   r   rK  z1Internal mathtext error: Char node found in vlistN)r  r  r>   r  r  r  r=   r  rA  r?   r  r  r  rS   r^   r  rH  r  r  r  r  rL  r  r  rB  rj  r  )rR   rM  rN  r  r  rP  top_edger  save_vrR  rS  rT  r  rG  rU  rV  rW  rX  rY  r   rZ  s   &            r.   rZ  ship.<locals>.vlist_out  sW    ^^
MM		A!T"" At$$qzz?a'QXX//EQXX%E%6E"F!iiAG!!U++!!#Au--!!8&88u"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>   rP   r  r  )rR   rA  rL   rM   rG  rU  rV  rW  rX  rY  r   rZ  s   &&  @@@@@@@@r.   r|   r|   2  sn     FBEEEOEC[FI=$ =$~9I 9Iv c5!!!!cNMr0   c                    V ^8  d   QhRRRR/# )r'   msgr)   r*   r   r,   )r-   s   "r.   r/   r/     s     1 1s 1} 1r0   c                H   a  R V 3R llp\        4       P                  V4      # )z$Helper class to raise parser errors.c               (    V ^8  d   QhRRRRRRRR/# 	r'   r  r)   locr+   toksr   r*   T.Anyr,   )r-   s   "r.   r/   Error.<locals>.__annotate__  s(     / /s / /L /U /r0   c                   < \        WS4      hrV   r   )r  rf  rg  rb  s   &&&r.   raise_errorError.<locals>.raise_error  s    !!#..r0   )r   set_parse_action)rb  rl  s   f r.   Errorro    s"    / / 7##K00r0   c                  ~    ] 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          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r'   r(  r   r`   r)   r   ra   r<   r   r,   )r-   s   "r.   r/   ParserState.__annotate__  s0       S c U r0   c                	B    Wn         W n        W0n        W@n        WPn        R # rV   )r(  _fontr   ra   r   )rX   r(  r`   r   ra   r   s   &&&&&&r.   rY   ParserState.__init__  s    
$ r0   c                   V ^8  d   QhRR/# r'   r*   r%  r,   )r-   s   "r.   r/   rr    s      k r0   c                	.    \         P                   ! V 4      # rV   )r5  r3  s   &r.   r5  ParserState.copy  s    yyr0   c                   V ^8  d   QhRR/# r6  r,   )r-   s   "r.   r/   rr    s      c r0   c                	    V P                   # rV   )rt  r3  s   &r.   r`   ParserState.font  s    zzr0   c                    V ^8  d   QhRRRR/# )r'   r  r)   r*   r   r,   )r-   s   "r.   r/   rr    s        r0   c                	,    VR9   d   Wn         Wn        R# )r'  N)r'  r+  r-  r  )r   rt  )rX   r  s   &&r.   r`   r|    s    --"O
r0   c                   V ^8  d   QhRR/# )r'   r*   r<   r,   )r-   s   "r.   r/   rr    s     0 0 0r0   c                x    V P                   P                  V P                  V P                  V P                  4      # )z.Return the underline thickness for this state.)r(  r   r`   ra   r   r3  s   &r.   r  +ParserState.get_current_underline_thickness  s,    ||33IIt}}dhh0 	0r0   )rt  r   r   r(  ra   N)rC   rD   rE   rF   rG   rY   r5  propertyr`   setterr  rI   r,   r0   r.   r%  r%    sG       
[[ 
0 0r0   r%  c               $    V ^8  d   QhRRRRRR/# )r'   exprr)   argsr   r*   r,   )r-   s   "r.   r/   r/     s!     6 6c 6 6= 6r0   c                   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                    V ^8  d   QhRRRR/# )r'   eltr   r*   zT.Generator[str, None, None]r,   )r-   s   "r.   r/   cmd.<locals>.__annotate__  s     " "= "%A "r0   c              3     <"   \        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rV   )r  r   exprsresultsName)r  r  namess   & r.   r  cmd.<locals>.names  sK     c?++		 ;&& "___//!  's   1A%A#A%A%rF   c              3  4   "   T F  pR V,          x  K  	  R# 5i)z{%s}Nr,   )r  r  s   & r.   r  cmd.<locals>.<genexpr>  s     BkdFTMMks   z	Expected )r  r  ro  )r  r  csnamer8   r  s   &&  @r.   cmdr    sh    " " ZZQ"Fn BGGBeDkBBB"& EIcU"34455r0   c                    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                  &    ] tR tRt^ t^t^t^tRtR# )Parser._MathStylei  r,   N)	rC   rD   rE   rF   DISPLAYSTYLE	TEXTSTYLESCRIPTSTYLESCRIPTSCRIPTSTYLErI   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                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   Parser.__annotate__  s     w2 w2$ w2r0   c                	  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                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   %Parser.__init__.<locals>.__annotate__  s     
	A 
	AT 
	Ar0   c                   < \        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)varsr9  r  set_namehasattrrn  r  )r:  r  r  rX   s     r.   set_names_and_parse_actions4Parser.__init__.<locals>.set_names_and_parse_actions  sa     GMMO~~c** "FFS)tS)),,WT3-?@ ,r0   c               $    V ^8  d   QhRRRRRR/# )r'   groupr)   r  zIterable[str]r*   r   r,   )r-   s   "r.   r/   r    s!     	 	3 	} 	 	r0   c                   . 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      # )r  z<\\(?P<{group}>(?:{alpha})(?![A-Za-z]){additional}{nonalpha})|r  )r  alphar  nonalphar   )isalphar   r   r-   r  r]   reescape)r  r  ends_with_alphaends_with_nonalphar  s   &&   r.   csnames 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  r`   z\mathrF  rG  r  z\hspaceaccentz\fracrb   denz\dfracz\binomz\genfracldelimrdelimrulesizestylez\sqrt{value}rH  rI  rootrD  z	\overlinebodyz\overset
annotationz	\undersetz\textr2   )end_quote_charz	\substackz\\)openerclosercontentpartsnucleusr  r  subsuperz'*apostrophesz'+z\operatornamez\boldsymbol\middlemdelimzExpected a delimiterz\leftleftr  z\rightrightrh  F)unquote_resultsz(?:(?:\\[$])|[^$])*N)JtypesSimpleNamespacer   float_literalr   _space_widthsr  r  r)   rD  r  r-   r  r]   r  r  r   leave_whitespacer(   unknown_symbol
_fontnamesr`   r
   start_groupr   	end_group_delimsdelimr   r  r  named_placeablerequired_groupoptional_groupr  r   r	   r  customspace_accent_map_wide_accentsr  _function_namesfunctionr  r   unclosed_groupfracdfracbinomgenfracr   sqrtoverlineoversetundersetr   textr   r   suppresssubstackr  simpleoperatorname
boldsymbolro  mathmath_stringnon_mathmain_expression_math_expression_in_subscript_or_superscript)rX   r  r  r  r  r  s   f    @r.   rY   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          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r'   r  r)   fonts_objectr   ra   r<   r   r*   r  r,   )r-   s   "r.   r/   r  i  s0     ( (s (% (5 (u (QV (r0   c                ~   \        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'  
NF)r%  _state_stack_em_width_cacher  parse_stringr   r7   r   explainr  r   reset_cacher   r   r  )rX   r  r  ra   r   resultr8   s   &&&&&  r.   parse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                   V ^8  d   QhRR/# rw  r,   )r-   s   "r.   r/   r    s     % %; %r0   c                (    V P                   R,          # )z&Get the current `State` of the parser.r   )r   r3  s   &r.   	get_stateParser.get_state  s      $$r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r    s        4  r0   c                :    V P                   P                  4        R# )zPop a `State` off of the stack.N)r   popr3  s   &r.   	pop_stateParser.pop_state  s    r0   c                   V ^8  d   QhRR/# r.  r,   )r-   s   "r.   r/   r    s     : :D :r0   c                t    V P                   P                  V P                  4       P                  4       4       R# )z=Push a new `State` onto the stack, copying the current state.N)r   r   r
  r5  r3  s   &r.   
push_stateParser.push_state  s&      !1!6!6!89r0   c                    V ^8  d   QhRRRR/# )r'   rg  r   r*   zlist[Hlist]r,   )r-   s   "r.   r/   r    s     ' ' '+ 'r0   c                	6    \        VP                  4       4      .# rV   )r  as_listrX   rg  s   &&r.   r  Parser.main  s    dlln%&&r0   c                    V ^8  d   QhRRRR/# )r'   rg  r   r*   r,   )r-   s   "r.   r/   r    s     Q Q Q Qr0   c                	P    V P                   P                  V^ ,          ^R RR7      # )rt   T)	parse_allr   )r  r  r  s   &&r.   r  Parser.math_string  s(    $$11$q'!B-41PPr0   c                    V ^8  d   QhRRRR/# r'   rg  r   r*   rh  r,   )r-   s   "r.   r/   r    s       % r0   c                	Z    \        VP                  4       4      pV P                  4        V.# rV   )r  r  r  )rX   rg  hlists   && r.   r  Parser.math  s#    dlln%wr0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r    s      \ e r0   c                	   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 )rt   z\$rh  r  )replacerj  r
  r  r  r  r  r`   )rX   rg  r  r  symbolsr!  s   &&    r.   r  Parser.non_math  sn    GOOE3'678a4>>+,a8g #-? @w 9s   "B
c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r    s       % r0   c           	     	    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'  )r  r
  r`   r  rj  r  )rX   rg  r$  r  r!  s   &&   r.   r  Parser.text  sV     
tAw7w!tA~w78w 8s   A&c                    V ^8  d   QhRRRR/# )r'   
percentager<   r*   r  r,   )r-   s   "r.   r/   r    s     ( (e ( (r0   c                	   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  rr  )r
  r`   ra   r   r  r   r(  r   r  r  r   r  )rX   r,  r$  r:  r=   rv   s   &&    r.   _make_space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\enspacer  z\quadz\qquadz\!c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r    s      , 5 r0   c                	^    V P                   VR ,          ,          pV P                  V4      pV.# r  )r  r.  )rX   rg  rb   rR   s   &&  r.   r  Parser.space  s-      g/s#ur0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r    s     1 1 1 1r0   c                	4    V P                  VR ,          4      .# r3  )r.  r  s   &&r.   r  Parser.customspace  s      g/00r0   c               (    V ^8  d   QhRRRRRRRR/# )	r'   r  r)   rf  r+   rg  zParseResults | dict[str, str]r*   rh  r,   )r-   s   "r.   r/   r    s*     . . .# .2.7<.r0   c                	   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rv  r,   r  r  s   & r.   r   Parser.symbol.<locals>.<genexpr>       CAs(aa   
r  rF  r  Tr  c              3  6   "   T F  qR 8w  g   K  Vx  K  	  R# 5irv  r,   r;  s   & r.   r  r<    r=  r>  c              3  6   "   T F  qR 8w  g   K  Vx  K  	  R# 5irv  r,   r;  s   & r.   r  r<    s     AASaar>  r  rG  r  r   )rj  r
  r7   r   _spaced_symbolsr=  r  _binary_operatorsrA  r  _left_delims_relation_symbolsr  r.  _punctuation_symbolsisdigit)	rX   r  rf  rg  r  r  r8   	prev_char	next_chars	   &&&&     r.   r(   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               (    V ^8  d   QhRRRRRRRR/# re  r,   )r-   s   "r.   r/   r  	  s.     M M M# M\ Me Mr0   c                	.    \        WR VR,           24      h)zUnknown symbol: r  rk  rX   r  rf  rg  s   &&&&r.   r  Parser.unknown_symbol	  s    !!,<T&\N*KLLr0   hatz\circumflexaccentbrevez\combiningbrevebarz\combiningoverlinegravez\combininggraveaccentacutez\combiningacuteaccenttildez\combiningtildedotz\combiningdotaboveddotz\combiningdiaeresisdddotz\combiningthreedotsaboveddddotz\combiningfourdotsabovevecz\combiningrightarrowabovera  `rt  r  r  overrightarrowz\rightarrowoverleftarrowz
\leftarrowmathringz\circzwidehat widetilde widebarc                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  	  s      < E r0   c                	0   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   r2   )r<  r\  g      @exactlyr          @)r
  r  r  r:  r=   r  r  rB  r  rb  r  r  rY  r  )rX   rg  r$  r  r  r   
accent_boxcentereds   &&      r.   r  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               (    V ^8  d   QhRRRRRRRR/# re  r,   )r-   s   "r.   r/   r  3	  s(      # C |  r0   c                	F    V P                  WV4      pVR ,          Vn        V# )r  )r  function_name)rX   r  rf  rg  r!  s   &&&& r.   r  Parser.function3	  s%    !!!$/"6lr0   c               (    V ^8  d   QhRRRRRRRR/# re  r,   )r-   s   "r.   r/   r  8	  s(     !! !!c !! !!< !!E !!r0   c                	4   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  6   "   T F  qR 8w  g   K  Vx  K  	  R# 5irv  r,   r;  s   & r.   r  &Parser.operatorname.<locals>.<genexpr>K	  s     C%6s(!!%6r>  Nr  r  r  r0  TF>   r  r  )r  r
  r`   r  rj  rn  r   r)   rA  r   r=  r  _overunder_functionsr.  r  r  r  r  )rX   r  rf  rg  r$  
hlist_listr  r  next_char_locrH  
delimiterss   &&&&       r.   r  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                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  [	  s        r0   c                	    V P                  4        VP                  R 4      '       d%   VP                  R 4      V P                  4       n        . # r`   )r  r   r
  r`   r  s   &&r.   r  Parser.start_group[	  s8    88F$(HHV$4DNN!	r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  b	  s      , 5 r0   c                	>    \        VP                  R . 4      4      pV.# r  r  r   )rX   rg  grps   && r.   r  Parser.groupb	  s    DHHWb)*ur0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  f	  s     , ,< ,E ,r0   c                	8    \        VP                  R . 4      4      # rw  rx  r  s   &&r.   r  Parser.required_groupf	  s    TXXgr*++r0   c                   V ^8  d   QhRR/# )r'   r*   rh  r,   )r-   s   "r.   r/   r  k	  s      5 r0   c                	&    V P                  4        . # rV   )r  r3  s   &r.   r  Parser.end_groupk	  s    	r0   c               (    V ^8  d   QhRRRRRRRR/# re  r,   )r-   s   "r.   r/   r  o	  s(     = = =# =\ =e =r0   c                	.    \        V\        V4      R 4      h)zExpected '}')r   rA  rL  s   &&&&r.   r  Parser.unclosed_groupo	  s    !!SV^<<r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  r	  s       % r0   c                	>    VR ,          V P                  4       n        . # rs  )r
  r`   r  s   &&r.   r`   Parser.fontr	  s     $V	r0   c                    V ^8  d   QhRRRR/# r'   r  r,  r*   rr   r,   )r-   s   "r.   r/   r  v	  s      D T r0   c                	    \        V\        4      '       d   VP                  V P                  9   # \        V\        4      '       d,   \        VR 4      '       d   VP                  V P                  9   # R# )rf  F)r  rj  r  _overunder_symbolsr  r  rf  rl  rX   r  s   &&r.   is_overunderParser.is_overunderv	  sW    gt$$99 7 777''GG_,M,M((D,E,EEEr0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  }	        $ 4 r0   c                	d    \        V\        4      '       d   VP                  V P                  9   # R # F)r  rj  r  _dropsub_symbolsr  s   &&r.   
is_dropsubParser.is_dropsub}	  s'    gt$$99 5 555r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  	  r  r0   c                	R    \        V\        4      '       d   VP                  4       # R # r  )r  rj  r}  r  s   &&r.   r}  Parser.is_slanted	  s!    gt$$%%''r0   c               (    V ^8  d   QhRRRRRRRR/# re  r,   )r-   s   "r.   r/   r  	  s.     d d# dC d| d dr0   c           	     	  < 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   r  r         @r_  Fr  r`  r0  r   )3r   rb  rA  r   r
  r(  r   r`   ra   r   r   r  r  r  extendr(   r  r  r  r=   rB  ry   r  rY  r   r>   r?   r  r  r  r  rj  rx  r   r*  r  r  r}  r  r  r   r   r,  r
  r  r  r  r	  r  r.  r  )$rX   r  rf  rg  r  r  napostrophessubr   opargr$  rule_thicknessr  rc  vlistr7  r=   vgapr!  vltr  	last_charr  r)  	lc_heightlc_baseline	superkernsubkernr  
shift_downshift_upr   clrspaced_nucleusr   s$   &&&&                               r.   r  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               4    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  rb   r  r  r*   rh  r,   )r-   s   "r.   r/   r  -
  s@     ( (s (C (| (J (("'(,1(r0   c           
     	<   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# )r_  r`  r  =r  r  r  ) r
  r  r  rD  rB  r  ry   r=   r  r  rY  r  r(  r   r`   r  r  ra   r   r>   rx   r{   r  r  rb  _auto_sized_delimiterr   r   r  rS   rj  r)   )rX   r  r  r  r  rb   r  r$  r  r  cnumcdenr=   r  rv   r7  r  s   &&&&&&&          r.   _genfrac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                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  W
  s     ; ;, ;5 ;r0   c                	D    V P                  \        VR ,          4      4      # )r  )r  r+   r  s   &&r.   r  Parser.style_literalW
  s    s4#89::r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  Z
  s     & &L &U &r0   c           	     	    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  rb   r  )r  r   r  r  r  s   &&r.   r  Parser.genfracZ
  sZ    }}HHXr"DHHXr$:dhhw0I0IJKe& 	&r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "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  rb   r  )r  r
  r  r  r  r  s   &&r.   r  Parser.frac`
  sE    }}DNN$DDFOO%%tE{DKA 	Ar0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  e
  s     D D, D5 Dr0   c           	     	    V P                  R R V P                  4       P                  4       V P                  P                  VR,          VR,          4      # r  )r  r
  r  r  r  r  s   &&r.   r  Parser.dfrace
  sE    }}DNN$DDFOO(($u+tE{D 	Dr0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  j
  s     A A, A5 Ar0   c           	     	r    V P                  R R^ V P                  P                  VR,          VR,          4      # )rD  rE  rb   r  )r  r  r  r  s   &&r.   r  Parser.binomj
  s5    }}aOO%%tE{DKA 	Ar0   c               (    V ^8  d   QhRRRRRRRR/# re  r,   )r-   s   "r.   r/   r  o
  s(       3 l u r0   c                	.   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  r_  u)r
  r  rB  r  ry   r=   r  r  rY  r?   r>   r  )rX   r  rf  rg  r  r  r  centered_annotationcentered_bodyr=   r  r  s   &&&&        r.   _genset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                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  
  s     & & &% &r0   c                	   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  rD  g      @rJ  T)r1  r  r_  r  r   r       @)r   r
  r  r>   r  r?   r/  r  rb  r  r  r  r  ra   r   rS   r=   rB  r  )rX   rg  r  r  r$  r  r>   r?   checkpadded_body	rightside
root_vlistr!  s   &&           r.   r  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                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  
  s      \ e r0   c                	   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  r_  r  )r
  r  r>   r  r?   r  r  r  r  r  ra   r   )	rX   rg  r  r$  r  r>   r?   r  r!  s	   &&       r.   r  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               (    V ^8  d   QhRRRRRRRR/# )r'   frontr)   middlezlist[Box | Char | str]backr*   rh  r,   )r-   s   "r.   r/   r  
  s+     $ $3 $&<$$'$,1$r0   c           
     	   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  )r2  r   )r
  rA  ry   r  r)   r>   r?   	enumerater   r   r/  remover  rS   rj  r   r  r  )rX   r  r  r  r$  r  r>   r?   r2  idxelr  middle_partr  r!  s   &&&&           r.   r  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                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  
  s      |  r0   c                	    T P                  VR ,          RV9   d   VR,          P                  4       M. VR,          4      # )r  r  r  )r  r  r  s   &&r.   r  Parser.auto_delim
  s;    ))L%*d]DK!M	 	r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r  
  s      |  r0   c                	   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      # )rD  r-  :r  NNr  )r  r
  r  r  r  rj  r`   rn  r   r  _latin_alphabets_small_greekr  )rX   rg  r$  r!  r  r  rj  s   &&     r.   r  Parser.boldsymbol
  s     G}A!U##JJqMa&&!AF%%'QAt$$CC400033r7d///#AF%%'!!#QQ! " 	U|r0   c                    V ^8  d   QhRRRR/# r  r,   )r-   s   "r.   r/   r    s      \ e r0   c                	   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                    V P                   # rV   r  rr  s   &r.   <lambda>!Parser.substack.<locals>.<lambda>  s    aggr0   r_  r   )r
  r  r  ry   r]   r  r  r   ziprY  rA  r  )rX   rg  r  r$  r  rj  r!  	max_widthr  r  cppairr  stackr  r  s   &&              r.   r  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)r  r  r  r  r   r   gKqUſ)WrC   rD   rE   rF   rG   enumEnumr  r  r  rB  rD  _arrow_symbolsrA  rE  r  rl  r  r  r  _ambi_delimsrC  _right_delimsr  r  r3   r  r  r  r   r  stringascii_lettersr  rY   r  r
  r  r  r  r  r  r  staticmethodr   convert_to_floatr  r  r.  r  r  r  r(   r  r  r  r  r  r  r  r  r  r  r  r  r`   r  r  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rI   r   )rc  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      ))rt   rt   )urG   
__future__r   abcr5  r  r   loggingr   r  r  r  r  typingr   r   numpyr^   	pyparsingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   
matplotlibr  r  r   _mathtext_datar   r   r   r   font_managerr   r   r   ft2fontr    r!   r"   r#   TYPE_CHECKINGcollections.abcr$   r%   enable_packrat	getLoggerr  r9   r;   rD   rK   rP   r   r   ABCr   ABCMetar   r$  r  r  r  r  r6  r  rR  rQ  r  r  r  r  r  r"  r'  r*  r,  rS   rY  rb  rj  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  r:  r|   ro  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   