o
    e1                     @  s  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 i dd	d
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 d fgd!d"d
 d#fgd$d%d
 d&fgd'd(d
 d)fgd*d+d
 d,fgd-d.d
 d/fgd0d1d
 d2fgd3d4d
 d)fgd5d6d
 d7fgd8d9d
 d:fgi d;d<d
 d=fgd>d?d
 d@fgdAdBd
 dCfgdDdEd
 dFfgdGdHd
 dIfgdJdKd
 dLfgdMdNd
 dOfgdPdQd
 dRfgdSdTd
 dUfgdVdWd
 dXfgdYdZd
 d[fgd\d]d
 d^fgd_d`d
 d_fgdadbd
 dafgdcddd
 defgdfdgd
 defgdhdid
 djfgi dkdld
 dmfgdndod
 dpfgdqdrd
 dsfgdtdud
 dpfgdvdwd
 dxfgdydzd
 d{fgd|d}d
 d~fgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgi ddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgi ddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgi dd d
 dfgddd
 dfgddd
 dfgdd	d
 d
fgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgddd
 dfgd d!d
 d"fgd#d$d
 d%fgd&d'd
 d(fgd)d*d
 d+fgd,d-d
 d,fgd.d/d
 d0fgd1d
 d2fgd3d
 d4fgd5ZG d6d7 d7eZd8d9 Zd:S (;  z
Mathematica code printer
    )annotations)Any)BasicExprFloat)default_sort_key)CodePrinter)
precedenceexpc                 C     dS NT xr   r   JD:\Projects\ConvertPro\env\Lib\site-packages\sympy/printing/mathematica.py<lambda>       r   ZExplogc                 C  r   r   r   r   r   r   r   r      r   ZLogsinc                 C  r   r   r   r   r   r   r   r      r   ZSincosc                 C  r   r   r   r   r   r   r   r      r   ZCostanc                 C  r   r   r   r   r   r   r   r      r   ZTanZcotc                 C  r   r   r   r   r   r   r   r      r   ZCotsecc                 C  r   r   r   r   r   r   r   r      r   ZSecZcscc                 C  r   r   r   r   r   r   r   r      r   ZCscasinc                 C  r   r   r   r   r   r   r   r      r   ZArcSinacosc                 C  r   r   r   r   r   r   r   r      r   ZArcCosatanc                 C  r   r   r   r   r   r   r   r      r   ZArcTanZacotc                 C  r   r   r   r   r   r   r   r      r   ZArcCotZasecc                 C  r   r   r   r   r   r   r   r      r   ZArcSecZacscc                 C  r   r   r   r   r   r   r   r      r   ZArcCscatan2c                  G  r   r   r   r   r   r   r   r      r   sinhc                 C  r   r   r   r   r   r   r   r      r   ZSinhcoshc                 C  r   r   r   r   r   r   r   r       r   ZCoshtanhc                 C  r   r   r   r   r   r   r   r   !   r   ZTanhZcothc                 C  r   r   r   r   r   r   r   r   "   r   ZCothZsechc                 C  r   r   r   r   r   r   r   r   #   r   ZSechZcschc                 C  r   r   r   r   r   r   r   r   $   r   ZCschasinhc                 C  r   r   r   r   r   r   r   r   %   r   ZArcSinhacoshc                 C  r   r   r   r   r   r   r   r   &   r   ZArcCoshatanhc                 C  r   r   r   r   r   r   r   r   '   r   ZArcTanhZacothc                 C  r   r   r   r   r   r   r   r   (   r   ZArcCothZasechc                 C  r   r   r   r   r   r   r   r   )   r   ZArcSechZacschc                 C  r   r   r   r   r   r   r   r   *   r   ZArcCschZsincc                 C  r   r   r   r   r   r   r   r   +   r   ZSinc	conjugatec                 C  r   r   r   r   r   r   r   r   ,   r   Z	ConjugateZMaxc                  G  r   r   r   r   r   r   r   r   -   r   ZMinc                  G  r   r   r   r   r   r   r   r   .   r   erfc                 C  r   r   r   r   r   r   r   r   /   r   ZErfZerf2c                  G  r   r   r   r   r   r   r   r   0   r   erfcc                 C  r   r   r   r   r   r   r   r   1   r   ZErfcZerfic                 C  r   r   r   r   r   r   r   r   2   r   ZErfiZerfinvc                 C  r   r   r   r   r   r   r   r   3   r   Z
InverseErfZerfcinvc                 C  r   r   r   r   r   r   r   r   4   r   ZInverseErfcZerf2invc                  G  r   r   r   r   r   r   r   r   5   r   Zexpintc                  G  r   r   r   r   r   r   r   r   6   r   ZExpIntegralEZEic                 C  r   r   r   r   r   r   r   r   7   r   ZExpIntegralEiZfresnelcc                 C  r   r   r   r   r   r   r   r   8   r   ZFresnelCZfresnelsc                 C  r   r   r   r   r   r   r   r   9   r   ZFresnelSgammac                 C  r   r   r   r   r   r   r   r   :   r   GammaZ
uppergammac                  G  r   r   r   r   r   r   r   r   ;   r   Z	polygammac                  G  r   r   r   r   r   r   r   r   <   r   Z	PolyGammaZloggammac                 C  r   r   r   r   r   r   r   r   =   r   ZLogGammabetac                  G  r   r   r   r   r   r   r   r   >   r   BetaZCic                 C  r   r   r   r   r   r   r   r   ?   r   ZCosIntegralZSic                 C  r   r   r   r   r   r   r   r   @   r   ZSinIntegralChic                 C  r   r   r   r   r   r   r   r   A   r   ZCoshIntegralZShic                 C  r   r   r   r   r   r   r   r   B   r   ZSinhIntegralZlic                 C  r   r   r   r   r   r   r   r   C   r   ZLogIntegral	factorialc                 C  r   r   r   r   r   r   r   r   D   r   Z	FactorialZ
factorial2c                 C  r   r   r   r   r   r   r   r   E   r   Z
Factorial2Zsubfactorialc                 C  r   r   r   r   r   r   r   r   F   r   ZSubfactorialcatalanc                 C  r   r   r   r   r   r   r   r   G   r   ZCatalanNumberZharmonicc                  G  r   r   r   r   r   r   r   r   H   r   ZHarmonicNumberZlucasc                 C  r   r   r   r   r   r   r   r   I   r   ZLucasLZRisingFactorialc                  G  r   r   r   r   r   r   r   r   J   r   Z
PochhammerZFallingFactorialc                  G  r   r   r   r   r   r   r   r   K   r   ZFactorialPowerZlaguerrec                  G  r   r   r   r   r   r   r   r   L   r   Z	LaguerreLZassoc_laguerrec                  G  r   r   r   r   r   r   r   r   M   r   Zhermitec                  G  r   r   r   r   r   r   r   r   N   r   ZHermiteHZjacobic                  G  r   r   r   r   r   r   r   r   O   r   ZJacobiPZ
gegenbauerc                  G  r   r   r   r   r   r   r   r   P   r   ZGegenbauerCZ
chebyshevtc                  G  r   r   r   r   r   r   r   r   Q   r   Z
ChebyshevTZ
chebyshevuc                  G  r   r   r   r   r   r   r   r   R   r   Z
ChebyshevUZlegendrec                  G  r   r   r   r   r   r   r   r   S   r   Z	LegendrePZassoc_legendrec                  G  r   r   r   r   r   r   r   r   T   r   Zmathieucc                  G  r   r   r   r   r   r   r   r   U   r   ZMathieuCZmathieusc                  G  r   r   r   r   r   r   r   r   V   r   ZMathieuSZmathieucprimec                  G  r   r   r   r   r   r   r   r   W   r   ZMathieuCPrimeZmathieusprimec                  G  r   r   r   r   r   r   r   r   X   r   ZMathieuSPrimeZ	stieltjesc                 C  r   r   r   r   r   r   r   r   Y   r   ZStieltjesGammaZ
elliptic_ec                  G  r   r   r   r   r   r   r   r   Z   r   Z	EllipticEZ
elliptic_fc                  G  r   r   r   r   r   r   r   r   [   r   Z
elliptic_kc                 C  r   r   r   r   r   r   r   r   \   r   Z	EllipticKZelliptic_pic                  G  r   r   r   r   r   r   r   r   ]   r   Z
EllipticPizetac                  G  r   r   r   r   r   r   r   r   ^   r   ZetaZdirichlet_etac                 C  r   r   r   r   r   r   r   r   _   r   ZDirichletEtaZ
riemann_xic                 C  r   r   r   r   r   r   r   r   `   r   Z	RiemannXiZbesselic                  G  r   r   r   r   r   r   r   r   a   r   ZBesselIZbesseljc                  G  r   r   r   r   r   r   r   r   b   r   ZBesselJZbesselkc                  G  r   r   r   r   r   r   r   r   c   r   ZBesselKZbesselyc                  G  r   r   r   r   r   r   r   r   d   r   ZBesselYZhankel1c                  G  r   r   r   r   r   r   r   r   e   r   ZHankelH1Zhankel2c                  G  r   r   r   r   r   r   r   r   f   r   ZHankelH2Zairyaic                 C  r   r   r   r   r   r   r   r   g   r   ZAiryAiZairybic                 C  r   r   r   r   r   r   r   r   h   r   ZAiryBiZairyaiprimec                 C  r   r   r   r   r   r   r   r   i   r   ZAiryAiPrimeZairybiprimec                 C  r   r   r   r   r   r   r   r   j   r   ZAiryBiPrimeZpolylogc                  G  r   r   r   r   r   r   r   r   k   r   ZPolyLogZlerchphic                  G  r   r   r   r   r   r   r   r   l   r   ZLerchPhigcdc                  G  r   r   r   r   r   r   r   r   m   r   ZGCDlcmc                  G  r   r   r   r   r   r   r   r   n   r   ZLCMZjnc                  G  r   r   r   r   r   r   r   r   o   r   ZSphericalBesselJZync                  G  r   r   r   r   r   r   r   r   p   r   ZSphericalBesselYZhyperc                  G  r   r   r   r   r   r   r   r   q   r   ZHypergeometricPFQZmeijergc                  G  r   r   r   r   r   r   r   r   r   r   ZMeijerGZappellf1c                  G  r   r   r   r   r   r   r   r   s   r   ZAppellF1Z
DiracDeltac                 C  r   r   r   r   r   r   r   r   t   r   Z	Heavisidec                 C  r   r   r   r   r   r   r   r   u   r   ZHeavisideThetac                  G  r   r   r   r   r   r   r   r   v   r   KroneckerDeltac                 C  r   r   r   r   r   r   r   r   w   r   ZSqrt)r0   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 userr7   c                  W  r   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      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| }|r(|d7 }|d fdd|D 7 }|S )N*z**c                 3  s    | ]	} | V  qd S rH   )rL   .0arO   rD   r   r   	<genexpr>   s    z*MCodePrinter._print_Mul.<locals>.<genexpr>)r	   Zargs_cncsuper
_print_Mulfuncjoin)rD   rN   cncres	__class__rU   r   rX      s   zMCodePrinter._print_Mulc                 C  s,   |  |j}|  |j}|j}d|||S )Nz{} {} {})_printlhsrhsZrel_opformat)rD   rN   Zlhs_codeZrhs_codeopr   r   r   _print_Relational   s   zMCodePrinter._print_Relationalc                 C  r   )N0r   rD   rN   r   r   r   _print_Zero   rK   zMCodePrinter._print_Zeroc                 C  r   )N1r   rg   r   r   r   
_print_One   rK   zMCodePrinter._print_Onec                 C  r   )Nz-1r   rg   r   r   r   _print_NegativeOne   rK   zMCodePrinter._print_NegativeOnec                 C  r   )Nz1/2r   rg   r   r   r   _print_Half   rK   zMCodePrinter._print_Halfc                 C  r   )NIr   rg   r   r   r   _print_ImaginaryUnit   rK   z!MCodePrinter._print_ImaginaryUnitc                 C  r   )NInfinityr   rg   r   r   r   _print_Infinity   rK   zMCodePrinter._print_Infinityc                 C  r   )Nz	-Infinityr   rg   r   r   r   _print_NegativeInfinity   rK   z$MCodePrinter._print_NegativeInfinityc                 C  r   )NZComplexInfinityr   rg   r   r   r   _print_ComplexInfinity   rK   z#MCodePrinter._print_ComplexInfinityc                 C  r   )NZIndeterminater   rg   r   r   r   
_print_NaN   rK   zMCodePrinter._print_NaNc                 C  r   )NEr   rg   r   r   r   _print_Exp1   rK   zMCodePrinter._print_Exp1c                 C  r   )NPir   rg   r   r   r   	_print_Pi   rK   zMCodePrinter._print_Pic                 C  r   )NZGoldenRatior   rg   r   r   r   _print_GoldenRatio   rK   zMCodePrinter._print_GoldenRatioc                 C  s    |j dd}t|}| ||S )NT)rY   )expandr	   rL   )rD   rN   expandedrO   r   r   r   _print_TribonacciConstant   s   z&MCodePrinter._print_TribonacciConstantc                 C  r   )NZ
EulerGammar   rg   r   r   r   _print_EulerGamma   rK   zMCodePrinter._print_EulerGammac                 C  r   )NZCatalanr   rg   r   r   r   _print_Catalan   rK   zMCodePrinter._print_Catalanc                   s    dd  fdd|D  d S )N{, c                 3      | ]}  |V  qd S rH   doprintrR   rD   r   r   rV          z+MCodePrinter._print_list.<locals>.<genexpr>}rZ   rg   r   r   r   _print_list   s    zMCodePrinter._print_listc                 C     |  | S rH   r   tolistrg   r   r   r   _print_ImmutableDenseMatrix      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 rH   r   )rS   rF   rG   )r   r   r   rV      s    zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>r   )sortedZtodokr@   r   rZ   )r@   )rN   r   r   r   
print_data   s   z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                          jS rH   r   shaper   rN   rD   r   r   
print_dims   s   z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimsSparseArray[{}, {}]rc   rD   rN   r   r   r   )rN   r   rD   r   _print_ImmutableSparseMatrix   s   z)MCodePrinter._print_ImmutableSparseMatrixc                 C  r   rH   r   rg   r   r   r   _print_ImmutableDenseNDimArray   r   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   rR   r   r   r   rV     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 )zHelper 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   rS   ir   r   r   rV     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)rS   r   value)rN   r   r   r   r   
<listcomp>  s    zTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r   Z_sparse_arrayr@   r   )rN   r   r   r   r   r   r     s
   
z@MCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_datac                     r   )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   )rN   r   r   rD   r   r   _print_ImmutableSparseNDimArray   s   	
z,MCodePrinter._print_ImmutableSparseNDimArrayc                   s   |j j jv r( j|j j }|D ]\}}||j r&d| |jdf   S qn(|j j jv rP j|j j \}} |rPt fdd|D rP |	|S |j jd |jd  S )Nz%s[%s]r   c                 3  r   rH   )
_can_print)rS   fr   r   r   rV   7  r   z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rY   __name__r=   r   	stringifyZ_rewriteable_functionsr   allr`   Zrewrite)rD   rN   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r|jd dd  s|jd |jd g}n|j}dd fdd|D  d S )Nr   r   zHold[Integrate[r   c                 3  r   rH   r   rR   r   r   r   rV   H  r   z/MCodePrinter._print_Integral.<locals>.<genexpr>]])r   	variablesZlimitsr   rZ   )rD   rN   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  r   rH   r   rR   r   r   r   rV   K  r   z*MCodePrinter._print_Sum.<locals>.<genexpr>r   )rZ   r   rg   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  r   rH   r   rR   r   r   r   rV   P  r   z1MCodePrinter._print_Derivative.<locals>.<genexpr>r   )rN   Zvariable_countrZ   )rD   rN   ZdexprZdvarsr   r   r   _print_DerivativeM  s   &zMCodePrinter._print_Derivativec                 C  s
   d |S )Nz(* {} *)r   )rD   textr   r   r   _get_commentS  s   
zMCodePrinter._get_comment).r   
__module____qualname____doc__Zprintmethodlanguager8   __annotations__setr9   r:   r;   rJ   rP   rX   re   rh   rj   rk   rl   rn   rp   rq   rr   rs   ru   rw   rx   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   r2   {   s^   
 	
	.r2   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'
    )r2   r   )rN   rE   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=   r2   r   r   r   r   r   <module>   s   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg
l ]