o
    GZh1                     @  sr  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
 d5fgd6d7d
 d8fgd9d:d
 d;fgi d<d=d
 d>fgd?d@d
 dAfgdBdCd
 dDfgdEdFd
 dGfgdHdId
 dJfgdKdLd
 dMfgdNdOd
 dPfgdQdRd
 dSfgdTdUd
 dVfgdWdXd
 dYfgdZd[d
 d\fgd]d^d
 d]fgd_d`d
 d_fgdadbd
 dcfgddded
 dcfgdfdgd
 dhfgdidjd
 dkfgi dldmd
 dnfgdodpd
 dqfgdrdsd
 dnfgdtdud
 dvfgdwdxd
 dyfgdzd{d
 d|fgd}d~d
 df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 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/d0d
 d/fgd1d2d
 d3fgiZG d4d5 d5eZd6d7 Zd8S (9  z
Mathematica code printer
    )annotations)Any)BasicExprFloat)default_sort_key)CodePrinter)
precedenceexpc                 C     dS NT xr   r   I/var/www/auris/lib/python3.10/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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   /   r   erfcc                 C  r   r   r   r   r   r   r   r   0   r   ZErfcZerfic                 C  r   r   r   r   r   r   r   r   1   r   ZErfiZerfinvc                 C  r   r   r   r   r   r   r   r   2   r   Z
InverseErfZerfcinvc                 C  r   r   r   r   r   r   r   r   3   r   ZInverseErfcZerf2invc                  G  r   r   r   r   r   r   r   r   4   r   Zexpintc                  G  r   r   r   r   r   r   r   r   5   r   ZExpIntegralEZEic                 C  r   r   r   r   r   r   r   r   6   r   ZExpIntegralEiZfresnelcc                 C  r   r   r   r   r   r   r   r   7   r   ZFresnelCZfresnelsc                 C  r   r   r   r   r   r   r   r   8   r   ZFresnelSgammac                 C  r   r   r   r   r   r   r   r   9   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   @   r   ZCoshIntegralZShic                 C  r   r   r   r   r   r   r   r   A   r   ZSinhIntegralZlic                 C  r   r   r   r   r   r   r   r   B   r   ZLogIntegral	factorialc                 C  r   r   r   r   r   r   r   r   C   r   Z	FactorialZ
factorial2c                 C  r   r   r   r   r   r   r   r   D   r   Z
Factorial2Zsubfactorialc                 C  r   r   r   r   r   r   r   r   E   r   ZSubfactorialcatalanc                 C  r   r   r   r   r   r   r   r   F   r   ZCatalanNumberZharmonicc                  G  r   r   r   r   r   r   r   r   G   r   ZHarmonicNumberZlucasc                 C  r   r   r   r   r   r   r   r   H   r   ZLucasLZRisingFactorialc                  G  r   r   r   r   r   r   r   r   I   r   Z
PochhammerZFallingFactorialc                  G  r   r   r   r   r   r   r   r   J   r   ZFactorialPowerZlaguerrec                  G  r   r   r   r   r   r   r   r   K   r   Z	LaguerreLZassoc_laguerrec                  G  r   r   r   r   r   r   r   r   L   r   Zhermitec                  G  r   r   r   r   r   r   r   r   M   r   ZHermiteHZjacobic                  G  r   r   r   r   r   r   r   r   N   r   ZJacobiPZ
gegenbauerc                  G  r   r   r   r   r   r   r   r   O   r   ZGegenbauerCZ
chebyshevtc                  G  r   r   r   r   r   r   r   r   P   r   Z
ChebyshevTZ
chebyshevuc                  G  r   r   r   r   r   r   r   r   Q   r   Z
ChebyshevUZlegendrec                  G  r   r   r   r   r   r   r   r   R   r   Z	LegendrePZassoc_legendrec                  G  r   r   r   r   r   r   r   r   S   r   Zmathieucc                  G  r   r   r   r   r   r   r   r   T   r   ZMathieuCZmathieusc                  G  r   r   r   r   r   r   r   r   U   r   ZMathieuSZmathieucprimec                  G  r   r   r   r   r   r   r   r   V   r   ZMathieuCPrimeZmathieusprimec                  G  r   r   r   r   r   r   r   r   W   r   ZMathieuSPrimeZ	stieltjesc                 C  r   r   r   r   r   r   r   r   X   r   ZStieltjesGammaZ
elliptic_ec                  G  r   r   r   r   r   r   r   r   Y   r   Z	EllipticEZ
elliptic_fc                  G  r   r   r   r   r   r   r   r   Z   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   `   r   ZBesselIZbesseljc                  G  r   r   r   r   r   r   r   r   a   r   ZBesselJZbesselkc                  G  r   r   r   r   r   r   r   r   b   r   ZBesselKZbesselyc                  G  r   r   r   r   r   r   r   r   c   r   ZBesselYZhankel1c                  G  r   r   r   r   r   r   r   r   d   r   ZHankelH1Zhankel2c                  G  r   r   r   r   r   r   r   r   e   r   ZHankelH2Zairyaic                 C  r   r   r   r   r   r   r   r   f   r   ZAiryAiZairybic                 C  r   r   r   r   r   r   r   r   g   r   ZAiryBiZairyaiprimec                 C  r   r   r   r   r   r   r   r   h   r   ZAiryAiPrimeZairybiprimec                 C  r   r   r   r   r   r   r   r   i   r   ZAiryBiPrimeZpolylogc                  G  r   r   r   r   r   r   r   r   j   r   ZPolyLogZlerchphic                  G  r   r   r   r   r   r   r   r   k   r   ZLerchPhigcdc                  G  r   r   r   r   r   r   r   r   l   r   ZGCDlcmc                  G  r   r   r   r   r   r   r   r   m   r   ZLCMZjnc                  G  r   r   r   r   r   r   r   r   n   r   ZSphericalBesselJZync                  G  r   r   r   r   r   r   r   r   o   r   ZSphericalBesselYZhyperc                  G  r   r   r   r   r   r   r   r   p   r   ZHypergeometricPFQZmeijergc                  G  r   r   r   r   r   r   r   r   q   r   ZMeijerGZappellf1c                  G  r   r   r   r   r   r   r   r   r   r   ZAppellF1Z
DiracDeltac                 C  r   r   r   r   r   r   r   r   s   r   Z	Heavisidec                 C  r   r   r   r   r   r   r   r   t   r   ZHeavisideThetaZKroneckerDeltac                  G  r   r   r   r   r   r   r   r   u   r   sqrtc                 C  r   r   r   r   r   r   r   r   v   r   Z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   )	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 userr3   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   r7      s   

zMCodePrinter.__init__c                 C  s   |S Nr   )r@   linesr   r   r   _format_code      zMCodePrinter._format_codec                 C  s(   t |}d| |j|| |j|f S )Nz%s^%s)r	   parenthesizebaser
   )r@   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 rD   )rH   .0arK   r@   r   r   	<genexpr>   s    z*MCodePrinter._print_Mul.<locals>.<genexpr>)r	   Zargs_cncsuper
_print_Mulfuncjoin)r@   rJ   cncres	__class__rQ   r   rT      s   zMCodePrinter._print_Mulc                 C  s,   |  |j}|  |j}|j}d|||S )Nz{} {} {})_printlhsrhsZrel_opformat)r@   rJ   Zlhs_codeZrhs_codeopr   r   r   _print_Relational   s   zMCodePrinter._print_Relationalc                 C  r   )N0r   r@   rJ   r   r   r   _print_Zero   rG   zMCodePrinter._print_Zeroc                 C  r   )N1r   rc   r   r   r   
_print_One   rG   zMCodePrinter._print_Onec                 C  r   )Nz-1r   rc   r   r   r   _print_NegativeOne   rG   zMCodePrinter._print_NegativeOnec                 C  r   )Nz1/2r   rc   r   r   r   _print_Half   rG   zMCodePrinter._print_Halfc                 C  r   )NIr   rc   r   r   r   _print_ImaginaryUnit   rG   z!MCodePrinter._print_ImaginaryUnitc                 C  r   )NInfinityr   rc   r   r   r   _print_Infinity   rG   zMCodePrinter._print_Infinityc                 C  r   )Nz	-Infinityr   rc   r   r   r   _print_NegativeInfinity   rG   z$MCodePrinter._print_NegativeInfinityc                 C  r   )NZComplexInfinityr   rc   r   r   r   _print_ComplexInfinity   rG   z#MCodePrinter._print_ComplexInfinityc                 C  r   )NZIndeterminater   rc   r   r   r   
_print_NaN   rG   zMCodePrinter._print_NaNc                 C  r   )NEr   rc   r   r   r   _print_Exp1   rG   zMCodePrinter._print_Exp1c                 C  r   )NPir   rc   r   r   r   	_print_Pi   rG   zMCodePrinter._print_Pic                 C  r   )NZGoldenRatior   rc   r   r   r   _print_GoldenRatio   rG   zMCodePrinter._print_GoldenRatioc                 C  s    |j dd}t|}| ||S )NT)rU   )expandr	   rH   )r@   rJ   expandedrK   r   r   r   _print_TribonacciConstant   s   z&MCodePrinter._print_TribonacciConstantc                 C  r   )NZ
EulerGammar   rc   r   r   r   _print_EulerGamma   rG   zMCodePrinter._print_EulerGammac                 C  r   )NZCatalanr   rc   r   r   r   _print_Catalan   rG   zMCodePrinter._print_Catalanc                   s    dd  fdd|D  d S )N{, c                 3      | ]}  |V  qd S rD   doprintrN   r@   r   r   rR          z+MCodePrinter._print_list.<locals>.<genexpr>}rV   rc   r   r   r   _print_list   s    zMCodePrinter._print_listc                 C     |  | S rD   r~   tolistrc   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      r_   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)keyrz   r{   c                 3  s    | ]
\}} ||V  qd S rD   r   )rO   rB   rC   )r   r   r   rR      s    zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>r   )sortedZtodokr<   r   rV   )r<   )rJ   r   r   r   
print_data   s   z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                          jS rD   r~   shaper   rJ   r@   r   r   
print_dims   s   z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimsSparseArray[{}, {}]r_   r@   rJ   r   r   r   )rJ   r   r@   r   _print_ImmutableSparseMatrix   s   z)MCodePrinter._print_ImmutableSparseMatrixc                 C  r   rD   r   rc   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 )Nrz   r{   c                 s  s    | ]}|V  qd S rD   r   rN   r   r   r   rR      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   rO   ir   r   r   rR     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)rO   r   value)rJ   r   r   r   r   
<listcomp>  s    zTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r   Z_sparse_arrayr<   r   )rJ   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   )rJ   r   r   r@   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|   rD   )
_can_print)rO   fr   r   r   rR   2  r   z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
rU   __name__r9   r   	stringifyZ_rewriteable_functionsr   allr\   Zrewrite)r@   rJ   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   r_   r\   rc   r   r   r   _print_LambertW8  s
   zMCodePrinter._print_LambertWc                 C  s$   d | |jd | |jd S )NzArcTan[{}, {}]r   r   )r_   r\   r   rc   r   r   r   _print_atan2>  s   zMCodePrinter._print_atan2c                   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|   rD   r}   rN   r   r   r   rR   G  r   z/MCodePrinter._print_Integral.<locals>.<genexpr>]])r   	variablesZlimitsr   rV   )r@   rJ   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  r|   rD   r}   rN   r   r   r   rR   J  r   z*MCodePrinter._print_Sum.<locals>.<genexpr>r   )rV   r   rc   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  s   $ z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[r{   c                 3  r|   rD   r}   rN   r   r   r   rR   O  r   z1MCodePrinter._print_Derivative.<locals>.<genexpr>r   )rJ   Zvariable_countrV   )r@   rJ   ZdexprZdvarsr   r   r   _print_DerivativeL  s   &zMCodePrinter._print_Derivativec                 C  s
   d |S )Nz(* {} *)r   )r@   textr   r   r   _get_commentR  s   
zMCodePrinter._get_comment)1r   
__module____qualname____doc__Zprintmethodlanguager8   r   r4   __annotations__setr5   r6   r7   rF   rL   rT   ra   rd   rf   rg   rh   rj   rl   rm   rn   ro   rq   rs   rt   rw   rx   ry   r   Z_print_tupleZ_print_Tupler   r   r   r   r   Z_print_MinMaxBaser   r   r   r   r   r   __classcell__r   r   rZ   r   r0   z   sZ   
 

	.r0   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'
    )r0   r~   )rJ   rA   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	   r9   r0   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k ]