
    N&iE                     6   d Z ddlZddlZddlZddlZddlZej        dk    reZddl	m
Z
mZ e
j        Zded<   ddd	d
ddddddddZdddddddddd	Ze                    d dD                        ddddddd d!d"d#d$d%d d&Zi d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAd>dBd@dCd@Ze                    e
j                   e                    e
j                   e                    e
j                   i dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbd_dcd_daddddedfdgdhZe                    e
j                   e                    e
j                   e                    e
j                   e                    e
j                   e                    e
j                   e                    e           didjdkZdldmdndodpdqdrdsZdtZdudvdwdxdydzd{d|d}dwdxdydzd~ZdddddddddddddZ ddddddddZ!ddddddZ"ddddZ#ddddddZ$dddddddddZ%dddddddddddddZ&i i fddddi fe&d         i fe&d         i fi ddife&d         ddife&d         ddifdZ'g dZ(ddddddddddd
Z) G d de*          Z+ G d de+          Z, G d de+          Z- G d de+          Z. G d de.          Z/ G dÄ de.          Z0 G dń de.          Z1 G dǄ de.          Z2 G dɄ de.          Z3 G d˄ de.          Z4 G d̈́ de+          Z5 G dτ de5          Z6 G dф de5          Z7 G dӄ de5          Z8 G dՄ de5          Z9 G dׄ de+          Z: G dل de:          Z; G dۄ de:          Z< G d݄ de:          Z= G d߄ de;          Z> G d de<          Z? G d de=          Z@ G d de:          ZA G d de+          ZB G d de+          ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd ZKddZLd ZMd ZNd ZOd ZPddZQdS )zConvert LaTex maths code into presentational MathML.

This module is provisional:
the API is not settled and may change with any minor Docutils version.
    N)   r   )tex2unichartoplevel_codeu   ℏhbaru   Φu   Ξ   Σu   Ψu   Δu   Θu   ϒ   Πu   Ω   Γu   Λ)PhiXiSigmaPsiDeltaThetaUpsilonPiOmegaGammaLambdau	   lim infu	   lim supu	   inj limu
   proj limlim)	liminflimsupinjlimprojlim	varlimsup	varliminf
varprojlim	varinjlimoperatornamec              #      K   | ]}||fV  	d S N ).0names     m/home/geonatureadmin/si_en_reseau/tutos/venv/lib/python3.11/site-packages/docutils/utils/math/latex2mathml.py	<genexpr>r%   I   s>       A A$$ A A A A A A    )arccosarcsinarctanargcoscoshcotcothcscdegdetdimexpgcdhomkerlglnlogPrsecsinsinhtantanhbolditalic	monospacenormalz
sans-serifscriptzbold-italiczdouble-struckfrakturzsans-serif-italiczsans-serif-bold-italic)
boldsymbolmathbfmathitmathttmathrmmathsfmathcalmathbfitmathbbmathfrakmathsfit
mathsfbfitmathscr	backslash\uparrowu   ↑	downarrowu   ↓updownarrowu   ↕Uparrowu   ⇑	Downarrowu   ⇓Updownarrowu   ⇕
lmoustacheu   ⎰
rmoustacheu   ⎱	arrowvertu   ⏐	bracevertu   ⎪lvert|lVert   ‖rvertrVert	Arrowvertnleqqu   ≦̸ngeqqu   ≧̸	nleqslantu   ⩽̸	ngeqslantu   ⩾̸ngtrlessu   ≹nlessgtru   ≸
nsubseteqqu   ⫅̸
nsupseteqqu   ⫆̸	centerdotu   ⬝
varnothingu   ⌀	varproptou   ∝triangleu   △triangledownu   ▽dotsb   ⋯dotscu   …dotsidotsmsupinfmaxmin)dotsor   rx   ry   rz   r{   u   ∼u   ≈)thicksimthickapproxu   ∣u   ∥u   ∤u   ∦u   ⌢u   ⌣u   ∫)shortmidshortparallel	nshortmidnshortparallel
smallfrown
smallsmilesmallint)bigcapbigcupbigodotbigoplus	bigotimesbigsqcupbiguplusbigveebigwedgecoprodintopointopprodsumr   rz   r{   rx   ry   2em1emz0.2778emz0.2222emz0.1667emz	-0.1667emz	-0.2222emz	-0.2778emz0.25em)qquadquad
thickspacemedspace	thinspacenegthinspacenegmedspacenegthickspace ;:,!)   ´u   ́)u   ˉu   ̄)u   ˘u   ̆)u   ˇu   ̌)u   ˙u   ̇)   ¨u   ̈)rt   u   ⃛)`u   ̀)u   ˆu   ̂)u   ˚u   ̊)u   ˜u   ̃)   →u   ⃗)acutebarbrevecheckdotddotdddotgravehatmathringtildevec)u   ⏞皙ɿ)   ←r   )u   ↔r   )_r   )r   r   )^g      )~g333333ӿ)	overbraceoverleftarrowoverleftrightarrowoverlineoverrightarrowwidehat	widetilde)u   ⏟g?)r   g)
underbraceunderleftarrowunderleftrightarrow	underlineunderrightarrowu   −u   ∶    )-r   r   u   ℾu   ℿ   ⅀u   ℽu   ℼ)r	   r   r   u   γu   π) r   )())[]){})r`   r`   )rb   rb   )r   r   )matrixsmallmatrixpmatrixbmatrixBmatrixvmatrixVmatrixcasesT)displaystylescriptlevelF      )r   	textstylescriptstylescriptscriptstylecfrac)r   r   CLASSr   r   linethickness)fracr   dfractfracbinomdbinomtbinom)r   z1.2emz1.623emz2.047emz2.470emr      )
leftrightbiglbigrBiglBigrbigglbiggrBigglBiggrc                       e Zd ZdZdZ	 dZ	 dZ ed          d ed          d ed          d	d
diZdddZ		 dZ
	 d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZddZd ZddZdS )mathz8Base class for MathML elements and root of MathML trees.Nr   <z&lt;>z&gt;&z&amp;ia   z&ApplyFunction;truefalse)TFspanc                     g | _         |                     |           t          j                    | _        t          |                                          D ]$}||         | j        |                                <   %dS )a  Set up node with `children` and `attributes`.

        Attributes are downcased: Use CLASS to set "class" value.
        >>> math(mn(3), CLASS='test')
        math(mn(3), class='test')
        >>> math(CLASS='test').toprettyxml()
        '<math class="test">
</math>'

        N)childrenextendcollectionsOrderedDict
attributessortedkeyslower)selfr   r   keys       r$   __init__zmath.__init__N  sw     H%133 *//++,, 	; 	;C ,6c?DOCIIKK((	; 	;r&   c                    d t          | dg           D             }t          | d          r'|                    t          | j                             t          | t                    r| j        r|                    d           |d | j        	                                D             z  }| j
        j        dd                    |          z  z   S )Nc                 ,    g | ]}t          |          S r!   )repr)r"   items     r$   
<listcomp>z!math.__repr__.<locals>.<listcomp>d  s    HHH$4::HHHr&   r   datazswitch=Truec                 &    g | ]\  }}||d|S )N=r!   r"   kvs      r$   r	  z!math.__repr__.<locals>.<listcomp>i  s2     & & &tq!} QQN$}}r&   z(%s)z, )getattrhasattrappendr  r
  
isinstance
MathSchemaswitchr   items	__class____name__join)r  contents     r$   __repr__zmath.__repr__c  s    HH'$
B*G*GHHH4   	,NN4	??+++dJ'' 	*DK 	*NN=))) & &t/D/D/F/F & & & 	& ~&$))G2D2D)DDDr&   c                 *    t          | j                  S r    )lenr   r  s    r$   __len__zmath.__len__n  s    4=!!!r&   c                     | j         |         S r    r   )r  r  s     r$   __getitem__zmath.__getitem__s  s    s##r&   c                     || j         |<   d S r    r!  )r  r  r  s      r$   __setitem__zmath.__setitem__u  s    #r&   c                 &     | j         j        |i |S r    )r   get)r  argskwargss      r$   r&  zmath.getw  s    "t"D3F333r&   c                 D    | j         duot          |           | j         k    S )z;Return boolean indicating whether children may be appended.N)	nchildrenr  r  s    r$   fullz	math.fullz  s&    d* 0II/	1r&   c                     |                                  rt          d| z            | j                            |           | |_        |                                  r|                                 S | S )zAppend child and return self or first non-full parent.

        If self is full, go up the tree and return first non-full node or
        `None`.
        zNode %s already full!)r+  SyntaxErrorr   r  parentclose)r  childs     r$   r  zmath.append  sh     99;; 	>5<===U###99;; 	 ::<<r&   c                 :    |D ]}|                      |           | S r    )r  )r  r   r0  s      r$   r   zmath.extend  s+     	 	EKKr&   c                 z    | j         }|1|                                r|j         }||                                |S )z7Close element and return first non-full parent or None.)r.  r+  )r  r.  s     r$   r/  z
math.close  s=     V[[]] ]F  V[[]] r&   c                 P    d                     |                                           S )z,Return XML representation of self as string.r   )r  _xmlr  s    r$   toprettyxmlzmath.toprettyxml  s    wwtyy{{###r&   c                 z    |                                  g|                     |          z   d| j        j        z  gz   S )Nz</%s>)xml_starttag	_xml_bodyr  r  r  levels     r$   r4  z	math._xml  sB    ""$$%..''(T^4456 	7r&   c                     d | j                                         D             }dd                    | j        j        g|z             z  S )Nc                     g | ]D\  }}||dt          |                              dd                              dd          dES )Nz="Truer   Falser   ")strreplacer  s      r$   r	  z%math.xml_starttag.<locals>.<listcomp>  s]     # # #QM  aaQ!?!?!G!GQX!Y!Y!Y!YZ!MMr&   z<%s>r   )r   r  r  r  r  )r  attrss     r$   r7  zmath.xml_starttag  sT    # #!_2244# # # $."9!:U!BCCCCr&   c                     g }| j         D ]J}|                    dd|dz   z  g           |                    |                    |dz                        K|                    dd|z  g           |S )N
z  r   )r   r   r4  )r  r:  xmlr0  s       r$   r8  zmath._xml_body  s}    ] 	, 	,EJJdeAg./000JJuzz%'**++++

D$,'(((
r&   r   )r  
__module____qualname____doc__r*  r.  _levelordxml_entities_boolstringshtml_tagnamer  r  r  r"  r$  r&  r+  r  r   r/  r5  r4  r7  r8  r!   r&   r$   r   r   9  s_       BBI-F)FCHHgCHHgCHHh0	L !11LCL+; ; ;*	E 	E 	E" " "
$ $ $$ $ $4 4 41 1 1
    
  $ $ $7 7 7 7
D D D     r&   r   c                       e Zd ZdS )mtableNr  rG  rH  r!   r&   r$   rP  rP              r&   rP  c                   "     e Zd ZdZ fdZ xZS )mrowz*Group sub-expressions as a horizontal row.c                 $   | j         }t          |t                    rU|j        dk    rJt	          |j                  |_        | j        |_        | j        D ]	}||_         
|                                S t	          |           dk    re	 | j        d         |j        |j                            |           <   || j        d         _         n$# t          t          f$ r | j        d         cY S w xY wt          t          |                                           S )zClose element and return first non-full parent or None.

        Remove <mrow>, if it is single child and the parent infers an mrow
        or if it has only one child element.
        r   r   )r.  r  MathRowSchemar*  r  r   r/  indexAttributeError
ValueErrorsuperrT  )r  r.  r0  r  s      r$   r/  z
mrow.close  s    fm,, 	"1AQ1F1F"6?33F"mFO & &%<<>>!t99>>(?C}Q?O 5 5d ; ;<*0a ''"J/ ( ( (}Q''''(T4  &&(((s   ?C C('C()r  rG  rH  rI  r/  __classcell__r  s   @r$   rT  rT    s>        44) ) ) ) ) ) ) ) )r&   rT  c                       e Zd ZdZdS )rV  zCBase class for elements treating content as a single inferred mrow.N)r  rG  rH  rI  r!   r&   r$   rV  rV    s        MMMMr&   rV  c                       e Zd ZdS )mtrNrQ  r!   r&   r$   r_  r_    rR  r&   r_  c                       e Zd ZdS )mtdNrQ  r!   r&   r$   ra  ra    rR  r&   ra  c                       e Zd ZdZdS )mencloser   Nr  rG  rH  r*  r!   r&   r$   rc  rc            IIIr&   rc  c                       e Zd ZdZdS )mphantomr   Nrd  r!   r&   r$   rg  rg    re  r&   rg  c                       e Zd ZdZdS )msqrtr   Nrd  r!   r&   r$   ri  ri    re  r&   ri  c                       e Zd ZdZdS )mstyler   Nrd  r!   r&   r$   rk  rk    re  r&   rk  c                   .     e Zd ZdZdZ fdZddZ xZS )	MathTokenzbToken Element: contains textual data instead of children.

    Base class for mo, mi, and mn.
    r   c                 V    || _          t          t          |           j        di | d S )Nr!   )r
  rZ  rm  r  )r  r
  r   r  s      r$   r  zMathToken.__init__  s3    	'i'55*55555r&   c                 \    t          | j                                      | j                  gS r    )unicoder
  	translaterL  r9  s     r$   r8  zMathToken._xml_body  s&    	"",,T->??@@r&   rF  )r  rG  rH  rI  r*  r  r8  r[  r\  s   @r$   rm  rm    se          I6 6 6 6 6A A A A A A A Ar&   rm  c                       e Zd ZdS )mtextNrQ  r!   r&   r$   rs  rs  	  rR  r&   rs  c                       e Zd ZdS )miNrQ  r!   r&   r$   ru  ru  
  rR  r&   ru  c                       e Zd ZdS )moNrQ  r!   r&   r$   rw  rw    rR  r&   rw  c                       e Zd ZdS )mnNrQ  r!   r&   r$   ry  ry    rR  r&   ry  c                   ,     e Zd ZdZdZd Z fdZ xZS )r  zBase class for schemata expecting 2 or more children.

    The special attribute `switch` indicates that the last two child
    elements are in reversed order and must be switched before XML-export.
    r   c                 f    |                     dd          | _        t          j        | g|R i | d S )Nr  F)popr  r   r  )r  r   r(  s      r$   r  zMathSchema.__init__  s=    jj511d0X00000000r&   c                     t          t          |                               |          }| j        rF|                                 r2| j        d         | j        d         c| j        d<   | j        d<   d| _        |S )NF)rZ  r  r  r  r+  r   )r  r0  current_noder  s      r$   r  zMathSchema.append   so    Z..55e<<; 	 499;; 	 37=3DdmTVFW0DM"t}R0DKr&   )r  rG  rH  rI  r*  r  r  r[  r\  s   @r$   r  r    sX          I1 1 1        r&   r  c                       e Zd ZdS )msubNrQ  r!   r&   r$   r  r  (  rR  r&   r  c                       e Zd ZdS )msupNrQ  r!   r&   r$   r  r  )  rR  r&   r  c                       e Zd ZdZdS )msubsupr   Nrd  r!   r&   r$   r  r  *  re  r&   r  c                       e Zd ZdS )munderNrQ  r!   r&   r$   r  r  4  rR  r&   r  c                       e Zd ZdS )moverNrQ  r!   r&   r$   r  r  5  rR  r&   r  c                       e Zd ZdS )
munderoverNrQ  r!   r&   r$   r  r  E  rR  r&   r  c                       e Zd ZdZdS )mrootr   Nrd  r!   r&   r$   r  r  G  re  r&   r  c                       e Zd ZdZdS )mfracr   Nrd  r!   r&   r$   r  r  J  re  r&   r  c                       e Zd ZdZdS )mspacer   Nrd  r!   r&   r$   r  r  M  re  r&   r  c                     t          j        d|           }|t          j        d|           }|                    d          |                    d          fS )a"  Return leading TeX command name and remainder of `string`.

    >>> tex_cmdname('mymacro2') # up to first non-letter
    ('mymacro', '2')
    >>> tex_cmdname('name 2') # strip trailing whitespace
    ('name', '2')
    >>> tex_cmdname('_2') # single non-letter character
    ('_', '2')

    z([a-zA-Z]+) *(.*)Nz(.?)(.*)r   r   rematchgroupstringms     r$   tex_cmdnamer  W  sK     	%v..AyH[&))771::qwwqzz!!r&   c                     t          j        d|           }|d| fS |                    d          |                    d          fS )zmReturn leading number literal and remainder of `string`.

    >>> tex_number('123.4')
    ('123.4', '')

    z([0-9.,]*[0-9]+)(.*)Nr   r   r   r  r  s     r$   
tex_numberr  r  sD     	(&11Ay6z771::qwwqzz!!r&   c                     t          j        d| t           j                  }|                    dddd          \  }}}}|p|p||fS )zReturn first simple TeX token and remainder of `string`.

    >>> tex_token('\command{without argument}')
    ('\command', '{without argument}')
    >>> tex_token('or first character')
    ('o', 'r first character')

    a%  ((?P<cmd>\\[a-zA-Z]+)\s* # TeX command, skip whitespace
                      |(?P<chcmd>\\.)          # one-character TeX command
                      |(?P<ch>.?))            # first character (or empty)
                     (?P<remainder>.*$)    # remaining part of string
                 cmdchcmdch	remainder)r  r  VERBOSEr  )r  r  r  r  r  r  s         r$   	tex_tokenr    sZ     	  bj		* 	*A
 !"wk J JCI%2y((r&   c                    d}d}d}|                      d          s| dd         | dd         fS | D ]4}|dz  }|rd}n |dk    rd}n|dk    r|dz  }n|dk    r|dz  }|dk    r n5t          d	          | d|dz
           | |d         fS )
zReturn first TeX group or token and remainder of `string`.

    >>> tex_group('{first group} returned without brackets')
    ('first group', ' returned without brackets')

    r   Fr   Nr   rT   Tr   zGroup without closing bracket)
startswithr-  )r  split_index
nest_levelescapecs        r$   	tex_groupr    s     KJFS!! &bqbz6!"":%% ; ;q 	FF$YYFF#XX!OJJ#XX!OJ??E  9:::!KM/"F;<<$888r&   c                     t          |           \  }}|dk    r$t          |                                           \  }}||fS )a  Return first TeX group or token and remainder of `string`.

    >>> tex_token_or_group('\command{without argument}')
    ('\command', '{without argument}')
    >>> tex_token_or_group('first character')
    ('f', 'irst character')
    >>> tex_token_or_group(' also whitespace')
    (' ', 'also whitespace')
    >>> tex_token_or_group('{first group} keep rest')
    ('first group', ' keep rest')

    r   )r  r  lstrip)r  r*   r  s      r$   tex_token_or_groupr    sA     v&&NC
czz"6==??33Y	>r&   c                    t          j        d| t           j                  }||                     d          sd| fS 	 |                    d          |                    d          fS # t
          $ r t          d| z            w xY w)a$  Return optional argument and remainder.

    >>> tex_optarg('[optional argument] returned without brackets')
    ('optional argument', ' returned without brackets')
    >>> tex_optarg('{empty string, if there is no optional arg}')
    ('', '{empty string, if there is no optional arg}')

    z\s*                            # leading whitespace
                 \[(?P<optarg>(\\]|[^\[\]]|\\])*)\] # [group] without nested groups
                 (?P<remainder>.*$)
                 Nr   r   optargr  z+Could not extract optional argument from %r)r  r  r  r  r  rX  r-  r  s     r$   
tex_optargr    s     	  bj	* 	*A 	y**3//y6zRwwx  !''+"6"666 R R RG&PQQQRs   )A' 'Bc                 B   d                     |                                          }| }t          |          dk    ra|d         |dd         }}|dk    r-|dk    r(t          |          \  }}t	          || |          \  } }n|dv rt          | |          } n|dk    r't                      }|                     |           |} n|dk    r|                                 } n|d	k    r9t                      }|                                                     |           |} nh|
                                r$|                     t          |                    } n0|                                r8t          |          \  }}|                     t          ||z                       } n|t          v ryi }|d
k    rE| j        r>| j        d         }t#          |dd
          dv s|                    d          dk    rd|d<   |                     t'          t          |         fi |          } nb|dv r%|                     t'          |d                    } n9|dv r#|                     t'          |                    } nt)          d|z            t          |          dk    a|S )u   Append MathML conversion of `string` to `node` and return it.

    >>> parse_latex_math(math(), r'lpha')
    math(mi('α'))
    >>> parse_latex_math(mrow(), r'x_{n}')
    mrow(msub(mi('x'), mi('n')))

    r   r   r   NrT   _^r   r   r   r   r  r
  z([=classmathopenprefixformz/()[]|Fstretchyz+*=<>,.!?`';@zUnsupported character: "%s")r  splitr  r  
handle_cmdhandle_script_or_limitrT  r  r/  ra  isalpharu  isdigitr  ry  anomalous_charsr   r  r&  rw  r-  )	noder  treer  cmdnamenew_nodenumberr   previous_nodes	            r$   parse_latex_mathr    s    XXfllnn%%FD
f++//1Ivabbz68899)&11OGV%gtV<<LD&&$YY)$22DD#XXvvHKK!!!DD#XX::<<DD#XXuuHJJLL)))DDYY[[ 	B;;r!uu%%DDYY[[ 	B'//NFF;;r!F(||,,DD/!! JCxxDMx $b 1M63775@@$((11Z??)1Jv&;;r/!"4CC
CCDDDD(]];;r!e44455DD/!!;;r!uu%%DD<q@AAAS f++//T Kr&   c                    | t           v rAt          t           |                    }| t          v rd|d<   |                    |          }||fS | t          v r| dk    r$t          |          \  }}t          |d          }nt          t          |                    }| dk    rt          |t          d                    }nm| dk    r t          |t          d	          d
          }nG| dk    rt          |t          d                    }n#| dk    rt          |t          d                    }|                    |          }|r,|d         dvr"|                    t          d                    }||fS | t          v r| dk    rddi}ndt          |          i}| dk    rd|d<   t          |          \  }}|
                    d          r#t                               |dd         |          }| dk    rt                              ||          }|                                s|dk    r$|                    t          |fi |          }||fS t          dii |}|                    |           ||fS | dk    r*|                    t          dddd                     }||fS | d!k    rt          |d"          }||fS | t           v r3|                    t          t           |          d#$                    }||fS | t"          v r3|                    t          t"          |          d%&                    }||fS | t$          v rUi }| t&          v r|r|d         d'v rd(|d)<   n	| d*v rd+|d<   |                    t          t$          |          fi |          }||fS | t(          v r i }t*          t(          |                   }	t          |          \  }
}|
d,vrF	 t,          |
                    d                   }
n$# t0          $ r t3          d-| d.|
d/          w xY w|	r|	|d0<   |	|d1<   d(|d2<   | d3k    s|                     d4          r%t7                      }|                    |           |}|
d5k    r |                    t          |
fi |           | d6k    s|                     d7          r|                                }||fS | d8k    rt;          |          \  }}|d9k    r|d:|z   fS |
                    d          r7	 t$          |dd                  }n # t0          $ r t3          d;|z            w xY wt=          j        d<|d=z             }|                    t          |                    }||fS | d>v rt          |          \  }}|                     d?          }tC          |          D ]W\  }}|d@z  dk    r9tE          j#        dAdB|          }|                    tI          |                    }Gt          ||           X||fS | tJ          v r5|                    tM          dCtJ          |          z  D                    }||fS | dEv rntO          |          \  }}|                    dF          rdGtQ          |ddH                   dIz  z  }|                    tM          dC|z  D                    }||fS | dJk    r'tS                      }|                    |           ||fS | dKk    r)tU          dLM          }|                    |           ||fS | dNk    rtW          |          \  }}|rDt7                      }tY          |d(O          }t          ||           |                                 nt[                      }|                    |           ||fS | t\          v rt\          |          \  }}| dPk    rHtW          |          \  }}d3d6dQ}||v r-|/                                }||         |dR<   dS||         z   |d<   ta          dii |x}}|                     dT          r4t7          t          dU          |t          dV          dTW          }dX|_1        |rt          |fi |}|                    |           ||fS | dk    rZte                      }tg          |          }|                                                                                    |           ||fS | th          v rgt          t          th          |          d         d
Y          d(O          }| dZk    rd
|j5        d         d[<   | |_6        |                    |           ||fS | tn          v rRt          t          tn          |          d         d(          d(d
\          }| |_6        |                    |           ||fS | d]k    r)t          d(O          }|                    |           ||fS | tp          v rOt          t          tp          |          d                   d(O          }| |_6        |                    |           ||fS | d^k    r)t          d(O          }|                    |           ||fS | d_v rtW          |          \  }}t          t$          d`| dd         z                      }|rats          |          }t          t7                      |          }tu          |          dk    r|j5        d         }|                    |           nt          |          }|                    |           ||fS | tv          v rt          dii tv          |          }d|_1        ty          |t6                    rLtu          |          dk    r9||j=        j5        |j=        j5        >                    |          <   |j=        |_=        n8|j?        j@        dak    r|                    |           nt3          db| z            ||fS |                     dc          r.t;          |          \  }}|ddv r|}t          ||| e          }||fS | dfk    rt          ||          S | dgk    rt          ||          S t3          dh| z             )juj  Process LaTeX command `name` followed by `string`.

    Append result to `node`.
    If needed, parse `string` for command argument.
    Return new current node and remainder of `string`:

    >>> handle_cmd('hbar', math(), r' rac')
    (math(mi('ℏ')), ' \frac')
    >>> handle_cmd('hspace', math(), r'{1ex} (x)')
    (math(mspace(width='1ex')), ' (x)')

    zcapital-greekr  r   rC   )mathvariantr   r   r      ¯F)accentr   r   r   r   r   )r   r   u   ⁡rF   r  rR   rT   r   NrN   r   colonr   postfix0z0.28em)r  lspacerspaceidotsintz\int\dotsi\intzfont-weight: bold)stylez75%)mathsizez _^Tmovablelimits)r_   ra   r  z()[]/|.zUnsupported "\z" delimiter "z"!maxsizeminsize	symmetricr   l.r   rnotr   z{\not z\not: Cannot negate: "%s"!NFCu   ̸)textmboxtextrm$r   z(^ | $)r   z%s)width)hspacer  muz%semr~     phantomboxedbox)notationsqrt)r  r   )r  r  numalignz	numalign-r   r   r   )r   r   r  r   r  )r  r  oversetunderset)
xleftarrowxrightarrowlongr   z3Declaration "\%s" must be first command in a group.limitsr  )r  beginendzUnknown LaTeX command: r!   )Dlettersru  greek_capitalsr  	functionsr  r  rw  r  math_alphabetsr  r&  rN   r  rk  r  thick_operatorssmall_operators	operatorsr  bigdelimitersdelimiter_sizesstretchablesr  KeyErrorr-  endswithrT  r/  r  unicodedata	normalizer  	enumerater  subrs  spacesr  r  floatrg  rc  r  r  ri  	fractionscopyr  r*  ra  r_  accentsr   tex_cmdoverunderr  r  layout_stylesr  r.  rW  r  r  r  begin_environmentend_environment)r#   r  r  r  r*   r   r  r  delimiter_attributessize	delimiterrowpartsipartradix	indexnode
style_atts	frac_attsr  optargsr   entry	subscriptbasesub_nodes                             r$   r  r  a  sR   & wgdm$$>!! !0HW{{8$$V|y >!! -V44KC#8444HH)D/**H;h411HH[  Xr%yy???HH\!!h966HH[  h966H{{8$$  	.fQiz11;;r)}}--DV|~<!<0JJ')=>J9"+Jw+F33Y>>$ 	, ++c!""gs++C8 **S#&&C;;== 	#C9,,;;r#444455D?"$$$$Ef}
 w{{2c	#hOOOPPV|z&677V|{{2od3;NOOOPPV|{{2od3eDDDEEV|y
=  V q	U0B0B*.J'''''",Jw{{2io<<<<==V|}!}T23.v66	6I%%7()9)9$)?)?@		 7 7 7!k%)TT999#6 7 7 77  	5.2 +.2 +04 -6>>T]]3//>&&CKKDKK9==(<==>>>7??dmmC00?::<<DV|u}}''V#::V+++>>$ 	FFABB( F F F!"@"DEEEF#E3y=99{{2c77##V| )))(00V		# '' 	- 	-GAt1uzzviD99{{5;;// t,,,,V| v~~{{6VD\(9:::;;V|###''V<< 	0E#crc(OOB./C{{6S11122V|y::HwU+++H v~~"6**v 	IYt444HY...OOwwHHy"+D/Y7??'//NFF"11G  %NN,,	(/	*%%076?%B	'",,),,,4==!! 	#BsGGXr#wwgFFFH!"H 	6h55*55HHV|t||u::

##H---f}wGDM!,u===dKKK5==-2Ha *Ht|| DJqM$777 $U4 4 4Hy%%%Hu}}"U4[^,,T:::Hz&&&H,,,&v..	6)F48O,-- 	#!$''H'	::H8}}!!#,Q/OOH%%%%T{{HH}00M$/00!dD!! 	5c$ii1nnEMDK !5!;!;D!A!AB"kHOO^$..KK!!!! -/34 5 5 5}}X "6**Y$;;F)$DAAADV| w v...u}}tV,,,
047
8
88s    O) )!P
2T T%r   c                    | j                                         }|dk    rd|d<   n#|dk    st          |dd          t          v rd|d<   |dk    rt	          |t
                    rt          |j         ddi}nt	          |t                    rt          |j         ddi}n|d	v s |dk    r*|	                    dd
          dk    rt          |          }nt          |          }n|dk    rt	          |t                    rt          |j          }ngt	          |t                    rt          |j          }nC|d	v s |dk    r*|	                    dd
          dk    rt          |          }nt          |          }|                     |           |S )z)Append script or limit element to `node`.r  Fr  r
  r   Tr   r  )r  r  Nr   )r   r|  r  r  r  r  r  r  r  r&  r  r  r  )r  r  r  r0  r  s        r$   r  r    s   ME!&o
O
#
#UFB''=88!%oCxxeU## 		#!5>?$??HHt$$ 	#<t<<HH3332))OT22d::e}}HHE{{HH	
ceV$$ 		#!5>2HHt$$ 	#/HH3332))OT22d::U||HHE{{HKKOr&   c                 0   t          |          \  }}|t          v rt          |         d         }i }|r]t          t          |                    }|dk    r#t          t          |d                    }d|d<   |                     |           |} n7|dk    r1d|d	<   d
|d<   t          d          }|                     |           |} t                      }|                     t          t          |          fi |           |} nt          d          | |fS )Nr   r   z0.17em)r  r   columnalignr   z0.02em
rowspacingz0.333emcolumnspacing1)r   Environment not supported!)
r  matricesrT  rw  r  rk  ra  rP  r_  r-  )r  r  r#   left_delimiterr   wrapperr  s          r$   r  r    s-   V$$LD&x!$*
 	2n--..Gwr.BBBCC,2
=)KK   DD]""'/J|$*3J'---GKK   D F3u::44445557888<r&   c                    t          |          \  }}|t          v r|                                                                                                 } t          |         d         }|r7|                     t	          |                    } |                                 } n*|dk    r|                                 } nt          d          | |fS )Nr   r   r#  )r  r$  r/  r  rw  r-  )r  r  r#   right_delimiters       r$   r  r    s    V$$LD&xzz||!!##))++"4.+ 	 ;;r/2233D::<<DDW__::<<D7888<r&   c                 n    t          d | D                       }|dk    rdS t          |dz  dz             S )Nc              3   l   K   | ]/}|                     d           |                     d          z
  V  0dS r   z\&Ncountr"   r  s     r$   r%   z'tex_equation_columns.<locals>.<genexpr>  =      AASsyy~~		% 0 00AAAAAAr&   r   r   r   )rz   int)rowstabss     r$   tex_equation_columnsr3    s@    AADAAAAADqyyqtAvz??r&   c                     ddd}t          d | D                       }|rQddg|z  }ddg|z  }d	                    |d |d
z                      |d<   d	                    |d |                   |d<   |S )NalignT)r  r   c              3   l   K   | ]/}|                     d           |                     d          z
  V  0dS r+  r,  r.  s     r$   r%   z#align_attributes.<locals>.<genexpr>  r/  r&   r   r   r  r   r   r   r  r!  )rz   r  )r1  attsr2  alignsspacings        r$   align_attributesr:    s     " "DAADAAAAAD 96"T),%!hhvgtAvg77] #$ 8 8_Kr&   c           	      v   t          d          }|}|sd|d<   t          |                               d          }t          |          dk    rHt	                      }|                    t          t          |          fi t          |                     t          ||            |
                                S )zoReturn string with MathML code corresponding to `tex_math`.

    Set `inline` to False for displayed math.
    z"http://www.w3.org/1998/Math/MathML)xmlnsblockdisplayz\\r   )r   r   r  r  ra  r  rP  r_  r:  r  r5  )tex_mathinline	math_treer  r1  s        r$   
tex2mathmlrB  $  s     ?@@@ID ?&	)X&&,,U33t99q==55DVCII > >&6t&<&<> > ? ? ?T8$$$  """r&   )r   )T)RrI  r   r  r  sysr  version_infor@  rp  docutils.utils.mathr   r   	mathalphar  r  r  updater  r  	mathfencer  	mathcloser  mathbinmathrelmathord	mathpunctmathopr  r  r  r  r  r  r	  r  rN   r$  r
  r  r  r  objectr   rP  rT  rV  r_  ra  rc  rg  ri  rk  rm  rs  ru  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r3  r:  rB  r!   r&   r$   <module>rP     sh
  &       				 



    vG : : : : : : : : 

 )Y
Y	i		+ + '&&( ! 	 
   A A@A A A A A A !' & ( + ( , ( - / ) 3 8 ( ,ty y y	
 y y y y y y y d i d i  i!$   K) * * *   K( ) ) )   K) * * *
?? ? ?	
 ? ? ? ? ) 9 )  Y  i!" i#$ i%& i'(  5  	8 
  $ % % % 	  $ % % % 	  $ % % % 	  & ' ' ' 	  # $ $ $ 	      "+!*  &/%.%.%.%.%.%. 5 ! %%%&&&#%%%&
 
" *)))))*()))*	 	$ !2 1 1 1 1 1 1	 	 !2 1 1 1 1		
 	
 "!!  	
 
  $!!!!- 	 	 +/BB*/BB*/BB*/BB	  Bx)-q")+ +,.0%n5r:%k2B7_a01%n57KL%k2_a4HI	 		 A@@
 
 u u u u u6 u u uP     T   ) ) ) ) )4 ) ) )<N N N N ND N N N     -        -       }       }       M       ]   A A A A A A A A     I                                  *     :        :       j        T        D                 J       D       T   " " "6
" 
" 
"2) ) )<9 9 9d  *R R R>7 7 7dh9 h9 h9Z
       F  8  "  "	 	 	*# # # # # #r&   