U
    L?hO1  ã                i   @  sV  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	„ d/fgd0d	„ d1fgd2d	„ d3fgd4d	„ d5fgd6d	„ d7fgd8d	„ d9fgd:d	„ d;f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	„ dGfgdId	„ dJfgdKd	„ dLfgdMd	„ dNfgdOd	„ dPfgdQd	„ dNf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dad	„ dbfgdcd	„ ddfgded	„ dffgdgd	„ dhfgdid	„ djfgdkd	„ dlfgdmd	„ dnfgdod	„ dpfgdqd	„ drfgdsd	„ dtfgdud	„ dvfgdwd	„ dxfgdyd	„ dzfgd{d	„ d|fgd}d	„ d~fgdd	„ d~fgd€d	„ df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dd	„ df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	„ df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Ðd	„ dÑfgdÒœhZ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   úL/var/www/html/venv/lib/python3.8/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   0   r   c                 C  s   dS r
   r   r   r   r   r   r   1   r   ZErfcc                 C  s   dS r
   r   r   r   r   r   r   2   r   ZErfic                 C  s   dS r
   r   r   r   r   r   r   3   r   Z
InverseErfc                 C  s   dS r
   r   r   r   r   r   r   4   r   ZInverseErfcc                  G  s   dS r
   r   r   r   r   r   r   5   r   c                  G  s   dS r
   r   r   r   r   r   r   6   r   ZExpIntegralEc                 C  s   dS r
   r   r   r   r   r   r   7   r   ZExpIntegralEic                 C  s   dS r
   r   r   r   r   r   r   8   r   ZFresnelCc                 C  s   dS r
   r   r   r   r   r   r   9   r   ZFresnelSc                 C  s   dS r
   r   r   r   r   r   r   :   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   A   r   ZCoshIntegralc                 C  s   dS r
   r   r   r   r   r   r   B   r   ZSinhIntegralc                 C  s   dS r
   r   r   r   r   r   r   C   r   ZLogIntegralc                 C  s   dS r
   r   r   r   r   r   r   D   r   Z	Factorialc                 C  s   dS r
   r   r   r   r   r   r   E   r   Z
Factorial2c                 C  s   dS r
   r   r   r   r   r   r   F   r   ZSubfactorialc                 C  s   dS r
   r   r   r   r   r   r   G   r   ZCatalanNumberc                  G  s   dS r
   r   r   r   r   r   r   H   r   ZHarmonicNumberc                 C  s   dS r
   r   r   r   r   r   r   I   r   ZLucasLc                  G  s   dS r
   r   r   r   r   r   r   J   r   Z
Pochhammerc                  G  s   dS r
   r   r   r   r   r   r   K   r   ZFactorialPowerc                  G  s   dS r
   r   r   r   r   r   r   L   r   Z	LaguerreLc                  G  s   dS r
   r   r   r   r   r   r   M   r   c                  G  s   dS r
   r   r   r   r   r   r   N   r   ZHermiteHc                  G  s   dS r
   r   r   r   r   r   r   O   r   ZJacobiPc                  G  s   dS r
   r   r   r   r   r   r   P   r   ZGegenbauerCc                  G  s   dS r
   r   r   r   r   r   r   Q   r   Z
ChebyshevTc                  G  s   dS r
   r   r   r   r   r   r   R   r   Z
ChebyshevUc                  G  s   dS r
   r   r   r   r   r   r   S   r   Z	LegendrePc                  G  s   dS r
   r   r   r   r   r   r   T   r   c                  G  s   dS r
   r   r   r   r   r   r   U   r   ZMathieuCc                  G  s   dS r
   r   r   r   r   r   r   V   r   ZMathieuSc                  G  s   dS r
   r   r   r   r   r   r   W   r   ZMathieuCPrimec                  G  s   dS r
   r   r   r   r   r   r   X   r   ZMathieuSPrimec                 C  s   dS r
   r   r   r   r   r   r   Y   r   ZStieltjesGammac                  G  s   dS r
   r   r   r   r   r   r   Z   r   Z	EllipticEc                  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	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   a   r   ZBesselIc                  G  s   dS r
   r   r   r   r   r   r   b   r   ZBesselJc                  G  s   dS r
   r   r   r   r   r   r   c   r   ZBesselKc                  G  s   dS r
   r   r   r   r   r   r   d   r   ZBesselYc                  G  s   dS r
   r   r   r   r   r   r   e   r   ZHankelH1c                  G  s   dS r
   r   r   r   r   r   r   f   r   ZHankelH2c                 C  s   dS r
   r   r   r   r   r   r   g   r   ZAiryAic                 C  s   dS r
   r   r   r   r   r   r   h   r   ZAiryBic                 C  s   dS r
   r   r   r   r   r   r   i   r   ZAiryAiPrimec                 C  s   dS r
   r   r   r   r   r   r   j   r   ZAiryBiPrimec                  G  s   dS r
   r   r   r   r   r   r   k   r   ZPolyLogc                  G  s   dS r
   r   r   r   r   r   r   l   r   ZLerchPhic                  G  s   dS r
   r   r   r   r   r   r   m   r   ZGCDc                  G  s   dS r
   r   r   r   r   r   r   n   r   ZLCMc                  G  s   dS r
   r   r   r   r   r   r   o   r   ZSphericalBesselJc                  G  s   dS r
   r   r   r   r   r   r   p   r   ZSphericalBesselYc                  G  s   dS r
   r   r   r   r   r   r   q   r   ZHypergeometricPFQc                  G  s   dS r
   r   r   r   r   r   r   r   r   ZMeijerGc                  G  s   dS r
   r   r   r   r   r   r   s   r   ZAppellF1c                 C  s   dS r
   r   r   r   r   r   r   t   r   Ú
DiracDeltac                 C  s   dS r
   r   r   r   r   r   r   u   r   ZHeavisideThetac                  G  s   dS r
   r   r   r   r   r   r   v   r   ÚKroneckerDeltac                 C  s   dS r
   r   r   r   r   r   r   w   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                      sb  e Zd ZU dZdZdZeejf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.‡  Z/S )JÚMCodePrinterz]A printer to convert Python expressions to
    strings of the Wolfram's Mathematica code
    Z_mcodezWolfram Languageé   )Ú	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>¢   s     z*MCodePrinter._print_Mul.<locals>.<genexpr>)r	   Zargs_cncÚsuperÚ
_print_MulÚfuncÚjoin)rD   rM   ÚcÚ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   rf   r   r   r   Ú
_print_One¯   s    zMCodePrinter._print_Onec                 C  s   dS )Nz-1r   rf   r   r   r   Ú_print_NegativeOne²   s    zMCodePrinter._print_NegativeOnec                 C  s   dS )Nz1/2r   rf   r   r   r   Ú_print_Halfµ   s    zMCodePrinter._print_Halfc                 C  s   dS )NÚIr   rf   r   r   r   Ú_print_ImaginaryUnit¸   s    z!MCodePrinter._print_ImaginaryUnitc                 C  s   dS )NÚInfinityr   rf   r   r   r   Ú_print_Infinity½   s    zMCodePrinter._print_Infinityc                 C  s   dS )Nz	-Infinityr   rf   r   r   r   Ú_print_NegativeInfinityÀ   s    z$MCodePrinter._print_NegativeInfinityc                 C  s   dS )NZComplexInfinityr   rf   r   r   r   Ú_print_ComplexInfinityÃ   s    z#MCodePrinter._print_ComplexInfinityc                 C  s   dS )NZIndeterminater   rf   r   r   r   Ú
_print_NaNÆ   s    zMCodePrinter._print_NaNc                 C  s   dS )NÚEr   rf   r   r   r   Ú_print_Exp1Ë   s    zMCodePrinter._print_Exp1c                 C  s   dS )NÚPir   rf   r   r   r   Ú	_print_PiÎ   s    zMCodePrinter._print_Pic                 C  s   dS )NZGoldenRatior   rf   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   rf   r   r   r   Ú_print_EulerGammaÙ   s    zMCodePrinter._print_EulerGammac                 C  s   dS )NZCatalanr   rf   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   á   s     z+MCodePrinter._print_list.<locals>.<genexpr>Ú}©rY   rf   r   r   r   Ú_print_listà   s    zMCodePrinter._print_listc                 C  s   |   | ¡ ¡S rH   ©r€   Útolistrf   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   é   ©rb   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   ñ   s     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[{}, {}]©rb   ©rD   rM   r‘   r•   r   )rM   rŽ   rD   r   Ú_print_ImmutableSparseMatrixè   s    z)MCodePrinter._print_ImmutableSparseMatrixc                 C  s   |   | ¡ ¡S rH   r…   rf   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   þ   s     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     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 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krPˆ j|j j }|D ],\}}||jŽ r d|ˆ  |jd¡f   S q 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]r~   c                 3  s   | ]}ˆ   |¡V  qd S rH   )Ú
_can_print)rR   Úfr   r   r   rU   3  s     z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rX   Ú__name__r=   rŸ   Ú	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Ÿ   rb   r_   rf   r   r   r   Ú_print_LambertW9  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 rH   r   rQ   r   r   r   rU   D  s     z/MCodePrinter._print_Integral.<locals>.<genexpr>ú]])rª   Ú	variablesZlimitsrŸ   rY   )rD   rM   rŸ   r   r   r   Ú_print_Integral?  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   G  s     z*MCodePrinter._print_Sum.<locals>.<genexpr>r¬   )rY   rŸ   rf   r   r   r   Ú
_print_SumF  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¢   K  s     z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[r~   c                 3  s   | ]}ˆ   |¡V  qd S rH   r   rQ   r   r   r   rU   L  s     z1MCodePrinter._print_Derivative.<locals>.<genexpr>r¬   )rM   Zvariable_countrY   )rD   rM   ZdexprZdvarsr   r   r   Ú_print_DerivativeI  s    zMCodePrinter._print_Derivativec                 C  s
   d  |¡S )Nz(* {} *)r—   )rD   Útextr   r   r   Ú_get_commentO  s    zMCodePrinter._get_comment)0r¦   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodÚlanguager<   r   r8   Ú__annotations__Úsetr9   r:   r;   rJ   rO   rW   rd   rg   ri   rj   rk   rm   ro   rp   rq   rr   rt   rv   rw   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   r4   {   sV   
þ
	.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   r€   )rM   rE   r   r   r   Úmathematica_codeS  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=   r4   rº   r   r   r   r   Ú<module>   sä   ˜l Y