a
    RG5d1                  i   @   sV  d Z ddlmZmZmZ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d/d d0fgd1d d2fgd3d d4fgd5d d6fgd7d d8fgd9d 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 dFfgdHd dIfgdJd dKfgdLd dMfgdNd dOfgdPd dMfgdQd dRfgdSd dTfgdUd dVfgdWd dXfgdYd dZfgd[d dZf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 difgdjd dkfgdld dmfgdnd dofgdpd dqf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 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
    )AnyDictSetTuple)BasicExprFloat)default_sort_key)CodePrinter)
precedencec                 C   s   dS NT xr   r   V/var/www/html/django/DPS/env/lib/python3.9/site-packages/sympy/printing/mathematica.py<lambda>       r   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   Sinc                 C   s   dS r   r   r   r   r   r   r      r   Cosc                 C   s   dS r   r   r   r   r   r   r      r   Tanc                 C   s   dS r   r   r   r   r   r   r      r   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   Sinhc                 C   s   dS r   r   r   r   r   r   r      r   Coshc                 C   s   dS r   r   r   r   r   r   r       r   Tanhc                 C   s   dS r   r   r   r   r   r   r   !   r   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   	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   Erfc                  G   s   dS r   r   r   r   r   r   r   /   r   c                 C   s   dS r   r   r   r   r   r   r   0   r   ZErfcc                 C   s   dS r   r   r   r   r   r   r   1   r   ZErfic                 C   s   dS r   r   r   r   r   r   r   2   r   Z
InverseErfc                 C   s   dS r   r   r   r   r   r   r   3   r   ZInverseErfcc                  G   s   dS r   r   r   r   r   r   r   4   r   c                  G   s   dS r   r   r   r   r   r   r   5   r   ZExpIntegralEc                 C   s   dS r   r   r   r   r   r   r   6   r   ZExpIntegralEic                 C   s   dS r   r   r   r   r   r   r   7   r   ZFresnelCc                 C   s   dS r   r   r   r   r   r   r   8   r   ZFresnelSc                 C   s   dS r   r   r   r   r   r   r   9   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   	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   @   r   ZCoshIntegralc                 C   s   dS r   r   r   r   r   r   r   A   r   ZSinhIntegralc                 C   s   dS r   r   r   r   r   r   r   B   r   ZLogIntegralc                 C   s   dS r   r   r   r   r   r   r   C   r   Z	Factorialc                 C   s   dS r   r   r   r   r   r   r   D   r   Z
Factorial2c                 C   s   dS r   r   r   r   r   r   r   E   r   ZSubfactorialc                 C   s   dS r   r   r   r   r   r   r   F   r   ZCatalanNumberc                  G   s   dS r   r   r   r   r   r   r   G   r   ZHarmonicNumberc                 C   s   dS r   r   r   r   r   r   r   H   r   ZLucasLc                  G   s   dS r   r   r   r   r   r   r   I   r   Z
Pochhammerc                  G   s   dS r   r   r   r   r   r   r   J   r   ZFactorialPowerc                  G   s   dS r   r   r   r   r   r   r   K   r   Z	LaguerreLc                  G   s   dS r   r   r   r   r   r   r   L   r   c                  G   s   dS r   r   r   r   r   r   r   M   r   ZHermiteHc                  G   s   dS r   r   r   r   r   r   r   N   r   ZJacobiPc                  G   s   dS r   r   r   r   r   r   r   O   r   ZGegenbauerCc                  G   s   dS r   r   r   r   r   r   r   P   r   Z
ChebyshevTc                  G   s   dS r   r   r   r   r   r   r   Q   r   Z
ChebyshevUc                  G   s   dS r   r   r   r   r   r   r   R   r   Z	LegendrePc                  G   s   dS r   r   r   r   r   r   r   S   r   c                  G   s   dS r   r   r   r   r   r   r   T   r   ZMathieuCc                  G   s   dS r   r   r   r   r   r   r   U   r   ZMathieuSc                  G   s   dS r   r   r   r   r   r   r   V   r   ZMathieuCPrimec                  G   s   dS r   r   r   r   r   r   r   W   r   ZMathieuSPrimec                 C   s   dS r   r   r   r   r   r   r   X   r   ZStieltjesGammac                  G   s   dS r   r   r   r   r   r   r   Y   r   Z	EllipticEc                  G   s   dS r   r   r   r   r   r   r   Z   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   `   r   ZBesselIc                  G   s   dS r   r   r   r   r   r   r   a   r   ZBesselJc                  G   s   dS r   r   r   r   r   r   r   b   r   ZBesselKc                  G   s   dS r   r   r   r   r   r   r   c   r   ZBesselYc                  G   s   dS r   r   r   r   r   r   r   d   r   ZHankelH1c                  G   s   dS r   r   r   r   r   r   r   e   r   ZHankelH2c                 C   s   dS r   r   r   r   r   r   r   f   r   ZAiryAic                 C   s   dS r   r   r   r   r   r   r   g   r   ZAiryBic                 C   s   dS r   r   r   r   r   r   r   h   r   ZAiryAiPrimec                 C   s   dS r   r   r   r   r   r   r   i   r   ZAiryBiPrimec                  G   s   dS r   r   r   r   r   r   r   j   r   ZPolyLogc                  G   s   dS r   r   r   r   r   r   r   k   r   ZLerchPhic                  G   s   dS r   r   r   r   r   r   r   l   r   ZGCDc                  G   s   dS r   r   r   r   r   r   r   m   r   ZLCMc                  G   s   dS r   r   r   r   r   r   r   n   r   ZSphericalBesselJc                  G   s   dS r   r   r   r   r   r   r   o   r   ZSphericalBesselYc                  G   s   dS r   r   r   r   r   r   r   p   r   ZHypergeometricPFQc                  G   s   dS r   r   r   r   r   r   r   q   r   ZMeijerGc                  G   s   dS r   r   r   r   r   r   r   r   r   ZAppellF1c                 C   s   dS r   r   r   r   r   r   r   s   r   
DiracDeltac                 C   s   dS r   r   r   r   r   r   r   t   r   ZHeavisideThetac                  G   s   dS r   r   r   r   r   r   r   u   r   KroneckerDeltac                 C   s   dS r   r   r   r   r   r   r   v   r   Sqrt)hexplogsincostancotseccscasinacosatanacotasecacscatan2sinhcoshtanhcothsechcschasinhacoshatanhacothasechacschsinc	conjugater   r   erferf2erfcerfierfinverfcinverf2invexpintEifresnelcfresnelsgamma
uppergamma	polygammaloggammabetaCiSiChiShili	factorial
factorial2subfactorialcatalanharmoniclucasRisingFactorialFallingFactoriallaguerreassoc_laguerrehermitejacobi
gegenbauer
chebyshevt
chebyshevulegendreassoc_legendremathieucmathieusmathieucprimemathieusprime	stieltjes
elliptic_e
elliptic_f
elliptic_kelliptic_pizetadirichlet_eta
riemann_xibesselibesseljbesselkbesselyhankel1hankel2airyaiairybiairyaiprimeairybiprimepolyloglerchphigcdlcmjnynhypermeijergappellf1r%   	Heavisider&   sqrtc                       sF  e Zd ZdZdZdZdddi ddd	Ze Ze Z	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d.d/ Zd0d1 Zd2d3 ZeZeZ d4d5 Z!d6d7 Z"d8d9 Z#d:d; Z$d<d= Z%e%Z&d>d? Z'd@dA Z(dBdC Z)dDdE Z*dFdG Z+  Z,S )HMCodePrinterz]A printer to convert Python expressions to
    strings of the Wolfram's Mathematica code
    Z_mcodezWolfram LanguageNauto   TF)order	full_prec	precisionuser_functionshumanallow_unknown_functionsc                 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settings	userfuncskvr   r   r   r      s    

zMCodePrinter.__init__c                 C   s   |S Nr   )r   linesr   r   r   _format_code   s    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| }|rP|d7 }|d fdd|D 7 }|S )N*z**c                 3   s   | ]} | V  qd S r   )r   .0ar   r   r   r   	<genexpr>   r   z*MCodePrinter._print_Mul.<locals>.<genexpr>)r   args_cncsuper
_print_Mulfuncjoin)r   r   cncres	__class__r   r   r      s    zMCodePrinter._print_Mulc                 C   s,   |  |j}|  |j}|j}d|||S )Nz{} {} {})_printlhsrhsrel_opformat)r   r   lhs_coderhs_codeopr   r   r   _print_Relational   s    zMCodePrinter._print_Relationalc                 C   s   dS )N0r   r   r   r   r   r   _print_Zero   s    zMCodePrinter._print_Zeroc                 C   s   dS )N1r   r   r   r   r   
_print_One   s    zMCodePrinter._print_Onec                 C   s   dS )Nz-1r   r   r   r   r   _print_NegativeOne   s    zMCodePrinter._print_NegativeOnec                 C   s   dS )Nz1/2r   r   r   r   r   _print_Half   s    zMCodePrinter._print_Halfc                 C   s   dS )NIr   r   r   r   r   _print_ImaginaryUnit   s    z!MCodePrinter._print_ImaginaryUnitc                 C   s   dS )NInfinityr   r   r   r   r   _print_Infinity   s    zMCodePrinter._print_Infinityc                 C   s   dS )Nz	-Infinityr   r   r   r   r   _print_NegativeInfinity   s    z$MCodePrinter._print_NegativeInfinityc                 C   s   dS )NComplexInfinityr   r   r   r   r   _print_ComplexInfinity   s    z#MCodePrinter._print_ComplexInfinityc                 C   s   dS )NZIndeterminater   r   r   r   r   
_print_NaN   s    zMCodePrinter._print_NaNc                 C   s   dS )NEr   r   r   r   r   _print_Exp1   s    zMCodePrinter._print_Exp1c                 C   s   dS )NPir   r   r   r   r   	_print_Pi   s    zMCodePrinter._print_Pic                 C   s   dS )NGoldenRatior   r   r   r   r   _print_GoldenRatio   s    zMCodePrinter._print_GoldenRatioc                 C   s    |j dd}t|}| ||S )NT)r   )expandr   r   )r   r   expandedr   r   r   r   _print_TribonacciConstant   s    z&MCodePrinter._print_TribonacciConstantc                 C   s   dS )N
EulerGammar   r   r   r   r   _print_EulerGamma   s    zMCodePrinter._print_EulerGammac                 C   s   dS )NCatalanr   r   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 r   doprintr   r   r   r   r      r   z+MCodePrinter._print_list.<locals>.<genexpr>}r   r   r   r   r   _print_list   s    zMCodePrinter._print_listc                 C   s   |  | S r   r   tolistr   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      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)keyr   r   c                 3   s   | ]\}} ||V  qd S r   r   )r   r   r   )r   r   r   r      r   zPMCodePrinter._print_ImmutableSparseMatrix.<locals>.print_data.<locals>.<genexpr>r   )sortedZtodokr   r	   r   )r   )r   r   r   r   
print_data   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_datac                      s     jS r   r   shaper   r   r   r   r   
print_dims   s    z=MCodePrinter._print_ImmutableSparseMatrix.<locals>.print_dimsSparseArray[{}, {}]r   r   r   r   r   r   )r   r   r   r   _print_ImmutableSparseMatrix   s    z)MCodePrinter._print_ImmutableSparseMatrixc                 C   s   |  | S r   r   r   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 r   r   r   r   r   r   r     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   r   ir   r   r   r   
  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   )_get_tuple_index)r   r   value)r   r   r  r   r   
<listcomp>  s
   zTMCodePrinter._print_ImmutableSparseNDimArray.<locals>.print_data.<locals>.<listcomp>)r   _sparse_arrayr   r   )r   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   )r   r   r   r   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 r   )
_can_print)r   fr   r   r   r   6  r   z/MCodePrinter._print_Function.<locals>.<genexpr>z[%s])
r   __name__r   r  	stringify_rewriteable_functionsr	  allr   rewrite)r   r   Z
cond_mfunccondZmfunctarget_f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   r   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 r   r   r   r   r   r   r   G  r   z/MCodePrinter._print_Integral.<locals>.<genexpr>]])r  	variableslimitsr  r   )r   r   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   s   | ]}  |V  qd S r   r   r   r   r   r   r   J  r   z*MCodePrinter._print_Sum.<locals>.<genexpr>r  )r   r  r   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  r   z2MCodePrinter._print_Derivative.<locals>.<listcomp>zHold[D[r   c                 3   s   | ]}  |V  qd S r   r   r   r   r   r   r   O  r   z1MCodePrinter._print_Derivative.<locals>.<genexpr>r  )r   variable_countr   )r   r   dexpr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)-r  
__module____qualname____doc__printmethodlanguage_default_settingsset_number_symbols_not_supportedr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _print_tuple_print_Tupler   r   r   r  r  Z_print_MinMaxBaser  r  r  r  r   __classcell__r   r   r   r   r   z   s\   	
	.r   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'
    )r   r   )r   r   r   r   r   mathematica_codeV  s    r-  N)r#  typingr   r   tDictr   tSetr   tTuple
sympy.corer   r   r   sympy.core.sortingr	   Zsympy.printing.codeprinterr
   sympy.printing.precedencer   r   r   r-  r   r   r   r   <module>   s   l ]