
    dd(                     d   d Z ddlZddl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	j                  d dD               dddddZddd d!d"d#d$d%d&d'd(d)d$d*Zi d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdBdFdDdGdDZej                  ej                         ej                  ej                         ej                  ej                          i dHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdcdgdcdeddhdidjdkdlZej                  ej$                         ej                  ej&                         ej                  ej(                         ej                  ej*                         ej                  ej,                         ej                  e       dmdndoZdpdqdrdsdtdudvdwZdxZdydzd{d{d|d}d}d~d~dddddZddddddddddddd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 d      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(      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݄ de4      Z5 G d߄ de4      Z6 G d de4      Z7 G d de5      Z8 G d de6      Z9 G d de7      Z: G d de4      Z; G d de%      Z< G d de%      Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEddZFd ZGd ZHd ZId ZJddZKy)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)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 
 y wN ).0names     B/usr/lib/python3/dist-packages/docutils/utils/math/latex2mathml.py	<genexpr>r$   B   s      A$$ As   )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)TTFz0.278em)FTT0.444em)FTFz0.667em)FFTr>   )bmodpmodmodpod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   r{   r|   r}   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   r}   r~   r{   r|   2em1emz0.2778emz0.25emz0.2222emz0.1667emz	-0.1667emz	-0.2222emz	-0.2778em)qquadquad
thickspace; medspace:	thinspace,negthinspace!negmedspacenegthickspace)   ´u   ́)u   ˉu   ̄)u   ˘u   ̆)u   ˇu   ̌)u   ˙u   ̇)   ¨u   ̈)rw   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   )())[]){})rc   rc   )re   re   )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.470em      )
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 Zy) 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 | _         | j                  |       i | _        |j                         D ]"  }||   | j                  |j	                         <   $ y)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
attributeskeyslower)selfr   r   keys       r#   __init__zmath.__init__Z  sN     H??$ 	;C ,6c?DOOCIIK(	;    c                    t        | dg       D cg c]  }t        |       }}t        | d      r$|j                  t        | j                               t        | t              r| j                  r|j                  d       || j                  j                         D cg c]  \  }}||d| c}}z  }| j                  j                  ddj                  |      z  z   S c c}w c c}}w )Nr   datazswitch=True=z(%s)z, )getattrreprhasattrappendr  
isinstance
MathSchemaswitchr   items	__class____name__join)r  itemcontentkvs        r#   __repr__zmath.__repr__m  s    *1$
B*GH$4:HH4 NN4		?+dJ'DKKNN=)t/D/D/F &tq!} N & 	& ~~&&$))G2D)DDD I
&s   C#C(c                 ,    t        | j                        S r   )lenr   r  s    r#   __len__zmath.__len__x  s    4==!!r  c                      | j                   |   S r   r   )r  r  s     r#   __getitem__zmath.__getitem__}  s    s##r  c                 "    || j                   |<   y r   r  )r  r  r  s      r#   __setitem__zmath.__setitem__  s    #r  c                 :     | j                   j                  |i |S r   )r   get)r  argskwargss      r#   r$  zmath.get  s    "t""D3F33r  c                 R    | j                   duxr t        |       | j                   k\  S )z;Return boolean indicating whether children may be appended.N)	nchildrenr  r  s    r#   fullz	math.full  s(    d* 0I/	1r  c                     | j                         rt        d| z        | j                  j                  |       | |_        | j                         r| j                         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  sQ     99;5<==U#99;::<r  c                 6    |D ]  }| j                  |        | S r   )r  )r  r   r.  s      r#   r   zmath.extend  s"     	EKK	r  c                     | j                   }|/|j                         r|j                   }||j                         r|S )z7Close element and return first non-full parent or None.)r,  r)  )r  r,  s     r#   r-  z
math.close  s7     V[[]]]F  V[[]r  c                 @    dj                  | j                               S )z,Return XML representation of self as string.r   )r  _xmlr  s    r#   toprettyxmlzmath.toprettyxml  s    wwtyy{##r  c                 ~    | j                         g| j                  |      z   d| j                  j                  z  gz   S )Nz</%s>)xml_starttag	_xml_bodyr  r  r  levels     r#   r2  z	math._xml  sA    ""$%..'(T^^44456 	7r  c                     d | j                   j                         D        }ddj                  | j                  j                  g|      z  S )Nc              3      K   | ]:  \  }}|3|dt        |      j                  dd      j                  dd      d < y w)Nz="Truer   Falser   ")strreplace)r!   r  r  s      r#   r$   z$math.xml_starttag.<locals>.<genexpr>  sC      #QM  Q!?!G!GQX!YZ #s   A Az<%s>r   )r   r  r  r  r  )r  attrss     r#   r5  zmath.xml_starttag  sF    #!__224# $.."9"9!BE!BCCCr  c                     g }| j                   D ]>  }|j                  dd|dz   z  g       |j                  |j                  |dz                @ |j                  dd|z  g       |S )N
z  r   )r   r   r2  )r  r8  xmlr.  s       r#   r6  zmath._xml_body  si    ]] 	,EJJdeAg./0JJuzz%'*+	, 	

D$,'(
r  c                     	 | d   dk(  S # t         $ r. 	 | j                  j                         cY S # t        $ r Y Y yw xY ww xY w)z;Return true, if `self` or a parent has ``display='block'``.displayblockF)KeyErrorr,  is_blockAttributeErrorr  s    r#   rH  zmath.is_block  sO    		?g-- 	{{++--! 	s$   
 	A0A	=A=Ar   )r  
__module____qualname____doc__r(  r,  _levelordxml_entities_boolstringshtml_tagnamer  r  r  r   r"  r$  r)  r  r   r-  r3  r2  r5  r6  rH  r    r  r#   r   r   D  s    BI-F)F 	C&C&C'#L !1LCL+;&	E"
$$41

$7
Dr  r   c                       e Zd Zy)mtableNr  rK  rL  r    r  r#   rT  rT        r  rT  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              rb|j                  dk(  rSt	        |j
                        |_        | j
                  |_        | j
                  D ]	  }||_          |j                         S t	        |       dk(  rJ	 | j
                  d   |j
                  |j
                  j                  |       <   || j
                  d   _         t        |          S # t        t        f$ r | j
                  d   cY S w xY w)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-  indexrI  
ValueErrorsuper)r  r,  r.  r  s      r#   r-  z
mrow.close  s     fm,1A1AQ1F"6??3F"mmFO &%&<<>!t9>(?C}}Q?O 5 5d ;<*0a ' w} #J/ (}}Q''(s   A	C& &DD)r  rK  rL  rM  r-  __classcell__r  s   @r#   rX  rX    s    4 r  rX  c                       e Zd ZdZy)rZ  zCBase class for elements treating content as a single inferred mrow.N)r  rK  rL  rM  r    r  r#   rZ  rZ  
  s    Mr  rZ  c                       e Zd Zy)mtrNrU  r    r  r#   rb  rb    rV  r  rb  c                       e Zd Zy)mtdNrU  r    r  r#   rd  rd    rV  r  rd  c                       e Zd ZdZy)mencloser   Nr  rK  rL  r(  r    r  r#   rf  rf        Ir  rf  c                       e Zd ZdZy)mphantomr   Nrg  r    r  r#   rj  rj    rh  r  rj  c                       e Zd ZdZy)msqrtr   Nrg  r    r  r#   rl  rl    rh  r  rl  c                       e Zd ZdZy)mstyler   Nrg  r    r  r#   rn  rn    rh  r  rn  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                 2    || _         t        |   di | y )Nr    )r  r]  r  )r  r  r   r  s      r#   r  zMathToken.__init__)  s    	&:&r  c                 `    t        | j                        j                  | j                        gS r   )r>  r  	translaterP  r7  s     r#   r6  zMathToken._xml_body-  s$    DII(():):;<<r  rJ  )r  rK  rL  rM  r(  r  r6  r^  r_  s   @r#   rp  rp  "  s     I'=r  rp  c                       e Zd Zy)mtextNrU  r    r  r#   ru  ru  1  rV  r  ru  c                       e Zd Zy)miNrU  r    r  r#   rw  rw  2  rV  r  rw  c                       e Zd Zy)moNrU  r    r  r#   ry  ry  3  rV  r  ry  c                       e Zd Zy)mnNrU  r    r  r#   r{  r{  4  rV  r  r{  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                 d    |j                  dd      | _        t        j                  | g|i | y )Nr  F)popr  r   r  )r  r   r&  s      r#   r  zMathSchema.__init__E  s*    jj51d0X00r  c                     t         |   |      }| j                  rP| j                         r@| j                  d   | j                  d   c| j                  d<   | j                  d<   d| _        |S )NF)r]  r  r  r)  r   )r  r.  current_noder  s      r#   r  zMathSchema.appendI  s^    w~e,;;499;37==3DdmmTVFW0DMM"t}}R0DKr  )r  rK  rL  rM  r(  r  r  r^  r_  s   @r#   r  r  <  s     I1 r  r  c                       e Zd Zy)msubNrU  r    r  r#   r  r  R  rV  r  r  c                       e Zd Zy)msupNrU  r    r  r#   r  r  S  rV  r  r  c                       e Zd ZdZy)msubsupr   Nrg  r    r  r#   r  r  V  rh  r  r  c                       e Zd Zy)munderNrU  r    r  r#   r  r  a  rV  r  r  c                       e Zd Zy)moverNrU  r    r  r#   r  r  b  rV  r  r  c                       e Zd Zy)
munderoverNrU  r    r  r#   r  r  s  rV  r  r  c                       e Zd ZdZy)mrootr   Nrg  r    r  r#   r  r  v  rh  r  r  c                       e Zd ZdZy)mfracr   Nrg  r    r  r#   r  r  z  rh  r  r  c                       e Zd ZdZy)mspacer   Nrg  r    r  r#   r  r  ~  rh  r  r  c                     t        j                  d|       }|t        j                  d|       }|j                  d      |j                  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]+) *(.*)z(.?)(.*)r   r   rematchgroupstringms     r#   tex_cmdnamer    sE     	%v.AyHH[&)771:qwwqz!!r  c                 ~    t        j                  d|       }|d| fS |j                  d      |j                  d      fS )zmReturn leading number literal and remainder of `string`.

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

    z([0-9.,]*[0-9]+)(.*)r   r   r   r  r  s     r#   
tex_numberr    s?     	(&1Ay6z771:qwwqz!!r  c                     t        j                  d| t         j                        }|j                  dddd      \  }}}}|xs |xs ||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    sV     	  bjj		*A
 !"wk JCI%2y((r  c                     d}d}d}| j                  d      s
| dd | dd fS | D ]0  }|dz  }|rd}n|dk(  rd}n|dk(  r|dz  }n
|dk(  r|dz  }|dk(  s0 n t        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   rW   Tr   zGroup without closing bracket)
startswithr+  )r  split_index
nest_levelescapecs        r#   	tex_groupr    s     KJFS!bqz6!":%% ;qF$YF#X!OJ#X!OJ?; 9::!KM"F;<$888r  c                 h    t        |       \  }}|dk(  rt        | j                               \  }}||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    s7     v&NC
cz"6==?3Y	>r  c                     t        j                  d| t         j                        }|| j                  d      sd| fS 	 |j	                  d      |j	                  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>.*$)
                 r   r   optargr  z+Could not extract optional argument from %r)r  r  r  r  r  rI  r+  r  s     r#   
tex_optargr  &  s     	  bjj	*A 	y**3/6zRwwx !''+"666 RG&PQQRs   !A   A8c                 B   dj                  |j                               }| }t        |      dkD  r|d   |dd }}|dk(  r|dk(  r t        |      \  }}t	        || |      \  } }n|dv rt        | |      } n|dk(  rt               }| j                  |       |} ns|dk(  r| j                         } n\|d	k(  r-t               }| j                         j                  |       |} n*|j                         r| j                  t        |            } n|j                         r,t        |      \  }}| j                  t        ||z               } n|t        v rmi }|d
k(  rC| j                   r7| j                   d   }t#        |dd
      dv s|j%                  d      dk(  rd|d<   | j                  t'        t        |   fi |      } nN|dv r| j                  t'        |d            } n-|dv r| j                  t'        |            } nt)        d|z        t        |      dkD  r|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   NrW   _^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_limitrX  r  r-  rd  isalpharw  isdigitr  r{  anomalous_charsr   r
  r$  ry  r+  )	noder  treer  cmdnamenew_nodenumberr   previous_nodes	            r#   parse_latex_mathr  E  s    XXflln%FD
f+/1Ivabz689)&1OGV%gtV<LD&$Y)$2D#XvHKK!D#X::<D#XuHJJL)DYY[;;r!u%DYY['/NFF;;r!F(|,D/! JCxDMM $b 1M6375@$((1Z?)1Jv&;;r/!"4C
CDD(];;r!e45D/!;;r!u%D;a?@@S f+/T Kr  c                 "   | t         v r4t        t         |          }| t        v rd|d<   |j                  |      }||fS | t        v r| dk(  rt        |      \  }}t        |d      }nt        t        |          }| dk(  rt        |t        d            }nR| dk(  rt        |t        d	      d
      }n5| dk(  rt        |t        d            }n| dk(  rt        |t        d            }|j                  |      }|r!|d   dvr|j                  t        d            }||fS | t        v rt        |    \  }}}}|r!|j                  t        d||            }||fS |j                         rd}|j                  t        |            }|r|j                  t        dd
            }|r5|j                  t        d            }|j                  t        d            }t        |      \  }}t        ||      }|r|j                  t        dd
            }||fS | t        v r| dk(  rddi}	ndt        |    i}	| dk(  rd|	d<   t        |      \  }}
|j                  d      rt         j                  |dd  |      }| d!k(  rt         j                  ||      }|j#                         s|d"k(  r|j                  t        |fi |	      }||
fS t%        dmi |	}|j                  |       ||fS | d#k(  r"|j                  t        d$d%d&d'(            }||fS | d)k(  rt        |d*      }||fS | t&        v r'|j                  t        t&        |    d+,            }||fS | t(        v r'|j                  t        t(        |    d-.            }||fS | t*        v rHi }	| t,        v r|r|d   d/v rd0|	d1<   n	| d2v rd3|	d<   |j                  t        t*        |    fi |	      }||fS | t.        v ri }t0        t.        |       }t        |      \  }}|d4vr	 t2        |j5                  d         }|r||d8<   ||d9<   d0|d:<   | d;k(  s| j;                  d<      rt=               }|j                  |       |}|d=k7  r|j                  t        |fi |       | d>k(  s| j;                  d?      r|j?                         }||fS | d@k(  rotA        |      \  }}|dAk(  r|dB|z   fS |j                  d      r	 t*        |dd     }tC        jD                  dD|dEz         }|j                  t        |            }||fS | dFv r|t        |      \  }}|jG                  dG      }tI        |      D ]K  \  }}|dHz  dk(  r2tK        jL                  dIdJ|      }|j                  tO        |            }@t        ||       M ||fS | tP        v r)|j                  t        dKtP        |    z              }||fS | dLv rUtS        |      \  }}|j;                  dM      rdNtU        |d dO       dPz  z  }|j                  t        dK|z              }||fS | dQk(  rtW               }|j                  |       ||fS | dRk(  r!tY        dST      }|j                  |       ||fS | dUk(  rct[        |      \  }}|r4t=               }t]        |d0V      }t        ||       |j?                          n
t_               }|j                  |       ||fS | t`        v rt`        |    \  }}| dWk(  r:t[        |      \  }}d;d>dX}||v r#|jc                         }||   |dY<   dZ||   z   |d<   te        dmi |x}}| j;                  d[      r(t=        t        d      |t        d      d[\      }d]|_3        |rt%        |fi |}|j                  |       ||fS | dk(  rFti               }tk        |      }|j?                         j?                         j                  |       ||fS | tl        v rUt        t        tl        |    d   d
      d0V      }| d^k(  rd
|jn                  d   d_<   | |_8        |j                  |       ||fS | tr        v r?t        t        tr        |    d   d0      d0d
`      }| |_8        |j                  |       ||fS | dak(  r!t        d0V      }|j                  |       ||fS | tt        v r<t        t        tt        |    d         d0V      }| |_8        |j                  |       ||fS | dbk(  r!t        d0V      }|j                  |       ||fS | dcv rt[        |      \  }}t        t*        dd| dd  z            }|rNtw        |      }t        t=               |      }ty        |      dk(  r|jn                  d   }|j                  |       nt        |      }|j                  |       ||fS | tz        v rt%        dmi tz        |    }d |_3        t}        |t<              r_ty        |      dk(  rQ||j~                  jn                  |j~                  jn                  j                  |      <   |j~                  |_?        ||fS |j                  j                  dek(  r|j                  |       ||fS t9        df| z        | j;                  dg      r&tA        |      \  }}
|dhv r|
}t        ||| i      }||fS | djk(  rt        ||      S | dkk(  rt        ||      S t9        dl| z         # t6        $ r t9        d5| d6|d7      w xY w# t6        $ r t9        dC|z        w xY w)nuj  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   rF   )mathvariantr   r   r      ¯F)accentr   r   r   r   r   )r   r   u   ⁡rA   )lspacerspacer   )widthr   r  0.333emr   rI   r  rU   rW   r   NrQ   r   colonr   postfix0z0.28em)r  r  r  idotsintz\int\dotsi\intzfont-weight: bold)stylez75%)mathsizez _^Tmovablelimits)rb   rd   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)hspacer  muz%semr     phantomboxedbox)notationsqrt)r  r   )r  r  numalignz	numalign-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    )Flettersrw  greek_capitalsr  	functionsr  r  ry  r  modulo_functionsrH  r  r  math_alphabetsr  r$  rQ   r  rn  thick_operatorssmall_operators	operatorsr  bigdelimitersdelimiter_sizesstretchablesr  rG  r+  endswithrX  r-  r  unicodedata	normalizer  	enumerater  subru  spacesr  floatrj  rf  r  r  rl  	fractionscopyr  r(  rd  rb  accentsr   tex_cmdoverunderr  r  layout_stylesr  r,  r[  r  r  r  begin_environmentend_environment)r"   r  r  r  r(   binarynamedparenthesespaddingr   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    s`   & wgdm$>! !0HW{{8$V|y >! -V4KC#84H)D/*H;h30H[ Xr$x>H\!h85H[ h85H{{8$ fQiz1;;r(|,DV|0@0F-W;;r%HID<==?G{{601;;r#67D;;r%y)D;;vI67D(0Vc*;;r#67DV|~<!<0J')=>J9"+Jw+F3Y>>$ ++c!"gs+C8 **S#&C;;=C8O;;r#445D?"$$Ef} w{{2c	#hOPV|z&78V|{{2od3;NOPV|{{2od3eDEV|y
= Vq	U0B*.J'''",Jw{{2io<<=V|}!}T23.v6	6I%7()9)9$)?@	 .2 +.2 +04 -6>T]]3/&CKKDKK9=(<=>7?dmmC0::<DV|u}'V#:V+++>>$EAB( ##E3x<8{{2c7#V| ))(0V		# ' 	-GAt1uzvvi48{{5;/ t,	- V| v~{{6VD\(9:;V|##'V<<E#cr(OB./C{{6S12V|y:HwU+H
 v~"6*vIYt4HY.OOwHHy"+D/Y7?'/NFF"1G %NN,	(/	*%%076?%B	'",),,4==!BsGXr#wgFH!"Hh5*5HHV|t|u:

##H-f}wGDM!,u=dK5=-2Ha *Ht| DJqM$7 $U4Hy%Hu}"U4[^,T:Hz&H,,&v.	6)F48O,-!$'H'	:H8}!#,,Q/OOH%T{HH}0M$/0!dD!c$i1nEMDKK  !5!5!;!;D!AB"kkHO  ^^$$.KK!   ,.23 4 4 }}X"6*Y$;F)$DADV| w v..u}tV,,
1D8
99i  7!%)9#6 7 770  E!"?"CDDEs   9k k6 k36lc                    | j                   j                         }|dk(  rd|d<   n|dk(  st        |dd      t        v rd|d<   |dk(  rt	        |t
              rt        |j                   ddi}nt	        |t              rt        |j                   ddi}n|d	v s|dk(  r|j                  dd
      rt        |      }nt        |      }n}|dk(  rxt	        |t              rt        |j                    }nUt	        |t              rt        |j                    }n2|d	v s|dk(  r|j                  dd
      rt        |      }nt        |      }| j                         |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  r.  r  s        r#   r  r    s0   MME!&o
O
#UFB'=8!%oCxeU#!5>>?$?Ht$<t<H332%))OT"Be}HE{H	
ceV$!5>>2Ht$/H332%))OT"BU|HE{HKKOr  c                    t        |      \  }}|t        v rt        |   d   }i }|rHt        t        |            }|dk(  rt        t        |d            }d|d<   | j	                  |       |} n.|dk(  r)d|d	<   d
|d<   t        d      }| j	                  |       |} t               }| j	                  t        t        |      fi |       |} | |fS t        d      )Nr   r   z0.17em)r  r   columnalignr   z0.02em
rowspacingr  columnspacing1)r   Environment not supported!)
r  matricesrX  ry  r  rn  rd  rT  rb  r+  )r  r  r"   left_delimiterr   wrapperr   s          r#   r  r    s    V$LD&x!$*
2n-.Gwr.BC,2
=)KK D]"'/J|$*3J'-GKK D F3u:445 < 677r  c                 F   t        |      \  }}|t        v r| j                         j                         j                         } t        |   d   }|r.| j                  t	        |            } | j                         } | |fS |dk(  r| j                         } | |fS t        d      )Nr   r   r*  )r  r+  r-  r  ry  r+  )r  r  r"   right_delimiters       r#   r  r  6  s    V$LD&xzz|!!#))+"4.+;;r/23D::<D
 <	 W_::<D < 677r  c                 T    t        d | D              }|dk(  ryt        |dz  dz         S )Nc              3   b   K   | ]'  }|j                  d       |j                  d      z
   ) ywr   z\&Ncountr!   r  s     r#   r$   z'tex_equation_columns.<locals>.<genexpr>H  &     ASsyy~		% 00A   -/r   r   r   )r}   int)rowstabss     r#   tex_equation_columnsr;  G  s.    ADAADqytAvz?r  c                     ddd}t        d | D              }|r?ddg|z  }ddg|z  }d	j                  |d |d
z          |d<   d	j                  |d |       |d<   |S )NalignT)r  r   c              3   b   K   | ]'  }|j                  d       |j                  d      z
   ) ywr2  r3  r5  s     r#   r$   z#align_attributes.<locals>.<genexpr>[  r6  r7  r   r   r  r   r   r   r&  r(  )r}   r  )r9  attsr:  alignsspacings        r#   align_attributesrB  X  sz     "DADAAD6"T),%!hhvgtAv7] #$ 8_Kr  c           	      "   t        d      }|}|sdd|d<   t        |       j                  d      }t        |      dkD  r7t	               }|j                  t        t        |      fi t        |             t        ||        |j                         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)xmlnsrF  rE  z\\r   )r   r   r  r  rd  r  rT  rb  rB  r  r3  )tex_mathinline	math_treer  r9  s        r#   
tex2mathmlrH  m  s     ?@ID&	)X&,,U3t9q=5DVCI >&6t&<> ?T8$  ""r  )r   )T)LrM  r  r  docutils.utils.mathr   r   	mathalphar  r  r  updater  r  r  	mathfencer  	mathcloser  mathbinmathrelmathord	mathpunctmathopr  r  r  r  r	  r  r  r  rQ   r+  r  r  r  r  r   rT  rX  rZ  rb  rd  rf  rj  rl  rn  rp  ru  rw  ry  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r;  rB  rH  r    r  r#   <module>rS     sk    
  : 


 8hhx(	+ 	 
   A@A A -,,,  !%*.4 8 8	
 8 8 8 8 8 8 8 8 # ( #  (!" (#&   K)) *   K(( )   K)) *
. . .	
 . . . . .  (   H" X#$ X%& X'( X)* 7	: 
  $$ % 	  $$ % 	  $$ % 	  && ' 	  ## $ 	     	4 ! %%#%%%%&&&&
$ !     !   !( -,,,,,,	 !1 0 0 0 0		 !   	
 #
 +/B*/B*/B*/B	 2h $a "#%'^,b1[)2.OQ'(^,.BC[)OQ+?@
	 A
 @ @| T 4 >ND N -  - } } M ] = = I        , :  : j  T  D "   J D T ":
"6)>9b,R>7f{:BB8""	*#r  