§
    †Ûgip ã                   óL  — d Z ddlZddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddl Z!ddl"m#Z#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z,m-Z- dd	l.m/Z/m0Z0  ej1        ¦   «           ej2        d
¦  «        Z3 e#j4        dd¦  «        dd„¦   «         Z5 eddd
¬¦  «        Z6de6_          eddd
¬¦  «        Z7de7_          G d„ d¦  «        Z8 G d„ d¦  «        Z9 G d„ de9¦  «        Z: G d„ de:¦  «        Z; G d„ de:¦  «        Z< G d „ d!e<¦  «        Z= G d"„ d#e=¦  «        Z> G d$„ d%e=¦  «        Z? G d&„ d'e<¦  «        Z@ G d(„ d)e@¦  «        ZAd*ZBd+ZC G d,„ d-¦  «        ZD G d.„ d/eD¦  «        ZE G d0„ d1eD¦  «        ZF G d2„ d3eD¦  «        ZG G d4„ d5eD¦  «        ZH G d6„ d7eD¦  «        ZIi d8eI“d9eI“d:eH“d;eE“d<eE“d=eE“d>eE“d?eE“d@eE“dAeE“dBeF“dCeF“dDeF“dEeF“dFeF“dGeF“dHeF“eIeIdIœ¥ZJdJ„ ZK G dK„ dL¦  «        ZL G dM„ dNeL¦  «        ZM G dO„ dPeM¦  «        ZN G dQ„ dReM¦  «        ZO G dS„ dTeL¦  «        ZP G dU„ dVeP¦  «        ZQ G dW„ dXeM¦  «        ZR G dY„ dZeR¦  «        ZS G d[„ d\eR¦  «        ZT G d]„ d^eM¦  «        ZU G d_„ d`eU¦  «        ZV G da„ dbeU¦  «        ZW edcdd¦  «        ZX eXdedfdded¦  «         eXdedfdgded¦  «         eXdedfdhded¦  «         eXdededdfd¦  «         eXdededdfdg¦  «         eXdededdfdh¦  «         eXdededded¦  «         eXdedfddid¦  «        djœeX_Y         G dk„ dleL¦  «        ZZ G dm„ dneS¦  «        Z[ G do„ dpeT¦  «        Z\ G dq„ dreL¦  «        Z] G ds„ dteS¦  «        Z^ G du„ dveS¦  «        Z_d€dx„Z`dy„ Za G dz„ d{¦  «        Zbd|„ Zc G d}„ d~¦  «        ZddS )�z.
Implementation details for :mod:`.mathtext`.
é    N)Ú
namedtuple)ÚEmptyÚForwardÚLiteralÚNotAnyÚoneOfÚ	OneOrMoreÚOptionalÚParseBaseExceptionÚParseExceptionÚParseExpressionÚParseFatalExceptionÚParserElementÚParseResultsÚQuotedStringÚRegexÚ	StringEndÚ
ZeroOrMoreÚpyparsing_commoné   )Ú_apiÚcbook)Úlatex_to_bakomaÚstix_glyph_fixesÚstix_virtual_fontsÚtex2uni)ÚFontPropertiesÚfindfontÚget_font)ÚFT2ImageÚKERNING_DEFAULTzmatplotlib.mathtextz3.6ÚmathFc                 ó  — |r| dk    rdS 	 t          | ¦  «        S # t          $ r Y nw xY w	 t          |                      d¦  «                 S # t          $ r(}t          d                     | ¦  «        ¦  «        |‚d}~ww xY w)aR  
    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').
    math : bool, default: False
        If True (deprecated), replace ASCII hyphen-minus by Unicode minus.
    ú-é"  ú\z9'{}' is not a valid Unicode character or TeX/Type1 symbolN)ÚordÚ	TypeErrorr   ÚstripÚKeyErrorÚ
ValueErrorÚformat)Úsymbolr"   Úerrs      úJ/granary/edev/quantum/lib/python3.11/site-packages/matplotlib/_mathtext.pyÚget_unicode_indexr0   &   s¨   € ð& ð �˜#’�ØˆvðÝ�6‰{Œ{ÐøÝð ð ð Øˆðøøøð&Ý�v—|’| DÑ)Ô)Ô*Ð*øÝð &ð &ð &ÝØGßŠV�F‰^Œ^ñô à"%ð	&øøøøð&øøøs#   Œ ›
(§(¬A Á
A>Á#A9Á9A>ÚVectorParsezwidth height depth glyphs rects)ÚmodulezÓ
The namedtuple type returned by ``MathTextParser("path").parse(...)``.

This tuple contains the global metrics (*width*, *height*, *depth*), a list of
*glyphs* (including their positions) and of *rect*\angles.
ÚRasterParsezox oy width height depth imagezÌ
The namedtuple type returned by ``MathTextParser("agg").parse(...)``.

This tuple contains the global metrics (*width*, *height*, *depth*), and a
raster *image*.  The offsets *ox*, *oy* are always zero.
c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú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                 ó0   — || _         g | _        g | _        d S ©N)ÚboxÚglyphsÚrects)Úselfr8   s     r/   Ú__init__zOutput.__init__c   s   € ØˆŒØˆŒØˆŒ
ˆ
ˆ
ó    c                 óú   ‡— t          t          j        | j        j        | j        j        | j        j        g¦  «        \  }Š}ˆfd„| j        D ¦   «         }ˆfd„| j        D ¦   «         }t          |‰|z   |||¦  «        S )Nc                 óZ   •— g | ]'\  }}}|j         |j        |j        |‰|z
  |j        z   f‘Œ(S © )ÚfontÚfontsizeÚnumÚoffset)Ú.0ÚoxÚoyÚinfoÚhs       €r/   ú
<listcomp>z$Output.to_vector.<locals>.<listcomp>k   sK   ø€ ð /ð /ð /Ù�"�b˜$ð Œy˜$œ-¨¬°2°q¸2±vÀÄÑ7KÐLð /ð /ð /r=   c                 ó8   •— g | ]\  }}}}|‰|z
  ||z
  ||z
  f‘ŒS r@   r@   )rE   Úx1Úy1Úx2Úy2rI   s        €r/   rJ   z$Output.to_vector.<locals>.<listcomp>m   sF   ø€ ð 0ð 0ð 0Ù �"�b˜"˜bð �1�r‘6˜2 ™7 B¨¡GÐ,ð 0ð 0ð 0r=   )
ÚmapÚnpÚceilr8   ÚwidthÚheightÚdepthr9   r:   r1   )r;   ÚwÚdÚgsÚrsrI   s        @r/   Ú	to_vectorzOutput.to_vectorh   s¢   ø€ ÝÝŒG�d”h”n d¤h¤o°t´x´~ÐFñHô H‰ˆˆ1ˆað/ð /ð /ð /Ø"&¤+ð/ñ /ô /ˆð0ð 0ð 0ð 0Ø$(¤Jð0ñ 0ô 0ˆå˜1˜a !™e Q¨¨BÑ/Ô/Ð/r=   c           
      óÐ  — t          g d„ | j        D ¦   «         ¢d„ | j        D ¦   «         ¢d‘¦  «        dz
  }t          g d„ | j        D ¦   «         ¢d„ | j        D ¦   «         ¢d‘¦  «        dz
  }t          g d„ | j        D ¦   «         ¢d„ | j        D ¦   «         ¢d‘¦  «        dz   }t          g d	„ | j        D ¦   «         ¢d
„ | j        D ¦   «         ¢d‘¦  «        dz   }||z
  }||z
  | j        j        z
  }||z
  | j        j        z
  }t          t          j	        |¦  «        t          j	        |t          |d¦  «        z   ¦  «        ¦  «        }t          | j        | | f¦  «        }	|	j        D ]G\  }
}}|j                             ||
||j        j        z
  |j        t           j        d         ¬¦  «         ŒH|	j        D ]š\  }}}}t          t%          ||z
  ¦  «        dz
  d¦  «        }|dk    r!||z   dz  }t%          ||dz   dz  z
  ¦  «        }nt%          |¦  «        }|                     t%          |¦  «        |t          j	        |¦  «        ||z   ¦  «         Œ›t)          dd|||z   ||¦  «        S )Nc                 ó4   — g | ]\  }}}||j         j        z   ‘ŒS r@   )ÚmetricsÚxmin©rE   rF   rG   rH   s       r/   rJ   z$Output.to_raster.<locals>.<listcomp>t   ó(   € ÐMÐMÐM±°°R¸�b˜4œ<Ô,Ñ,ÐMÐMÐMr=   c                 ó   — g | ]	\  }}}}|‘Œ
S r@   r@   ©rE   rL   rM   rN   rO   s        r/   rJ   z$Output.to_raster.<locals>.<listcomp>u   ó    € Ð:Ð:Ð:™^˜R  R¨�bÐ:Ð:Ð:r=   r   r   c                 ó4   — g | ]\  }}}||j         j        z
  ‘ŒS r@   )r]   Úymaxr_   s       r/   rJ   z$Output.to_raster.<locals>.<listcomp>v   r`   r=   c                 ó   — g | ]	\  }}}}|‘Œ
S r@   r@   rb   s        r/   rJ   z$Output.to_raster.<locals>.<listcomp>w   rc   r=   c                 ó4   — g | ]\  }}}||j         j        z   ‘ŒS r@   )r]   Úxmaxr_   s       r/   rJ   z$Output.to_raster.<locals>.<listcomp>x   r`   r=   c                 ó   — g | ]	\  }}}}|‘Œ
S r@   r@   rb   s        r/   rJ   z$Output.to_raster.<locals>.<listcomp>y   rc   r=   c                 ó4   — g | ]\  }}}||j         j        z
  ‘ŒS r@   )r]   Úyminr_   s       r/   rJ   z$Output.to_raster.<locals>.<listcomp>z   r`   r=   c                 ó   — g | ]	\  }}}}|‘Œ
S r@   r@   rb   s        r/   rJ   z$Output.to_raster.<locals>.<listcomp>{   rc   r=   ztext.antialiased)Úantialiasedé   )Úminr9   r:   Úmaxr8   rU   rT   r    rQ   rR   ÚshiprA   Údraw_glyph_to_bitmapr]   ÚicebergÚglyphÚmplÚrcParamsÚintÚdraw_rect_filledr3   )r;   r^   rk   rh   re   rV   rI   rW   ÚimageÚshiftedrF   rG   rH   rL   rM   rN   rO   rT   ÚcenterÚys                       r/   Ú	to_rasterzOutput.to_rasterq   sô  € õ ð ?ÐMÐMÀÄÐMÑMÔMð ?Ø:Ð:¨t¬zÐ:Ñ:Ô:ð?Ø<=ð?ñ @ô @ØBCñDˆåð ?ÐMÐMÀÄÐMÑMÔMð ?Ø:Ð:¨t¬zÐ:Ñ:Ô:ð?Ø<=ð?ñ @ô @ØBCñDˆåð ?ÐMÐMÀÄÐMÑMÔMð ?Ø:Ð:¨t¬zÐ:Ñ:Ô:ð?Ø<=ð?ñ @ô @ØBCñDˆåð ?ÐMÐMÀÄÐMÑMÔMð ?Ø:Ð:¨t¬zÐ:Ñ:Ô:ð?Ø<=ð?ñ @ô @ØBCñDˆà�4‰KˆØ�4‰K˜$œ(œ.Ñ(ˆØ�4‰K˜$œ(œ/Ñ)ˆÝ�œ ™œ¥R¤W¨Qµ°Q¸±´©]Ñ%;Ô%;Ñ<Ô<ˆõ �t”x 4 %¨$¨ Ñ0Ô0ˆà#œNð 	>ð 	>‰LˆB��DØŒI×*Ò*Ø�r˜2 ¤Ô 4Ñ4°d´jÝœLÐ);Ô<ð +ñ >ô >ð >ð >ð &œmð 	Hð 	H‰NˆB��B˜Ý�˜R "™W™œ¨Ñ)¨1Ñ-Ô-ˆFØ˜Š{ˆ{Ø˜r™' Q™�Ý˜ &¨1¡*°Ñ!1Ñ1Ñ2Ô2��å˜‘G”G�Ø×"Ò"¥3 r¡7¤7¨A­r¬w°r©{¬{¸AÀ¹JÑGÔGÐGÐGÝ˜1˜a  A¨¡E¨1¨eÑ4Ô4Ð4r=   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r<   rZ   r}   r@   r=   r/   r5   r5   [   sK   € € € € € ðð ðð ð ð
0ð 0ð 0ð"5ð "5ð "5ð "5ð "5r=   r5   c                   óH   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ ZdS )Ú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                 ó"   — || _         || _        dS )au  
        Parameters
        ----------
        default_font_prop : `~.font_manager.FontProperties`
            The default non-math font, or the base font for Unicode (generic)
            font rendering.
        load_glyph_flags : int
            Flags passed to the glyph loader (e.g. ``FT_Load_Glyph`` and
            ``FT_Load_Char`` for FreeType-based fonts).
        N)Údefault_font_propÚload_glyph_flags)r;   r…   r†   s      r/   r<   zFonts.__init__Ÿ   s   € ð "3ˆÔØ 0ˆÔÐÐr=   c
                 ó   — dS )zŸ
        Get the kerning distance for font between *sym1* and *sym2*.

        See `~.Fonts.get_metrics` for a detailed description of the parameters.
        ç        r@   )
r;   Úfont1Ú
fontclass1Úsym1Ú	fontsize1Úfont2Ú
fontclass2Úsym2Ú	fontsize2Údpis
             r/   Úget_kernzFonts.get_kern­   s	   € ð ˆrr=   c                 óB   — |                       |||||¦  «        }|j        S )a°  
        Parameters
        ----------
        font : str
            One of the TeX font names: "tt", "it", "rm", "cal", "sf", "bf",
            "default", "regular", "bb", "frak", "scr".  "default" and "regular"
            are synonyms and use the non-math font.
        font_class : str
            One of the TeX font names (as for *font*), but **not** "bb",
            "frak", or "scr".  This is used to combine two font classes.  The
            only supported combination currently is ``get_metrics("frak", "bf",
            ...)``.
        sym : str
            A symbol in raw TeX form, e.g., "1", "x", or "\sigma".
        fontsize : float
            Font size in points.
        dpi : float
            Rendering dots-per-inch.

        Returns
        -------
        object

            The returned object has the following attributes (all floats,
            except *slanted*):

            - *advance*: The advance distance (in points) of the glyph.
            - *height*: The height of the glyph in points.
            - *width*: The width of the glyph in points.
            - *xmin*, *xmax*, *ymin*, *ymax*: The ink rectangle of the glyph
            - *iceberg*: The distance from the baseline to the top of the
              glyph.  (This corresponds to TeX's definition of "height".)
            - *slanted*: Whether the glyph should be considered as "slanted"
              (currently used for kerning sub/superscripts).
        )Ú	_get_infor]   )r;   rA   Ú
font_classÚsymrB   r‘   rH   s          r/   Úget_metricszFonts.get_metrics¶   s&   € ðH �~Š~˜d J°°X¸sÑCÔCˆØŒ|Ðr=   c	                 ór   — |                       |||||¦  «        }	|j                             |||	f¦  «         dS )zœ
        At position (*ox*, *oy*), draw the glyph specified by the remaining
        parameters (see `get_metrics` for their detailed description).
        N)r”   r9   Úappend)
r;   ÚoutputrF   rG   rA   r•   r–   rB   r‘   rH   s
             r/   Úrender_glyphzFonts.render_glyphÝ   s?   € ð �~Š~˜d J°°X¸sÑCÔCˆØŒ×Ò˜b " d˜^Ñ,Ô,Ð,Ð,Ð,r=   c                 óB   — |j                              ||||f¦  «         dS )zL
        Draw a filled rectangle from (*x1*, *y1*) to (*x2*, *y2*).
        N)r:   r™   ©r;   rš   rL   rM   rN   rO   s         r/   Úrender_rect_filledzFonts.render_rect_filledæ   s)   € ð 	Œ×Ò˜R  R¨Ð,Ñ-Ô-Ð-Ð-Ð-r=   c                 ó   — t          ¦   «         ‚)zF
        Get the xheight for the given *font* and *fontsize*.
        ©ÚNotImplementedError©r;   rA   rB   r‘   s       r/   Úget_xheightzFonts.get_xheightì   s   € õ "Ñ#Ô#Ð#r=   c                 ó   — t          ¦   «         ‚)z–
        Get the line thickness that matches the given font.  Used as a
        base unit for drawing lines such as in a fraction or radical.
        r    r¢   s       r/   Úget_underline_thicknesszFonts.get_underline_thicknessò   s   € õ
 "Ñ#Ô#Ð#r=   c                 ó   — | j         S )z´
        Get the set of characters that were used in the math
        expression.  Used by backends that need to subset fonts so
        they know which glyphs to include.
        )Úused_characters©r;   s    r/   Úget_used_characterszFonts.get_used_charactersù   s   € ð Ô#Ð#r=   c                 ó   — ||fgS )a  
        Override if your font provides multiple sizes of the same
        symbol.  Should return a list of symbols matching *sym* in
        various sizes.  The expression renderer will select the most
        appropriate size for a given situation from this list.
        r@   ©r;   Úfontnamer–   s      r/   Ú!get_sized_alternatives_for_symbolz'Fonts.get_sized_alternatives_for_symbol  s   € ð ˜3�Ð Ð r=   N)r~   r   r€   r�   r<   r’   r—   r›   rž   r£   r¥   r©   r­   r@   r=   r/   rƒ   rƒ   –   s¦   € € € € € ðð ð1ð 1ð 1ðð ð ð%ð %ð %ðN-ð -ð -ð.ð .ð .ð$ð $ð $ð$ð $ð $ð$ð $ð $ð!ð !ð !ð !ð !r=   rƒ   c                   óJ   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ fd„Z
ˆ xZS )	ÚTruetypeFontsza
    A generic base class for all font setups that use Truetype fonts
    (through FT2Font).
    c                 ó  •—  t          ¦   «         j        |i |¤Ž  t          j        d ¦  «        | j        ¦  «        | _        i | _        t          | j        ¦  «        }t          |¦  «        }|| j        d<   || j        d<   d S )NÚdefaultÚregular)	Úsuperr<   Ú	functoolsÚ	lru_cacher”   Ú_fontsr   r…   r   )r;   ÚargsÚkwargsÚfilenameÚdefault_fontÚ	__class__s        €r/   r<   zTruetypeFonts.__init__  s   ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)à2�Ô,¨TÑ2Ô2°4´>ÑBÔBˆŒØˆŒå˜DÔ2Ñ3Ô3ˆÝ Ñ)Ô)ˆØ!-ˆŒ�IÑØ!-ˆŒ�IÑÐÐr=   c                 ó@  — || j         v r| j         |         }n|}| j                             |¦  «        }|€ht          j                             |¦  «        rIt          |¦  «        }|| j        |<   || j        |j        <   || j        |j                             ¦   «         <   |S r7   )	Úfontmapr¶   ÚgetÚosÚpathÚexistsr   Úpostscript_nameÚlower)r;   rA   ÚbasenameÚcached_fonts       r/   Ú	_get_fontzTruetypeFonts._get_font  s—   € Ø�4”<ÐÐØ”| DÔ)ˆHˆHàˆHØ”k—o’o hÑ/Ô/ˆØÐ¥2¤7§>¢>°(Ñ#;Ô#;ÐÝ" 8Ñ,Ô,ˆKØ$/ˆDŒK˜Ñ!Ø7BˆDŒK˜Ô3Ñ4Ø?JˆDŒK˜Ô3×9Ò9Ñ;Ô;Ñ<ØÐr=   c                 óN   — |j         dk    r|j        dz  dz  |dz  |z  dz  z   S dS )NÚCmex10é@   rn   é   éH   rˆ   )rÂ   rT   )r;   rA   rt   rB   r‘   s        r/   Ú_get_offsetzTruetypeFonts._get_offset)  s:   € ØÔ 8Ò+Ð+Ø”L 2Ñ%¨Ñ)¨h°q©j¸3Ñ.>¸rÑ.AÑBÐBØˆrr=   c                 óÄ  — |                       |||¦  «        \  }}}|                     ||¦  «         |                     || j        ¬¦  «        }	d„ |	j        D ¦   «         \  }
}}}|                      ||	||¦  «        }t          j        |	j        dz  |	j	        dz  |	j
        dz  |
|||z   ||z   |	j        dz  |z   |¬¦	  «	        }t          j        |||j        |||	|¬¦  «        S )N)Úflagsc                 ó   — g | ]}|d z  ‘ŒS )ç      P@r@   )rE   Úvals     r/   rJ   z+TruetypeFonts._get_info.<locals>.<listcomp>4  s   € Ð!AÐ!AÐ!A¨s # d¡(Ð!AÐ!AÐ!Ar=   g      ð@rÐ   )	ÚadvancerT   rS   r^   rh   rk   re   rs   Úslanted)rA   rB   rÂ   r]   rC   rt   rD   )Ú
_get_glyphÚset_sizeÚ	load_charr†   ÚbboxrÌ   ÚtypesÚSimpleNamespaceÚlinearHoriAdvancerT   rS   ÚhoriBearingYrÂ   )r;   r¬   r•   r–   rB   r‘   rA   rC   rÓ   rt   r^   rk   rh   re   rD   r]   s                   r/   r”   zTruetypeFonts._get_info/  s  € Ø!Ÿ_š_¨X°zÀ3ÑGÔGÑˆˆc�7Ø�Š�h Ñ$Ô$Ð$Ø—’˜s¨$Ô*?�Ñ@Ô@ˆà!AÐ!A°e´jÐ!AÑ!AÔ!AÑˆˆd�D˜$Ø×!Ò! $¨¨x¸Ñ=Ô=ˆÝÔ'ØÔ-¨gÑ5Ø”l 4Ñ'Ø”k $Ñ&ØØØ˜6‘kØ˜6‘kàÔ(¨Ñ-°Ñ6Øðñ ô ˆõ Ô$Ø"Ø&Ø"Ô2Ø%Ø!Ø#Ø$ðñ ô ð 	r=   c                 ó  — |                       |¦  «        }|                     ||¦  «         |                     d¦  «        }|€0|                      |t          j        d         d||¦  «        }|j        S |d         dz  |dz  z  |dz  z  }|S )NÚpcltúmathtext.defaultÚxÚxHeightrÐ   g      (@g      Y@)rÆ   rÕ   Úget_sfnt_tabler—   ru   rv   rs   )r;   r¬   rB   r‘   rA   rÝ   r]   rà   s           r/   r£   zTruetypeFonts.get_xheightM  s–   € Ø�~Š~˜hÑ'Ô'ˆØ�Š�h Ñ$Ô$Ð$Ø×"Ò" 6Ñ*Ô*ˆØˆ<à×&Ò&Ø�#œ,Ð'9Ô:¸CÀÈ3ñPô PˆGà”?Ð"Ø˜	”? TÑ)¨h¸©oÑ>À#ÈÁ+ÑNˆØˆr=   c                 ó   — d|z  |z  dz  S )Ng      °?g      R@r@   r¢   s       r/   r¥   z%TruetypeFonts.get_underline_thicknessY  s   € ð  Ñ(¨3Ñ.°$Ñ6Ð6r=   c
                 ó2  •— ||k    rh||k    rb|                       |||||	¦  «        }
|                       |||||	¦  «        }|
j        }|                     |
j        |j        t          ¦  «        dz  S t          ¦   «                              |||||||||	¦	  «	        S )NrÉ   )r”   rA   Úget_kerningrC   r!   r³   r’   )r;   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   Úinfo1Úinfo2rA   r»   s                €r/   r’   zTruetypeFonts.get_kern_  s¢   ø€ à�EŠ>ˆ>˜i¨9Ò4Ð4Ø—N’N 5¨*°d¸IÀsÑKÔKˆEØ—N’N 5¨*°d¸IÀsÑKÔKˆEØ”:ˆDØ×#Ò# E¤I¨u¬y½/ÑJÔJÈRÑOÐOÝ‰wŒw×Ò  z°4¸Ø % z°4¸ÀCñIô Ið 	Ir=   )r~   r   r€   r�   r<   rÆ   rÌ   r”   r£   r¥   r’   Ú__classcell__©r»   s   @r/   r¯   r¯     s¯   ø€ € € € € ðð ð
	.ð 	.ð 	.ð 	.ð 	.ðð ð ðð ð ðð ð ð<
ð 
ð 
ð7ð 7ð 7ðIð Ið Ið Ið Ið Ið Ið Ið Ir=   r¯   c                   ób  ‡ — e Zd ZdZdddddddd	œZˆ fd
„Z ed                     ¦   «         ¦  «        Zd„ Z	i dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d¢“dg d ¢“d!g d"¢“d#g d$¢“d%g d&¢“d'g d(¢“d)g d*¢“d+g d,¢“d-g d.¢“d/d0gd1d2gd3œ¥Z
d4D ]\  ZZe
e         e
e<   Œd5„ Zˆ xZS )6ÚBakomaFontsz¦
    Use the Bakoma TrueType fonts for rendering.

    Symbols are strewn about a number of font files, each of which has
    its own proprietary 8-bit encoding.
    Úcmsy10Úcmr10Úcmtt10Úcmmi10Úcmb10Úcmss10Úcmex10)ÚcalÚrmÚttÚitÚbfÚsfÚexc                 óî   •— t          |i |¤Ž| _         t          ¦   «         j        |i |¤Ž i | _        | j                             ¦   «         D ](\  }}t          |¦  «        }|| j        |<   || j        |<   Œ)d S r7   )Ú	StixFontsÚ_stix_fallbackr³   r<   r½   Ú_fontmapÚitemsr   )r;   r·   r¸   ÚkeyrÑ   Úfullpathr»   s         €r/   r<   zBakomaFonts.__init__{  sŒ   ø€ Ý'¨Ð8°Ð8Ð8ˆÔà�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ØˆŒØœ×+Ò+Ñ-Ô-ð 	)ð 	)‰HˆC�Ý ‘}”}ˆHØ (ˆDŒL˜ÑØ (ˆDŒL˜ÑÐð	)ð 	)r=   ú
\int \ointc                 óŠ  — d }|| j         v r>|t          v r5t          |         \  }}|dk    p|| j        v }|                      |¦  «        }n?t	          |¦  «        dk    r,|dk    }|                      |¦  «        }|�t          |¦  «        }|�|                     |¦  «        dk    r|||fS | j                             |||¦  «        S )Nrî   r   rõ   r   )	r½   r   Ú_slanted_symbolsrÆ   Úlenr'   Úget_char_indexrû   rÔ   )r;   r¬   r•   r–   rA   rÄ   rC   rÓ   s           r/   rÔ   zBakomaFonts._get_glyph‡  s×   € ØˆØ�t”|Ð#Ð#¨­Ð(>Ð(>Ý+¨CÔ0‰MˆH�cØ 8Ò+ÐL°°tÔ7LÐ0LˆGØ—>’> (Ñ+Ô+ˆDˆDÝ�‰XŒX˜Š]ˆ]Ø 4Ò'ˆGØ—>’> (Ñ+Ô+ˆDØÐÝ˜#‘h”h�ØÐ × 3Ò 3°CÑ 8Ô 8¸AÒ =Ð =Ø˜˜gÐ%Ð%àÔ&×1Ò1°(¸JÈÑLÔLÐLr=   ú())ró   r  )rø   õ   Â¡)rø   õ   Â³)rø   õ   Âµ)rø   õ   Ãƒú)))ró   r
  )rø   õ   Â¢)rø   õ   Â´)rø   õ   Â¶)rø   ú!Ú{))rò   r  )rø   õ   Â©)rø   Ún)rø   õ   Â½)rø   r  Ú}))rò   r  )rø   õ   Âª)rø   Úo)rø   õ   Â¾)rø   r
  ú[))ró   r  )rø   õ   Â£)rø   rI   )rø   ú"ú]))ró   r  )rø   õ   Â¤)rø   Úi)rø   ú#z\lfloor))rø   õ   Â¥)rø   Új)rø   õ   Â¹)rø   ú$z\rfloor))rø   õ   Â¦)rø   Úk)rø   õ   Âº)rø   ú%z\lceil))rø   õ   Â§)rø   Úl)rø   õ   Â»)rø   ú&z\rceil))rø   õ   Â¨)rø   Úm)rø   õ   Â¼)rø   ú'z\langle))rø   õ   Â­©rø   ÚD)rø   õ   Â¿)rø   Ú*z\rangle))rø   õ   Â®©rø   ÚE)rø   õ   Ã€)rø   ú+ú	\__sqrt__))rø   Úp)rø   Úq)rø   Úr)rø   Úsz
\backslash))rø   õ   Â²)rø   ú/)rø   õ   Ã‚)rø   r$   r>  ))ró   r>  )rø   õ   Â±)rø   ú.)rø   õ   Ã‹)rø   ú,z\widehat))ró   ú^)rø   Úb)rø   Úc)rø   rW   z
\widetilde))ró   ú~)rø   Úe)rø   Úf)rø   Úg)rò   rI   r/  )rò   r  r4  )ú<ú>)
)z
\leftparenr  )z\rightparentr
  )z
\leftbracer  )z\rightbracer  )z\leftbracketr  )z\rightbracketr  )ú\{r  )ú\}r  )ú\[r  )ú\]r  c                 ó>   — | j                              |||fg¦  «        S r7   )Ú_size_alternativesr¾   r«   s      r/   r­   z-BakomaFonts.get_sized_alternatives_for_symbolÏ  s"   € ØÔ&×*Ò*¨3°(¸C°Ð0AÑBÔBÐBr=   )r~   r   r€   r�   rü   r<   ÚsetÚsplitr  rÔ   rR  ÚaliasÚtargetr­   rç   rè   s   @r/   rê   rê   j  s¬  ø€ € € € € ðð ð ØØØØØØðð €Hð)ð )ð )ð )ð )ð �s˜=×.Ò.Ñ0Ô0Ñ1Ô1ÐðMð Mð Mð&'
Øð 8ð 8ð 8ð'
ð 	ð 8ð 8ð 8ð'
ð
 	ð 8ð 8ð 8ð'
ð 	ð 8ð 8ð 8ð'
ð 	ð (ð (ð (ð'
ð 	ð (ð (ð (ð'
ð 	ð 8ð 8ð 8ð'
ð" 	ð 8ð 8ð 8ð#'
ð& 	ð 8ð 8ð 8ð''
ð* 	ð 8ð 8ð 8ð+'
ð. 	ð 8ð 8ð 8ð/'
ð2 	ð 8ð 8ð 8ð3'
ð6 	ð 8ð 8ð 8ð7'
ð: 	ð 8ð 8ð 8ð;'
ð> 	ð 8ð 8ð 8ð?'
ðB 	ð (ð (ð (ðC'
ðF 	ð (ð (ð (ðG'
ðJ % kÐ2Ø$ kÐ2ðM'
ð '
ð '
ÐðR	(ð 
?ð 
?‰ˆˆvð %7°vÔ$>Ð˜5Ñ!Ð!ðCð Cð Cð Cð Cð Cð Cr=   rê   c                   óx   ‡ — e Zd ZdZdddœZˆ fd„Z ed                     ¦   «         ¦  «        Zd„ Z	d„ Z
d	„ Zˆ xZS )
ÚUnicodeFontsaa  
    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 can not be found in the font.
    é£   é¡   )é×   r%   c                 ó|  •— t           j        d         }t          t          t          dœ                     |¦  «        }|r ||i |¤Žnd | _         t          ¦   «         j        |i |¤Ž i | _	        d 
                    ¦   «         D ]0}t           j        d|z            }t          |¦  «        }|| j	        |<   Œ1t          d¦  «        }t          |¦  «        }|| j	        d<   t          | j        t          ¦  «        rFddd	d
dddœ}|                     ¦   «         D ]*\  }	}
t          |
¦  «        }|| j	        |	<   || j	        |
<   Œ)d S d S )Nzmathtext.fallback)ÚstixÚstixsansÚcmzcal rm tt it bf sfz	mathtext.rñ   rø   ÚSTIXGeneralÚSTIXSizeOneSymÚSTIXSizeTwoSymÚSTIXSizeThreeSymÚSTIXSizeFourSymÚSTIXSizeFiveSym)r   r   rn   rÊ   é   é   )ru   rv   rú   ÚStixSansFontsrê   r¾   Ú_fallback_fontr³   r<   r½   rT  r   r   Ú
isinstancerý   )r;   r·   r¸   Úfallback_rcÚfont_clsÚtexfontÚproprA   ÚstixsizedaltfontsÚsizeÚnamerÿ   r»   s               €r/   r<   zUnicodeFonts.__init__ç  sy  ø€ å”lÐ#6Ô7ˆÝ%Ý -Ý%ðð ÷ ’c˜+Ñ&Ô&ð 	ð <DÐM˜h˜h¨Ð7°Ð7Ð7Ð7ÈˆÔà�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ØˆŒØ+×1Ò1Ñ3Ô3ð 	)ð 	)ˆGÝ”< ¨gÑ 5Ô6ˆDÝ˜D‘>”>ˆDØ$(ˆDŒL˜Ñ!Ð!Ý˜hÑ'Ô'ˆÝ˜‰~Œ~ˆØ!ˆŒ�TÑõ �dÔ)­9Ñ5Ô5ð 	.à!Ø$Ø$Ø&Ø%Ø%ð!'ð !'Ðð 0×5Ò5Ñ7Ô7ð .ð .‘
��dÝ# D™>œ>�Ø%-�”˜TÑ"Ø%-�”˜TÑ"Ð"ð	.ð 	.ð.ð .r=   r   c                 ó
   — ||fS r7   r@   )r;   r¬   r•   Úuniindexs       r/   Ú_map_virtual_fontzUnicodeFonts._map_virtual_font  s   € Ø˜Ð!Ð!r=   c                 ó  — 	 t          |¦  «        }d}nN# t          $ rA t          d¦  «        }d}t                               d                     |¦  «        ¦  «         Y nw xY w|                      |||¦  «        \  }}|}|ré|dk    r\|dk     rVt          |¦  «        }t          j	        |¦  «        d         dk    s't          j
        |¦  «                             d	¦  «        rd
}|dk    p|| j        v }d}|                      |¦  «        }	|	�_|| j        v r9|	j        dk    r.t!          t#          j        d¦  «        ¦  «        }	| j        |         }|	                     |¦  «        }
|
dk    rd}|�s| j        r–|dv rt+          | j        t,          ¦  «        rd
}| j                             |||¦  «        }|d         j        }|t1          t2          j                             ¦   «         ¦  «        v rd}t                               d||¦  «         |S |dv r,t+          | t,          ¦  «        r|                      d
||¦  «        S t                               d                     |||¦  «        ¦  «         |                      d
¦  «        }	d}d}|	||fS )NTú?Fz#No TeX to Unicode mapping for {!a}.rõ   i   r   ÚLzGREEK CAPITALró   rì   zfonts/ttf/cmsy10.ttf)rõ   r²   zComputer ModernzSubstituting symbol %s from %szTFont {!r} does not have a glyph for {!a} [U+{:x}], substituting with a dummy symbol.é¤   )r0   r+   r'   Ú_logÚwarningr,   rt  ÚchrÚunicodedataÚcategoryrq  Ú
startswithr  rÆ   Ú_cmr10_substitutionsÚfamily_namer   r   Ú_get_data_pathr  ri  rj  rú   rÔ   Úlistrê   rü   ÚvaluesrH   )r;   r¬   r•   r–   rs  Úfound_symbolÚnew_fontnameÚcharrÓ   rA   Ú
glyphindexrJ  Úfamilys                r/   rÔ   zUnicodeFonts._get_glyph  sÕ  € ð	LÝ(¨Ñ-Ô-ˆHØˆLˆLøÝð 	Lð 	Lð 	LÝ˜3‘x”xˆHØ ˆLÝ�LŠLÐ>×EÒEÀcÑJÔJÑKÔKÐKÐKÐKð	Løøøð
 "×3Ò3Ø�j (ñ,ô ,Ñˆ�(ð  ˆð ð 	(Ø˜4ÒÐ H¨wÒ$6Ð$6Ý˜8‘}”}�ÝÔ(¨Ñ.Ô.¨qÔ1°SÒ8Ð8Ý&Ô+¨DÑ1Ô1×<Ò<¸_ÑMÔMð 9à#'�Là# tÒ+ÐL°°tÔ7LÐ0LˆGØ ˆLØ—>’> ,Ñ/Ô/ˆDØÐØ Ô 9Ð9Ð9Ø Ô,°Ò7Ð7Ý#ÝÔ,Ð-CÑDÔDñFô F�Dà#Ô8¸ÔB�HØ!×0Ò0°Ñ:Ô:�
Ø ’?�?Ø#'�Làñ 	 ØÔ"ð  ØÐ 1Ð1Ð1Ý& tÔ':½IÑFÔFð 2à#�HàÔ'×2Ò2°8¸ZÈÑMÔM�Ø˜1œÔ)�Ø�T¥+Ô"6×"=Ò"=Ñ"?Ô"?Ñ@Ô@Ð@Ð@Ø.�FÝ—	’	Ð:¸CÀÑHÔHÐHØ�ð Ð 1Ð1Ð1Ý& t­YÑ7Ô7ð 2àŸ?š?¨4°¸SÑAÔAÐAÝ—’ð 'ç'-¢v¨l¸CÀÑ'JÔ'JñLô Lð Lð —~’~ dÑ+Ô+�Ø�Ø�à�X˜wÐ&Ð&s   ‚ ”AAÁAc                 óP   — | j         r| j                              ||¦  «        S ||fgS r7   )ri  r­   r«   s      r/   r­   z.UnicodeFonts.get_sized_alternatives_for_symbolL  s:   € ØÔð 	ØÔ&×HÒHØ˜#ñô ð à˜3�Ð Ð r=   )r~   r   r€   r�   r  r<   rS  rT  r  rt  rÔ   r­   rç   rè   s   @r/   rX  rX  Ó  s¤   ø€ € € € € ð	ð 	ð Øðð Ðð
 .ð  .ð  .ð  .ð  .ðD �s˜=×.Ò.Ñ0Ô0Ñ1Ô1Ðð"ð "ð "ð<'ð <'ð <'ð|!ð !ð !ð !ð !ð !ð !r=   rX  c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )ÚDejaVuFontsc                 ó”  — t          | t          ¦  «        rt          |i |¤Ž| _        nt	          |i |¤Ž| _        t          |i |¤Ž| _        t          j        | g|¢R i |¤Ž i | _	        | j
                             ddddddœ¦  «         | j
                             ¦   «         D ](\  }}t          |¦  «        }|| j	        |<   || j	        |<   Œ)d S )Nra  rb  rc  rd  re  )r   rn   rÊ   rf  rg  )rj  ÚDejaVuSerifFontsrú   ri  rh  rê   Úbakomar¯   r<   r½   rü   Úupdaterý   r   ©r;   r·   r¸   rþ   rq  rÿ   s         r/   r<   zDejaVuFonts.__init__U  s  € å�dÕ,Ñ-Ô-ð 	AÝ"+¨TÐ"<°VÐ"<Ð"<ˆDÔÐå"/°Ð"@¸Ð"@Ð"@ˆDÔÝ! 4Ð2¨6Ð2Ð2ˆŒÝÔ˜tÐ5 dÐ5Ð5Ð5¨fÐ5Ð5Ð5ØˆŒàŒ×ÒØØØ!Ø Ø ð
ð 
ñ 	ô 	ð 	ð œ×,Ò,Ñ.Ô.ð 	*ð 	*‰IˆC�Ý ‘~”~ˆHØ (ˆDŒL˜ÑØ!)ˆDŒL˜ÑÐð	*ð 	*r=   c                 óV  •— |dk    r| j                              |||¦  «        S t          |¦  «        }|                      d¦  «        }|�>|                     |¦  «        }|dk    r#t          ¦   «                              d||¦  «        S t          ¦   «                              |||¦  «        S )Nú\primerø   r   )rŽ  rÔ   r0   rÆ   r  r³   )r;   r¬   r•   r–   rs  rA   r‡  r»   s          €r/   rÔ   zDejaVuFonts._get_glyphk  s¢   ø€ à�)ÒÐØ”;×)Ò)¨(°JÀÑDÔDÐDõ )¨Ñ-Ô-ˆHØ—>’> $Ñ'Ô'ˆDØÐØ!×0Ò0°Ñ:Ô:�
Ø ’?�?Ý ™7œ7×-Ò-¨d°JÀÑDÔDÐDå‘7”7×%Ò% h°
¸CÑ@Ô@Ð@r=   )r~   r   r€   r<   rÔ   rç   rè   s   @r/   r‹  r‹  S  sP   ø€ € € € € ð*ð *ð *ð,Að Að Að Að Að Að Að Að Ar=   r‹  c                   ó&   — e Zd ZdZddddddddœZd	S )
r�  zv
    A font handling class for the DejaVu Serif fonts

    If a glyph is not found it will fallback to Stix Serif
    úDejaVu SerifzDejaVu Serif:italiczDejaVu Serif:weight=boldúDejaVu SansúDejaVu Sans MonozDejaVu Serif Display©ró   rõ   rö   r÷   rô   rø   r   N©r~   r   r€   r�   rü   r@   r=   r/   r�  r�  {  s;   € € € € € ðð ð Ø#Ø(ØØ Ø$Øðð €H€H€Hr=   r�  c                   ó&   — e Zd ZdZddddddddœZdS )	ÚDejaVuSansFontszt
    A font handling class for the DejaVu Sans fonts

    If a glyph is not found it will fallback to Stix Sans
    r•  zDejaVu Sans:italiczDejaVu Sans:weight=boldr–  zDejaVu Sans Displayr—  Nr˜  r@   r=   r/   rš  rš  Œ  s;   € € € € € ðð ð Ø"Ø'ØØ Ø#Øðð €H€H€Hr=   rš  c                   ót   — e Zd ZdZddddddddd	d
dddœZdZdZd„ Zd„ Z e	j
        ¦   «         d„ ¦   «         ZdS )rú   aa  
    A font handling class for the STIX fonts.

    In addition to what UnicodeFonts provides, this class:

    - supports "virtual fonts" which are complete alpha numeric
      character sets with different font styles at special Unicode
      code points, such as "Blackboard".

    - handles sized alternative characters for the STIXSizeX fonts.
    r`  zSTIXGeneral:italiczSTIXGeneral:weight=boldÚSTIXNonUnicodezSTIXNonUnicode:italiczSTIXNonUnicode:weight=boldra  rb  rc  rd  re  )ró   rõ   rö   ÚnonunirmÚnonuniitÚnonunibfr   r   rn   rÊ   rf  rg  Fc                 óÂ   — t          j        | g|¢R i |¤Ž i | _        | j                             ¦   «         D ](\  }}t          |¦  «        }|| j        |<   || j        |<   Œ)d S r7   )r¯   r<   r½   rü   rý   r   r�  s         r/   r<   zStixFonts.__init__º  s{   € ÝÔ˜tÐ5 dÐ5Ð5Ð5¨fÐ5Ð5Ð5ØˆŒØœ×,Ò,Ñ.Ô.ð 	*ð 	*‰IˆC�Ý ‘~”~ˆHØ (ˆDŒL˜ÑØ!)ˆDŒL˜ÑÐð	*ð 	*r=   c                 ó€  — t          j        |¦  «        }| j        r|€|dvrt           d         }d}nd}|�Ôt          |t          ¦  «        r"	 ||         }n# t
          $ r |d         }Y nw xY wd}t          |¦  «        }||k     r7||z   dz  }||         }	||	d         k     r|}n||	d         k    rn|dz   }||k     °7|	d         |cxk    r|	d         k    r n n||	d         z
  |	d	         z   }|	d         }n|sd}t          j        d
         }|dv rt          j        ||¦  «        }|dv rd|cxk    rdk    rn nd|z   }||fS )N)r²   r±   r÷   TFró   r   rn   r   rÊ   rÞ   )ró   rõ   )rõ   ró   rö   i à  iÿø  Únonuni)
r   r¾   Ú_sansrj  Údictr*   r  ru   rv   r   )
r;   r¬   r•   rs  ÚmappingÚdoing_sans_conversionÚloÚhiÚmidÚranges
             r/   rt  zStixFonts._map_virtual_fontÂ  sÐ  € õ %Ô(¨Ñ2Ô2ˆØŒJð 	*˜7˜?ØÐ$:Ð:Ð:Ý(¨Ô.ˆGØ$(Ð!Ð!à$)Ð!àÐÝ˜'¥4Ñ(Ô(ð ,ð,Ø% jÔ1�G�GøÝð ,ð ,ð ,Ø% dœm�G�G�Gð,øøøð ˆBÝ�W‘”ˆBØ�r’'�'Ø˜"‘u˜q‘j�Ø œ�Ø˜e AœhÒ&Ð&Ø�B�BØ  q¤Ò)Ð)Øà˜q™�Bð �r’'�'ð �QŒx˜8Ð/Ð/Ò/Ð/ u¨Q¤xÒ/Ð/Ð/Ð/Ð/Ø# e¨A¤hÑ.°°q´Ñ9�Ø  œ8��Ø*ð <à�Ýœ<Ð(:Ô;�ð �|Ð#Ð#Ý'Ô+¨H°hÑ?Ô?ˆHð Ð)Ð)Ð)¨f¸Ð.JÐ.JÒ.JÐ.JÀFÒ.JÐ.JÐ.JÐ.JÐ.JØ (Ñ*ˆHà˜Ð!Ð!s   ÁA ÁA*Á)A*c                 óì   ‡ ‡— dddddddœ}|                      ||¦  «        }	 t          |¦  «        Šn# t          $ r ||fgcY S w xY wˆ ˆfd„t          d	¦  «        D ¦   «         }|d
k    r
|d d…         }|S )Nr  r  r  r  u   âŸ¨u   âŸ©)rM  rN  rO  rP  rK  rL  c                 óŠ   •— g | ]?}‰                      |¦  «                             ‰¦  «        d k    ¯.|t          ‰¦  «        f‘Œ@S )r   )rÆ   r  r{  )rE   r  r;   rs  s     €€r/   rJ   z?StixFonts.get_sized_alternatives_for_symbol.<locals>.<listcomp>ÿ  sU   ø€ ð Lð Lð L¨qØŸ>š>¨!Ñ,Ô,×;Ò;¸HÑEÔEÈÒJÐJð �C ™MœMÐ*ØJÐJÐJr=   é   r8  éÿÿÿÿ)r¾   r0   r+   rª  )r;   r¬   r–   ÚfixesÚalternativesrs  s   `    @r/   r­   z+StixFonts.get_sized_alternatives_for_symboló  sÓ   øø€ ð ˜s¨3°sØ6Ø7ð
ð 
ˆð
 �iŠi˜˜SÑ!Ô!ˆð	%Ý(¨Ñ-Ô-ˆHˆHøÝð 	%ð 	%ð 	%Ø˜s�OÐ$Ð$Ð$Ð$ð	%øøøðLð Lð Lð Lð LµE¸!±H´Hð Lñ Lô Lˆð �,ÒÐØ'¨¨¨Ô,ˆLØÐs   £3 ³AÁAN)r~   r   r€   r�   rü   ri  r£  r<   rt  r´   rµ   r­   r@   r=   r/   rú   rú   �  s¢   € € € € € ð
ð 
ð Ø"Ø'Ø$Ø+Ø0ØØØØØØðð €Hð €NØ€Eð*ð *ð *ð/"ð /"ð /"ðb €YÔÑÔðð ñ Ôðð ð r=   rú   c                   ó   — e Zd ZdZdZdS )rh  zd
    A font handling class for the STIX fonts (that uses sans-serif
    characters by default).
    TN)r~   r   r€   r�   r£  r@   r=   r/   rh  rh    s   € € € € € ðð ð €E€E€Er=   rh  çffffffæ?r­  c                   ó2   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )ÚFontConstantsBasezÔ
    A set of constants that controls how certain things, such as sub-
    and superscripts are laid out.  These are all metrics that can't
    be reliably retrieved from the font metrics in the font itself.
    çš™™™™™©?gš™™™™™Ù?r²  ç333333Ó?ç      à?gš™™™™™™?çš™™™™™É?çš™™™™™¹?N)r~   r   r€   r�   Úscript_spaceÚsubdropÚsup1Úsub1Úsub2ÚdeltaÚdelta_slantedÚdelta_integralr@   r=   r/   r´  r´  /  sP   € € € € € ðð ð €Lð €Gð €Dð €Dð €Dð €Eð
 €Mð €N€N€Nr=   r´  c                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
dS )ÚComputerModernFontConstantsg333333³?r¸  gÍÌÌÌÌÌÜ?r¶  N)r~   r   r€   rº  r»  r¼  r½  r¾  r¿  rÀ  rÁ  r@   r=   r/   rÃ  rÃ  S  s6   € € € € € Ø€LØ€GØ€DØ€DØ€DØ€EØ€MØ€N€N€Nr=   rÃ  c                   ó&   — e Zd ZdZdZdZdZdZdZdS )ÚSTIXFontConstantsr¹  çš™™™™™é?ç333333ã?rµ  r¶  N)	r~   r   r€   rº  r¼  r¾  r¿  rÀ  rÁ  r@   r=   r/   rÅ  rÅ  ^  s,   € € € € € Ø€LØ€DØ€DØ€EØ€MØ€N€N€Nr=   rÅ  c                   ó   — e Zd ZdZdZdZdZdS )ÚSTIXSansFontConstantsrµ  rÆ  rÇ  r¶  N)r~   r   r€   rº  r¼  rÀ  rÁ  r@   r=   r/   rÉ  rÉ  g  s"   € € € € € Ø€LØ€DØ€MØ€N€N€Nr=   rÉ  c                   ó   — e Zd ZdS )ÚDejaVuSerifFontConstantsN©r~   r   r€   r@   r=   r/   rË  rË  n  ó   € € € € € Ø€Dr=   rË  c                   ó   — e Zd ZdS )ÚDejaVuSansFontConstantsNrÌ  r@   r=   r/   rÏ  rÏ  r  rÍ  r=   rÏ  r•  r–  r”  rï   rñ   rî   rì   rð   rë   rí   r`  rœ  re  rd  rc  rb  ra  )zBitstream Vera SanszBitstream Verac                 óÞ   — t                                | j                             | j        ¦  «        j        t          ¦  «        }|t          u r!t          | j        t          ¦  «        rt          S |S r7   )Ú_font_constant_mappingr¾   ÚfontsetrÆ   rA   r€  r´  rÅ  rj  rh  rÉ  )ÚstateÚ	constantss     r/   Ú_get_font_constant_setrÕ  �  sb   € Ý&×*Ò*ØŒ×Ò ¤
Ñ+Ô+Ô7Õ9JñLô L€Ið 	Õ&Ð&Ð&Ý�u”}¥mÑ4Ô4ð 	'å$Ð$ØÐr=   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚNodezA node in the TeX box model.c                 ó   — d| _         d S ©Nr   ©rp  r¨   s    r/   r<   zNode.__init__�  s   € ØˆŒ	ˆ	ˆ	r=   c                 ó*   — t          | ¦  «        j        S r7   )Útyper~   r¨   s    r/   Ú__repr__zNode.__repr__   s   € Ý�D‰zŒzÔ"Ð"r=   c                 ó   — dS ©Nrˆ   r@   )r;   Únexts     r/   rä   zNode.get_kerning£  s   € Øˆsr=   c                 ó&   — | xj         dz  c_         dS )zŠ
        Shrinks one level smaller.  There are only three levels of
        sizes, after which things will no longer get smaller.
        r   NrÚ  r¨   s    r/   ÚshrinkzNode.shrink¦  s   € ð
 	ˆ	Œ	�Q‰ˆ	Œ	ˆ	ˆ	r=   c                 ó   — dS )zRender this node.Nr@   ©r;   rš   rß   r|   s       r/   ÚrenderzNode.render­  s   € € € r=   N)	r~   r   r€   r�   r<   rÝ  rä   râ  rå  r@   r=   r/   r×  r×  š  se   € € € € € Ø&Ð&ðð ð ð#ð #ð #ðð ð ðð ð ð ð  ð  ð  ð  r=   r×  c                   ó2   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zˆ xZS )ÚBoxz A node with a physical location.c                 ór   •— t          ¦   «                              ¦   «          || _        || _        || _        d S r7   )r³   r<   rS   rT   rU   )r;   rS   rT   rU   r»   s       €r/   r<   zBox.__init__´  s2   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ØˆŒØˆŒ
ˆ
ˆ
r=   c                 óê   •— t          ¦   «                              ¦   «          | j        t          k     rA| xj        t
          z  c_        | xj        t
          z  c_        | xj        t
          z  c_        d S d S r7   )r³   râ  rp  ÚNUM_SIZE_LEVELSrS   ÚSHRINK_FACTORrT   rU   ©r;   r»   s    €r/   râ  z
Box.shrinkº  s`   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆJŒJ�=Ñ(ˆJŒJØˆKŒK�=Ñ(ˆKŒKØˆJŒJ�=Ñ(ˆJŒJˆJˆJð 'Ð&r=   c                 ó   — d S r7   r@   r�   s         r/   rå  z
Box.renderÁ  s   € Øˆr=   )r~   r   r€   r�   r<   râ  rå  rç   rè   s   @r/   rç  rç  ±  sf   ø€ € € € € Ø*Ð*ðð ð ð ð ð)ð )ð )ð )ð )ðð ð ð ð ð ð r=   rç  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚVboxz$A box with only height (zero width).c                 óN   •— t          ¦   «                              d||¦  «         d S rß  ©r³   r<   )r;   rT   rU   r»   s      €r/   r<   zVbox.__init__È  s%   ø€ Ý‰Œ×Ò˜˜V UÑ+Ô+Ð+Ð+Ð+r=   ©r~   r   r€   r�   r<   rç   rè   s   @r/   rï  rï  Å  s>   ø€ € € € € Ø.Ð.ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r=   rï  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚHboxz.A box with only width (zero height and depth).c                 óN   •— t          ¦   «                              |dd¦  «         d S rß  rñ  ©r;   rS   r»   s     €r/   r<   zHbox.__init__Ï  s%   ø€ Ý‰Œ×Ò˜  BÑ'Ô'Ð'Ð'Ð'r=   rò  rè   s   @r/   rô  rô  Ì  s>   ø€ € € € € Ø8Ð8ð(ð (ð (ð (ð (ð (ð (ð (ð (r=   rô  c                   óJ   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ fd„Z
ˆ xZS )	ÚCharaþ  
    A single character.

    Unlike TeX, the font information and metrics are stored with each `Char`
    to make it easier to lookup the font metrics when needed.  Note that TeX
    boxes have a width, height, and depth, unlike Type1 and TrueType which use
    a full bounding box and an advance in the x-direction.  The metrics must
    be converted to the TeX model, and the advance (if different from width)
    must be converted into a `Kern` node when the `Char` is added to its parent
    `Hlist`.
    c                 óö   •— t          ¦   «                              ¦   «          || _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |                      ¦   «          d S r7   )	r³   r<   rF  rÒ  rA   r•   rB   r‘   Ú_update_metrics)r;   rF  rÓ  r»   s      €r/   r<   zChar.__init__à  sh   ø€ Ý‰Œ×ÒÑÔÐØˆŒØ”}ˆŒØ”JˆŒ	ØÔ*ˆŒØœˆŒØ”9ˆŒð 	×ÒÑÔÐÐÐr=   c                 ó   — d| j         z  S )Nz`%s`)rF  r¨   s    r/   rÝ  zChar.__repr__ì  s   € Ø˜œ‰Ðr=   c                 ó  — | j                              | j        | j        | j        | j        | j        ¦  «        x}| _        | j        dk    r|j        | _	        n|j	        | _	        |j
        | _        |j
        |j        z
   | _        d S )Nú )rÒ  r—   rA   r•   rF  rB   r‘   Ú_metricsrÒ   rS   rs   rT   rU   ©r;   r]   s     r/   rú  zChar._update_metricsï  sy   € Ø"&¤,×":Ò":ØŒI�t”¨¬°´¸t¼xñ#Iô #Ið 	Iˆ�$”-àŒ6�SŠ=ˆ=Ø œˆDŒJˆJà œˆDŒJØ”oˆŒØ”¨¬Ñ7Ð8ˆŒ
ˆ
ˆ
r=   c                 ó   — | j         j        S r7   )rþ  rÓ   r¨   s    r/   Ú
is_slantedzChar.is_slantedù  s   € ØŒ}Ô$Ð$r=   c                 ó   — | j         j        | j        z
  }d}t          |t          ¦  «        rO| j                             | j        | j        | j	        | j
        |j        |j        |j	        |j
        | j        ¦	  «	        }||z   S )zÄ
        Return the amount of kerning between this and the given character.

        This method is called when characters are strung together into `Hlist`
        to create `Kern` nodes.
        rˆ   )rþ  rÒ   rS   rj  rø  rÒ  r’   rA   r•   rF  rB   r‘   )r;   rà  rÒ   Úkerns       r/   rä   zChar.get_kerningü  sv   € ð ”-Ô'¨$¬*Ñ4ˆØˆÝ�d�DÑ!Ô!ð 	Ø”<×(Ò(Ø”	˜4œ?¨D¬F°D´MØ”	˜4œ?¨D¬F°D´MØ”ñô ˆDð ˜‰~Ðr=   c           
      óz   — | j                              |||| j        | j        | j        | j        | j        ¦  «         d S r7   )rÒ  r›   rA   r•   rF  rB   r‘   rä  s       r/   rå  zChar.render  sG   € ØŒ×!Ò!Ø�A�qØŒI�t”¨¬°´¸t¼xñ	Iô 	Ið 	Ið 	Ið 	Ir=   c                 ó  •— t          ¦   «                              ¦   «          | j        t          k     rV| xj        t
          z  c_        | xj        t
          z  c_        | xj        t
          z  c_        | xj        t
          z  c_        d S d S r7   )	r³   râ  rp  rê  rB   rë  rS   rT   rU   rì  s    €r/   râ  zChar.shrink  sp   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆMŒM�]Ñ*ˆMŒMØˆJŒJ�]Ñ*ˆJŒJØˆKŒK�]Ñ*ˆKŒKØˆJŒJ�]Ñ*ˆJŒJˆJˆJð	 'Ð&r=   )r~   r   r€   r�   r<   rÝ  rú  r  rä   rå  râ  rç   rè   s   @r/   rø  rø  Ó  s©   ø€ € € € € ð
ð 
ð
ð 
ð 
ð 
ð 
ðð ð ð9ð 9ð 9ð%ð %ð %ðð ð ð Ið Ið Ið
+ð +ð +ð +ð +ð +ð +ð +ð +r=   rø  c                   ó.   ‡ — e Zd ZdZd„ Zˆ fd„Zd„ Zˆ xZS )ÚAccentzž
    The font metrics need to be dealt with differently for accents,
    since they are already offset correctly from the baseline in
    TrueType fonts.
    c                 óà   — | j                              | j        | j        | j        | j        | j        ¦  «        x}| _        |j        |j	        z
  | _
        |j        |j        z
  | _        d| _        d S rÙ  )rÒ  r—   rA   r•   rF  rB   r‘   rþ  rh   r^   rS   re   rk   rT   rU   rÿ  s     r/   rú  zAccent._update_metrics   se   € Ø"&¤,×":Ò":ØŒI�t”¨¬°´¸t¼xñ#Iô #Ið 	Iˆ�$”-à”\ G¤LÑ0ˆŒ
Ø”l W¤\Ñ1ˆŒØˆŒ
ˆ
ˆ
r=   c                 óp   •— t          ¦   «                              ¦   «          |                      ¦   «          d S r7   )r³   râ  rú  rì  s    €r/   râ  zAccent.shrink'  s/   ø€ Ý‰Œ�ŠÑÔÐØ×ÒÑÔÐÐÐr=   c           
      ó®   — | j                              ||| j        j        z
  || j        j        z   | j        | j        | j        | j        | j	        ¦  «         d S r7   )
rÒ  r›   rþ  r^   rk   rA   r•   rF  rB   r‘   rä  s       r/   rå  zAccent.render+  s[   € ØŒ×!Ò!Ø�A˜œÔ*Ñ*¨A°´Ô0BÑ,BØŒI�t”¨¬°´¸t¼xñ	Iô 	Ið 	Ið 	Ið 	Ir=   )r~   r   r€   r�   rú  râ  rå  rç   rè   s   @r/   r  r    sg   ø€ € € € € ðð ð
ð ð ðð ð ð ð ðIð Ið Ið Ið Ið Ið Ir=   r  c                   ó<   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zd„ Zˆ fd„Zˆ xZS )ÚListz0A list of nodes (either horizontal or vertical).c                 ó”   •— t          ¦   «                              ddd¦  «         d| _        || _        d| _        d| _        d| _        d S )Nrˆ   r   )r³   r<   Úshift_amountÚchildrenÚglue_setÚ	glue_signÚ
glue_order©r;   Úelementsr»   s     €r/   r<   zList.__init__4  sG   ø€ Ý‰Œ×Ò˜˜R Ñ$Ô$Ð$ØˆÔØ$ˆŒàˆŒØˆŒØˆŒˆˆr=   c           
      óÂ   •— dt          ¦   «                              ¦   «         | j        | j        | j        | j        d                     d„ | j        D ¦   «         ¦  «        fz  S )Nz'%s<w=%.02f h=%.02f d=%.02f s=%.02f>[%s]z, c                 ó,   — g | ]}t          |¦  «        ‘ŒS r@   )Úrepr©rE   rß   s     r/   rJ   z!List.__repr__.<locals>.<listcomp>B  s   € Ð6Ð6Ð6 1•t˜A‘w”wÐ6Ð6Ð6r=   )r³   rÝ  rS   rT   rU   r  Újoinr  rì  s    €r/   rÝ  zList.__repr__=  s[   ø€ Ø8Ý‰GŒG×ÒÑÔØŒJ˜œØŒJ˜Ô)Ø�IŠIÐ6Ð6¨¬Ð6Ñ6Ô6Ñ7Ô7ð	<9ñ 9ð 	9r=   c                 ó’  ‡— t          ˆfd„t          t          ‰¦  «        ¦  «        d d d…         D ¦   «         d¦  «        x| _        }|| _        ‰|         dk    r|‰|         z  | _        nd| _        d| _        |dk    rEt          | j        ¦  «        r3t           	                    d|t          | ¦  «        j        | ¦  «         d S d S d S )Nc              3   ó4   •K  — | ]}‰|         d k    ¯|V — ŒdS )r   Nr@   )rE   r  Útotalss     €r/   ú	<genexpr>z!List._set_glue.<locals>.<genexpr>G  s+   øè è € ÐCÐC�1°F¸1´IÀ²N°NˆQ°N°N°N°NÐCÐCr=   r®  r   rˆ   z	%s %s: %r)rà  rª  r  r  r  r  Ú
glue_ratior  ry  rz  rÜ  r~   )r;   rß   Úsignr  Ú
error_typer  s      `  r/   Ú	_set_gluezList._set_glueD  së   ø€ Ý"àCÐCÐCÐC��c &™kœkÑ*Ô*¨4¨4¨R¨4Ô0ÐCÑCÔCÀQñHô Hð 	HˆŒ˜!ð ˆŒØ�!Œ9˜Š?ˆ?Ø  q¤	™MˆDŒMˆMàˆDŒNØ ˆDŒOØ�Š6ˆ6Ý�4”=Ñ!Ô!ð DÝ—’˜[Ø'­¨d©¬Ô)<¸dñDô Dð Dð Dð Dð ˆ6ðDð Dr=   c                 óü   •— | j         D ]}|                     ¦   «          Œt          ¦   «                              ¦   «          | j        t          k     r,| xj        t          z  c_        | xj        t          z  c_        d S d S r7   )r  râ  r³   rp  rê  r  rë  r  )r;   Úchildr»   s     €r/   râ  zList.shrinkS  st   ø€ Ø”]ð 	ð 	ˆEØ�LŠL‰NŒNˆNˆNÝ‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØÐÔ¥Ñ.ÐÔØˆMŒM¥Ñ.ˆMŒMˆMˆMð 'Ð&r=   )	r~   r   r€   r�   r<   rÝ  r!  râ  rç   rè   s   @r/   r  r  1  s‚   ø€ € € € € Ø:Ð:ðð ð ð ð ð9ð 9ð 9ð 9ð 9ðDð Dð Dð/ð /ð /ð /ð /ð /ð /ð /ð /r=   r  c                   ó2   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd	d„Zˆ xZS )
ÚHlistzA horizontal list of boxes.rˆ   Ú
additionalTc                 ó¤   •— t          ¦   «                              |¦  «         |r|                      ¦   «          |                      ||¬¦  «         d S )N)rV   r+  )r³   r<   r  Úhpack)r;   r  rV   r+  Údo_kernr»   s        €r/   r<   zHlist.__init___  sL   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Øð 	Ø�IŠI‰KŒKˆKØ�
Š
�Q˜!ˆ
ÑÔÐÐÐr=   c                 óf  — g }t          | j        ¦  «        }|r˜t          |¦  «        D ]}| j        |         }||dz
  k     r| j        |dz            }nd}|                     |¦  «         |                     |¦  «        }|dk    r$t          |¦  «        }|                     |¦  «         Œ€|| _        dS dS )zû
        Insert `Kern` nodes between `Char` nodes to set kerning.

        The `Char` nodes themselves determine the amount of kerning they need
        (in `~Char.get_kerning`), and this function just creates the correct
        linked list.
        r   Nrˆ   )r  r  rª  r™   rä   ÚKern)r;   Únew_childrenÚnum_childrenr  Úelemrà  Úkerning_distancer  s           r/   r  z
Hlist.kerne  sÕ   € ð ˆÝ˜4œ=Ñ)Ô)ˆØð 	)Ý˜<Ñ(Ô(ð .ð .�Ø”} QÔ'�Ø�| aÑ'Ò'Ð'Øœ=¨¨Q©Ô/�D�Dà�Dà×#Ò# DÑ)Ô)Ð)Ø#'×#3Ò#3°DÑ#9Ô#9Ð Ø# rÒ)Ð)ÝÐ 0Ñ1Ô1�DØ ×'Ò'¨Ñ-Ô-Ð-øØ(ˆDŒMˆMˆMð	)ð 	)r=   c                 óæ  — d}d}d}dgdz  }dgdz  }| j         D �][}t          |t          ¦  «        r5||j        z  }t	          ||j        ¦  «        }t	          ||j        ¦  «        }ŒMt          |t          ¦  «        r~||j        z  }t          j	        |j        ¦  «        sZt          j	        |j        ¦  «        sAt          |dd¦  «        }	t	          ||j        |	z
  ¦  «        }t	          ||j        |	z   ¦  «        }Œàt          |t          ¦  «        rG|j        }
||
j        z  }||
j        xx         |
j        z  cc<   ||
j        xx         |
j        z  cc<   �Œ<t          |t"          ¦  «        r
||j        z  }�Œ]|| _        || _        |dk    r||z  }|| _        ||z
  }|dk    rd| _        d| _        d| _        dS |dk    r|                      |d|d¦  «         dS |                      |d	|d
¦  «         dS )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ˆ   rf  r  r&  r   Nr   ÚOverfulr®  ÚUnderful)r  rj  rø  rS   rp   rT   rU   rç  rQ   ÚisinfÚgetattrÚGlueÚ	glue_specÚstretch_orderÚstretchÚshrink_orderrâ  r+  r  r  r  r!  )r;   rV   r+  rI   rW   rß   Útotal_stretchÚtotal_shrinkr9  r<  r6  s              r/   r(  zHlist.hpackŒ  s  € ð. ˆØˆØˆØ˜˜q™ˆØ�t˜a‘xˆØ”ð 	ñ 	ˆAÝ˜!�TÑ"Ô"ð Ø�Q”W‘�Ý˜˜1œ8Ñ$Ô$�Ý˜˜1œ7‘O”O��Ý˜A�sÑ#Ô#ð Ø�Q”W‘�Ý”x ¤Ñ)Ô)ð ,µ"´(¸1¼7Ñ2CÔ2Cð ,Ý  >°2Ñ6Ô6�AÝ˜A˜qœx¨!™|Ñ,Ô,�AÝ˜A˜qœw¨™{Ñ+Ô+�AøÝ˜A�tÑ$Ô$ð ØœK�	Ø�Y”_Ñ$�Ø˜iÔ5Ð6Ð6Ô6¸)Ô:KÑKÐ6Ð6Ñ6Ø˜YÔ3Ð4Ð4Ô4¸	Ô8HÑHÐ4Ð4Ñ4Ñ4Ý˜A�tÑ$Ô$ð Ø�Q”W‘�ùØˆŒØˆŒ
à�ÒÐØ�‰FˆAØˆŒ
Ø�‰Eˆà�Š7ˆ7ØˆDŒNØˆDŒOØ ˆDŒOØˆFØˆrŠ6ˆ6Ø�NŠN˜1˜a °	Ñ:Ô:Ð:Ð:Ð:à�NŠN˜1˜b ,°
Ñ;Ô;Ð;Ð;Ð;r=   )rˆ   r&  T©rˆ   r&  )r~   r   r€   r�   r<   r  r(  rç   rè   s   @r/   r%  r%  \  sg   ø€ € € € € Ø%Ð%ðð ð ð ð ð ð)ð )ð )ðN><ð ><ð ><ð ><ð ><ð ><ð ><ð ><r=   r%  c                   ó<   ‡ — e Zd ZdZdˆ fd„	Zddej        fd„Zˆ xZS )ÚVlistzA vertical list of boxes.rˆ   r&  c                 óx   •— t          ¦   «                              |¦  «         |                      ||¬¦  «         d S )N)rI   r+  )r³   r<   Úvpack)r;   r  rI   r+  r»   s       €r/   r<   zVlist.__init__Ð  s7   ø€ Ý‰Œ×Ò˜Ñ"Ô"Ð"Ø�
Š
�Q˜!ˆ
ÑÔÐÐÐr=   c                 ó�  — d}d}d}dgdz  }dgdz  }| j         D �]}	t          |	t          ¦  «        rW|||	j        z   z  }|	j        }t          j        |	j        ¦  «        s)t          |	dd¦  «        }
t          ||	j        |
z   ¦  «        }Œot          |	t          ¦  «        rM||z  }d}|	j        }||j        z  }||j        xx         |j        z  cc<   ||j        xx         |j        z  cc<   ŒÑt          |	t           ¦  «        r|||	j        z   z  }d}Œöt          |	t"          ¦  «        rt%          d¦  «        ‚�Œ|| _        ||k    r|||z
  z  }|| _        n|| _        |dk    r||z  }|| _        ||z
  }|dk    rd| _        d| _        d| _        dS |dk    r|                      |d|d	¦  «         dS |                      |d
|d¦  «         dS )ak  
        Compute the dimensions of the resulting boxes, and to adjust the glue
        if one of those dimensions is pre-specified.

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

        Notes
        -----
        The defaults produce a box with the natural height of the contents.
        rˆ   rf  r  z1Internal mathtext error: Char node found in Vlistr&  r   Nr   r1  r®  r2  )r  rj  rç  rT   rU   rQ   r3  rS   r4  rp   r5  r6  r7  r8  r9  râ  r+  rø  ÚRuntimeErrorr  r  r  r!  )r;   rI   r+  r'  rV   rW   rß   r:  r;  r9  r<  r6  s               r/   r@  zVlist.vpackÔ  s2  € ð, ˆØˆØˆØ˜˜q™ˆØ�t˜a‘xˆØ”ð 	Iñ 	IˆAÝ˜!�SÑ!Ô!ð IØ�Q˜œ‘\Ñ!�Ø”G�Ý”x ¤Ñ(Ô(ð ,Ý  >°2Ñ6Ô6�AÝ˜A˜qœw¨™{Ñ+Ô+�AøÝ˜A�tÑ$Ô$ð IØ�Q‘�Ø�ØœK�	Ø�Y”_Ñ$�Ø˜iÔ5Ð6Ð6Ô6¸)Ô:KÑKÐ6Ð6Ñ6Ø˜YÔ3Ð4Ð4Ô4¸	Ô8HÑHÐ4Ð4Ñ4Ð4Ý˜A�tÑ$Ô$ð IØ�Q˜œ‘[Ñ �Ø��Ý˜A�tÑ$Ô$ð IÝ"ØGñIô Ið IñIð ˆŒ
ØˆqŠ5ˆ5Ø��Q‘‰JˆAØˆDŒJˆJàˆDŒJà�ÒÐØ�‰FˆAØˆŒØ�‰Eˆà�Š6ˆ6ØˆDŒNØˆDŒOØ ˆDŒOØˆFàˆrŠ6ˆ6Ø�NŠN˜1˜a °	Ñ:Ô:Ð:Ð:Ð:à�NŠN˜1˜b ,°
Ñ;Ô;Ð;Ð;Ð;r=   r<  )	r~   r   r€   r�   r<   rQ   Úinfr@  rç   rè   s   @r/   r>  r>  Í  sj   ø€ € € € € Ø#Ð#ðð ð ð ð ð ð ˜L¨B¬Fð E<ð E<ð E<ð E<ð E<ð E<ð E<ð E<r=   r>  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚRulea™  
    A solid black rectangle.

    It has *width*, *depth*, and *height* fields just as in an `Hlist`.
    However, if any of these dimensions is inf, the actual value will be
    determined by running the rule up to the boundary of the innermost
    enclosing box.  This is called a "running dimension".  The width is never
    running in an `Hlist`; the height and depth are never running in a `Vlist`.
    c                 óf   •— t          ¦   «                              |||¦  «         |j        | _        d S r7   )r³   r<   rÒ  )r;   rS   rT   rU   rÓ  r»   s        €r/   r<   zRule.__init__'  s,   ø€ Ý‰Œ×Ò˜ ¨Ñ.Ô.Ð.Ø”}ˆŒˆˆr=   c                 óN   — | j                              |||||z   ||z   ¦  «         d S r7   )rÒ  rž   )r;   rš   rß   r|   rV   rI   s         r/   rå  zRule.render+  s.   € ØŒ×'Ò'¨°°1°a¸!±e¸QÀ¹UÑCÔCÐCÐCÐCr=   )r~   r   r€   r�   r<   rå  rç   rè   s   @r/   rE  rE    sX   ø€ € € € € ðð ð%ð %ð %ð %ð %ðDð Dð Dð Dð Dð Dð Dr=   rE  c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚHrulez.Convenience class to create a horizontal rule.Nc                 óž   •— |€|                      ¦   «         }|dz  x}}t          ¦   «                              t          j        |||¦  «         d S )Nr·  ©Úget_current_underline_thicknessr³   r<   rQ   rC  )r;   rÓ  Ú	thicknessrT   rU   r»   s        €r/   r<   zHrule.__init__2  sN   ø€ ØÐØ×=Ò=Ñ?Ô?ˆIØ" S™Ð(ˆ�Ý‰Œ×Ò�œ ¨°Ñ6Ô6Ð6Ð6Ð6r=   r7   rò  rè   s   @r/   rI  rI  /  sC   ø€ € € € € Ø8Ð8ð7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7ð 7r=   rI  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )ÚVrulez,Convenience class to create a vertical rule.c                 ó    •— |                      ¦   «         }t          ¦   «                              |t          j        t          j        |¦  «         d S r7   rK  )r;   rÓ  rM  r»   s      €r/   r<   zVrule.__init__<  s<   ø€ Ø×9Ò9Ñ;Ô;ˆ	Ý‰Œ×Ò˜¥B¤F­B¬F°EÑ:Ô:Ð:Ð:Ð:r=   rò  rè   s   @r/   rO  rO  9  s>   ø€ € € € € Ø6Ð6ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r=   rO  Ú	_GlueSpecz/width stretch stretch_order shrink shrink_orderrˆ   ç      ð?rn   rÊ   g      ð¿)ÚfilÚfillÚfilllÚneg_filÚneg_fillÚ	neg_filllÚemptyÚssc                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )r5  a  
    Most of the information in this object is stored in the underlying
    ``_GlueSpec`` class, which is shared between multiple glue objects.
    (This is a memory optimization which probably doesn't matter anymore, but
    it's easier to stick to what TeX does.)
    c                 óô   •— t          ¦   «                              ¦   «          t          |t          ¦  «        rt          j        |         }n't          |t          ¦  «        r|}nt          d¦  «        ‚|| _        d S )Nz.glue_type must be a glue spec name or instance)r³   r<   rj  ÚstrrQ  Ú_namedr+   r6  )r;   Ú	glue_typer6  r»   s      €r/   r<   zGlue.__init__W  so   ø€ Ý‰Œ×ÒÑÔÐÝ�i¥Ñ%Ô%ð 	OÝ!Ô(¨Ô3ˆIˆIÝ˜	¥9Ñ-Ô-ð 	OØ!ˆIˆIåÐMÑNÔNÐNØ"ˆŒˆˆr=   c                 óÊ   •— t          ¦   «                              ¦   «          | j        t          k     r1| j        }|                     |j        t          z  ¬¦  «        | _        d S d S )N©rS   )r³   râ  rp  rê  r6  Ú_replacerS   rë  )r;   rJ  r»   s     €r/   râ  zGlue.shrinka  sS   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&Ø”ˆAØŸZšZ¨a¬g½Ñ.E˜ZÑFÔFˆDŒNˆNˆNð 'Ð&r=   )r~   r   r€   r�   r<   râ  rç   rè   s   @r/   r5  r5  O  sd   ø€ € € € € ðð ð#ð #ð #ð #ð #ðGð Gð Gð Gð Gð Gð Gð Gð Gr=   r5  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú	HCenteredzl
    A convenience class to create an `Hlist` whose contents are
    centered within its enclosing box.
    c                 óŒ   •— t          ¦   «                              t          d¦  «        g|¢t          d¦  «        ‘d¬¦  «         d S )NrZ  F©r)  ©r³   r<   r5  r  s     €r/   r<   zHCentered.__init__n  s?   ø€ Ý‰Œ×Ò�$˜t™*œ*Ð< xÐ<µ°d±´Ð<ÀeÐÑLÔLÐLÐLÐLr=   rò  rè   s   @r/   rd  rd  h  sK   ø€ € € € € ðð ð
Mð Mð Mð Mð Mð Mð Mð Mð Mr=   rd  c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú	VCenteredzk
    A convenience class to create a `Vlist` whose contents are
    centered within its enclosing box.
    c                 óˆ   •— t          ¦   «                              t          d¦  «        g|¢t          d¦  «        ‘¦  «         d S )NrZ  rg  r  s     €r/   r<   zVCentered.__init__x  s:   ø€ Ý‰Œ×Ò�$˜t™*œ*Ð< xÐ<µ°d±´Ð<Ñ=Ô=Ð=Ð=Ð=r=   rò  rè   s   @r/   ri  ri  r  sB   ø€ € € € € ðð ð
>ð >ð >ð >ð >ð >ð >ð >ð >r=   ri  c                   ó:   ‡ — e Zd ZdZdZdZˆ fd„Zd„ Zˆ fd„Zˆ xZ	S )r+  a�  
    A `Kern` node has a width field to specify a (normally
    negative) amount of spacing. This spacing correction appears in
    horizontal lists between letters like A and V when the font
    designer said that it looks better to move them closer together or
    further apart. A kern node can also appear in a vertical list,
    when its *width* denotes additional spacing in the vertical
    direction.
    r   c                 óV   •— t          ¦   «                              ¦   «          || _        d S r7   )r³   r<   rS   rö  s     €r/   r<   zKern.__init__Š  s$   ø€ Ý‰Œ×ÒÑÔÐØˆŒ
ˆ
ˆ
r=   c                 ó   — d| j         z  S )Nzk%.02fra  r¨   s    r/   rÝ  zKern.__repr__Ž  s   € Ø˜$œ*Ñ$Ð$r=   c                 ó–   •— t          ¦   «                              ¦   «          | j        t          k     r| xj        t
          z  c_        d S d S r7   )r³   râ  rp  rê  rS   rë  rì  s    €r/   râ  zKern.shrink‘  s@   ø€ Ý‰Œ�ŠÑÔÐØŒ9•Ò&Ð&ØˆJŒJ�-Ñ'ˆJŒJˆJˆJð 'Ð&r=   )
r~   r   r€   r�   rT   rU   r<   rÝ  râ  rç   rè   s   @r/   r+  r+  |  sv   ø€ € € € € ðð ð €FØ€Eðð ð ð ð ð%ð %ð %ð(ð (ð (ð (ð (ð (ð (ð (ð (r=   r+  c                   ó$   ‡ — e Zd ZdZdˆ fd„	Zˆ xZS )ÚAutoHeightChara  
    A character as close to the given height and depth as possible.

    When using a font with multiple height versions of some characters (such as
    the BaKoMa fonts), the correct glyph will be selected, otherwise this will
    always just return a scaled version of the glyph.
    FNc                 óR  •— |j                              |j        |¦  «        }|j                              |j        |j        |j        ¦  «        }|                     ¦   «         }||z   }	|D ]7\  }
}|
|_        t          ||¦  «        }|j        |j	        z   |	d|z  z
  k    r nŒ8d}|j        dk    st          |¦  «        dk    r>|€|	|j        |j	        z   z  }|xj        |z  c_        t          ||¦  «        }||j	        z
  }t          ¦   «                              |g¦  «         || _        d S )Nr¸  r   r   )rÒ  r­   rA   r£   rB   r‘   Úcopyrø  rT   rU   r  r³   r<   r  )r;   rF  rT   rU   rÓ  ÚalwaysÚfactorr°  rà   Útarget_totalr¬   r–   r†  Úshiftr»   s                 €r/   r<   zAutoHeightChar.__init__   sA  ø€ Ø”}×FÒFØŒJ˜ñô ˆð ”-×+Ò+ØŒJ˜œ¨¬	ñ3ô 3ˆð —
’
‘”ˆØ ‘~ˆØ)ð 	ð 	‰MˆH�cØ!ˆEŒJÝ˜˜UÑ#Ô#ˆDð Œ{˜TœZÑ'¨<¸#À¹-Ñ+GÒGÐGØ�ð Hð ˆØŒ:˜Š?ˆ?�c ,Ñ/Ô/°1Ò4Ð4Øˆ~Ø%¨¬°t´zÑ)AÑB�ØˆNŒN˜fÑ$ˆNŒNÝ˜˜UÑ#Ô#ˆDà˜TœZÑ'ˆEå‰Œ×Ò˜$˜Ñ Ô Ð Ø!ˆÔÐÐr=   )FNrò  rè   s   @r/   rp  rp  —  sG   ø€ € € € € ðð ð"ð "ð "ð "ð "ð "ð "ð "ð "ð "r=   rp  c                   ó(   ‡ — e Zd ZdZdefˆ fd„	Zˆ xZS )ÚAutoWidthChara  
    A character as close to the given width as possible.

    When using a font with multiple width versions of some characters (such as
    the BaKoMa fonts), the correct glyph will be selected, otherwise this will
    always just return a scaled version of the glyph.
    Fc                 óh  •— |j                              |j        |¦  «        }|                     ¦   «         }|D ]%\  }}||_         |||¦  «        }	|	j        |k    r nŒ&||	j        z  }
|xj        |
z  c_         |||¦  «        }	t          ¦   «                              |	g¦  «         |	j        | _        d S r7   )rÒ  r­   rA   rr  rS   rB   r³   r<   )r;   rF  rS   rÓ  rs  Ú
char_classr°  r¬   r–   r†  rt  r»   s              €r/   r<   zAutoWidthChar.__init__Ç  sÈ   ø€ Ø”}×FÒFØŒJ˜ñô ˆð —
’
‘”ˆØ)ð 	ð 	‰MˆH�cØ!ˆEŒJØ�:˜c 5Ñ)Ô)ˆDØŒz˜UÒ"Ð"Ø�ð #ð ˜œÑ#ˆØˆŒ˜&Ñ ˆŒØˆz˜#˜uÑ%Ô%ˆå‰Œ×Ò˜$˜Ñ Ô Ð Ø”ZˆŒ
ˆ
ˆ
r=   )r~   r   r€   r�   rø  r<   rç   rè   s   @r/   rx  rx  ¾  sN   ø€ € € € € ðð ð 05Àð  ð  ð  ð  ð  ð  ð  ð  ð  ð  r=   rx  ©r   r   c                 óª   ‡‡‡‡‡‡	‡
‡— |\  }}dŠdŠ|Š|| j         z   Š	t          | ¦  «        Š
d„ Šˆˆˆˆˆˆ	ˆ
ˆfd„Šˆˆˆˆˆˆ	ˆ
ˆfd„Š ‰| ¦  «         ‰
S )a¯  
    Ship out *box* at offset *xy*, converting it to an `Output`.

    Since boxes can be inside of boxes inside of boxes, the main work of `ship`
    is done by two mutually recursive routines, `hlist_out` and `vlist_out`,
    which traverse the `Hlist` nodes and `Vlist` nodes inside of horizontal
    and vertical boxes.  The global variables used in TeX to store state as it
    processes have become local variables here.
    rˆ   c                 ó&   — | dk     rdn	| dk    rdn| S )Ng    eÍÍÁg    eÍÍAr@   )Úvalues    r/   Úclampzship.<locals>.clampë  s    € Ø˜t’|�|ˆtˆt°¸²°¨¨À5ÐHr=   c                 ó€  •— d}d}| j         }| j        }‰}‰}| j        D �]}t          |t          ¦  «        r(|                     ‰‰‰z   ‰‰z   ¦  «         ‰|j        z  ŠŒ@t          |t          ¦  «        r‰|j        z  ŠŒ`t          |t          ¦  «        rht          |j        ¦  «        dk    r‰|j        z  ŠŒ˜‰}||j
        z   Št          |t          ¦  «        r ‰|¦  «         n ‰|¦  «         ||j        z   Š|ŠŒÝt          |t          ¦  «        r„|j        }	|j        }
|j        }t          j        |	¦  «        r| j        }	t          j        |
¦  «        r| j        }
|	dk    r,|dk    r&||
z   Š|                     ‰‰‰z   ‰‰z   ||	¦  «         |Š‰|z  Š�Œvt          |t"          ¦  «        r’|j        }|j        |z
  }|dk    rq|dk    r6|j        |k    r*||j        z  }t+           ‰| j        |z  ¦  «        ¦  «        }n5|j        |k    r*||j        z  }t+           ‰| j        |z  ¦  «        ¦  «        }||z  }‰|z  Š�Œd S )Nr   rˆ   r   )r  r  r  rj  rø  rå  rS   r+  r  r  r  r%  rç  rT   rU   rQ   r3  r5  r6  r7  r8  Úroundr  r9  râ  )r8   Úcur_gÚcur_gluer  r  Ú	base_lineÚ	left_edger9  ÚedgeÚrule_heightÚ
rule_depthÚ
rule_widthr6  r  Úcur_hÚcur_vÚ	hlist_outÚoff_hÚoff_vrš   Ú	vlist_outs                €€€€€€€€r/   rŒ  zship.<locals>.hlist_outî  s—  ø€ ð ˆØˆØ”^ˆ
Ø”Mˆ	Øˆ	Øˆ	à”ð 1	$ñ 1	$ˆAÝ˜!�TÑ"Ô"ð 0$Ø—’˜ ¨¡°¸±Ñ>Ô>Ð>Ø˜œÑ ��Ý˜A�tÑ$Ô$ð -$Ø˜œÑ ��Ý˜A�tÑ$Ô$ð +$å�q”z‘?”? aÒ'Ð'Ø˜QœWÑ$�E�Eà �DØ%¨¬Ñ6�EÝ! !¥UÑ+Ô+ð %Ø!˜	 !™œ˜˜ð "˜	 !™œ˜Ø  1¤7™N�EØ%�E�EÝ˜A�sÑ#Ô#ð $àœh�ØœW�
ØœW�
Ý”8˜KÑ(Ô(ð -Ø"%¤*�KÝ”8˜JÑ'Ô'ð +Ø!$¤�JØ ’?�? z°A¢~ ~Ø%¨
Ñ2�EØ—H’H˜VØ" U™]¨E°E©MØ'¨ñ6ô 6ð 6ð &�EØ˜Ñ#�‘Ý˜A�tÑ$Ô$ð $àœK�	Ø&œ_¨uÑ4�
Ø ’>�>Ø  A’~�~Ø$Ô2°jÒ@Ð@Ø$¨	Ô(9Ñ9˜HÝ$)¨%¨%°´¸xÑ0GÑ*HÔ*HÑ$IÔ$I˜EøØ"Ô/°:Ò=Ð=Ø  IÔ$4Ñ4˜Ý % e e¨C¬L¸8Ñ,CÑ&DÔ&DÑ EÔ E˜Ø˜eÑ#�
Ø˜Ñ#�ùðc1	$ð 1	$r=   c                 óh  •— d}d}| j         }| j        }‰}‰| j        z  Š‰}| j        D �]}t	          |t
          ¦  «        r‰|j        z  ŠŒ#t	          |t          ¦  «        r†t          |j        ¦  «        dk    r‰|j        |j	        z   z  ŠŒc‰|j        z  Š||j
        z   Š‰}| j        |_        t	          |t          ¦  «        r ‰|¦  «         n ‰|¦  «         ||j	        z   Š|ŠŒ¾t	          |t          ¦  «        rg|j        }	|j	        }
|j        }t          j        |¦  «        r| j        }|	|
z  }	|	dk    r*|
dk    r$‰|	z  Š|                     ‰‰‰z   ‰‰z   ||	¦  «         �Œ:t	          |t           ¦  «        r”|j        }|j        |z
  }	|dk    rq|dk    r6|j        |k    r*||j        z  }t)           ‰| j        |z  ¦  «        ¦  «        }n5|j        |k    r*||j        z  }t)           ‰| j        |z  ¦  «        ¦  «        }|	|z  }	‰|	z  Š�Œãt	          |t0          ¦  «        rt3          d¦  «        ‚�Œ	d S )Nr   rˆ   r   z1Internal mathtext error: Char node found in vlist)r  r  rT   r  rj  r+  rS   r  r  rU   r  r%  rç  rQ   r3  rå  r5  r6  r7  r8  r�  r  r9  râ  rø  rB  )r8   r‚  rƒ  r  r  r…  Útop_edger9  Úsave_vr‡  rˆ  r‰  r6  r  rŠ  r‹  rŒ  r�  rŽ  rš   r�  s                €€€€€€€€r/   r�  zship.<locals>.vlist_out+  s›  ø€ ð ˆØˆØ”^ˆ
Ø”Mˆ	Øˆ	Ø�”ÑˆØˆà”ð ,	Iñ ,	IˆAÝ˜!�TÑ"Ô"ð +IØ˜œÑ ��Ý˜A�tÑ$Ô$ð )IÝ�q”z‘?”? aÒ'Ð'Ø˜QœX¨¬Ñ/Ñ/�E�Eà˜QœXÑ%�EØ%¨¬Ñ6�EØ"�FØ!œi�A”GÝ! !¥UÑ+Ô+ð %Ø!˜	 !™œ˜˜à!˜	 !™œ˜Ø" Q¤WÑ,�EØ%�E�EÝ˜A�sÑ#Ô#ð IØœh�ØœW�
ØœW�
Ý”8˜JÑ'Ô'ð +Ø!$¤�JØ˜zÑ)�Ø ’?�? z°A¢~ ~Ø˜[Ñ(�EØ—H’H˜VØ" U™]¨E°E©MØ'¨ñ6ô 6ð 6ùõ ˜A�tÑ$Ô$ð IØœK�	Ø'œo°Ñ5�Ø ’>�>Ø  A’~�~Ø$Ô2°jÒ@Ð@Ø$¨	Ô(9Ñ9˜HÝ$)¨%¨%°´¸xÑ0GÑ*HÔ*HÑ$IÔ$I˜EøØ"Ô/°:Ò=Ð=Ø  IÔ$4Ñ4˜Ý % e e¨C¬L¸8Ñ,CÑ&DÔ&DÑ EÔ E˜Ø˜uÑ$�Ø˜Ñ$�‘Ý˜A�tÑ$Ô$ð IÝ"ØGñIô Ið IñIðU,	Ið ,	Ir=   )rT   r5   )r8   ÚxyrF   rG   r  rŠ  r‹  rŒ  r�  rŽ  rš   r�  s       @@@@@@@@r/   rq   rq   Ú  sæ   øøøøøøøø€ ð �F€BˆØ€EØ€EØ€EØ�”‰O€EÝ�C‰[Œ[€FðIð Ið Ið;$ð ;$ð ;$ð ;$ð ;$ð ;$ð ;$ð ;$ð ;$ð ;$ð ;$ð ;$ðz7Ið 7Ið 7Ið 7Ið 7Ið 7Ið 7Ið 7Ið 7Ið 7Ið 7Ið 7Iðr €Iˆc�N„N€NØ€Mr=   c                 óP   ‡ — ˆ fd„}t          ¦   «                              |¦  «        S )z$Helper class to raise parser errors.c                 ó&   •— t          | |‰¦  «        ‚r7   ©r   )r<  ÚlocÚtoksÚmsgs      €r/   Úraise_errorzError.<locals>.raise_errorn  s   ø€ Ý! ! S¨#Ñ.Ô.Ð.r=   )r   ÚsetParseAction)r™  rš  s   ` r/   ÚErrorrœ  l  s6   ø€ ð/ð /ð /ð /ð /õ ‰7Œ7×!Ò! +Ñ.Ô.Ð.r=   c                   óZ   — e Zd ZdZd„ Zd„ Zed„ ¦   «         Zej        d„ ¦   «         Zd„ Z	dS )ÚParserStatea   
    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                 óL   — || _         || _        || _        || _        || _        d S r7   )rÒ  Ú_fontr•   rB   r‘   )r;   rÒ  rA   r•   rB   r‘   s         r/   r<   zParserState.__init__  s)   € ØˆŒØˆŒ
Ø$ˆŒØ ˆŒØˆŒˆˆr=   c                 ó*   — t          j         | ¦  «        S r7   )rr  r¨   s    r/   rr  zParserState.copy†  s   € ÝŒy˜‰ŒÐr=   c                 ó   — | j         S r7   )r   r¨   s    r/   rA   zParserState.font‰  s
   € àŒzÐr=   c                 ó*   — |dv r|| _         || _        d S )N)ró   rõ   rö   )r•   r   )r;   rq  s     r/   rA   zParserState.font�  s    € àÐ%Ð%Ð%Ø"ˆDŒOØˆŒ
ˆ
ˆ
r=   c                 óX   — | j                              | j        | j        | j        ¦  «        S )z.Return the underline thickness for this state.)rÒ  r¥   rA   rB   r‘   r¨   s    r/   rL  z+ParserState.get_current_underline_thickness“  s)   € àŒ|×3Ò3ØŒI�t”} d¤hñ0ô 0ð 	0r=   N)
r~   r   r€   r�   r<   rr  ÚpropertyrA   ÚsetterrL  r@   r=   r/   rž  rž  t  sƒ   € € € € € ðð ðð ð ðð ð ð ðð ñ „Xðð 
„[ðð ñ „[ðð
0ð 0ð 0ð 0ð 0r=   rž  c                 óÜ   ‡— ˆfd„Š|                       dd¦  «        d         }| |k    r+|d                     d„  ‰|¦  «        D ¦   «         ¦  «        z   n| }||t          d|› �¦  «        z  z
  S )a¡  
    Helper to define TeX commands.

    ``cmd("\cmd", args)`` is equivalent to
    ``"\cmd" - (args | Error("Expected \cmd{arg}{...}"))`` where the names in
    the error message are taken from element names in *args*.  If *expr*
    already includes arguments (e.g. "\cmd{arg}{...}"), then they are stripped
    when constructing the parse element, but kept (and *expr* is used as is) in
    the error message.
    c              3   ó”   •K  — t          | t          ¦  «        r| j        D ]} ‰|¦  «        E d {V —† Œd S | j        r| j        V — d S d S r7   )rj  r   ÚexprsÚresultsName)ÚeltÚexprÚnamess     €r/   r­  zcmd.<locals>.names¥  s   øè è € Ý�c�?Ñ+Ô+ð 	"Øœ	ð 'ð '�Ø ˜5 ™;œ;Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð'ð 'àŒ_ð 	"Ø”/Ð!Ð!Ð!Ð!Ð!ð	"ð 	"r=   r  r   r   Ú c              3   ó    K  — | ]	}d |z  V — Œ
dS )z{%s}Nr@   )rE   rq  s     r/   r  zcmd.<locals>.<genexpr>­  s&   è è € ÐBÐB¨d˜F T™MÐBÐBÐBÐBÐBÐBr=   z	Expected )rT  r  rœ  )r¬  r·   Úcsnamer.   r­  s       @r/   Úcmdr±  ™  s˜   ø€ ð"ð "ð "ð "ð "ð �ZŠZ˜˜QÑÔ Ô"€Fà�fŠnˆnð �B—G’GÐBÐB°e°e¸D±k´kÐBÑBÔBÑBÔBÑBÐBØ"&ð à�T�EÐ"3¨cÐ"3Ð"3Ñ4Ô4Ñ4Ñ5Ð5r=   c                   óø  ‡ — e Zd ZdZ G d„ dej        ¦  «        Z ed                     ¦   «         ¦  «        Z	 ed                     ¦   «         ¦  «        Z
 ed                     ¦   «         ¦  «        Ze	e
z  ez  Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed	                     ¦   «         ¦  «        Z ed
                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Z ed                     ¦   «         ¦  «        Zeez  ez  Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z e e!j"        ¦  «        Z#d„ Z$ddddddddddd d!d"œZ%d#„ Z&d$„ Z'd%„ Z(d&„ Z)i d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d6“d>d.“d?d0“d@d2“dAd4“dBd(“dCdDdEdFœ¥Z* edG                     ¦   «         ¦  «        Z+dH„ Z,dI„ Z-dJ„ Z.dK„ Z/dL„ Z0dM„ Z1e1Z2dN„ Z3dO„ Z4dP„ Z5dQ„ Z6dR„ Z7dS„ Z8ˆ fdT„Z9dU„ Z:dV„ Z;dW„ Z<dX„ Z=dY„ Z>dZ„ Z?d[„ Z@e@xZAZBd\„ ZCd]„ ZDd^„ ZEd_„ ZFˆ xZGS )`ÚParserzÕ
    A pyparsing-based parser for strings containing math expressions.

    Raw text may also appear outside of pairs of ``$``.

    The grammar is based directly on that in TeX, though it cuts a few corners.
    c                   ó   — e Zd ZdZdZdZdZdS )úParser._MathStyler   r   rn   rÊ   N)r~   r   r€   ÚDISPLAYSTYLEÚ	TEXTSTYLEÚSCRIPTSTYLEÚSCRIPTSCRIPTSTYLEr@   r=   r/   Ú
_MathStylerµ  »  s%   € € € € € ØˆØˆ	ØˆØÐÐÐr=   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        \dotminusaÕ  
      = < > :
      \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       \doteqdota³  
      \leftarrow              \longleftarrow           \uparrow
      \Leftarrow              \Longleftarrow           \Uparrow
      \rightarrow             \longrightarrow          \downarrow
      \Rightarrow             \Longrightarrow          \Downarrow
      \leftrightarrow         \longleftrightarrow      \updownarrow
      \Leftrightarrow         \Longleftrightarrow      \Updownarrow
      \mapsto                 \longmapsto              \nearrow
      \hookleftarrow          \hookrightarrow          \searrow
      \leftharpoonup          \rightharpoonup          \swarrow
      \leftharpoondown        \rightharpoondown        \nwarrow
      \rightleftharpoons      \leadstoz, ; . ! \ldotp \cdotpz}
       \sum \prod \coprod \bigcap \bigcup \bigsqcup \bigvee
       \bigwedge \bigodot \bigotimes \bigoplus \biguplus
       zlim liminf limsup sup max minr   z.rm cal it tt sf bf 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 \lceilz) ] \} > \rfloor \rangle \rceilc                 óR  ‡ ‡— t          j        ¦   «         Šˆˆ fd„}d„ }t          d¦  «        ‰_         t	          ‰ j        ¦  «        d¦  «        ‰_         t	          d„ ‰ j        D ¦   «         ¦  «        d¦  «        ‰_         t          dd 	                    d	 
                    t          t          j        t          ¦  «        ¦  «        ¦  «        z   ¦  «        d
¦  «                             ¦   «         ‰_         t          d¦  «        d¦  «        ‰_         |d‰ j        ¦  «        ‰_        t)          d t	          ‰ j        ¦  «        d¦  «        z   ¦  «        dz   ‰_        t-          d¦  «        ‰_        t	          ‰ j        ¦  «        ‰_         |¦   «          t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_        t5          ¦   «         ‰_         t5          ¦   «         ‰_!        t5          ¦   «         ‰_"        t5          ¦   «         ‰_#        t5          ¦   «         ‰_$        t5          ¦   «         ‰_%        t5          ¦   «         ‰_&        t5          ¦   «         ‰_'        t5          ¦   «         ‰_(        t5          ¦   «         ‰_)        t5          ¦   «         ‰_*        t5          ¦   «         ‰_+        t5          ¦   «         ‰_,        t5          ¦   «         ‰_-        t5          ¦   «         ‰_.         |¦   «          ‰xj        t_          dd‰                     d¦  «        z   dz   ¦  «        z  c_        ‰xj         |dg ‰ j0        ¢‰ j1        ¢¦  «        ‰ '                    d
¦  «        z
  z  c_        ‰xj!         |d‰ j2        ¦  «        z  c_!        ‰xj$        t_          dd tg          ‰j)        ‰j        z  ¦  «        d¦  «        z   dz   ¦  «        z  c_$        ‰xj#        ‰j         tg          ‰j-        ¦  «        d¦  «        z   ‰j        z   z  c_#        ‰xj*        d tg          ‰j-        ¦  «        d¦  «        z   dz   z  c_*        ‰xj(        d ti          ‰j-        ¦  «        d¦  «        z   dz   z  c_(        ‰xj        t_          d‰ (                    d¦  «        ‰ (                    d¦  «        z   ¦  «        z  c_        ‰xj         t_          d‰ (                    d¦  «        ‰ (                    d¦  «        z   ¦  «        z  c_         ‰xj        t_          d‰ (                    d¦  «        ‰ (                    d¦  «        z   ¦  «        z  c_        ‰xj"        t_          dd t)          ‰j        ¦  «        d¦  «        z   dz   dz    t)          ‰j        ¦  «        d¦  «        z   dz   dz   ‰                     d¦  «        z   dz   dz    t)          ‰j        ¦  «        d¦  «        z   dz   ‰ (                    d¦  «        z   ‰ (                    d¦  «        z   ¦  «        z  c_"        ‰xj+        t_          dt)          d  ti          tk          d!¦  «        ‰j-        z   ¦  «        d"¦  «        z   d!z   ¦  «        ‰ (                    d#¦  «        z   ¦  «        z  c_+        ‰xj%        t_          d$‰ (                    d%¦  «        ¦  «        z  c_%        ‰xj&        t_          d&‰ *                    d'¦  «        ‰ *                    d%¦  «        z   ¦  «        z  c_&        ‰xj.        t_          d(‰ *                    d'¦  «        ‰ *                    d%¦  «        z   ¦  «        z  c_.        ‰xj'        ‰j        ‰j        z  ‰j!        z  ‰j$        z  ‰j#        z  ‰j        z  ‰j         z  ‰j        z  ‰j"        z  ‰j&        z  ‰j.        z  ‰j+        z  ‰j%        z  z  c_'        ‰xj)        ‰j        ‰j        z  ‰j        z  ‰j,        z  z  c_)        ‰xj,         t)          ‰j'        ¦  «        d)¦  «         ti          t	          d*d+g¦  «        ‰j'        z
  ¦  «        d,¦  «        z    t          d-¦  «        d.¦  «        z    t          d/¦  «        d.¦  «        z  ‰ '                    d)¦  «         t          d-¦  «        d.¦  «        z   z  z  c_,        ‰xj-        ‰j)        ‰j        z  ‰j        z  z  c_-        ‰xj        d0‰                     d1¦  «        tm          d2¦  «        z  z
   tg          ‰j)        ‰j        z  ¦  «        d3¦  «        z   d4z   ‰                     d5¦  «        tm          d2¦  «        z  z
  z  c_        ti          ‰j-        ¦  «        ‰_7        tq          d6d7d8¬9¦  «        ‰_9        t          d:¦  «                             ¦   «         ‰_:        ‰j:        tg          ‰j9        ‰j:        z   ¦  «        z   tw          ¦   «         z   ‰_<         |¦   «          ‰j<        ‰ _=        ‰j7        ‰ _>        d8‰ _?        d S );Nc                  ó  •— t          ‰¦  «                             ¦   «         D ]b\  } }|                      d¦  «        sH|                     | ¦  «         t	          ‰| ¦  «        r#|                     t          ‰| ¦  «        ¦  «         Œcd S )NÚ_)Úvarsrý   r~  ÚsetNameÚhasattrr›  r4  )rþ   rÑ   r9  r;   s     €€r/   Úset_names_and_parse_actionsz4Parser.__init__.<locals>.set_names_and_parse_actions
  s…   ø€ Ý  ™GœGŸMšM™OœOð ?ð ?‘��SØ—~’~ cÑ*Ô*ð ?à—K’K Ñ$Ô$Ð$å˜t SÑ)Ô)ð ?Ø×*Ò*­7°4¸Ñ+=Ô+=Ñ>Ô>Ð>øð?ð ?r=   c                 ó¦  — g }g }|D ]G}|d                               ¦   «         r|                     |¦  «         Œ2|                     |¦  «         ŒHt          d                     | d                     t          t          j        |¦  «        ¦  «        d                     d„ t          t          j        |¦  «        D ¦   «         ¦  «        ¦  «        ¦  «        S )Nr®  z\\(?P<{}>(?:{})(?![A-Za-z]){})ú|r®  c              3   ó    K  — | ]	}d |› �V — Œ
dS )rÃ  Nr@   )rE   r<  s     r/   r  z3Parser.__init__.<locals>.csnames.<locals>.<genexpr>!  s(   è è € ÐLÐL A˜˜A˜˜ÐLÐLÐLÐLÐLÐLr=   )Úisalphar™   r   r,   r  rP   ÚreÚescape)Úgroupr­  Úends_with_alphaÚends_with_nonalpharq  s        r/   Úcsnamesz Parser.__init__.<locals>.csnames  sÐ   € Ø ˆOØ!#ÐØð 4ð 4�Ø˜”8×#Ò#Ñ%Ô%ð 4Ø#×*Ò*¨4Ñ0Ô0Ð0Ð0à&×-Ò-¨dÑ3Ô3Ð3Ð3ÝÐ:×AÒAØØ—’��RœY¨Ñ8Ô8Ñ9Ô9Ø—’ÐLÐL­­R¬YÐ8JÑ)KÔ)KÐLÑLÔLÑLÔLñô ñ ô ð r=   z[-+]?([0-9]+\.?[0-9]*|\.[0-9]+)Úspacec                 ó6   — g | ]}t          |j        ¦  «        ‘ŒS r@   )r]  r~  )rE   rH  s     r/   rJ   z#Parser.__init__.<locals>.<listcomp>(  s    € Ð3Ð3Ð3˜a�S�”‰\Œ\Ð3Ð3Ð3r=   Ústyle_literalzI[a-zA-Z0-9 +\-*/<>=:,.;!\?&'@()\[\]|\U00000080-\U0001ffff]|\\[%${}\[\]_|]z|\\(?:{})(?![A-Za-z])rÃ  r–   z\\[A-Za-z]*rq  rA   z\mathr  r  z\hspaceÚaccentz\operatornamerÈ  z\fracrC   Údenz\dfracz\binomz\genfracÚldelimÚrdelimÚrulesizeÚstylez\sqrt{value}r  r  Úrootr~  z	\overlineÚbodyz\oversetÚ
annotationz	\undersetÚnucleusr½  rD  Úsubsuperz'*Úapostrophesz'+z\leftÚleftzExpected a delimiterr©  z\rightÚrightr!  r&   F)ÚunquoteResultsz(?:(?:\\[$])|[^$])*)@rØ   rÙ   r   Úfloat_literalr   Ú_space_widthsrÌ  rº  rÎ  r,   r  rP   rÆ  rÇ  r   ÚleaveWhitespacer-   Úunknown_symbolÚ
_fontnamesrA   r
   Ústart_groupr   Ú	end_groupÚ_delimsÚdelimr   rÏ  Ú
auto_delimÚbinomÚcustomspaceÚfracÚdfracÚfunctionÚgenfracrÈ  ÚoperatornameÚoverlineÚoversetÚ	placeableÚrequired_groupÚsimpleÚoptional_groupÚsqrtrÙ  ÚtokenÚundersetr±  Ú_accent_mapÚ_wide_accentsÚ_function_namesr   r	   r   rœ  r"   r   Úmath_stringÚnon_mathr   ÚmainÚ_expressionÚ_math_expressionÚ_in_subscript_or_superscript)r;   rÁ  rË  r9  s   `  @r/   r<   zParser.__init__  sÔ	  øø€ ÝÔ!Ñ#Ô#ˆð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð	ð 	ð 	õ !Ð!CÑDÔDˆŒØ4�5 Ô!3Ñ4Ô4°WÑ=Ô=ˆŒð5�5Ø3Ð3 4¤?Ð3Ñ3Ô3ñ5ô 5Ø5DñFô FˆŒð
�5ðà&×-Ò-Ø—’��RœY­Ñ0Ô0Ñ1Ô1ñ3ô 3ñ3ñ
ô 
ð
 ñô ÷
 !’Ñ"Ô"ð 	
Œð 1�5 Ñ0Ô0°Ñ8Ô8ˆÔà"˜7 6¨4¬?Ñ;Ô;ˆŒå�XÐ 6¥ d¤oÑ 6Ô 6°vÑ >Ô >Ñ>Ñ?Ô?À#ÑEð 	
Œå" 3™<œ<ˆŒå  ¤Ñ.Ô.ˆŒà#Ð#Ñ%Ô%Ð%õ %™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆŒ
Ý$™YœYˆŒ	Ý$™YœYˆŒÝ$™YœYˆŒÝ$™YœYˆŒ
Ý$™YœYˆŒ	Ý$™YœYˆŒÝ$™YœYˆÔÝ$™YœYˆŒÝ$™YœYˆÔÝ$™YœYˆŒÝ$™YœYˆŒ
Ý$™YœYˆŒÝ$™YœYˆŒ
à#Ð#Ñ%Ô%Ð%à	ˆŒ�#˜j¨#°·²ÀÑ0HÔ0HÑ*HÈ3Ñ*NÑOÔOÑOˆŒà	ˆŒØˆG�HÐF Ô 0ÐF°4Ô3EÐFÑGÔGØ�kŠk˜%Ñ Ô ñ!ñ	"ˆŒð 	
ˆ
Œ
�w�w˜v tÔ';Ñ<Ô<Ñ<ˆ
Œ
Ø	ˆŒ�3ØØÐ9•*˜QœX¨Ô(8Ñ8Ñ9Ô9¸&ÑAÔAÑAÀCÑGñIô Iñ 	IˆŒð 	
ˆŒ�A”MÐ$7¥J¨q¬wÑ$7Ô$7¸Ñ$@Ô$@Ñ@À1Ä;ÑNÑNˆŒà	ÐÔ˜SÐ#6¥:¨a¬gÑ#6Ô#6°wÑ#?Ô#?Ñ?À#ÑEÑEÐÔØ	ÐÔ˜SÐ#5¥9¨Q¬WÑ#5Ô#5°gÑ#>Ô#>Ñ>ÀÑDÑDÐÔà	ˆŒ•CØ�a×&Ò& uÑ-Ô-°×0@Ò0@ÀÑ0GÔ0GÑGñIô Iñ 	IˆŒà	ˆŒ•CØ�q×'Ò'¨Ñ.Ô.°×1AÒ1AÀ%Ñ1HÔ1HÑHñJô Jñ 	JˆŒà	ˆŒ•CØ�q×'Ò'¨Ñ.Ô.°×1AÒ1AÀ%Ñ1HÔ1HÑHñJô Jñ 	JˆŒð 	
ˆ	Œ	•cØØÐ#•(˜1œ7Ñ#Ô# HÑ-Ô-Ñ-°Ñ3ØñØ%•H˜QœWÑ%Ô% hÑ/Ô/ñ0Ø25ñ6àñà—O’O JÑ/Ô/ñ0à25ñ6ð ñð .•H˜Qœ_Ñ-Ô-¨gÑ6Ô6ñ7ð :=ñ=ð ×Ò˜uÑ%Ô%ñ	&ð
 ×Ò˜uÑ%Ô%ñ&ñ'ô 'ñ 	'ˆ	Œ	ð 	
ˆŒ•3ØÝ�SÐ;�9¥V¨C¡[¤[°1´7Ñ%:Ñ;Ô;¸FÑCÔCÑCÀcÑIÑJÔJØ×Ò˜wÑ'Ô'ñ(ñ)ô )ñ 	)ˆŒð
 	
ˆ
Œ
•s˜<¨×)9Ò)9¸&Ñ)AÔ)AÑBÔBÑBˆ
Œ
à	ˆ	Œ	•sØØ×Ò˜\Ñ*Ô*¨Q×-=Ò-=¸fÑ-EÔ-EÑEñGô Gñ 	Gˆ	Œ	ð 	
ˆ
Œ
•sØØ×Ò˜\Ñ*Ô*¨Q×-=Ò-=¸fÑ-EÔ-EÑEñGô Gñ 	Gˆ
Œ
ð 	
ˆŒØŒHØŒhñð Œjñð Œnñ	ð
 Œgñð Œfñð Œgñð Œgñð Œiñ	ð Œiñ
ð Œjñð Œfñð Œjññ	
ˆŒð" 	
ˆŒØŒGØŒmñàŒfñð Œjññ	
ˆŒð 	
ˆ
Œ
Ø"�X�a”kÑ"Ô" 9Ñ-Ô-Ø9�y�  S˜zÑ*Ô*¨Q¬[Ñ8Ñ9Ô9¸*ÑEÔEñFà�u�T‰{Œ{˜=Ñ)Ô)ñ*ð �e�D‰kŒk˜-Ñ(Ô(ñ)ð �{Š{˜9Ñ%Ô%¨­¨d©¬°MÑ(BÔ(BÑBñ	Dñ	
ˆ
Œ
ð 	
ˆŒØŒHØŒlñàÔññ	
ˆŒð 	
ˆŒØ˜Ÿš ™œ­%Ð0FÑ*GÔ*GÑGÑHØ1�j˜œ A¤LÑ0Ñ1Ô1°%Ñ8Ô8ñ9àñàŸ7š7 7Ñ+Ô+­eÐ4JÑ.KÔ.KÑKñMñ	
ˆŒõ $ A¤GÑ,Ô,ˆŒÝ& s¨DÀÐGÑGÔGˆŒÝÐ 6Ñ7Ô7×GÒGÑIÔIˆŒ
àŒJ� A¤M°A´JÑ$>Ñ?Ô?Ñ?Å)Á+Ä+ÑMð 	
Œð 	$Ð#Ñ%Ô%Ð%àœ6ˆÔØ !¤ˆÔð -2ˆÔ)Ð)Ð)r=   c                 óV  — t          |dd||¦  «        g| _        i | _        	 | j                             |¦  «        }n8# t
          $ r+}t          dt          j        |d¦  «        z   ¦  «        d‚d}~ww xY wd| _        d| _	        i | _        | j         
                    ¦   «          |d         S )z±
        Parse expression *s* using the given *fonts_object* for
        output, at the given *fontsize* and *dpi*.

        Returns the parse tree of `Node` instances.
        r±   ró   ú
r   NF)rž  Ú_state_stackÚ_em_width_cacherþ  ÚparseStringr   r+   r   Úexplainr   Ú
resetCache)r;   r<  Úfonts_objectrB   r‘   Úresultr.   s          r/   ÚparsezParser.parse½  sÆ   € õ ˜ i°°xÀÑEÔEðGˆÔà!ˆÔð	NØÔ%×1Ò1°!Ñ4Ô4ˆFˆFøÝ!ð 	Nð 	Nð 	Nå˜T¥NÔ$:¸3ÀÑ$BÔ$BÑBÑCÔCÈÐMøøøøð	Nøøøð !ˆÔØ,1ˆÔ)à!ˆÔØÔ×#Ò#Ñ%Ô%Ð%Ø�aŒyÐs   ¢= ½
A2Á&A-Á-A2c                 ó   — | j         d         S )z&Get the current `State` of the parser.r®  )r  r¨   s    r/   Ú	get_statezParser.get_stateÓ  s   € àÔ  Ô$Ð$r=   c                 ó8   — | j                              ¦   «          dS )zPop a `State` off of the stack.N)r  Úpopr¨   s    r/   Ú	pop_statezParser.pop_state×  s   € àÔ×ÒÑÔÐÐÐr=   c                 ó‚   — | j                              |                      ¦   «                              ¦   «         ¦  «         dS )z=Push a new `State` onto the stack, copying the current state.N)r  r™   r  rr  r¨   s    r/   Ú
push_statezParser.push_stateÛ  s5   € àÔ× Ò  §¢Ñ!1Ô!1×!6Ò!6Ñ!8Ô!8Ñ9Ô9Ð9Ð9Ð9r=   c                 ó"   — t          |¦  «        gS r7   )r%  ©r;   r<  r—  r˜  s       r/   rý  zParser.mainß  s   € Ý�d‘”ˆ}Ðr=   c                 óR   — | j                              |d         dd…         ¦  «        S )Nr   r   r®  )rÿ  r  r  s       r/   rû  zParser.math_stringâ  s%   € ØÔ$×0Ò0°°a´¸¸2¸´Ñ?Ô?Ð?r=   c                 óN   — t          |¦  «        }|                      ¦   «          |gS r7   )r%  r  ©r;   r<  r—  r˜  Úhlists        r/   r"   zParser.mathå  s$   € Ý�d‘”ˆØ�ŠÑÔÐØˆwˆr=   c                 óö   ‡ — |d                               dd¦  «        }ˆ fd„|D ¦   «         }t          |¦  «        }‰                      ¦   «          t          j        d         ‰                      ¦   «         _        |gS )Nr   z\$r!  c                 óT   •— g | ]$}t          |‰                     ¦   «         ¦  «        ‘Œ%S r@   )rø  r  )rE   rF  r;   s     €r/   rJ   z#Parser.non_math.<locals>.<listcomp>ì  s-   ø€ Ð8Ð8Ð8°•4˜˜4Ÿ>š>Ñ+Ô+Ñ,Ô,Ð8Ð8Ð8r=   rÞ   )Úreplacer%  r  ru   rv   r  rA   )r;   r<  r—  r˜  Úsymbolsr  s   `     r/   rü  zParser.non_mathê  so   ø€ Ø�ŒG�OŠO˜E 3Ñ'Ô'ˆØ8Ð8Ð8Ð8°aÐ8Ñ8Ô8ˆÝ�g‘”ˆà�ŠÑÔÐÝ #¤Ð-?Ô @ˆ�ŠÑÔÔØˆwˆr=   c                 ó@  — |                       ¦   «         }|j        |j        |j        f}| j                             |¦  «        }|€I|j                             dt          j	        d         d|j        |j        ¦  «        }|j
        }|| j        |<   t          ||z  ¦  «        S )Nrõ   rÞ   r+  )r  rA   rB   r‘   r  r¾   rÒ  r—   ru   rv   rÒ   r+  )r;   Ú
percentagerÓ  rþ   rS   r]   s         r/   Ú_make_spacezParser._make_spaceõ  s˜   € ð —’Ñ Ô ˆØŒz˜5œ>¨5¬9Ð5ˆØÔ$×(Ò(¨Ñ-Ô-ˆØˆ=Ø”m×/Ò/Ø•c”lÐ#5Ô6¸Ø” ¤	ñ+ô +ˆGð ”OˆEØ(-ˆDÔ  Ñ%Ý�E˜JÑ&Ñ'Ô'Ð'r=   g…¶œKqUÅ?gý0Bx´qÌ?g‚çÞÃ%ÇÑ?g¾¤1ZGUÕ?r·  r   rn   g…¶œKqUÅ¿)ú\,z
\thinspacez\/z\>z\:z\;z\ rG  z\enspacez\quadz\qquadz\!c                 óX   — | j         |d                  }|                      |¦  «        }|gS ©NrÌ  )rß  r  )r;   r<  r—  r˜  rC   r8   s         r/   rÌ  zParser.space  s-   € ØÔ   g¤Ô/ˆØ×Ò˜sÑ#Ô#ˆØˆuˆr=   c                 ó:   — |                       |d         ¦  «        gS r!  )r  r  s       r/   ré  zParser.customspace  s   € Ø× Ò   g¤Ñ/Ô/Ð0Ð0r=   c                 ó¸  — |d         }|dk    rd}	 t          ||                      ¦   «         ¦  «        }n'# t          $ r}t          ||d|z  ¦  «        |‚d }~ww xY w|| j        v r®t          d„ |d |…         d d d…         D ¦   «         d¦  «        }|| j        v r?t          |d |…                              ¦   «         ¦  «        dk    s|d	k    s	|| j	        v r|gS t          |                      d
¦  «        ||                      d
¦  «        gd¬¦  «        gS || j        v r½t          d„ |d |…         d d d…         D ¦   «         d¦  «        }t          d„ ||dz   d …         D ¦   «         d¦  «        }|dk    r|d	k    r	|dk    r|gS |dk    r+|                     ¦   «         r|                     ¦   «         r|gS t          ||                      d
¦  «        gd¬¦  «        gS |gS )Nr–   r$   u   âˆ’zUnknown symbol: %sc              3   ó&   K  — | ]}|d k    ¯|V — ŒdS ©rý  Nr@   ©rE   rF  s     r/   r  z Parser.symbol.<locals>.<genexpr>/  ó&   è è € ÐCÐC A¸!¸sº(¸(˜a¸(¸(¸(¸(ÐCÐCr=   r®  r®  r   r  r¸  Trf  c              3   ó&   K  — | ]}|d k    ¯|V — ŒdS r%  r@   r&  s     r/   r  z Parser.symbol.<locals>.<genexpr>;  r'  r=   c              3   ó&   K  — | ]}|d k    ¯|V — ŒdS r%  r@   r&  s     r/   r  z Parser.symbol.<locals>.<genexpr><  s&   è è € ÐAÐA A¸¸Sº¸˜a¸¸¸¸ÐAÐAr=   r   rC  r  rA  )rø  r  r+   r   Ú_spaced_symbolsrà  Ú_binary_operatorsr  rT  Ú_left_delimsr%  r  Ú_punctuation_symbolsÚisdigit)	r;   r<  r—  r˜  rF  r†  r.   Ú	prev_charÚ	next_chars	            r/   r-   zParser.symbol  sR  € Ø�ŒKˆØ�Š8ˆ8ð !ˆAð	IÝ˜˜4Ÿ>š>Ñ+Ô+Ñ,Ô,ˆDˆDøÝð 	Ið 	Ið 	IÝ% a¨Ø&:¸QÑ&>ñ@ô @ØEHðIøøøøð	Iøøøð �Ô$Ð$Ð$õ ÐCÐC¨¨4¨C¨4¬°°°2°¬ÐCÑCÔCÀRÑHÔHˆIà�TÔ+Ð+Ð+Ý˜˜4˜C˜4œŸš™œÑ)Ô)¨QÒ.Ð.°)¸sÒ2BÐ2BØ $Ô"3Ð3Ð3Ø�v�å˜t×/Ò/°Ñ4Ô4Ø#Ø#×/Ò/°Ñ4Ô4ð6ð '+ð,ñ ,ô ,ð -ð -ð �$Ô+Ð+Ð+ÝÐCÐC¨¨4¨C¨4¬°°°2°¬ÐCÑCÔCÀRÑHÔHˆIÝÐAÐA¨¨3°©7¨8¨8¬ÐAÑAÔAÀ2ÑFÔFˆIð �CŠxˆxØ Ò#Ð#¨	°SÒ(8Ð(8Ø ˜6�Mð �CŠxˆx˜I×-Ò-Ñ/Ô/ˆx°I×4EÒ4EÑ4GÔ4GˆxØ�v�å˜t T×%5Ò%5°cÑ%:Ô%:Ð;ÀTÐJÑJÔJÐKÐKØˆvˆs   ’"5 µ
A¿AÁAc                 ó6   — t          ||d|d         › �¦  «        ‚)NzUnknown symbol: rq  r–  r  s       r/   rá  zParser.unknown_symbolJ  s!   € Ý! ! SÐ*K¸TÀ&¼\Ð*KÐ*KÑLÔLÐLr=   Úhatz\circumflexaccentÚbrevez\combiningbreveÚbarz\combiningoverlineÚgravez\combininggraveaccentÚacutez\combiningacuteaccentÚtildez\combiningtildeÚdotz\combiningdotaboveÚddotz\combiningdiaeresisÚdddotz\combiningthreedotsaboveÚddddotz\combiningfourdotsaboveÚvecz\combiningrightarrowabover  ú`r-  rG  rA  rD  z\rightarrowz
\leftarrowz\circ)ÚoverrightarrowÚoverleftarrowÚmathringzwidehat widetilde widebarc                 ó<  — |                       ¦   «         }|                     ¦   «         }|d         }|d         }|| j        v r!t          d|z   |j        |t
          ¬¦  «        }nt          | j        |         |¦  «        }|dk    r(|                     ¦   «          |                     ¦   «          t          t          |j        dz  ¦  «        |g¦  «        }	|	 
                    |j        d¦  «         t          |	t          d|d	z  ¦  «        t          |g¦  «        g¦  «        S )
NrÏ  r–   r&   )rz  r@  g      @Úexactlyrˆ   ç       @)r  rL  rù  rx  rS   r  rø  râ  rd  rô  r(  r>  rï  r%  )
r;   r<  r—  r˜  rÓ  rM  rÏ  r–   Ú
accent_boxÚcentereds
             r/   rÏ  zParser.accentf  s  € Ø—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	Ø�h”ˆØ�5ŒkˆØ�TÔ'Ð'Ð'Ý&Ø�v‘˜sœy¨%½FðDñ Dô DˆJˆJõ   Ô 0°Ô 8¸%Ñ@Ô@ˆJØ�ZÒÐØ×ÒÑÔÐØ×ÒÑÔÐÝ�d 3¤9¨s¡?Ñ3Ô3°ZÐ@ÑAÔAˆØ�Š�s”y )Ñ,Ô,Ð,ÝØÝ�R˜ S™Ñ)Ô)Ý�s�e‘”ðñ ô ð 	r=   c                 óN   — |                       |||¦  «        }|d         |_        |S )Nrq  )rî  Úfunction_namer  s        r/   rì  zParser.function{  s*   € Ø×!Ò! ! S¨$Ñ/Ô/ˆØ" 6œlˆÔØˆr=   c                 óH  — |                       ¦   «          |                      ¦   «         }d|_        g }|d         }|D ]–}t          |t          ¦  «        r1d|_        |                     ¦   «          |                     |¦  «         ŒHt          |t          ¦  «        r$|                     t	          ||¦  «        ¦  «         Œ�|                     |¦  «         Œ—|t          |¦  «        z   dz   }t          |t          ¦  «        r|t          d¦  «        z  }t          d„ ||d …         D ¦   «         d¦  «        }	| j        ddhz  }
|	|
vr-|| j        vr$||                      | j        d	         ¦  «        gz  }|                      ¦   «          |	d
v rd| _        nd| _        t#          |¦  «        S )Nró   rq  r   zoperatorname{}c              3   ó&   K  — | ]}|d k    ¯|V — ŒdS r%  r@   r&  s     r/   r  z&Parser.operatorname.<locals>.<genexpr>“  s&   è è € ÐCÐC ¸!¸sº(¸(˜!¸(¸(¸(¸(ÐCÐCr=   r®  rD  r½  r  >   r½  rD  TF)r  r  rA   rj  rø  rú  r™   r]  r  r   rà  rå  Ú_overunder_functionsr  rß  r  r   r%  )r;   r<  r—  r˜  rÓ  Ú
hlist_listrq  rF  Únext_char_locr0  Ú
delimiterss              r/   rî  zParser.operatorname€  s¹  € Ø�ŠÑÔÐØ—’Ñ Ô ˆØˆŒ
Øˆ
à�FŒ|ˆØð 	%ð 	%ˆAÝ˜!�TÑ"Ô"ð %Ø�”Ø×!Ò!Ñ#Ô#Ð#Ø×!Ò! !Ñ$Ô$Ð$Ð$Ý˜A�sÑ#Ô#ð %Ø×!Ò!¥$ q¨%¡.¤.Ñ1Ô1Ð1Ð1à×!Ò! !Ñ$Ô$Ð$Ð$Ø�c $™iœi™¨!Ñ+ˆÝ�d�LÑ)Ô)ð 	3Ø�SÐ!1Ñ2Ô2Ñ2ˆMÝÐCÐC Q } ~ ~Ô%6ÐCÑCÔCÀRÑHÔHˆ	Ø”\ S¨# JÑ.ˆ
Ø˜ZÐ'Ð'Ø˜DÔ5Ð5Ð5à˜4×+Ò+¨DÔ,>¸uÔ,EÑFÔFÐGÑGˆJØ�ŠÑÔÐð ˜
Ð"Ð"Ø04ˆDÔ-Ð-à05ˆDÔ-å�ZÑ Ô Ð r=   c                 ó°   — |                       ¦   «          |                     d¦  «        r,|                     d¦  «        |                      ¦   «         _        g S ©NrA   )r  r¾   r  rA   r  s       r/   rã  zParser.start_group£  sI   € Ø�ŠÑÔÐà�8Š8�FÑÔð 	5Ø$(§H¢H¨VÑ$4Ô$4ˆD�NŠNÑÔÔ!Øˆ	r=   c                 óN   — t          |                     dg ¦  «        ¦  «        }|gS ©NrÈ  ©r%  r¾   )r;   r<  r—  r˜  Úgrps        r/   rÈ  zParser.groupª  s$   € Ý�D—H’H˜W bÑ)Ô)Ñ*Ô*ˆØˆuˆr=   c                 óH   — t          |                     dg ¦  «        ¦  «        S rQ  rR  r  s       r/   rò  zParser.required_group®  s   € Ý�T—X’X˜g rÑ*Ô*Ñ+Ô+Ð+r=   c                 ó.   — |                       ¦   «          g S r7   )r  r  s       r/   rä  zParser.end_group³  s   € Ø�ŠÑÔÐØˆ	r=   c                 óD   — |d         |                       ¦   «         _        g S rO  )r  rA   r  s       r/   rA   zParser.font·  s   € Ø $ V¤ˆ�ŠÑÔÔØˆ	r=   c                 ó²   — t          |t          ¦  «        r|j        | j        v S t          |t          ¦  «        rt          |d¦  «        r|j        | j        v S dS )NrG  F)rj  rø  rF  Ú_overunder_symbolsr%  rÀ  rG  rJ  ©r;   rØ  s     r/   Úis_overunderzParser.is_overunder»  s`   € Ý�g�tÑ$Ô$ð 	FØ”9 Ô 7Ð7Ð7Ý˜¥Ñ'Ô'ð 	F­G°G¸_Ñ,MÔ,Mð 	FØÔ(¨DÔ,EÐEÐEØˆur=   c                 óL   — t          |t          ¦  «        r|j        | j        v S dS ©NF)rj  rø  rF  Ú_dropsub_symbolsrY  s     r/   Ú
is_dropsubzParser.is_dropsubÂ  s)   € Ý�g�tÑ$Ô$ð 	6Ø”9 Ô 5Ð5Ð5Øˆur=   c                 óX   — t          |t          ¦  «        r|                     ¦   «         S dS r\  )rj  rø  r  rY  s     r/   r  zParser.is_slantedÇ  s+   € Ý�g�tÑ$Ô$ð 	(Ø×%Ò%Ñ'Ô'Ð'Øˆur=   c                 ó   — dS r\  r@   )r;   r<  r—  s      r/   Úis_between_bracketszParser.is_between_bracketsÌ  s   € Øˆur=   c           	      óh  •— |                      dt          d¦  «        ¦  «        }|                      dg ¦  «        }t          |                      dg ¦  «        ¦  «        }|s|s|S d x}}|r4|^}	}
}|	dk    r|�t          d¦  «        ‚|
}n|�t          d¦  «        ‚|
}|°4|                      ¦   «         }|j                             |j        |j        |j	        ¦  «        }|j         
                    |j        |j        |j	        ¦  «        }|r||€t          g ¦  «        }t          |¦  «        D ]3}|j                             |                      ||dd	i¦  «        ¦  «         Œ4|                     ¦   «          |                     ¦   «          |                      |¦  «        �rvg }d
}|j        }|�)|                     ¦   «          t+          ||j        ¦  «        }|�)|                     ¦   «          t+          ||j        ¦  «        }|dz  }|�Kt-          |g¦  «        }|                     |d¦  «         |                     |t/          d|¦  «        g¦  «         t-          |g¦  «        }|                     |d¦  «         |                     |¦  «         |�]t-          |g¦  «        }|                     |d¦  «         |                     t/          d|¦  «        |g¦  «         |j        |z   |j        z   }t7          |¦  «        }||_        t          |g¦  «        }|gS |}t;          |t          ¦  «        rŒ|j        }t          |¦  «        rdt;          |d         t<          ¦  «        r t?          |d         d¦  «        r
|d d…         }|d         }t?          |d¦  «        r|j         j!        |_        t          |d¬¦  «        }n6t;          |tD          ¦  «        r|j         j!        |_        t          |g¦  «        }tG          |¦  «        }|j        }d}|  $                    |¦  «        r|j        }|j%        |z  }|j%        |z  }|  &                    |¦  «        re||j%        |z  z  }||j'        ||dz  dz  z
  z  z  }|  $                    |¦  «        r+d|j%        z  |j(        z
  |z  }d|j%        z  |j(        z   |z  }nd}|€ht          t=          |¦  «        |g¦  «        }|                     ¦   «          |  $                    |¦  «        r||j)        |z  z   }n
|j*        |z  }||_        �n(t          t=          |¦  «        |g¦  «        }|                     ¦   «          |  $                    |¦  «        r||j)        |z  z
  }n
|j+        |z  }|€	| |_        n¾t          t=          |¦  «        |g¦  «        }|                     ¦   «          |  $                    |¦  «        r||j)        |z  z   }n
|j,        |z  }d|z  ||j        z
  |j        |z
  z
  z
  } | d
k    r|| z  }t7          |t=          ||j        z
  |j        |z
  z
  ¦  «        |g¦  «        }||_        |  $                    |¦  «        s|xj        |j-        |z  z  c_        ||g}!| j.        r+|!|  /                    | j0        d         ¦  «        gz  }!d| _.        t          |!¦  «        }|gS )NrØ  r   rÙ  rÚ  r½  zDouble subscriptzDouble superscriptr–   r’  rˆ   ç      @rB  r®  éþÿÿÿrþ  Frf  rC  rÊ   r  )1r¾   rô  r  r   r  rÒ  r¥   rA   rB   r‘   r£   r%  rª  r  Úextendr-   r  r(  rZ  rS   râ  rp   rd  rï  r™   rT   rU   r>  r  rj  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Ù  ÚnapostrophesÚsubr³   ÚopÚargrÓ  Úrule_thicknessrà   r  Úvlistrv  rS   Úvgapr  r	  Ú	last_charr,  rÔ  Ú	lc_heightÚlc_baselineÚ	superkernÚsubkernrß   Ú
shift_downÚshift_upr|   ÚclrÚspaced_nucleusr»   s#                                     €r/   rÙ  zParser.subsuperÏ  s  ø€ Ø—(’(˜9¥d¨1¡g¤gÑ.Ô.ˆØ—8’8˜J¨Ñ+Ô+ˆÝ˜4Ÿ8š8 M°2Ñ6Ô6Ñ7Ô7ˆàð 	 ð 	ØˆNàÐˆˆeØð 		Ø!)ÐˆB��hØ�SŠyˆyØ�?Ý-Ð.@ÑAÔAÐAØ��àÐ$Ý-Ð.BÑCÔCÐCØ�ð ð 		ð —’Ñ Ô ˆØœ×>Ò>ØŒJ˜œ¨¬	ñ3ô 3ˆà”-×+Ò+ØŒJ˜œ¨¬	ñ3ô 3ˆð ð 	Øˆ}Ý˜b™	œ	�Ý˜<Ñ(Ô(ð Oð O�Ø”×%Ò% d§k¢k°!°S¸5À)Ð:LÑ&MÔ&MÑNÔNÐNÐNð �JŠJ‰LŒLˆLØ�KŠK‰MŒMˆMð ×Ò˜WÑ%Ô%ñ 	ØˆEØˆEØ”MˆEØÐ Ø—’‘”�Ý˜E 5¤;Ñ/Ô/�ØˆØ—
’
‘”�Ý˜E 3¤9Ñ-Ô-�à! CÑ'ˆDØÐ Ý! 5 'Ñ*Ô*�Ø—’˜E 9Ñ-Ô-Ð-Ø—’˜e¥T¨!¨T¡]¤]Ð3Ñ4Ô4Ð4Ý˜w˜iÑ(Ô(ˆEØ�KŠK˜˜yÑ)Ô)Ð)Ø�LŠL˜ÑÔÐØˆÝ! 3 %Ñ(Ô(�Ø—’˜E 9Ñ-Ô-Ð-Ø—’�d 1 d™mœm¨UÐ3Ñ4Ô4Ð4Øœ tÑ+¨g¬mÑ;�Ý˜%‘L”LˆEØ!&ˆEÔÝ˜E˜7‘^”^ˆFØ�8ˆOð ˆ	Ý�g�uÑ%Ô%ð 	'Ø"Ô+ˆLÝ�<Ñ Ô ð Aå˜|¨BÔ/µÑ6Ô6ð 5Ý ¨RÔ 0°*Ñ=Ô=ð5à#/°°°Ô#4�LØ(¨Ô,�	Ý˜9 jÑ1Ô1ð AØ&/Ô&8Ô&@�I”Oå˜L°%Ð8Ñ8Ô8ˆGˆGå˜'¥4Ñ(Ô(ð =Ø"+Ô"4Ô"<�	”Ý˜W˜IÑ&Ô&ˆGõ +¨5Ñ1Ô1ˆ	ØÔ&ˆ	ØˆØ�?Š?˜9Ñ%Ô%ð 	*Ø#œ/ˆKð ”O gÑ-ˆ	Ø”/ GÑ+ˆØ�?Š?˜9Ñ%Ô%ð 
	Ø˜œ¨7Ñ2Ñ2ˆIØ˜)Ô1Ø$ w°¡|°bÑ'8Ñ8ñ:ñ ;ˆIà�Š˜yÑ)Ô)ð Ø˜yœÑ.Ø$Ô3ñ4Ø7@ñA�à ¤Ñ0Ø&Ô5ñ6Ø9BñC�	�	ð �àˆ=å•t˜G‘}”} cÐ*Ñ+Ô+ˆAØ�HŠH‰JŒJˆJØ�Š˜yÑ)Ô)ð 6Ø(¨9Ô+<¸wÑ+FÑF�
�
à&œ^¨gÑ5�
Ø'ˆAŒN‰Nå•t˜I‘”¨Ð.Ñ/Ô/ˆAØ�HŠH‰JŒJˆJØ�Š˜yÑ)Ô)ð 4Ø$ yÔ'8¸7Ñ'BÑB��à$œ>¨GÑ3�Øˆ{Ø"* �”�å�4 ™=œ=¨#Ð.Ñ/Ô/�Ø—’‘
”
�
Ø—?’? 9Ñ-Ô-ð :Ø!,¨yÔ/@À7Ñ/JÑ!J�J�Jà!*¤°'Ñ!9�Jà˜^Ñ+Ø! A¤GÑ+°´¸:Ñ0EÑFñH�à˜’8�8Ø ‘O�HÝØÝ˜( Q¤WÑ,°´¸JÑ1FÑGÑHÔHØðñ ô �ð ",�”à�Š˜yÑ)Ô)ð 	8ØˆGŒG�yÔ-°Ñ7Ñ7ˆGŒGð " 1˜ˆØÔ,ð 	6Ø˜t×/Ò/°Ô0BÀ5Ô0IÑJÔJÐKÑKˆNØ05ˆDÔ-å�~Ñ&Ô&ˆØˆxˆr=   c           
      óŠ  — |                       ¦   «         }|                     ¦   «         }t          |j        ¦  «        D ]*}	|                     ¦   «          |                     ¦   «          Œ+t          |g¦  «        }
t          |g¦  «        }t          |j        |j        ¦  «        }|
                     |d¦  «         |                     |d¦  «         t          |
t          d|dz  ¦  «        t          ||¦  «        t          d|dz  ¦  «        |g¦  «        }|j                             |j        t          j        d         d|j        |j        ¦  «        }|j        |j        |j        z   dz  |dz  z
  z
  }||_        t/          |t1          |dz  ¦  «        g¦  «        g}|s|r'|dk    rd	}|dk    rd	}|                      |||¦  «        S |S )
NrB  r   rC  rÞ   ú=rn   rc  r®  rA  )r  rL  rª  r~  râ  rd  rp   rS   r(  r>  rï  rI  rÒ  r—   rA   ru   rv   rB   r‘   rT   re   rk   r  r%  rô  Ú_auto_sized_delimiter)r;   rÑ  rÒ  ÚrulerÔ  rC   rÐ  rÓ  rM  r½  ÚcnumÚcdenrS   rk  r]   rv  r	  s                    r/   Ú_genfraczParser._genfracq	  sË  € Ø—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	å�u”{Ñ#Ô#ð 	ð 	ˆAØ�JŠJ‰LŒLˆLØ�JŠJ‰LŒLˆLˆLÝ˜#˜ÑÔˆÝ˜#˜ÑÔˆÝ�C”I˜sœyÑ)Ô)ˆØ�
Š
�5˜)Ñ$Ô$Ð$Ø�
Š
�5˜)Ñ$Ô$Ð$Ý�tÝ˜A˜y¨3™Ñ/Ô/Ý˜U DÑ)Ô)Ý˜A˜y¨3™Ñ/Ô/Øð	ñ ô ˆð ”-×+Ò+ØŒJ�œÐ%7Ô8Ø�” ¤ñ,ô ,ˆð ”Ø”< '¤,Ñ.°!Ñ3Ø˜c‘/ñ"ñ#ˆð #ˆÔå˜¥ Y°¡^Ñ 4Ô 4Ð5Ñ6Ô6Ð7ˆØð 	F�Vð 	FØ˜Š|ˆ|Ø�Ø˜Š|ˆ|Ø�Ø×-Ò-¨f°f¸fÑEÔEÐEØˆr=   c                 óR   — |                       t          |d         ¦  «        ¦  «        S )NrÎ  )rº  rw   r  s       r/   rÎ  zParser.style_literal—	  s!   € Ø�Š�s 4¨Ô#8Ñ9Ô9Ñ:Ô:Ð:r=   c           	      óæ   — |                       |                     dd¦  «        |                     dd¦  «        |d         |                     d| j        j        ¦  «        |d         |d         ¦  «        S )NrÑ  r®  rÒ  rÓ  rÔ  rC   rÐ  )r|  r¾   rº  r·  r  s       r/   rí  zParser.genfracš	  sc   € Ø�}Š}Ø�HŠH�X˜rÑ"Ô" D§H¢H¨X°rÑ$:Ô$:Ø�Ô˜dŸhšh w°´Ô0IÑJÔJØ�ŒK˜˜eœñ&ô &ð 	&r=   c           	      óª   — |                       dd|                      ¦   «                              ¦   «         | j        j        |d         |d         ¦  «        S ©Nr®  rC   rÐ  )r|  r  rL  rº  r·  r  s       r/   rê  zParser.frac 	  sL   € Ø�}Š}Ø��D—N’NÑ$Ô$×DÒDÑFÔFØŒOÔ% t¨E¤{°D¸´KñAô Að 	Ar=   c           	      óª   — |                       dd|                      ¦   «                              ¦   «         | j        j        |d         |d         ¦  «        S r€  )r|  r  rL  rº  r¶  r  s       r/   rë  zParser.dfrac¥	  sL   € Ø�}Š}Ø��D—N’NÑ$Ô$×DÒDÑFÔFØŒOÔ(¨$¨u¬+°t¸E´{ñDô Dð 	Dr=   c           	      ób   — |                       ddd| j        j        |d         |d         ¦  «        S )Nr  r
  r   rC   rÐ  )r|  rº  r·  r  s       r/   rè  zParser.binomª	  s6   € Ø�}Š}Ø��aØŒOÔ% t¨E¤{°D¸´KñAô Að 	Ar=   c                 ó>  — |d         }|d         }|                       ¦   «                              ¦   «         }|                     ¦   «          t          |g¦  «        }t          |g¦  «        }t	          |j        |j        ¦  «        }	|                     |	d¦  «         |                     |	d¦  «         |dz  }
||dz            dk    r8t          |t          d|
¦  «        |g¦  «        }|j	        |j
        z   |
z   |_        n t          |t          d|
¦  «        |g¦  «        }|S )Nr×  rÖ  rB  rÊ   r   Úur   )r  rL  râ  rd  rp   rS   r(  r>  rï  rU   rT   r  )r;   r<  r—  r˜  r×  rÖ  rM  ÚcannotationÚcbodyrS   rl  rk  s               r/   Ú_gensetzParser._genset¯	  s%  € Ø˜,Ô'ˆ
Ø�FŒ|ˆØ—N’NÑ$Ô$×DÒDÑFÔFˆ	à×ÒÑÔÐÝ  Ñ-Ô-ˆÝ˜4˜&Ñ!Ô!ˆÝ�KÔ% u¤{Ñ3Ô3ˆØ×Ò˜% Ñ+Ô+Ð+Ø�Š�E˜9Ñ%Ô%Ð%à˜1‰}ˆØˆS�1‰WŒ:˜ÒÐÝ˜5Ý  4™=œ=Ø&ðñ ô ˆEð
 "'¤¨{Ô/AÑ!AÀDÑ!HˆEÔÐå˜;Ý  4™=œ=Ø ðñ ô ˆEð ˆr=   c                 ó˜  — |                      d¦  «        }|d         }|                      ¦   «         }|                     ¦   «         }|j        |j        z
  |dz  z   }|j        |j        z   }	t          d||	|d¬¦  «        }
|
j        |
j        z
  }|
j        |
j        z   }	t          t          d|z  ¦  «        |t          d|z  ¦  «        g¦  «        }t          t          |¦  «        t          d¦  «        |g¦  «        }|                     ||j        |j        z  d	z  z   d
|	¦  «         |st          |
j        dz  dd¦  «        }n7t          |¦  «        }|                     ¦   «          |                     ¦   «          t          t          |g¦  «        g¦  «        }| dz  |_        t          |t%          |
j         dz  ¦  «        |
|g¦  «        }|gS )NrÕ  r~  g      @r8  T)rs  rn   rT  ç     À’@rB  r·  rˆ   rÇ  )r¾   r  rL  rT   r  rU   rp  r%  rô  r>  rI  r5  r@  rB   r‘   rç  rS   râ  r+  )r;   r<  r—  r˜  rÕ  rÖ  rÓ  rM  rT   rU   ÚcheckÚpadded_bodyÚ	rightsideÚ
root_vlistr  s                  r/   rõ  zParser.sqrtÏ	  sÀ  € Ø�xŠx˜ÑÔˆØ�GŒ}ˆØ—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	ð ”˜tÔ0Ñ0°9¸s±?ÑBˆØ”
˜TÔ.Ñ.ˆÝ˜|¨V°U¸EÈ$ÐOÑOÔOˆØ” Ô 2Ñ2ˆØ”˜eÔ0Ñ0ˆõ �T ! i¡-Ñ0Ô0°$½¸QÀ¹]Ñ8KÔ8KÐLÑMÔMˆÝ�5 ™<œ<­¨f©¬°{ÐCÑDÔDˆ	à�Š˜ %¤.°5´9Ñ"<ÀÑ!NÑNØ! 5ñ	*ô 	*ð 	*ð
 ð 	Ý�u”{ SÑ(¨"¨bÑ1Ô1ˆDˆDå˜‘;”;ˆDØ�KŠK‰MŒMˆMØ�KŠK‰MŒMˆMå�E 4 &™MœM˜?Ñ+Ô+ˆ
Ø#) '¨C¡-ˆ
Ôå�zå˜Uœ[˜L¨3Ñ.Ñ/Ô/ØØ ð	"ñ #ô #ˆð
 ˆwˆr=   c                 ó˜  — |d         }|                       ¦   «         }|                     ¦   «         }|j        |j        z
  |dz  z   }|j        |j        z   }t          t          |¦  «        t          d¦  «        t          |g¦  «        g¦  «        }	|	 	                    ||j
        |j        z  dz  z   d|¦  «         t          |	g¦  «        }
|
gS )NrÖ  rc  rT  r‰  rB  )r  rL  rT   r  rU   r>  rI  r5  r%  r@  rB   r‘   )r;   r<  r—  r˜  rÖ  rÓ  rM  rT   rU   rŒ  r  s              r/   rï  zParser.overline÷	  sÆ   € Ø�FŒ|ˆà—’Ñ Ô ˆØ×9Ò9Ñ;Ô;ˆ	à”˜tÔ0Ñ0°9¸s±?ÑBˆØ”
˜TÔ.Ñ.ˆõ �5 ™<œ<­¨f©¬µu¸d¸V±}´}ÐEÑFÔFˆ	ð 	�Š˜ %¤.°5´9Ñ"<ÀÑ!NÑNØ! 5ñ	*ô 	*ð 	*õ �y�kÑ"Ô"ˆØˆwˆr=   c           	      óÂ  — |                       ¦   «         }t          |¦  «        r5t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }d }nd}d}d}g }|dk    r'|                     t	          |||||¬¦  «        ¦  «         |                     |¦  «         |dk    r'|                     t	          |||||¬¦  «        ¦  «         t          |¦  «        }	|	S )Nc              3   ó$   K  — | ]}|j         V — Œd S r7   )rT   r  s     r/   r  z/Parser._auto_sized_delimiter.<locals>.<genexpr>
  s$   è è € Ð2Ð2 a˜œÐ2Ð2Ð2Ð2Ð2Ð2r=   c              3   ó$   K  — | ]}|j         V — Œd S r7   )rU   r  s     r/   r  z/Parser._auto_sized_delimiter.<locals>.<genexpr>
  s$   è è € Ð0Ð0 A˜œÐ0Ð0Ð0Ð0Ð0Ð0r=   r   rR  rA  )rt  )r  r  rp   r™   rp  re  r%  )
r;   ÚfrontÚmiddleÚbackrÓ  rT   rU   rt  Úpartsr  s
             r/   rx  zParser._auto_sized_delimiter

  s  € Ø—’Ñ Ô ˆÝˆv‰;Œ;ð 	ÝÐ2Ð2¨6Ð2Ñ2Ô2Ñ2Ô2ˆFÝÐ0Ð0¨Ð0Ñ0Ô0Ñ0Ô0ˆEØˆFˆFàˆFØˆEØˆFØˆà�CŠ<ˆ<Ø�LŠLÝ˜u f¨e°UÀ6ÐJÑJÔJñLô Lð Là�Š�VÑÔÐØ�3Š;ˆ;Ø�LŠLÝ˜t V¨U°EÀ&ÐIÑIÔIñKô Kð Kå�e‘”ˆØˆr=   c                 ó„   — |                       |d         d|v r|d                              ¦   «         ng |d         ¦  «        S )NrÛ  r©  rÜ  )rx  ÚasListr  s       r/   rç  zParser.auto_delim 
  sH   € Ø×)Ò)Ø�ŒLà$)¨T M MˆD�ŒK×ÒÑ Ô Ð °rØ�ŒMñ	ô ð 	r=   )Hr~   r   r€   r�   ÚenumÚEnumrº  rS  rT  r+  Ú_relation_symbolsÚ_arrow_symbolsr*  r-  rX  rJ  r]  râ  rú  Ú_ambi_delimsr,  Ú_right_delimsrå  r<   r
  r  r  r  rý  rû  r"   rü  Ústaticmethodr   ÚconvertToFloatrÞ  r  rß  rÌ  ré  r-   rá  rø  rù  rÏ  rì  rî  rã  rÈ  rò  rô  rä  rA   rZ  r^  r  ra  rÙ  r|  rÎ  rí  rê  rë  rè  r‡  rð  r÷  rõ  rï  rx  rç  rç   rè   s   @r/   r³  r³  ²  sÇ  ø€ € € € € ðð ðð ð ð ð �T”Yñ ô ð ð ˜ð#÷ $)¢5¡7¤7ñ,ô ,Ðð" ˜ð +÷ ,1ª5©7¬7ñ4ô 4Ðð �Sð *÷ +0ª%©'¬'ñ3ô 3€Nð (Ð*;Ñ;¸nÑL€Oà˜3Ð7×=Ò=Ñ?Ô?Ñ@Ô@Ðà˜ð ÷ Š5‰7Œ7ñô Ðð
 ˜3Ð>×DÒDÑFÔFÑGÔGÐà�sÐ,×2Ò2Ñ4Ô4Ñ5Ô5Ðà�ÐE×KÒKÑMÔMÑNÔN€Jà�cð ÷ !š5™7œ7ñ$ô $€Oð
 �3ð /ç/4ªu©w¬wñ8ô 8€Lð �3Ð9×?Ò?ÑAÔAÑBÔB€LØ�CÐ:×@Ò@ÑBÔBÑCÔC€MØ˜]Ñ*¨\Ñ9€Gðt2ð t2ð t2ðlð ð ð,%ð %ð %ð ð  ð  ð:ð :ð :ðð ð ð@ð @ð @ðð ð ð
ð ð ð !�LÐ!1Ô!@ÑAÔA€Mð(ð (ð (ð$ ØØØØØØØØØØØðð €Mðð ð ð
1ð 1ð 1ð+ð +ð +ðZMð Mð MðØÐ/ðàÐ-ðð 	Ð0ðð 	Ð3ð	ð
 	Ð3ðð 	Ð-ðð 	Ð0ðð 	Ð1ðð 	Ð6ðð 	Ð5ðð 	Ð7ðð 	Ð1ðð 	Ð3ðð 	Ð3ðð 	Ð-ðð  	Ð0ð!ð" 	Ð/ð#ð$ *Ø(Ø#ð)ð ð €Kð. �CÐ4×:Ò:Ñ<Ô<Ñ=Ô=€Mðð ð ð*ð ð ð
!!ð !!ð !!ðFð ð ðð ð ð,ð ,ð ,ð $€Nðð ð ðð ð ðð ð ðð ð ð
ð ð ð
ð ð ð`ð `ð `ð `ð `ðD$ð $ð $ðL;ð ;ð ;ð&ð &ð &ðAð Að Að
Dð Dð Dð
Að Að Að
ð ð ð< !Ð €Gˆhð&ð &ð &ðPð ð ð&ð ð ð,ð ð ð ð ð ð r=   r³  )F)r{  )er�   rr  Úcollectionsr   r˜  r´   Úloggingr¿   rÆ  rØ   r|  ÚnumpyrQ   Ú	pyparsingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Ú
matplotlibru   r®  r   r   Ú_mathtext_datar   r   r   r   Úfont_managerr   r   r   Úft2fontr    r!   ÚenablePackratÚ	getLoggerry  Údelete_parameterr0   r1   r3   r5   rƒ   r¯   rê   rX  r‹  r�  rš  rú   rh  rë  rê  r´  rÃ  rÅ  rÉ  rË  rÏ  rÑ  rÕ  r×  rç  rï  rô  rø  r  r  r%  r>  rE  rI  rO  rQ  r^  r5  rd  ri  r+  rp  rx  rq   rœ  rž  r±  r³  r@   r=   r/   ú<module>r«     s0  ððð ð €€€Ø "Ð "Ð "Ð "Ð "Ð "Ø €€€Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð ðDð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dð Dà <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .ð €Ô Ñ Ô Ð Ø€wÔÐ.Ñ/Ô/€ð €Ô�u˜fÑ%Ô%ð&ð &ð &ñ &Ô%ð&ð@ ˆj˜Ð(IØ 5ð7ñ 7ô 7€ð€Ô ð ˆj˜Ð(HØ 5ð7ñ 7ô 7€ð€Ô ð85ð 85ð 85ð 85ð 85ñ 85ô 85ð 85ðvr!ð r!ð r!ð r!ð r!ñ r!ô r!ð r!ðj\Ið \Ið \Ið \Ið \I�Eñ \Iô \Ið \Ið~fCð fCð fCð fCð fC�-ñ fCô fCð fCðR}!ð }!ð }!ð }!ð }!�=ñ }!ô }!ð }!ð@%Að %Að %Að %Að %A�,ñ %Aô %Að %AðPð ð ð ð �{ñ ô ð ð"ð ð ð ð �kñ ô ð ð"hð hð hð hð h�ñ hô hð hðVð ð ð ð �Iñ ô ð ðB €ð €ð!ð !ð !ð !ð !ñ !ô !ð !ðHð ð ð ð Ð"3ñ ô ð ðð ð ð ð Ð)ñ ô ð ðð ð ð ð Ð-ñ ô ð ð	ð 	ð 	ð 	ð 	Ð0ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	Ð/ñ 	ô 	ð 	ð
ØÐ*ðàÐ/ðð Ð,ðð Ð(ð	ð
 Ð)ðð Ð)ðð Ð(ðð Ð)ðð Ð)ðð Ð)ðð Ð$ðð Ð'ðð Ð(ðð Ð(ðð Ð)ðð  Ð'ð!ð" Ð'ð#ð& 3Ø-ð)ð ð Ð ð0ð ð ð ð  ð  ð  ð  ñ  ô  ð  ð.ð ð ð ð ˆ$ñ ô ð ð(,ð ,ð ,ð ,ð ,ˆ3ñ ,ô ,ð ,ð(ð (ð (ð (ð (ˆ3ñ (ô (ð (ðD+ð D+ð D+ð D+ð D+ˆ4ñ D+ô D+ð D+ðNIð Ið Ið Ið IˆTñ Iô Ið Ið.(/ð (/ð (/ð (/ð (/ˆ3ñ (/ô (/ð (/ðVn<ð n<ð n<ð n<ð n<ˆDñ n<ô n<ð n<ðbL<ð L<ð L<ð L<ð L<ˆDñ L<ô L<ð L<ð^Dð Dð Dð Dð Dˆ3ñ Dô Dð Dð&7ð 7ð 7ð 7ð 7ˆDñ 7ô 7ð 7ð;ð ;ð ;ð ;ð ;ˆDñ ;ô ;ð ;ð ˆJØÐBñDô D€	ð �9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨AÑ.Ô.Ø�9˜R  Q¨¨QÑ/Ô/ð	ð 	€	Ô ðGð Gð Gð Gð Gˆ4ñ Gô Gð Gð2Mð Mð Mð Mð M�ñ Mô Mð Mð>ð >ð >ð >ð >�ñ >ô >ð >ð(ð (ð (ð (ð (ˆ4ñ (ô (ð (ð6$"ð $"ð $"ð $"ð $"�Uñ $"ô $"ð $"ðN ð  ð  ð  ð  �Eñ  ô  ð  ð8Kð Kð Kð Kðd/ð /ð /ð"0ð "0ð "0ð "0ð "0ñ "0ô "0ð "0ðJ6ð 6ð 6ð2sð sð sð sð sñ sô sð sð sð sr=   