o
    ‰­RhZ+ ã                   @  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                   @  sX   e Zd ZU dZddddddddddddi d	dd
œZded< ddd„Zdd„ Zdd„ ZdS )ÚMathMLPrinterBasez^Contains common code required for MathMLContentPrinter and
    MathMLPresentationPrinter.
    Nzutf-8FÚabbreviatedú[ÚplainTú&#xB7;)ÚorderÚencodingÚfold_frac_powersÚfold_func_bracketsÚfold_short_fracÚinv_trig_styleÚln_notationÚlong_frac_ratioÚ	mat_delimÚmat_symbol_styleÚ
mul_symbolÚroot_notationÚsymbol_namesÚmul_symbol_mathml_numbersÚdisable_split_super_subz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 d S )Nz{}{}{})ÚdataÚwriteÚformat)ÚselfÚwriterÚindentÚ	addindentÚnewl© r3   úW/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/sympy/printing/mathml.pyÚwritexml7   s   ÿz4MathMLPrinterBase.__init__.<locals>.RawText.writexmlN)r*   r*   r*   )Ú__name__Ú
__module__Ú__qualname__r5   r3   r3   r3   r4   ÚRawText6   s    r9   c                   s   ˆ ƒ }| |_ ˆj|_|S ©N)r+   ÚdomÚownerDocument)r+   Úr©r9   r.   r3   r4   ÚcreateRawTextNode;   s   z5MathMLPrinterBase.__init__.<locals>.createRawTextNode)r   Ú__init__Úxml.dom.minidomr(   r)   r;   ÚcreateTextNode)r.   Úsettingsr(   r)   r?   r3   r>   r4   r@   ,   s   zMathMLPrinterBase.__init__c                 C  s,   t  | |¡}| ¡ }| dd¡}| ¡ }|S )z2
        Prints the expression as MathML.
        ÚasciiÚxmlcharrefreplace)r   Ú_printÚtoxmlÚencodeÚdecode)r.   ÚexprÚmathMLÚunistrÚxmlbstrÚresr3   r3   r4   ÚdoprintC   s
   zMathMLPrinterBase.doprintc                 C  s   | j d r
|g g fS t|ƒS )Nr&   )Ú	_settingsr   )r.   Únamer3   r3   r4   Ú_split_super_subM   s   

z"MathMLPrinterBase._split_super_subr:   )	r6   r7   r8   Ú__doc__r'   Ú__annotations__r@   rO   rR   r3   r3   r3   r4   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
    Ú_mathml_contentc                 C  s€  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“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/d0“d1d2“d3d4“¥i d5d6“d7d8“d9d:“d;d8“d<d=“d>d?“d@dA“dBdC“dDdE“dFdG“dHdI“dJdK“dLdM“dNdO“dPdQ“dRdS“dTdU“¥dVdWdXœ¥}|j jD ]}|j}||v r·||   S q¨|j j}| ¡ S )Yú)Returns the MathML tag for an expression.ÚAddÚplusr   ÚtimesÚ
DerivativeÚdiffÚNumberÚcnÚintÚPowÚpowerÚMaxÚmaxÚMinÚminÚAbsÚabsÚAndÚandÚOrÚorÚXorÚxorÚNotÚnotÚImpliesÚimpliesÚSymbolÚciÚMatrixSymbolÚRandomSymbolÚIntegralÚSumÚsumÚsinÚcosÚtanÚcotÚcscÚsecÚsinhÚcoshÚtanhÚcothÚcschÚsechÚasinÚarcsinÚasinhÚarcsinhÚacosÚarccosÚacoshÚarccoshÚatanÚarctanÚatanhÚarctanhÚatan2ÚacotÚarccotÚacothÚarccothÚasecÚarcsecÚasechÚarcsechÚacscÚarccscÚacschÚarccschÚlogÚlnÚEqualityÚeqÚ
UnequalityÚneqÚGreaterThanÚgeqÚLessThanÚleqÚStrictGreaterThanÚgtÚStrictLessThanÚltÚunionÚ	intersect)ÚUnionÚIntersection©Ú	__class__Ú__mro__r6   Úlower)r.   ÚeÚ	translateÚclsÚnr3   r3   r4   Ú
mathml_tag[   sâ   ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ë8ÿzMathMLContentPrinter.mathml_tagc           	      C  s<  |  ¡ r| j d¡}| | j d¡¡ | |  | ¡¡ |S ddlm} ||ƒ\}}|tjurP| j d¡}| | j d¡¡ | |  	|¡¡ | |  	|¡¡ |S | 
¡ \}}|tju rht|ƒdkrh|  	|d ¡S | jdkrtt |¡ ¡ }| j d¡}| | j d¡¡ |dkr| |  	|¡¡ |D ]
}| |  	|¡¡ q‘|S )	NÚapplyÚminusr   ©ÚfractionÚdivideé   ÚoldrZ   )Úcould_extract_minus_signr;   ÚcreateElementÚappendChildÚ
_print_MulÚsympy.simplifyr¼   r   ÚOnerF   Úas_coeff_mulÚlenr   r   Ú
_from_argsÚas_ordered_factors)	r.   rJ   Úxr¼   ÚnumerÚdenomÚcoeffÚtermsÚtermr3   r3   r4   rÃ      s2   

zMathMLContentPrinter._print_MulNc                 C  s
  | j ||d}|  |d ¡}g }|dd … D ]I}| ¡ rG| j d¡}| | j d¡¡ | |¡ | |  | ¡¡ |}||d krF| |¡ q| |¡ |  |¡}||d kr_| |  |¡¡ qt|ƒdkrh|S | j d¡}| | j d¡¡ |rƒ| | d¡¡ |sy|S )N©r   r   r¾   r¹   rº   éÿÿÿÿrY   )	Ú_as_ordered_termsrF   rÀ   r;   rÁ   rÂ   ÚappendrÇ   Úpop)r.   rJ   r   ÚargsÚlastProcessedÚ	plusNodesÚargrÊ   r3   r3   r4   Ú
_print_AddÀ   s4   

€

€ÿzMathMLContentPrinter._print_Addc                 C  s®   |j d jdkrtdƒ‚| j d¡}t|j ƒD ]=\}\}}|t|j ƒd kr9|dkr9| 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.Ú	piecewiser¾   Ú	otherwiseÚpiece)	rÕ   ÚcondÚ
ValueErrorr;   rÁ   Ú	enumeraterÇ   rÂ   rF   )r.   rJ   ÚrootÚir´   ÚcrÜ   r3   r3   r4   Ú_print_PiecewiseÜ   s   z%MathMLContentPrinter._print_Piecewisec              	   C  s^   | j  d¡}t|jƒD ]!}| j  d¡}t|jƒD ]}| |  |||f ¡¡ q| |¡ q|S )NÚmatrixÚ	matrixrow)r;   rÁ   ÚrangeÚrowsÚcolsrÂ   rF   )r.   ÚmrÊ   rá   Úx_rÚjr3   r3   r4   Ú_print_MatrixBaseñ   s   z&MathMLContentPrinter._print_MatrixBasec                 C  s°   |j dkr| j d¡}| | j t|jƒ¡¡ |S | j d¡}| | j d¡¡ | j d¡}| | j t|jƒ¡¡ | j d¡}| | j t|j ƒ¡¡ | |¡ | |¡ |S )Nr¾   r^   r¹   r½   )Úqr;   rÁ   rÂ   rB   ÚstrÚp)r.   r´   rÊ   ÚxnumÚxdenomr3   r3   r4   Ú_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   )r;   rÁ   rÂ   r¸   rF   rÕ   )r.   r´   rÊ   Úx_1Úx_2r3   r3   r4   Ú_print_Limit  s   

z!MathMLContentPrinter._print_Limitc                 C  ó   | j  d¡S )NÚ
imaginaryi©r;   rÁ   ©r.   r´   r3   r3   r4   Ú_print_ImaginaryUnit  ó   z)MathMLContentPrinter._print_ImaginaryUnitc                 C  rù   )NÚ
eulergammarû   rü   r3   r3   r4   Ú_print_EulerGamma  rþ   z&MathMLContentPrinter._print_EulerGammac                 C  ó"   | j  d¡}| | j  d¡¡ |S )zwWe use unicode #x3c6 for Greek letter phi as defined here
        https://www.w3.org/2003/entities/2007doc/isogrk1.htmlr^   u   Ï†©r;   rÁ   rÂ   rB   ©r.   r´   rÊ   r3   r3   r4   Ú_print_GoldenRatio   s   z'MathMLContentPrinter._print_GoldenRatioc                 C  rù   )NÚexponentialerû   rü   r3   r3   r4   Ú_print_Exp1'  rþ   z MathMLContentPrinter._print_Exp1c                 C  rù   )NÚpirû   rü   r3   r3   r4   Ú	_print_Pi*  rþ   zMathMLContentPrinter._print_Pic                 C  rù   )NÚinfinityrû   rü   r3   r3   r4   Ú_print_Infinity-  rþ   z$MathMLContentPrinter._print_Infinityc                 C  rù   )NÚ
notanumberrû   rü   r3   r3   r4   Ú
_print_NaN0  rþ   zMathMLContentPrinter._print_NaNc                 C  rù   )NÚemptysetrû   rü   r3   r3   r4   Ú_print_EmptySet3  rþ   z$MathMLContentPrinter._print_EmptySetc                 C  rù   )NÚtruerû   rü   r3   r3   r4   Ú_print_BooleanTrue6  rþ   z'MathMLContentPrinter._print_BooleanTruec                 C  rù   )NÚfalserû   rü   r3   r3   r4   Ú_print_BooleanFalse9  rþ   z(MathMLContentPrinter._print_BooleanFalsec                 C  s4   | j  d¡}| | j  d¡¡ | | j  d¡¡ |S )Nr¹   rº   r	  )r;   rÁ   rÂ   r  r3   r3   r4   Ú_print_NegativeInfinity<  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¡¡ |S | ˆ| dd … ƒ¡ |S )	Nr¹   ró   r   é   rô   r¾   Úuplimitrõ   )r;   rÁ   rÂ   r¸   rF   rÇ   Úfunction)ÚlimitsrÊ   Ú	bvar_elemÚlow_elemÚup_elem©r´   Ú
lime_recurr.   r3   r4   r  C  s*   



ÿz8MathMLContentPrinter._print_Integral.<locals>.lime_recur)Úlistr  Úreverse)r.   r´   r  r3   r  r4   Ú_print_IntegralB  s   
z$MathMLContentPrinter._print_Integralc                 C  s
   |   |¡S r:   )r  rü   r3   r3   r4   Ú
_print_Sum_  s   
zMathMLContentPrinter._print_Sumc                   sH  ˆ j  ˆ  |¡¡}‡ fdd„}dd„ ‰ˆ  |j¡\}}}ˆ|ƒ}‡fdd„|D ƒ}‡fdd„|D ƒ}ˆ j  d¡}| ˆ j  |¡¡ |si|sP| ˆ j  |¡¡ |S ˆ j  d	¡}| |¡ | ||ƒ¡ | |¡ |S |s„ˆ j  d
¡}	|	 |¡ |	 ||ƒ¡ | |	¡ |S ˆ j  d¡}
|
 |¡ |
 ||ƒ¡ |
 ||ƒ¡ | |
¡ |S )Nc                   ó¬   t | ƒdkrCˆ j d¡}t| ƒD ]0\}}|dkr,ˆ j d¡}| ˆ j d¡¡ | |¡ ˆ j d¡}| ˆ j |¡¡ | |¡ q|S ˆ j d¡}| ˆ j | d ¡¡ |S )Nr¾   zmml:mrowr   zmml:moú úmml:mi©rÇ   r;   rÁ   rß   rÂ   rB   ©ÚitemsÚmrowrá   ÚitemÚmoÚmi©r.   r3   r4   Újoing  ó   
z0MathMLContentPrinter._print_Symbol.<locals>.joinc                 S  ó   | t v r	t  | ¡S | S r:   ©r   Úget©Úsr3   r3   r4   rµ   y  ó   
z5MathMLContentPrinter._print_Symbol.<locals>.translatec                   ó   g | ]}ˆ |ƒ‘qS r3   r3   ©Ú.0Úsup©rµ   r3   r4   Ú
<listcomp>  ó    z6MathMLContentPrinter._print_Symbol.<locals>.<listcomp>c                   r4  r3   r3   ©r6  Úsubr8  r3   r4   r9  ‚  r:  r#  zmml:msubzmml:msupzmml:msubsup)r;   rÁ   r¸   rR   rQ   rÂ   rB   )r.   Úsymrs   r,  rQ   ÚsupersÚsubsÚmnameÚmsubÚmsupÚmsubsupr3   ©r.   rµ   r4   Ú_print_Symbold  s<   ð

õ

û

z"MathMLContentPrinter._print_Symbolc                 C  sô   | j d rR|jjrR|jjdkrR| j d¡}| | j d¡¡ |jjdkrG| j d¡}| j d¡}| | j t	|jjƒ¡¡ | |¡ | |¡ | |  
|j¡¡ |S | j d¡}| j |  |¡¡}| |¡ | |  
|j¡¡ | |  
|j¡¡ |S )Nr#   r¾   r¹   rà   rõ   Údegreer^   )rP   ÚexpÚis_Rationalrï   r;   rÁ   rÂ   rí   rB   rî   rF   Úbaser¸   )r.   r´   rÊ   ÚxmldegÚxmlcnrö   r3   r3   r4   Ú
_print_PowŸ  s$   


zMathMLContentPrinter._print_Powc                 C  ó,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r:   ©r;   rÁ   r¸   rÂ   rB   rî   r  r3   r3   r4   Ú_print_Number¶  ó   z"MathMLContentPrinter._print_Numberc                 C  s:   | j  |  |¡¡}t|jt|jƒƒ}| | j  |¡¡ |S r:   )	r;   rÁ   r¸   Úmlib_to_strÚ_mpf_r   Ú_precrÂ   rB   )r.   r´   rÊ   Úrepr_er3   r3   r4   Ú_print_Float»  s   z!MathMLContentPrinter._print_Floatc                 C  s¸   | j  d¡}|  |¡}t|jƒrd}| | j  |¡¡ | j  d¡}t|jƒD ]%\}}| |  |¡¡ |dkrK| j  d¡}| |  t	|ƒ¡¡ | |¡ q&| |¡ | |  |j¡¡ |S )Nr¹   Úpartialdiffró   r¾   rF  )
r;   rÁ   r¸   r	   rJ   rÂ   ÚreversedÚvariable_countrF   r   )r.   r´   rÊ   Údiff_symbolrö   r=  rZ   rF  r3   r3   r4   Ú_print_DerivativeÁ  s    


€
z&MathMLContentPrinter._print_Derivativec                 C  sD   | j  d¡}| | j  |  |¡¡¡ |jD ]
}| |  |¡¡ q|S ©Nr¹   )r;   rÁ   rÂ   r¸   rÕ   rF   ©r.   r´   rÊ   rØ   r3   r3   r4   Ú_print_FunctionÔ  s
   
z$MathMLContentPrinter._print_Functionc                 C  s2   | j  |  |¡¡}|jD ]
}| |  |¡¡ q|S r:   )r;   rÁ   r¸   rÕ   rÂ   rF   r\  r3   r3   r4   Ú_print_BasicÛ  s   
z!MathMLContentPrinter._print_Basicc                 C  sH   | j  d¡}| j  |  |¡¡}| |¡ |jD ]
}| |  |¡¡ q|S r[  )r;   rÁ   r¸   rÂ   rÕ   rF   )r.   r´   rÊ   rö   rØ   r3   r3   r4   Ú_print_AssocOpá  s   

z#MathMLContentPrinter._print_AssocOpc                 C  sL   | j  d¡}| | j  |  |¡¡¡ | |  |j¡¡ | |  |j¡¡ |S r[  )r;   rÁ   rÂ   r¸   rF   ÚlhsÚrhsr  r3   r3   r4   Ú_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  )r;   rÁ   rÂ   rF   )r.   ÚseqÚdom_elementr(  r3   r3   r4   Ú_print_listð  s   z MathMLContentPrinter._print_listc                 C  rM  r:   rN  ©r.   rï   rd  r3   r3   r4   Ú
_print_intø  rP  zMathMLContentPrinter._print_intc                 C  s,   | j  d¡}|jD ]
}| |  |¡¡ q	|S )NÚset)r;   rÁ   rÕ   rÂ   rF   r\  r3   r3   r4   Ú_print_FiniteSet  s   
z%MathMLContentPrinter._print_FiniteSetc                 C  ó>   | j  d¡}| | j  d¡¡ |jD ]
}| |  |¡¡ q|S )Nr¹   Úsetdiff©r;   rÁ   rÂ   rÕ   rF   r\  r3   r3   r4   Ú_print_Complement  ó
   
z&MathMLContentPrinter._print_Complementc                 C  rj  )Nr¹   Úcartesianproductrl  r\  r3   r3   r4   Ú_print_ProductSet  rn  z&MathMLContentPrinter._print_ProductSetc                 C  sZ   | j  |  |¡¡}|jD ]}| j  d¡}| |  |¡¡ | |¡ q| |  |j¡¡ |S )Nró   )r;   rÁ   r¸   Ú	signaturerÂ   rF   rJ   )r.   r´   rÊ   rØ   rö   r3   r3   r4   Ú_print_Lambda  s   
z"MathMLContentPrinter._print_Lambdar:   )-r6   r7   r8   rS   Úprintmethodr¸   rÃ   rÙ   rã   rì   rò   rø   rý   r   r  r  r  r
  r  r  r  r  r  r  r   rE  Ú_print_MatrixSymbolÚ_print_RandomSymbolrL  rO  rU  rZ  r]  r^  r_  rb  re  rg  Ú_print_ImpliesÚ
_print_NotÚ
_print_Xorri  rm  rp  rr  r3   r3   r3   r4   rU   T   sV    B
#	8rU   c                   @  s°  e Zd ZdZ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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/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%ddHdI„Z&dJdK„ Z'e&Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,dTdU„ Z-dVdW„ Z.dXdY„ Z/dZd[„ Z0d\d]„ Z1d^d_„ Z2d`da„ Z3dbdc„ Z4ddde„ Z5dfdg„ Z6dhdi„ Z7ddjdk„Z8e8Z9dldm„ Z:ddndo„Z;ddpdq„Z<drds„ Z=dtdu„ Z>dvdw„ Z?dxdy„ Z@dzd{„ ZAd|d}„ ZBd~d„ ZCd€d„ ZDd‚dƒ„ ZEeEZFd„d…„ ZGd†d‡„ ZHdˆd‰„ ZIdŠd‹„ ZJdŒd„ ZKdŽd„ ZLdd‘„ ZMd’d“„ ZNd”d•„ ZOeOZPeOZQd–d—„ ZRd˜d™„ ZSdšd›„ ZTeT ZUZVdœ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³„ Zbd´dµ„ Zcd¶d·„ Zdd¸d¹„ Zedºd»„ Zfd¼d½„ Zgd¾d¿„ ZhdÀdÁ„ ZidÂdÃ„ ZjdÄdÅ„ ZkekZldÆ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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
    Ú_mathml_presentationc                   sL  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“i dd“d d“d!d"“d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d8“d:d;“d<d=“¥d>d?d@dAdBdCdDdEdFd@dAdGdHdIdJœ¥}‡ fdKdL„}|j jD ]}|j}||v r”||   S q…|j jdMkrž|ƒ S |j j}| ¡ S )NrW   r]   ÚmnÚLimitz&#x2192;r[   ú&dd;r_   rr   r*  rv   z&int;rw   z&#x2211;ry   rz   r{   r|   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r   rŽ   r   r   r’   r“   r‘   r    ú=r¢   z&#x2260;r¤   z&#x2265;r¦   z&#x2264;r¨   ú>rª   ú<Úlerchphiú&#x3A6;Úzetaz&#x3B6;Údirichlet_etaz&#x3B7;Ú
elliptic_kz&#x39A;Ú
lowergammaú&#x3B3;Ú
uppergammaz&#x393;ÚgammaÚtotientz&#x3D5;Úreduced_totientz&#x3BB;z&#x3BD;z&#x3A9;r   ÚCÚWz&#x398;ÚTrueÚFalseÚNonez	S&#x2032;z	C&#x2032;Úlambda)ÚprimenuÚ
primeomegaÚfresnelsÚfresnelcÚLambertWÚ	HeavisideÚBooleanTrueÚBooleanFalseÚNoneTypeÚmathieusÚmathieucÚmathieusprimeÚmathieucprimeÚLambdac                     st   ˆ j d d u sˆ j d dkrdS ˆ j d dkrdS ˆ j d dkr"dS ˆ j d dkr+d	S tˆ j d tƒs5t‚ˆ j d S )
Nr"   r  ú&InvisibleTimes;rZ   ú&#xD7;Údotr   Úldotz&#x2024;)rP   Ú
isinstancerî   Ú	TypeErrorr3   r+  r3   r4   Úmul_symbol_selection_  s   
zBMathMLPresentationPrinter.mathml_tag.<locals>.mul_symbol_selectionr   r°   )r.   r´   rµ   r¦  r¶   r·   r3   r+  r4   r¸   *  s¼   ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ð3ÿz$MathMLPresentationPrinter.mathml_tagc                 C  ó"   | j  d¡}| | j  d¡¡ |S )Nr)  ú(r  ©r.   r)  r3   r3   r4   Ú_l_parenw  ó   z"MathMLPresentationPrinter._l_parenc                 C  r§  )Nr)  ú)r  r©  r3   r3   r4   Ú_r_paren|  r«  z"MathMLPresentationPrinter._r_parenc                 C  r§  )Nr)  Ú{r  r©  r3   r3   r4   Ú_l_brace  r«  z"MathMLPresentationPrinter._l_bracec                 C  r§  )Nr)  Ú}r  r©  r3   r3   r4   Ú_r_brace†  r«  z"MathMLPresentationPrinter._r_bracec                 C  r§  )Nr)  ú,r  r©  r3   r3   r4   Ú_comma‹  r«  z MathMLPresentationPrinter._commac                 C  r§  )Nr)  ú|r  r©  r3   r3   r4   Ú_bar  r«  zMathMLPresentationPrinter._barc                 C  r§  )Nr)  ú;r  r©  r3   r3   r4   Ú
_semicolon•  r«  z$MathMLPresentationPrinter._semicolonc                 G  ó`   | j  d¡}| |  ¡ ¡ t|ƒD ]\}}|r| |  ¡ ¡ | |  |¡¡ q| |  ¡ ¡ |S ©Nr'  )r;   rÁ   rÂ   rª  rß   r³  rF   r­  ©r.   rÕ   r'  rá   rØ   r3   r3   r4   Ú_paren_comma_separatedš  ó   z0MathMLPresentationPrinter._paren_comma_separatedc                 G  r¸  r¹  )r;   rÁ   rÂ   rª  rß   rµ  rF   r­  rº  r3   r3   r4   Ú_paren_bar_separated¤  r¼  z.MathMLPresentationPrinter._paren_bar_separatedFc                 C  sb   t |ƒ}||k s|s,||kr,| j d¡}| |  ¡ ¡ | |  |¡¡ | |  ¡ ¡ |S |  |¡S r¹  )r
   r;   rÁ   rÂ   rª  rF   r­  )r.   r(  ÚlevelÚstrictÚprec_valr'  r3   r3   r4   Úparenthesize®  s   
z&MathMLPresentationPrinter.parenthesizec                   sf   ‡ fdd„}ˆ j  d¡}| ¡ r,ˆ j  d¡}| ˆ j  d¡¡ | |¡ || |ƒ}|S |||ƒ}|S )Nc                   s„  ddl m} || ƒ\}}|tjurEˆ j d¡}ˆ jd r*tt| ƒƒdk r*| 	dd¡ ˆ  
|¡}ˆ  
|¡}| |¡ | |¡ | |¡ |S |  ¡ \}}	|tju rbt|	ƒdkrb| ˆ  
|	d ¡¡ |S ˆ jd	krnt |	¡ ¡ }	|dkr“ˆ  
|¡}
ˆ j d
¡}| ˆ j ˆ  | ¡¡¡ | |
¡ | |¡ |	D ]*}| ˆ  |td ¡¡ ||	d ks¿ˆ j d
¡}| ˆ j ˆ  | ¡¡¡ | |¡ q•|S )Nr   r»   Úmfracr   é   Úbevelledr  r¾   r¿   r)  r   rÑ   )rÄ   r¼   r   rÅ   r;   rÁ   rP   rÇ   rî   ÚsetAttributerF   rÂ   rÆ   r   r   rÈ   rÉ   rB   r¸   rÁ  r   )rJ   r'  r¼   rË   rÌ   Úfracrð   ÚxdenrÍ   rÎ   rÊ   ÚyrÏ   r+  r3   r4   Úmultiplyº  s@   










€z6MathMLPresentationPrinter._print_Mul.<locals>.multiplyr'  r)  ú-)r;   rÁ   rÀ   rÂ   rB   )r.   rJ   rÉ  r'  rÊ   r3   r+  r4   rÃ   ¸  s   "

þz$MathMLPresentationPrinter._print_MulNc                 C  s´   | j  d¡}| j||d}| |  |d ¡¡ |dd … D ]:}| ¡ r9| j  d¡}| | j  d¡¡ |  | ¡}n| j  d¡}| | j  d¡¡ |  |¡}| |¡ | |¡ q|S )Nr'  rÐ   r   r¾   r)  rÊ  ú+)r;   rÁ   rÒ   rÂ   rF   rÀ   rB   )r.   rJ   r   r'  rÕ   rØ   rÊ   rÈ  r3   r3   r4   rÙ   ç  s   

z$MathMLPresentationPrinter._print_Addc              	   C  s  | j  d¡}t|jƒD ],}| j  d¡}t|jƒD ]}| j  d¡}| |  |||f ¡¡ | |¡ q| |¡ q| jd }|dkrC|S | j  d¡}| j  d¡}	|dkrf| | j  d¡¡ |	 | j  d¡¡ n| | j  d	¡¡ |	 | j  d
¡¡ | j  d¡}
|
 |¡ |
 |¡ |
 |	¡ |
S )NÚmtableÚmtrÚmtdr    r*   r)  r   ú]r¨  r¬  r'  )	r;   rÁ   ræ   rç   rè   rÂ   rF   rP   rB   )r.   ré   Útablerá   rÊ   rë   rÈ  r    ÚleftÚrightr'  r3   r3   r4   rì   û  s.   



z+MathMLPresentationPrinter._print_MatrixBasec                 C  s²   |j dk r
|j  }n|j }| j d¡}|s| jd r | dd¡ | |  |¡¡ | |  |j¡¡ |j dk rW| j d¡}| j d¡}| | j d¡¡ | |¡ | |¡ |S |S )	Nr   rÂ  r   rÄ  r  r'  r)  rÊ  )	rï   r;   rÁ   rP   rÅ  rÂ   rF   rí   rB   )r.   r´   Úfoldedrï   rÊ   r'  r)  r3   r3   r4   Ú_get_printed_Rational  s    




z/MathMLPresentationPrinter._get_printed_Rationalc                 C  s(   |j dkr|  |j¡S |  || jd ¡S )Nr¾   r   )rí   rF   rï   rÔ  rP   rü   r3   r3   r4   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   )r;   rÁ   rÂ   rB   rF   rÕ   r¸   )	r.   r´   r'  rÕ  r*  rÊ   rö   Úarrowr÷   r3   r3   r4   rø   0  s"   





z&MathMLPresentationPrinter._print_Limitc                 C  r  )Nr*  z&ImaginaryI;r  r  r3   r3   r4   rý   F  r«  z.MathMLPresentationPrinter._print_ImaginaryUnitc                 C  r  )Nr*  r‚  r  r  r3   r3   r4   r  K  r«  z,MathMLPresentationPrinter._print_GoldenRatioc                 C  r  )Nr*  z&ExponentialE;r  r  r3   r3   r4   r  P  r«  z%MathMLPresentationPrinter._print_Exp1c                 C  r  )Nr*  z&pi;r  r  r3   r3   r4   r  U  r«  z#MathMLPresentationPrinter._print_Pic                 C  r  )Nr*  ú&#x221E;r  r  r3   r3   r4   r
  Z  r«  z)MathMLPresentationPrinter._print_Infinityc                 C  sL   | j  d¡}| j  d¡}| | j  d¡¡ |  |¡}| |¡ | |¡ |S )Nr'  r)  rÊ  )r;   rÁ   rÂ   rB   r
  )r.   r´   r'  rÈ  rÊ   r3   r3   r4   r  _  s   


z1MathMLPresentationPrinter._print_NegativeInfinityc                 C  r  )Nr*  z&#x210F;r  r  r3   r3   r4   Ú_print_HBarh  r«  z%MathMLPresentationPrinter._print_HBarc                 C  r  )Nr*  r‡  r  r  r3   r3   r4   r   m  r«  z+MathMLPresentationPrinter._print_EulerGammac                 C  r  )Nr*  ÚTribonacciConstantr  r  r3   r3   r4   Ú_print_TribonacciConstantr  r«  z3MathMLPresentationPrinter._print_TribonacciConstantc                 C  s8   | j  d¡}| |  |jd ¡¡ | | j  d¡¡ |S )NrB  r   ú&#x2020;©r;   rÁ   rÂ   rF   rÕ   rB   ©r.   r´   rB  r3   r3   r4   Ú_print_Daggerw  s   z'MathMLPresentationPrinter._print_Daggerc                 C  sd   | j  d¡}| |  |jd ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ |S )Nr'  r   r)  z&#x2208;r¾   rÝ  )r.   r´   r'  r)  r3   r3   r4   Ú_print_Contains}  s   
z)MathMLPresentationPrinter._print_Containsc                 C  r  )Nr*  z&#x210B;r  r  r3   r3   r4   Ú_print_HilbertSpace†  r«  z-MathMLPresentationPrinter._print_HilbertSpacec                 C  s8   | j  d¡}| | j  d¡¡ | |  |jd ¡¡ |S )NrB  z	&#x1D49E;r   ©r;   rÁ   rÂ   rB   rF   rÕ   rÞ  r3   r3   r4   Ú_print_ComplexSpace‹  s   z-MathMLPresentationPrinter._print_ComplexSpacec                 C  r  )Nr*  z&#x2131;r  r  r3   r3   r4   Ú_print_FockSpace‘  r«  z*MathMLPresentationPrinter._print_FockSpacec           	      C  s¶  ddddœ}| j  d¡}t|jƒdkr7tdd„ |jD ƒƒr7| j  d	¡}| | j  |t|jƒ ¡¡ | |¡ nnt|jƒD ]h}| j  d	¡}| | j  |d
 ¡¡ t|ƒd
krZ| |¡ t|ƒdkrz| j  d¡}| |¡ | |  |d
 ¡¡ | |¡ t|ƒdkr¤| j  d¡}| |¡ | |  |d
 ¡¡ | |  |d ¡¡ | |¡ q<| | j	|j
td dd¡ t|jƒD ] }| j  d	¡}| | j  d¡¡ | |¡ | |  |d ¡¡ q¸|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Ç   )r6  rÖ  r3   r3   r4   Ú	<genexpr>›  s   € z<MathMLPresentationPrinter._print_Integral.<locals>.<genexpr>r)  r¾   rõ   rB  rC  r   T©r¿  r}  r   )r;   rÁ   rÇ   r  ÚallrÂ   rB   rW  rF   rÁ  r  r   )	r.   rJ   Ú
intsymbolsr'  r)  rÖ  rB  rC  Údr3   r3   r4   r  —  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¡}
|
 |¡ |
 |  |j	t
|ƒ¡¡ |
S )NÚ
munderoverr   r¾   rõ   r)  r'  r~  )r  r  r;   rÁ   rF   rÂ   rB   r¸   rÁ  r  r
   )r.   r´   r  Úsubsupr  r  ÚsummandÚlowÚvarÚequalr'  r3   r3   r4   r   ½  s(   







z$MathMLPresentationPrinter._print_Sumr   c           	        s0  ‡ fdd„}dd„ ‰ˆ   |j¡\}}}ˆ|ƒ}‡fdd„|D ƒ}‡fdd„|D ƒ}ˆ j d¡}| ˆ j |¡¡ t|ƒd	krZt|ƒd	krG|}nEˆ j d
¡}| |¡ | ||ƒ¡ n2t|ƒd	krsˆ j d¡}| |¡ | ||ƒ¡ nˆ j d¡}| |¡ | ||ƒ¡ | ||ƒ¡ |dkr–| dd¡ |S )Nc                   r!  )Nr¾   r'  r   r)  r"  r*  r$  r%  r+  r3   r4   r,  ×  r-  z5MathMLPresentationPrinter._print_Symbol.<locals>.joinc                 S  r.  r:   r/  r1  r3   r3   r4   rµ   é  r3  z:MathMLPresentationPrinter._print_Symbol.<locals>.translatec                   r4  r3   r3   r5  r8  r3   r4   r9  ñ  r:  z;MathMLPresentationPrinter._print_Symbol.<locals>.<listcomp>c                   r4  r3   r3   r;  r8  r3   r4   r9  ò  r:  r*  r   rA  rB  rC  ÚboldÚmathvariant)rR   rQ   r;   rÁ   rÂ   rB   rÇ   rÅ  )	r.   r=  Ústyler,  rQ   r>  r?  r@  rÊ   r3   rD  r4   rE  Ö  s2   


z'MathMLPresentationPrinter._print_Symbolc                 C  s   | j || jd dS )Nr!   )rò  )rE  rP   )r.   r=  r3   r3   r4   rt    s   ÿz-MathMLPresentationPrinter._print_MatrixSymbolc                 C  s2   | j  d¡}| dd¡ | |  |jd ¡¡ |S )NÚmencloseÚnotationÚtopr   )r;   rÁ   rÅ  rÂ   rF   rÕ   )r.   rJ   Úencr3   r3   r4   Ú_print_conjugate  s   z*MathMLPresentationPrinter._print_conjugatec                 C  sN   | j  d¡}| |  |td ¡¡ | j  d¡}| | j  |¡¡ | |¡ |S )Nr'  ÚFuncr)  )r;   rÁ   rÂ   rÁ  r   rB   )r.   ÚoprJ   Úrowr)  r3   r3   r4   Ú_print_operator_after  s   
z/MathMLPresentationPrinter._print_operator_afterc                 C  ó   |   d|jd ¡S )Nú!r   ©rû  rÕ   ©r.   rJ   r3   r3   r4   Ú_print_factorial   ó   z*MathMLPresentationPrinter._print_factorialc                 C  rü  )Nz!!r   rþ  rÿ  r3   r3   r4   Ú_print_factorial2#  r  z+MathMLPresentationPrinter._print_factorial2c                 C  sz   | j  d¡}| dd¡ | |  |jd ¡¡ | |  |jd ¡¡ | j  d¡}| |  ¡ ¡ | |¡ | |  ¡ ¡ |S )NrÂ  ÚlinethicknessÚ0r   r¾   r'  )r;   rÁ   rÅ  rÂ   rF   rÕ   rª  r­  )r.   rJ   rÆ  Úbracr3   r3   r4   Ú_print_binomial&  s   
z)MathMLPresentationPrinter._print_binomialc                 C  s^  |j jrht|j jƒdkrh|j jdkrh| jd rh|j jdkr,| j d¡}| |  	|j
¡¡ |j jdkrK| j d¡}| |  	|j
¡¡ | |  	|j j¡¡ |j jdkrf| 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
¡¡ |S | j d¡}| |  |j
td	 ¡¡ | |  	|j  ¡¡ | |¡ |S | j d¡}| |  |j
td	 ¡¡ | |  	|j ¡¡ |S )Nr¾   r#   rõ   ÚmsqrtÚmrootrÑ   rÂ  rB  r`   r   )rG  rH  rg   rï   rí   rP   r;   rÁ   rÂ   rF   rI  Úis_negativerÁ  r   rÔ  )r.   r´   rÊ   rÆ  rõ  r3   r3   r4   rL  1  s`   $ÿ
ÿ
ÿ

ü
z$MathMLPresentationPrinter._print_Powc                 C  rM  r:   rN  r  r3   r3   r4   rO  g  rP  z'MathMLPresentationPrinter._print_Numberc                 C  s’   | j  d¡}| | j  d¡¡ | j  d¡}| | j  d¡¡ | j  d¡}| |¡ | |  |j¡¡ | |  ¡ ¡ | |  |j¡¡ | |¡ |S )Nr)  õ   âŸ¨õ   âŸ©r'  )r;   rÁ   rÂ   rB   rF   re   r³  rc   )r.   rá   rÑ  rÒ  r  r3   r3   r4   Ú_print_AccumulationBoundsl  s   

z3MathMLPresentationPrinter._print_AccumulationBoundsc                 C  sž  t |jƒrd}n|  |¡}| j d¡}d}t|jƒD ]M\}}||7 }|dkrI| j d¡}| j d¡}| | j |¡¡ | |¡ | |  	|¡¡ n| j d¡}| | j |¡¡ | |¡ |  	|¡}	| |	¡ q| 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õ   rB  r)  rÂ  )
r	   rJ   r¸   r;   rÁ   rW  rX  rÂ   rB   rF   )r.   r´   ré  ré   Údimr=  ÚnumrÊ   ÚxxrÈ  Úmnumr'  rÆ  r3   r3   r4   rZ  y  sF   









z+MathMLPresentationPrinter._print_Derivativec                 C  s|   | j  d¡}|  |¡dkr| jd r| | j  d¡¡ n| | j  |  |¡¡¡ | j  d¡}| |¡ | | j|jŽ ¡ |S )Nr*  rž   r   rŸ   r'  )r;   rÁ   r¸   rP   rÂ   rB   r»  rÕ   )r.   r´   rÊ   r'  r3   r3   r4   r]  ©  s   
z)MathMLPresentationPrinter._print_Functionc                 C  s^  t |jƒ}t|j|dd}| jd }| j d¡}d|v 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rž|  d ¡S | j d	¡}| | j 	|¡¡ |S )NT)Ústrip_zerosr%   r'  r´   r   rË  r¾   r{  r)  rB  Ú10z+infz-inf)r   rS  rQ  rR  rP   r;   rÁ   ÚsplitrÂ   rB   r
  r  )r.   rJ   ÚdpsÚstr_realÚ	separatorr'  ÚmantrG  r{  r)  rB  r3   r3   r4   rU  ´  s<   








z&MathMLPresentationPrinter._print_Floatc                 C  s¬   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | j  d¡}| |  ¡ ¡ | |  |jd ¡¡ | |  ¡ ¡ | |¡ |S )Nr'  rA  r*  ÚLir   r¾   )r;   rÁ   rÂ   rB   rF   rÕ   rª  r­  )r.   rJ   r'  ré   r*  r  r3   r3   r4   Ú_print_polylogÛ  s   


z(MathMLPresentationPrinter._print_polylogc                 C  sP   | j  d¡}| j  d¡}| | j  |  |¡¡¡ | |¡ | | j|jŽ ¡ |S ©Nr'  r*  )r;   rÁ   rÂ   rB   r¸   r»  rÕ   )r.   r´   r'  r*  r3   r3   r4   r^  ë  s   
z&MathMLPresentationPrinter._print_Basicc                 C  s   | j |jŽ S r:   )r»  rÕ   rü   r3   r3   r4   Ú_print_Tupleó  rþ   z&MathMLPresentationPrinter._print_Tuplec                 C  sÆ   | j  d¡}|jr| | j  d¡¡ n	| | j  d¡¡ | j  d¡}|jr/| | j  d¡¡ n	| | j  d¡¡ | j  d¡}| |¡ | |  |j¡¡ | |  ¡ ¡ | |  |j	¡¡ | |¡ |S )Nr)  r¬  rÏ  r¨  r   r'  )
r;   rÁ   Ú
right_openrÂ   rB   Ú	left_openrF   Ústartr³  Úend)r.   rá   rÒ  rÑ  r'  r3   r3   r4   Ú_print_Intervalö  s   

z)MathMLPresentationPrinter._print_Intervalc                 C  sB   | j  d¡}| |  ¡ ¡ | |  |jd ¡¡ | |  ¡ ¡ |S )Nr'  r   )r;   rÁ   rÂ   rµ  rF   rÕ   )r.   rJ   rG  r'  r3   r3   r4   Ú
_print_Abs	  s
   z$MathMLPresentationPrinter._print_Absc                 C  sz   | j  d¡}| |  ¡ ¡ | |  |¡¡ | |  ¡ ¡ | j  d¡}| | j  |¡¡ | j  d¡}| |¡ | |¡ |S r  )r;   rÁ   rÂ   rª  rF   r­  rB   )r.   râ   rJ   r  r*  r'  r3   r3   r4   Ú_print_re_im  s   

z&MathMLPresentationPrinter._print_re_imc                 C  rü  )Nu   â„œr   ©r"  rÕ   ©r.   rJ   rG  r3   r3   r4   Ú	_print_re  r  z#MathMLPresentationPrinter._print_rec                 C  rü  )Nu   â„‘r   r#  r$  r3   r3   r4   Ú	_print_im!  r  z#MathMLPresentationPrinter._print_imc                 C  sZ   | j  d¡}| j  d¡}| | j  |  |¡¡¡ | |¡ |jD ]
}| |  |¡¡ q |S r  )r;   rÁ   rÂ   rB   r¸   rÕ   rF   )r.   r´   r'  r*  rØ   r3   r3   r4   r_  $  s   

z(MathMLPresentationPrinter._print_AssocOpc                 C  sz   | j  d¡}| |  |jd |¡¡ |jdd … D ]!}| j  d¡}| | j  |¡¡ |  ||¡}| |¡ | |¡ q|S ©Nr'  r   r¾   r)  )r;   rÁ   rÂ   rÁ  rÕ   rB   )r.   rJ   ÚsymbolÚprecr'  rØ   rÊ   rÈ  r3   r3   r4   Ú_print_SetOp-  s   
z&MathMLPresentationPrinter._print_SetOpc                 C  ó   t d }|  |d|¡S )Nr®   z&#x222A;©r   r*  ©r.   rJ   r)  r3   r3   r4   Ú_print_Union8  ó   z&MathMLPresentationPrinter._print_Unionc                 C  r+  )Nr¯   z&#x2229;r,  r-  r3   r3   r4   Ú_print_Intersection<  r/  z-MathMLPresentationPrinter._print_Intersectionc                 C  r+  )NÚ
Complementz&#x2216;r,  r-  r3   r3   r4   rm  @  r/  z+MathMLPresentationPrinter._print_Complementc                 C  r+  )NÚSymmetricDifferenceú&#x2206;r,  r-  r3   r3   r4   Ú_print_SymmetricDifferenceD  r/  z4MathMLPresentationPrinter._print_SymmetricDifferencec                 C  r+  )NÚ
ProductSetz&#x00d7;r,  r-  r3   r3   r4   rp  H  r/  z+MathMLPresentationPrinter._print_ProductSetc                 C  ó   |   |j¡S r:   )Ú
_print_setrÕ   )r.   r2  r3   r3   r4   ri  L  rþ   z*MathMLPresentationPrinter._print_FiniteSetc                 C  sl   t |td}| j d¡}| |  ¡ ¡ t|ƒD ]\}}|r$| |  ¡ ¡ | |  |¡¡ q| |  	¡ ¡ |S )N©Úkeyr'  )
Úsortedr   r;   rÁ   rÂ   r¯  rß   r³  rF   r±  )r.   r2  r&  r  rá   r(  r3   r3   r4   r7  O  s   z$MathMLPresentationPrinter._print_setc                 C  s  | j  d¡}|d jr4|d js4| j  d¡}| |  ¡ ¡ | |  |d ¡¡ | |  ¡ ¡ | |¡ n
| |  |d ¡¡ |dd … D ]C}| j  d¡}| | j  |¡¡ |jrx|jsx| j  d¡}| |  ¡ ¡ | |  |¡¡ | |  ¡ ¡ n|  |¡}| |¡ | |¡ qD|S r'  )	r;   rÁ   Ú
is_BooleanÚis_NotrÂ   rª  rF   r­  rB   )r.   rÕ   r(  r'  r  rØ   rÊ   rÈ  r3   r3   r4   Ú_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	|j
 ¡ ƒ}|jdd„ d t|ƒD ]\}\}	}
|
dkrj|ra| j d¡}| | j d	¡¡ | |¡ | |  |	¡¡ qA|
d
kr‹| j d¡}| | j d¡¡ | |¡ | |  |	¡¡ qA|r¡| j d¡}| | j d	¡¡ | |¡ | j d¡}| |  ¡ ¡ | |  |
¡¡ | |  ¡ ¡ | |¡ | j d¡}| | j d¡¡ | |¡ | |  |	¡¡ qAq*|S )Nr   )ÚVectorr'  c                 S  s   | d   ¡ S )Nr   )Ú__str__)rÊ   r3   r3   r4   Ú<lambda>‚  s    zAMathMLPresentationPrinter._print_BasisDependent.<locals>.<lambda>r8  r¾   r)  rË  rÑ   rÊ  r   )Úsympy.vectorr>  ÚzerorF   r¤  Úseparater&  r;   rÁ   r  Ú
componentsÚsortrß   rÂ   rB   rª  r­  )r.   rJ   r>  r&  r'  ÚsystemÚvectÚ
inneritemsrá   ÚkÚvr)  Úmbracr3   r3   r4   Ú_print_BasisDependentt  sJ   







çz/MathMLPresentationPrinter._print_BasisDependentc                 C  ó   t |jtd}|  |d¡S )Nr8  z&#x2227;©r:  rÕ   r   r=  ©r.   rJ   rÕ   r3   r3   r4   Ú
_print_And   ó   z$MathMLPresentationPrinter._print_Andc                 C  rM  )Nr8  z&#x2228;rN  rO  r3   r3   r4   Ú	_print_Or¤  rQ  z#MathMLPresentationPrinter._print_Orc                 C  rM  )Nr8  z&#x22BB;rN  rO  r3   r3   r4   rx  ¨  rQ  z$MathMLPresentationPrinter._print_Xorc                 C  s   |   |jd¡S )Nz&#x21D2;)r=  rÕ   rÿ  r3   r3   r4   rv  ¬  s   z(MathMLPresentationPrinter._print_Impliesc                 C  rM  )Nr8  z&#x21D4;rN  rO  r3   r3   r4   Ú_print_Equivalent¯  rQ  z+MathMLPresentationPrinter._print_Equivalentc                 C  sž   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ |jd jr@| j  d¡}| |  ¡ ¡ | |  |jd ¡¡ | |  ¡ ¡ n|  |jd ¡}| |¡ |S )Nr'  r)  z&#xAC;r   )	r;   rÁ   rÂ   rB   rÕ   r;  rª  rF   r­  )r.   r´   r'  r)  rÊ   r3   r3   r4   rw  ³  s   

z$MathMLPresentationPrinter._print_Notc                 C  ó(   | j  d¡}| | j  |  |¡¡¡ |S ©Nr*  ©r;   rÁ   rÂ   rB   r¸   ©r.   r´   r*  r3   r3   r4   Ú_print_boolÂ  ó   z%MathMLPresentationPrinter._print_boolc                 C  rT  rU  rV  rW  r3   r3   r4   Ú_print_NoneTypeÊ  rY  z)MathMLPresentationPrinter._print_NoneTypec           	      C  sJ  d}|j jr|jjr|jjr|ddd|f}nF|ddd|f}n>|j jr/||d |j |d f}n-|jjrAt|ƒ}t|ƒt|ƒ|f}nt|ƒdkrXt|ƒ}t|ƒt|ƒ||d f}nt|ƒ}| j	 
d¡}| |  ¡ ¡ t|ƒD ].\}}|rz| |  ¡ ¡ ||kr“| j	 
d¡}| | j	 |¡¡ | |¡ qm| |  |¡¡ qm| |  ¡ ¡ |S )Nu   â€¦rÑ   r   r¾   é   r'  r*  )r  Úis_infiniteÚstopÚstepÚis_positiveÚiterÚnextrÇ   Útupler;   rÁ   rÂ   r¯  rß   r³  rB   rF   r±  )	r.   r2  ÚdotsÚprintsetÚitr  rá   Úelr*  r3   r3   r4   Ú_print_RangeÏ  s4   z&MathMLPresentationPrinter._print_Rangec                 C  s`   t |jtd}| j d¡}| j d¡}| | j t|jƒ 	¡ ¡¡ | |¡ | | j
|Ž ¡ |S )Nr8  r'  r)  )r:  rÕ   r   r;   rÁ   rÂ   rB   rî   Úfuncr³   r»  )r.   rJ   rÕ   r'  r)  r3   r3   r4   Ú_hprint_variadic_functionî  s   
z3MathMLPresentationPrinter._hprint_variadic_functionc                 C  s6   | j  d¡}| |  d ¡¡ | |  |jd ¡¡ |S )NrB  r   )r;   rÁ   rÂ   r  rF   rÕ   )r.   rJ   rB  r3   r3   r4   Ú
_print_expù  s   z$MathMLPresentationPrinter._print_expc                 C  sb   | j  d¡}| |  |j¡¡ | j  d¡}| | j  |  |¡¡¡ | |¡ | |  |j¡¡ |S )Nr'  r)  )r;   rÁ   rÂ   rF   r`  rB   r¸   ra  )r.   r´   r'  rÊ   r3   r3   r4   rb  ÿ  s   
z+MathMLPresentationPrinter._print_Relationalc                 C  rM  r:   rN  rf  r3   r3   r4   rg    rP  z$MathMLPresentationPrinter._print_intc                 C  sŠ   | j  d¡}|j\}}| j  d¡}| dd¡ | | j  |j| ¡¡ | |¡ | j  d¡}| dd¡ | | j  |j¡¡ | |¡ |S )NrA  r*  rñ  rð  )r;   rÁ   Ú_idrÅ  rÂ   rB   Ú_variable_namesÚ_name)r.   r´   rA  ÚindexrF  r*  r3   r3   r4   Ú_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 )NrA  Úmoverr*  rñ  rð  r)  ú^)r;   rÁ   rk  rÅ  rÂ   rB   Ú_vector_namesrm  )r.   r´   rA  rn  rF  rp  r*  r)  r3   r3   r4   Ú_print_BaseVector  s    




z+MathMLPresentationPrinter._print_BaseVectorc                 C  sl   | j  d¡}| j  d¡}| dd¡ | | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ |S )Nrp  r*  rñ  rð  r  r)  rq  ©r;   rÁ   rÅ  rÂ   rB   )r.   r´   rp  r*  r)  r3   r3   r4   Ú_print_VectorZero,  s   

z+MathMLPresentationPrinter._print_VectorZeroc                 C  óp   | j  d¡}|j}|j}| |  |td ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |td ¡¡ |S )Nr'  r   r)  r¡  ©r;   rÁ   Ú_expr1Ú_expr2rÂ   rÁ  r   rB   ©r.   rJ   r'  Úvec1Úvec2r)  r3   r3   r4   Ú_print_Cross7  ó   
z&MathMLPresentationPrinter._print_Crossc                 C  óx   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nr'  r)  ú&#x2207;r¡  r   ©r;   rÁ   rÂ   rB   rÁ  Ú_exprr   ©r.   rJ   r'  r)  r3   r3   r4   Ú_print_CurlB  ó   

z%MathMLPresentationPrinter._print_Curlc                 C  r  )Nr'  r)  r€  r   r   r  rƒ  r3   r3   r4   Ú_print_DivergenceM  r…  z+MathMLPresentationPrinter._print_Divergencec                 C  rv  )Nr'  r   r)  r   rw  rz  r3   r3   r4   Ú
_print_DotX  r~  z$MathMLPresentationPrinter._print_Dotc                 C  óP   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nr'  r)  r€  r   r  rƒ  r3   r3   r4   Ú_print_Gradientc  ó   
z)MathMLPresentationPrinter._print_Gradientc                 C  rˆ  )Nr'  r)  r3  r   r  rƒ  r3   r3   r4   Ú_print_Laplaciank  rŠ  z*MathMLPresentationPrinter._print_Laplacianc                 C  ó.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nr*  rñ  Únormalz&#x2124;rt  r  r3   r3   r4   Ú_print_Integerss  ó   z)MathMLPresentationPrinter._print_Integersc                 C  rŒ  )Nr*  rñ  r  z&#x2102;rt  r  r3   r3   r4   Ú_print_Complexesy  r  z*MathMLPresentationPrinter._print_Complexesc                 C  rŒ  )Nr*  rñ  r  z&#x211D;rt  r  r3   r3   r4   Ú_print_Reals  r  z&MathMLPresentationPrinter._print_Realsc                 C  rŒ  )Nr*  rñ  r  ú&#x2115;rt  r  r3   r3   r4   Ú_print_Naturals…  r  z)MathMLPresentationPrinter._print_Naturalsc                 C  sV   | j  d¡}| j  d¡}| dd¡ | | j  d¡¡ | |¡ | |  tj¡¡ |S )NrA  r*  rñ  r  r’  )r;   rÁ   rÅ  rÂ   rB   rF   r   ÚZero)r.   r´   r<  rÊ   r3   r3   r4   Ú_print_Naturals0‹  s   
z*MathMLPresentationPrinter._print_Naturals0c                 C  s´   |j d |j d  }|j d }| j d¡}| | j d¡¡ | j d¡}| | j d¡¡ | j d¡}| |¡ | |  |¡¡ | |¡ | j d¡}| |¡ | |  |¡¡ |S )	Nr   r¾   rõ   r)  r
  r  r'  rB  )rÕ   r;   rÁ   rÂ   rB   rF   )r.   rJ   Úshiftra   rÑ  rÒ  r  r7  r3   r3   r4   Ú_print_SingularityFunction”  s   



z4MathMLPresentationPrinter._print_SingularityFunctionc                 C  r  )Nr*  ÚNaNr  r  r3   r3   r4   r  ¤  r«  z$MathMLPresentationPrinter._print_NaNc                 C  s   | j  d¡}| j  d¡}| | j  |¡¡ | |¡ | |  |jd ¡¡ t|jƒdkr.|S | j  d¡}| |¡ | | j|jdd … Ž ¡ |S )NrA  r*  r   r¾   r'  )r;   rÁ   rÂ   rB   rF   rÕ   rÇ   r»  )r.   r´   rQ   r<  r*  r'  r3   r3   r4   Ú_print_number_function©  s   

z0MathMLPresentationPrinter._print_number_functionc                 C  ó   |   |d¡S )NÚB©r™  rü   r3   r3   r4   Ú_print_bernoulli¸  rþ   z*MathMLPresentationPrinter._print_bernoullic                 C  rš  )NrŒ  rœ  rü   r3   r3   r4   Ú_print_catalan½  rþ   z(MathMLPresentationPrinter._print_catalanc                 C  rš  )NÚErœ  rü   r3   r3   r4   Ú_print_eulerÀ  rþ   z&MathMLPresentationPrinter._print_eulerc                 C  rš  )NÚFrœ  rü   r3   r3   r4   Ú_print_fibonacciÃ  rþ   z*MathMLPresentationPrinter._print_fibonaccic                 C  rš  )NÚLrœ  rü   r3   r3   r4   Ú_print_lucasÆ  rþ   z&MathMLPresentationPrinter._print_lucasc                 C  rš  )Nz&#x03B3;rœ  rü   r3   r3   r4   Ú_print_stieltjesÉ  rþ   z*MathMLPresentationPrinter._print_stieltjesc                 C  rš  )NÚTrœ  rü   r3   r3   r4   Ú_print_tribonacciÌ  rþ   z+MathMLPresentationPrinter._print_tribonaccic                 C  s`   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ |S )Nrp  r)  rØ  ú~r  )r.   r´   rÊ   r)  r3   r3   r4   Ú_print_ComplexInfinityÏ  s   

z0MathMLPresentationPrinter._print_ComplexInfinityc                 C  r  )Nr)  z&#x2205;r  r  r3   r3   r4   r  Ù  r«  z)MathMLPresentationPrinter._print_EmptySetc                 C  r  )Nr)  z	&#x1D54C;r  r  r3   r3   r4   Ú_print_UniversalSetÞ  r«  z-MathMLPresentationPrinter._print_UniversalSetc                 C  ó¨   ddl m} |j}| j d¡}t||ƒs6| j d¡}| |  ¡ ¡ | |  |¡¡ | |  	¡ ¡ | |¡ n| |  |¡¡ | j d¡}| | j 
d¡¡ | |¡ |S )Nr   ©rt   rB  r'  r)  rÜ  ©Úsympy.matricesrt   rØ   r;   rÁ   r¤  rÂ   rª  rF   r­  rB   ©r.   rJ   rt   Úmatr7  r  r)  r3   r3   r4   Ú_print_Adjointã  ó   

z(MathMLPresentationPrinter._print_Adjointc                 C  r«  )Nr   r¬  rB  r'  r)  r¦  r­  r¯  r3   r3   r4   Ú_print_Transposeô  r²  z*MathMLPresentationPrinter._print_Transposec                 C  s   ddl m} |j}| j d¡}t||ƒs6| j d¡}| |  ¡ ¡ | |  |¡¡ | |  	¡ ¡ | |¡ n| |  |¡¡ | |  d¡¡ |S )Nr   r¬  rB  r'  rÑ   )
r®  rt   rØ   r;   rÁ   r¤  rÂ   rª  rF   r­  )r.   rJ   rt   r°  r7  r  r3   r3   r4   Ú_print_Inverse  s   
z(MathMLPresentationPrinter._print_Inversec                 C  s&  ddl m} | j d¡}|j}t|d tƒr%|d  ¡ t|dd … ƒ }nt|ƒ}t||ƒrZ| 	¡ rZ|d dkr?|dd … }n|d  |d< | j d¡}| 
| j d¡¡ | 
|¡ |d d… D ]"}| 
|  |t|ƒd¡¡ | j d¡}| 
| j d	¡¡ | 
|¡ q`| 
|  |d t|ƒd¡¡ |S )
Nr   )ÚMatMulr'  r¾   rÑ   r)  rÊ  Fr   )Ú!sympy.matrices.expressions.matmulrµ  r;   rÁ   rÕ   r¤  r   rÉ   r  rÀ   rÂ   rB   rÁ  r
   )r.   rJ   rµ  rÊ   rÕ   r)  rØ   r3   r3   r4   Ú_print_MatMul  s0   
ÿÿz'MathMLPresentationPrinter._print_MatMulc                 C  s˜   ddl m} |j|j}}| j d¡}t||ƒs:| j d¡}| |  ¡ ¡ | |  	|¡¡ | |  
¡ ¡ | |¡ n| |  	|¡¡ | |  	|¡¡ |S )Nr   r¬  rB  r'  )r®  rt   rI  rG  r;   rÁ   r¤  rÂ   rª  rF   r­  )r.   rJ   rt   rI  rG  r7  r  r3   r3   r4   Ú_print_MatPow1  s   
z'MathMLPresentationPrinter._print_MatPowc                 C  s„   | j  d¡}|j}|d d… D ]"}| |  |t|ƒd¡¡ | j  d¡}| | j  d¡¡ | |¡ q| |  |d t|ƒd¡¡ |S )Nr'  rÑ   Fr)  z&#x2218;)r;   rÁ   rÕ   rÂ   rÁ  r
   rB   )r.   rJ   rÊ   rÕ   rØ   r)  r3   r3   r4   Ú_print_HadamardProduct@  s   ÿÿz0MathMLPresentationPrinter._print_HadamardProductc                 C  r  )Nr{  z&#x1D7D8r  ©r.   ÚZrÊ   r3   r3   r4   Ú_print_ZeroMatrixM  r«  z+MathMLPresentationPrinter._print_ZeroMatrixc                 C  r  )Nr{  z&#x1D7D9r  rº  r3   r3   r4   Ú_print_OneMatrixR  r«  z*MathMLPresentationPrinter._print_OneMatrixc                 C  r  )Nr*  z	&#x1D540;r  )r.   ÚIrÊ   r3   r3   r4   Ú_print_IdentityW  r«  z)MathMLPresentationPrinter._print_Identityc                 C  óv   | j  d¡}| | j  d¡¡ | j  d¡}| | j  d¡¡ | j  d¡}| |¡ | |  |jd ¡¡ | |¡ |S )Nr)  u   âŒŠu   âŒ‹r'  r   râ  ©r.   r´   rÑ  rÒ  r'  r3   r3   r4   Ú_print_floor\  ó   

z&MathMLPresentationPrinter._print_floorc                 C  rÀ  )Nr)  u   âŒˆu   âŒ‰r'  r   râ  rÁ  r3   r3   r4   Ú_print_ceilingg  rÃ  z(MathMLPresentationPrinter._print_ceilingc                 C  s¤   | j  d¡}|jd }t|ƒdkr|  |d ¡}n|  |¡}| |  ¡ ¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |  ¡ ¡ |S )Nr'  r   r¾   r)  z&#x21A6;)	r;   rÁ   rÕ   rÇ   rF   rÂ   rª  rB   r­  )r.   r´   r'  Úsymbolsr)  r3   r3   r4   rr  r  s   



z'MathMLPresentationPrinter._print_Lambdac                 C  s
   | j |Ž S r:   )r»  rü   r3   r3   r4   Ú_print_tuple‚  s   
z&MathMLPresentationPrinter._print_tuplec                 C  r6  r:   )rF   Úlabelrü   r3   r3   r4   Ú_print_IndexedBase…  rþ   z,MathMLPresentationPrinter._print_IndexedBasec                 C  s\   | j  d¡}| |  |j¡¡ t|jƒdkr#| |  |jd ¡¡ |S | |  |j¡¡ |S )NrA  r¾   r   )r;   rÁ   rÂ   rF   rI  rÇ   Úindicesr  r3   r3   r4   Ú_print_Indexedˆ  s   z(MathMLPresentationPrinter._print_Indexedc                 C  sx   | j  d¡}| | j|jtd dd¡ | j  d¡}t|jƒD ]\}}|r,| |  ¡ ¡ | |  	|¡¡ q| |¡ |S )NrA  ÚAtomTræ  r'  )
r;   rÁ   rÂ   rÁ  Úparentr   rß   rÉ  r³  rF   )r.   r´   rÊ   r  rá   rØ   r3   r3   r4   Ú_print_MatrixElement‘  s   
z.MathMLPresentationPrinter._print_MatrixElementc                 C  óJ   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | | j|jŽ ¡ |S )Nr'  r*  z	&#x1d5a5;©r;   rÁ   rÂ   rB   r½  rÕ   ©r.   r´   rÊ   r*  r3   r3   r4   Ú_print_elliptic_fœ  ó   
z+MathMLPresentationPrinter._print_elliptic_fc                 C  rÎ  )Nr'  r*  z	&#x1d5a4;rÏ  rÐ  r3   r3   r4   Ú_print_elliptic_e¤  rÒ  z+MathMLPresentationPrinter._print_elliptic_ec                 C  s
  | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | j  d¡}| |  ¡ ¡ t|jƒdkrK|j\}}| |  |¡¡ | |  ¡ ¡ | |  |¡¡ n,|j\}}}| |  |¡¡ | |  	¡ ¡ | |  |¡¡ | |  ¡ ¡ | |  |¡¡ | |  
¡ ¡ | |¡ |S )Nr'  r*  z	&#x1d6f1;rõ   )r;   rÁ   rÂ   rB   rª  rÇ   rÕ   rF   rµ  r·  r­  )r.   r´   rÊ   r*  rÈ  r·   ré   Úzr3   r3   r4   Ú_print_elliptic_pi¬  s(   


z,MathMLPresentationPrinter._print_elliptic_pic                 C  sJ   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |j¡¡ |S )Nr'  r*  ÚEirâ  rÐ  r3   r3   r4   Ú	_print_EiÃ  rÒ  z#MathMLPresentationPrinter._print_Eic                 C  ó~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nr'  rA  r)  rŸ  r   r¾   râ  ©r.   r´   rÊ   rÈ  r)  r3   r3   r4   Ú_print_expintË  ó   

z'MathMLPresentationPrinter._print_expintc                 C  ó˜   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |  |jdd… ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nr'  rC  r)  ÚPr   r¾   r  râ  rÙ  r3   r3   r4   Ú_print_jacobiÖ  ó   

z'MathMLPresentationPrinter._print_jacobic                 C  rÜ  )Nr'  rC  r)  rŒ  r   r¾   rõ   râ  rÙ  r3   r3   r4   Ú_print_gegenbauerâ  rß  z+MathMLPresentationPrinter._print_gegenbauerc                 C  rØ  )Nr'  rA  r)  r¦  r   r¾   râ  rÙ  r3   r3   r4   Ú_print_chebyshevtî  rÛ  z+MathMLPresentationPrinter._print_chebyshevtc                 C  rØ  )Nr'  rA  r)  ÚUr   r¾   râ  rÙ  r3   r3   r4   Ú_print_chebyshevuù  rÛ  z+MathMLPresentationPrinter._print_chebyshevuc                 C  rØ  )Nr'  rA  r)  rÝ  r   r¾   râ  rÙ  r3   r3   r4   Ú_print_legendre  rÛ  z)MathMLPresentationPrinter._print_legendrec                 C  rÜ  )Nr'  rC  r)  rÝ  r   r¾   rõ   râ  rÙ  r3   r3   r4   Ú_print_assoc_legendre  rß  z/MathMLPresentationPrinter._print_assoc_legendrec                 C  rØ  )Nr'  rA  r)  r£  r   r¾   râ  rÙ  r3   r3   r4   Ú_print_laguerre  rÛ  z)MathMLPresentationPrinter._print_laguerrec                 C  rÜ  )Nr'  rC  r)  r£  r   r¾   rõ   râ  rÙ  r3   r3   r4   Ú_print_assoc_laguerre&  rß  z/MathMLPresentationPrinter._print_assoc_laguerrec                 C  rØ  )Nr'  rA  r)  ÚHr   r¾   râ  rÙ  r3   r3   r4   Ú_print_hermite2  rÛ  z(MathMLPresentationPrinter._print_hermite)Fr:   )r   )”r6   r7   r8   rS   rs  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   rE  rt  ru  r÷  rû  r   r  r  rL  rO  r  rZ  r]  rU  r  r^  r  r   r!  Ú_print_Determinantr"  r%  r&  r_  r*  r.  r0  rm  r4  rp  ri  r7  Ú_print_frozensetr=  rL  rP  rR  rx  rv  rS  rw  rX  r  r  rZ  rg  ri  Ú
_print_MinÚ
_print_Maxrj  rb  rg  ro  rs  ru  r}  r„  r†  r‡  r‰  r‹  rŽ  r  r‘  r“  r•  r—  r  r™  r  Ú_print_bellrž  r   r¢  r¤  r¥  r§  r©  r  rª  r±  r³  r´  r·  r¸  r¹  r¼  r½  r¿  rÂ  rÄ  rr  rÆ  rÈ  rÊ  rÍ  rÑ  rÓ  rÕ  r×  rÚ  rÞ  rà  rá  rã  rä  rå  ræ  rç  ré  r3   r3   r3   r4   ry  #  s"   M


/		&660'	,			
	ry  Úcontentc                 K  s$   |dkrt |ƒ | ¡S t|ƒ | ¡S )zŠReturns the MathML representation of expr. If printer is presentation
    then prints Presentation MathML else prints content MathML.
    Úpresentation)ry  rO   rU   )rJ   ÚprinterrC   r3   r3   r4   Úmathml>  s   rò  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)ry  rU   rF   r   ÚtoprettyxmlÚprint)rJ   rñ  rC   r2  ÚxmlÚ
pretty_xmlr3   r3   r4   Úprint_mathmlI  s   
r÷  N)rï  )$rS   Ú
__future__r   Útypingr   Úsympy.core.mulr   Úsympy.core.singletonr   Úsympy.core.sortingr   Úsympy.core.sympifyr   Úsympy.printing.conventionsr   r	   Úsympy.printing.precedencer
   r   r   Ú&sympy.printing.pretty.pretty_symbologyr   Úsympy.printing.printerr   r   Úmpmath.libmpr   r   r   rQ  r   rU   ry  rò  r÷  ÚMathMLPrinterr3   r3   r3   r4   Ú<module>   sD    ?   R            '

$