a
    RG5d& ã                   @   sì   d Z ddlmZ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.
é    )ÚAnyÚDict)Ú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                   @   sT   e Zd ZdZddddddddddddi d	d
œZddd„Z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_numbersc                    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ÚindentÚ	addindentÚnewl© r2   úQ/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/printing/mathml.pyÚwritexml5   s    z4MathMLPrinterBase.__init__.<locals>.RawText.writexmlN)r(   r(   r(   )Ú__name__Ú
__module__Ú__qualname__r4   r2   r2   r2   r3   ÚRawText4   s   r8   c                    s   ˆ ƒ }| |_ ˆj|_|S ©N)r)   ÚdomÚownerDocument)r)   Úr©r8   r-   r2   r3   ÚcreateRawTextNode9   s    z5MathMLPrinterBase.__init__.<locals>.createRawTextNode)r   Ú__init__Úxml.dom.minidomr&   r'   r:   ÚcreateTextNode)r-   Úsettingsr&   r'   r>   r2   r=   r3   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-   ÚexprZmathMLZunistrZxmlbstrÚresr2   r2   r3   ÚdoprintA   s
    zMathMLPrinterBase.doprintc                    sV   ddl m}m}m‰ m‰ d‡ ‡fdd„	}|j| _||_d‡fdd„	}|j| _||_d S )	Nr   )ÚElementr'   ÚNodeÚ_write_datar(   c           	         s  |  |d | j ¡ |  ¡ }t| ¡ ƒ}| ¡  |D ],}|  d| ¡ ˆ||| jƒ |  d¡ q4| jrô|  d¡ t| jƒdkrª| jd j	ˆ j
krª| jd  |ddd¡ n4|  |¡ | jD ]}| ||| ||¡ qº|  |¡ |  d| j|f ¡ n|  d	| ¡ d S )
Nú<z %s="ú"ú>é   r   r(   z</%s>%sz/>%s)r*   ÚtagNameÚ_get_attributesÚlistÚkeysÚsortÚvalueÚ
childNodesÚlenÚnodeTypeÚ	TEXT_NODEr4   )	r-   r.   r/   r0   r1   ÚattrsZa_namesÚa_nameÚnode©rM   rN   r2   r3   r4   U   s,    
ÿ

ÿ
z/MathMLPrinterBase.apply_patch.<locals>.writexmlc                    s   ˆ |d|| j |f ƒ d S )Nz%s%s%s)r)   r,   )rN   r2   r3   r4   t   s    )r(   r(   r(   )r(   r(   r(   )r@   rL   r'   rM   rN   r4   Ú_Element_writexml_oldÚ_Text_writexml_old)r-   rL   r'   r4   r2   r`   r3   Úapply_patchK   s    zMathMLPrinterBase.apply_patchc                 C   s$   ddl m}m} | j|_| j|_d S )Nr   )rL   r'   )r@   rL   r'   ra   r4   rb   )r-   rL   r'   r2   r2   r3   Úrestore_patchy   s    zMathMLPrinterBase.restore_patch)N)	r5   r6   r7   Ú__doc__Ú_default_settingsr?   rK   rc   rd   r2   r2   r2   r3   r      s(   ò

.r   c                   @   s:  e Zd ZdZdZdd„ Zdd„ ZdHd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+dS )IÚ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}||v rx||   S qx|j j}| ¡ S )3ú)Returns the MathML tag for an expression.ÚplusÚtimesÚ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ÚunionÚ	intersect)5ÚAddr   Ú
DerivativeÚNumberrv   ÚPowÚMaxÚMinÚAbsÚAndÚOrÚXorÚNotÚImpliesÚSymbolÚMatrixSymbolZRandomSymbolÚIntegralÚSumrx   ry   rz   r{   r|   r}   r~   r   r€   r   r‚   rƒ   ÚasinÚasinhÚacosÚacoshÚatanÚatanhÚatan2ÚacotÚacothÚasecÚasechÚacscÚacschÚlogÚEqualityÚ
UnequalityÚGreaterThanÚLessThanÚStrictGreaterThanÚStrictLessThanÚUnionÚIntersection©Ú	__class__Ú__mro__r5   Úlower)r-   ÚeÚ	translateÚclsÚnr2   r2   r3   Ú
mathml_tag†   sx    Ë8zMathMLContentPrinter.mathml_tagc           	      C   s@  |  ¡ r<| j d¡}| | j d¡¡ | |  | ¡¡ |S ddlm} ||ƒ\}}|tjur | j d¡}| | j d¡¡ | |  	|¡¡ | |  	|¡¡ |S | 
¡ \}}|tju 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ÚdividerR   Úoldrj   )Úcould_extract_minus_signr:   ÚcreateElementÚappendChildÚ
_print_MulÚsympy.simplifyrÃ   r   ÚOnerE   Úas_coeff_mulrZ   r   r   Ú
_from_argsÚas_ordered_factors)	r-   rI   ÚxrÃ   ÚnumerÚdenomÚcoeffÚtermsÚtermr2   r2   r3   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   rR   rÀ   rÁ   éÿÿÿÿri   )	Ú_as_ordered_termsrE   rÆ   r:   rÇ   rÈ   ÚappendrZ   Úpop)r-   rI   r   ÚargsZlastProcessedZ	plusNodesÚargrÏ   r2   r2   r3   Ú
_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.Ú	piecewiserR   Ú	otherwiseÚpiece)	rÚ   ÚcondÚ
ValueErrorr:   rÇ   Ú	enumeraterZ   rÈ   rE   )r-   rI   ÚrootÚir»   Úcrß   r2   r2   r3   Ú_print_Piecewise  s    z%MathMLContentPrinter._print_Piecewisec              	   C   s^   | j  d¡}t|jƒD ]B}| j  d¡}t|jƒD ]}| |  |||f ¡¡ q0| |¡ q|S )NÚmatrixZ	matrixrow)r:   rÇ   ÚrangeÚrowsÚcolsrÈ   rE   )r-   ÚmrÏ   rä   Zx_rÚjr2   r2   r3   Ú_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 )NrR   rl   rÀ   rÄ   )Úqr:   rÇ   rÈ   rA   ÚstrÚp)r-   r»   rÏ   ÚxnumZxdenomr2   r2   r3   Ú_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ÚlowlimitrR   é   r   )r:   rÇ   rÈ   r¿   rE   rÚ   )r-   r»   rÏ   Úx_1Úx_2r2   r2   r3   Ú_print_Limit7  s    

z!MathMLContentPrinter._print_Limitc                 C   s   | j  d¡S )NZ
imaginaryi©r:   rÇ   ©r-   r»   r2   r2   r3   Ú_print_ImaginaryUnitE  s    z)MathMLContentPrinter._print_ImaginaryUnitc                 C   s   | j  d¡S )NZ
eulergammarù   rú   r2   r2   r3   Ú_print_EulerGammaH  s    z&MathMLContentPrinter._print_EulerGammac                 C   s"   | j  d¡}| | j  d¡¡ |S )zvWe use unicode #x3c6 for Greek letter phi as defined here
        http://www.w3.org/2003/entities/2007doc/isogrk1.htmlrl   u   Ï†©r:   rÇ   rÈ   rA   ©r-   r»   rÏ   r2   r2   r3   Ú_print_GoldenRatioK  s    z'MathMLContentPrinter._print_GoldenRatioc                 C   s   | j  d¡S )NZexponentialerù   rú   r2   r2   r3   Ú_print_Exp1R  s    z MathMLContentPrinter._print_Exp1c                 C   s   | j  d¡S )NÚpirù   rú   r2   r2   r3   Ú	_print_PiU  s    zMathMLContentPrinter._print_Pic                 C   s   | j  d¡S )NÚinfinityrù   rú   r2   r2   r3   Ú_print_InfinityX  s    z$MathMLContentPrinter._print_Infinityc                 C   s   | j  d¡S )NZ
notanumberrù   rú   r2   r2   r3   Ú
_print_NaN[  s    zMathMLContentPrinter._print_NaNc                 C   s   | j  d¡S )NZemptysetrù   rú   r2   r2   r3   Ú_print_EmptySet^  s    z$MathMLContentPrinter._print_EmptySetc                 C   s   | j  d¡S )NÚtruerù   rú   r2   r2   r3   Ú_print_BooleanTruea  s    z'MathMLContentPrinter._print_BooleanTruec                 C   s   | j  d¡S )NÚfalserù   rú   r2   r2   r3   Ú_print_BooleanFalsed  s    z(MathMLContentPrinter._print_BooleanFalsec                 C   s4   | j  d¡}| | j  d¡¡ | | j  d¡¡ |S )NrÀ   rÁ   r  )r:   rÇ   rÈ   rþ   r2   r2   r3   Ú_print_NegativeInfinityg  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ô   rR   Zuplimitrõ   )r:   rÇ   rÈ   r¿   rE   rZ   Úfunction)ÚlimitsrÏ   Z	bvar_elemÚlow_elemÚup_elem©r»   Ú
lime_recurr-   r2   r3   r  n  s(    



z8MathMLContentPrinter._print_Integral.<locals>.lime_recur)rU   r  Úreverse)r-   r»   r  r2   r  r3   Ú_print_Integralm  s    
z$MathMLContentPrinter._print_Integralc                 C   s
   |   |¡S r9   )r  rú   r2   r2   r3   Ú
_print_SumŠ  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 )NrR   zmml:mrowr   zmml:moú úmml:mi©rZ   r:   rÇ   râ   rÈ   rA   ©ÚitemsÚmrowrä   ÚitemÚmoÚmi©r-   r2   r3   Újoin’  s    
z0MathMLContentPrinter._print_Symbol.<locals>.joinc                 S   s   | t v rt  | ¡S | S d S r9   ©r   Úget©Úsr2   r2   r3   r¼   ¤  s    
z5MathMLContentPrinter._print_Symbol.<locals>.translatec                    s   g | ]}ˆ |ƒ‘qS r2   r2   ©Ú.0Úsup©r¼   r2   r3   Ú
<listcomp>¬  ó    z6MathMLContentPrinter._print_Symbol.<locals>.<listcomp>c                    s   g | ]}ˆ |ƒ‘qS r2   r2   ©r&  Úsubr(  r2   r3   r)  ­  r*  r  zmml:msubzmml:msupzmml:msubsup)r:   rÇ   r¿   r   ÚnamerÈ   rA   )r-   Úsymru   r   r-  ÚsupersÚsubsÚmnameÚmsubÚmsupÚmsubsupr2   ©r-   r¼   r3   Ú_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#   rR   rÀ   rã   rõ   Údegreerl   )Ú	_settingsÚexpÚis_Rationalrð   r:   rÇ   rÈ   rî   rA   rï   rE   Úbaser¿   )r-   r»   rÏ   ZxmldegZxmlcnrö   r2   r2   r3   Ú
_print_PowÊ  s&    
ÿ


zMathMLContentPrinter._print_Powc                 C   s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r9   ©r:   rÇ   r¿   rÈ   rA   rï   rþ   r2   r2   r3   Ú_print_Numberá  s    z"MathMLContentPrinter._print_Numberc                 C   s:   | j  |  |¡¡}t|jt|jƒƒ}| | j  |¡¡ |S r9   )	r:   rÇ   r¿   Úmlib_to_strÚ_mpf_r   Ú_precrÈ   rA   )r-   r»   rÏ   Zrepr_er2   r2   r3   Ú_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ó   rR   r7  )
r:   rÇ   r¿   r	   rI   rÈ   ÚreversedÚvariable_countrE   r   )r-   r»   rÏ   Údiff_symbolrö   r.  rj   r7  r2   r2   r3   Ú_print_Derivativeì  s    


z&MathMLContentPrinter._print_Derivativec                 C   sD   | j  d¡}| | j  |  |¡¡¡ |jD ]}| |  |¡¡ q*|S ©NrÀ   )r:   rÇ   rÈ   r¿   rÚ   rE   ©r-   r»   rÏ   rÛ   r2   r2   r3   Ú_print_Functionÿ  s
    
z$MathMLContentPrinter._print_Functionc                 C   s2   | j  |  |¡¡}|jD ]}| |  |¡¡ q|S r9   )r:   rÇ   r¿   rÚ   rÈ   rE   rH  r2   r2   r3   Ú_print_Basic  s    
z!MathMLContentPrinter._print_Basicc                 C   sH   | j  d¡}| j  |  |¡¡}| |¡ |jD ]}| |  |¡¡ q.|S rG  )r:   rÇ   r¿   rÈ   rÚ   rE   )r-   r»   rÏ   rö   rÛ   r2   r2   r3   Ú_print_AssocOp  s    

z#MathMLContentPrinter._print_AssocOpc                 C   sL   | j  d¡}| | j  |  |¡¡¡ | |  |j¡¡ | |  |j¡¡ |S rG  )r:   rÇ   rÈ   r¿   rE   ÚlhsÚrhsrþ   r2   r2   r3   Ú_print_Relational  s
    z&MathMLContentPrinter._print_Relationalc                 C   s*   | j  d¡}|D ]}| |  |¡¡ q|S )zfMathML reference for the <list> element:
        http://www.w3.org/TR/MathML2/chapter4.html#contm.listrU   ©r:   rÇ   rÈ   rE   )r-   ÚseqÚdom_elementr  r2   r2   r3   Ú_print_list  s    z MathMLContentPrinter._print_listc                 C   s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r9   r=  ©r-   rð   rQ  r2   r2   r3   Ú
_print_int#  s    zMathMLContentPrinter._print_intc                 C   s,   | j  d¡}|jD ]}| |  |¡¡ q|S )NÚset©r:   rÇ   rÚ   rÈ   rE   rH  r2   r2   r3   Ú_print_FiniteSet,  s    
z%MathMLContentPrinter._print_FiniteSetc                 C   s>   | j  d¡}| | j  d¡¡ |jD ]}| |  |¡¡ q$|S )NrÀ   Zsetdiff©r:   rÇ   rÈ   rÚ   rE   rH  r2   r2   r3   Ú_print_Complement2  s
    
z&MathMLContentPrinter._print_Complementc                 C   s>   | j  d¡}| | j  d¡¡ |jD ]}| |  |¡¡ q$|S )NrÀ   ZcartesianproductrX  rH  r2   r2   r3   Ú_print_ProductSet9  s
    
z&MathMLContentPrinter._print_ProductSet)N),r5   r6   r7   re   Úprintmethodr¿   rÉ   rÜ   ræ   rí   rò   rø   rû   rü   rÿ   r   r  r  r  r  r  r
  r  r  r  r6  Ú_print_MatrixSymbolÚ_print_RandomSymbolr<  r>  rB  rF  rI  rJ  rK  rN  rR  rT  Ú_print_ImpliesÚ
_print_NotÚ
_print_XorrW  rY  rZ  r2   r2   r2   r3   rg      sR   B#
	8rg   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              0      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+œ/}‡ fd,d-„}|j jD ]}|j}||v rx||   S qx|j jd.krª|ƒ S |j j}| ¡ S )/rh   Úmnz&#x2192;ú&dd;r  z&int;z&#x2211;rx   ry   rz   r{   r„   r…   r†   r‡   rˆ   r‰   rŠ   ú=z&#x2260;z&#x2265;z&#x2264;rQ   rO   ú&#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;)/r“   ÚLimitr’   rv   r   rŸ   r    rx   ry   rz   r{   r¡   r¢   r£   r¤   r¥   r¦   r¨   r§   r¯   r°   r±   r²   r³   r´   ÚlerchphiÚzetaÚdirichlet_etaÚ
elliptic_kÚ
lowergammaÚ
uppergammaÚgammaÚtotientÚreduced_totientÚprimenuÚ
primeomegaÚfresnelsÚfresnelcÚLambertWÚ	HeavisideÚBooleanTrueÚBooleanFalseÚNoneTypeÚmathieusÚmathieucÚmathieusprimeÚmathieucprimec                      sz   ˆ j d d u 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"   rk  ú&InvisibleTimes;rj   ú&#xD7;Údotr   Úldotz&#x2024;)r8  Ú
isinstancerï   Ú	TypeErrorr2   r  r2   r3   Úmul_symbol_selection~  s    ÿzBMathMLPresentationPrinter.mathml_tag.<locals>.mul_symbol_selectionr   r·   )r-   r»   r¼   r‰  r½   r¾   r2   r  r3   r¿   J  sr    Ñ2z$MathMLPresentationPrinter.mathml_tagFc                 C   sJ   t |ƒ}||k s|s<||kr<| j d¡}| |  |¡¡ |S |  |¡S d S ©NÚmfenced)r
   r:   rÇ   rÈ   rE   )r-   r  ÚlevelÚstrictÚprec_valÚbracr2   r2   r3   Úparenthesize–  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urŠˆ j d¡}ˆ jd rTtt| ƒƒdk rT| 	dd¡ ˆ  
|¡}ˆ  
|¡}| |¡ | |¡ | |¡ |S |  ¡ \}}	|tju 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  rR   rÅ   r  r   rÖ   )rÊ   rÃ   r   rË   r:   rÇ   r8  rZ   rï   ÚsetAttributerE   rÈ   rÌ   r   r   rÍ   rÎ   rA   r¿   r  r   )rI   r  rÃ   rÐ   rÑ   Úfracrñ   ZxdenrÒ   rÓ   rÏ   ÚyrÔ   r  r2   r3   Úmultiply¡  s>    










z6MathMLPresentationPrinter._print_Mul.<locals>.multiplyr  r  ú-)r:   rÇ   rÆ   rÈ   rA   )r-   rI   r—  r  rÏ   r2   r  r3   rÉ   Ÿ  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   rR   r  r˜  ú+)r:   rÇ   r×   rÈ   rE   rÆ   rA   )r-   rI   r   r  rÚ   rÛ   rÏ   r–  r2   r2   r3   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(   r‹  r   Úcloseú]Úopen)	r:   rÇ   rè   ré   rê   rÈ   rE   r8  r”  )r-   rë   Útablerä   rÏ   rì   r–  r  r2   r2   r3   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   r‘  r   r“  r  r  r  r˜  )	rð   r:   rÇ   r8  r”  rÈ   rE   rî   rA   )r-   r»   Úfoldedrð   rÏ   r  r  r2   r2   r3   Ú_get_printed_Rationalô  s     




z/MathMLPresentationPrinter._get_printed_Rationalc                 C   s(   |j dkr|  |j¡S |  || jd ¡S )NrR   r   )rî   rE   rð   rŸ  r8  rú   r2   r2   r3   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  ÚlimrR   r  rõ   r   )r:   rÇ   rÈ   rA   rE   rÚ   r¿   )	r-   r»   r  r   r  rÏ   rö   Úarrowr÷   r2   r2   r3   rø     s"    





z&MathMLPresentationPrinter._print_Limitc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&ImaginaryI;rý   rþ   r2   r2   r3   rû   %  s    z.MathMLPresentationPrinter._print_ImaginaryUnitc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  re  rý   rþ   r2   r2   r3   rÿ   *  s    z,MathMLPresentationPrinter._print_GoldenRatioc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&ExponentialE;rý   rþ   r2   r2   r3   r   /  s    z%MathMLPresentationPrinter._print_Exp1c                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&pi;rý   rþ   r2   r2   r3   r  4  s    z#MathMLPresentationPrinter._print_Pic                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  ú&#x221E;rý   rþ   r2   r2   r3   r  9  s    z)MathMLPresentationPrinter._print_Infinityc                 C   sL   | j  d¡}| j  d¡}| | j  d¡¡ |  |¡}| |¡ | |¡ |S )Nr  r  r˜  )r:   rÇ   rÈ   rA   r  )r-   r»   r  r–  rÏ   r2   r2   r3   r  >  s    


z1MathMLPresentationPrinter._print_NegativeInfinityc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&#x210F;rý   rþ   r2   r2   r3   Ú_print_HBarG  s    z%MathMLPresentationPrinter._print_HBarc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  rf  rý   rþ   r2   r2   r3   rü   L  s    z+MathMLPresentationPrinter._print_EulerGammac                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  ÚTribonacciConstantrý   rþ   r2   r2   r3   Ú_print_TribonacciConstantQ  s    z3MathMLPresentationPrinter._print_TribonacciConstantc                 C   s8   | j  d¡}| |  |jd ¡¡ | | j  d¡¡ |S )Nr3  r   ú&#x2020;©r:   rÇ   rÈ   rE   rÚ   rA   ©r-   r»   r3  r2   r2   r3   Ú_print_DaggerV  s    z'MathMLPresentationPrinter._print_Daggerc                 C   sd   | j  d¡}| |  |jd ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ |S )Nr  r   r  z&#x2208;rR   r¨  )r-   r»   r  r  r2   r2   r3   Ú_print_Contains\  s    
z)MathMLPresentationPrinter._print_Containsc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&#x210B;rý   rþ   r2   r2   r3   Ú_print_HilbertSpacee  s    z-MathMLPresentationPrinter._print_HilbertSpacec                 C   s8   | j  d¡}| | j  d¡¡ | |  |jd ¡¡ |S )Nr3  z	&#x1D49E;r   ©r:   rÇ   rÈ   rA   rE   rÚ   r©  r2   r2   r3   Ú_print_ComplexSpacej  s    z-MathMLPresentationPrinter._print_ComplexSpacec                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&#x2131;rý   rþ   r2   r2   r3   Ú_print_FockSpacep  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;)rR   rõ   r  r  r  c                 s   s   | ]}t |ƒd kV  qdS )rR   N)rZ   )r&  r¡  r2   r2   r3   Ú	<genexpr>z  r*  z<MathMLPresentationPrinter._print_Integral.<locals>.<genexpr>r  rR   rõ   r3  r4  r   T©r  rc  r   )r:   rÇ   rZ   r  ÚallrÈ   rA   rC  rE   r  r  r   )	r-   rI   Z
intsymbolsr  r  r¡  r3  r4  Údr2   r2   r3   r  v  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   rR   rõ   r  r  rd  r‹  )rU   r  r:   rÇ   rE   rÈ   rA   r¿   rZ   rï   r  )r-   r»   r  Zsubsupr  r  ÚsummandÚlowÚvarÚequalr  Zfencer2   r2   r3   r  œ  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 )NrR   r  r   r  r  r  r  r  r  r2   r3   r   ¼  s    
z5MathMLPresentationPrinter._print_Symbol.<locals>.joinc                 S   s   | t v rt  | ¡S | S d S r9   r!  r#  r2   r2   r3   r¼   Î  s    
z:MathMLPresentationPrinter._print_Symbol.<locals>.translatec                    s   g | ]}ˆ |ƒ‘qS r2   r2   r%  r(  r2   r3   r)  Ö  r*  z;MathMLPresentationPrinter._print_Symbol.<locals>.<listcomp>c                    s   g | ]}ˆ |ƒ‘qS r2   r2   r+  r(  r2   r3   r)  ×  r*  r  r   r2  r3  r4  ÚboldÚmathvariant)r   r-  r:   rÇ   rÈ   rA   rZ   r”  )	r-   r.  Ústyler   r-  r/  r0  r1  rÏ   r2   r5  r3   r6  »  s2    



z'MathMLPresentationPrinter._print_Symbolc                 C   s   | j || jd dS )Nr!   )rº  )r6  r8  )r-   r.  r2   r2   r3   r\  ñ  s    ÿz-MathMLPresentationPrinter._print_MatrixSymbolc                 C   s2   | j  d¡}| dd¡ | |  |jd ¡¡ |S )NZmencloseÚnotationÚtopr   ©r:   rÇ   r”  rÈ   rE   rÚ   )r-   rI   Úencr2   r2   r3   Ú_print_conjugate÷  s    z*MathMLPresentationPrinter._print_conjugatec                 C   sN   | j  d¡}| |  |td ¡¡ | j  d¡}| | j  |¡¡ | |¡ |S )Nr  ÚFuncr  )r:   rÇ   rÈ   r  r   rA   )r-   ÚoprI   Úrowr  r2   r2   r3   Ú_print_operator_afterý  s    
z/MathMLPresentationPrinter._print_operator_afterc                 C   s   |   d|jd ¡S )Nú!r   ©rÃ  rÚ   ©r-   rI   r2   r2   r3   Ú_print_factorial  s    z*MathMLPresentationPrinter._print_factorialc                 C   s   |   d|jd ¡S )Nz!!r   rÅ  rÆ  r2   r2   r3   Ú_print_factorial2  s    z+MathMLPresentationPrinter._print_factorial2c                 C   s^   | j  d¡}| j  d¡}| dd¡ | |  |jd ¡¡ | |  |jd ¡¡ | |¡ |S )Nr‹  r‘  ZlinethicknessÚ0r   rR   r½  )r-   rI   r  r•  r2   r2   r3   Ú_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 )NrR   r#   rõ   ZmsqrtZmrootrÖ   r‘  r3  r”   r   )r9  r:  rp   rð   rî   r8  r:   rÇ   rÈ   rE   r;  Úis_negativer  r   rŸ  )r-   r»   rÏ   r•  r¼  r2   r2   r3   r<    s^    $ÿ

ÿ
ÿ

z$MathMLPresentationPrinter._print_Powc                 C   s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r9   r=  rþ   r2   r2   r3   r>  J  s    z'MathMLPresentationPrinter._print_Numberc                 C   sL   | j  d¡}| dd¡ | dd¡ | |  |j¡¡ | |  |j¡¡ |S )Nr‹  rš  õ   âŸ©rœ  õ   âŸ¨)r:   rÇ   r”  rÈ   rE   ro   rn   )r-   rä   r  r2   r2   r3   Ú_print_AccumulationBoundsO  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õ   r3  r  r‘  )
r	   rI   r¿   r:   rÇ   rC  rD  rÈ   rA   rE   )r-   r»   r³  rë   Údimr.  ÚnumrÏ   Úxxr–  Zmnumr  r•  r2   r2   r3   rF  W  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   r‹   r‹  )r:   rÇ   r¿   r8  rÈ   rA   rÚ   rE   )r-   r»   r  rÏ   r–  rÛ   r2   r2   r3   rI  ‡  s    


z)MathMLPresentationPrinter._print_Functionc                 C   sh  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rB|  d ¡S | j d	¡}| | j 	|¡¡ |S d S )NT)Ústrip_zerosr%   r  r»   r   r™  rR   rb  r  r3  Ú10z+infz-inf)r   rA  r?  r@  r8  r:   rÇ   ÚsplitrÈ   rA   r  r  )r-   rI   ÚdpsÚstr_realÚ	separatorr  Úmantr9  rb  r  r3  r2   r2   r3   rB  •  s<    











z&MathMLPresentationPrinter._print_Floatc                 C   s   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | j  d¡}| |  |jd ¡¡ | |¡ |S )Nr  r2  r  ÚLir   r‹  rR   r­  )r-   rI   r  rë   r  r  r2   r2   r3   Ú_print_polylog¼  s    


z(MathMLPresentationPrinter._print_polylogc                 C   sp   | j  d¡}| j  d¡}| | j  |  |¡¡¡ | |¡ | j  d¡}|jD ]}| |  |¡¡ qL| |¡ |S )Nr  r  r‹  ©r:   rÇ   rÈ   rA   r¿   rÚ   rE   )r-   r»   r  r  r  rÛ   r2   r2   r3   rJ  Ê  s    


z&MathMLPresentationPrinter._print_Basicc                 C   sB   | j  d¡}| j  d¡}|jD ]}| |  |¡¡ q| |¡ |S )Nr  r‹  rV  )r-   r»   r  rÏ   rÛ   r2   r2   r3   Ú_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  r‹  rš  Ú}rœ  Ú{ú)r›  ú(r   )	r:   rÇ   ÚstartÚendr”  rÈ   rE   Ú
right_openÚ	left_open)r-   rä   r  r  r2   r2   r3   Ú_print_IntervalÝ  s     
z)MathMLPresentationPrinter._print_Intervalc                 C   sT   | j  d¡}| j  d¡}| dd¡ | dd¡ | |  |jd ¡¡ | |¡ |S )Nr  r‹  rš  ú|rœ  r   r½  )r-   rI   r9  r  rÏ   r2   r2   r3   Ú
_print_Absõ  s    
z$MathMLPresentationPrinter._print_Absc                 C   sj   | j  d¡}| j  d¡}| dd¡ | | j  |¡¡ | |¡ | j  d¡}| |  |¡¡ | |¡ |S )Nr  r  r¹  Zfrakturr‹  )r:   rÇ   r”  rÈ   rA   rE   )r-   rå   rI   r  r  r  r2   r2   r3   Ú_print_re_im   s    

z&MathMLPresentationPrinter._print_re_imc                 C   s   |   d|jd ¡S )NÚRr   ©rè  rÚ   ©r-   rI   r9  r2   r2   r3   Ú	_print_re  s    z#MathMLPresentationPrinter._print_rec                 C   s   |   d|jd ¡S )NÚIr   rê  rë  r2   r2   r3   Ú	_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Û   r2   r2   r3   rK    s    

z(MathMLPresentationPrinter._print_AssocOpc                 C   sz   | j  d¡}| |  |jd |¡¡ |jdd … D ]B}| j  d¡}| | j  |¡¡ |  ||¡}| |¡ | |¡ q2|S )Nr  r   rR   r  )r:   rÇ   rÈ   r  rÚ   rA   )r-   rI   ÚsymbolÚprecr  rÛ   rÏ   r–  r2   r2   r3   Ú_print_SetOp  s    
z&MathMLPresentationPrinter._print_SetOpc                 C   s   t d }|  |d|¡S )Nrµ   z&#x222A;©r   rñ  ©r-   rI   rð  r2   r2   r3   Ú_print_Union%  s    z&MathMLPresentationPrinter._print_Unionc                 C   s   t d }|  |d|¡S )Nr¶   z&#x2229;rò  ró  r2   r2   r3   Ú_print_Intersection)  s    z-MathMLPresentationPrinter._print_Intersectionc                 C   s   t d }|  |d|¡S )NÚ
Complementz&#x2216;rò  ró  r2   r2   r3   rY  -  s    z+MathMLPresentationPrinter._print_Complementc                 C   s   t d }|  |d|¡S )NÚSymmetricDifferenceú&#x2206;rò  ró  r2   r2   r3   Ú_print_SymmetricDifference1  s    z4MathMLPresentationPrinter._print_SymmetricDifferencec                 C   s   t d }|  |d|¡S )NÚ
ProductSetz&#x00d7;rò  ró  r2   r2   r3   rZ  5  s    z+MathMLPresentationPrinter._print_ProductSetc                 C   s   |   |j¡S r9   )Ú
_print_setrÚ   )r-   r$  r2   r2   r3   rW  9  s    z*MathMLPresentationPrinter._print_FiniteSetc                 C   sN   t |td}| j d¡}| dd¡ | dd¡ |D ]}| |  |¡¡ q4|S )N©Úkeyr‹  rš  rÝ  rœ  rÞ  )Úsortedr   r:   rÇ   r”  rÈ   rE   )r-   r$  r  r  r  r2   r2   r3   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   r‹  rR   r  )r:   rÇ   Ú
is_BooleanÚis_NotrÈ   rE   rA   )r-   rÚ   rï  r  r  rÛ   rÏ   r–  r2   r2   r3   Ú_print_LogOpG  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Ï   r2   r2   r3   Ú<lambda>i  r*  zAMathMLPresentationPrinter._print_BasisDependent.<locals>.<lambda>rü  rR   r  r™  rÖ   r˜  r‹  rƒ  )Úsympy.vectorr  ÚzerorE   r‡  Úseparater  r:   rÇ   rU   Ú
componentsrW   râ   rÈ   rA   )r-   rI   r  r  r  ÚsystemÚvectÚ
inneritemsrä   ÚkÚvr  Zmbracr2   r2   r3   Ú_print_BasisDependent[  sD    








z/MathMLPresentationPrinter._print_BasisDependentc                 C   s   t |jtd}|  |d¡S )Nrü  z&#x2227;©rþ  rÚ   r   r  ©r-   rI   rÚ   r2   r2   r3   Ú
_print_And…  s    z$MathMLPresentationPrinter._print_Andc                 C   s   t |jtd}|  |d¡S )Nrü  z&#x2228;r  r  r2   r2   r3   Ú	_print_Or‰  s    z#MathMLPresentationPrinter._print_Orc                 C   s   t |jtd}|  |d¡S )Nrü  z&#x22BB;r  r  r2   r2   r3   r`    s    z$MathMLPresentationPrinter._print_Xorc                 C   s   |   |jd¡S )Nz&#x21D2;)r  rÚ   rÆ  r2   r2   r3   r^  ‘  s    z(MathMLPresentationPrinter._print_Impliesc                 C   s   t |jtd}|  |d¡S )Nrü  z&#x21D4;r  r  r2   r2   r3   Ú_print_Equivalent”  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   r‹  )r:   rÇ   rÈ   rA   rÚ   rÿ  rE   )r-   r»   r  r  rÏ   r2   r2   r3   r_  ˜  s    

z$MathMLPresentationPrinter._print_Notc                 C   s(   | j  d¡}| | j  |  |¡¡¡ |S ©Nr  ©r:   rÇ   rÈ   rA   r¿   ©r-   r»   r  r2   r2   r3   Ú_print_bool¥  s    z%MathMLPresentationPrinter._print_boolc                 C   s(   | j  d¡}| | j  |  |¡¡¡ |S r  r  r  r2   r2   r3   Ú_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   â€¦r‹  rš  rÝ  rœ  rÞ  rÖ   r   rR   é   r  )r:   rÇ   r”  rá  Úis_infiniteÚstopÚstepÚis_positiveÚiterÚnextrZ   ÚtuplerÈ   rA   rE   )r-   r$  Údotsr  ÚprintsetÚitÚelr  r2   r2   r3   Ú_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  r‹  )rþ  rÚ   r   r:   rÇ   rÈ   rA   rï   Úfuncrº   rE   )r-   rI   rÚ   r  r  r  rï  r2   r2   r3   Ú_hprint_variadic_functionÒ  s    

z3MathMLPresentationPrinter._hprint_variadic_functionc                 C   s6   | j  d¡}| |  d ¡¡ | |  |jd ¡¡ |S )Nr3  r   )r:   rÇ   rÈ   r   rE   rÚ   )r-   rI   r3  r2   r2   r3   Ú
_print_expà  s    z$MathMLPresentationPrinter._print_expc                 C   sb   | j  d¡}| |  |j¡¡ | j  d¡}| | j  |  |¡¡¡ | |¡ | |  |j¡¡ |S )Nr  r  )r:   rÇ   rÈ   rE   rL  rA   r¿   rM  ©r-   r»   r  rÏ   r2   r2   r3   rN  æ  s    
z+MathMLPresentationPrinter._print_Relationalc                 C   s,   | j  |  |¡¡}| | j  t|ƒ¡¡ |S r9   r=  rS  r2   r2   r3   rT  ï  s    z$MathMLPresentationPrinter._print_intc                 C   sŠ   | j  d¡}|j\}}| j  d¡}| dd¡ | | j  |j| ¡¡ | |¡ | j  d¡}| dd¡ | | j  |j¡¡ | |¡ |S )Nr2  r  r¹  r¸  )r:   rÇ   Ú_idr”  rÈ   rA   Z_variable_namesÚ_name)r-   r»   r2  Úindexr	  r  r2   r2   r3   Ú_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 )Nr2  Úmoverr  r¹  r¸  r  ú^)r:   rÇ   r*  r”  rÈ   rA   Z_vector_namesr+  )r-   r»   r2  r,  r	  r.  r  r  r2   r2   r3   Ú_print_BaseVector  s     




z+MathMLPresentationPrinter._print_BaseVectorc                 C   sl   | j  d¡}| j  d¡}| dd¡ | | j  d¡¡ | |¡ | j  d¡}| | j  d¡¡ | |¡ |S )Nr.  r  r¹  r¸  rÉ  r  r/  ©r:   rÇ   r”  rÈ   rA   )r-   r»   r.  r  r  r2   r2   r3   Ú_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  r„  ©r:   rÇ   Ú_expr1Ú_expr2rÈ   r  r   rA   ©r-   rI   r  Úvec1Úvec2r  r2   r2   r3   Ú_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;r„  r   ©r:   rÇ   rÈ   rA   r  Ú_exprr   ©r-   rI   r  r  r2   r2   r3   Ú_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=  r2   r2   r3   Ú_print_Divergence4  s    

z+MathMLPresentationPrinter._print_Divergencec                 C   sp   | j  d¡}|j}|j}| |  |td ¡¡ | j  d¡}| | j  d¡¡ | |¡ | |  |td ¡¡ |S )Nr  r   r  r   r3  r6  r2   r2   r3   Ú
_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=  r2   r2   r3   Ú_print_GradientJ  s    
z)MathMLPresentationPrinter._print_Gradientc                 C   sP   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jtd ¡¡ |S )Nr  r  rø  r   r;  r=  r2   r2   r3   Ú_print_LaplacianR  s    
z*MathMLPresentationPrinter._print_Laplacianc                 C   s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nr  r¹  Únormalz&#x2124;r1  rþ   r2   r2   r3   Ú_print_IntegersZ  s    z)MathMLPresentationPrinter._print_Integersc                 C   s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nr  r¹  rC  z&#x2102;r1  rþ   r2   r2   r3   Ú_print_Complexes`  s    z*MathMLPresentationPrinter._print_Complexesc                 C   s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nr  r¹  rC  z&#x211D;r1  rþ   r2   r2   r3   Ú_print_Realsf  s    z&MathMLPresentationPrinter._print_Realsc                 C   s.   | j  d¡}| dd¡ | | j  d¡¡ |S )Nr  r¹  rC  ú&#x2115;r1  rþ   r2   r2   r3   Ú_print_Naturalsl  s    z)MathMLPresentationPrinter._print_Naturalsc                 C   sV   | j  d¡}| j  d¡}| dd¡ | | j  d¡¡ | |¡ | |  tj¡¡ |S )Nr2  r  r¹  rC  rG  )r:   rÇ   r”  rÈ   rA   rE   r   ÚZero)r-   r»   r,  rÏ   r2   r2   r3   Ú_print_Naturals0r  s    
z*MathMLPresentationPrinter._print_Naturals0c                 C   s|   |j d |j d  }|j d }| j d¡}| j d¡}| dd¡ | dd	¡ | |  |¡¡ | |¡ | |  |¡¡ |S )
Nr   rR   rõ   r3  r‹  rš  rÌ  rœ  rÍ  )rÚ   r:   rÇ   r”  rÈ   rE   )r-   rI   Úshiftrm   r'  r  r2   r2   r3   Ú_print_SingularityFunction{  s    

z4MathMLPresentationPrinter._print_SingularityFunctionc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  ÚNaNrý   rþ   r2   r2   r3   r  ‡  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 )Nr2  r  r   rR   r  r‹  )r:   rÇ   rÈ   rA   rE   rÚ   rZ   )r-   r»   r-  r,  r  r  r–  rÛ   r2   r2   r3   Ú_print_number_functionŒ  s    


z0MathMLPresentationPrinter._print_number_functionc                 C   s   |   |d¡S )NÚB©rN  rú   r2   r2   r3   Ú_print_bernoulliŸ  s    z*MathMLPresentationPrinter._print_bernoullic                 C   s   |   |d¡S )Nrg  rP  rú   r2   r2   r3   Ú_print_catalan¤  s    z(MathMLPresentationPrinter._print_catalanc                 C   s   |   |d¡S )NÚErP  rú   r2   r2   r3   Ú_print_euler§  s    z&MathMLPresentationPrinter._print_eulerc                 C   s   |   |d¡S )NÚFrP  rú   r2   r2   r3   Ú_print_fibonacciª  s    z*MathMLPresentationPrinter._print_fibonaccic                 C   s   |   |d¡S )NÚLrP  rú   r2   r2   r3   Ú_print_lucas­  s    z&MathMLPresentationPrinter._print_lucasc                 C   s   |   |d¡S )Nz&#x03B3;rP  rú   r2   r2   r3   Ú_print_stieltjes°  s    z*MathMLPresentationPrinter._print_stieltjesc                 C   s   |   |d¡S )NÚTrP  rú   r2   r2   r3   Ú_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  r2   r2   r3   Ú_print_ComplexInfinity¶  s    

z0MathMLPresentationPrinter._print_ComplexInfinityc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z&#x2205;rý   rþ   r2   r2   r3   r  À  s    z)MathMLPresentationPrinter._print_EmptySetc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z	&#x1D54C;rý   rþ   r2   r2   r3   Ú_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   ©rž   r3  r‹  r  r§  ©	Úsympy.matricesrž   rÛ   r:   rÇ   r‡  rÈ   rE   rA   ©r-   rI   rž   Úmatr'  r  r  r2   r2   r3   Ú_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_  r3  r‹  r  rZ  r`  rb  r2   r2   r3   Ú_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_  r3  r‹  rÖ   )ra  rž   rÛ   r:   rÇ   r‡  rÈ   rE   )r-   rI   rž   rc  r'  r  r2   r2   r3   Ú_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  rR   rÖ   r  r˜  Frƒ  )Ú!sympy.matrices.expressions.matmulrg  r:   rÇ   rÚ   r‡  r   rÎ   rU   rÆ   rÈ   rA   r  r
   )r-   rI   rg  rÏ   rÚ   r  rÛ   r2   r2   r3   Ú_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_  r3  r‹  )	ra  rž   r;  r9  r:   rÇ   r‡  rÈ   rE   )r-   rI   rž   r;  r9  r'  r  r2   r2   r3   Ú_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;)r:   rÇ   rÚ   rÈ   r  r
   rA   )r-   rI   rÏ   rÚ   rÛ   r  r2   r2   r3   Ú_print_HadamardProduct  s    ÿÿz0MathMLPresentationPrinter._print_HadamardProductc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nrb  z&#x1D7D8rý   ©r-   ÚZrÏ   r2   r2   r3   Ú_print_ZeroMatrix,  s    z+MathMLPresentationPrinter._print_ZeroMatrixc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nrb  z&#x1D7D9rý   rl  r2   r2   r3   Ú_print_OneMatrix1  s    z*MathMLPresentationPrinter._print_OneMatrixc                 C   s"   | j  d¡}| | j  d¡¡ |S )Nr  z	&#x1D540;rý   )r-   rí  rÏ   r2   r2   r3   Ú_print_Identity6  s    z)MathMLPresentationPrinter._print_Identityc                 C   sT   | j  d¡}| j  d¡}| dd¡ | dd¡ | |  |jd ¡¡ | |¡ |S )Nr  r‹  rš  u   âŒ‹rœ  u   âŒŠr   r½  r)  r2   r2   r3   Ú_print_floor;  s    
z&MathMLPresentationPrinter._print_floorc                 C   sT   | j  d¡}| j  d¡}| dd¡ | dd¡ | |  |jd ¡¡ | |¡ |S )Nr  r‹  rš  u   âŒ‰rœ  u   âŒˆr   r½  r)  r2   r2   r3   Ú_print_ceilingD  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 )Nr‹  r  r   rR   r  z&#x21A6;)r:   rÇ   rÚ   rZ   rE   rÈ   rA   )r-   r»   rÏ   r  Úsymbolsr  r2   r2   r3   Ú_print_LambdaM  s    




z'MathMLPresentationPrinter._print_Lambdac                 C   s*   | j  d¡}|D ]}| |  |¡¡ q|S rŠ  rO  )r-   r»   rÏ   rä   r2   r2   r3   Ú_print_tuple]  s    z&MathMLPresentationPrinter._print_tuplec                 C   s   |   |j¡S r9   )rE   Úlabelrú   r2   r2   r3   Ú_print_IndexedBasec  s    z,MathMLPresentationPrinter._print_IndexedBasec                 C   s\   | j  d¡}| |  |j¡¡ t|jƒdkrF| |  |jd ¡¡ |S | |  |j¡¡ |S )Nr2  rR   r   )r:   rÇ   rÈ   rE   r;  rZ   Úindicesrþ   r2   r2   r3   Ú_print_Indexedf  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 )	Nr2  ÚAtomTr±  r‹  rš  r(   rœ  )	r:   rÇ   rÈ   r  Úparentr   r”  rx  rE   )r-   r»   rÏ   r  rä   r2   r2   r3   Ú_print_MatrixElemento  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;r‹  Ú
separatorsræ  ©r:   rÇ   rÈ   rA   r”  rÚ   rE   ©r-   r»   rÏ   r  r–  rä   r2   r2   r3   Ú_print_elliptic_fz  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;r‹  r}  ræ  r~  r  r2   r2   r3   Ú_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;r‹  rõ   r}  ræ  z;|)r:   rÇ   rÈ   rA   rZ   rÚ   r”  rE   r  r2   r2   r3   Ú_print_elliptic_pi’  s    


z,MathMLPresentationPrinter._print_elliptic_pic                 C   sJ   | j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |j¡¡ |S )Nr  r  ÚEir­  )r-   r»   rÏ   r  r2   r2   r3   Ú	_print_Ei¡  s    
z#MathMLPresentationPrinter._print_Eic                 C   s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nr  r2  r  rS  r   rR   r­  ©r-   r»   rÏ   r–  r  r2   r2   r3   Ú_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  r4  r  ÚPr   rR   r  r­  r…  r2   r2   r3   Ú_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  r4  r  rg  r   rR   rõ   r­  r…  r2   r2   r3   Ú_print_gegenbauerÀ  s    

z+MathMLPresentationPrinter._print_gegenbauerc                 C   s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nr  r2  r  rZ  r   rR   r­  r…  r2   r2   r3   Ú_print_chebyshevtÌ  s    

z+MathMLPresentationPrinter._print_chebyshevtc                 C   s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nr  r2  r  ÚUr   rR   r­  r…  r2   r2   r3   Ú_print_chebyshevu×  s    

z+MathMLPresentationPrinter._print_chebyshevuc                 C   s~   | j  d¡}| j  d¡}| j  d¡}| | j  d¡¡ | |¡ | |  |jd ¡¡ | |¡ | |  |jdd … ¡¡ |S )Nr  r2  r  r‡  r   rR   r­  r…  r2   r2   r3   Ú_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  r4  r  r‡  r   rR   rõ   r­  r…  r2   r2   r3   Ú_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  r2  r  rW  r   rR   r­  r…  r2   r2   r3   Ú_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  r4  r  rW  r   rR   rõ   r­  r…  r2   r2   r3   Ú_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  r2  r  ÚHr   rR   r­  r…  r2   r2   r3   Ú_print_hermite  s    

z(MathMLPresentationPrinter._print_hermite)F)N)N)r   )N)N)N)‹r5   r6   r7   re   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  r6  r\  r]  r¿  rÃ  rÇ  rÈ  rÊ  r<  r>  rÎ  rF  rI  rB  rÚ  rJ  rÜ  rå  rç  Ú_print_Determinantrè  rì  rî  rK  rñ  rô  rõ  rY  rù  rZ  rW  rû  Ú_print_frozensetr  r  r  r  r`  r^  r  r_  r  r  r
  r  r%  r'  Ú
_print_MinÚ
_print_Maxr(  rN  rT  r-  r0  r2  r9  r>  r?  r@  rA  rB  rD  rE  rF  rH  rJ  rL  r  rN  rQ  Ú_print_bellrR  rT  rV  rX  rY  r[  r]  r  r^  rd  re  rf  ri  rj  rk  rn  ro  rp  rq  rr  rt  ru  rw  ry  r|  r€  r  r‚  r„  r†  rˆ  r‰  rŠ  rŒ  r  rŽ  r  r  r’  r2   r2   r2   r3   ra  C  s  L	/		&6	60'			* 		
			ra  Ú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)ra  rK   rg   )rI   ÚprinterrB   r2   r2   r3   Úmathml  s    r›  c                 K   sL   |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)ra  rg   rE   r   rc   Útoprettyxmlrd   Úprint)rI   rš  rB   r$  ÚxmlZ
pretty_xmlr2   r2   r3   Úprint_mathml'  s    
rŸ  N)r˜  )r˜  )$re   Útypingr   r   ÚtDictZsympy.core.mulr   Úsympy.core.singletonr   Úsympy.core.sortingr   Úsympy.core.sympifyr   Úsympy.printing.conventionsr   r	   Úsympy.printing.precedencer
   r   r   Z&sympy.printing.pretty.pretty_symbologyr   Úsympy.printing.printerr   r   Zmpmath.libmpr   r   r   r?  r   rg   ra  r›  rŸ  ZMathMLPrinterr2   r2   r2   r3   Ú<module>   s>   k   G           d

&