a
    ݶDf1                  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dd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdd	 dfgdҜhZG ddԄ deZddք ZdS )z
Mathematica code printer
    )annotations)Any)BasicExprFloat)default_sort_key)CodePrinter)
precedencec                 C  s   dS NT xr   r   g/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/sympy/printing/mathematica.py<lambda>       r   ZExpc                 C  s   dS r
   r   r   r   r   r   r      r   Logc                 C  s   dS r
   r   r   r   r   r   r      r   ZSinc                 C  s   dS r
   r   r   r   r   r   r      r   ZCosc                 C  s   dS r
   r   r   r   r   r   r      r   ZTanc                 C  s   dS r
   r   r   r   r   r   r      r   ZCotc                 C  s   dS r
   r   r   r   r   r   r      r   ZSecc                 C  s   dS r
   r   r   r   r   r   r      r   ZCscc                 C  s   dS r
   r   r   r   r   r   r      r   ZArcSinc                 C  s   dS r
   r   r   r   r   r   r      r   ZArcCosc                 C  s   dS r
   r   r   r   r   r   r      r   ZArcTanc                 C  s   dS r
   r   r   r   r   r   r      r   ZArcCotc                 C  s   dS r
   r   r   r   r   r   r      r   ZArcSecc                 C  s   dS r
   r   r   r   r   r   r      r   ZArcCscc                  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Shili	factorialZ
factorial2ZsubfactorialcatalanZharmonicZlucasZRisingFactorialZFallingFactorialZlaguerreZassoc_laguerreZhermiteZjacobiZ
gegenbauerZ
chebyshevtZ
chebyshevuZlegendreZassoc_legendreZmathieucZmathieusZmathieucprimeZmathieusprimeZ	stieltjesZ
elliptic_eZ
elliptic_fZ
elliptic_kZelliptic_pizetaZdirichlet_etaZ
riemann_xiZbesseliZbesseljZbesselkZbesselyZhankel1Zhankel2ZairyaiZairybiZairyaiprimeZairybiprimeZpolylogZlerchphigcdlcmZjnZynZhyperZmeijergZappellf1r   Z	Heavisider   sqrtc                      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_precZ	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 userr:   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   )rG   linesr   r   r   _format_code   s    zMCodePrinter._format_codec                 C  s(   t |}d| |j|| |j|f S )Nz%s^%s)r	   parenthesizebaser   )rG   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 rK   )rN   .0arQ   rG   r   r   	<genexpr>   r   z*MCodePrinter._print_Mul.<locals>.<genexpr>)r	   Zargs_cncsuper
_print_Mulfuncjoin)rG   rP   cZncres	__class__rW   r   rZ      s    zMCodePrinter._print_Mulc                 C  s,   |  |j}|  |j}|j}d|||S )Nz{} {} {})_printlhsrhsZrel_opformat)rG   rP   Zlhs_codeZrhs_codeopr   r   r   _print_Relational   s    zMCodePrinter._print_Relationalc                 C  s   dS )N0r   rG   rP   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)r[   )expandr	   rN   )rG   rP   expandedrQ   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 rK   doprintrT   rG   r   r   rX      r   z+MCodePrinter._print_list.<locals>.<genexpr>}r\   rh   r   r   r   _print_list   s    zMCodePrinter._print_listc                 C  s   |  | S rK   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 rK   r   )rU   rI   rJ   )r   r   r   rX      r   zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>r   )sortedZtodokrC   r   r\   )rC   )rP   r   r   r   
print_data   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                     s     jS rK   r   shaper   rP   rG   r   r   
print_dims   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimsSparseArray[{}, {}]rd   rG   rP   r   r   r   )rP   r   rG   r   _print_ImmutableSparseMatrix   s    z)MCodePrinter._print_ImmutableSparseMatrixc                 C  s   |  | S rK   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 rK   r   rT   r   r   r   rX     r   zZMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_string_list.<locals>.<genexpr>r   r   )Zstring_listr   r   r   print_string_list  s    zGMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_string_listc                  W  s   t dd | D S )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   rU   ir   r   r   rX     r   z]MCodePrinter._print_ImmutableSparseNDimArray.<locals>.to_mathematica_index.<locals>.<genexpr>)tuple)argsr   r   r   to_mathematica_index  s    zJMCodePrinter._print_ImmutableSparseNDimArray.<locals>.to_mathematica_indexc                   s   d  |  |S )z.Helper function to print a rule of Mathematicar   r   r   r   r   r   r     s    z@MCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_rulec                     s$    fddt  j D S )a/  Helper function to print data part of Mathematica
            sparse array.

            It uses the fourth notation ``SparseArray[data,{d1,d2,...}]``
            from
            https://reference.wolfram.com/language/ref/SparseArray.html

            ``data`` must be formatted with rule.
            c                   s$   g | ]\}}  | |qS r   )Z_get_tuple_index)rU   r   value)rP   r   r   r   r   
<listcomp>  s
   zTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r   Z_sparse_arrayrC   r   )rP   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   )rP   r   r   rG   r   r   _print_ImmutableSparseNDimArray   s    	
z,MCodePrinter._print_ImmutableSparseNDimArrayc                   s   |j j jv rP j|j j }|D ],\}}||j r d| |jdf   S q nP|j j jv r j|j j \}} |rt fdd|D r |	|S |j jd |jd  S )Nz%s[%s]r   c                 3  s   | ]}  |V  qd S rK   )
_can_print)rU   fr   r   r   rX   7  r   z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
r[   __name__r@   r   Z	stringifyZ_rewriteable_functionsr   allra   Zrewrite)rG   rP   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 rK   r   rT   r   r   r   rX   H  r   z/MCodePrinter._print_Integral.<locals>.<genexpr>]])r   	variablesZlimitsr   r\   )rG   rP   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 rK   r   rT   r   r   r   rX   K  r   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  r   z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[r   c                 3  s   | ]}  |V  qd S rK   r   rT   r   r   r   rX   P  r   z1MCodePrinter._print_Derivative.<locals>.<genexpr>r   )rP   Zvariable_countr\   )rG   rP   ZdexprZdvarsr   r   r   _print_DerivativeM  s    zMCodePrinter._print_Derivativec                 C  s
   d |S )Nz(* {} *)r   )rG   textr   r   r   _get_commentS  s    zMCodePrinter._get_comment).r   
__module____qualname____doc__Zprintmethodlanguager;   __annotations__setr<   r=   r>   rM   rR   rZ   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   r6   {   s\   
	
	.r6   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'
    )r6   r   )rP   rH   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@   r6   r   r   r   r   r   <module>   s   l ]