
    Kiq                        d Z ddlZddlZddlmZmZmZm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mZmZmZmZ ddiZejA                  ejB                         ejD                  Z#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%jA                  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/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdCdGdEdHdEZ(e(jA                  ejR                         e(jA                  ejT                         e(jA                  ejV                         i dIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdddhdddfddidjdkdldmZ,e,jA                  ejZ                         e,jA                  ej\                         e,jA                  ej^                         e,jA                  ej`                         e,jA                  e(       dndodpZ1dqdrdsdtdudvdwdxZ2dyZ3dzd{d|d|d}d}d~d~dddddddZ4ddddddddddddddZ5ddddddddZ6ddddddZ7ddddZ8ddddddZ9dddddddddd	Z:dddddddddddddZ;i dddde;d   e;d   ddie;d   ddiz  e;d   ddiz  dZ<g dZ=ddddddddddd
Z>d Z?d Z@d ZAd ZBdÄ ZCdĄ ZDdń ZEdƄ ZFdǄ ZGddȄZHdɄ ZIdʄ ZJd˄ ZKd̄ ZLdd̈́ZMy)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)	MathErrormathalphabet2unichartex2unichartoplevel_code)mathmtablemrowmtrmtdmenclosemphantommsqrtmimnmomtextmsubmsupmsubsupmundermover
munderovermrootmfracmspaceMathRowhbaru   ℏu   Φ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     l/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/docutils/utils/math/latex2mathml.py	<genexpr>r<   I   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)FFTrV   )bmodpmodmodpodzdouble-struckboldzbold-italicscriptfrakturitalicnormalz
sans-serifzsans-serif-bold-italiczsans-serif-italic	monospace)mathbbmathbfmathbfitmathcalmathfrakmathitmathrmmathscrmathsf
mathbfsfit
mathsfbfitmathsfitmathtt	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   ▽dotsbu   ⋯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   ˚~   →)acutebarbrevecheckdotddotdddotddddotgravehatmathringtildevec)u   ⏞皙ɿ)   ←r   )u   ↔r   )_r   )r   r   )^g      )r   g333333ӿ)	overbraceoverleftarrowoverleftrightarrowoverlineoverrightarrowwidehat	widetilde)u   ⏟g?)r   g)
underbraceunderleftarrowunderleftrightarrow	underlineunderrightarrowu   −u   ∶    )-r   r   u   ℾu   ℿu   ⅀u   ℽu   ℼ)r    r   r   u   γu   π) r   )())[]){})r{   r{   )r}   r}   )r   r   )	matrixsmallmatrixpmatrixbmatrixBmatrixvmatrixVmatrixaligned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                     t        j                  d| t         j                        }|%t        j                  d| t         j                        }|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]+)[ \n]*(.*)z(.?)(.*)r   r   rematchDOTALLgroupstringms     r;   tex_cmdnamer  O  sQ     	)6299=AyHH[&"))4771:qwwqz!!    c                     t        j                  d| t         j                        }|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  r  sE     	(&"))<Ay6z771:qwwqz!!r  c                     t        j                  d| t         j                  t         j                  z        }|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  r  s         r;   	tex_tokenr!    s_     	  bjj2994		6A
 !"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   ro   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?: 89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                  t         j                  z        }|| j	                  d      sd| fS 	 |j                  d      |j                  d      fS # t        $ r t        d|  d      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  AttributeErrorr   r  s     r;   
tex_optargr0    s     	  bjj2994	6A 	y**3/6zQwwx !''+"666 QDVHBOPPQs   !A1 1B
c           
         |}| }t        |      dkD  r<|d   |dd }}|dv r|dk(  r t        |      \  }}t        |||      \  }}n|dv rt        ||      }n|dk(  rGt	        |t
              r|j                  dk(  r	d|_        nt               }|j                  |       |}nu|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(  rCt        |      r8|d   }	|	j"                  r|	j"                  dv s|	j%                  d      dk(  rd|d<   |j                  t'        t         |   fi |      }nO|dv r|j                  t'        |d            }n.|dv r|j                  t'        |            }nt)        d| d      |#|s| S t)        d| d|dt        |         d      t        |      dkD  r<|j                  r#t        |      |j                  k  rt)        d      | 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   Nz 
ro   _^r   r   &r   z([=r   mathopenprefixformz/()[]|Fstretchyz+*=<>,.!?`';@zUnsupported character: "r.  zNo insertion point for "z". Unbalanced braces in "z"?z.Last node missing children. Source incomplete?)lenr  
handle_cmdhandle_script_or_limit
isinstancer   	nchildrenr	   appendcloser   isalphar   isdigitr  r   anomalous_charstextgetr   r   )
rootsourcer  noder'  cmdnamenew_nodenumber
attributesprevious_nodes
             r;   parse_latex_mathrN    si    FD f+/1Ivabz6:9)&1OGV%gtV<LD&$Y)$2D#X$(T^^q-@!%6H%#X::<D#XuHJJL)DYY[;;r!u%DYY['/NFF;;r!F(|,D/! JCxCI $R!&&=+=+=+F$((1Z?)1Jv&;;r/!"4C
CDD(];;r!e45D/!;;r!u%D6qc<==<6vh ?55;Mc&k\5J4K2O P Pe f+/h ~~#d)dnn4HIIKr  c                 <   | t         v rAt        t         |          }| t        v r|j                  dd       |j	                  |      }||fS | t
        v r#|j	                  t        t
        |                |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 | dv r!t        d      }|j	                  |       ||fS | t         v rt#        | ||      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d+|	d,<   n	| d-v rd.|	d<   |j	                  t        t(        |    fi |	      }||fS | t,        v ri }
t.        t,        |       }t        |      \  }}|d/vr	 t0        |j3                  d0         }|r||
d4<   ||
d5<   d+|
d6<   | d7k(  s| j9                  d8      rt               }|j	                  |       |}|d9k7  r|j	                  t        |fi |
       | d:k(  s| j9                  d;      r|j;                         }||fS | d<k(  rot=        |      \  }}|d=k(  r|d>|z   fS |j?                  d0      r	 t(        |d?d@    }tA        jB                  dB|dCz         }|j	                  t        |            }||fS | dDv r|t        |      \  }}|jE                  dE      }tG        |      D ]K  \  }}|dFz  dk(  r2tI        jJ                  dGdH|      }|j	                  tM        |            }@t        ||       M ||fS | tN        v r)|j	                  t        dItN        |    z              }||fS | dJv rUtQ        |      \  }}|j9                  dK      rdLtS        |d@dM       dNz  z  }|j	                  t        dI|z              }||fS | dOk(  rtU               }|j	                  |       ||fS | dPk(  r"tW        dQdPR      }|j	                  |       ||fS | dSk(  rctY        |      \  }}|r4t               }t[        |d+T      }t        ||       |j;                          n
t]               }|j	                  |       ||fS | t^        v rt^        |    }	| dUk(  rBtY        |      \  }}d7d:dV}||v r+|	ja                         }	||   |	dW<   |	dxx   dX||   z   z  cc<   tc        dmi |	x}}| j9                  dY      r(t        t        d      |t        d      dY      }dZ|_2        |j	                  |       ||fS | d0k(  rFtg               }ti        |      }|j;                         j;                         j	                  |       ||fS | tj        v rNt        tj        |    d
      }| d[k(  r|j                  d\d]       t        |d+d+^      }|j	                  |       ||fS | tl        v r8t        t        tl        |    d   d+      d+d
_      }|j	                  |       ||fS | d`k(  r!t        d+T      }|j	                  |       ||fS | tn        v r5t        t        tn        |    d         d+T      }|j	                  |       ||fS | dak(  r!t        d+T      }|j	                  |       ||fS | dbv rtY        |      \  }}t        t(        dc| d?d@ z            }|rDtq        |      }t        t               |      }ts        |      d?k(  r|d   }|j	                  |       nt        |      }|j	                  |       ||fS | tt        v rRts        |      dkD  rt7        dd|  de      tt        |    jw                         D ]  \  }}|j                  ||        ||fS | j9                  df      r&t=        |      \  }}|dgv r|}ty        ||| h      }||fS | dik(  rt{        ||      S | djk(  rt}        ||      S t7        dk|  dl      # t4        $ r t7        d1|  d2| d3      w xY w# t4        $ r t7        dA| d3      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)')

    r   zcapital-greekr5   r_   )mathvariantr2   r   r1      ¯F)accentr3   r   r4   r   r   )r   r   u   ⁡rY   )lspacerspacer   )widthr   r8  0.333emr   )
boldsymbolpmbrW  )CLASScolonr   postfix0z0.28em)r7  rS  rT  idotsintz\int\dotsi\intzfont-weight: bold)stylez75%)mathsizez _^Tmovablelimits)rz   r|   r5  z()[]/|.ro   zUnsupported "\z" delimiter "r.  maxsizeminsize	symmetricr  l.r  rnotr   z{\not r   Nz"\not" cannot negate: "NFCu   ̸)rD  mboxtextrm$r   z(^[ 
]|[ 
]$)r   z%s)hspacer   muz%sem   phantomboxedbox)notationrY  sqrt)switchr   )rd  rf  numalignz
 numalign-r   r  r   r   z+1)rR  ru  )ru  rR  oversetunderset)
xleftarrowxrightarrowlongzDeclaration "\z#" must be first command in a group!limitsr2  )r|  beginendzUnknown LaTeX command "\z".r8   )?lettersr   greek_capitalssetr?  ordinary	functionsr+  r   r   r   modulo_functionsin_blockr   rN  r	   math_alphabetshandle_math_alphabetthick_operatorssmall_operators	operatorsr`  bigdelimitersdelimiter_sizesstretchablesr*  KeyErrorr   endswithr@  r!  r#  unicodedata	normalizesplit	enumerater  subr   spacesr(  floatr   r   r0  r   r   	fractionscopyr   r>  r   r
   accentsoverunderr   r:  layout_stylesitemsr<  begin_environmentend_environment)r:   rH  r  rJ  r@   binarynamedparenthesespaddingrL  delimiter_attributessize	delimiterrowpartsipartradix	indexnoder-  optargsr   entryaccent_node	subscriptbasesub_nodekvr  s                                 r;   r;  r;    s
   & wgdm$>! LL/2{{8$V|x
 {{2htn-.66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| $$l+H~#D$77 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%3()9)9$)?@	 .2 +.2 +04 -6>T]]3/&CKKDKK9=(<=>7?dmmC0::<DV|u}'V#:V+++>>$DAB( ##E3x<8{{2c7#V| ))(0V		# ' 	-GAt1uz vv/4@{{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t_
7?'/NFF"1G '__.
)0
:&7#|gfo'EE#-*--4==!BsGXr#wgFH!"HHV|t|u:

##H-f}w7 5=OOM40T$?Ht| DJqM$7 $U4Hy%Hu}"U4[^,T:Hz&H,,&v.	6)F48O,-!$'H'	:H8}!#A;OOH%T{HH}t9q=~dV 4* * + +!$'--/ 	DAqHHQN	V|}}X"6*Y$;F)$DADV| w v..u}tV,,
/vR8
99e  3/$ 8$$-;b!2 3 332  D#:3%r BCCDs   g# 4h #g?hc                    i }| dk(  rd|d<   t        |      \  }}| dk(  r<|j                         r,t        |      dkD  r|j                  t	        |            }||fS t        di |}|j                  |       t        ||       | j                  dd      j                  dd      }t        t        |i       |j                         D ]  }t        |t              r*dj                  fd	|j                  D              |_        =t        |t              sNj                  |j                  |j                        |_        | dk(  s|j                  j                         s|j!                  d
d        |j#                         |fS )Nrh   r   rg   r   rd   rj   rk   r   c              3   B   K   | ]  }j                  ||        y wr7   )rE  )r9   r  a2chs     r;   r<   z'handle_math_alphabet.<locals>.<genexpr>  s     "K488B#3"Ks   rP  r_   r8   )r+  rA  r:  r?  r   r	   rN  replacegetattrr   iterr=  r   joinrD  rE  r  r@  )	r:   rH  r  rL  r@   	containerkeysubnoder  s	           @r;   r  r    sD   Jy'
7$V,KCxCKKMc#hl{{2c7#V|"z"IKK	Y$
,,y)
,
4
4\<
PC'b1D>># 5gr"77"Kgll"KKGL$88GLL',,?GLxGLL$8$8$:M845 ??f$$r  c                 ~   | j                         }|dk(  r|j                  dd       n*|dk(  st        |dd      t        v r|j                  dd       |dk(  rkt	        |t
              rt        |dd	i}nt	        |t              rt        |dd	i}n|d
v s|dk(  r|j                  dd      rt        |      }nut        |      }ni|dk(  rdt	        |t              r	t        | }nKt	        |t              r	t        | }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|  r`  falserD  r   truer   ru  T)r|  r`  Nr   )popr  r  r`  r=  r   r   r   r   rE  r   r   r?  )rH  r'  r|  childrJ  s        r;   r<  r<    s    HHJE		/7+
O
#UFB'=8		/6*CxeU#!566Ht$3d3H332%))OT"Be}HE{H	
ceV$!5)Ht$H332%))OT"BU|HE{HKKOr  c                    t        |      \  }}|t        v rt        |   d   }i }|rMt        t        |            }|dk(  r t        t        |d            }d|d<   d|d<   | j	                  |       |} n|dk(  rd	|d
<   d|d<   d|d<   n
|dk(  rd|d<   t               }| j	                  t        t        |      fi |       |} | |fS t        d| d      )Nr   r   z0.17em)rT  r  columnalignr   r   z0.02em
rowspacingrV  columnspacing1r   r   	ams-alignEnvironment "" not supported!)	r(  matricesr	   r   r?  r   r   r
   r   )rH  r  r:   left_delimiterrL  wrapperr  s          r;   r  r  $  s    V$LD&x!$*
2n-.Gwr.BC,2
=)&-
7#KK D]"'/J|$*3J'(+J}%Y"-JwF3u:445 < -v-=>??r  c                 N   t        |      \  }}|t        v r| j                         j                         j                         } t        |   d   }|r.| j                  t	        |            } | j                         } | |fS |dk(  r| j                         } | |fS t        d| d      )Nr   r   r  r  )r(  r  r@  r?  r   r   )rH  r  r:   right_delimiters       r;   r  r  @  s    V$LD&xzz|!!#))+"4.+;;r/23D::<D
 <	 W_::<D < -v-=>??r  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r3  z\&Ncountr9   r  s     r;   r<   z'tex_equation_columns.<locals>.<genexpr>R  &     ASsyy~		% 00A   -/r   r   r   )r   int)rowstabss     r;   tex_equation_columnsr  Q  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 )Nr  T)r   r   c              3   b   K   | ]'  }|j                  d       |j                  d      z
   ) ywr  r  r  s     r;   r<   z#align_attributes.<locals>.<genexpr>h  r  r  r  r  r\  r   r   r   r  r  )r   r  )r  attsr  alignsspacings        r;   align_attributesr  d  s|      "D ADAAD6"T),%!hhvgtAv7] #$ 8_Kr  c                 N   t        d      }|}|rj|j                  dd       t        |       j                  d      }t	        |      dkD  r0t               }|j                  t        t        |      dd	             t        ||        |j                          |j                         S )
zxReturn string with MathML code corresponding to `tex_math`.

    Set `as_block` to ``True`` for displayed formulas.
    z"http://www.w3.org/1998/Math/MathML)xmlnsdisplayblockz\\r   r  T)rY  r   )r   r  r   r  r:  r   r?  r   r
   rN  
indent_xmltoxml)tex_mathas_block	math_treerH  r  s        r;   
tex2mathmlr  ~  s     ?@IDi)X&,,U3t9q=5DVCI[157 8T8$??r  )r   )F)N__doc__r  r  docutils.utils.mathr   r   r   r   #docutils.utils.math.mathml_elementsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  update	mathalphamathordr  r  r  r  r  r  	mathfencer5  	mathcloser  mathbinmathrel	mathpunctmathopr  r  r`  r  r  r  r  rC  ra   r  r  r  r  r  r  r  r!  r(  r+  r0  rN  r;  r  r<  r  r  r  r  r  r8   r  r;   <module>r     sz    
 = =      5/ {$$ % 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	 #Q!N+K("N+.BBK(OQ+??
	 A
&"F
"6)>9b,QBDVq:x
%PB8"&
4r  