U
    ;qLe1                  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   q/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/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   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   	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   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                      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)order	full_prec	precisionuser_functionshuman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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>   s     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      s     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      s     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     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   r   ir   r   r   r     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   )_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krP j|j j }|D ],\}}||j r d| |jdf   S q nP|j j jk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   7  s     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   H  s     z/MCodePrinter._print_Integral.<locals>.<genexpr>]])r  	variableslimitsr  r   )r   r   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 r   r   r   r   r   r   r   K  s     z*MCodePrinter._print_Sum.<locals>.<genexpr>r  )r   r  r   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 r   r   r   r   r   r   r   P  s     z1MCodePrinter._print_Derivative.<locals>.<genexpr>r  )r   variable_countr   )r   r   dexprdvarsr   r   r   _print_DerivativeM  s    zMCodePrinter._print_Derivativec                 C  s
   d |S )Nz(* {} *)r   )r   textr   r   r   _get_commentS  s    zMCodePrinter._get_comment).r  
__module____qualname____doc__printmethodlanguager   __annotations__setr   r   r   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   {   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_codeW  s    r,  N)r$  
__future__r   typingr   
sympy.corer   r   r   sympy.core.sortingr   Zsympy.printing.codeprinterr   sympy.printing.precedencer	   r   r   r,  r   r   r   r   <module>   s   l ]