o
    *ήc&                    @   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 d S )Nz{}{}{})datawriteformatselfwriterindent	addindentnewl r2   </tmp/pip-target-vg8gfxp4/lib/python/sympy/printing/mathml.pywritexml5   s   z4MathMLPrinterBase.__init__.<locals>.RawText.writexmlNr(   r(   r(   )__name__
__module____qualname__r4   r2   r2   r2   r3   RawText4   s    r9   c                    s     }| |_ j|_|S N)r)   domownerDocument)r)   rr9   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-   exprmathMLunistr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 q| jr{| d t| jdkrU| jd j	 j
krU| jd |ddd n| | | jD ]}|||| || q]| | | d| j|f  d S | 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   attrsa_namesa_namenoderQ   rR   r2   r3   r4   U   s,   



z/MathMLPrinterBase.apply_patch.<locals>.writexmlc                    s    |d|| j |f  d S )Nz%s%s%s)r)   r,   )rR   r2   r3   r4   t   s   r5   )rA   rP   r'   rQ   rR   r4   _Element_writexml_old_Text_writexml_old)r-   rP   r'   r4   r2   re   r3   apply_patchK   s   
zMathMLPrinterBase.apply_patchc                 C   s$   ddl m}m} | j|_| j|_d S )Nr   )rP   r'   )rA   rP   r'   rf   r4   rg   )r-   rP   r'   r2   r2   r3   restore_patchy   s   zMathMLPrinterBase.restore_patchr:   )	r6   r7   r8   __doc___default_settingsr@   rO   rh   ri   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
    _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nr2   r2   r3   
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dividerV   oldrq   )could_extract_minus_signr;   createElementappendChild
_print_Mulsympy.simplifyr   r   OnerF   as_coeff_mulr^   r   r   
_from_argsas_ordered_factors)	r-   rJ   xr   numerdenomcoefftermstermr2   r2   r3   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   rV   r   r   rp   )	_as_ordered_termsrF   r   r;   r   r   appendr^   pop)r-   rJ   r   argslastProcessed	plusNodesargr   r2   r2   r3   
_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   TzAll 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.	piecewiserV   	otherwisepiece)	r   cond
ValueErrorr;   r   	enumerater^   r   rF   )r-   rJ   rootir   cr   r2   r2   r3   _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jr2   r2   r3   _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 )NrV   ru   r   r   )qr;   r   r   rB   strp)r-   r   r   xnum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lowlimitrV      r   )r;   r   r   r   rF   r   )r-   r   r   x_1x_2r2   r2   r3   _print_Limit7  s   

z!MathMLContentPrinter._print_Limitc                 C      | j dS )N
imaginaryir;   r   r-   r   r2   r2   r3   _print_ImaginaryUnitE     z)MathMLContentPrinter._print_ImaginaryUnitc                 C   r  )N
eulergammar  r  r2   r2   r3   _print_EulerGammaH  r  z&MathMLContentPrinter._print_EulerGammac                 C   "   | j d}|| j d |S )zvWe use unicode #x3c6 for Greek letter phi as defined here
        http://www.w3.org/2003/entities/2007doc/isogrk1.htmlru   u   φr;   r   r   rB   r-   r   r   r2   r2   r3   _print_GoldenRatioK  s   z'MathMLContentPrinter._print_GoldenRatioc                 C   r  )Nexponentialer  r  r2   r2   r3   _print_Exp1R  r  z MathMLContentPrinter._print_Exp1c                 C   r  )Npir  r  r2   r2   r3   	_print_PiU  r  zMathMLContentPrinter._print_Pic                 C   r  )Ninfinityr  r  r2   r2   r3   _print_InfinityX  r  z$MathMLContentPrinter._print_Infinityc                 C   r  )N
notanumberr  r  r2   r2   r3   
_print_NaN[  r  zMathMLContentPrinter._print_NaNc                 C   r  )Nemptysetr  r  r2   r2   r3   _print_EmptySet^  r  z$MathMLContentPrinter._print_EmptySetc                 C   r  )Ntruer  r  r2   r2   r3   _print_BooleanTruea  r  z'MathMLContentPrinter._print_BooleanTruec                 C   r  )Nfalser  r  r2   r2   r3   _print_BooleanFalsed  r  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 |S || dd   |S )	Nr   r  r      r	  rV   uplimitr
  )r;   r   r   r   rF   r^   function)limitsr   	bvar_elemlow_elemup_elemr   
lime_recurr-   r2   r3   r1  n  s*   



z8MathMLContentPrinter._print_Integral.<locals>.lime_recur)rY   r,  reverse)r-   r   r,  r2   r0  r3   _print_Integralm  s   
z$MathMLContentPrinter._print_Integralc                 C   s
   |  |S r:   )r3  r  r2   r2   r3   
_print_Sum  s   
zMathMLContentPrinter._print_Sumc                    sF   j  |} fdd}dd t|j\}}}|}fdd|D }fdd|D } j d}| j | |sh|sO| 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 )NrV   zmml:mrowr   zmml:mo mml:mir^   r;   r   r   r   rB   itemsmrowr   itemmomir-   r2   r3   join     
z0MathMLContentPrinter._print_Symbol.<locals>.joinc                 S      | t v r	t | S | S r:   r   getsr2   r2   r3   r        
z5MathMLContentPrinter._print_Symbol.<locals>.translatec                       g | ]} |qS r2   r2   .0supr   r2   r3   
<listcomp>      z6MathMLContentPrinter._print_Symbol.<locals>.<listcomp>c                    rH  r2   r2   rJ  subrL  r2   r3   rM    rN  r7  zmml:msubzmml:msupzmml:msubsup)r;   r   r   r   namer   rB   )r-   symr   r@  rQ  superssubsmnamemsubmsupmsubsupr2   r-   r   r3   _print_Symbol  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#   rV   r   r   r
  degreeru   )	_settingsexpis_Rationalr  r;   r   r   r  rB   r  rF   baser   )r-   r   r   xmldegxmlcnr  r2   r2   r3   
_print_Pow  s&   



zMathMLContentPrinter._print_Powc                 C   ,   | j | |}|| j t| |S r:   r;   r   r   r   rB   r  r  r2   r2   r3   _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_er2   r2   r3   _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  rV   r[  )
r;   r   r   r	   rJ   r   reversedvariable_countrF   r   )r-   r   r   diff_symbolr  rR  rq   r[  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   rF   r-   r   r   r   r2   r2   r3   _print_Function  s
   
z$MathMLContentPrinter._print_Functionc                 C   s2   | j | |}|jD ]
}|| | q|S r:   )r;   r   r   r   r   rF   rr  r2   r2   r3   _print_Basic  s   
z!MathMLContentPrinter._print_Basicc                 C   sH   | j d}| j | |}|| |jD ]
}|| | q|S rq  )r;   r   r   r   r   rF   )r-   r   r   r  r   r2   r2   r3   _print_AssocOp  s   

z#MathMLContentPrinter._print_AssocOpc                 C   sL   | j d}|| j | | || |j || |j |S rq  )r;   r   r   r   rF   lhsrhsr  r2   r2   r3   _print_Relational  s
   z&MathMLContentPrinter._print_Relationalc                 C   *   | j d}|D ]
}|| | q|S )zfMathML reference for the <list> element:
        http://www.w3.org/TR/MathML2/chapter4.html#contm.listrY   r;   r   r   rF   )r-   seqdom_elementr<  r2   r2   r3   _print_list  s   z MathMLContentPrinter._print_listc                 C   rc  r:   rd  r-   r  r|  r2   r2   r3   
_print_int#  rf  zMathMLContentPrinter._print_intc                 C   s,   | j d}|jD ]
}|| | q	|S )Nsetr;   r   r   r   rF   rr  r2   r2   r3   _print_FiniteSet,  s   
z%MathMLContentPrinter._print_FiniteSetc                 C   >   | j d}|| j d |jD ]
}|| | q|S )Nr   setdiffr;   r   r   r   rF   rr  r2   r2   r3   _print_Complement2  
   
z&MathMLContentPrinter._print_Complementc                 C   r  )Nr   cartesianproductr  rr  r2   r2   r3   _print_ProductSet9  r  z&MathMLContentPrinter._print_ProductSetr:   ),r6   r7   r8   rj   printmethodr   r   r   r   r  r  r  r  r  r  r  r  r  r!  r#  r%  r'  r(  r3  r4  rZ  _print_MatrixSymbol_print_RandomSymbolrb  re  rk  rp  rs  rt  ru  rx  r}  r  _print_Implies
_print_Not
_print_Xorr  r  r  r2   r2   r2   r3   rl      sT    B
#	8rl   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 ZDdd ZEdd ZFeFZGeFZHdd ZIdd ZJdd ZKeK ZLZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd ZbebZcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd ZjddÄ Zkddń ZlddǄ ZmddɄ Zndd˄ Zodd̈́ Zpddτ Zqddф Zrddӄ ZsddՄ Ztddׄ Zuddل Zvddۄ Zwdd݄ Zxdd߄ Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d Zd
S (  MathMLPresentationPrinterzPrints an expression to the Presentation MathML markup language.

    References: https://www.w3.org/TR/MathML2/chapter3.html
    _mathml_presentationc                    sJ  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@dAdGdHdI} fdJdK}|j jD ]}|j}||v r||   S q|j jdLkr| S |j j}| S )Mrn   rt   mnLimitz&#x2192;rr   &dd;rv   r   r>  r   z&int;r   z&#x2211;r   r   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   rU   r   rS   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;)primenu
primeomegafresnelsfresnelcLambertW	HeavisideBooleanTrueBooleanFalseNoneTypemathieusmathieucmathieusprimemathieucprimec                      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;rq   &#xD7;dotr   ldotz&#x2024;)r\  
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  s   	
 !"#2z$MathMLPresentationPrinter.mathml_tagFc                 C   sF   t |}||k s|s||kr| jd}|| | |S | |S Nmfenced)r
   r;   r   r   rF   )r-   r<  levelstrictprec_valbracr2   r2   r3   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$  rV   r   r=  r   r   )r   r   r   r   r;   r   r\  r^   r  setAttributerF   r   r   r   r   r   r   rB   r   r  r   )rJ   r;  r   r   r   fracr  xdenr   r   r   yr   r?  r2   r3   multiply  s@   










z6MathMLPresentationPrinter._print_Mul.<locals>.multiplyr;  r=  -)r;   r   r   r   rB   )r-   rJ   r  r;  r   r2   r?  r3   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   rV   r=  r  +)r;   r   r   r   rF   r   rB   )r-   rJ   r   r;  r   r   r   r  r2   r2   r3   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rA|S | j d}| jd dkrZ|dd	 |d
d || |S )Nmtablemtrmtdr    r(   r  r   close]open)	r;   r   r   r   r   r   rF   r\  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}|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   r\  r  r   rF   r  rB   )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 )NrV   r   )r  rF   r  r  r\  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>  limrV   r=  r
  r   )r;   r   r   rB   rF   r   r   )	r-   r   r;  r  r>  r   r  arrowr  r2   r2   r3   r    s"   





z&MathMLPresentationPrinter._print_Limitc                 C   r  )Nr>  z&ImaginaryI;r  r  r2   r2   r3   r  %     z.MathMLPresentationPrinter._print_ImaginaryUnitc                 C   r  )Nr>  r  r  r  r2   r2   r3   r  *  r  z,MathMLPresentationPrinter._print_GoldenRatioc                 C   r  )Nr>  z&ExponentialE;r  r  r2   r2   r3   r  /  r  z%MathMLPresentationPrinter._print_Exp1c                 C   r  )Nr>  z&pi;r  r  r2   r2   r3   r  4  r  z#MathMLPresentationPrinter._print_Pic                 C   r  )Nr>  &#x221E;r  r  r2   r2   r3   r  9  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   r2   r2   r3   r(  >  s   


z1MathMLPresentationPrinter._print_NegativeInfinityc                 C   r  )Nr>  z&#x210F;r  r  r2   r2   r3   _print_HBarG  r  z%MathMLPresentationPrinter._print_HBarc                 C   r  )Nr>  r  r  r  r2   r2   r3   r  L  r  z+MathMLPresentationPrinter._print_EulerGammac                 C   r  )Nr>  TribonacciConstantr  r  r2   r2   r3   _print_TribonacciConstantQ  r  z3MathMLPresentationPrinter._print_TribonacciConstantc                 C   s8   | j d}|| |jd  || j d |S )NrW  r   &#x2020;r;   r   r   rF   r   rB   r-   r   rW  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;rV   r  )r-   r   r;  r=  r2   r2   r3   _print_Contains\  s   
z)MathMLPresentationPrinter._print_Containsc                 C   r  )Nr>  z&#x210B;r  r  r2   r2   r3   _print_HilbertSpacee  r  z-MathMLPresentationPrinter._print_HilbertSpacec                 C   s8   | j d}|| j d || |jd  |S )NrW  z	&#x1D49E;r   r;   r   r   rB   rF   r   r  r2   r2   r3   _print_ComplexSpacej  s   z-MathMLPresentationPrinter._print_ComplexSpacec                 C   r  )Nr>  z&#x2131;r  r  r2   r2   r3   _print_FockSpacep  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;)rV   r
  r)  r;  r)  c                 s   s    | ]	}t |d kV  qdS )rV   N)r^   )rJ  r  r2   r2   r3   	<genexpr>z  s    z<MathMLPresentationPrinter._print_Integral.<locals>.<genexpr>r=  rV   r
  rW  rX  r   Tr  r  r   )r;   r   r^   r,  allr   rB   rm  rF   r  r+  r   )	r-   rJ   
intsymbolsr;  r=  r  rW  rX  dr2   r2   r3   r3  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
 |
S | jd}|| |j
 |
| |
S )	N
munderoverr   rV   r
  r=  r;  r  r  )rY   r,  r;   r   rF   r   rB   r   r^   r  r+  )r-   r   r,  subsupr.  r/  summandlowvarequalr;  fencer2   r2   r3   r4    s2   








z$MathMLPresentationPrinter._print_Sumr   c           	         s.   fdd}dd t |j\}}}|}fdd|D }fdd|D } jd}| j| t|d	krYt|d	krF|}nE jd
}|| ||| n2t|d	krr jd}|| ||| n jd}|| ||| ||| |dkr|dd |S )Nc                    r5  )NrV   r;  r   r=  r6  r>  r8  r9  r?  r2   r3   r@    rA  z5MathMLPresentationPrinter._print_Symbol.<locals>.joinc                 S   rB  r:   rC  rE  r2   r2   r3   r     rG  z:MathMLPresentationPrinter._print_Symbol.<locals>.translatec                    rH  r2   r2   rI  rL  r2   r3   rM    rN  z;MathMLPresentationPrinter._print_Symbol.<locals>.<listcomp>c                    rH  r2   r2   rO  rL  r2   r3   rM    rN  r>  r   rV  rW  rX  boldmathvariant)r   rQ  r;   r   r   rB   r^   r  )	r-   rR  styler@  rQ  rS  rT  rU  r   r2   rY  r3   rZ    s2   


z'MathMLPresentationPrinter._print_Symbolc                 C   s   | j || jd dS )Nr!   )r  )rZ  r\  )r-   rR  r2   r2   r3   r    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   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   rB   )r-   oprJ   rowr=  r2   r2   r3   _print_operator_after  s   
z/MathMLPresentationPrinter._print_operator_afterc                 C      |  d|jd S )N!r   r  r   r-   rJ   r2   r2   r3   _print_factorial     z*MathMLPresentationPrinter._print_factorialc                 C   r  )Nz!!r   r   r  r2   r2   r3   _print_factorial2  r  z+MathMLPresentationPrinter._print_factorial2c                 C   s^   | j d}| j d}|dd || |jd  || |jd  || |S )Nr  r  linethickness0r   rV   r  )r-   rJ   r  r  r2   r2   r3   _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 )NrV   r#   r
  msqrtmrootr   r  rW  rw   r   )r]  r^  r~   r  r  r\  r;   r   r   rF   r_  is_negativer  r   r  )r-   r   r   r  r  r2   r2   r3   rb    s`   $




z$MathMLPresentationPrinter._print_Powc                 C   rc  r:   rd  r  r2   r2   r3   re  J  rf  z'MathMLPresentationPrinter._print_Numberc                 C   sL   | j d}|dd |dd || |j || |j |S )Nr  r     ⟩r     ⟨)r;   r   r  r   rF   r|   rz   )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 ]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
  rW  r=  r  )
r	   rJ   r   r;   r   rm  rn  r   rB   rF   )r-   r   r  r   dimrR  numr   xxr  mnumr;  r  r2   r2   r3   rp  W  sF   









z+MathMLPresentationPrinter._print_Derivativec                 C   s   | j d}| j d}| |dkr"| jd r"|| j d n|| j | | | j d}|jD ]
}|| | q7|| || |S )Nr;  r>  r   r   r   r  )r;   r   r   r\  r   rB   r   rF   )r-   r   r;  r   r  r   r2   r2   r3   rs    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  rV   r  r=  rW  10z+infz-inf)r   ri  rg  rh  r\  r;   r   splitr   rB   r  r(  )r-   rJ   dpsstr_real	separatorr;  mantr]  r  r=  rW  r2   r2   r3   rk    s<   








z&MathMLPresentationPrinter._print_Floatc                 C   s   | j d}| j d}| j d}|| j d || || |jd  || | j d}|| |jd  || |S )Nr;  rV  r>  Lir   r  rV   r  )r-   rJ   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 ]
}|| | q&|| |S )Nr;  r>  r  r;   r   r   rB   r   r   rF   )r-   r   r;  r>  r  r   r2   r2   r3   rt    s   


z&MathMLPresentationPrinter._print_Basicc                 C   sB   | j d}| j d}|jD ]
}|| | q|| |S )Nr;  r  r  )r-   r   r;  r   r   r2   r2   r3   _print_Tuple  s   

z&MathMLPresentationPrinter._print_Tuplec                 C   s   | j d}| j d}|j|jkr(|dd |dd || |j n2|jr2|dd n|dd |jrB|dd	 n|dd
 || |j || |j || |S )Nr;  r  r  }r  {)r  (r   )	r;   r   startendr  r   rF   
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-   rJ   r]  r;  r   r2   r2   r3   
_print_Abs     
z$MathMLPresentationPrinter._print_Absc                 C   sj   | j d}| j d}|dd || j | || | j d}|| | || |S )Nr;  r>  r  frakturr  )r;   r   r  r   rB   rF   )r-   r   rJ   r;  r>  r  r2   r2   r3   _print_re_im   s   

z&MathMLPresentationPrinter._print_re_imc                 C   r  )NRr   r*  r   r-   rJ   r]  r2   r2   r3   	_print_re  r  z#MathMLPresentationPrinter._print_rec                 C   r  )NIr   r,  r-  r2   r2   r3   	_print_im  r  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   ru    s   

z(MathMLPresentationPrinter._print_AssocOpc                 C   sz   | j d}|| |jd | |jdd  D ]!}| j d}|| j | | ||}|| || q|S )Nr;  r   rV   r=  )r;   r   r   r  r   rB   )r-   rJ   symbolprecr;  r   r   r  r2   r2   r3   _print_SetOp  s   
z&MathMLPresentationPrinter._print_SetOpc                 C      t d }| |d|S )Nr   z&#x222A;r   r3  r-   rJ   r2  r2   r2   r3   _print_Union%     z&MathMLPresentationPrinter._print_Unionc                 C   r4  )Nr   z&#x2229;r5  r6  r2   r2   r3   _print_Intersection)  r8  z-MathMLPresentationPrinter._print_Intersectionc                 C   r4  )N
Complementz&#x2216;r5  r6  r2   r2   r3   r  -  r8  z+MathMLPresentationPrinter._print_Complementc                 C   r4  )NSymmetricDifference&#x2206;r5  r6  r2   r2   r3   _print_SymmetricDifference1  r8  z4MathMLPresentationPrinter._print_SymmetricDifferencec                 C   r4  )N
ProductSetz&#x00d7;r5  r6  r2   r2   r3   r  5  r8  z+MathMLPresentationPrinter._print_ProductSetc                 C      |  |jS r:   )
_print_setr   )r-   rF  r2   r2   r3   r  9  r  z*MathMLPresentationPrinter._print_FiniteSetc                 C   sN   t |td}| jd}|dd |dd |D ]
}|| | q|S )Nkeyr  r  r  r  r  )sortedr   r;   r   r  r   rF   )r-   rF  r:  r  r<  r2   r2   r3   r@  <  s   z$MathMLPresentationPrinter._print_setc                 C   s   | j d}|d jr&|d js&| j d}|| |d  || n
|| |d  |dd  D ]5}| j d}|| j | |jr\|js\| j d}|| | n| |}|| || q6|S )Nr;  r   r  rV   r=  )r;   r   
is_Booleanis_Notr   rF   rB   )r-   r   r1  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	|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   r2   r2   r3   <lambda>i  s    zAMathMLPresentationPrinter._print_BasisDependent.<locals>.<lambda>rA  rV   r=  r  r   r  r  r  )sympy.vectorrG  zerorF   r  separater:  r;   r   rY   
componentsr[   r   r   rB   )r-   rJ   rG  r:  r;  systemvect
inneritemsr   kvr=  mbracr2   r2   r3   _print_BasisDependent[  sF   







z/MathMLPresentationPrinter._print_BasisDependentc                 C      t |jtd}| |dS )NrA  z&#x2227;rC  r   r   rF  r-   rJ   r   r2   r2   r3   
_print_And     z$MathMLPresentationPrinter._print_Andc                 C   rU  )NrA  z&#x2228;rV  rW  r2   r2   r3   	_print_Or  rY  z#MathMLPresentationPrinter._print_Orc                 C   rU  )NrA  z&#x22BB;rV  rW  r2   r2   r3   r    rY  z$MathMLPresentationPrinter._print_Xorc                 C   s   |  |jdS )Nz&#x21D2;)rF  r   r  r2   r2   r3   r    s   z(MathMLPresentationPrinter._print_Impliesc                 C   rU  )NrA  z&#x21D4;rV  rW  r2   r2   r3   _print_Equivalent  rY  z+MathMLPresentationPrinter._print_Equivalentc                 C   s   | j d}| j d}|| j d || |jd jr2| j d}|| |jd  n| |jd }|| |S )Nr;  r=  z&#xAC;r   r  )r;   r   r   rB   r   rD  rF   )r-   r   r;  r=  r   r2   r2   r3   r    s   

z$MathMLPresentationPrinter._print_Notc                 C   (   | j d}|| j | | |S Nr>  r;   r   r   rB   r   r-   r   r>  r2   r2   r3   _print_bool     z%MathMLPresentationPrinter._print_boolc                 C   r\  r]  r^  r_  r2   r2   r3   _print_NoneType  ra  z)MathMLPresentationPrinter._print_NoneTypec                 C   s,  d}| j d}|dd |dd |jjr0|jjr0|jjr(|ddd	|f}nF|d	dd|f}n>|jjrA||d |j |d f}n-|jjrSt|}t	|t	||f}nt
|d
krjt|}t	|t	|||d f}nt|}|D ]#}||kr| j d}|| j | || qp|| | qp|S )Nu   …r  r  r  r  r  r   r   rV      r>  )r;   r   r  r!  is_infinitestopstepis_positiveiternextr^   tupler   rB   rF   )r-   rF  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 )NrA  r;  r=  r  )rC  r   r   r;   r   r   rB   r  funcr   rF   )r-   rJ   r   r;  r=  r  r1  r2   r2   r3   _hprint_variadic_function  s   

z3MathMLPresentationPrinter._hprint_variadic_functionc                 C   s6   | j d}|| d  || |jd  |S )NrW  r   )r;   r   r   r  rF   r   )r-   rJ   rW  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   rF   rv  rB   r   rw  r-   r   r;  r   r2   r2   r3   rx    s   
z+MathMLPresentationPrinter._print_Relationalc                 C   rc  r:   rd  r~  r2   r2   r3   r    rf  z$MathMLPresentationPrinter._print_intc                 C   s   | j d}|j\}}| j d}|dd || j |j|  || | j d}|dd || j |j || |S )NrV  r>  r  r  )r;   r   _idr  r   rB   _variable_names_name)r-   r   rV  indexrN  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 )NrV  moverr>  r  r  r=  ^)r;   r   rt  r  r   rB   _vector_namesrv  )r-   r   rV  rw  rN  ry  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 )Nry  r>  r  r  r  r=  rz  r;   r   r  r   rB   )r-   r   ry  r>  r=  r2   r2   r3   _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=  r2   r2   r3   _print_Cross     
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=  r2   r2   r3   _print_Curl)     

z%MathMLPresentationPrinter._print_Curlc                 C   r  )Nr;  r=  r  r   r   r  r  r2   r2   r3   _print_Divergence4  r  z+MathMLPresentationPrinter._print_Divergencec                 C   r  )Nr;  r   r=  r   r  r  r2   r2   r3   
_print_Dot?  r  z$MathMLPresentationPrinter._print_Dotc                 C   P   | j d}| j d}|| j d || || |jtd  |S )Nr;  r=  r  r   r  r  r2   r2   r3   _print_GradientJ     
z)MathMLPresentationPrinter._print_Gradientc                 C   r  )Nr;  r=  r<  r   r  r  r2   r2   r3   _print_LaplacianR  r  z*MathMLPresentationPrinter._print_Laplacianc                 C   .   | j d}|dd || j d |S )Nr>  r  normalz&#x2124;r}  r  r2   r2   r3   _print_IntegersZ     z)MathMLPresentationPrinter._print_Integersc                 C   r  )Nr>  r  r  z&#x2102;r}  r  r2   r2   r3   _print_Complexes`  r  z*MathMLPresentationPrinter._print_Complexesc                 C   r  )Nr>  r  r  z&#x211D;r}  r  r2   r2   r3   _print_Realsf  r  z&MathMLPresentationPrinter._print_Realsc                 C   r  )Nr>  r  r  &#x2115;r}  r  r2   r2   r3   _print_Naturalsl  r  z)MathMLPresentationPrinter._print_Naturalsc                 C   sV   | j d}| j d}|dd || j d || || tj |S )NrV  r>  r  r  r  )r;   r   r  r   rB   rF   r   Zero)r-   r   rP  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   rV   r
  rW  r  r  r  r  r  )r   r;   r   r  r   rF   )r-   rJ   shiftrx   rK  r  r2   r2   r3   _print_SingularityFunction{  s   

z4MathMLPresentationPrinter._print_SingularityFunctionc                 C   r  )Nr>  NaNr  r  r2   r2   r3   r!    r  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 ]
}|| | qA|| || |S )NrV  r>  r   rV   r;  r  )r;   r   r   rB   rF   r   r^   )r-   r   rQ  rP  r>  r;  r  r   r2   r2   r3   _print_number_function  s   


z0MathMLPresentationPrinter._print_number_functionc                 C      |  |dS )NBr  r  r2   r2   r3   _print_bernoulli  r  z*MathMLPresentationPrinter._print_bernoullic                 C   r  )Nr  r  r  r2   r2   r3   _print_catalan  r  z(MathMLPresentationPrinter._print_catalanc                 C   r  )NEr  r  r2   r2   r3   _print_euler  r  z&MathMLPresentationPrinter._print_eulerc                 C   r  )NFr  r  r2   r2   r3   _print_fibonacci  r  z*MathMLPresentationPrinter._print_fibonaccic                 C   r  )NLr  r  r2   r2   r3   _print_lucas  r  z&MathMLPresentationPrinter._print_lucasc                 C   r  )Nz&#x03B3;r  r  r2   r2   r3   _print_stieltjes  r  z*MathMLPresentationPrinter._print_stieltjesc                 C   r  )NTr  r  r2   r2   r3   _print_tribonacci  r  z+MathMLPresentationPrinter._print_tribonaccic                 C   s`   | j d}| j d}|| j d || | j d}|| j d || |S )Nry  r=  r  ~r  )r-   r   r   r=  r2   r2   r3   _print_ComplexInfinity  s   

z0MathMLPresentationPrinter._print_ComplexInfinityc                 C   r  )Nr=  z&#x2205;r  r  r2   r2   r3   r#    r  z)MathMLPresentationPrinter._print_EmptySetc                 C   r  )Nr=  z	&#x1D54C;r  r  r2   r2   r3   _print_UniversalSet  r  z-MathMLPresentationPrinter._print_UniversalSetc                 C      ddl m} |j}| jd}t||s(| jd}|| | || n|| | | jd}|| jd || |S )Nr   r   rW  r  r=  r  	sympy.matricesr   r   r;   r   r  r   rF   rB   r-   rJ   r   matrK  r  r=  r2   r2   r3   _print_Adjoint     

z(MathMLPresentationPrinter._print_Adjointc                 C   r  )Nr   r  rW  r  r=  r  r  r  r2   r2   r3   _print_Transpose  r  z*MathMLPresentationPrinter._print_Transposec                 C   st   ddl m} |j}| jd}t||s(| jd}|| | || n|| | || d |S )Nr   r  rW  r  r   )r  r   r   r;   r   r  r   rF   )r-   rJ   r   r  rK  r  r2   r2   r3   _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;  rV   r   r=  r  Fr  )!sympy.matrices.expressions.matmulr  r;   r   r   r  r   r   rY   r   r   rB   r  r
   )r-   rJ   r  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||s,| jd}|| | || n|| | || | |S )Nr   r  rW  r  )	r  r   r_  r]  r;   r   r  r   rF   )r-   rJ   r   r_  r]  rK  r  r2   r2   r3   _print_MatPow  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=  r2   r2   r3   _print_HadamardProduct  s   z0MathMLPresentationPrinter._print_HadamardProductc                 C   r  )Nr  z&#x1D7D8r  r-   Zr   r2   r2   r3   _print_ZeroMatrix,  r  z+MathMLPresentationPrinter._print_ZeroMatrixc                 C   r  )Nr  z&#x1D7D9r  r  r2   r2   r3   _print_OneMatrix1  r  z*MathMLPresentationPrinter._print_OneMatrixc                 C   r  )Nr>  z	&#x1D540;r  )r-   r/  r   r2   r2   r3   _print_Identity6  r  z)MathMLPresentationPrinter._print_Identityc                 C   T   | j d}| j d}|dd |dd || |jd  || |S )Nr;  r  r  u   ⌋r  u   ⌊r   r  rs  r2   r2   r3   _print_floor;  r(  z&MathMLPresentationPrinter._print_floorc                 C   r  )Nr;  r  r  u   ⌉r  u   ⌈r   r  rs  r2   r2   r3   _print_ceilingD  r(  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   rV   r=  z&#x21A6;)r;   r   r   r^   rF   r   rB   )r-   r   r   r;  symbolsr=  r2   r2   r3   _print_LambdaM  s   




z'MathMLPresentationPrinter._print_Lambdac                 C   ry  r  rz  )r-   r   r   r   r2   r2   r3   _print_tuple]  s   z&MathMLPresentationPrinter._print_tuplec                 C   r?  r:   )rF   labelr  r2   r2   r3   _print_IndexedBasec  r  z,MathMLPresentationPrinter._print_IndexedBasec                 C   s\   | j d}|| |j t|jdkr#|| |jd  |S || |j |S )NrV  rV   r   )r;   r   r   rF   r_  r^   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 ]
}|| | q)|| |S )	NrV  AtomTr  r  r  r(   r  )	r;   r   r   r  parentr   r  r  rF   )r-   r   r   r  r   r2   r2   r3   _print_MatrixElemento  s   

z.MathMLPresentationPrinter._print_MatrixElementc                 C   v   | j d}| j d}|| j d || | j d}|dd |jD ]
}|| | q)|| |S )Nr;  r>  z	&#x1d5a5;r  
separatorsr&  r;   r   r   rB   r  r   rF   r-   r   r   r>  r  r   r2   r2   r3   _print_elliptic_fz     


z+MathMLPresentationPrinter._print_elliptic_fc                 C   r  )Nr;  r>  z	&#x1d5a4;r  r  r&  r  r  r2   r2   r3   _print_elliptic_e  r  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 ]
}|| | q7|| |S )	Nr;  r>  z	&#x1d6f1;r  r
  r  r&  z;|)r;   r   r   rB   r^   r   r  rF   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   ~   | j d}| j d}| j d}|| j d || || |jd  || || |jdd   |S )Nr;  rV  r=  r  r   rV   r  r-   r   r   r  r=  r2   r2   r3   _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;  rX  r=  Pr   rV   r)  r  r  r2   r2   r3   _print_jacobi     

z'MathMLPresentationPrinter._print_jacobic                 C   r  )Nr;  rX  r=  r  r   rV   r
  r  r  r2   r2   r3   _print_gegenbauer  r  z+MathMLPresentationPrinter._print_gegenbauerc                 C   r  )Nr;  rV  r=  r  r   rV   r  r  r2   r2   r3   _print_chebyshevt  r  z+MathMLPresentationPrinter._print_chebyshevtc                 C   r  )Nr;  rV  r=  Ur   rV   r  r  r2   r2   r3   _print_chebyshevu  r  z+MathMLPresentationPrinter._print_chebyshevuc                 C   r  )Nr;  rV  r=  r  r   rV   r  r  r2   r2   r3   _print_legendre  r  z)MathMLPresentationPrinter._print_legendrec                 C   r  )Nr;  rX  r=  r  r   rV   r
  r  r  r2   r2   r3   _print_assoc_legendre  r  z/MathMLPresentationPrinter._print_assoc_legendrec                 C   r  )Nr;  rV  r=  r  r   rV   r  r  r2   r2   r3   _print_laguerre  r  z)MathMLPresentationPrinter._print_laguerrec                 C   r  )Nr;  rX  r=  r  r   rV   r
  r  r  r2   r2   r3   _print_assoc_laguerre  r  z/MathMLPresentationPrinter._print_assoc_laguerrec                 C   r  )Nr;  rV  r=  Hr   rV   r  r  r2   r2   r3   _print_hermite  r  z(MathMLPresentationPrinter._print_hermite)Fr:   )r   )r6   r7   r8   rj   r  r   r  r   r   r  r  r  r  r  r  r  r  r  r(  r  r  r  r  r  r  r  r  r3  r4  rZ  r  r  r  r  r  r  r  rb  re  r  rp  rs  rk  r  rt  r  r%  r'  _print_Determinantr*  r.  r0  ru  r3  r7  r9  r  r=  r  r  r@  _print_frozensetrF  rT  rX  rZ  r  r  r[  r  r`  r%  r'  rb  ro  rq  
_print_Min
_print_Maxrr  rx  r  rx  r|  r~  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  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2   r2   r2   r3   r  C  s   L	/		&6	60'			* 		
			r  contentc                 K   s$   |dkrt || S t|| S )zReturns the MathML representation of expr. If printer is presentation
    then prints Presentation MathML else prints content MathML.
    presentation)r  rO   rl   )rJ   printerrC   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)r  rl   rF   r   rh   toprettyxmlri   print)rJ   r  rC   rF  xml
pretty_xmlr2   r2   r3   print_mathml'  s   
r  N)r  )$rj   typingr   r   tDict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   rg  r   rl   r  r  r  MathMLPrinterr2   r2   r2   r3   <module>   s@    k   G           d

&