a
    Ÿ¬<bÃ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   új/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/printing/mathematica.pyÚ<lambda>   ó    r   ZExpc                 C   s   dS r   r   r   r   r   r   r      r   ÚLogc                 C   s   dS r   r   r   r   r   r   r      r   ZSinc                 C   s   dS r   r   r   r   r   r   r      r   ZCosc                 C   s   dS r   r   r   r   r   r   r      r   ZTanc                 C   s   dS r   r   r   r   r   r   r      r   ZCotc                 C   s   dS r   r   r   r   r   r   r      r   ZSecc                 C   s   dS r   r   r   r   r   r   r      r   ZCscc                 C   s   dS r   r   r   r   r   r   r      r   ZArcSinc                 C   s   dS r   r   r   r   r   r   r      r   ZArcCosc                 C   s   dS r   r   r   r   r   r   r      r   ZArcTanc                 C   s   dS r   r   r   r   r   r   r      r   ZArcCotc                 C   s   dS r   r   r   r   r   r   r      r   ZArcSecc                 C   s   dS r   r   r   r   r   r   r      r   ZArcCscc                  G   s   dS r   r   r   r   r   r   r      r   c                 C   s   dS r   r   r   r   r   r   r      r   ZSinhc                 C   s   dS r   r   r   r   r   r   r      r   ZCoshc                 C   s   dS r   r   r   r   r   r   r       r   ZTanhc                 C   s   dS r   r   r   r   r   r   r   !   r   ZCothc                 C   s   dS r   r   r   r   r   r   r   "   r   ZSechc                 C   s   dS r   r   r   r   r   r   r   #   r   ZCschc                 C   s   dS r   r   r   r   r   r   r   $   r   ZArcSinhc                 C   s   dS r   r   r   r   r   r   r   %   r   ZArcCoshc                 C   s   dS r   r   r   r   r   r   r   &   r   ZArcTanhc                 C   s   dS r   r   r   r   r   r   r   '   r   ZArcCothc                 C   s   dS r   r   r   r   r   r   r   (   r   ZArcSechc                 C   s   dS r   r   r   r   r   r   r   )   r   ZArcCschc                 C   s   dS r   r   r   r   r   r   r   *   r   ZSincc                 C   s   dS r   r   r   r   r   r   r   +   r   Z	Conjugatec                  G   s   dS r   r   r   r   r   r   r   ,   r   ÚMaxc                  G   s   dS r   r   r   r   r   r   r   -   r   ÚMinc                 C   s   dS r   r   r   r   r   r   r   .   r   ZErfc                  G   s   dS r   r   r   r   r   r   r   /   r   c                 C   s   dS r   r   r   r   r   r   r   0   r   ZErfcc                 C   s   dS r   r   r   r   r   r   r   1   r   ZErfic                 C   s   dS r   r   r   r   r   r   r   2   r   Z
InverseErfc                 C   s   dS r   r   r   r   r   r   r   3   r   ZInverseErfcc                  G   s   dS r   r   r   r   r   r   r   4   r   c                  G   s   dS r   r   r   r   r   r   r   5   r   ZExpIntegralEc                 C   s   dS r   r   r   r   r   r   r   6   r   ZExpIntegralEic                 C   s   dS r   r   r   r   r   r   r   7   r   ZFresnelCc                 C   s   dS r   r   r   r   r   r   r   8   r   ZFresnelSc                 C   s   dS r   r   r   r   r   r   r   9   r   ÚGammac                  G   s   dS r   r   r   r   r   r   r   :   r   c                  G   s   dS r   r   r   r   r   r   r   ;   r   Z	PolyGammac                 C   s   dS r   r   r   r   r   r   r   <   r   ZLogGammac                  G   s   dS r   r   r   r   r   r   r   =   r   ÚBetac                 C   s   dS r   r   r   r   r   r   r   >   r   ZCosIntegralc                 C   s   dS r   r   r   r   r   r   r   ?   r   ZSinIntegralc                 C   s   dS r   r   r   r   r   r   r   @   r   ZCoshIntegralc                 C   s   dS r   r   r   r   r   r   r   A   r   ZSinhIntegralc                 C   s   dS r   r   r   r   r   r   r   B   r   ZLogIntegralc                 C   s   dS r   r   r   r   r   r   r   C   r   Z	Factorialc                 C   s   dS r   r   r   r   r   r   r   D   r   Z
Factorial2c                 C   s   dS r   r   r   r   r   r   r   E   r   ZSubfactorialc                 C   s   dS r   r   r   r   r   r   r   F   r   ZCatalanNumberc                  G   s   dS r   r   r   r   r   r   r   G   r   ZHarmonicNumberc                 C   s   dS r   r   r   r   r   r   r   H   r   ZLucasLc                  G   s   dS r   r   r   r   r   r   r   I   r   Z
Pochhammerc                  G   s   dS r   r   r   r   r   r   r   J   r   ZFactorialPowerc                  G   s   dS r   r   r   r   r   r   r   K   r   Z	LaguerreLc                  G   s   dS r   r   r   r   r   r   r   L   r   c                  G   s   dS r   r   r   r   r   r   r   M   r   ZHermiteHc                  G   s   dS r   r   r   r   r   r   r   N   r   ZJacobiPc                  G   s   dS r   r   r   r   r   r   r   O   r   ZGegenbauerCc                  G   s   dS r   r   r   r   r   r   r   P   r   Z
ChebyshevTc                  G   s   dS r   r   r   r   r   r   r   Q   r   Z
ChebyshevUc                  G   s   dS r   r   r   r   r   r   r   R   r   Z	LegendrePc                  G   s   dS r   r   r   r   r   r   r   S   r   c                  G   s   dS r   r   r   r   r   r   r   T   r   ZMathieuCc                  G   s   dS r   r   r   r   r   r   r   U   r   ZMathieuSc                  G   s   dS r   r   r   r   r   r   r   V   r   ZMathieuCPrimec                  G   s   dS r   r   r   r   r   r   r   W   r   ZMathieuSPrimec                 C   s   dS r   r   r   r   r   r   r   X   r   ZStieltjesGammac                  G   s   dS r   r   r   r   r   r   r   Y   r   Z	EllipticEc                  G   s   dS r   r   r   r   r   r   r   Z   r   c                 C   s   dS r   r   r   r   r   r   r   [   r   Z	EllipticKc                  G   s   dS r   r   r   r   r   r   r   \   r   Z
EllipticPic                  G   s   dS r   r   r   r   r   r   r   ]   r   ÚZetac                 C   s   dS r   r   r   r   r   r   r   ^   r   ZDirichletEtac                 C   s   dS r   r   r   r   r   r   r   _   r   Z	RiemannXic                  G   s   dS r   r   r   r   r   r   r   `   r   ZBesselIc                  G   s   dS r   r   r   r   r   r   r   a   r   ZBesselJc                  G   s   dS r   r   r   r   r   r   r   b   r   ZBesselKc                  G   s   dS r   r   r   r   r   r   r   c   r   ZBesselYc                  G   s   dS r   r   r   r   r   r   r   d   r   ZHankelH1c                  G   s   dS r   r   r   r   r   r   r   e   r   ZHankelH2c                 C   s   dS r   r   r   r   r   r   r   f   r   ZAiryAic                 C   s   dS r   r   r   r   r   r   r   g   r   ZAiryBic                 C   s   dS r   r   r   r   r   r   r   h   r   ZAiryAiPrimec                 C   s   dS r   r   r   r   r   r   r   i   r   ZAiryBiPrimec                  G   s   dS r   r   r   r   r   r   r   j   r   ZPolyLogc                  G   s   dS r   r   r   r   r   r   r   k   r   ZLerchPhic                  G   s   dS r   r   r   r   r   r   r   l   r   ZGCDc                  G   s   dS r   r   r   r   r   r   r   m   r   ZLCMc                  G   s   dS r   r   r   r   r   r   r   n   r   ZSphericalBesselJc                  G   s   dS r   r   r   r   r   r   r   o   r   ZSphericalBesselYc                  G   s   dS r   r   r   r   r   r   r   p   r   ZHypergeometricPFQc                  G   s   dS r   r   r   r   r   r   r   q   r   ZMeijerGc                  G   s   dS r   r   r   r   r   r   r   r   r   ZAppellF1c                 C   s   dS r   r   r   r   r   r   r   s   r   Ú
DiracDeltac                 C   s   dS r   r   r   r   r   r   r   t   r   ZHeavisideThetac                  G   s   dS r   r   r   r   r   r   r   u   r   ÚKroneckerDeltac                 C   s   dS r   r   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ShiÚ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ÚgcdÚ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_precZ	precisionÚuser_functionsZhumanZallow_unknown_functionsc                 C   sd   t  | |¡ ttƒ| _| di ¡ ¡ }| ¡ D ]$\}}t|tƒs.dd„ |fg||< q.| j 	|¡ dS )z+Register function mappings supplied by userr<   c                  W   s   dS r   r   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   )rF   Úlinesr   r   r   Ú_format_code—   s    zMCodePrinter._format_codec                 C   s(   t |ƒ}d|  |j|¡|  |j|¡f S )Nz%s^%s)r   ÚparenthesizeÚbaser   )rF   Ú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 rJ   )rM   ©Ú.0Úa©rP   rF   r   r   Ú	<genexpr>¥   r   z*MCodePrinter._print_Mul.<locals>.<genexpr>)r   Zargs_cncÚsuperÚ
_print_MulÚfuncÚjoin)rF   rO   ÚcZncÚres©Ú	__class__rV   r   rY   Ÿ   s    zMCodePrinter._print_Mulc                 C   s,   |   |j¡}|   |j¡}|j}d |||¡S )Nz{} {} {})Ú_printÚlhsÚrhsZrel_opÚformat)rF   rO   Zlhs_codeZrhs_codeÚopr   r   r   Ú_print_Relational¨   s    zMCodePrinter._print_Relationalc                 C   s   dS )NÚ0r   ©rF   rO   r   r   r   Ú_print_Zero¯   s    zMCodePrinter._print_Zeroc                 C   s   dS )NÚ1r   rg   r   r   r   Ú
_print_One²   s    zMCodePrinter._print_Onec                 C   s   dS )Nz-1r   rg   r   r   r   Ú_print_NegativeOneµ   s    zMCodePrinter._print_NegativeOnec                 C   s   dS )Nz1/2r   rg   r   r   r   Ú_print_Half¸   s    zMCodePrinter._print_Halfc                 C   s   dS )NÚIr   rg   r   r   r   Ú_print_ImaginaryUnit»   s    z!MCodePrinter._print_ImaginaryUnitc                 C   s   dS )NÚInfinityr   rg   r   r   r   Ú_print_InfinityÀ   s    zMCodePrinter._print_Infinityc                 C   s   dS )Nz	-Infinityr   rg   r   r   r   Ú_print_NegativeInfinityÃ   s    z$MCodePrinter._print_NegativeInfinityc                 C   s   dS )NZComplexInfinityr   rg   r   r   r   Ú_print_ComplexInfinityÆ   s    z#MCodePrinter._print_ComplexInfinityc                 C   s   dS )NZIndeterminater   rg   r   r   r   Ú
_print_NaNÉ   s    zMCodePrinter._print_NaNc                 C   s   dS )NÚEr   rg   r   r   r   Ú_print_Exp1Î   s    zMCodePrinter._print_Exp1c                 C   s   dS )NÚPir   rg   r   r   r   Ú	_print_PiÑ   s    zMCodePrinter._print_Pic                 C   s   dS )NZGoldenRatior   rg   r   r   r   Ú_print_GoldenRatioÔ   s    zMCodePrinter._print_GoldenRatioc                 C   s    |j dd}t|ƒ}|  ||¡S )NT)rZ   )Úexpandr   rM   )rF   rO   ZexpandedrP   r   r   r   Ú_print_TribonacciConstant×   s    z&MCodePrinter._print_TribonacciConstantc                 C   s   dS )NZ
EulerGammar   rg   r   r   r   Ú_print_EulerGammaÜ   s    zMCodePrinter._print_EulerGammac                 C   s   dS )NZCatalanr   rg   r   r   r   Ú_print_Catalanß   s    zMCodePrinter._print_Catalanc                    s    dd  ‡ fdd„|D ƒ¡ d S )NÚ{ú, c                 3   s   | ]}ˆ   |¡V  qd S rJ   ©ÚdoprintrS   ©rF   r   r   rW   ä   r   z+MCodePrinter._print_list.<locals>.<genexpr>Ú}©r[   rg   r   r   r   Ú_print_listã   s    zMCodePrinter._print_listc                 C   s   |   | ¡ ¡S rJ   ©r€   Útolistrg   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 )Nú{} -> {}r   é   ©rc   r€   ©ÚposÚvalr   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)Úkeyr}   r~   c                 3   s   | ]\}}ˆ ||ƒV  qd S rJ   r   )rT   rH   rI   )rŽ   r   r   rW   ô   r   zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>r‚   )ÚsortedZtodokrB   r	   r[   )rB   )rO   rŽ   r   r   Ú
print_datañ   s    ÿþz=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                      s   ˆ  ˆ j¡S rJ   ©r€   Úshaper   ©rO   rF   r   r   Ú
print_dims÷   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimsúSparseArray[{}, {}]©rc   ©rF   rO   r‘   r•   r   )rO   rŽ   rF   r   Ú_print_ImmutableSparseMatrixë   s    z)MCodePrinter._print_ImmutableSparseMatrixc                 C   s   |   | ¡ ¡S rJ   r…   rg   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 )Nr}   r~   c                 s   s   | ]
}|V  qd S rJ   r   rS   r   r   r   rW     r   zZMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_string_list.<locals>.<genexpr>r‚   rƒ   )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   ©rT   Úir   r   r   rW   
  r   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 Mathematicarˆ   rŠ   r‹   r   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)rT   r   Úvalue)rO   rŽ   r    r   r   Ú
<listcomp>  s
   ýþzTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r   Z_sparse_arrayrB   r   )rO   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
            r’   r   r”   r   r   r•   !  s    z@MCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_dimsr–   r—   r˜   r   )rO   rŽ   r›   rF   r    r   Ú_print_ImmutableSparseNDimArrayÿ   s    	
z,MCodePrinter._print_ImmutableSparseNDimArrayc                    sº   |j jˆ jv rPˆ j|j j }|D ],\}}||jŽ r d|ˆ  |jd¡f   S q nP|j jˆ jv r ˆ j|j j \}}ˆ  |¡r t‡ fdd„|D ƒƒr ˆ  | 	|¡¡S |j jdˆ  |jd¡  S )Nz%s[%s]r~   c                 3   s   | ]}ˆ   |¡V  qd S rJ   )Ú
_can_print)rT   Úfr   r   r   rW   6  r   z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rZ   Ú__name__r?   rŸ   Z	stringifyZ_rewriteable_functionsr¤   Úallr`   Zrewrite)rF   rO   Z
cond_mfuncZcondZmfuncZtarget_fZrequired_fsr   r   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Ÿ   rc   r`   rg   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[r~   c                 3   s   | ]}ˆ   |¡V  qd S rJ   r   rS   r   r   r   rW   G  r   z/MCodePrinter._print_Integral.<locals>.<genexpr>ú]])r©   Ú	variablesZlimitsrŸ   r[   )rF   rO   rŸ   r   r   r   Ú_print_IntegralB  s     zMCodePrinter._print_Integralc                    s"   dd  ‡ fdd„|jD ƒ¡ d S )Nz	Hold[Sum[r~   c                 3   s   | ]}ˆ   |¡V  qd S rJ   r   rS   r   r   r   rW   J  r   z*MCodePrinter._print_Sum.<locals>.<genexpr>r«   )r[   rŸ   rg   r   r   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   rœ   r   r   r   r¢   N  r   z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[r~   c                 3   s   | ]}ˆ   |¡V  qd S rJ   r   rS   r   r   r   rW   O  r   z1MCodePrinter._print_Derivative.<locals>.<genexpr>r«   )rO   Zvariable_countr[   )rF   rO   ZdexprZdvarsr   r   r   Ú_print_DerivativeL  s    zMCodePrinter._print_Derivativec                 C   s
   d  |¡S )Nz(* {} *)r—   )rF   Útextr   r   r   Ú_get_commentR  s    zMCodePrinter._get_comment)-r¦   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodÚlanguageZ_default_settingsÚsetZ_number_symbolsZ_not_supportedr=   rL   rQ   rY   re   rh   rj   rk   rl   rn   rp   rq   rr   rs   ru   rw   rx   rz   r{   r|   r„   Z_print_tupleZ_print_Tupler‡   r™   rš   r£   r¨   Z_print_MinMaxBaserª   r­   r®   r¯   r±   Ú__classcell__r   r   r^   r   r8   z   s\   ú	
	.r8   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'
    )r8   r€   )rO   rG   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?   r8   r¸   r   r   r   r   Ú<module>   sâ   ˜l ]