U
    ;qLe@M                     @   s  d dl mZ d dlmZ d dlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZ d Zdd	 e D Zeefd
dddddddddddZdddddddZdd e D Zdd e D ZG d d! d!eeZeD ]Zeed"e e
 qeD ]Zeed"e e	 qd#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<Zd=dd>Zd?d e D Zd@d e D ZG dAdB dBeZ eD ]Zee d"e e
 qeD ]Zee d"e e	 qdCd e D Z!dDd e D Z"G dEdF dFeZ#e!D ]Zee#d"e e
 qe"D ]Zee#d"e e	 qdGd e D Z$dHd e D Z%G dIdJ dJeZ&e$D ]Zee&d"e e
 qhe%D ]Zee&d"e e	 qdKS )L    )S)Lambda)Pow   )PythonCodePrinter_known_functions_math_print_known_const_print_known_func_unpack_integral_limitsArrayPrinter)CodePrinterz!erf erfc factorial gamma loggammac                 C   s    g | ]\}}|t kr||fqS  )_not_in_numpy.0kvr   r   k/home/p21-0144/sympy/latex2sympy2solve-back-end/sympyEq/lib/python3.8/site-packages/sympy/printing/numpy.py
<listcomp>	   s      r   arccosarccosharcsinarcsinharctanarctan2arctanhexp2sign	logaddexp
logaddexp2)acosacoshasinasinhatanatan2atanhr   r   r   r   epiZeuler_gammananZPINFNINF)Exp1Pi
EulerGammaNaNInfinityNegativeInfinityc                 C   s   i | ]\}}|d | qS znumpy.r   r   r   r   r   
<dictcomp>    s      r2   c                 C   s   i | ]\}}|d | qS r1   r   r   r   r   r   r2   !   s      c                       s`  e Zd ZdZdZeZeZdL 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d$d% Z fd&d'Zd(d) Zd*d+ Zd,d- ZdMd/d0Zd1d2 Zd3d4 Z d5d6 Z!d7d8 Z"d9d: Z#d;d< Z$d=d> Z%d?d@ Z&dAdB Z'dCdD Z(dEdF Z)dGZ*dHZ+dIZ,dJZ-dKZ.e/j0Z1e/j0Z2e/j0Z3e/j0Z4  Z5S )NNumPyPrinterza
    Numpy printer which handles vectorized piecewise functions,
    logical operators, etc.
    numpyNc                    s<   d | j| _d | j| _tj| j| _t j|d dS )z
        `settings` is passed to CodePrinter.__init__()
        `module` specifies the array module to use, currently 'NumPy', 'CuPy'
        or 'JAX'.
        zPython with {}z_{}codesettingsN)format_modulelanguageprintmethodr   _kfsuper__init__selfr6   	__class__r   r   r=   -   s    zNumPyPrinter.__init__c                    s"   d}d | fdd|D S )z+General sequence printer: converts to tuple, z({},)c                 3   s   | ]}  |V  qd S N_print)r   itemr?   r   r   	<genexpr>@   s     z*NumPyPrinter._print_seq.<locals>.<genexpr>)r7   join)r?   seq	delimiterr   rG   r   
_print_seq;   s    zNumPyPrinter._print_seqc                    sj   |  d tjk	rJ|  d |  d g }dd fdd|D S dd fdd|jD S )zMatrix multiplication printerr   r   ({})z).dot(c                 3   s   | ]}  |V  qd S rC   rD   r   irG   r   r   rH   F   s     z-NumPyPrinter._print_MatMul.<locals>.<genexpr>c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH   G   s     )Zas_coeff_matricesr   Oner7   rI   args)r?   expr	expr_listr   rG   r   _print_MatMulB   s    zNumPyPrinter._print_MatMulc                 C   s2   d | | jd | |jd | |jd S )zMatrix power printerz
{}({}, {})z.linalg.matrix_powerr   r   r7   _module_formatr8   rE   rQ   r?   rR   r   r   r   _print_MatPowI   s     zNumPyPrinter._print_MatPowc                 C   s$   d | | jd | |jd S )zMatrix inverse printer{}({})z.linalg.invr   rU   rW   r   r   r   _print_InverseN   s    zNumPyPrinter._print_Inversec                 C   sX   |j \}}|jd dkr|j}|jd dkr2|j}d| | jd | || |f S )Nr   r   
%s(%s, %s)z.dot)rQ   shapeTrV   r8   rE   )r?   rR   arg1arg2r   r   r   _print_DotProductS   s    
zNumPyPrinter._print_DotProductc                 C   s*   d|  | jd | |j| |jf S )Nr[   z.linalg.solve)rV   r8   rE   matrixvectorrW   r   r   r   _print_MatrixSolve`   s    

zNumPyPrinter._print_MatrixSolvec                 C   s    d | | jd | |jS )NrY   z.zerosr7   rV   r8   rE   r\   rW   r   r   r   _print_ZeroMatrixe   s    
zNumPyPrinter._print_ZeroMatrixc                 C   s    d | | jd | |jS )NrY   z.onesrd   rW   r   r   r   _print_OneMatrixi   s    
zNumPyPrinter._print_OneMatrixc                    s~   ddl m}m} |j}t|ts4t||f|||}d  jd d	 fdd|j
d D  |j
d  |jS )	Nr   )rO   jz{}(lambda {}: {}, {})z.fromfunctionrB   c                 3   s   | ]}  |V  qd S rC   rD   r   argrG   r   r   rH   s   s     z5NumPyPrinter._print_FunctionMatrix.<locals>.<genexpr>r   )	sympy.abcrO   rg   lamda
isinstancer   r7   rV   r8   rI   rQ   rE   r\   )r?   rR   rO   rg   rk   r   rG   r   _print_FunctionMatrixm   s    
 
z"NumPyPrinter._print_FunctionMatrixc                    sZ    jd  d fdd|jd d D d|jd dt|jd   S )	N	.multiply c                 3   s    | ]}d   |V  qdS z{}({}, Nr7   rE   rh   funcr?   r   r   rH   x   s   z6NumPyPrinter._print_HadamardProduct.<locals>.<genexpr>{}{})r   rV   r8   rI   rQ   r7   rE   lenrW   r   rr   r   _print_HadamardProductv   s    z#NumPyPrinter._print_HadamardProductc                    sZ    jd  d fdd|jd d D d|jd dt|jd   S )	Nz.kronro   c                 3   s    | ]}d   |V  qdS rp   rq   rh   rr   r   r   rH   ~   s   z7NumPyPrinter._print_KroneckerProduct.<locals>.<genexpr>rt   ru   rv   r   rw   rW   r   rr   r   _print_KroneckerProduct|   s    z$NumPyPrinter._print_KroneckerProductc                 C   s2   d | | jd | | jd | |jd S )Nz
{}({}({}))z
.conjugatez
.transposer   rU   rW   r   r   r   _print_Adjoint   s
    zNumPyPrinter._print_Adjointc                 C   s8   d | | jd | |j}d | | jd |S )NrY   z.diagz{}({}, (-1, 1))z.reshape)r7   rV   r8   rE   ri   )r?   rR   vectr   r   r   _print_DiagonalOf   s    
 zNumPyPrinter._print_DiagonalOfc                 C   s$   d | | jd | |jd S )NrY   z	.diagflatr   rU   rW   r   r   r   _print_DiagMatrix   s    zNumPyPrinter._print_DiagMatrixc              
   C   sJ   d | | jd | |j| | jd | |jd | |jd S )Nz{}({}, {}({}, {}))rn   .eyer   r   )r7   rV   r8   rE   ri   r\   rW   r   r   r   _print_DiagonalMatrix   s    
  z"NumPyPrinter._print_DiagonalMatrixc                    s   ddl m m  fddddfdd|jD }ddfd	d|jD }d
jd ||t	j
S )zPiecewise function printerr   )ITEsimplify_logicc                    s&   |   r| S | S dS )z$ Problem having an ITE in the cond. N)hasrE   cond)r   r?   r   r   r   
print_cond   s    
z1NumPyPrinter._print_Piecewise.<locals>.print_condz[{}],c                 3   s   | ]}  |jV  qd S rC   )rE   rR   rh   rG   r   r   rH      s     z0NumPyPrinter._print_Piecewise.<locals>.<genexpr>c                 3   s   | ]} |j V  qd S rC   r   rh   )r   r   r   rH      s     z{}({}, {}, default={})z.select)sympy.logic.boolalgr   r   r7   rI   rQ   rV   r8   rE   r   r.   )r?   rR   exprscondsr   )r   r   r?   r   r   _print_Piecewise   s        
zNumPyPrinter._print_Piecewisec                    sf   ddddddd}|j |krZ| |j}| |j}dj| | jd	 ||j   ||d
S t |S )z.Relational printer for Equality and Unequalityequal	not_equalless
less_equalgreatergreater_equal)z==z!=<z<=>z>=z{op}({lhs}, {rhs}).)oplhsrhs)	rel_oprE   r   r   r7   rV   r8   r<   _print_Relational)r?   rR   r   r   r   r@   r   r   r      s    
 zNumPyPrinter._print_Relationalc                    s.   d   jd d fdd|jD S )Logical And printer{}.reduce(({}))z.logical_andr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH      s     z*NumPyPrinter._print_And.<locals>.<genexpr>r7   rV   r8   rI   rQ   rW   r   rG   r   
_print_And   s    zNumPyPrinter._print_Andc                    s.   d   jd d fdd|jD S )Logical Or printerr   z.logical_orr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH      s     z)NumPyPrinter._print_Or.<locals>.<genexpr>r   rW   r   rG   r   	_print_Or   s    zNumPyPrinter._print_Orc                    s.   d   jd d fdd|jD S )zLogical Not printerrY   z.logical_notr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH      s     z*NumPyPrinter._print_Not.<locals>.<genexpr>r   rW   r   rG   r   
_print_Not   s    zNumPyPrinter._print_NotFc                 C   s<   |j jr&|j jr&t|j|j  dd}| j||| jd dS )NF)evaluatez.sqrt)rationalsqrt)exp
is_integeris_negativer   baseevalf_hprint_Powr8   )r?   rR   r   r   r   r   
_print_Pow   s    zNumPyPrinter._print_Powc                    s.   d   jd d fdd|jD S )N{}(({}), axis=0)z.aminr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH      s     z*NumPyPrinter._print_Min.<locals>.<genexpr>r   rW   r   rG   r   
_print_Min   s    zNumPyPrinter._print_Minc                    s.   d   jd d fdd|jD S )Nr   z.amaxr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH      s     z*NumPyPrinter._print_Max.<locals>.<genexpr>r   rW   r   rG   r   
_print_Max   s    zNumPyPrinter._print_Maxc                 C   s$   d|  | jd | |jd f S )N%s(%s)z.angler   rV   r8   rE   rQ   rW   r   r   r   
_print_arg   s    zNumPyPrinter._print_argc                 C   s$   d|  | jd | |jd f S )Nr   z.imagr   r   rW   r   r   r   	_print_im   s    zNumPyPrinter._print_imc                    s.   d   jd d fdd|jD f S )Nr   z.modrB   c                 3   s   | ]}  |V  qd S rC   rD   rh   rG   r   r   rH      s     z*NumPyPrinter._print_Mod.<locals>.<genexpr>)rV   r8   rI   rQ   rW   r   rG   r   
_print_Mod   s    zNumPyPrinter._print_Modc                 C   s$   d|  | jd | |jd f S )Nr   z.realr   r   rW   r   r   r   	_print_re   s    zNumPyPrinter._print_rec                 C   s*   d|  | jd | |jd tj f S )Nr   z.sincr   )rV   r8   rE   rQ   r   r,   rW   r   r   r   _print_sinc   s    zNumPyPrinter._print_sincc                 C   s@   | j |jjd }|d kr*| | jd }d|| | f S )Nz.arrayr   )known_functionsgetrA   __name__rV   r8   rE   tolist)r?   rR   rs   r   r   r   _print_MatrixBase   s    zNumPyPrinter._print_MatrixBasec                 C   sH   |j }tdd |D r<d| | jd | |j d f S tdd S )Nc                 s   s   | ]}|j V  qd S rC   )
is_Integer)r   dimr   r   r   rH      s     z/NumPyPrinter._print_Identity.<locals>.<genexpr>r   r   r   zFSymbolic matrix dimensions are not yet supported for identity matrices)r\   allrV   r8   rE   NotImplementedError)r?   rR   r\   r   r   r   _print_Identity   s    $zNumPyPrinter._print_Identityc                 C   s(   d | | jd | |jd  S )NrY   z.blockr   )r7   rV   r8   rE   rQ   r   rW   r   r   r   _print_BlockMatrix   s    zNumPyPrinter._print_BlockMatrixc                 C   sT   t |jdkr,| jd | |jd  d S t |jdkrH| | S t| |S )Nr   z.array(r   rv      )rx   r\   r8   rE   rQ   tomatrixr   _print_not_supportedrW   r   r   r   _print_NDimArray   s
    zNumPyPrinter._print_NDimArrayaddZeinsum	transposeoneszeros)N)F)6r   
__module____qualname____doc__r8   _numpy_known_functionsr;   _numpy_known_constants_kcr=   rL   rT   rX   rZ   r`   rc   re   rf   rm   ry   rz   r{   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   _add_einsum
_transpose_ones_zerosr   r   _print_lowergamma_print_uppergamma_print_fresnelc_print_fresnels__classcell__r   r   r@   r   r3   #   s\   	
r3   _print_ZexpierferfcZjvZyvivkvcosm1powm1	factorialgammagammalnpsi	polygammaZpochZeval_jacobiZeval_gegenbauerZeval_chebytZeval_chebyuZeval_legendreZeval_hermiteZeval_laguerreZeval_genlaguerrebetalambertw)Eir   r   besseljbesselybesselibesselkr   r   r   r   loggammadigammar   RisingFactorialjacobi
gegenbauer
chebyshevt
chebyshevulegendrehermitelaguerreassoc_laguerrer   LambertWZgolden_ratio)GoldenRatior,   c                 C   s   i | ]\}}|d | qS )zscipy.special.r   r   r   r   r   r2   8  s      c                 C   s   i | ]\}}|d | qS )zscipy.constants.r   r   r   r   r   r2   9  s      c                       s   e Zd ZejeZejeZd& fdd	Zdd Z	e	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d$d% Z  ZS )'SciPyPrinterNc                    s   t  j|d d| _d S )Nr5   zPython with SciPy and NumPy)r<   r=   r9   r>   r@   r   r   r=   @  s    zSciPyPrinter.__init__c                 C   sd   g g g   }}}|   D ]*\\}}}|| || || qdj| d||||jdS )Nz+{name}(({data}, ({i}, {j})), shape={shape})zscipy.sparse.coo_matrix)namedatarO   rg   r\   )todokitemsappendr7   rV   r\   )r?   rR   rO   rg   r   rcr   r   r   r   _print_SparseRepMatrixD  s    

   z#SciPyPrinter._print_SparseRepMatrixc              	   C   s:   d | d| |jd | |jd | |jd S )Nz{0}({2}, {1}, {3})zscipy.special.lpmvr   r   r   r7   rV   rE   rQ   rW   r   r   r   _print_assoc_legendreS  s    z"SciPyPrinter._print_assoc_legendrec              	   C   s4   d | d| d| |jd | |jd S )N{0}({2})*{1}({2}, {3})scipy.special.gammazscipy.special.gammaincr   r   r  rW   r   r   r   r   Z  s    zSciPyPrinter._print_lowergammac              	   C   s4   d | d| d| |jd | |jd S )Nr  r  zscipy.special.gammainccr   r   r  rW   r   r   r   r   a  s    zSciPyPrinter._print_uppergammac                    s     d}  d} fdd|jD }d| d|d  d|d  d|d	  d
| d|d  d|d  d|d  d| d|d  d|d  dS )Nscipy.special.betainczscipy.special.betac                    s   g | ]}  |qS r   rD   rh   rG   r   r   r   k  s     z/SciPyPrinter._print_betainc.<locals>.<listcomp>(r   rB   r      z) - r   z))             * rv   )rV   rQ   )r?   rR   betaincr   rQ   r   rG   r   _print_betainch  s    

JzSciPyPrinter._print_betaincc              
   C   sH   d | d| |jd | |jd | |jd | |jd S )Nz'{0}({1}, {2}, {4}) - {0}({1}, {2}, {3})r  r   r   r   r  r  rW   r   r   r   _print_betainc_regularizedo  s    z'SciPyPrinter._print_betainc_regularizedc                 C   s   d | d| |jd S )N	{}({})[0]scipy.special.fresnelr   r  rW   r   r   r   r   w  s    zSciPyPrinter._print_fresnelsc                 C   s   d | d| |jd S )N	{}({})[1]r  r   r  rW   r   r   r   r   |  s    zSciPyPrinter._print_fresnelcc                 C   s   d | d| |jd S )Nr  scipy.special.airyr   r  rW   r   r   r   _print_airyai  s    zSciPyPrinter._print_airyaic                 C   s   d | d| |jd S )Nr  r  r   r  rW   r   r   r   _print_airyaiprime  s    zSciPyPrinter._print_airyaiprimec                 C   s   d | d| |jd S )Nz	{}({})[2]r  r   r  rW   r   r   r   _print_airybi  s    zSciPyPrinter._print_airybic                 C   s   d | d| |jd S )Nz	{}({})[3]r  r   r  rW   r   r   r   _print_airybiprime  s    zSciPyPrinter._print_airybiprimec                 C   s   |  |j|j S rC   rE   _eval_rewrite_as_zetarQ   rW   r   r   r   _print_bernoulli  s    zSciPyPrinter._print_bernoullic                 C   s   |  |j|j S rC   r  rW   r   r   r   _print_harmonic  s    zSciPyPrinter._print_harmonicc                    s   t |\}}t|dkr< d}dtt j|d  }n( d}dd fdd	|D }d
|dt j| |jd |S )Nr   zscipy.integrate.quadz%s, %sr   zscipy.integrate.nquadrM   rB   c                 3   s"   | ]}d t t j| V  qdS )z(%s, %s)N)tuplemaprE   )r   lrG   r   r   rH     s    z/SciPyPrinter._print_Integral.<locals>.<genexpr>z{}(lambda {}: {}, {})[0])	r
   rx   rV   r  r  rE   r7   rI   rQ   )r?   r'   integration_varslimitsZ
module_strZ	limit_strr   rG   r   _print_Integral  s    


zSciPyPrinter._print_Integralc                 C   s   d | d| |jd S )Nr  scipy.special.sicir   r  rW   r   r   r   	_print_Si  s    zSciPyPrinter._print_Sic                 C   s   d | d| |jd S )Nr  r  r   r  rW   r   r   r   	_print_Ci  s    zSciPyPrinter._print_Ci)N)r   r   r   r3   r;   _scipy_known_functionsr   _scipy_known_constantsr=   r   _print_ImmutableSparseMatrixr  r   r   r	  r
  r   r   r  r  r  r  r  r  r  r  r  r   r   r   r@   r   r   ;  s*   

r   c                 C   s   i | ]\}}|d | qS zcupy.r   r   r   r   r   r2     s      c                 C   s   i | ]\}}|d | qS r#  r   r   r   r   r   r2     s      c                       s.   e Zd ZdZdZeZeZd fdd	Z	  Z
S )CuPyPrinterz`
    CuPy printer which handles vectorized piecewise functions,
    logical operators, etc.
    cupyNc                    s   t  j|d d S Nr5   r<   r=   r>   r@   r   r   r=     s    zCuPyPrinter.__init__)N)r   r   r   r   r8   _cupy_known_functionsr;   _cupy_known_constantsr   r=   r   r   r   r@   r   r$    s
   r$  c                 C   s   i | ]\}}|d | qS z
jax.numpy.r   r   r   r   r   r2     s      c                 C   s   i | ]\}}|d | qS r*  r   r   r   r   r   r2     s      c                       s>   e Zd ZdZdZeZeZd
 fdd	Z	dd Z
dd	 Z  ZS )
JaxPrinterz_
    JAX printer which handles vectorized piecewise functions,
    logical operators, etc.
    z	jax.numpyNc                    s   t  j|d d S r&  r'  r>   r@   r   r   r=     s    zJaxPrinter.__init__c              	      s8   d   jd   jd fdd|jD S )r   {}({}.asarray([{}]), axis=0)z.allr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH     s     z(JaxPrinter._print_And.<locals>.<genexpr>r   rW   r   rG   r   r     s
    
zJaxPrinter._print_Andc              	      s8   d   jd   jd fdd|jD S )r   r,  z.anyr   c                 3   s   | ]}  |V  qd S rC   rD   rN   rG   r   r   rH     s     z'JaxPrinter._print_Or.<locals>.<genexpr>r   rW   r   rG   r   r     s
    
zJaxPrinter._print_Or)N)r   r   r   r   r8   _jax_known_functionsr;   _jax_known_constantsr   r=   r   r   r   r   r   r@   r   r+    s   r+  N)'
sympy.corer   sympy.core.functionr   sympy.core.powerr   pycoder   r   r   r	   r
   r   codeprinterr   splitr   r   Z	_in_numpydictZ_known_functions_numpyZ_known_constants_numpyr   r   r3   rs   setattrconstZ_known_functions_scipy_specialZ _known_constants_scipy_constantsr   r!  r   r(  r)  r$  r-  r.  r+  r   r   r   r   <module>   s    	 o}