a
    kº”h°1  ã                h   @  sJ  d Z ddlmZ ddl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	„ 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ÑœgZG dÒdÓ„ dÓeƒZdÔdÕ„ ZdÖS )×z
Mathematica code printer
é    )Úannotations)ÚAny)ÚBasicÚExprÚFloat)Údefault_sort_key)ÚCodePrinter)Ú
precedencec                 C  s   dS ©NT© ©Úxr   r   úH/var/www/auris/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                 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)gÚexpÚlogÚsinÚcosÚtanZcotÚsecZcscÚasinÚacosÚatanZacotZasecZacscÚ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                      sn  e Zd ZU dZdZdZeejfi di dœ¤ŽZde	d< e
ƒ Zde	d	< e
ƒ Zd
e	d< 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d0d1„ Zd2d3„ Z d4d5„ Z!e!Z"e!Z#d6d7„ Z$d8d9„ Z%d:d;„ Z&d<d=„ Z'd>d?„ Z(e(Z)d@dA„ Z*dBdC„ Z+dDdE„ Z,dFdG„ Z-dHdI„ Z.dJdK„ Z/‡  Z0S )LÚMCodePrinterz]A printer to convert Python expressions to
    strings of the Wolfram's Mathematica code
    Z_mcodezWolfram Languageé   )Z	precisionÚuser_functionszdict[str, Any]Ú_default_settingszset[tuple[Expr, Float]]Ú_number_symbolsz
set[Basic]Ú_not_supportedc                 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 userr7   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   )rD   Úlinesr   r   r   Ú_format_code“   s    zMCodePrinter._format_codec                 C  s(   t |ƒ}d|  |j|¡|  |j|¡f S )Nz%s^%s)r	   ÚparenthesizeÚbaser   )rD   Ú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 rH   )rK   ©Ú.0Úa©rN   rD   r   r   Ú	<genexpr>¡   r   z*MCodePrinter._print_Mul.<locals>.<genexpr>)r	   Zargs_cncÚsuperÚ
_print_MulÚfuncÚjoin)rD   rM   ÚcZncÚres©Ú	__class__rT   r   rW   ›   s    zMCodePrinter._print_Mulc                 C  s,   |   |j¡}|   |j¡}|j}d |||¡S )Nz{} {} {})Ú_printÚlhsÚrhsZrel_opÚformat)rD   rM   Zlhs_codeZrhs_codeÚopr   r   r   Ú_print_Relational¤   s    zMCodePrinter._print_Relationalc                 C  s   dS )NÚ0r   ©rD   rM   r   r   r   Ú_print_Zero«   s    zMCodePrinter._print_Zeroc                 C  s   dS )NÚ1r   re   r   r   r   Ú
_print_One®   s    zMCodePrinter._print_Onec                 C  s   dS )Nz-1r   re   r   r   r   Ú_print_NegativeOne±   s    zMCodePrinter._print_NegativeOnec                 C  s   dS )Nz1/2r   re   r   r   r   Ú_print_Half´   s    zMCodePrinter._print_Halfc                 C  s   dS )NÚIr   re   r   r   r   Ú_print_ImaginaryUnit·   s    z!MCodePrinter._print_ImaginaryUnitc                 C  s   dS )NÚInfinityr   re   r   r   r   Ú_print_Infinity¼   s    zMCodePrinter._print_Infinityc                 C  s   dS )Nz	-Infinityr   re   r   r   r   Ú_print_NegativeInfinity¿   s    z$MCodePrinter._print_NegativeInfinityc                 C  s   dS )NZComplexInfinityr   re   r   r   r   Ú_print_ComplexInfinityÂ   s    z#MCodePrinter._print_ComplexInfinityc                 C  s   dS )NZIndeterminater   re   r   r   r   Ú
_print_NaNÅ   s    zMCodePrinter._print_NaNc                 C  s   dS )NÚEr   re   r   r   r   Ú_print_Exp1Ê   s    zMCodePrinter._print_Exp1c                 C  s   dS )NÚPir   re   r   r   r   Ú	_print_PiÍ   s    zMCodePrinter._print_Pic                 C  s   dS )NZGoldenRatior   re   r   r   r   Ú_print_GoldenRatioÐ   s    zMCodePrinter._print_GoldenRatioc                 C  s    |j dd}t|ƒ}|  ||¡S )NT)rX   )Úexpandr	   rK   )rD   rM   ÚexpandedrN   r   r   r   Ú_print_TribonacciConstantÓ   s    z&MCodePrinter._print_TribonacciConstantc                 C  s   dS )NZ
EulerGammar   re   r   r   r   Ú_print_EulerGammaØ   s    zMCodePrinter._print_EulerGammac                 C  s   dS )NZCatalanr   re   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 rH   ©ÚdoprintrQ   ©rD   r   r   rU   à   r   z+MCodePrinter._print_list.<locals>.<genexpr>Ú}©rY   re   r   r€   r   Ú_print_listß   s    zMCodePrinter._print_listc                 C  s   |   | ¡ ¡S rH   ©r   Útolistre   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   é   ©ra   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 rH   r   )rR   rF   rG   )r   r   r   rU   ð   r   zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>r   )ÚsortedZtodokr@   r   rY   )r@   )rM   r   r   r   Ú
print_dataí   s    ÿþz=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                     s   ˆ  ˆ j¡S rH   ©r   Úshaper   ©rM   rD   r   r   Ú
print_dimsó   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimsúSparseArray[{}, {}]©ra   ©rD   rM   r   r”   r   )rM   r   rD   r   Ú_print_ImmutableSparseMatrixç   s    z)MCodePrinter._print_ImmutableSparseMatrixc                 C  s   |   | ¡ ¡S rH   r„   re   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 rH   r   rQ   r   r   r   rU   ý   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   ©rR   Úir   r   r   rU     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)rR   rŽ   Úvalue)rM   r   rŸ   r   r   Ú
<listcomp>  s
   ýþzTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r   Z_sparse_arrayr@   r   )rM   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   )rM   r   rš   rD   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 rH   )Ú
_can_print)rR   Úfr€   r   r   rU   2  r   z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rX   Ú__name__r=   rž   Z	stringifyZ_rewriteable_functionsr£   Úallr^   Zrewrite)rD   rM   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ž   ra   r^   re   r   r   r   Ú_print_LambertW8  s
    ÿzMCodePrinter._print_LambertWc                 C  s$   d  |  |jd ¡|  |jd ¡¡S )NzArcTan[{}, {}]rˆ   r   )ra   r^   rž   re   r   r   r   Ú_print_atan2>  s    ÿzMCodePrinter._print_atan2c                   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 rH   r~   rQ   r€   r   r   rU   G  r   z/MCodePrinter._print_Integral.<locals>.<genexpr>ú]])r¨   Ú	variablesZlimitsrž   rY   )rD   rM   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 rH   r~   rQ   r€   r   r   rU   J  r   z*MCodePrinter._print_Sum.<locals>.<genexpr>r«   )rY   rž   re   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 rH   r~   rQ   r€   r   r   rU   O  r   z1MCodePrinter._print_Derivative.<locals>.<genexpr>r«   )rM   Zvariable_countrY   )rD   rM   ZdexprZdvarsr   r€   r   Ú_print_DerivativeL  s    zMCodePrinter._print_Derivativec                 C  s
   d  |¡S )Nz(* {} *)r–   )rD   Útextr   r   r   Ú_get_commentR  s    zMCodePrinter._get_comment)1r¥   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodÚlanguager<   r   r8   Ú__annotations__Úsetr9   r:   r;   rJ   rO   rW   rc   rf   rh   ri   rj   rl   rn   ro   rp   rq   rs   ru   rv   ry   rz   r{   rƒ   Z_print_tupleZ_print_Tupler†   r˜   r™   r¢   r§   Z_print_MinMaxBaser©   rª   r­   r®   r¯   r±   Ú__classcell__r   r   r\   r   r5   z   sX   

þ
	.r5   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'
    )r5   r   )rM   rE   r   r   r   Úmathematica_codeV  s    r¹   N)r´   Ú
__future__r   Útypingr   Z
sympy.corer   r   r   Zsympy.core.sortingr   Zsympy.printing.codeprinterr   Zsympy.printing.precedencer	   r=   r5   r¹   r   r   r   r   Ú<module>   sâ   ™k ]