o
    !5p`4D  ã                   @   s  d Z ddlm  m  mZ ddddddd	d
ddddddœZddddddddddddœZejZej	Z
e
 ej¡ e
 ej¡ e
 ej¡ e
 ej¡ e
 ej¡ e
 ej¡ d dd„ d D ƒ¡Zg d!¢Zi d"d#“d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdC“dDdEdFdGdHdIdJdKdLdMœ	¥Zi d"dN“d$dO“d&dP“d(dQ“d*dR“d,dS“d.dT“d0dU“d2dV“d4dW“d6dX“d8dY“d:dZ“d<d[“d>d\“d@d]“dBd^“i d_d`“dadb“dcdd“dedf“dgdh“didj“dkdl“dmdn“dodp“dqdr“dsdt“dudv“dwdx“dydz“d{d|“d}d~“dd€“¥i d�d‚“dƒd„“d…d†“d‡dˆ“d‰dŠ“d‹dŒ“d�dŽ“d�d�“d‘d’“d“d”“d•d–“d—d˜“d™dš“d›dœ“d�dž“dŸd “d¡d¢“¥d£d¤i¥Zd¥d¦d§d¨œZG d©dª„ dªeƒZG d«d¬„ d¬eƒZG d­d®„ d®eƒZG d¯d°„ d°eƒZG d±d²„ d²eƒZG d³d´„ d´eƒZG dµd¶„ d¶eƒZG d·d¸„ d¸eƒZG d¹dº„ dºeƒZ G d»d¼„ d¼eƒZ!G d½d¾„ d¾eƒZ"G d¿dÀ„ dÀeƒZ#G dÁdÂ„ dÂeƒZ$G dÃdÄ„ dÄeƒZ%G dÅdÆ„ dÆeƒZ&G dÇdÈ„ dÈeƒZ'G dÉdÊ„ dÊeƒZ(G dËdÌ„ dÌeƒZ)G dÍdÎ„ dÎeƒZ*G dÏdÐ„ dÐeƒZ+G dÑdÒ„ dÒeƒZ,G dÓdÔ„ dÔeƒZ-dÜdÖd×„Z.dØdÙ„ Z/dÜdÚdÛ„Z0dS )Ýz2Convert LaTex math code into presentational MathMLé    Nõ   Â´õ   Â¯u   Ë˜u   Ë‡u   Ë™õ   Â¨u   âƒ›ú`ú^u   Ëšu   âƒ¡u   Ëœu   âƒ—)ÚacuteÚbarÚbreveÚcheckÚdotÚddotÚdddotÚgraveÚhatÚmathringÚoverleftrightarrowÚtildeÚvecu   Î¦u   Îžu   Î£u   Î¨u   Î”u   Î˜u   Ï’u   Î u   Î©u   Î“u   Î›)ÚPhiÚXiÚSigmaÚPsiÚDeltaÚThetaÚUpsilonÚPiÚOmegaÚGammaÚLambdaÚ c                 C   s   g | ]}t | ‘qS © )Úspecial)Ú.0Úsymbolr    r    úB/usr/lib/python3/dist-packages/docutils/utils/math/latex2mathml.pyÚ
<listcomp>8   ó    r%   )ÚsumÚintÚointÚprod)&ÚarccosÚarcsinÚarctanÚargÚcosÚcoshÚcotÚcothÚcscÚdegÚdetÚdimÚexpÚgcdÚhomÚinfÚkerÚlgÚlimÚliminfÚlimsupÚlnÚlogÚmaxÚminÚPrÚsecÚsinÚsinhÚsupÚtanÚtanhÚinjlimÚ	varinjlimÚ	varlimsupÚprojlimÚ	varliminfÚ
varprojlimÚAu   ð�”¸ÚBu   ð�”¹ÚCu   â„‚ÚDu   ð�”»ÚEu   ð�”¼ÚFu   ð�”½ÚGu   ð�”¾ÚHu   â„�ÚIu   ð�•€ÚJu   ð�•�ÚKu   ð�•‚ÚLu   ð�•ƒÚMu   ð�•„ÚNu   â„•ÚOu   ð�•†ÚPu   â„™ÚQu   â„šu   â„�u   ð�•Šu   ð�•‹u   ð�•Œu   ð�•�u   ð�•Žu   ð�•�u   ð�•�u   â„¤)	ÚRÚSÚTÚUÚVÚWÚXÚYÚZu   ð�’œu   â„¬u   ð�’žu   ð�’Ÿu   â„°u   â„±u   ð�’¢u   â„‹u   â„�u   ð�’¥u   ð�’¦u   â„’u   â„³u   ð�’©u   ð�’ªu   ð�’«u   ð�’¬rb   u   â„›rc   u   ð�’®rd   u   ð�’¯re   u   ð�’°rf   u   ð�’±rg   u   ð�’²rh   u   ð�’³ri   u   ð�’´rj   u   ð�’µÚau   ð�’¶Úbu   ð�’·Úcu   ð�’¸Údu   ð�’¹Úeu   â„¯Úfu   ð�’»Úgu   â„ŠÚhu   ð�’½Úiu   ð�’¾Úju   ð�’¿Úku   ð�“€Úlu   ð�“�Úmu   ð�“‚Únu   ð�“ƒÚou   â„´Úpu   ð�“…Úqu   ð�“†Úru   ð�“‡Úsu   ð�“ˆÚtu   ð�“‰Úuu   ð�“ŠÚvu   ð�“‹Úwu   ð�“ŒÚxu   ð�“�Úyu   ð�“ŽÚzu   ð�“�u   â‰ u   âˆ‰u   â‰¢)ú=z\inz\equivc                   @   sh   e Zd ZdZdZ	 ddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚmathzBase class for MathML elements.i@B Nc                 C   sN   g | _ |durt|tƒr|D ]}|  |¡ qn|  |¡ |dur%|| _dS dS )z\math([children]) -> MathML element

        children can be one child or a list of children.N)ÚchildrenÚ
isinstanceÚlistÚappendÚinline)Úselfr‡   r‹   Úchildr    r    r$   Ú__init__¤   s   
ÿ

ÿzmath.__init__c                 C   s4   t | dƒr| jjdd dd„ | jD ƒ¡  S | jjS )Nr‡   z(%s)ú,c                 S   s   g | ]}t |ƒ‘qS r    )Úrepr)r"   r�   r    r    r$   r%   ¸   r&   z!math.__repr__.<locals>.<listcomp>)ÚhasattrÚ	__class__Ú__name__Újoinr‡   ©rŒ   r    r    r$   Ú__repr__µ   s
   
ÿzmath.__repr__c                 C   s   t | jƒ| jkS )zRoom for more children?)Úlenr‡   Ú	nchildrenr•   r    r    r$   Úfull¼   s   z	math.fullc                 C   s<   |   ¡ rJ ‚| j |¡ | |_| }|  ¡ r|j}|  ¡ s|S )zvappend(child) -> element

        Appends child and returns self if self is not full or first
        non-full parent.)r™   r‡   rŠ   Úparent)rŒ   r�   Únoder    r    r$   rŠ   Á   s   ÿzmath.appendc                 C   s   | j d }| j d= |S )zAdelete_child() -> child

        Delete last child and return it.éÿÿÿÿ)r‡   )rŒ   r�   r    r    r$   Údelete_childÏ   s   
zmath.delete_childc                 C   s    | j }| ¡ r|j }| ¡ s|S )zKclose() -> parent

        Close element and return first non-full element.)rš   r™   )rŒ   rš   r    r    r$   ÚcloseØ   s
   ÿz
math.closec                 C   s   |   ¡ |  ¡  |  ¡  S )zxml() -> xml-string)Ú	xml_startÚxml_bodyÚxml_endr•   r    r    r$   Úxmlâ   s   zmath.xmlc                 C   s6   t | dƒsd| jj gS d}| jrd| gS d| gS )Nr‹   z<%s>z"http://www.w3.org/1998/Math/MathMLz<math xmlns="%s">z <math xmlns="%s" mode="display">)r‘   r’   r“   r‹   )rŒ   Úxmlnsr    r    r$   rŸ   ç   s   


zmath.xml_startc                 C   ó   d| j j gS )Nz</%s>©r’   r“   r•   r    r    r$   r¡   ð   ó   zmath.xml_endc                 C   s"   g }| j D ]	}| | ¡ ¡ q|S ©N)r‡   Úextendr¢   )rŒ   r¢   r�   r    r    r$   r    ó   s   
zmath.xml_body©NN)r“   Ú
__module__Ú__qualname__Ú__doc__r˜   rŽ   r–   r™   rŠ   r�   rž   r¢   rŸ   r¡   r    r    r    r    r$   r†   ž   s    
	
	r†   c                   @   ó   e Zd Zdd„ ZdS )Úmrowc                 C   r¤   ©Nz
<%s>r¥   r•   r    r    r$   rŸ   ú   r¦   zmrow.xml_startN©r“   rª   r«   rŸ   r    r    r    r$   r®   ù   ó    r®   c                   @   r­   )Úmtablec                 C   r¤   r¯   r¥   r•   r    r    r$   rŸ   þ   r¦   zmtable.xml_startNr°   r    r    r    r$   r²   ý   r±   r²   c                   @   ó   e Zd ZdS )ÚmtrN©r“   rª   r«   r    r    r    r$   r´     ó    r´   c                   @   r³   )ÚmtdNrµ   r    r    r    r$   r·     r¶   r·   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚmxzBase class for mo, mi, and mnr   c                 C   ó
   || _ d S r§   ©Údata)rŒ   r»   r    r    r$   rŽ     ó   
zmx.__init__c                 C   ó   | j gS r§   rº   r•   r    r    r$   r      ó   zmx.xml_bodyN)r“   rª   r«   r¬   r˜   rŽ   r    r    r    r    r$   r¸     s
    r¸   c                   @   s   e Zd ZdddœZdd„ ZdS )Úmoz&lt;z&gt;)ú<ú>c                 C   s   | j  | j| j¡gS r§   )ÚtranslationÚgetr»   r•   r    r    r$   r      s   zmo.xml_bodyN)r“   rª   r«   rÂ   r    r    r    r    r$   r¿     s    
r¿   c                   @   r³   )ÚmiNrµ   r    r    r    r$   rÄ     r¶   rÄ   c                   @   r³   )ÚmnNrµ   r    r    r    r$   rÅ     r¶   rÅ   c                   @   ó   e Zd ZdZdS )Úmsubé   N©r“   rª   r«   r˜   r    r    r    r$   rÇ     ó    rÇ   c                   @   rÆ   )ÚmsuprÈ   NrÉ   r    r    r    r$   rË     rÊ   rË   c                   @   rÆ   )Úmsqrté   NrÉ   r    r    r    r$   rÌ     rÊ   rÌ   c                   @   rÆ   )ÚmrootrÈ   NrÉ   r    r    r    r$   rÎ     rÊ   rÎ   c                   @   rÆ   )ÚmfracrÈ   NrÉ   r    r    r    r$   rÏ   "  rÊ   rÏ   c                   @   ó"   e Zd ZdZddd„Zdd„ ZdS )	Úmsubsupé   NFc                 C   ó   || _ t | |¡ d S r§   ©Úreversedr†   rŽ   ©rŒ   r‡   rÕ   r    r    r$   rŽ   '  ó   zmsubsup.__init__c                 C   s4   | j r| jd | jd g| jdd…< d| _ t | ¡S )NrÈ   rÍ   rÒ   F)rÕ   r‡   r†   r¢   r•   r    r    r$   r¢   +  s   
zmsubsup.xml©NF©r“   rª   r«   r˜   rŽ   r¢   r    r    r    r$   rÑ   %  ó    
rÑ   c                   @   s,   e Zd ZddddddœZdd„ Zd	d
„ ZdS )Úmfencedú{u   âŒ©ú}u   âŒªr   )ú\{ú\langleú\}ú\rangleÚ.c                 C   s   || _ t | ¡ d S r§   )Úopenparr†   rŽ   )rŒ   Úparr    r    r$   rŽ   6  s   zmfenced.__init__c                 C   s2   | j  | j| j¡}| j  | j| j¡}d||f gS )Nz<mfenced open="%s" close="%s">)rÂ   rÃ   rã   Úclosepar)rŒ   Úopenrž   r    r    r$   rŸ   :  s   zmfenced.xml_startN)r“   rª   r«   rÂ   rŽ   rŸ   r    r    r    r$   rÛ   2  s    þrÛ   c                   @   rÆ   )Úmspacer   NrÉ   r    r    r    r$   rç   ?  rÊ   rç   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚmstyleNc                 K   s$   |d ur|| _ t | |¡ || _d S r§   )r˜   r†   rŽ   Úattrs)rŒ   r‡   r˜   Úkwargsr    r    r$   rŽ   C  s   
zmstyle.__init__c                 C   s    dgdd„ | j  ¡ D ƒ dg S )Nz<mstyle c                 S   s   g | ]}d | ‘qS )z%s="%s"r    )r"   Úitemr    r    r$   r%   J  s    ÿz$mstyle.xml_start.<locals>.<listcomp>rÁ   )ré   Úitemsr•   r    r    r$   rŸ   I  s
   
ÿÿzmstyle.xml_startr©   )r“   rª   r«   rŽ   rŸ   r    r    r    r$   rè   B  s    
rè   c                   @   rÐ   )	ÚmoverrÈ   NFc                 C   rÓ   r§   rÔ   rÖ   r    r    r$   rŽ   O  r×   zmover.__init__c                 C   s    | j r| j ¡  d| _ t | ¡S rØ   )rÕ   r‡   Úreverser†   r¢   r•   r    r    r$   r¢   S  s   

z	mover.xmlrØ   rÙ   r    r    r    r$   rí   M  rÚ   rí   c                   @   rÆ   )ÚmunderrÈ   NrÉ   r    r    r    r$   rï   Y  rÊ   rï   c                   @   s   e Zd ZdZddd„ZdS )Ú
munderoverrÒ   Nc                 C   s   t  | |¡ d S r§   )r†   rŽ   )rŒ   r‡   r    r    r$   rŽ   ^  s   zmunderover.__init__r§   )r“   rª   r«   r˜   rŽ   r    r    r    r$   rð   \  s    rð   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Úmtextr   c                 C   r¹   r§   ©Útext)rŒ   ró   r    r    r$   rŽ   c  r¼   zmtext.__init__c                 C   r½   r§   rò   r•   r    r    r$   r    f  r¾   zmtext.xml_bodyN)r“   rª   r«   r˜   rŽ   r    r    r    r    r$   rñ   a  s    rñ   Tc                 C   sL  d  |  ¡ ¡} |rtƒ }t|dd�}ntƒ }ttt|ƒƒdd�}t| ƒdk�r¤t| ƒ}| d }d}|dkr:| d }nd}|dkrB�nV|dkrÇ|d	v rU| t	|ƒ¡}d
}�nC|dkrc| t
ƒ ¡}d
}�n5|dkrq| t
ƒ ¡}d
}�n'| ¡ r¦d
}||k r�| |  ¡ r�|d7 }||k r�| |  ¡ s�| d|… }	t|	|| |d… ƒ\}}||7 }nò|dkr¿tƒ }
t|
ƒ}| ¡  ¡  |¡ |
}d
}nÙtd||f ƒ‚| ¡ rÓ| t|ƒ¡}nÅ| ¡ rß| t|ƒ¡}n¹|dv rë| t	|ƒ¡}n­|dk�r| ¡ }t|tƒ�rt|jdd�}nt|t	ƒ�r|jtv �rt|ƒ}nt|ƒ}| |¡ |}ny|dk�rf| ¡ }t|tƒ�r4t|jƒ}n*t|t	ƒ�rE|jtv �rEt|ƒ}nt|tƒ�rZ|jd jtv �rZt|jƒ}nt|ƒ}| |¡ |}n2|dk�rvtƒ }| |¡ |}n"|dk�r€| ¡ }n|dk�r’tƒ }
| ¡  |
¡ |
}ntd| ƒ‚| |d… } t| ƒdks'|S )zéparse_latex_math(string [,inline]) -> MathML-tree

    Returns a MathML-tree parsed from string.  inline=True is for
    inline math and inline=False is for displayed math.

    tree is the whole tree and node is the current element.ú T©r‹   Fr   rÍ   r   ú\z{}rÈ   r�   NzSyntax error: "%s%s"z+-*/=()[]|<>,.!?':;@Ú_©rÕ   r   rÜ   rÝ   ú&zIllegal character: "%s")r”   Úsplitr®   r†   r·   r²   r´   r—   rŠ   r¿   rç   ÚisalphaÚhandle_keywordrž   ÚSyntaxErrorrÄ   ÚisdigitrÅ   r�   rˆ   rË   rÑ   r‡   r»   Ú
sumintprodrï   rÇ   rí   rð   )Ústringr‹   r›   Útreerx   rm   ÚskipÚc2rs   ÚnameÚentryÚrowr�   ÚsubrH   r    r    r$   Úparse_latex_mathi  s¢   	
ÿ











²Or  c                 C   s0  d}t |ƒdkr|d dkr|dd … }d}| dkr;| d¡s#tdƒ‚|d7 }tƒ }tt|ƒƒ}| |¡ |}||fS | dkrX| d¡sHtd	ƒ‚|d7 }| ¡  ¡  ¡ }||fS | d
v rˆ|d dkrftdƒ‚| d¡}|dkrstdƒ‚| t	|d|… ƒ¡}||d 7 }||fS | dkršt
ƒ }| |¡ |}||fS | dkr¬tƒ }| |¡ |}||fS | dkrÝdD ]	}	| |	¡r» nq²tdƒ‚t|	ƒ}
| |
¡ tƒ }|
 |¡ |}|t |	ƒ7 }||fS | dk�rdD ]	}	| |	¡rí nqätdƒ‚| ¡ }|	|_| ¡ }|t |	ƒ7 }||fS | dk�r1tD ]}| |¡�r n�qtdƒ‚| tt| ƒ¡}|t |ƒ7 }||fS | dk�rGtddd�}| |¡ |}||fS | dk�rx|d dk�sa|d  ¡ �ra|d dk�retdƒ‚| tt|d  ƒ¡}|d7 }||fS | d v �r¢|d dk�s‹|d dk�r�td!ƒ‚| tt|d  ƒ¡}|d7 }||fS | d"k�r²| td#ƒ¡}||fS | tv �rÄ| tt|  ƒ¡}||fS | tv �rÖ| tt|  ƒ¡}||fS | tv �rè| tt|  ƒ¡}||fS | tv �rø| t| ƒ¡}||fS | tv �rttt|  ƒd$d%�}| |¡ |}||fS td&|  ƒ‚)'Nr   rô   rÍ   Úbeginz{matrix}z;Environment not supported! Supported environment: "matrix".é   ÚendzExpected "\end{matrix}"!)ró   ÚmathrmrÜ   zExpected "\text{...}"!rÝ   rœ   ÚsqrtÚfracÚleft)ú(ú[ú|rÞ   rß   râ   zMissing left-brace!Úright)ú)ú]r  rà   rá   râ   zMissing right-brace!Únotz)Expected something to negate: "\not ..."!ÚmathbfÚbold)r˜   ÚmathvariantÚmathbbrÈ   z%Expected something like "\mathbb{A}"!rÒ   )ÚmathscrÚmathcalz&Expected something like "\mathscr{A}"!Úcolonú:Trø   zUnknown LaTeX command: )r—   Ú
startswithrý   r·   r²   r´   rŠ   rž   Úfindrñ   rÌ   rÏ   rÛ   r®   rå   Ú
negatablesr¿   rè   ÚisupperrÄ   r  r  ÚGreekÚlettersr!   Ú	functionsÚoverrí   )r  r›   r   r  r  Útablers   r  r  rä   Úfencedr  ÚoperatorÚstyleÚovrr    r    r$   rü   Í  sÚ   

U¬
P±
H¹
D½
@Á
ÿ

4
Í
ÿ*
×ÿ"
ß

ã*
è
í
ï
ó
õ

÷
ù
þrü   c                 C   s   t | |d�}d | ¡ ¡S )z�Return string with MathML code corresponding to `tex_math`.

    `inline`=True is for inline math and `inline`=False for displayed math.
    rõ   r   )r  r”   r¢   )Útex_mathr‹   Úmathml_treer    r    r$   Ú
tex2mathml1  s   r.  )T)1r¬   Údocutils.utils.math.tex2unicharÚutilsr†   Útex2unicharr&  r#  Ú	mathalphar$  Úmathbinr!   ÚupdateÚmathrelÚmathordÚmathopÚmathopenÚ	mathcloseÚ	mathfencer”   rÿ   r%  r  r  r!  Úobjectr®   r²   r´   r·   r¸   r¿   rÄ   rÅ   rÇ   rË   rÌ   rÎ   rÏ   rÑ   rÛ   rç   rè   rí   rï   rð   rñ   r  rü   r.  r    r    r    r$   Ú<module>   s¨  óü
ÿ
ÿþýüûúùø	÷
öõôóòñðïæÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì7þ[

dd