U
    @f                     @   s  d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZmZ d dl m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? d dl@mAZAmBZBmCZC d dlDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZPmQZQmRZR d dlSmTZT d dlUmVZVmWZWmXZXmYZYmZZZm[Z[ d dl\m]Z] d dl^m_Z_ d dl`maZambZb d dlcmdZd d dlemfZf d dlgmhZh d d limjZj d d!lkmlZl d d"lmmnZnmoZompZpmqZqmrZrmsZs d d#ltmuZumvZv d d$lwmxZxmyZy d d%l#mzZzm{Z{m|Z| d d&l}m~Z~mZmZmZmZmZmZmZmZ d d'lmZmZmZ d d(lmZ d d)lmZ d d*lemZmZ d d+lmZ d d,lmZ d d-lmZ d d.lmZ d d/lNmZmZ d dlZeZed0Zed1d2d3gid4Zed5Zed6Zed7Zed8Zed9Zerd dlZd:ejd;< ed<\ZZZZd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZedQdR ZedSdT ZedUdV ZedWdX ZedYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZddĄ ZddƄ ZddȄ Zddʄ Zdd̄ Zdd΄ ZddЄ Zdd҄ ZddԄ Zddք Zdd؄ Zddڄ Zdd܄ Zddބ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Z dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd 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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/d0 Z"d1d2 Z#d3d4 Z$d5d6 Z%d7d8 Z&d9d: Z'd;d< Z(G d=d> d>Z)d?d@ Z*dAdB Z+dCdD Z,dEdF Z-dGdH Z.dS (I      )productN)raiseswarns_deprecated_sympy)Sum)FunctionLambdadiff)EFloatIRational	all_closeoopi)Eq)S)Dummysymbols)RisingFactorial	factorial)	bernoulliharmonic)Abs)explog)acosh)floor)MaxMinsqrt)	Piecewise)acoscoscotsinsinctan)besselibesseljbesselkbesselyjnyn)betabetaincbetainc_regularized)	Heaviside)EierferfcfresnelcfresnelsSiCi)digammagammaloggamma	polygamma)Integral)AndfalseITENotOrtrue)
DotProductcse)derive_by_arrayArray)IndexedBaselambdify)numbered_symbols)
CoordSys3D)UnevaluatedExpr)expm1log1pexp2log2log10hypot)	logaddexp
logaddexp2)cosm1powm1)reimarg)	
chebyshevt
chebyshevulegendrehermitelaguerre
gegenbauerassoc_legendreassoc_laguerrejacobi)MatrixMatrixSymbolSparseMatrix)LambdaPrinter)NumPyPrinter)implemented_function	lambdastr)skip)conserve_mpmath_dps)ignore_warnings)import_module)
uppergamma
lowergammanumpyscipyfromlistsparse)Zimport_kwargsnumexpr
tensorflowcupyjaxnumba2ZTF_CPP_MIN_LOG_LEVELzw,x,y,zc                      s.   t g d tt fdd   dks*td S )N   c                      s    dS )N r}   fr}   G/tmp/pip-unpacked-wheel-6uje5nh9/sympy/utilities/tests/test_lambdify.py<lambda>S       ztest_no_args.<locals>.<lambda>)rJ   r   	TypeErrorAssertionErrorr}   r}   r~   r   test_no_argsQ   s    
r   c                  C   s"   t tdt } | ddkstd S N   r{   rJ   xr   r~   r}   r}   r   test_single_argW   s    r   c                  C   s(   t ttgtt } | dddks$td S Nr{   r      )rJ   r   yr   r~   r}   r}   r   test_list_args\   s    r   c                     s   t ttggttg  ddgddgks,ttt fdd t ttfttfgttttgddddd	d
gksvtttfdd t ttggtgtgttttg} | ddggdgdddddgkstd S )N[   r   c                      s
    ddS Nr{   r   r}   r}   )f1r}   r   r   d   r   z"test_nested_args.<locals>.<lambda>)      )I      r   r   r   r   c                      s
    ddS )Nr   r   r}   r}   )f2r}   r   r   h   r   
   4      ,   )rJ   wr   r   r   r   r   z)f3r}   )r   r   r   test_nested_argsa   s     r   c                      sH   t dd  ddddkst ddd	d
ks2ttt fdd d S )Nzx,y,zzz,y,xr   r   r{   r{   r   r         ?       @      @r   r   r   c                      s    dS Nr   r}   r}   r~   r}   r   r   s   r   ztest_str_args.<locals>.<lambda>)rJ   r   r   r   r}   r}   r~   r   test_str_argsn   s    
r   c                  C   s@   dd } t tttd| i}|ddks,t|ddks<td S )Nc                 S   s   dS Nr{   r}   r   r}   r}   r   r   w   r   z&test_own_namespace_1.<locals>.<lambda>r$   皙?r{   d   rJ   r   r$   r   myfuncr   r}   r}   r   test_own_namespace_1v   s    r   c                  C   s@   dd } t tttd| i}|ddks,t|ddks<td S )Nc                 S   s   dS r   r}   r   r}   r}   r   r   ~   s    z$test_own_namespace_2.<locals>.myfuncr$   r   r{   r   r   r   r}   r}   r   test_own_namespace_2}   s    r   c            	      C   s   t tttt} | ddks ttddd\}}}tt|t||  }t |||g||gtd} | ddd	}tdgd
 }t	||D ] \}}t|| | dk stqd S )Nr           zp q rT)realmodulesr   g NgmCg Ngmr   V瞯<)
rJ   r   r$   mathr   r   absr   rM   zip)	r   pqrZaeresultsZrefvalsresrefr}   r}   r   test_own_module   s    r   c                   C   s    t tdd  t tdd  d S )Nc                   S   s   t dS r   rI   r}   r}   r}   r   r      r   ztest_bad_args.<locals>.<lambda>c                   S   s   t ddgS r   rI   r}   r}   r}   r   r      r   )r   r   r}   r}   r}   r   test_bad_args   s    r   c                  C   sL   t ttt ddi} | ddks$tt ttt ddi} | ddksHtd S )Nr   gQ	@r   r                 ?r{   y      ?      ?)rJ   r   r   r   r   r~   r}   r}   r   
test_atoms   s    r   c                  C   st   dt j_t d} ttttd}|tttks6td}| |tdd	 t
t|    k rj|k spn td S )N2   40.19866933079506121545941262711838975037020672954020sympyr   r{      )mpmathmpdpsmpfrJ   r   r$   r   r   evalfr
   strsin02r   precr}   r}   r   test_sympy_lambda   s    
r   c                     s`   dt j_t d} ttttd d}|  d|    k rD|k sJn ttt	 fdd d S )Nr   r   r   r   皙?c                      s    t S Nr   r}   r~   r}   r   r      r   z"test_math_lambda.<locals>.<lambda>)
r   r   r   r   rJ   r   r$   r   r   r   )r   r   r}   r~   r   test_math_lambda   s    
$r   c            	         s  dt j_t d} ttttd d}|  t d|    k rJ|k sPn ttt	 fdd t dt d	d
  dt d d  dt d d  dt d d  }ttt
ftt
 d d}ttt
fttt
d}ttftttt d}|t dt d t d}|t dt d t d}|t d}t|| dk s\tt|| dk srtt|| dk std S )Nr   r   r   n5z0.2c                      s    t S r   r   r}   r~   r}   r   r      r   z$test_mpmath_lambda.<locals>.<lambda>z1e-30z1e-45r   r   z1e-60   r   z1e-75r   !   z1e-90(   r{   1z1e-15gLoW5g[ݦe2g#aMR/)r   r   r   r   rJ   r   r$   r   r   r   r   rW   rN   rO   r   )	r   r   Zref2Zf2af2bZf2cZans2aZans2bZans2cr}   r~   r   test_mpmath_lambda   s0    
*  r   c                  C   sJ   dt j_t d} tt| d}d}| |d|    k r@|k sFn td S )Nr   r   r   r   r   )r   r   r   r   rJ   r   r   r   r}   r}   r   test_number_precision   s
    
r   c                   C   s6   dt j_ttdtdd ttdks2td S )Nr   r}   r   )r   r   r   r   rJ   r   r   r   r}   r}   r}   r   test_mpmath_precision   s    r   c                  C   s>   ddl m}  |  D ]$\}}|tjks*t|tjkstqd S )Nr   )MATH_TRANSLATIONS)sympy.utilities.lambdifyr   itemsr   __dict__r   r   )r   symmatr}   r}   r   test_math_transl   s    r   c                  C   sF   ddl m}  |  D ],\}}|tjks2|dks2t|tjkstqd S )Nr   )MPMATH_TRANSLATIONSrd   )r   r   r   r   r   r   r   )r   r   r   r}   r}   r   test_mpmath_transl   s    r   c                  C   sJ   t std ddlm}  |  D ]$\}}|tjks6t|t jks tq d S )Nnumpy not installed.r   )NUMPY_TRANSLATIONS)rq   rk   r   r   r   r   r   r   )r   r   Znumpr}   r}   r   test_numpy_transl   s    r   c                  C   sV   t std ddlm}  |  D ]0\}}|tjks6t|t jks |t jjks tq d S )Nscipy not installed.r   )SCIPY_TRANSLATIONS)	rr   rk   r   r   r   r   r   r   special)r   r   Zscipr}   r}   r   test_scipy_transl  s    r   c                  C   s@   t std ttttd} | ddks,t| ddks<td S )Nr   rq   r|   r{   )rq   rk   rJ   r   r   r   r~   r}   r}   r   test_numpy_translation_abs  s
    r   c                  C   s   t std ddlm}  d}tttf}| j D ]b}||kr>q0t	|}t
|dr\|jd }nd}|d | }t||| dd}|d	|  d k	s0tq0d S )
Nnumexpr not installed.r   )NumExprPrinter)wherecomplexcontains_nargsr{   ru   r   r{   )ru   rk   sympy.printing.lambdareprr   r   r   r   Z_numexpr_functionskeysr   hasattrr   rJ   r   )r   Z	blacklistZ	arg_tupler   Zssymnargsargsr   r}   r}   r   test_numexpr_printer  s    

r   c                  C   sj   t std tstd td} t| jdd d\}}t||f| t gdd}tjd	\}}||| d S )
Nr   r   zb*a - sqrt(a**2)c                 S   s   | j S r   )name)sr}   r}   r   r   2  r   z!test_issue_9334.<locals>.<lambda>)keyF)r   dummifyr   r   )ru   rk   rq   r   sortedZfree_symbolsrJ   random)exprabfunc_numexprZfoobarr}   r}   r   test_issue_9334,  s    r  c               	   C   sx   t std ttttftttdkfttdkft } tt2 | ddddksRt	t
| ddddksjt	W 5 Q R X d S )Nr   r   r|   r{      *   nan)ru   rk   rJ   r   r   r   r    rm   RuntimeWarningr   r   )r  r}   r}   r   test_issue_129848  s    (
r
  c                  C   sd   t d\} }| |  }t| |g|}t| |g|g d}|dd|ddksNt|dddks`td S )Nzx yr   r      r   rJ   r   )r   r   r   Z
no_modulesZempty_modulesr}   r}   r   test_empty_modulesA  s    
r  c                  C   sr   t ttd } | ddkst| ddks.t| ddks>t| ddksNt| ddks^t| ddksntd S )	Nr   r|   r{   r   r         @      @r   r~   r}   r}   r   test_exponentiationK  s    r  c                  C   sj   t ttt} | ddkst| ddks.t| ddks>tt| dd d	k sVt| d
dksftd S )Nr   r   r{   r   r   r   r   g9v?gMbP?r  r  )rJ   r   r   r   r   r~   r}   r}   r   	test_sqrtU  s    r  c                  C   s   t tgttttgd} | t}d}| |d d   k rD|k sJn t| |d   k rd|k sjn t| d}d}| |d d   k r|k sn t| |d   k r|k sn td S )Nr   gdy=r   r{   n!	@gh㈵>)rJ   r   r"   r$   r   r   )r   dr   r}   r}   r   	test_trig^  s    $ $r  c                  C   sf   t rtstd ttttd  } ttt| tttt	f}|t	 }d|  k r\dk sbn t
d S )Nr   r   giv[?gm[?)rq   rr   rk   r   r   r   rJ   r   r<   r   r   )r   lr  r}   r}   r   test_integralj  s    
r  c                  C   sn   t rtstd tddtd td    tddftdtf} ttg| }|d}d|  k rddk sjn td S )Nr   r{   r   r   gX<?g<?)	rq   rr   rk   r<   r   r   r   rJ   r   )ir  r  r}   r}   r   test_double_integrals  s    ,r  c                  C   s   t rtstd d} td}td|}tt||| |||   dk sPt	t
d|}tt||| |||   dk st	d S )Nr   g@r   r   g:0yE>)rq   rr   rk   r   r+   r   rJ   subsr   r   r,   )Z
test_pointr   ZjtestZytestr}   r}   r   test_spherical_bessel|  s     

r  c                      sT   t tttftttf  ddddks*t ddddks>ttt fd	d
 d S )Nr   r   r{   r   r   r   r   r   c                      s    dS r   r}   r}   r~   r}   r   r     r   z$test_vector_simple.<locals>.<lambda>)rJ   r   r   r   r   r   r   r}   r}   r~   r   test_vector_simple  s    r  c                      s\   t tdt dt f tt fdd  ddks8t ddksHt dd	ksXtd S )
Nr|   r{   c                      s    dS r   r}   r}   r~   r}   r   r     r   z+test_vector_discontinuous.<locals>.<lambda>)g      r   r   )            ?r  )r  r  )rJ   r   r   ZeroDivisionErrorr   r}   r}   r~   r   test_vector_discontinuous  s
    r!  c                  C   sV   t tgttttgd} | t}t|d d dk s:tt|d d dk sRtd S )Nr   r   r{   -C6?)rJ   r   r"   r$   r   r   r   r   r  r}   r}   r   test_trig_symbolic  s    r$  c                  C   sT   t tgttttg} | d}t|d d dk s8tt|d d dk sPtd S )Nr  r   r{   r"  )rJ   r   r"   r$   r   r   r#  r}   r}   r   test_trig_float  s    r%  c                  C   s   t ttd } | ddkstt tttgtttg} | ddddddgksNtt ttt} | ddksltt ttfttt d } | dddkstd S )Nr   r   r{   r   r   r   r   )rJ   r   r   r   r   r   r$   r~   r}   r}   r   	test_docs  s    r&  c                  C   s,   t ttfttdd} | dddks(td S )Nr   r   r   r   )rJ   r   r   r$   r   r~   r}   r}   r   	test_math  s    r'  c                  C   sP   t tttd } t| dts$tt tttd dd} t| dtsLtd S )Nr   r   r   )rJ   r   r$   
isinstancefloatr   r~   r}   r}   r   test_sin  s    r*  c                  C   s  t ttt gttd tt gg} t ddgtdd dgg}ttttf| dd}|ddd|kshtttttf| | gfdd}|ddd||gfkstt ttt fttf}t ttf}t ddgddgg}t||dddd|kstt|j|dddd|kstd S )Nr   r{   r   r   r   r   r   )	rd   r   r   r$   r   rJ   r   ZjacobianT)AZsolr   Jvr}   r}   r   test_matrix  s    $r/  c                     sT  t std tttt gttd tt gg} t ddgt dd dgg}ttttf| dg}t j	
|ddd| t|dddt jstG dd dt}|ttdgdgd	ggtt}t d
 t | d	kstdddd}ttf dddii|}tt|d}t | d	ks2tt|tt fdd d S )Nr   r   r{   r   r   rq   c                   @   s   e Zd ZdS )ztest_numpy_matrix.<locals>.dotN)__name__
__module____qualname__r}   r}   r}   r   dot  s   r3  r   )   r   FT)Zallow_unknown_functionsinlineZfully_qualified_modulesZuser_functionsprinterc                      s   t td S )Nr6  rJ   r   r}   inpZp3Z	x_dot_mtxr}   r   r     r   z#test_numpy_matrix.<locals>.<lambda>)rq   rk   rd   r   r   r$   r   arrayrJ   testingassert_allcloser(  ndarrayr   r   zerosallrh   dictr   	Exception)r,  sol_arrr   r3  Zf_dot1Z	strict_kwp2Zf_dot2r}   r9  r   test_numpy_matrix  s$    $ 

rE  c                  C   sX   t std tdtgddgg} tt| jdd}t j|dt ddgddgg d S )Nr   r{   r   rq   r   r   )	rq   rk   rd   r   rJ   r+  r<  assert_array_equalr;  r,  r   r}   r}   r   test_numpy_transpose  s
    rH  c                  C   s   t std ttttg} ttttgt| | dd}ttttgt| | jdd}ttttgt| j| dd}ttttgt| | jdd}|ddd|ddd  kr|ddd  kr|ddd  krt 	dgksn t
d S )Nnumpy not installedrq   r   r{   r   r      )rq   rk   rd   r   r   r   rJ   rC   r+  r;  r   r,  r   r   r   Zf4r}   r}   r   test_numpy_dotproduct  s     




rL  c                  C   sZ   t std tdtgddgg} tt| d dd}t j|dt ddgddgg d S )	Nr   r{   r   r|   rq   r   r   r  )rq   rk   rd   r   rJ   r<  rF  r;  rG  r}   r}   r   test_numpy_inverse  s
    rM  c               	   C   s   t std tttt gttd tt gg} t ddgt dd dgg}ttttf| dt j	idg}t
t4 t j|ddd| t|dddt j	stW 5 Q R X d S )Nr   r   r{   r   r   ZImmutableDenseMatrixrq   )rq   rk   rd   r   r   r$   r   r;  rJ   Zmatrixrm   PendingDeprecationWarningr<  r=  r(  r   )r,  rC  r   r}   r}   r   test_numpy_old_matrix  s    $ 
rO  c                  C   sR   t std ttdgdtgg} tttf| dd}|dd}t|t jjsNt	d S )Nr   r   rr   r   r{   r   )
rr   rk   rf   r   r   rJ   r(  rt   Z
coo_matrixr   )r,  r   Br}   r}   r   test_scipy_sparse_matrix  s    
rQ  c               	   C   s   t std tdt tdk fttdk fdt df} tttg| dd}t jddN t|t d	t d
d	ksvt	t|t d	t dtdkst	W 5 Q R X d S )Nr   r{   r|   Trq   r   ignore)divider   r  inf)
rq   rk   r    r   r   rJ   Zerrstater)  r;  r   )r   r   r}   r}   r    test_python_div_zero_issue_11306   s    ("rU  c                  C   s   d dg} t r| d tr$| d | D ]P}tttjt |d}|ddksPtttttjt |d}|ddks(tq(t	t
tg| D ]J\}}tt|t|d}|dd	kst|d	d	kst|d
dkstqd S )Nr   rq   r   r   r   r  r   r|   r{   y      @      @r   )rq   appendr   rJ   r   r   ZOner   r   r   r   r   )Zmodsmodr   Zabsfuncr   r}   r}   r   test_issue9474*  s    

rX  c                  C   s   t std tstd ttd td  } td|  t}tddd }}tdd  |d	  }tttf|d
d||}tttf|dd||}tj	j
||dd tj	j
||dd d S )Nr   r   r   r{   r      r   r  r  rq   r   ru   绽|=)rtol)ru   rk   rq   r   r   r   r   ZlinspacerJ   r<  r=  )r   r   xnr,   Zfv_exactZfv_numpyZ
fv_numexprr}   r}   r   test_issue_9871=  s    r]  c                  C   s   t std tttdk ftd tdkfd} tt| dd}t j|t dt d	d
dd	d	d	ddddg
 tttttd	kft td	k f}t j|t dd	d
gt d
t j	d
g d S )Nr   r   r   r   )r   Trq   r   r   r   r{   $   1   @   Q   r|   )
rq   rk   r    r   rJ   r<  rF  Zaranger;  r  )piecesr   Z
nodef_funcr}   r}   r   test_numpy_piecewiseP  s     "rc  c                  C   sL  t std tttftttdd} ttttfttttdd}tttftttdd}ttttfttttdd}ttttdd}t 	ddg}t 	ddg}t 	ddg}t j
| ||t 	ddg t j
||||t 	ddg t j
|||t 	ddg t j
||||t 	ddg t j
||t 	ddg d S )Nr   rq   r   TF)rq   rk   rJ   r   r   r=   r   rA   r@   r;  r<  rF  )Zand_funcZ
and_func_3Zor_funcZ	or_func_3Znot_funcarr1arr2Zarr3r}   r}   r   test_numpy_logical_ops]  s      rf  c                  C   s   t std tttgtdt gg} ttd gttgg}ttttf| | dd}t j	|dddt 
d	gd
gg t j	|dddt 
dgd
gg ttttf| |  |  dd}t j	|dddt 
ddgddgg d S )Nr   r{   r   rq   r   r  r   r   g      ?      @r  g      ?g     R@g     ]@      )rq   rk   rd   r   r   r   r   rJ   r<  rF  r;  )ZxmatZymatZmat_funcr   r}   r}   r   test_numpy_matmulo  s    $$rj  c                  C   s   t std tstd t jddd\} }}tttt t	t
d  tt
t tttt
   ttt
 tdttt    ttd ttd    }tttt
f|dd}tttt
f|dd}t || |||| ||std S )	Nr   r   r      r   rq   r   ru   )rq   rk   ru   r   randnr$   r   r"   r   r&   r   r   r!   r   r   r   r   rJ   allcloser   )r  r  cr   ZnpfuncZnefuncr}   r}   r   test_numpy_numexpr}  s    6ro  c                  C   s   t std tstd t jdd\} }tdtfdtdd i}tt	d	|t	 d
d}t 
|| | d  sttttddd }tt	tf|t	td
d}t 
|| |d|  | d	 std S )Nr   r   r   r   ufevalc                 S   s   |d d S r   r}   r   r   r}   r}   r   r     r   z,test_numexpr_userfunctions.<locals>.<lambda>r{   ru   r   c                 S   s   d|  | d S r   r}   rr  r}   r}   r   r     r   )rq   rk   ru   r   rl  typer   classmethodrJ   r   rm  r   ri   r   )r  r  rp  funcr}   r}   r   test_numexpr_userfunctions  s    rv  c               	   C   sx   t std ttttdtd  } tt| dd}t jj	 .}t j
dt jd}||j|dd	ksjtW 5 Q R X d S )
Ntensorflow not installed.r{   r   rv   r   r   Zdtypesessionr  )rv   rk   r   r$   r   r   rJ   compatv1Sessionconstantfloat32rq  r   r   ru  r   r  r}   r}   r   test_tensorflow_basic_math  s    r  c               	   C   s   t std ttttdtd  } tt| dd}t jj	 6}t jjj
t jd}||j||didd	ksrtW 5 Q R X d S )
Nrw  r{   r   rv   r   rx  r   rz  Z	feed_dictr  )rv   rk   r   r$   r   r   rJ   r{  r|  r}  placeholderr  rq  r   r  r}   r}   r   test_tensorflow_placeholders  s    r  c               	   C   s   t std ttttdtd  } tt| dd}t jj	 @}t j
dt jd}||j ||j||didd	ks|tW 5 Q R X d S )
Nrw  r{   r   rv   r   r   rx  r  r  )rv   rk   r   r$   r   r   rJ   r{  r|  r}  Variabler  runZinitializerrq  r   r  r}   r}   r   test_tensorflow_variables  s    r  c               	   C   sh   t std tttttt} tttg| dd}t jj	
  }|ddj|ddksZtW 5 Q R X d S )Nrw  rv   r   FTry  )rv   rk   r@   r=   rA   r   r   rJ   r{  r|  r}  rq  r   r   ru  r   r}   r}   r   "test_tensorflow_logical_operations  s    r  c               	   C   s   t std tdttdfdtdk fdtdkf} tt| dd}t jj N}|dj	|ddksft
|dj	|ddks~t
|dj	|ddkst
W 5 Q R X d S )Nrw  r   r|   r{   rv   r   ry  )rv   rk   r    r   r   rJ   r{  r|  r}  rq  r   r  r}   r}   r   test_tensorflow_piecewise  s    &r  c               	   C   s`   t std ttt td } tt| dd}t jj }|dj|ddksRt	W 5 Q R X d S )Nrw  r   rv   r   r  ry  r   )
rv   rk   r   r   rJ   r{  r|  r}  rq  r   r  r}   r}   r   test_tensorflow_multi_max  s    r  c               	   C   s`   t std ttt td } tt| dd}t jj }|dj|ddksRt	W 5 Q R X d S )Nrw  r   rv   r   r  ry  )
rv   rk   r   r   rJ   r{  r|  r}  rq  r   r  r}   r}   r   test_tensorflow_multi_min  s    r  c               	   C   sV   t std tdk} tt| dd}t jj }|dj|ddksHtW 5 Q R X d S )Nrw  r   rv   r   r{   ry  T)	rv   rk   r   rJ   r{  r|  r}  rq  r   r  r}   r}   r   test_tensorflow_relational  s    r  c               	   C   s
  t std ttttdd} ttttdd}ttttdd}ttttdd}t jj	
 }t d}| |j|ddkst||j|ddkst||j|d}td }t|| dk st||j|d}td }t|| dk stW 5 Q R X d S )	Nztensorflow not installedrv   r   y      ?       @ry  r{   r   gư>)rv   rk   rJ   r   rX   rY   r   rZ   r{  r|  r}  r~  rq  r   r   r   )func1func2Zfunc3Zfunc4r   r  Ztensorflow_resultsympy_resultr}   r}   r   test_tensorflow_complexes  s     
r  c               	   C   sh   t std tttggtt t d} t jj ,}| t ddg}|j	|ddksZt
W 5 Q R X d S )Nrw  rv   r   r   ry  g      @)rv   rk   rJ   r   r   r{  r|  r}  r~  rq  r   )r   r   Zfcallr}   r}   r   test_tensorflow_array_arg  s    r  c                  C   s&   t ttt } | ttt ks"td S r   rJ   r   r   r   r   r~   r}   r}   r   test_sym_single_arg  s    r  c                  C   s0   t ttgtt t } | dddt ks,td S r   r  r~   r}   r}   r   test_sym_list_args  s    r  c                  C   sx   t tttd  } ttt| ttt tfdd}|ttttd  tt tfks\t|t t	t
ksttd S )Nr   r   r   )r   r   r   rJ   r<   r   r   r   Zdoitr   r   )r   r  r}   r}   r   test_sym_integral$  s     (r  c                  C   s   ddd i} dd dd d}t d}t d}tt|t| dfd	}|d
dksXttt|t|dfd	}|d
dks~t|d
dkstd S )Nr   c                 S   s   dS )Nfirst fr}   r   r}   r}   r   r   2  r   z&test_namespace_order.<locals>.<lambda>c                 S   s   dS )Nzsecond fr}   r   r}   r}   r   r   3  r   c                 S   s   dS )N
function gr}   r   r}   r}   r   r   4  r   )r   gr  r   r   r{   r  r  )r   r   rJ   r   r   )Zn1Zn2r   r  Zif1Zif2r}   r}   r   test_namespace_order+  s    

r  c                     s   t ddd  t ddd } tt t}tt| t}t tt| tksTt|ddksdt|dtdkszttd}t	|drtt |d	d }t	|dstt dd
d t
t fdd d S )Nr   c                 S   s   d|  S Nr   r}   r   r}   r}   r   r   C  r   ztest_imps.<locals>.<lambda>c                 S   s
   t | S r   )r   r   r   r}   r}   r   r   D  r   r   r   r   Z_imp_c                 S   s   d|  S r  r}   r   r}   r}   r   r   M  r   c                 S   s   | d S )Ne   r}   r   r}   r}   r   r   P  r   c                      s   t t tS r   r8  r}   r   r   r}   r   r   Q  r   )ri   rJ   r   r   r   r   r   r   r   r   r   
ValueError)r  l1l2ru  Zmy_fr}   r  r   	test_imps@  s    
r  c                     sJ   t dttfD ]6\}   fdd}td|}|| }||| kstqd S )N)r   r   r   r   c                    s   | dkr dS )Nr   r{   r}   )r  Zerror_classr}   r   r   ^  s    z test_imps_errors.<locals>.myfuncr   )r   r   r  ri   r   )valr   r   r   r}   r  r   test_imps_errorsT  s
    
r  c                   C   s   t tdd  d S )Nc                   S   s   t tdd S )Nc                 S   s   | S r   r}   r   r}   r}   r   r   i  r   z8test_imps_wrong_args.<locals>.<lambda>.<locals>.<lambda>)ri   r$   r}   r}   r}   r   r   i  r   z&test_imps_wrong_args.<locals>.<lambda>)r   r  r}   r}   r}   r   test_imps_wrong_argsh  s    r  c                  C   s  t j} tt| tddks tttd| t ddks>ttttft| t dddksbttddd } tt| tddkstttd| t ddksttttft| t dddksttt| ttf}|d	d
ksttt| ttg}|d	dd	gksttt| t| ttfg}|d	dd
gksFttt| tti}|d	dd	iksnttt| tti}|d	dd	ikstttt| ti}|d	d	dikstddd i}tt| t|}|d	dksttt| t|dd}|d	dkstd S )Nr   r{   r   r   c                 S   s   | d S )Nr   r}   r   r}   r}   r   r   t  r   z$test_lambdify_imps.<locals>.<lambda>r   r  r   )g   r   r  c                 S   s   | d S )Nc   r}   r   r}   r}   r   r     r   F)Zuse_impsf   )r   r"   rJ   r   r   r   ri   )r   lamr  r}   r}   r   test_lambdify_impsl  s2    $$r  c                     s  t dtd tdt d} d d   }t f|}|dddks`tttdtd  }| d d  kstt| fd|   }|ddd	ksttt fd
d tt fdd tt fdd d S )NtFGz\alphar   r   	   r{   r   c                      s&   t     d S )Nr   rI   r}   r  r  r  r}   r   r     r   z$test_dummification.<locals>.<lambda>c                      s   t d  d  d S )Nr   r   rI   r}   r  r  r}   r   r     r   c                      s   t d  d  d S )Nr   r   r   rI   r}   r  r}   r   r     r   )r   r   rJ   r   r$   r   SyntaxError)alphaZ	some_exprr  r}   r  r   test_dummification  s     r  c                  C   sR   t d} |  \}}}|| }t||g|}|dd}d}t|| dk sNtd S )NNr   333333?r  r   )rL   Zbase_scalarsrJ   r   r   )r  r\  r,   Zznr   r   r   r   r}   r}   r   8test_lambdify__arguments_with_invalid_python_identifiers  s    
r  c                  C   sJ   t ddd} t| | }|ddks(tt| | dd}|ddksFtd S )Nz{v}r   r{   Tr   )r   re   rJ   r   )Zcurlyvr  r}   r}   r   test_curly_matrix_symbol  s
    
r  c                  C   s.   t d} | d }t| |}|ddks*td S )Nifr         @r   r  )Z	python_ifr   r   r}   r}   r   test_python_keywords  s    
r  c                  C   s   t ttttftt t t } d }| j d t| |ksDtt	d}t |t
|} d }| j d t| |kstd S )NzOCreated with lambdify. Signature:

func(w, x, y, z)

Expression:

w + x + y + zza1:26a   Created with lambdify. Signature:

func(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15,
        a16, a17, a18, a19, a20, a21, a22, a23, a24, a25)

Expression:

a1 + a10 + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19 + a2 + a20 +...)rJ   r   r   r   r   
splitlines__doc__lenr   r   sum)ru  r   symsr}   r}   r   test_lambdify_docstring  s    r  c                     s$  ddl m   fdd} ttdtd tj }td|d| d	}td|d d	}td|d  d	}ttd
d}t	| |st
t	| |st
t	| |st
ttttdd}ttttdd}ttttdd}|||g}	td}
td}td}|
||g}|	|ks t
d S )Nr   IntervalPrinterc                    s      | S r   )doprint)r   r  r}   r   intervalrepr  s    z+test_special_printers.<locals>.intervalreprr   r   r}   r   )r   r7  r{   r   g?   )r   r  r   r   HalfrJ   rs  r   mpir(  r   r   r:   )r  r   Zfunc0r  r  r  Zexp1rP   Zexp3Zexp_lsZsol1Zsol2Zsol3Zsol_lsr}   r  r   test_special_printers  s&    




r  c                   C   s,   t g t dkstt g t dks(td S )NTF)rJ   rB   r   r>   r}   r}   r}   r   test_true_false  s    r  c                   C   sv   t tttfftt dddks$tt ttttffftt t t dddksTtt ttd ddddksrtd S )	Nr{   r   r   )r   )r   r   r   Fr  r   )rJ   r   r   r   r   r   r}   r}   r}   r   test_issue_2790  s    $0r  c                  C   s.   t ddd } | | d tdks*td S )Nr   c                 S   s   | d S r  r}   r   r}   r}   r   r     r   z"test_issue_12092.<locals>.<lambda>r   rY  )ri   r   r
   r   r~   r}   r}   r   test_issue_12092  s    r  c                  C   sF   G dd dt j} | d}d| }t |}|dddksBtd S )Nc                   @   s   e Zd Zdd ZeZeZdS )z"test_issue_14911.<locals>.Variablec                 S   s   | | jS r   )r  r   )selfr7  r}   r}   r   	_sympystr  s    z,test_issue_14911.<locals>.Variable._sympystrN)r0  r1  r2  r  Z_lambdacodeZ
_numpycoder}   r}   r}   r   r    s   r  r   r     z2*x)r   ZSymbolrg   r  replacer   )r  r   r   coder}   r}   r   test_issue_14911
  s
    r  c                   C   sT   t tttfttttddddks(tt tttfttttddddksPtd S )NTr   r   F)rJ   r   r   r   r?   r   r}   r}   r}   r   test_ITE  s    (r  c                   C   sT   t tttfttttddddks(tt tttfttttddddksPtd S r   )rJ   r   r   r   r   r   r   r}   r}   r}   r   test_Min_Max  s    (r  c                  C   sl   t std td} td\}}t ddgddgg}t| t| ttf tddftddf|d	ksht	d S )
NrI  r  zi jr{   r   r   r   r   r   )
rq   rk   rH   r   r;  rJ   r   r   r   r   )r  r  jr  r}   r}   r   test_Indexed#  s    r  c                  C   sh   t ttftttddd} t ttftttddd}| tdd ksNt|tdd ksdtd S )Nr   r{   r   )rJ   r   r   ro   rp   r   r   )expr1Zexpr2r}   r}   r   test_issue_12173.  s    r  c                  C   s>   t std tttt} t| dtd  dk s:td S )NrI  r{   r   )rq   rk   rJ   r   r%   r   nr   r~   r}   r}   r   test_issue_136426  s    r  c                  C   s4   t tttd} t| dtd  dk s0td S )Nr   r{   r   )rJ   r   r%   r   r  r   r~   r}   r}   r   test_sinc_mpmath=  s    r  c                  C   s   t  } t| | d dd}|ddks(tt| | d }|ddksFtt d}t||d }|ddksltt|gg|d }|dgdkstd S )Nr{   Fr  r   r   r   r   rJ   r   )d1r   Zf1bZd2r   r   r}   r}   r   test_lambdify_dummy_argB  s    r  c                  C   s:   t  } tt| }t| |g| | }|dddks6td S )Nr   r{   r   )r   r   r   rJ   r   )r  Zdsymr   r}   r}   r   %test_lambdify_mixed_symbol_dummy_argsO  s    r  c                  C   sD   t std tttggtt t d} | t ddgdks@td S )NrI  rq   r   r   r   )rq   rk   rJ   r   r   r;  r   r~   r}   r}   r   test_numpy_array_argW  s    r  c               	   C   s  t std tttttttt	t
g	} t jjt jjt jjt jjt jjt jjt jjt jjt jjg	}tjd t| |D ]\}}tt|tdd}tdD ]}tjdddtjd	d
  }|tkrt|}|tkrt|}|tkrt|}|| }||}|t	kr||d }|t
kr0||d }t||| ddt|  k sVtt||| ddt|  k stqqrttttt t!g}	t jj"t jj#t jj$t jj%t jj&t jj!g}
t|	|
D ]\}}ttt'f|tt'dd}tdD ]}tjdd}tjdddtjd	d
  }|tt!fkr2t|}|t!krHtt(|}||| }t|||| ddt|  k s~tt|||||| ddt|  k stqqd S )Nscipy not installedr   rr   r      r   r   r   r{   gvIh%<=))rr   rk   r1   r2   r3   r   r9   r:   r8   r6   r7   r   ZexpiZgammalnpsiZsicirq   r   seedr   rJ   r   rangeuniformr   r   r   r   r   r(   r*   r'   r)   r;   ZpochZjvZyvZivkvr   int)Zsingle_arg_sympy_fnsZsingle_arg_scipy_fnssympy_fnZscipy_fnr   r  tvr  scipy_resultZdouble_arg_sympy_fnsZdouble_arg_scipy_fnsZtv1Ztv2r}   r}   r   test_scipy_fnsa  sh         




&(     

(r  c                  C   s  t std tjd td} tdftdftdft	dft
dftdftdftdftdfg	}d}|D ]T\}}| d | tf }t||| }tdD ] }tjdd}ttjjdd	|d d
}	tjdddtjdd	  }
|t	krt|
}
|tkr"tjdd}
ttjjd|dd
}	|f|	 |
f }|| }||  }ddt|  }t|| }z||k srtW q tk
r   t|jt|t|t|t|||dY qX qqbd S )Nr  r   zn k a br{   r   r   zThe random test of the function {func} with the arguments {args} had failed because the SymPy result {sympy_result} and SciPy result {scipy_result} had failed to converge within the tolerance {tol} (Actual absolute difference : {diff})r   r   )sizer  r   r  r|   &.>)ru  r   r  r  r   tol)rr   rk   rq   r   r  r   r[   r\   r]   r^   r_   r`   ra   rb   rc   r   rJ   r  randinttupler  r   r   r   r   r   formatrepr)paramsZpolysmsgr  Z
num_paramsr   r   _tnZtparamsr  valsr  r  atolr   r}   r}   r   test_scipy_polys  s\     

r  c                  C   s$   t ttd } dt| ks td S )Nr   zx**2)rJ   r   inspect	getsourcer   r~   r}   r}   r   test_lambdify_inspect  s    r   c                  C   s   t  t   } }t| |g| d|did}|dddddks>tt| |g|| fd}|dddksdttg d}| dks|tt| |g|| gd}|ddddgkstd S )Nr   r   r   )r   r   )r   r   r   r  )r   r   r   r   r   r   r}   r}   r   test_issue_14941  s    
r  c                      s  t dt   t f  dddks4ttt f  dddksXttt fdd tt f  dd	dddksttt f  dd	t	ddt	j
ksttd
 ddkstttd
 dd	ddkstd S )Nr   r   r   r  r   c                      s   t t f  ddS )NFr  )rq  rj   r}   r   Zfxr}   r   r     s    z:test_lambdify_Derivative_arg_issue_16468.<locals>.<lambda>Tr  r{   )   r  )r   r   r   rJ   r   rq  rj   r   rB  r   r  r}   r}   r  r   (test_lambdify_Derivative_arg_issue_16468  s     $(.r  c                  C   sP   t tgtt} d}| ||jks(tt tgtt}|||jksLtd S )Ny      @       @)rJ   r   r   rX   r   r   rY   imag)Zf_rer  Zf_imr}   r}   r   test_imag_real  s
    r  c                  C   s   t std tddd} t ddgddgg}t| | d }t ||t dd	gd
dggsbtt| | d }t ||t ddgddggstd S )NrI  r,  r   r{   r   r   r|   g       r         ?r  %   6   ra  v   )rq   rk   re   r;  rJ   rm  r   )r,  ZA0r   r  r}   r}   r   test_MatrixSymbol_issue_15578  s    &r  c                  C   s   t std ddlm} m}m}m} ddlm} d\}}}}|	||||
 }	t| |||f|	| |||}
|
||||}t|	| dk std S )Nr  r   )r  r  r   Z)hydrogen)r{   r   r   r{   r   )rr   rk   Z	sympy.abcr  r  r   r  Zsympy.physicsr  ZR_nlr   rJ   r   r   )r  r  r   r  r  nvlvrvZZvZsympy_valuer   Zscipy_valuer}   r}   r   test_issue_15654  s    r  c            	      C   s  t std tddd} tddd}tddd}tddd	}td
}t| d| |  }t| d| |  }t| d|  }t|||fd| | | }t |t dddgdddgdddggt jd| d| d| gd| d| d| gd| d| d| ggtdstt |t dddgdddgdddggt j|d d| d d| d g|d d| d d| d g|d d| d d| d ggtdstt |t dddgdddgdddggt dddgdddgdddggstt |t dddgdddggt ddddgddddgddddggt ddddd	gddddd	gddddd	gddddd	ggt dddddgdddddggstd S )NrI  r,  r   rP  r   Cr   Dr   kr{   r   rx  x      ih  i  iX  )	rq   rk   re   r   rJ   array_equalr;  objectr   )	r,  rP  r  r  r  r   r  hr  r}   r}   r   test_issue_15827  s>    (H
(<
( 
D8r  c                  C   sF   t std td} dd }t| || dd}|dt jjksBtd S )Nr  r   c                 S   s   t j| d  S r  )r   ZGoldenRatior   r}   r}   r   r   <  r   z"test_issue_16930.<locals>.<lambda>rr   r   r{   )rr   rk   r   rJ   	constantsZgolden_ratior   )r   r   f_r}   r}   r   test_issue_169307  s    r  c                  C   sH   t std td} t| gt| ddd}|dtddksDtd S )Nr  r   r|   rr   r   r   )	rr   rk   r   rJ   r   ZLambertWr   Zlambertwr   )r   r  r}   r}   r   test_issue_17898@  s
    r  c                  C   s   t std tttt} ttttd}| dddg}|dddg}t|d  dk sbtt|d d  dk s~tt|d d  dk stt|d  dk stt|d d  dk stt|d d  dk std S )NrI  r{   r|   r   r   r  r   )	rq   rk   rJ   r   r   r0   r   r  r   )r   r   Zres1Zres2r}   r}   r   test_issue_13167_21411G  s    r  c                  C   s"   t tt} | dtdkstd S )N   r   )rJ   r   r	   r   r   r~   r}   r}   r   test_single_eU  s    
r!  c                  C   s   t std td} t| t}t| tf|dd}ttdd|dd dksPtt| t}t| tf|dd}ttdd|dd dkstd S )Nr  r  rr   r   r{   r   rZ  )	rr   rk   r   rp   r   rJ   r   r   ro   )r  r   r  r   r}   r}   r   test_issue_16536Y  s    
 
r"  c                  C   s   t std td\} }ttjt| |}t|| |f}t| |f|dd}| d|di}t	|
|||   dk s|td S NrI  zx1 x2rq   r   r{   r   rZ  )rq   rk   r   r   r   Zeror   rF   rJ   r   r  valuesr@  r   )x1x2r   r  r  pointr}   r}   r   test_issue_22726g  s    r)  c                  C   sj   t std td\} }tt| |}t| |f|dd}| d|di}t||||   dksft	d S r#  )
rq   rk   r   r0   r   rJ   r   r  r%  r   )r&  r'  r   r  r(  r}   r}   r   test_issue_22739s  s    r*  c                  C   s   t std td\} }| tt|d t|  }t| |g|d}| d|di}t||||	   dksrt
t| |g|}t||||	   dkst
d S )NrI  za tr   rq   r   rZ  )rq   rk   r   r   r#   r"   rJ   r   r  r%  r   )r  r  r   r  r(  r}   r}   r   test_issue_22992~  s    "r+  c                  C   s@   t std tttd g} tt| d}|djt jks<td S )NrI  r   rq   r{   )rq   rk   rG   r   rJ   	__class__r>  r   )r   r   r}   r}   r   test_issue_19764  s
    r-  c                  C   s:   t std ttttd} t j| ddddks6td S )Nznumba not installedrq   T)Znopythonr{   g	T?)ry   rk   rJ   r   r$   Zjitr   r~   r}   r}   r   test_issue_20070  s    r.  c                  C   st   t std tt} tt}tt| dd}tt|dd}ttd|d dksTtttd|d dksptd S )Nr  rr   r   ?rZ  )rr   rk   r4   r   r5   rJ   r   r   )r   r   ZF1ZF2r}   r}   r   test_fresnel_integrals_scipy  s    r0  c                  C   sL   t std ttt} tttf| dd}ttdd|dd dksHtd S )Nr  rr   r   r/  ffffff@rZ  )rr   rk   r-   r   r   rJ   r   r   r   r  r}   r}   r   test_beta_scipy  s
    
r3  c                  C   s@   t tt} tttf| dd}tt dd|dd dks<td S )Nr   r   r/  r1  rZ  )r-   r   r   rJ   r   r   r2  r}   r}   r   test_beta_math  s    
r4  c                  C   s\   t std ttttt} tttttf| dd}ttdddd|dddd dksXt	d S )	Nr  rr   r   gffffff?g@r   r  rZ  )
rr   rk   r.   r   r   r   r   rJ   r   r   r2  r}   r}   r   test_betainc_scipy  s
    r5  c                  C   s\   t std ttttt} tttttf| dd}ttdddd|dddd dksXt	d S )	Nr  rr   r   r   rg  r   r{   rZ  )
rr   rk   r/   r   r   r   r   rJ   r   r   r2  r}   r}   r   test_betainc_regularized_scipy  s
    r6  c            	      C   s   t std tttttttt	g} | D ]}d|j
krJ|tt}ttf}d}n&d|j
krh|t}tf}d}ntdt||}|| }|tt|| }t |t|s$tq$tttft	tttt}td|dd	 d
 dk std S )NrI  r   )r  g?r{   )r  z:Need to handle other than unary & binary functions in testr   gJz5gn5g!z05g"}t3)rq   rk   rN   rO   rP   rQ   rR   rS   rT   rU   r   r   r   NotImplementedErrorrJ   r  rA  r   r   rm  r)  r   r   )	funcsru  r   r   num_argsr   result	referenceZlae2r}   r}   r   test_numpy_special_math  s&    



r<  c                  C   s   t std ttfttdd} t| dd dk s8tttt	t j
j
dd d d	k}|rtttftttdd}t|d
dd dk std S )Nr  rr   r   g#B;gWw'&l7gN~h.r   )r{   r   g333333?r  g-=gFFg<)rr   rk   rJ   r   rV   r   r   r  mapr  versionsplitr   rW   )Zcm1Zhave_scipy_1_10plusZcm2r}   r}   r   test_scipy_special_math  s    $rA  c                  C   s4   t std ttfttdd} | ddks0td S )Nr  rr   r   r{   r  )rr   rk   rJ   r   r   r   )Zbernr}   r}   r   test_scipy_bernoulli  s    rB  c                  C   s^   t std ttfttdd} | ddks0ttttftttdd}|dddksZtd S )Nr  rr   r   r   r  g      ?)rr   rk   rJ   r   r   r   r   )ZhnZhnmr}   r}   r   test_scipy_harmonic  s    rC  c                  C   s\   t std tttggtt t d} | t ddg}|dksDtdtt|ksXtd S )NCuPy not installedrw   r   r   r   	rw   rk   rJ   r   r   r;  r   r   rs  r   r:  r}   r}   r   test_cupy_array_arg  s    rG  c                  C   s\   t std tttggtt t d} | t ddg}|dksDtdtt|ksXtd S )NrD  rq   r   r   r   rw   rE  rF  r}   r}   r   test_cupy_array_arg_using_numpy  s    rH  c                  C   s   t std ttttg} ttttgt| | dd}ttttgt| | jdd}ttttgt| j| dd}ttttgt| | jdd}|ddd|ddd  kr|ddd  kr|ddd  krt 	dgksn t
d S )NrD  rw   r   r{   r   r   rJ  )rw   rk   rd   r   r   r   rJ   rC   r+  r;  r   rK  r}   r}   r   test_cupy_dotproduct"  s     




rI  c                  C   s^   t std tttggtt t d} | t jddg}|dksFtdtt	|ksZtd S )NJAX not installedrx   r   r   r   
rx   rk   rJ   r   r   rq   r;  r   r   rs  rF  r}   r}   r   test_jax_array_arg3  s    rL  c                  C   s^   t std tttggtt t d} | t jddg}|dksFtdtt	|ksZtd S )NrJ  rq   r   r   r   rx   rK  rF  r}   r}   r   test_jax_array_arg_using_numpy=  s    rM  c                  C   s   t std ttttg} ttttgt| | dd}ttttgt| | jdd}ttttgt| j| dd}ttttgt| | jdd}|ddd|ddd  kr|ddd  kr|ddd  krt j	
dgksn td S )NrJ  rx   r   r{   r   r   rJ  )rx   rk   rd   r   r   r   rJ   rC   r+  rq   r;  r   rK  r}   r}   r   test_jax_dotproductG  s     



rN  c            	      C   s  dd } dd }dd }G dd d}|t ttft t t t t t d	t  d	t  t t t d	 tt d	  gd
d|t ttft tt  ttt  ttt d ttt d gdd|t ttft tt ttt ttt gdd|t ttftt t t gttd t t ggt t tt t t  tt t  ttt t ggddd|t tft t d d	 t t t t t d	t  d  t t d d	  d	t  d t t  gddg}|D ]N}ts|j	rƐqdd|| |fD ]&}|j
|d}||j }|| qԐqd S )Nc                 S   s   d| fS )Nr}   r}   )exprsr}   r}   r   	no_op_cseY  s    z$test_lambdify_cse.<locals>.no_op_csec                 S   s   ddl m} || ttddS )Nr   rD   clsr   )sympy.simplify.cse_mainrE   rK   r   )rO  rE   r}   r}   r   	dummy_cse\  s    z$test_lambdify_cse.<locals>.dummy_csec                 S   s   ddl m}m} || |dS )Nr   )cse_release_variablesrE   )postprocess)rT  rV  rE   )rO  rV  rE   r}   r}   r   minmem`  s    z!test_lambdify_cse.<locals>.minmemc                   @   s2   e Zd ZddddZdd Zdddd	d
ZdS )ztest_lambdify_cse.<locals>.CaseF)requires_numpyc                   sB   || _ || _|| _tt| j | j  fdd|D | _|| _d S )Nc                    s   g | ]}|   qS r}   )r  r   ).0eZ	subs_dictr}   r   
<listcomp>j  s     z<test_lambdify_cse.<locals>.Case.__init__.<locals>.<listcomp>)r   rO  r9  rA  r   r   rY  )r  r   rO  r9  rY  r}   r\  r   __init__e  s    z(test_lambdify_cse.<locals>.Case.__init__c                S   s   t | j| j|dS )NrD   )rJ   r   rO  )r  rE   r}   r}   r   rJ   m  s    z(test_lambdify_cse.<locals>.Case.lambdifyr   )abstolreltolc                   s   | j r.t fddt| jD s*td S t| jD ]B\}}t| | }|dkrf| k sztq8|t| k s8tq8d S )Nc                 3   s2   | ]*\}}t j| t j|td  dV  qdS )rx  )r[  r  N)rq   rm  Zasarrayr)  )rZ  r  r   r_  r`  r:  r}   r   	<genexpr>r  s
    zAtest_lambdify_cse.<locals>.Case.assertAllClose.<locals>.<genexpr>r   )rY  r@  	enumerater   r   r   )r  r:  r_  r`  r  r   Zabs_errr}   ra  r   assertAllClosep  s    z.test_lambdify_cse.<locals>.Case.assertAllCloseN)r0  r1  r2  r^  rJ   rd  r}   r}   r}   r   Cased  s   re  r   )r   r   r  )r   rO  r9  r{   )r   r   r  )r   r   r  r   )r   r   r   T)r   rO  r9  rY  )r{   r   FrD   )r   r   r   r   r0   r%   rd   r$   rq   rY  rJ   r9  rd  )	rP  rU  rX  re  ZcasesZcaseZ_cser   r:  r}   r}   r   test_lambdify_cseX  sn    






	"
" /
rf  c                     s@   t td tttd ttd g fdddd} | s<td S )NrQ  r   c                    s   t |  dS )NrS  rD   )r[  r  r}   r   r     r   z"test_issue_25288.<locals>.<lambda>rD   )rK   r   rJ   r   r$   r   )okr}   rg  r   test_issue_25288  s    
*ri  c                	   C   s(   t   ttthtt  W 5 Q R X d S r   )r   rJ   r   r   r}   r}   r}   r   test_deprecated_set  s    rj  c                  C   s  t std tddd} t| | j|  d}|t dddgdksFt|t dddgdksbtt| | | j d}|t dddgdkst|t dddgdkstt| | | j |  d}t dgdgdgg}t dgdgd	gg}t |||std S )
Nr   Xr   r{   rq   r   rJ     r  )rq   rk   re   rJ   r+  r;  r   r  )rk  r   rd  re  r}   r}   r   test_issue_13881  s    rm  c                  C   sx   t dt} t dt}t| d |d  | d ||  d    }| }t| |ftf|dd}|dd	}|d
ksttd S )Nr   r   r   r   r   TrD   )r   r   r   g     r@)r   r   r   expandrJ   r   )r   r  r   Z	eval_exprZansr}   r}   r   test_23536_lambdify_cse_dummy  s    (
ro  c                   @   sT   e Zd ZdZdZdZdd Zedd Zedd Z	edd	 Z
d
d Zdd ZdS )LambdifyDocstringTestCaseNc                 C   s   || _ || _d S r   docstring_limitexpected_redacted)r  rr  rs  r}   r}   r   r^    s    z"LambdifyDocstringTestCase.__init__c                 C   s   d}| j s| jS |S )NzEEXPRESSION REDACTED DUE TO LENGTH, (see lambdify's `docstring_limit`))rs  EXPR)r  Zexpr_redacted_msgr}   r}   r   expected_expr  s    z'LambdifyDocstringTestCase.expected_exprc                 C   s   d}| j s| jS |S )NzFSOURCE CODE REDACTED DUE TO LENGTH, (see lambdify's `docstring_limit`))rs  SRC)r  Zsrc_redacted_msgr}   r}   r   expected_src  s    z&LambdifyDocstringTestCase.expected_srcc                 C   s"   d| j  d| j d| j d}|S )Nz(Created with lambdify. Signature:

func(z)

Expression:

z

Source code:

z

Imported modules:

)	SIGNATUREru  rw  )r  expected_docstringr}   r}   r   ry    s    	z,LambdifyDocstringTestCase.expected_docstringc                 C   s
   t | jS r   )r  ry  r  r}   r}   r   __len__  s    z!LambdifyDocstringTestCase.__len__c                 C   s   | j j d| j d| j dS )Nz(docstring_limit=z, expected_redacted=))r,  r0  rr  rs  rz  r}   r}   r   __repr__  s    z"LambdifyDocstringTestCase.__repr__)r0  r1  r2  rx  rt  rv  r^  propertyru  rw  ry  r{  r}  r}   r}   r}   r   rp    s   


rp  c                  C   s   G dd dt } td}| d dd| ddd| ddd| dd	d| d
d	df}|D ](}t|g|d|jd}|j|jksRtqRd S )Nc                   @   s   e Zd ZdZdZdZdS )zNtest_lambdify_docstring_size_limit_simple_symbol.<locals>.SimpleSymbolTestCaser   z(def _lambdifygenerated(x):
    return x
Nr0  r1  r2  rx  rt  rv  r}   r}   r}   r   SimpleSymbolTestCase  s   r  r   Frq  r   r{   r   Tr|   r   rr  )rp  r   rJ   rr  r  ry  r   )r  r   
test_cases	test_caselambdified_exprr}   r}   r   0test_lambdify_docstring_size_limit_simple_symbol
  s     




r  c                  C   s   G dd dt } td\}}}||g||| | d  g}| d dd| ddd| dd	d| d
d	d| dd	df}|D ],}t|||g|d|jd}|j|jksvtqvd S )Nc                   @   s   e Zd ZdZdZdZdS )zHtest_lambdify_docstring_size_limit_nested_expr.<locals>.ExprListTestCasex, y, zzK[x, [y], z, x**3 + 3*x**2*y + 3*x**2*z + 3*x*y**2 + 6*x*y*z + 3*x*z**2 +...zdef _lambdifygenerated(x, y, z):
    return [x, [y], z, x**3 + 3*x**2*y + 3*x**2*z + 3*x*y**2 + 6*x*y*z + 3*x*z**2 + y**3 + 3*y**2*z + 3*y*z**2 + z**3]
Nr  r}   r}   r}   r   ExprListTestCase)  s
   r  r  r   Frq     r   Tr   r|   r   r  )rp  r   rn  rJ   rr  r  ry  r   )r  r   r   r   r   r  r  r  r}   r}   r   .test_lambdify_docstring_size_limit_nested_expr'  s"    




r  c                  C   s   G dd dt } td\}}}ttj|g|| | || | d  gg}| d dd| ddd| dd	d| d
d	d| dd	df}|D ],}t|||g|d|jd}|j|j	kst
qd S )Nc                   @   s   e Zd ZdZdZdZdS )zAtest_lambdify_docstring_size_limit_matrix.<locals>.MatrixTestCaser  zNMatrix([[0, x], [x + y + z, x**3 + 3*x**2*y + 3*x**2*z + 3*x*y**2 + 6*x*y*z...zdef _lambdifygenerated(x, y, z):
    return ImmutableDenseMatrix([[0, x], [x + y + z, x**3 + 3*x**2*y + 3*x**2*z + 3*x*y**2 + 6*x*y*z + 3*x*z**2 + y**3 + 3*y**2*z + 3*y*z**2 + z**3]])
Nr  r}   r}   r}   r   MatrixTestCaseK  s
   r  r  r   Frq  r  r   Tr   r|   r   r  )rp  r   rd   r   r$  rn  rJ   rr  r  ry  r   )r  r   r   r   r   r  r  r  r}   r}   r   )test_lambdify_docstring_size_limit_matrixI  s"    .




r  c                  C   s8   t d} d| ff}t| |}|d}|dks4tdd S )Nr  r}   r{   )r}   r   z2Lambdify did not handle the empty tuple correctly.r  )r  r   r   r:  r}   r}   r   test_lambdify_empty_tuplel  s
    

r  c                  C   sT   d} t ddd }t ddd }d}dt }t||| s@tt||| sPtd S )	NrZ  r{   r  r   r   r   gQ@te_޿gF#O3t9)ra   r   r   r   r   )r  Zsympy_result_integerZsympy_result_complexZmpmath_result_integerZmpmath_result_complexr}   r}   r   (test_assoc_legendre_numerical_evaluations  s    r  (/  	itertoolsr   r   r  r   Zsympy.testing.pytestr   r   Zsympy.concrete.summationsr   Zsympy.core.functionr   r   r   Zsympy.core.numbersr	   r
   r   r   r   r   r   Zsympy.core.relationalr   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Z(sympy.functions.combinatorial.factorialsr   r   Z%sympy.functions.combinatorial.numbersr   r   Z$sympy.functions.elementary.complexesr   Z&sympy.functions.elementary.exponentialr   r   Z%sympy.functions.elementary.hyperbolicr   Z#sympy.functions.elementary.integersr   Z(sympy.functions.elementary.miscellaneousr   r   r   Z$sympy.functions.elementary.piecewiser    Z(sympy.functions.elementary.trigonometricr!   r"   r#   r$   r%   r&   Zsympy.functions.special.besselr'   r(   r)   r*   r+   r,   Z&sympy.functions.special.beta_functionsr-   r.   r/   Z'sympy.functions.special.delta_functionsr0   Z'sympy.functions.special.error_functionsr1   r2   r3   r4   r5   r6   r7   Z'sympy.functions.special.gamma_functionsr8   r9   r:   r;   Zsympy.integrals.integralsr<   Zsympy.logic.boolalgr=   r>   r?   r@   rA   rB   Z%sympy.matrices.expressions.dotproductrC   rT  rE   Zsympy.tensor.arrayrF   rG   Zsympy.tensor.indexedrH   r   rJ   Zsympy.utilities.iterablesrK   Zsympy.vectorrL   Zsympy.core.exprrM   Zsympy.codegen.cfunctionsrN   rO   rP   rQ   rR   rS   Zsympy.codegen.numpy_nodesrT   rU   Zsympy.codegen.scipy_nodesrV   rW   rX   rY   rZ   Z#sympy.functions.special.polynomialsr[   r\   r]   r^   r_   r`   ra   rb   rc   Zsympy.matricesrd   re   rf   r   rg   Zsympy.printing.numpyrh   ri   rj   rk   Zsympy.utilities.decoratorrl   Zsympy.utilities.exceptionsrm   Zsympy.externalrn   ro   rp   r   ZMutableDenseMatrixrq   rr   ru   rv   rw   rx   ry   osenvironr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r  r  r  r!  r$  r%  r&  r'  r*  r/  rE  rH  rL  rM  rO  rQ  rU  rX  r]  rc  rf  rj  ro  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r!  r"  r)  r*  r+  r-  r.  r0  r3  r4  r5  r6  r<  rA  rB  rC  rG  rH  rI  rL  rM  rN  rf  ri  rj  rm  ro  rp  r  r  r  r  r  r}   r}   r}   r   <module>   s  $  $  ,






	

		

				




"	
 



9
<



	

		






]+"#