U
    ˜9%e1  ã                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   úY/var/www/html/Darija-Ai-API/env/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                      s`  e Zd ZU dZdZdZdddi dd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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ ZeZ eZ!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&e&Z'dDdE„ Z(dFdG„ Z)dHdI„ Z*dJdK„ Z+dLdM„ Z,‡  Z-S )NÚ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_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 userr9   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>¦   s     z*MCodePrinter._print_Mul.<locals>.<genexpr>)r	   Zargs_cncÚsuperÚ
_print_MulÚfuncÚjoin)rF   rO   ÚcÚ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   rh   r   r   r   Ú
_print_One³   s    zMCodePrinter._print_Onec                 C  s   dS )Nz-1r   rh   r   r   r   Ú_print_NegativeOne¶   s    zMCodePrinter._print_NegativeOnec                 C  s   dS )Nz1/2r   rh   r   r   r   Ú_print_Half¹   s    zMCodePrinter._print_Halfc                 C  s   dS )NÚIr   rh   r   r   r   Ú_print_ImaginaryUnit¼   s    z!MCodePrinter._print_ImaginaryUnitc                 C  s   dS )NÚInfinityr   rh   r   r   r   Ú_print_InfinityÁ   s    zMCodePrinter._print_Infinityc                 C  s   dS )Nz	-Infinityr   rh   r   r   r   Ú_print_NegativeInfinityÄ   s    z$MCodePrinter._print_NegativeInfinityc                 C  s   dS )NZComplexInfinityr   rh   r   r   r   Ú_print_ComplexInfinityÇ   s    z#MCodePrinter._print_ComplexInfinityc                 C  s   dS )NZIndeterminater   rh   r   r   r   Ú
_print_NaNÊ   s    zMCodePrinter._print_NaNc                 C  s   dS )NÚEr   rh   r   r   r   Ú_print_Exp1Ï   s    zMCodePrinter._print_Exp1c                 C  s   dS )NÚPir   rh   r   r   r   Ú	_print_PiÒ   s    zMCodePrinter._print_Pic                 C  s   dS )NZGoldenRatior   rh   r   r   r   Ú_print_GoldenRatioÕ   s    zMCodePrinter._print_GoldenRatioc                 C  s    |j dd}t|ƒ}|  ||¡S )NT)rZ   )Úexpandr	   rM   )rF   rO   ÚexpandedrP   r   r   r   Ú_print_TribonacciConstantØ   s    z&MCodePrinter._print_TribonacciConstantc                 C  s   dS )NZ
EulerGammar   rh   r   r   r   Ú_print_EulerGammaÝ   s    zMCodePrinter._print_EulerGammac                 C  s   dS )NZCatalanr   rh   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   å   s     z+MCodePrinter._print_list.<locals>.<genexpr>Ú}©r[   rh   r   rƒ   r   Ú_print_listä   s    zMCodePrinter._print_listc                 C  s   |   | ¡ ¡S rJ   ©r‚   Útolistrh   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   é   ©rd   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   õ   s     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[{}, {}]©rd   ©rF   rO   r“   r—   r   )rO   r   rF   r   Ú_print_ImmutableSparseMatrixì   s    z)MCodePrinter._print_ImmutableSparseMatrixc                 C  s   |   | ¡ ¡S rJ   r‡   rh   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     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   ©rT   Úir   r   r   rW     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)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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 rJ   )Ú
_can_print)rT   Úfrƒ   r   r   rW   7  s     z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rZ   Ú__name__r?   r¡   Ú	stringifyZ_rewriteable_functionsr¦   Úallra   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¡   rd   ra   rh   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   H  s     z/MCodePrinter._print_Integral.<locals>.<genexpr>ú]])r¬   Ú	variablesZlimitsr¡   r[   )rF   rO   r¡   r   rƒ   r   Ú_print_IntegralC  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   K  s     z*MCodePrinter._print_Sum.<locals>.<genexpr>r®   )r[   r¡   rh   r   rƒ   r   Ú
_print_SumJ  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¤   O  s     z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[r€   c                 3  s   | ]}ˆ   |¡V  qd S rJ   r   rS   rƒ   r   r   rW   P  s     z1MCodePrinter._print_Derivative.<locals>.<genexpr>r®   )rO   Zvariable_countr[   )rF   rO   ZdexprZdvarsr   rƒ   r   Ú_print_DerivativeM  s    zMCodePrinter._print_Derivativec                 C  s
   d  |¡S )Nz(* {} *)r™   )rF   Útextr   r   r   Ú_get_commentS  s    zMCodePrinter._get_comment).r¨   Ú
__module__Ú__qualname__Ú__doc__ZprintmethodÚlanguager:   Ú__annotations__Úsetr;   r<   r=   rL   rQ   rY   rf   ri   rk   rl   rm   ro   rq   rr   rs   rt   rv   rx   ry   r|   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   {   s\   
ú	
	.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‚   )rO   rG   r   r   r   Úmathematica_codeW  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 ]