U
    Š±ËhV ã                   @  sô   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZmZmZ dd
lmZ ddlmZmZ ddlmZmZmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZ eeƒddd„ƒZ!ddd„Z"eZ#dS )z
A MathML printer.
é    )Úannotations)ÚAny)ÚMul)ÚS)Údefault_sort_key)Úsympify)Úsplit_super_subÚrequires_partial)Úprecedence_traditionalÚ
PRECEDENCEÚPRECEDENCE_TRADITIONAL)Úgreek_unicode)ÚPrinterÚprint_function)Úprec_to_dpsÚrepr_dpsÚto_strc                   @  sN   e Zd ZU dZddddddddddddi d	d
œZded< ddd„Zdd„ ZdS )ÚMathMLPrinterBasez^Contains common code required for MathMLContentPrinter and
    MathMLPresentationPrinter.
    Nzutf-8FZabbreviatedú[ÚplainTú&#xB7;)ÚorderÚencodingÚfold_frac_powersZfold_func_bracketsÚfold_short_fracZinv_trig_styleÚln_notationZlong_frac_ratioÚ	mat_delimÚmat_symbol_styleÚ
mul_symbolÚroot_notationZsymbol_namesÚmul_symbol_mathml_numberszdict[str, Any]Ú_default_settingsc                   sN   t  ˆ|¡ ddlm}m} |ƒ ˆ_G dd„ d|ƒ‰ ‡ ‡fdd„}|ˆj_d S )Nr   )ÚDocumentÚTextc                   @  s   e Zd Zddd„ZdS )z+MathMLPrinterBase.__init__.<locals>.RawTextÚ c                 S  s    | j r| d || j |¡¡ d S )Nz{}{}{})ÚdataÚwriteÚformat)ÚselfÚwriterÚindentZ	addindentZnewl© r+   ú9/tmp/pip-unpacked-wheel-6t8vlncq/sympy/printing/mathml.pyÚwritexml6   s    z4MathMLPrinterBase.__init__.<locals>.RawText.writexmlN)r$   r$   r$   )Ú__name__Ú
__module__Ú__qualname__r-   r+   r+   r+   r,   ÚRawText5   s   r1   c                   s   ˆ ƒ }| |_ ˆj|_|S ©N)r%   ÚdomZownerDocument)r%   Úr©r1   r(   r+   r,   ÚcreateRawTextNode:   s    z5MathMLPrinterBase.__init__.<locals>.createRawTextNode)r   Ú__init__Zxml.dom.minidomr"   r#   r3   ÚcreateTextNode)r(   Úsettingsr"   r#   r6   r+   r5   r,   r7   +   s    zMathMLPrinterBase.__init__c                 C  s,   t  | |¡}| ¡ }| dd¡}| ¡ }|S )z2
        Prints the expression as MathML.
        ÚasciiÚxmlcharrefreplace)r   Ú_printZtoxmlÚencodeÚdecode)r(   ÚexprZmathMLZunistrZxmlbstrÚresr+   r+   r,   ÚdoprintB   s
    zMathMLPrinterBase.doprint)N)r.   r/   r0   Ú__doc__r!   Ú__annotations__r7   rA   r+   r+   r+   r,   r      s$   
ò
r   c                   @  sB  e Zd ZdZdZdd„ Zdd„ ZdJd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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eZeZd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%e"Z&e"Z'e"Z(dBdC„ Z)dDdE„ Z*dFdG„ Z+dHdI„ Z,dS )KÚMathMLContentPrinterz}Prints an expression to the Content MathML markup language.

    References: https://www.w3.org/TR/MathML2/chapter4.html
    Z_mathml_contentc              6   C  s¨   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!d"d!d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2œ5}|j jD ]}|j}||krx||   S qx|j j}| ¡ S )3ú)Returns the MathML tag for an expression.ÚplusÚtimesZdiffÚcnÚpowerÚmaxÚminÚabsÚandÚorÚxorÚnotZimpliesÚciÚintÚsumÚsinÚcosÚtanÚcotÚcscÚsecÚsinhÚcoshÚtanhÚcothÚcschÚsechÚarcsinÚarcsinhÚarccosÚarccoshÚarctanÚarctanhÚarccotZarccothZarcsecZarcsechZarccscZarccschÚlnÚeqZneqZgeqZleqÚgtÚltÚunionZ	intersect)5ZAddr   Ú
DerivativeÚNumberrR   ÚPowZMaxZMinZAbsÚAndÚOrZXorZNotZImpliesÚSymbolÚMatrixSymbolZRandomSymbolÚIntegralÚSumrT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   ÚasinÚasinhÚacosÚacoshÚatanÚatanhÚatan2ÚacotZacothZasecZasechZacscZacschÚlogÚEqualityÚ
UnequalityÚGreaterThanÚLessThanÚStrictGreaterThanÚStrictLessThanÚUnionÚIntersection©Ú	__class__Ú__mro__r.   Úlower)r(   ÚeÚ	translateÚclsÚnr+   r+   r,   Ú
mathml_tagT   sx    Ë8zMathMLContentPrinter.mathml_tagc           	      C  s@  |  ¡ r<| j d¡}| | j d¡¡ | |  | ¡¡ |S ddlm} ||ƒ\}}|tjk	r | j d¡}| | j d¡¡ | |  	|¡¡ | |  	|¡¡ |S | 
¡ \}}|tjkrÐt|ƒdkrÐ|  	|d ¡S | jdkrèt |¡ ¡ }| j d¡}| | j d¡¡ |dkr | |  	|¡¡ |D ]}| |  	|¡¡ q$|S )	NÚapplyÚminusr   ©ÚfractionÚdivideé   ÚoldrG   )Úcould_extract_minus_signr3   ÚcreateElementÚappendChildÚ
_print_MulÚsympy.simplifyr’   r   ÚOner<   Úas_coeff_mulÚlenr   r   Ú
_from_argsÚas_ordered_factors)	r(   r?   Úxr’   ÚnumerÚdenomÚcoeffÚtermsÚtermr+   r+   r,   r™   –   s2    


zMathMLContentPrinter._print_MulNc                 C  s
  | j ||d}|  |d ¡}g }|dd … D ]’}| ¡ rŽ| j d¡}| | j d¡¡ | |¡ | |  | ¡¡ |}||d kr¾| |¡ q,| |¡ |  |¡}||d kr,| |  |¡¡ q,t|ƒdkrÐ|S | j d¡}| | j d¡¡ |r| | d¡¡ qî|S )N©r   r   r”   r   r   éÿÿÿÿrF   )	Ú_as_ordered_termsr<   r–   r3   r—   r˜   Úappendr   Úpop)r(   r?   r   ÚargsZlastProcessedZ	plusNodesÚargr    r+   r+   r,   Ú
_print_Add¹   s.    


zMathMLContentPrinter._print_Addc                 C  s®   |j d jdkrtdƒ‚| j d¡}t|j ƒD ]z\}\}}|t|j ƒd krr|dkrr| j d¡}| |  |¡¡ n,| j d¡}| |  |¡¡ | |  |¡¡ | |¡ q.|S )Nr§   Tz¼All Piecewise expressions must contain an (expr, True) statement to be used as a default condition. Without one, the generated expression may not evaluate to anything under some condition.Z	piecewiser”   Z	otherwiseÚpiece)	r«   ZcondÚ
ValueErrorr3   r—   Ú	enumerater   r˜   r<   )r(   r?   ÚrootÚirŠ   Úcr®   r+   r+   r,   Ú_print_PiecewiseÕ   s    z%MathMLContentPrinter._print_Piecewisec              	   C  s^   | j  d¡}t|jƒD ]B}| j  d¡}t|jƒD ]}| |  |||f ¡¡ q0| |¡ q|S )NZmatrixZ	matrixrow)r3   r—   ÚrangeÚrowsÚcolsr˜   r<   )r(   Úmr    r²   Zx_rÚjr+   r+   r,   Ú_print_MatrixBaseê   s    z&MathMLContentPrinter._print_MatrixBasec                 C  s°   |j dkr2| j d¡}| | j t|jƒ¡¡ |S | j d¡}| | j d¡¡ | j d¡}| | j t|jƒ¡¡ | j d¡}| | j t|j ƒ¡¡ | |¡ | |¡ |S )Nr”   rH   r   r“   )Úqr3   r—   r˜   r8   ÚstrÚp)r(   rŠ   r    ÚxnumZxdenomr+   r+   r,   Ú_print_Rationaló   s    


z$MathMLContentPrinter._print_Rationalc                 C  s–   | j  d¡}| | j  |  |¡¡¡ | j  d¡}| j  d¡}| |  |jd ¡¡ | |  |jd ¡¡ | |¡ | |¡ | |  |jd ¡¡ |S )Nr   ÚbvarÚlowlimitr”   é   r   )r3   r—   r˜   rŽ   r<   r«   )r(   rŠ   r    Úx_1Úx_2r+   r+   r,   Ú_print_Limit  s    

z!MathMLContentPrinter._print_Limitc                 C  s   | j  d¡S )NZ
imaginaryi©r3   r—   ©r(   rŠ   r+   r+   r,   Ú_print_ImaginaryUnit  s    z)MathMLContentPrinter._print_ImaginaryUnitc                 C  s   | j  d¡S )NZ
eulergammarÆ   rÇ   r+   r+   r,   Ú_print_EulerGamma  s    z&MathMLContentPrinter._print_EulerGammac                 C  s"   | j  d¡}| | j  d¡¡ |S )zwWe use unicode #x3c6 for Greek letter phi as defined here
        https://www.w3.org/2003/entities/2007doc/isogrk1.htmlrH   u   Ï†©r3   r—   r˜   r8   ©r(   rŠ   r    r+   r+   r,   Ú_print_GoldenRatio  s    z'MathMLContentPrinter._print_GoldenRatioc                 C  s   | j  d¡S )NZexponentialerÆ   rÇ   r+   r+   r,   Ú_print_Exp1   s    z MathMLContentPrinter._print_Exp1c                 C  s   | j  d¡S )NÚpirÆ   rÇ   r+   r+   r,   Ú	_print_Pi#  s    zMathMLContentPrinter._print_Pic                 C  s   | j  d¡S )NÚinfinityrÆ   rÇ   r+   r+   r,   Ú_print_Infinity&  s    z$MathMLContentPrinter._print_Infinityc                 C  s   | j  d¡S )NZ
notanumberrÆ   rÇ   r+   r+   r,   Ú
_print_NaN)  s    zMathMLContentPrinter._print_NaNc                 C  s   | j  d¡S )NZemptysetrÆ   rÇ   r+   r+   r,   Ú_print_EmptySet,  s    z$MathMLContentPrinter._print_EmptySetc                 C  s   | j  d¡S )NÚtruerÆ   rÇ   r+   r+   r,   Ú_print_BooleanTrue/  s    z'MathMLContentPrinter._print_BooleanTruec                 C  s   | j  d¡S )NÚfalserÆ   rÇ   r+   r+   r,   Ú_print_BooleanFalse2  s    z(MathMLContentPrinter._print_BooleanFalsec                 C  s4   | j  d¡}| | j  d¡¡ | | j  d¡¡ |S )Nr   r   rÐ   )r3   r—   r˜   rË   r+   r+   r,   Ú_print_NegativeInfinity5  s    z,MathMLContentPrinter._print_NegativeInfinityc                   s*   ‡ ‡‡fdd„‰t ˆ jƒ}| ¡  ˆ|ƒS )Nc                   s8  ˆj  d¡}| ˆj  ˆ ˆ ¡¡¡ ˆj  d¡}| ˆ | d d ¡¡ | |¡ t| d ƒdkr¾ˆj  d¡}| ˆ | d d ¡¡ | |¡ ˆj  d¡}| ˆ | d d ¡¡ | |¡ t| d ƒdkrüˆj  d¡}| ˆ | d d ¡¡ | |¡ t| ƒdkr| ˆ ˆ j¡¡ n| ˆ| dd … ƒ¡ |S )	Nr   rÀ   r   é   rÁ   r”   ZuplimitrÂ   )r3   r—   r˜   rŽ   r<   r   Úfunction)Úlimitsr    Z	bvar_elemÚlow_elemÚup_elem©rŠ   Ú
lime_recurr(   r+   r,   rß   <  s(    



z8MathMLContentPrinter._print_Integral.<locals>.lime_recur)ÚlistrÛ   Úreverse)r(   rŠ   rÛ   r+   rÞ   r,   Ú_print_Integral;  s    
z$MathMLContentPrinter._print_Integralc                 C  s
   |   |¡S r2   )râ   rÇ   r+   r+   r,   Ú
_print_SumX  s    zMathMLContentPrinter._print_Sumc                   sB  ˆ j  ˆ  |¡¡}‡ fdd„}dd„ ‰t|jƒ\}}}ˆ|ƒ}‡fdd„|D ƒ}‡fdd„|D ƒ}ˆ j  d¡}| ˆ j  |¡¡ |sÌ|sœ| ˆ j  |¡¡ n.ˆ j  d	¡}| |¡ | ||ƒ¡ | |¡ nr|sˆ j  d
¡}	|	 |¡ |	 ||ƒ¡ | |	¡ n<ˆ j  d¡}
|
 |¡ |
 ||ƒ¡ |
 ||ƒ¡ | |
¡ |S )Nc                   s°   t | ƒdkr†ˆ j d¡}t| ƒD ]`\}}|dkrXˆ j d¡}| ˆ j d¡¡ | |¡ ˆ j d¡}| ˆ j |¡¡ | |¡ q |S ˆ j d¡}| ˆ j | d ¡¡ |S d S )Nr”   zmml:mrowr   zmml:moú úmml:mi©r   r3   r—   r°   r˜   r8   ©ÚitemsÚmrowr²   ÚitemÚmoÚmi©r(   r+   r,   Újoin`  s    
z0MathMLContentPrinter._print_Symbol.<locals>.joinc                 S  s   | t krt  | ¡S | S d S r2   ©r   Úget©Úsr+   r+   r,   r‹   r  s    
z5MathMLContentPrinter._print_Symbol.<locals>.translatec                   s   g | ]}ˆ |ƒ‘qS r+   r+   ©Ú.0Úsup©r‹   r+   r,   Ú
<listcomp>z  s     z6MathMLContentPrinter._print_Symbol.<locals>.<listcomp>c                   s   g | ]}ˆ |ƒ‘qS r+   r+   ©rô   Úsubrö   r+   r,   r÷   {  s     rå   zmml:msubzmml:msupzmml:msubsup)r3   r—   rŽ   r   Únamer˜   r8   )r(   ÚsymrQ   rî   rú   ÚsupersÚsubsÚmnameÚmsubÚmsupÚmsubsupr+   ©r(   r‹   r,   Ú_print_Symbol]  s6    



z"MathMLContentPrinter._print_Symbolc                 C  sô   | j d r¤|jjr¤|jjdkr¤| j d¡}| | j d¡¡ |jjdkrŽ| j d¡}| j d¡}| | j t	|jjƒ¡¡ | |¡ | |¡ | |  
|j¡¡ |S | j d¡}| j |  |¡¡}| |¡ | |  
|j¡¡ | |  
|j¡¡ |S )Nr   r”   r   r±   rÂ   ÚdegreerH   )Ú	_settingsÚexpÚis_Rationalr½   r3   r—   r˜   r»   r8   r¼   r<   ÚbaserŽ   )r(   rŠ   r    ZxmldegZxmlcnrÃ   r+   r+   r,   Ú
_print_Pow˜  s&    
ÿ


zMathMLContentPrinter._print_Powc                 C  s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r2   ©r3   r—   rŽ   r˜   r8   r¼   rË   r+   r+   r,   Ú_print_Number¯  s    z"MathMLContentPrinter._print_Numberc                 C  s:   | j  |  |¡¡}t|jt|jƒƒ}| | j  |¡¡ |S r2   )	r3   r—   rŽ   Úmlib_to_strÚ_mpf_r   Ú_precr˜   r8   )r(   rŠ   r    Zrepr_er+   r+   r,   Ú_print_Float´  s    z!MathMLContentPrinter._print_Floatc                 C  s¸   | j  d¡}|  |¡}t|jƒr$d}| | j  |¡¡ | j  d¡}t|jƒD ]J\}}| |  |¡¡ |dkrL| j  d¡}| |  t	|ƒ¡¡ | |¡ qL| |¡ | |  |j¡¡ |S )Nr   ZpartialdiffrÀ   r”   r  )
r3   r—   rŽ   r	   r?   r˜   ÚreversedÚvariable_countr<   r   )r(   rŠ   r    Zdiff_symbolrÃ   rû   rG   r  r+   r+   r,   Ú_print_Derivativeº  s    


z&MathMLContentPrinter._print_Derivativec                 C  sD   | j  d¡}| | j  |  |¡¡¡ |jD ]}| |  |¡¡ q*|S ©Nr   )r3   r—   r˜   rŽ   r«   r<   ©r(   rŠ   r    r¬   r+   r+   r,   Ú_print_FunctionÍ  s
    
z$MathMLContentPrinter._print_Functionc                 C  s2   | j  |  |¡¡}|jD ]}| |  |¡¡ q|S r2   )r3   r—   rŽ   r«   r˜   r<   r  r+   r+   r,   Ú_print_BasicÔ  s    
z!MathMLContentPrinter._print_Basicc                 C  sH   | j  d¡}| j  |  |¡¡}| |¡ |jD ]}| |  |¡¡ q.|S r  )r3   r—   rŽ   r˜   r«   r<   )r(   rŠ   r    rÃ   r¬   r+   r+   r,   Ú_print_AssocOpÚ  s    

z#MathMLContentPrinter._print_AssocOpc                 C  sL   | j  d¡}| | j  |  |¡¡¡ | |  |j¡¡ | |  |j¡¡ |S r  )r3   r—   r˜   rŽ   r<   ÚlhsÚrhsrË   r+   r+   r,   Ú_print_Relationalâ  s
    z&MathMLContentPrinter._print_Relationalc                 C  s*   | j  d¡}|D ]}| |  |¡¡ q|S )zgMathML reference for the <list> element:
        https://www.w3.org/TR/MathML2/chapter4.html#contm.listrà   ©r3   r—   r˜   r<   )r(   ÚseqÚdom_elementrê   r+   r+   r,   Ú_print_listé  s    z MathMLContentPrinter._print_listc                 C  s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r2   r
  ©r(   r½   r  r+   r+   r,   Ú
_print_intñ  s    zMathMLContentPrinter._print_intc                 C  s,   | j  d¡}|jD ]}| |  |¡¡ q|S )NÚset©r3   r—   r«   r˜   r<   r  r+   r+   r,   Ú_print_FiniteSetú  s    
z%MathMLContentPrinter._print_FiniteSetc                 C  s>   | j  d¡}| | j  d¡¡ |jD ]}| |  |¡¡ q$|S )Nr   Zsetdiff©r3   r—   r˜   r«   r<   r  r+   r+   r,   Ú_print_Complement   s
    
z&MathMLContentPrinter._print_Complementc                 C  s>   | j  d¡}| | j  d¡¡ |jD ]}| |  |¡¡ q$|S )Nr   Zcartesianproductr$  r  r+   r+   r,   Ú_print_ProductSet  s
    
z&MathMLContentPrinter._print_ProductSetc                 C  sZ   | j  |  |¡¡}|jD ]*}| j  d¡}| |  |¡¡ | |¡ q| |  |j¡¡ |S )NrÀ   )r3   r—   rŽ   Ú	signaturer˜   r<   r?   )r(   rŠ   r    r¬   rÃ   r+   r+   r,   Ú_print_Lambda  s    
z"MathMLContentPrinter._print_Lambda)N)-r.   r/   r0   rB   ÚprintmethodrŽ   r™   r­   r´   rº   r¿   rÅ   rÈ   rÉ   rÌ   rÍ   rÏ   rÑ   rÒ   rÓ   rÕ   r×   rØ   râ   rã   r  Ú_print_MatrixSymbolÚ_print_RandomSymbolr	  r  r  r  r  r  r  r  r  r   Ú_print_ImpliesÚ
_print_NotÚ
_print_Xorr#  r%  r&  r(  r+   r+   r+   r,   rD   M   sT   B#
	8rD   c                   @  sD  e Zd ZdZdZdd„ Zddd„Zdd	„ Zddd„Zd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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zdd6d7„Zd8d9„ ZeZd:d;„ Z d<d=„ Z!d>d?„ Z"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.ddXdY„Z/e/Z0dZd[„ Z1dd\d]„Z2dd^d_„Z3d`da„ Z4dbdc„ Z5ddde„ Z6dfdg„ Z7dhdi„ Z8djdk„ Z9dldm„ Z:dndo„ Z;dpdq„ Z<e<Z=drds„ Z>dtdu„ Z?dvdw„ Z@dxdy„ ZAdzd{„ ZBd|d}„ ZCd~d„ ZDd€d„ ZEd‚dƒ„ ZFeFZGeFZHd„d…„ ZId†d‡„ ZJdˆd‰„ ZKeK ZLZMdŠd‹„ ZNdŒd„ ZOdŽd„ ZPdd‘„ ZQd’d“„ ZRd”d•„ ZSd–d—„ ZTd˜d™„ ZUdšd›„ ZVdœd„ ZWdždŸ„ ZXd d¡„ ZYd¢d£„ ZZd¤d¥„ Z[d¦d§„ Z\d¨d©„ Z]dªd«„ Z^d¬d­„ Z_d®d¯„ Z`d°d±„ Zad²d³„ ZbebZcd´dµ„ Zdd¶d·„ Zed¸d¹„ Zfdºd»„ Zgd¼d½„ Zhd¾d¿„ ZidÀdÁ„ ZjdÂdÃ„ ZkdÄdÅ„ ZldÆdÇ„ ZmdÈdÉ„ ZndÊdË„ ZodÌdÍ„ ZpdÎdÏ„ ZqdÐdÑ„ ZrdÒdÓ„ ZsdÔdÕ„ ZtdÖd×„ ZudØdÙ„ ZvdÚdÛ„ ZwdÜdÝ„ ZxdÞdß„ Zydàdá„ Zzdâdã„ Z{dädå„ Z|dædç„ Z}dèdé„ Z~dêdë„ Zdìdí„ Z€dîdï„ Zdð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 (	  ÚMathMLPresentationPrinterz‚Prints an expression to the Presentation MathML markup language.

    References: https://www.w3.org/TR/MathML2/chapter3.html
    Z_mathml_presentationc              1     s¼   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!d"d#d$d%d&d'd(d"d#d)d*d+d,œ0}‡ fd-d.„}|j jD ]}|j}||krz||   S qz|j jd/kr¬|ƒ S |j j}| ¡ S )0rE   Úmnz&#x2192;ú&dd;rì   z&int;z&#x2211;rT   rU   rV   rW   r`   ra   rb   rc   rd   re   rf   ú=z&#x2260;z&#x2265;z&#x2264;ú>ú<ú&#x3A6;z&#x3B6;z&#x3B7;z&#x39A;ú&#x3B3;z&#x393;z&#x3D5;z&#x3BB;z&#x3BD;z&#x3A9;r   ÚCÚWz&#x398;ÚTrueÚFalseÚNonez	S&#x2032;z	C&#x2032;Úlambda)0rm   ZLimitrl   rR   rq   rs   rt   rT   rU   rV   rW   ru   rv   rw   rx   ry   rz   r|   r{   r~   r   r€   r   r‚   rƒ   ZlerchphiÚzetaZdirichlet_etaZ
elliptic_kZ
lowergammaZ
uppergammaÚgammaZtotientZreduced_totientZprimenuZ
primeomegaZfresnelsZfresnelcZLambertWZ	HeavisideZBooleanTrueZBooleanFalseZNoneTypeZmathieusZmathieucZmathieusprimeZmathieucprimeÚLambdac                     sz   ˆ j d d ksˆ j d dkr dS ˆ j d dkr2dS ˆ j d dkrDdS ˆ j d dkrVd	S tˆ j d tƒslt‚n
ˆ j d S d S )
Nr   r;  ú&InvisibleTimes;rG   ú&#xD7;Údotr   Zldotz&#x2024;)r  Ú
isinstancer¼   Ú	TypeErrorr+   rí   r+   r,   Úmul_symbol_selectionX  s    ÿzBMathMLPresentationPrinter.mathml_tag.<locals>.mul_symbol_selectionr   r†   )r(   rŠ   r‹   rE  rŒ   r   r+   rí   r,   rŽ   #  st    Ð3z$MathMLPresentationPrinter.mathml_tagFc                 C  sJ   t |ƒ}||k s|s<||kr<| j d¡}| |  |¡¡ |S |  |¡S d S ©NÚmfenced)r
   r3   r—   r˜   r<   )r(   rê   ÚlevelÚstrictZprec_valÚbracr+   r+   r,   Úparenthesizep  s    z&MathMLPresentationPrinter.parenthesizec                   sd   ‡ fdd„}ˆ j  d¡}| ¡ rVˆ j  d¡}| ˆ j  d¡¡ | |¡ || |ƒ}n
|||ƒ}|S )Nc                   sŠ  ddl m} || ƒ\}}|tjk	rŠˆ j d¡}ˆ jd rTtt| ƒƒdk rT| 	dd¡ ˆ  
|¡}ˆ  
|¡}| |¡ | |¡ | |¡ |S |  ¡ \}}	|tjkrÄt|	ƒdkrÄ| ˆ  
|	d ¡¡ |S ˆ jd	krÜt |	¡ ¡ }	|dkr(ˆ  
|¡}
ˆ j d
¡}| ˆ j ˆ  | ¡¡¡ | |
¡ | |¡ |	D ]X}| ˆ  |td ¡¡ ||	d ks,ˆ j d
¡}| ˆ j ˆ  | ¡¡¡ | |¡ q,|S )Nr   r‘   Úmfracr   é   ÚbevelledrÔ   r”   r•   rë   r   r§   )rš   r’   r   r›   r3   r—   r  r   r¼   ÚsetAttributer<   r˜   rœ   r   r   rž   rŸ   r8   rŽ   rK  r   )r?   ré   r’   r¡   r¢   Úfracr¾   Zxdenr£   r¤   r    Úyr¥   rí   r+   r,   Úmultiply{  s>    










z6MathMLPresentationPrinter._print_Mul.<locals>.multiplyré   rë   ú-)r3   r—   r–   r˜   r8   )r(   r?   rR  ré   r    r+   rí   r,   r™   y  s    "

z$MathMLPresentationPrinter._print_MulNc                 C  s´   | j  d¡}| j||d}| |  |d ¡¡ |dd … D ]t}| ¡ rr| j  d¡}| | j  d¡¡ |  | ¡}n(| j  d¡}| | j  d¡¡ |  |¡}| |¡ | |¡ q:|S )Nré   r¦   r   r”   rë   rS  ú+)r3   r—   r¨   r˜   r<   r–   r8   )r(   r?   r   ré   r«   r¬   r    rQ  r+   r+   r,   r­   ¨  s    

z$MathMLPresentationPrinter._print_Addc              	   C  sÂ   | j  d¡}t|jƒD ]X}| j  d¡}t|jƒD ]2}| j  d¡}| |  |||f ¡¡ | |¡ q0| |¡ q| jd dkr‚|S | j  d¡}| jd dkr´| dd	¡ | d
d¡ | |¡ |S )NZmtableZmtrZmtdr   r$   rG  r   Úcloseú]Úopen)	r3   r—   rµ   r¶   r·   r˜   r<   r  rO  )r(   r¸   Útabler²   r    r¹   rQ  rJ  r+   r+   r,   rº   ¼  s     
z+MathMLPresentationPrinter._print_MatrixBasec                 C  s¶   |j dk r|j  }n|j }| j d¡}|s4| jd r@| dd¡ | |  |¡¡ | |  |j¡¡ |j dk r®| j d¡}| j d¡}| | j d¡¡ | |¡ | |¡ |S |S d S )	Nr   rL  r   rN  rÔ   ré   rë   rS  )	r½   r3   r—   r  rO  r˜   r<   r»   r8   )r(   rŠ   Úfoldedr½   r    ré   rë   r+   r+   r,   Ú_get_printed_RationalÎ  s     




z/MathMLPresentationPrinter._get_printed_Rationalc                 C  s(   |j dkr|  |j¡S |  || jd ¡S )Nr”   r   )r»   r<   r½   rZ  r  rÇ   r+   r+   r,   r¿   â  s    
z)MathMLPresentationPrinter._print_Rationalc           	      C  sÜ   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | j  d¡}|  |jd ¡}| j  d¡}| | j  |  |¡¡¡ |  |jd ¡}| |¡ | |¡ | |¡ | |¡ | |¡ | |¡ | |  |jd ¡¡ |S )	Nré   Úmunderrì   Úlimr”   rë   rÂ   r   )r3   r—   r˜   r8   r<   r«   rŽ   )	r(   rŠ   ré   r[  rì   r    rÃ   ZarrowrÄ   r+   r+   r,   rÅ   é  s"    





z&MathMLPresentationPrinter._print_Limitc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z&ImaginaryI;rÊ   rË   r+   r+   r,   rÈ   ÿ  s    z.MathMLPresentationPrinter._print_ImaginaryUnitc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   r5  rÊ   rË   r+   r+   r,   rÌ     s    z,MathMLPresentationPrinter._print_GoldenRatioc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z&ExponentialE;rÊ   rË   r+   r+   r,   rÍ   	  s    z%MathMLPresentationPrinter._print_Exp1c                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z&pi;rÊ   rË   r+   r+   r,   rÏ     s    z#MathMLPresentationPrinter._print_Pic                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   ú&#x221E;rÊ   rË   r+   r+   r,   rÑ     s    z)MathMLPresentationPrinter._print_Infinityc                 C  sL   | j  d¡}| j  d¡}| | j  d¡¡ |  |¡}| |¡ | |¡ |S )Nré   rë   rS  )r3   r—   r˜   r8   rÑ   )r(   rŠ   ré   rQ  r    r+   r+   r,   rØ     s    


z1MathMLPresentationPrinter._print_NegativeInfinityc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z&#x210F;rÊ   rË   r+   r+   r,   Ú_print_HBar!  s    z%MathMLPresentationPrinter._print_HBarc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   r6  rÊ   rË   r+   r+   r,   rÉ   &  s    z+MathMLPresentationPrinter._print_EulerGammac                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   ZTribonacciConstantrÊ   rË   r+   r+   r,   Ú_print_TribonacciConstant+  s    z3MathMLPresentationPrinter._print_TribonacciConstantc                 C  s8   | j  d¡}| |  |jd ¡¡ | | j  d¡¡ |S )Nr   r   ú&#x2020;©r3   r—   r˜   r<   r«   r8   ©r(   rŠ   r   r+   r+   r,   Ú_print_Dagger0  s    z'MathMLPresentationPrinter._print_Daggerc                 C  sd   | j  d¡}| |  |jd ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ |S )Nré   r   rë   z&#x2208;r”   ra  )r(   rŠ   ré   rë   r+   r+   r,   Ú_print_Contains6  s    
z)MathMLPresentationPrinter._print_Containsc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z&#x210B;rÊ   rË   r+   r+   r,   Ú_print_HilbertSpace?  s    z-MathMLPresentationPrinter._print_HilbertSpacec                 C  s8   | j  d¡}| | j  d¡¡ | |  |jd ¡¡ |S )Nr   z	&#x1D49E;r   ©r3   r—   r˜   r8   r<   r«   rb  r+   r+   r,   Ú_print_ComplexSpaceD  s    z-MathMLPresentationPrinter._print_ComplexSpacec                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z&#x2131;rÊ   rË   r+   r+   r,   Ú_print_FockSpaceJ  s    z*MathMLPresentationPrinter._print_FockSpacec           	      C  s¸  ddddœ}| j  d¡}t|jƒdkrntdd„ |jD ƒƒrn| j  d	¡}| | j  |t|jƒ ¡¡ | |¡ nÜt|jƒD ]Ð}| j  d	¡}| | j  |d
 ¡¡ t|ƒd
kr´| |¡ t|ƒdkrô| j  d¡}| |¡ | |  |d
 ¡¡ | |¡ t|ƒdkrx| j  d¡}| |¡ | |  |d
 ¡¡ | |  |d ¡¡ | |¡ qx| | j	|j
td dd¡ t|jƒD ]B}| j  d	¡}| | j  d¡¡ | |¡ | |  |d ¡¡ qp|S )Nz&#x222B;z&#x222C;z&#x222D;)r”   rÂ   rÙ   ré   rÙ   c                 s  s   | ]}t |ƒd kV  qdS )r”   N)r   )rô   r\  r+   r+   r,   Ú	<genexpr>T  s     z<MathMLPresentationPrinter._print_Integral.<locals>.<genexpr>rë   r”   rÂ   r   r  r   T©rI  r1  r   )r3   r—   r   rÛ   Úallr˜   r8   r  r<   rK  rÚ   r   )	r(   r?   Z
intsymbolsré   rë   r\  r   r  Údr+   r+   r,   râ   P  s>    "



ÿ
z)MathMLPresentationPrinter._print_Integralc                 C  s@  t |jƒ}| j d¡}|  |d d ¡}|  |d d ¡}| j d¡}| | j |  |¡¡¡ | j d¡}|  |d d ¡}| j d¡}	|	 | j d¡¡ | |¡ | |	¡ | |¡ | |¡ | |¡ | |¡ | j d¡}
|
 |¡ tt	|j
ƒƒdkr|
 |  |j
¡¡ n(| j d¡}| |  |j
¡¡ |
 |¡ |
S )	NZ
munderoverr   r”   rÂ   rë   ré   r2  rG  )rà   rÛ   r3   r—   r<   r˜   r8   rŽ   r   r¼   rÚ   )r(   rŠ   rÛ   ZsubsuprÜ   rÝ   ZsummandÚlowÚvarÚequalré   Zfencer+   r+   r,   rã   v  s0    








z$MathMLPresentationPrinter._print_Sumr   c           	        s0  ‡ fdd„}dd„ ‰t |jƒ\}}}ˆ|ƒ}‡fdd„|D ƒ}‡fdd„|D ƒ}ˆ j d¡}| ˆ j |¡¡ t|ƒd	kr²t|ƒd	krŒ|}n$ˆ j d
¡}| |¡ | ||ƒ¡ ndt|ƒd	kräˆ j d¡}| |¡ | ||ƒ¡ n2ˆ j d¡}| |¡ | ||ƒ¡ | ||ƒ¡ |dkr,| dd¡ |S )Nc                   s°   t | ƒdkr†ˆ j d¡}t| ƒD ]`\}}|dkrXˆ j d¡}| ˆ j d¡¡ | |¡ ˆ j d¡}| ˆ j |¡¡ | |¡ q |S ˆ j d¡}| ˆ j | d ¡¡ |S d S )Nr”   ré   r   rë   rä   rì   ræ   rç   rí   r+   r,   rî   –  s    
z5MathMLPresentationPrinter._print_Symbol.<locals>.joinc                 S  s   | t krt  | ¡S | S d S r2   rï   rñ   r+   r+   r,   r‹   ¨  s    
z:MathMLPresentationPrinter._print_Symbol.<locals>.translatec                   s   g | ]}ˆ |ƒ‘qS r+   r+   ró   rö   r+   r,   r÷   °  s     z;MathMLPresentationPrinter._print_Symbol.<locals>.<listcomp>c                   s   g | ]}ˆ |ƒ‘qS r+   r+   rø   rö   r+   r,   r÷   ±  s     rì   r   rÿ   r   r  ÚboldÚmathvariant)r   rú   r3   r—   r˜   r8   r   rO  )	r(   rû   Ústylerî   rú   rü   rý   rþ   r    r+   r  r,   r  •  s2    



z'MathMLPresentationPrinter._print_Symbolc                 C  s   | j || jd dS )Nr   )rr  )r  r  )r(   rû   r+   r+   r,   r*  Ë  s    ÿz-MathMLPresentationPrinter._print_MatrixSymbolc                 C  s2   | j  d¡}| dd¡ | |  |jd ¡¡ |S )NZmencloseÚnotationÚtopr   ©r3   r—   rO  r˜   r<   r«   )r(   r?   Úencr+   r+   r,   Ú_print_conjugateÑ  s    z*MathMLPresentationPrinter._print_conjugatec                 C  sN   | j  d¡}| |  |td ¡¡ | j  d¡}| | j  |¡¡ | |¡ |S )Nré   ZFuncrë   )r3   r—   r˜   rK  r   r8   )r(   Úopr?   Úrowrë   r+   r+   r,   Ú_print_operator_after×  s    
z/MathMLPresentationPrinter._print_operator_afterc                 C  s   |   d|jd ¡S )Nú!r   ©rz  r«   ©r(   r?   r+   r+   r,   Ú_print_factorialß  s    z*MathMLPresentationPrinter._print_factorialc                 C  s   |   d|jd ¡S )Nz!!r   r|  r}  r+   r+   r,   Ú_print_factorial2â  s    z+MathMLPresentationPrinter._print_factorial2c                 C  s^   | j  d¡}| j  d¡}| dd¡ | |  |jd ¡¡ | |  |jd ¡¡ | |¡ |S )NrG  rL  ZlinethicknessÚ0r   r”   ru  )r(   r?   rJ  rP  r+   r+   r,   Ú_print_binomialå  s    
z)MathMLPresentationPrinter._print_binomialc                 C  sd  |j jrÐt|j jƒdkrÐ|j jdkrÐ| jd rÐ|j jdkrX| j d¡}| |  	|j
¡¡ |j jdkr–| j d¡}| |  	|j
¡¡ | |  	|j j¡¡ |j jdkrÌ| j d¡}| |  	d¡¡ | |¡ |S |S |j jrž|j jdkrž|j jr\| j d¡}| |  	d¡¡ | j d¡}| |  |j
td	 ¡¡ | |  |j  | jd
 ¡¡ | |¡ |S | j d¡}| |  |j
td	 ¡¡ | |  |j | jd
 ¡¡ |S |j jr*| j d¡}| |  	d¡¡ |j dkrä| |  	|j
¡¡ nB| j d¡}| |  |j
td	 ¡¡ | |  	|j  ¡¡ | |¡ |S | j d¡}| |  |j
td	 ¡¡ | |  	|j ¡¡ |S )Nr”   r   rÂ   ZmsqrtZmrootr§   rL  r   rn   r   )r  r  rL   r½   r»   r  r3   r—   r˜   r<   r  Zis_negativerK  r   rZ  )r(   rŠ   r    rP  rt  r+   r+   r,   r	  î  s^    $ÿ

ÿ
ÿ

z$MathMLPresentationPrinter._print_Powc                 C  s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r2   r
  rË   r+   r+   r,   r  $  s    z'MathMLPresentationPrinter._print_Numberc                 C  sL   | j  d¡}| dd¡ | dd¡ | |  |j¡¡ | |  |j¡¡ |S )NrG  rU  õ   âŸ©rW  õ   âŸ¨)r3   r—   rO  r˜   r<   rK   rJ   )r(   r²   rJ  r+   r+   r,   Ú_print_AccumulationBounds)  s    z3MathMLPresentationPrinter._print_AccumulationBoundsc                 C  s   t |jƒrd}n
|  |¡}| j d¡}d}t|jƒD ]š\}}||7 }|dkr’| j d¡}| j d¡}| | j |¡¡ | |¡ | |  	|¡¡ n| j d¡}| | j |¡¡ | |¡ |  	|¡}	| |	¡ q4| j d¡}
|dkr,| j d¡}| j d¡}| | j |¡¡ | |¡ | |  	|¡¡ n| j d¡}| | j |¡¡ |
 |¡ | j d¡}| j d¡}| |
¡ | |¡ | |¡ | |  	|j¡¡ |S )Nz&#x2202;ré   r   rÂ   r   rë   rL  )
r	   r?   rŽ   r3   r—   r  r  r˜   r8   r<   )r(   rŠ   rl  r¸   Zdimrû   Únumr    ZxxrQ  Zmnumré   rP  r+   r+   r,   r  1  sF    










z+MathMLPresentationPrinter._print_Derivativec                 C  sœ   | j  d¡}| j  d¡}|  |¡dkrD| jd rD| | j  d¡¡ n| | j  |  |¡¡¡ | j  d¡}|jD ]}| |  |¡¡ qn| |¡ | |¡ |S )Nré   rì   r}   r   rg   rG  )r3   r—   rŽ   r  r˜   r8   r«   r<   )r(   rŠ   ré   r    rQ  r¬   r+   r+   r,   r  a  s    


z)MathMLPresentationPrinter._print_Functionc                 C  sh  t |jƒ}t|j|dd}| jd }| j d¡}d|kr| d¡\}}|d dkr`|dd … }| j d	¡}| | j 	|¡¡ | |¡ | j d
¡}	|	 | j 	|¡¡ | |	¡ | j d¡}
| j d	¡}| | j 	d¡¡ |
 |¡ | j d	¡}| | j 	|¡¡ |
 |¡ | |
¡ |S |dkr.|  
d ¡S |dkrB|  d ¡S | j d	¡}| | j 	|¡¡ |S d S )NT)Zstrip_zerosr    ré   rŠ   r   rT  r”   r0  rë   r   Ú10z+infz-inf)r   r  r  r  r  r3   r—   Úsplitr˜   r8   rÑ   rØ   )r(   r?   ZdpsZstr_realÚ	separatorré   Zmantr  r0  rë   r   r+   r+   r,   r  o  s<    











z&MathMLPresentationPrinter._print_Floatc                 C  s   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | j  d¡}| |  |jd ¡¡ | |¡ |S )Nré   rÿ   rì   ZLir   rG  r”   rf  )r(   r?   ré   r¸   rì   rJ  r+   r+   r,   Ú_print_polylog–  s    


z(MathMLPresentationPrinter._print_polylogc                 C  sp   | j  d¡}| j  d¡}| | j  |  |¡¡¡ | |¡ | j  d¡}|jD ]}| |  |¡¡ qL| |¡ |S )Nré   rì   rG  ©r3   r—   r˜   r8   rŽ   r«   r<   )r(   rŠ   ré   rì   rJ  r¬   r+   r+   r,   r  ¤  s    


z&MathMLPresentationPrinter._print_Basicc                 C  sB   | j  d¡}| j  d¡}|jD ]}| |  |¡¡ q| |¡ |S )Nré   rG  r"  )r(   rŠ   ré   r    r¬   r+   r+   r,   Ú_print_Tuple¯  s    

z&MathMLPresentationPrinter._print_Tuplec                 C  sÂ   | j  d¡}| j  d¡}|j|jkrP| dd¡ | dd¡ | |  |j¡¡ nd|jrd| dd¡ n| dd¡ |jr„| dd	¡ n| dd
¡ | |  |j¡¡ | |  |j¡¡ | |¡ |S )Nré   rG  rU  Ú}rW  Ú{ú)rV  ú(r   )	r3   r—   ÚstartÚendrO  r˜   r<   Z
right_openZ	left_open)r(   r²   ré   rJ  r+   r+   r,   Ú_print_Interval·  s     
z)MathMLPresentationPrinter._print_Intervalc                 C  sT   | j  d¡}| j  d¡}| dd¡ | dd¡ | |  |jd ¡¡ | |¡ |S )Nré   rG  rU  ú|rW  r   ru  )r(   r?   r  ré   r    r+   r+   r,   Ú
_print_AbsÏ  s    
z$MathMLPresentationPrinter._print_Absc                 C  sj   | j  d¡}| j  d¡}| dd¡ | | j  |¡¡ | |¡ | j  d¡}| |  |¡¡ | |¡ |S )Nré   rì   rq  ZfrakturrG  )r3   r—   rO  r˜   r8   r<   )r(   r³   r?   ré   rì   rJ  r+   r+   r,   Ú_print_re_imÚ  s    

z&MathMLPresentationPrinter._print_re_imc                 C  s   |   d|jd ¡S )NÚRr   ©r•  r«   ©r(   r?   r  r+   r+   r,   Ú	_print_reå  s    z#MathMLPresentationPrinter._print_rec                 C  s   |   d|jd ¡S )NÚIr   r—  r˜  r+   r+   r,   Ú	_print_imè  s    z#MathMLPresentationPrinter._print_imc                 C  sZ   | j  d¡}| j  d¡}| | j  |  |¡¡¡ | |¡ |jD ]}| |  |¡¡ q@|S )Nré   rì   rŠ  )r(   rŠ   ré   rì   r¬   r+   r+   r,   r  ë  s    

z(MathMLPresentationPrinter._print_AssocOpc                 C  sz   | j  d¡}| |  |jd |¡¡ |jdd … D ]B}| j  d¡}| | j  |¡¡ |  ||¡}| |¡ | |¡ q2|S )Nré   r   r”   rë   )r3   r—   r˜   rK  r«   r8   )r(   r?   ÚsymbolÚprecré   r¬   r    rQ  r+   r+   r,   Ú_print_SetOpô  s    
z&MathMLPresentationPrinter._print_SetOpc                 C  s   t d }|  |d|¡S )Nr„   z&#x222A;©r   rž  ©r(   r?   r  r+   r+   r,   Ú_print_Unionÿ  s    z&MathMLPresentationPrinter._print_Unionc                 C  s   t d }|  |d|¡S )Nr…   z&#x2229;rŸ  r   r+   r+   r,   Ú_print_Intersection  s    z-MathMLPresentationPrinter._print_Intersectionc                 C  s   t d }|  |d|¡S )NZ
Complementz&#x2216;rŸ  r   r+   r+   r,   r%    s    z+MathMLPresentationPrinter._print_Complementc                 C  s   t d }|  |d|¡S )NZSymmetricDifferenceú&#x2206;rŸ  r   r+   r+   r,   Ú_print_SymmetricDifference  s    z4MathMLPresentationPrinter._print_SymmetricDifferencec                 C  s   t d }|  |d|¡S )NZ
ProductSetz&#x00d7;rŸ  r   r+   r+   r,   r&    s    z+MathMLPresentationPrinter._print_ProductSetc                 C  s   |   |j¡S r2   )Ú
_print_setr«   )r(   rò   r+   r+   r,   r#    s    z*MathMLPresentationPrinter._print_FiniteSetc                 C  sN   t |td}| j d¡}| dd¡ | dd¡ |D ]}| |  |¡¡ q4|S )N©ÚkeyrG  rU  rŒ  rW  r  )Úsortedr   r3   r—   rO  r˜   r<   )r(   rò   rè   rJ  rê   r+   r+   r,   r¥    s    z$MathMLPresentationPrinter._print_setc                 C  sÜ   | j  d¡}|d jrL|d jsL| j  d¡}| |  |d ¡¡ | |¡ n| |  |d ¡¡ |dd … D ]j}| j  d¡}| | j  |¡¡ |jr¸|js¸| j  d¡}| |  |¡¡ n
|  |¡}| |¡ | |¡ ql|S )Nré   r   rG  r”   rë   )r3   r—   Ú
is_BooleanZis_Notr˜   r<   r8   )r(   r«   rœ  ré   rJ  r¬   r    rQ  r+   r+   r,   Ú_print_LogOp!  s     

z&MathMLPresentationPrinter._print_LogOpc                 C  s°  ddl m} ||jkr"|  |j¡S t||ƒr:| ¡  ¡ }n
d|fg}| j d¡}|D ]T\}}t	|j
 ¡ ƒ}|jdd„ d t|ƒD ]"\}\}	}
|
dkrØ|rÆ| j d¡}| | j d	¡¡ | |¡ | |  |	¡¡ q„|
d
kr| j d¡}| | j d¡¡ | |¡ | |  |	¡¡ q„|rJ| j d¡}| | j d	¡¡ | |¡ | j d¡}| |  |
¡¡ | |¡ | j d¡}| | j d¡¡ | |¡ | |  |	¡¡ q„qT|S )Nr   )ÚVectorré   c                 S  s   | d   ¡ S )Nr   )Ú__str__)r    r+   r+   r,   Ú<lambda>C  ó    zAMathMLPresentationPrinter._print_BasisDependent.<locals>.<lambda>r¦  r”   rë   rT  r§   rS  rG  r@  )Zsympy.vectorr«  Zzeror<   rC  Zseparaterè   r3   r—   rà   Ú
componentsÚsortr°   r˜   r8   )r(   r?   r«  rè   ré   ÚsystemZvectZ
inneritemsr²   ÚkÚvrë   Zmbracr+   r+   r,   Ú_print_BasisDependent5  sD    








z/MathMLPresentationPrinter._print_BasisDependentc                 C  s   t |jtd}|  |d¡S )Nr¦  z&#x2227;©r¨  r«   r   rª  ©r(   r?   r«   r+   r+   r,   Ú
_print_And_  s    z$MathMLPresentationPrinter._print_Andc                 C  s   t |jtd}|  |d¡S )Nr¦  z&#x2228;rµ  r¶  r+   r+   r,   Ú	_print_Orc  s    z#MathMLPresentationPrinter._print_Orc                 C  s   t |jtd}|  |d¡S )Nr¦  z&#x22BB;rµ  r¶  r+   r+   r,   r.  g  s    z$MathMLPresentationPrinter._print_Xorc                 C  s   |   |jd¡S )Nz&#x21D2;)rª  r«   r}  r+   r+   r,   r,  k  s    z(MathMLPresentationPrinter._print_Impliesc                 C  s   t |jtd}|  |d¡S )Nr¦  z&#x21D4;rµ  r¶  r+   r+   r,   Ú_print_Equivalentn  s    z+MathMLPresentationPrinter._print_Equivalentc                 C  s‚   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ |jd jrd| j  d¡}| |  |jd ¡¡ n|  |jd ¡}| |¡ |S )Nré   rë   z&#xAC;r   rG  )r3   r—   r˜   r8   r«   r©  r<   )r(   rŠ   ré   rë   r    r+   r+   r,   r-  r  s    

z$MathMLPresentationPrinter._print_Notc                 C  s(   | j  d¡}| | j  |  |¡¡¡ |S ©Nrì   ©r3   r—   r˜   r8   rŽ   ©r(   rŠ   rì   r+   r+   r,   Ú_print_bool  s    z%MathMLPresentationPrinter._print_boolc                 C  s(   | j  d¡}| | j  |  |¡¡¡ |S rº  r»  r¼  r+   r+   r,   Ú_print_NoneType‡  s    z)MathMLPresentationPrinter._print_NoneTypec                 C  s.  d}| j  d¡}| dd¡ | dd¡ |jjr`|jjr`|jjrP|ddd	|f}qÜ|d	dd|f}n||jjr‚||d |j |d f}nZ|jjr¦t|ƒ}t	|ƒt	|ƒ|f}n6t
|ƒd
krÔt|ƒ}t	|ƒt	|ƒ||d f}nt|ƒ}|D ]H}||kr| j  d¡}| | j  |¡¡ | |¡ qà| |  |¡¡ qà|S )Nu   â€¦rG  rU  rŒ  rW  r  r§   r   r”   é   rì   )r3   r—   rO  r  Úis_infiniteÚstopÚstepZis_positiveÚiterÚnextr   Útupler˜   r8   r<   )r(   rò   ÚdotsrJ  ZprintsetÚitÚelrì   r+   r+   r,   Ú_print_RangeŒ  s0    
z&MathMLPresentationPrinter._print_Rangec                 C  s€   t |jtd}| j d¡}| j d¡}| | j t|jƒ 	¡ ¡¡ | |¡ | j d¡}|D ]}| |  
|¡¡ q\| |¡ |S )Nr¦  ré   rë   rG  )r¨  r«   r   r3   r—   r˜   r8   r¼   Úfuncr‰   r<   )r(   r?   r«   ré   rë   rJ  rœ  r+   r+   r,   Ú_hprint_variadic_function¬  s    

z3MathMLPresentationPrinter._hprint_variadic_functionc                 C  s6   | j  d¡}| |  d ¡¡ | |  |jd ¡¡ |S )Nr   r   )r3   r—   r˜   rÍ   r<   r«   )r(   r?   r   r+   r+   r,   Ú
_print_expº  s    z$MathMLPresentationPrinter._print_expc                 C  sb   | j  d¡}| |  |j¡¡ | j  d¡}| | j  |  |¡¡¡ | |¡ | |  |j¡¡ |S )Nré   rë   )r3   r—   r˜   r<   r  r8   rŽ   r  ©r(   rŠ   ré   r    r+   r+   r,   r  À  s    
z+MathMLPresentationPrinter._print_Relationalc                 C  s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r2   r
  r  r+   r+   r,   r   É  s    z$MathMLPresentationPrinter._print_intc                 C  sŠ   | j  d¡}|j\}}| j  d¡}| dd¡ | | j  |j| ¡¡ | |¡ | j  d¡}| dd¡ | | j  |j¡¡ | |¡ |S )Nrÿ   rì   rq  rp  )r3   r—   Ú_idrO  r˜   r8   Z_variable_namesÚ_name)r(   rŠ   rÿ   Úindexr±  rì   r+   r+   r,   Ú_print_BaseScalarÎ  s    


z+MathMLPresentationPrinter._print_BaseScalarc                 C  sÈ   | j  d¡}|j\}}| j  d¡}| j  d¡}| dd¡ | | j  |j| ¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ | |¡ | j  d¡}| dd¡ | | j  |j¡¡ | |¡ |S )Nrÿ   Úmoverrì   rq  rp  rë   ú^)r3   r—   rÎ  rO  r˜   r8   Z_vector_namesrÏ  )r(   rŠ   rÿ   rÐ  r±  rÒ  rì   rë   r+   r+   r,   Ú_print_BaseVectorÛ  s     




z+MathMLPresentationPrinter._print_BaseVectorc                 C  sl   | j  d¡}| j  d¡}| dd¡ | | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ |S )NrÒ  rì   rq  rp  r€  rë   rÓ  ©r3   r—   rO  r˜   r8   )r(   rŠ   rÒ  rì   rë   r+   r+   r,   Ú_print_VectorZeroí  s    

z+MathMLPresentationPrinter._print_VectorZeroc                 C  sp   | j  d¡}|j}|j}| |  |td ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |td ¡¡ |S )Nré   r   rë   rA  ©r3   r—   Z_expr1Z_expr2r˜   rK  r   r8   ©r(   r?   ré   Zvec1Zvec2rë   r+   r+   r,   Ú_print_Crossø  s    
z&MathMLPresentationPrinter._print_Crossc                 C  sx   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nré   rë   ú&#x2207;rA  r   ©r3   r—   r˜   r8   rK  Z_exprr   ©r(   r?   ré   rë   r+   r+   r,   Ú_print_Curl  s    

z%MathMLPresentationPrinter._print_Curlc                 C  sx   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nré   rë   rÚ  r   r   rÛ  rÜ  r+   r+   r,   Ú_print_Divergence  s    

z+MathMLPresentationPrinter._print_Divergencec                 C  sp   | j  d¡}|j}|j}| |  |td ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |td ¡¡ |S )Nré   r   rë   r   r×  rØ  r+   r+   r,   Ú
_print_Dot  s    
z$MathMLPresentationPrinter._print_Dotc                 C  sP   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nré   rë   rÚ  r   rÛ  rÜ  r+   r+   r,   Ú_print_Gradient$  s    
z)MathMLPresentationPrinter._print_Gradientc                 C  sP   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nré   rë   r£  r   rÛ  rÜ  r+   r+   r,   Ú_print_Laplacian,  s    
z*MathMLPresentationPrinter._print_Laplacianc                 C  s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nrì   rq  Únormalz&#x2124;rÕ  rË   r+   r+   r,   Ú_print_Integers4  s    z)MathMLPresentationPrinter._print_Integersc                 C  s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nrì   rq  râ  z&#x2102;rÕ  rË   r+   r+   r,   Ú_print_Complexes:  s    z*MathMLPresentationPrinter._print_Complexesc                 C  s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nrì   rq  râ  z&#x211D;rÕ  rË   r+   r+   r,   Ú_print_Reals@  s    z&MathMLPresentationPrinter._print_Realsc                 C  s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nrì   rq  râ  ú&#x2115;rÕ  rË   r+   r+   r,   Ú_print_NaturalsF  s    z)MathMLPresentationPrinter._print_Naturalsc                 C  sV   | j  d¡}| j  d¡}| dd¡ | | j  d¡¡ | |¡ | |  tj¡¡ |S )Nrÿ   rì   rq  râ  ræ  )r3   r—   rO  r˜   r8   r<   r   ZZero)r(   rŠ   rù   r    r+   r+   r,   Ú_print_Naturals0L  s    
z*MathMLPresentationPrinter._print_Naturals0c                 C  s|   |j d |j d  }|j d }| j d¡}| j d¡}| dd¡ | dd	¡ | |  |¡¡ | |¡ | |  |¡¡ |S )
Nr   r”   rÂ   r   rG  rU  r‚  rW  rƒ  )r«   r3   r—   rO  r˜   r<   )r(   r?   ÚshiftrI   rõ   rJ  r+   r+   r,   Ú_print_SingularityFunctionU  s    

z4MathMLPresentationPrinter._print_SingularityFunctionc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   ÚNaNrÊ   rË   r+   r+   r,   rÒ   a  s    z$MathMLPresentationPrinter._print_NaNc                 C  s°   | j  d¡}| j  d¡}| | j  |¡¡ | |¡ | |  |jd ¡¡ t|jƒdkr\|S | j  d¡}| j  d¡}|jdd … D ]}| |  |¡¡ q‚| |¡ | |¡ |S )Nrÿ   rì   r   r”   ré   rG  )r3   r—   r˜   r8   r<   r«   r   )r(   rŠ   rú   rù   rì   ré   rQ  r¬   r+   r+   r,   Ú_print_number_functionf  s    


z0MathMLPresentationPrinter._print_number_functionc                 C  s   |   |d¡S )NÚB©rì  rÇ   r+   r+   r,   Ú_print_bernoulliy  s    z*MathMLPresentationPrinter._print_bernoullic                 C  s   |   |d¡S )Nr7  rî  rÇ   r+   r+   r,   Ú_print_catalan~  s    z(MathMLPresentationPrinter._print_catalanc                 C  s   |   |d¡S )NÚErî  rÇ   r+   r+   r,   Ú_print_euler  s    z&MathMLPresentationPrinter._print_eulerc                 C  s   |   |d¡S )NÚFrî  rÇ   r+   r+   r,   Ú_print_fibonacci„  s    z*MathMLPresentationPrinter._print_fibonaccic                 C  s   |   |d¡S )NÚLrî  rÇ   r+   r+   r,   Ú_print_lucas‡  s    z&MathMLPresentationPrinter._print_lucasc                 C  s   |   |d¡S )Nz&#x03B3;rî  rÇ   r+   r+   r,   Ú_print_stieltjesŠ  s    z*MathMLPresentationPrinter._print_stieltjesc                 C  s   |   |d¡S )NÚTrî  rÇ   r+   r+   r,   Ú_print_tribonacci  s    z+MathMLPresentationPrinter._print_tribonaccic                 C  s`   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ |S )NrÒ  rë   r]  ú~rÊ   )r(   rŠ   r    rë   r+   r+   r,   Ú_print_ComplexInfinity  s    

z0MathMLPresentationPrinter._print_ComplexInfinityc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrë   z&#x2205;rÊ   rË   r+   r+   r,   rÓ   š  s    z)MathMLPresentationPrinter._print_EmptySetc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrë   z	&#x1D54C;rÊ   rË   r+   r+   r,   Ú_print_UniversalSetŸ  s    z-MathMLPresentationPrinter._print_UniversalSetc                 C  sŒ   ddl m} |j}| j d¡}t||ƒsP| j d¡}| |  |¡¡ | |¡ n| |  |¡¡ | j d¡}| | j d¡¡ | |¡ |S )Nr   ©rr   r   rG  rë   r`  ©	Úsympy.matricesrr   r¬   r3   r—   rC  r˜   r<   r8   ©r(   r?   rr   Úmatrõ   rJ  rë   r+   r+   r,   Ú_print_Adjoint¤  s    

z(MathMLPresentationPrinter._print_Adjointc                 C  sŒ   ddl m} |j}| j d¡}t||ƒsP| j d¡}| |  |¡¡ | |¡ n| |  |¡¡ | j d¡}| | j d¡¡ | |¡ |S )Nr   rý  r   rG  rë   rø  rþ  r   r+   r+   r,   Ú_print_Transpose³  s    

z*MathMLPresentationPrinter._print_Transposec                 C  st   ddl m} |j}| j d¡}t||ƒsP| j d¡}| |  |¡¡ | |¡ n| |  |¡¡ | |  d¡¡ |S )Nr   rý  r   rG  r§   )rÿ  rr   r¬   r3   r—   rC  r˜   r<   )r(   r?   rr   r  rõ   rJ  r+   r+   r,   Ú_print_InverseÂ  s    
z(MathMLPresentationPrinter._print_Inversec                 C  s&  ddl m} | j d¡}|j}t|d tƒrJ|d  ¡ t|dd … ƒ }nt|ƒ}t||ƒr´| 	¡ r´|d dkr~|dd … }n|d  |d< | j d¡}| 
| j d¡¡ | 
|¡ |d d… D ]D}| 
|  |t|ƒd¡¡ | j d¡}| 
| j d	¡¡ | 
|¡ qÀ| 
|  |d t|ƒd¡¡ |S )
Nr   )ÚMatMulré   r”   r§   rë   rS  Fr@  )Z!sympy.matrices.expressions.matmulr  r3   r—   r«   rC  r   rŸ   rà   r–   r˜   r8   rK  r
   )r(   r?   r  r    r«   rë   r¬   r+   r+   r,   Ú_print_MatMulÏ  s0    
ÿÿz'MathMLPresentationPrinter._print_MatMulc                 C  s|   ddl m} |j|j }}| j d¡}t||ƒsX| j d¡}| |  |¡¡ | |¡ n| |  |¡¡ | |  |¡¡ |S )Nr   rý  r   rG  )	rÿ  rr   r  r  r3   r—   rC  r˜   r<   )r(   r?   rr   r  r  rõ   rJ  r+   r+   r,   Ú_print_MatPowì  s    
z'MathMLPresentationPrinter._print_MatPowc                 C  s„   | j  d¡}|j}|d d… D ]D}| |  |t|ƒd¡¡ | j  d¡}| | j  d¡¡ | |¡ q| |  |d t|ƒd¡¡ |S )Nré   r§   Frë   z&#x2218;)r3   r—   r«   r˜   rK  r
   r8   )r(   r?   r    r«   r¬   rë   r+   r+   r,   Ú_print_HadamardProductù  s    ÿÿz0MathMLPresentationPrinter._print_HadamardProductc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nr0  z&#x1D7D8rÊ   ©r(   ÚZr    r+   r+   r,   Ú_print_ZeroMatrix  s    z+MathMLPresentationPrinter._print_ZeroMatrixc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nr0  z&#x1D7D9rÊ   r	  r+   r+   r,   Ú_print_OneMatrix  s    z*MathMLPresentationPrinter._print_OneMatrixc                 C  s"   | j  d¡}| | j  d¡¡ |S )Nrì   z	&#x1D540;rÊ   )r(   rš  r    r+   r+   r,   Ú_print_Identity  s    z)MathMLPresentationPrinter._print_Identityc                 C  sT   | j  d¡}| j  d¡}| dd¡ | dd¡ | |  |jd ¡¡ | |¡ |S )Nré   rG  rU  u   âŒ‹rW  u   âŒŠr   ru  rÍ  r+   r+   r,   Ú_print_floor  s    
z&MathMLPresentationPrinter._print_floorc                 C  sT   | j  d¡}| j  d¡}| dd¡ | dd¡ | |  |jd ¡¡ | |¡ |S )Nré   rG  rU  u   âŒ‰rW  u   âŒˆr   ru  rÍ  r+   r+   r,   Ú_print_ceiling  s    
z(MathMLPresentationPrinter._print_ceilingc                 C  sž   | j  d¡}| j  d¡}|jd }t|ƒdkr>|  |d ¡}n
|  |¡}| |¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ |S )NrG  ré   r   r”   rë   z&#x21A6;)r3   r—   r«   r   r<   r˜   r8   )r(   rŠ   r    ré   Úsymbolsrë   r+   r+   r,   r(  '  s    




z'MathMLPresentationPrinter._print_Lambdac                 C  s*   | j  d¡}|D ]}| |  |¡¡ q|S rF  r  )r(   rŠ   r    r²   r+   r+   r,   Ú_print_tuple7  s    z&MathMLPresentationPrinter._print_tuplec                 C  s   |   |j¡S r2   )r<   ÚlabelrÇ   r+   r+   r,   Ú_print_IndexedBase=  s    z,MathMLPresentationPrinter._print_IndexedBasec                 C  s\   | j  d¡}| |  |j¡¡ t|jƒdkrF| |  |jd ¡¡ |S | |  |j¡¡ |S )Nrÿ   r”   r   )r3   r—   r˜   r<   r  r   ÚindicesrË   r+   r+   r,   Ú_print_Indexed@  s    z(MathMLPresentationPrinter._print_Indexedc                 C  sv   | j  d¡}| | j|jtd dd¡ | j  d¡}| dd¡ | dd¡ |jD ]}| |  |¡¡ qR| |¡ |S )	Nrÿ   ZAtomTrj  rG  rU  r$   rW  )	r3   r—   r˜   rK  Úparentr   rO  r  r<   )r(   rŠ   r    rJ  r²   r+   r+   r,   Ú_print_MatrixElementI  s    

z.MathMLPresentationPrinter._print_MatrixElementc                 C  sv   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| dd¡ |jD ]}| |  |¡¡ qR| |¡ |S )Nré   rì   z	&#x1d5a5;rG  Ú
separatorsr“  ©r3   r—   r˜   r8   rO  r«   r<   ©r(   rŠ   r    rì   rQ  r²   r+   r+   r,   Ú_print_elliptic_fT  s    


z+MathMLPresentationPrinter._print_elliptic_fc                 C  sv   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| dd¡ |jD ]}| |  |¡¡ qR| |¡ |S )Nré   rì   z	&#x1d5a4;rG  r  r“  r  r  r+   r+   r,   Ú_print_elliptic_e`  s    


z+MathMLPresentationPrinter._print_elliptic_ec                 C  s’   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}t|jƒdkr\| dd¡ n| dd¡ |jD ]}| |  |¡¡ qn| |¡ |S )	Nré   rì   z	&#x1d6f1;rG  rÂ   r  r“  z;|)r3   r—   r˜   r8   r   r«   rO  r<   r  r+   r+   r,   Ú_print_elliptic_pil  s    


z,MathMLPresentationPrinter._print_elliptic_pic                 C  sJ   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |j¡¡ |S )Nré   rì   ZEirf  )r(   rŠ   r    rì   r+   r+   r,   Ú	_print_Ei{  s    
z#MathMLPresentationPrinter._print_Eic                 C  s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   rÿ   rë   rñ  r   r”   rf  ©r(   rŠ   r    rQ  rë   r+   r+   r,   Ú_print_expintƒ  s    

z'MathMLPresentationPrinter._print_expintc                 C  s˜   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |  |jdd… ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   r  rë   ÚPr   r”   rÙ   rf  r  r+   r+   r,   Ú_print_jacobiŽ  s    

z'MathMLPresentationPrinter._print_jacobic                 C  s˜   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |  |jdd… ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   r  rë   r7  r   r”   rÂ   rf  r  r+   r+   r,   Ú_print_gegenbauerš  s    

z+MathMLPresentationPrinter._print_gegenbauerc                 C  s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   rÿ   rë   rø  r   r”   rf  r  r+   r+   r,   Ú_print_chebyshevt¦  s    

z+MathMLPresentationPrinter._print_chebyshevtc                 C  s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   rÿ   rë   ÚUr   r”   rf  r  r+   r+   r,   Ú_print_chebyshevu±  s    

z+MathMLPresentationPrinter._print_chebyshevuc                 C  s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   rÿ   rë   r!  r   r”   rf  r  r+   r+   r,   Ú_print_legendre¼  s    

z)MathMLPresentationPrinter._print_legendrec                 C  s˜   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |  |jdd… ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   r  rë   r!  r   r”   rÂ   rf  r  r+   r+   r,   Ú_print_assoc_legendreÇ  s    

z/MathMLPresentationPrinter._print_assoc_legendrec                 C  s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   rÿ   rë   rõ  r   r”   rf  r  r+   r+   r,   Ú_print_laguerreÓ  s    

z)MathMLPresentationPrinter._print_laguerrec                 C  s˜   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |  |jdd… ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   r  rë   rõ  r   r”   rÂ   rf  r  r+   r+   r,   Ú_print_assoc_laguerreÞ  s    

z/MathMLPresentationPrinter._print_assoc_laguerrec                 C  s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nré   rÿ   rë   ÚHr   r”   rf  r  r+   r+   r,   Ú_print_hermiteê  s    

z(MathMLPresentationPrinter._print_hermite)F)N)N)r   )N)N)N)‹r.   r/   r0   rB   r)  rŽ   rK  r™   r­   rº   rZ  r¿   rÅ   rÈ   rÌ   rÍ   rÏ   rÑ   rØ   r^  rÉ   r_  rc  rd  re  rg  rh  râ   rã   r  r*  r+  rw  rz  r~  r  r  r	  r  r„  r  r  r  r‰  r  r‹  r’  r”  Z_print_Determinantr•  r™  r›  r  rž  r¡  r¢  r%  r¤  r&  r#  r¥  Z_print_frozensetrª  r´  r·  r¸  r.  r,  r¹  r-  r½  rÕ   r×   r¾  rÉ  rË  Z
_print_MinZ
_print_MaxrÌ  r  r   rÑ  rÔ  rÖ  rÙ  rÝ  rÞ  rß  rà  rá  rã  rä  rå  rç  rè  rê  rÒ   rì  rï  Z_print_bellrð  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  r  r   r"  r#  r$  r&  r'  r(  r)  r*  r,  r+   r+   r+   r,   r/    s  M	/		&6	60'			* 		
			r/  Úcontentc                 K  s(   |dkrt |ƒ | ¡S t|ƒ | ¡S dS )zŠReturns the MathML representation of expr. If printer is presentation
    then prints Presentation MathML else prints content MathML.
    ÚpresentationN)r/  rA   rD   )r?   Úprinterr9   r+   r+   r,   Úmathmlö  s    r0  c                 K  s<   |dkrt |ƒ}nt|ƒ}| t| ƒ¡}| ¡ }t|ƒ dS )a  
    Prints a pretty representation of the MathML code for expr. If printer is
    presentation then prints Presentation MathML else prints content MathML.

    Examples
    ========

    >>> ##
    >>> from sympy import print_mathml
    >>> from sympy.abc import x
    >>> print_mathml(x+1) #doctest: +NORMALIZE_WHITESPACE
    <apply>
        <plus/>
        <ci>x</ci>
        <cn>1</cn>
    </apply>
    >>> print_mathml(x+1, printer='presentation')
    <mrow>
        <mi>x</mi>
        <mo>+</mo>
        <mn>1</mn>
    </mrow>

    r.  N)r/  rD   r<   r   ZtoprettyxmlÚprint)r?   r/  r9   rò   ÚxmlZ
pretty_xmlr+   r+   r,   Úprint_mathml  s    
r3  N)r-  )r-  )$rB   Ú
__future__r   Útypingr   Zsympy.core.mulr   Zsympy.core.singletonr   Zsympy.core.sortingr   Zsympy.core.sympifyr   Zsympy.printing.conventionsr   r	   Zsympy.printing.precedencer
   r   r   Z&sympy.printing.pretty.pretty_symbologyr   Zsympy.printing.printerr   r   Zmpmath.libmpr   r   r   r  r   rD   r/  r0  r3  ZMathMLPrinterr+   r+   r+   r,   Ú<module>   s@   8   R           e

$