B
    e‹dÃ1  ã            i   @   sV  d Z ddlmZmZmZmZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd„ d	fgd
d„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgdd„ dfgd d„ d!fgd"d„ d#fgd$d„ dfgd%d„ d&fgd'd„ d(fgd)d„ d*fgd+d„ d,fgd-d„ d.fgd/d„ d0fgd1d„ d2fgd3d„ d4fgd5d„ d6fgd7d„ d8fgd9d„ d:fgd;d„ d<fgd=d„ d>fgd?d„ d@fgdAd„ dBfgdCd„ dDfgdEd„ dFfgdGd„ dFfgdHd„ dIfgdJd„ dKfgdLd„ dMfgdNd„ dOfgdPd„ dMfgdQd„ dRfgdSd„ dTfgdUd„ dVfgdWd„ dXfgdYd„ dZfgd[d„ dZfgd\d„ d]fgd^d„ d_fgd`d„ dafgdbd„ dcfgddd„ defgdfd„ dgfgdhd„ difgdjd„ dkfgdld„ dmfgdnd„ dofgdpd„ dqfgdrd„ dsfgdtd„ dufgdvd„ dwfgdxd„ dyfgdzd„ d{fgd|d„ d}fgd~d„ d}fgdd„ d€fgdd„ d‚fgdƒd„ d„fgd…d„ d†fgd‡d„ dˆfgd‰d„ dŠfgd‹d„ dŠfgdŒd„ dfgdŽd„ dfgdd„ d‘fgd’d„ d“fgd”d„ d•fgd–d„ d—fgd˜d„ d—fgd™d„ dšfgd›d„ dœfgdd„ džfgdŸd„ d fgd¡d„ d¢fgd£d„ d¤fgd¥d„ d¦fgd§d„ d¨fgd©d„ dªfgd«d„ d¬fgd­d„ d®fgd¯d„ d°fgd±d„ d²fgd³d„ d´fgdµd„ d¶fgd·d„ d¸fgd¹d„ dºfgd»d„ d¼fgd½d„ d¾fgd¿d„ dÀfgdÁd„ dÂfgdÃd„ dÄfgdÅd„ dÆfgdÇd„ dÈfgdÉd„ dÊfgdËd„ dÌfgdÍd„ dÎfgdÏd„ dÐfgdÑœhZG dÒdÓ„ dÓeƒZdÔdÕ„ ZdÖS )×z
Mathematica code printer
é    )ÚAnyÚDictÚSetÚTuple)ÚBasicÚExprÚFloat)Údefault_sort_key)ÚCodePrinter)Ú
precedencec             C   s   dS )NT© )Úxr   r   úg/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/sympy/printing/mathematica.pyÚ<lambda>   ó    r   ZExpc             C   s   dS )NTr   )r   r   r   r   r      r   ÚLogc             C   s   dS )NTr   )r   r   r   r   r      r   ZSinc             C   s   dS )NTr   )r   r   r   r   r      r   ZCosc             C   s   dS )NTr   )r   r   r   r   r      r   ZTanc             C   s   dS )NTr   )r   r   r   r   r      r   ZCotc             C   s   dS )NTr   )r   r   r   r   r      r   ZSecc             C   s   dS )NTr   )r   r   r   r   r      r   ZCscc             C   s   dS )NTr   )r   r   r   r   r      r   ZArcSinc             C   s   dS )NTr   )r   r   r   r   r      r   ZArcCosc             C   s   dS )NTr   )r   r   r   r   r      r   ZArcTanc             C   s   dS )NTr   )r   r   r   r   r      r   ZArcCotc             C   s   dS )NTr   )r   r   r   r   r      r   ZArcSecc             C   s   dS )NTr   )r   r   r   r   r      r   ZArcCscc              G   s   dS )NTr   )r   r   r   r   r      r   c             C   s   dS )NTr   )r   r   r   r   r      r   ZSinhc             C   s   dS )NTr   )r   r   r   r   r      r   ZCoshc             C   s   dS )NTr   )r   r   r   r   r       r   ZTanhc             C   s   dS )NTr   )r   r   r   r   r   !   r   ZCothc             C   s   dS )NTr   )r   r   r   r   r   "   r   ZSechc             C   s   dS )NTr   )r   r   r   r   r   #   r   ZCschc             C   s   dS )NTr   )r   r   r   r   r   $   r   ZArcSinhc             C   s   dS )NTr   )r   r   r   r   r   %   r   ZArcCoshc             C   s   dS )NTr   )r   r   r   r   r   &   r   ZArcTanhc             C   s   dS )NTr   )r   r   r   r   r   '   r   ZArcCothc             C   s   dS )NTr   )r   r   r   r   r   (   r   ZArcSechc             C   s   dS )NTr   )r   r   r   r   r   )   r   ZArcCschc             C   s   dS )NTr   )r   r   r   r   r   *   r   ZSincc             C   s   dS )NTr   )r   r   r   r   r   +   r   Z	Conjugatec              G   s   dS )NTr   )r   r   r   r   r   ,   r   ÚMaxc              G   s   dS )NTr   )r   r   r   r   r   -   r   ÚMinc             C   s   dS )NTr   )r   r   r   r   r   .   r   ZErfc              G   s   dS )NTr   )r   r   r   r   r   /   r   c             C   s   dS )NTr   )r   r   r   r   r   0   r   ZErfcc             C   s   dS )NTr   )r   r   r   r   r   1   r   ZErfic             C   s   dS )NTr   )r   r   r   r   r   2   r   Z
InverseErfc             C   s   dS )NTr   )r   r   r   r   r   3   r   ZInverseErfcc              G   s   dS )NTr   )r   r   r   r   r   4   r   c              G   s   dS )NTr   )r   r   r   r   r   5   r   ZExpIntegralEc             C   s   dS )NTr   )r   r   r   r   r   6   r   ZExpIntegralEic             C   s   dS )NTr   )r   r   r   r   r   7   r   ZFresnelCc             C   s   dS )NTr   )r   r   r   r   r   8   r   ZFresnelSc             C   s   dS )NTr   )r   r   r   r   r   9   r   ÚGammac              G   s   dS )NTr   )r   r   r   r   r   :   r   c              G   s   dS )NTr   )r   r   r   r   r   ;   r   Z	PolyGammac             C   s   dS )NTr   )r   r   r   r   r   <   r   ZLogGammac              G   s   dS )NTr   )r   r   r   r   r   =   r   ÚBetac             C   s   dS )NTr   )r   r   r   r   r   >   r   ZCosIntegralc             C   s   dS )NTr   )r   r   r   r   r   ?   r   ZSinIntegralc             C   s   dS )NTr   )r   r   r   r   r   @   r   ZCoshIntegralc             C   s   dS )NTr   )r   r   r   r   r   A   r   ZSinhIntegralc             C   s   dS )NTr   )r   r   r   r   r   B   r   ZLogIntegralc             C   s   dS )NTr   )r   r   r   r   r   C   r   Z	Factorialc             C   s   dS )NTr   )r   r   r   r   r   D   r   Z
Factorial2c             C   s   dS )NTr   )r   r   r   r   r   E   r   ZSubfactorialc             C   s   dS )NTr   )r   r   r   r   r   F   r   ZCatalanNumberc              G   s   dS )NTr   )r   r   r   r   r   G   r   ZHarmonicNumberc             C   s   dS )NTr   )r   r   r   r   r   H   r   ZLucasLc              G   s   dS )NTr   )r   r   r   r   r   I   r   Z
Pochhammerc              G   s   dS )NTr   )r   r   r   r   r   J   r   ZFactorialPowerc              G   s   dS )NTr   )r   r   r   r   r   K   r   Z	LaguerreLc              G   s   dS )NTr   )r   r   r   r   r   L   r   c              G   s   dS )NTr   )r   r   r   r   r   M   r   ZHermiteHc              G   s   dS )NTr   )r   r   r   r   r   N   r   ZJacobiPc              G   s   dS )NTr   )r   r   r   r   r   O   r   ZGegenbauerCc              G   s   dS )NTr   )r   r   r   r   r   P   r   Z
ChebyshevTc              G   s   dS )NTr   )r   r   r   r   r   Q   r   Z
ChebyshevUc              G   s   dS )NTr   )r   r   r   r   r   R   r   Z	LegendrePc              G   s   dS )NTr   )r   r   r   r   r   S   r   c              G   s   dS )NTr   )r   r   r   r   r   T   r   ZMathieuCc              G   s   dS )NTr   )r   r   r   r   r   U   r   ZMathieuSc              G   s   dS )NTr   )r   r   r   r   r   V   r   ZMathieuCPrimec              G   s   dS )NTr   )r   r   r   r   r   W   r   ZMathieuSPrimec             C   s   dS )NTr   )r   r   r   r   r   X   r   ZStieltjesGammac              G   s   dS )NTr   )r   r   r   r   r   Y   r   Z	EllipticEc              G   s   dS )NTr   )r   r   r   r   r   Z   r   c             C   s   dS )NTr   )r   r   r   r   r   [   r   Z	EllipticKc              G   s   dS )NTr   )r   r   r   r   r   \   r   Z
EllipticPic              G   s   dS )NTr   )r   r   r   r   r   ]   r   ÚZetac             C   s   dS )NTr   )r   r   r   r   r   ^   r   ZDirichletEtac             C   s   dS )NTr   )r   r   r   r   r   _   r   Z	RiemannXic              G   s   dS )NTr   )r   r   r   r   r   `   r   ZBesselIc              G   s   dS )NTr   )r   r   r   r   r   a   r   ZBesselJc              G   s   dS )NTr   )r   r   r   r   r   b   r   ZBesselKc              G   s   dS )NTr   )r   r   r   r   r   c   r   ZBesselYc              G   s   dS )NTr   )r   r   r   r   r   d   r   ZHankelH1c              G   s   dS )NTr   )r   r   r   r   r   e   r   ZHankelH2c             C   s   dS )NTr   )r   r   r   r   r   f   r   ZAiryAic             C   s   dS )NTr   )r   r   r   r   r   g   r   ZAiryBic             C   s   dS )NTr   )r   r   r   r   r   h   r   ZAiryAiPrimec             C   s   dS )NTr   )r   r   r   r   r   i   r   ZAiryBiPrimec              G   s   dS )NTr   )r   r   r   r   r   j   r   ZPolyLogc              G   s   dS )NTr   )r   r   r   r   r   k   r   ZLerchPhic              G   s   dS )NTr   )r   r   r   r   r   l   r   ZGCDc              G   s   dS )NTr   )r   r   r   r   r   m   r   ZLCMc              G   s   dS )NTr   )r   r   r   r   r   n   r   ZSphericalBesselJc              G   s   dS )NTr   )r   r   r   r   r   o   r   ZSphericalBesselYc              G   s   dS )NTr   )r   r   r   r   r   p   r   ZHypergeometricPFQc              G   s   dS )NTr   )r   r   r   r   r   q   r   ZMeijerGc              G   s   dS )NTr   )r   r   r   r   r   r   r   ZAppellF1c             C   s   dS )NTr   )r   r   r   r   r   s   r   Ú
DiracDeltac             C   s   dS )NTr   )r   r   r   r   r   t   r   ZHeavisideThetac              G   s   dS )NTr   )r   r   r   r   r   u   r   ÚKroneckerDeltac             C   s   dS )NTr   )r   r   r   r   r   v   r   ZSqrt)hÚexpÚlogÚsinÚcosÚtanZcotÚsecZcscÚasinÚacosÚatanZacotZasecZacscÚatan2ÚsinhÚcoshÚtanhZcothZsechZcschÚasinhÚacoshÚatanhZacothZasechZacschZsincÚ	conjugater   r   ÚerfZerf2ÚerfcZerfiZerfinvZerfcinvZerf2invZexpintZEiZfresnelcZfresnelsÚgammaZ
uppergammaZ	polygammaZloggammaÚbetaZCiZSiÚChiZShiZliÚ	factorialZ
factorial2ZsubfactorialÚcatalanZharmonicZlucasZRisingFactorialZFallingFactorialZlaguerreZassoc_laguerreZhermiteZjacobiZ
gegenbauerZ
chebyshevtZ
chebyshevuZlegendreZassoc_legendreZmathieucZmathieusZmathieucprimeZmathieusprimeZ	stieltjesZ
elliptic_eZ
elliptic_fZ
elliptic_kZelliptic_piÚzetaZdirichlet_etaZ
riemann_xiZbesseliZbesseljZbesselkZbesselyZhankel1Zhankel2ZairyaiZairybiZairyaiprimeZairybiprimeZpolylogZlerchphiÚgcdZlcmZjnZynZhyperZmeijergZappellf1r   Z	Heavisider   Úsqrtc                   sF  e Zd ZdZdZdZdddi ddd	œZeƒ Zeƒ Z	i fd
d„Z
dd„ Zdd„ Z‡ f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d0d1„ Zd2d3„ ZeZeZ d4d5„ Z!d6d7„ Z"d8d9„ Z#d:d;„ Z$d<d=„ Z%e%Z&d>d?„ Z'd@dA„ Z(dBdC„ Z)dDdE„ Z*dFdG„ Z+‡  Z,S )HÚMCodePrinterz]A printer to convert Python expressions to
    strings of the Wolfram's Mathematica code
    Z_mcodezWolfram LanguageNÚautoé   TF)ÚorderZ	full_precÚ	precisionÚuser_functionsZhumanZallow_unknown_functionsc             C   sh   t  | |¡ ttƒ| _| di ¡ ¡ }x0| ¡ D ]$\}}t|tƒs0dd„ |fg||< q0W | j 	|¡ dS )z+Register function mappings supplied by userr9   c              W   s   dS )NTr   )r   r   r   r   r   ”   r   z'MCodePrinter.__init__.<locals>.<lambda>N)
r
   Ú__init__ÚdictÚknown_functionsÚgetÚcopyÚitemsÚ
isinstanceÚlistÚupdate)ÚselfÚsettingsZ	userfuncsÚkÚvr   r   r   r:      s    

zMCodePrinter.__init__c             C   s   |S )Nr   )rC   Úlinesr   r   r   Ú_format_code—   s    zMCodePrinter._format_codec             C   s(   t |ƒ}d|  |j|¡|  |j|¡f S )Nz%s^%s)r   ÚparenthesizeÚbaser   )rC   ÚexprÚPRECr   r   r   Ú
_print_Powš   s    zMCodePrinter._print_Powc                sT   t |ƒ‰ | ¡ \}}tƒ  |j|Ž ¡}|rP|d7 }|d ‡ ‡fdd„|D ƒ¡7 }|S )NÚ*z**c             3   s   | ]}ˆ  |ˆ ¡V  qd S )N)rI   )Ú.0Úa)rL   rC   r   r   ú	<genexpr>¥   s    z*MCodePrinter._print_Mul.<locals>.<genexpr>)r   Zargs_cncÚsuperÚ
_print_MulÚfuncÚjoin)rC   rK   ÚcÚncÚres)Ú	__class__)rL   rC   r   rS   Ÿ   s    zMCodePrinter._print_Mulc             C   s,   |   |j¡}|   |j¡}|j}d |||¡S )Nz{} {} {})Ú_printÚlhsÚrhsZrel_opÚformat)rC   rK   Zlhs_codeZrhs_codeÚopr   r   r   Ú_print_Relational¨   s    zMCodePrinter._print_Relationalc             C   s   dS )NÚ0r   )rC   rK   r   r   r   Ú_print_Zero¯   s    zMCodePrinter._print_Zeroc             C   s   dS )NÚ1r   )rC   rK   r   r   r   Ú
_print_One²   s    zMCodePrinter._print_Onec             C   s   dS )Nz-1r   )rC   rK   r   r   r   Ú_print_NegativeOneµ   s    zMCodePrinter._print_NegativeOnec             C   s   dS )Nz1/2r   )rC   rK   r   r   r   Ú_print_Half¸   s    zMCodePrinter._print_Halfc             C   s   dS )NÚIr   )rC   rK   r   r   r   Ú_print_ImaginaryUnit»   s    z!MCodePrinter._print_ImaginaryUnitc             C   s   dS )NÚInfinityr   )rC   rK   r   r   r   Ú_print_InfinityÀ   s    zMCodePrinter._print_Infinityc             C   s   dS )Nz	-Infinityr   )rC   rK   r   r   r   Ú_print_NegativeInfinityÃ   s    z$MCodePrinter._print_NegativeInfinityc             C   s   dS )NZComplexInfinityr   )rC   rK   r   r   r   Ú_print_ComplexInfinityÆ   s    z#MCodePrinter._print_ComplexInfinityc             C   s   dS )NZIndeterminater   )rC   rK   r   r   r   Ú
_print_NaNÉ   s    zMCodePrinter._print_NaNc             C   s   dS )NÚEr   )rC   rK   r   r   r   Ú_print_Exp1Î   s    zMCodePrinter._print_Exp1c             C   s   dS )NÚPir   )rC   rK   r   r   r   Ú	_print_PiÑ   s    zMCodePrinter._print_Pic             C   s   dS )NZGoldenRatior   )rC   rK   r   r   r   Ú_print_GoldenRatioÔ   s    zMCodePrinter._print_GoldenRatioc             C   s    |j dd}t|ƒ}|  ||¡S )NT)rT   )Úexpandr   rI   )rC   rK   ÚexpandedrL   r   r   r   Ú_print_TribonacciConstant×   s    z&MCodePrinter._print_TribonacciConstantc             C   s   dS )NZ
EulerGammar   )rC   rK   r   r   r   Ú_print_EulerGammaÜ   s    zMCodePrinter._print_EulerGammac             C   s   dS )NZCatalanr   )rC   rK   r   r   r   Ú_print_Catalanß   s    zMCodePrinter._print_Catalanc                s    dd  ‡ fdd„|D ƒ¡ d S )NÚ{z, c             3   s   | ]}ˆ   |¡V  qd S )N)Údoprint)rO   rP   )rC   r   r   rQ   ä   s    z+MCodePrinter._print_list.<locals>.<genexpr>Ú})rU   )rC   rK   r   )rC   r   Ú_print_listã   s    zMCodePrinter._print_listc             C   s   |   | ¡ ¡S )N)rx   Útolist)rC   rK   r   r   r   Ú_print_ImmutableDenseMatrixè   s    z(MCodePrinter._print_ImmutableDenseMatrixc                s8   ‡fdd„‰‡ ‡fdd„}‡ ‡fdd„}d  |ƒ |ƒ ¡S )Nc                s,   d  ˆ  | d d | d d f¡ˆ  |¡¡S )Nz{} -> {}r   é   )r]   rx   )ÚposÚval)rC   r   r   Ú
print_ruleí   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_rulec                 s4   t ˆ  ¡  ¡ td} dd ‡fdd„| D ƒ¡ d S )N)Úkeyrw   z, c             3   s   | ]\}}ˆ ||ƒV  qd S )Nr   )rO   rE   rF   )r€   r   r   rQ   ô   s    zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>ry   )ÚsortedZtodokr?   r	   rU   )r?   )rK   r€   r   r   Ú
print_datañ   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                  s   ˆ  ˆ j¡S )N)rx   Úshaper   )rK   rC   r   r   Ú
print_dims÷   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimszSparseArray[{}, {}])r]   )rC   rK   rƒ   r…   r   )rK   r€   rC   r   Ú_print_ImmutableSparseMatrixë   s    z)MCodePrinter._print_ImmutableSparseMatrixc             C   s   |   | ¡ ¡S )N)rx   r{   )rC   rK   r   r   r   Ú_print_ImmutableDenseNDimArrayü   s    z+MCodePrinter._print_ImmutableDenseNDimArrayc                sL   dd„ ‰dd„ ‰‡fdd„‰‡ ‡‡‡fdd„}‡ ‡fd	d
„}d  |ƒ |ƒ ¡S )Nc             S   s   dd  dd„ | D ƒ¡ d S )Nrw   z, c             s   s   | ]
}|V  qd S )Nr   )rO   rP   r   r   r   rQ     s    zZMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_string_list.<locals>.<genexpr>ry   )rU   )Zstring_listr   r   r   Úprint_string_list   s    zGMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_string_listc              W   s   t dd„ | D ƒƒS )z¾Helper function to change Python style indexing to
            Pathematica indexing.

            Python indexing (0, 1 ... n-1)
            -> Mathematica indexing (1, 2 ... n)
            c             s   s   | ]}|d  V  qdS )r}   Nr   )rO   Úir   r   r   rQ   
  s    z]MCodePrinter._print_ImmutableSparseNDimArray.<locals>.to_mathematica_index.<locals>.<genexpr>)Útuple)Úargsr   r   r   Úto_mathematica_index  s    zJMCodePrinter._print_ImmutableSparseNDimArray.<locals>.to_mathematica_indexc                s   d  ˆ  | ¡ˆ  |¡¡S )z.Helper function to print a rule of Mathematicaz{} -> {})r]   rx   )r~   r   )rC   r   r   r€     s    z@MCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_rulec                  s$   ˆ‡ ‡‡fdd„t ˆ j ¡ ƒD ƒƒS )a/  Helper function to print data part of Mathematica
            sparse array.

            It uses the fourth notation ``SparseArray[data,{d1,d2,...}]``
            from
            https://reference.wolfram.com/language/ref/SparseArray.html

            ``data`` must be formatted with rule.
            c                s$   g | ]\}}ˆˆˆ   |¡Ž |ƒ‘qS r   )Z_get_tuple_index)rO   r   Úvalue)rK   r€   rŒ   r   r   ú
<listcomp>  s   zTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r‚   Z_sparse_arrayr?   r   )rK   r€   rˆ   rŒ   r   r   rƒ     s    
z@MCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_datac                  s   ˆ  ˆ j¡S )a  Helper function to print dimensions part of Mathematica
            sparse array.

            It uses the fourth notation ``SparseArray[data,{d1,d2,...}]``
            from
            https://reference.wolfram.com/language/ref/SparseArray.html
            )rx   r„   r   )rK   rC   r   r   r…   !  s    z@MCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_dimszSparseArray[{}, {}])r]   )rC   rK   rƒ   r…   r   )rK   r€   rˆ   rC   rŒ   r   Ú_print_ImmutableSparseNDimArrayÿ   s    	
z,MCodePrinter._print_ImmutableSparseNDimArrayc                sº   |j jˆ jkrPˆ j|j j }x‚|D ](\}}||jŽ r"d|ˆ  |jd¡f S q"W nP|j jˆ jkr ˆ j|j j \}}ˆ  |¡r t‡ fdd„|D ƒƒr ˆ  | 	|¡¡S |j jdˆ  |jd¡  S )Nz%s[%s]z, c             3   s   | ]}ˆ   |¡V  qd S )N)Ú
_can_print)rO   Úf)rC   r   r   rQ   6  s    z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rT   Ú__name__r<   r‹   Ú	stringifyZ_rewriteable_functionsr   ÚallrZ   Zrewrite)rC   rK   Z
cond_mfuncZcondZmfuncZtarget_fZrequired_fsr   )rC   r   Ú_print_Function-  s    
 zMCodePrinter._print_Functionc             C   sH   t |jƒdkr$d |  |jd ¡¡S d |  |jd ¡|  |jd ¡¡S )Nr}   zProductLog[{}]r   zProductLog[{}, {}])Úlenr‹   r]   rZ   )rC   rK   r   r   r   Ú_print_LambertW<  s    zMCodePrinter._print_LambertWc                s\   t |jƒdkr6|jd dd … s6|jd |jd g}n|j}dd ‡ fdd„|D ƒ¡ d S )Nr}   r   zHold[Integrate[z, c             3   s   | ]}ˆ   |¡V  qd S )N)rx   )rO   rP   )rC   r   r   rQ   G  s    z/MCodePrinter._print_Integral.<locals>.<genexpr>z]])r–   Ú	variablesZlimitsr‹   rU   )rC   rK   r‹   r   )rC   r   Ú_print_IntegralB  s     zMCodePrinter._print_Integralc                s"   dd  ‡ fdd„|jD ƒ¡ d S )Nz	Hold[Sum[z, c             3   s   | ]}ˆ   |¡V  qd S )N)rx   )rO   rP   )rC   r   r   rQ   J  s    z*MCodePrinter._print_Sum.<locals>.<genexpr>z]])rU   r‹   )rC   rK   r   )rC   r   Ú
_print_SumI  s    zMCodePrinter._print_Sumc                s<   |j }dd„ |jD ƒ}dd ‡ fdd„|g| D ƒ¡ d S )Nc             S   s$   g | ]}|d  d kr|d n|‘qS )r}   r   r   )rO   r‰   r   r   r   rŽ   N  s    z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[z, c             3   s   | ]}ˆ   |¡V  qd S )N)rx   )rO   rP   )rC   r   r   rQ   O  s    z1MCodePrinter._print_Derivative.<locals>.<genexpr>z]])rK   Zvariable_countrU   )rC   rK   ZdexprZdvarsr   )rC   r   Ú_print_DerivativeL  s    zMCodePrinter._print_Derivativec             C   s
   d  |¡S )Nz(* {} *))r]   )rC   Útextr   r   r   Ú_get_commentR  s    zMCodePrinter._get_comment)-r’   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodÚlanguageZ_default_settingsÚsetZ_number_symbolsZ_not_supportedr:   rH   rM   rS   r_   ra   rc   rd   re   rg   ri   rj   rk   rl   rn   rp   rq   rt   ru   rv   rz   Z_print_tupleZ_print_Tupler|   r†   r‡   r   r•   Z_print_MinMaxBaser—   r™   rš   r›   r   Ú__classcell__r   r   )rY   r   r4   z   sZ   
	.r4   c             K   s   t |ƒ | ¡S )a  Converts an expr to a string of the Wolfram Mathematica code

    Examples
    ========

    >>> from sympy import mathematica_code as mcode, symbols, sin
    >>> x = symbols('x')
    >>> mcode(sin(x).series(x).removeO())
    '(1/120)*x^5 - 1/6*x^3 + x'
    )r4   rx   )rK   rD   r   r   r   Úmathematica_codeV  s    r¤   N)r    Útypingr   r   ZtDictr   ZtSetr   ZtTupleZ
sympy.corer   r   r   Zsympy.core.sortingr	   Zsympy.printing.codeprinterr
   Zsympy.printing.precedencer   r<   r4   r¤   r   r   r   r   Ú<module>   sà    ]