o
    8Vag                     @   s  d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZBmCZC d dlDmEZEmFZF d dlGmHZH d dlImJZJmKZKmLZL d d	lMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZV d d
lWmXZXmYZYmZZZ d dl[m\Z\ d dl]m^Z^ d dl_m`Z`maZa d dlmbZb d dlcmdZd d dlemfZf d dlgmhZhmiZi d dlZeXZjefdZkefdddgidZlefdZmefdZnefdZoenr'd dlpZpdepjqd< ed\ZrZsZtZudd Zvdd  Zwd!d" Zxd#d$ Zyd%d& Zzd'd( Z{d)d* Z|d+d, Z}d-d. Z~d/d0 Zedd1d2 Zedd3d4 Zedd5d6 Zedd7d8 Zedd9d: 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` 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 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    )productN)raises)5symbolslambdifysqrtsincostanpiacosacoshRationalFloatLambda	PiecewiseexpEIntegralooIAbsFunctiontruefalseAndOrNotITEMinMaxfloordiffIndexedBaseSum
DotProductEqDummysincerferfc	factorialgammaloggammadigammaRisingFactorialbesseljbesselybesselibesselkSbetabetaincbetainc_regularizedfresnelcfresnels)expm1log1pexp2log2log10hypot)	logaddexp
logaddexp2)cosm1)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)import_module)
uppergamma
lowergammanumpyscipyfromlistsparse)Zimport_kwargsnumexpr
tensorflowcupy2ZTF_CPP_MIN_LOG_LEVELzw,x,y,zc                      s.   t g d tt fdd   dksJ d S )N   c                          dS )N re   fre   E/usr/lib/python3/dist-packages/sympy/utilities/tests/test_lambdify.py<lambda>5       ztest_no_args.<locals>.<lambda>r   r   	TypeErrorre   re   rf   rh   test_no_args3   s   
rm   c                  C   s"   t tdt } | ddksJ d S N   rb   r   xrf   re   re   rh   test_single_arg9   s   rr   c                  C   s(   t ttgtt } | dddksJ d S Nrb   ro      )r   rq   yrf   re   re   rh   test_list_args>   s   rv   c                     s   t ttggttg  ddgddgksJ tt fdd t ttfttfgttttgddg dks9J 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g dksbJ d S )N[   ro   c                      
    ddS Nrb   ro   re   re   )f1re   rh   ri   F      
 z"test_nested_args.<locals>.<lambda>)      )I      )r|   r}   r~   r   c                      rx   )Nrt   r   re   re   )f2re   rh   ri   J   r{   
   4      ,   )r   r   r   r   )r   wrq   r   rl   ru   z)f3re   )rz   r   rh   test_nested_argsC   s    $r   c                      sH   t dd  ddddksJ  ddd	d
ksJ tt fdd d S )Nzx,y,zzz,y,xrt   ro   rb   rb   ro   rt         ?       @      @r   r   r   c                      rc   Nr   re   re   rf   re   rh   ri   U   rj   ztest_str_args.<locals>.<lambda>rk   re   re   rf   rh   test_str_argsP   s   
r   c                  C   @   dd } t tttd| i}|ddksJ |ddksJ d S )Nc                 S      dS Nrb   re   rq   re   re   rh   ri   Y       z&test_own_namespace_1.<locals>.<lambda>r   皙?rb   d   r   rq   r   myfuncrg   re   re   rh   test_own_namespace_1X   s   r   c                  C   r   )Nc                 S   r   r   re   r   re   re   rh   r   `   s   z$test_own_namespace_2.<locals>.myfuncr   r   rb   r   r   r   re   re   rh   test_own_namespace_2_   s   r   c                  C   s$   t tttt} | ddksJ d S )Nr           )r   rq   r   mathrf   re   re   rh   test_own_moduleg   s   r   c                   C   s    t tdd  t tdd  d S )Nc                   S   s   t dS r   r   re   re   re   rh   ri   n   rj   ztest_bad_args.<locals>.<lambda>c                   S   s   t ddgS ry   r   re   re   re   rh   ri   p       )r   rl   re   re   re   rh   test_bad_argsl   s   r   c                  C   sL   t ttt ddi} | ddksJ t ttt ddi} | ddks$J d S )Nr
   gQ	@r   r                 ?rb   y      ?      ?)r   rq   r
   r   rf   re   re   rh   
test_atomss   s   r   c                  C   sv   dt j_t d} ttttd}|tttksJ d}| |tdd t	t
|    k r6|k s9J  J d S )N2   40.19866933079506121545941262711838975037020672954020sympyV瞯<rb      )mpmathmpdpsmpfr   rq   r   r   evalfr   strsin02rg   precre   re   rh   test_sympy_lambda   s   
<r   c                     sb   dt j_t d} ttttd d}|  d|    k r#|k s&J  J tt fdd d S )Nr   r   r   r   皙?c                          t S Nr   re   rf   re   rh   ri      rj   z"test_math_lambda.<locals>.<lambda>	r   r   r   r   r   rq   r   r   rl   r   r   re   rf   rh   test_math_lambda   s   
&r   c                     sh   dt j_t d} ttttd d}|  t d|    k r&|k s)J  J tt fdd d S )Nr   r   r   n5z0.2c                      r   r   r   re   rf   re   rh   ri      rj   z$test_mpmath_lambda.<locals>.<lambda>r   r   re   rf   rh   test_mpmath_lambda   s   
,r   c                  C   sL   dt j_t d} tt| d}d}| |d|    k r!|k s$J  J d S )Nr   r   r   r   r   )r   r   r   r   r   rq   r   re   re   rh   test_number_precision   s
   
*r   c                   C   s6   dt j_ttdtdd ttdksJ d S )Nr   re   r   )r   r   r   r   r   r
   r   re   re   re   rh   test_mpmath_precision   s   .r   c                  C   s>   ddl m}  |  D ]\}}|tjv sJ |tjv sJ q
d S )Nr   )MATH_TRANSLATIONS)sympy.utilities.lambdifyr   itemsr   __dict__r   )r   symmatre   re   rh   test_math_transl   s
   r   c                  C   sF   ddl m}  |  D ]\}}|tjv s|dksJ |tjv s J q
d S )Nr   )MPMATH_TRANSLATIONSrN   )r   r   r   r   r   r   )r   r   r   re   re   rh   test_mpmath_transl   s
   r   c                  C   sJ   t std ddlm}  |  D ]\}}|tjv sJ |t jv s"J qd S )Nnumpy not installed.r   )NUMPY_TRANSLATIONS)rZ   rU   r   r   r   r   r   )r   r   Znumpre   re   rh   test_numpy_transl   s   r   c                  C   sV   t std ddlm}  |  D ]\}}|tjv sJ |t jv s(|t jjv s(J qd S )Nscipy not installed.r   )SCIPY_TRANSLATIONS)r[   rU   r   r   r   r   r   special)r   r   Zscipre   re   rh   test_scipy_transl   s   r   c                  C   s@   t std ttttd} | ddksJ | ddksJ d S )Nr   rZ   rd   rb   )rZ   rU   r   rq   r   rf   re   re   rh   test_numpy_translation_abs   s
   r   c                  C   s   t std ddlm}  d}tttf}| j D ]1}||v rqt	|}t
|dr.|jd }nd}|d | }t||| dd}|d	|  d usIJ qd S )
Nnumexpr not installed.r   )NumExprPrinter)wherecomplexcontains_nargsrb   r^   modules)rb   )r^   rU   sympy.printing.lambdareprr   rq   ru   r   Z_numexpr_functionskeysr3   hasattrr   r   )r   Z	blacklistZ	arg_tupler   Zssymnargsargsrg   re   re   rh   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)sre   re   rh   ri      s    z!test_issue_9334.<locals>.<lambda>)keyF)r   dummifyro   r   )r^   rU   rZ   r3   sortedZfree_symbolsr   random)exprabfunc_numexprZfooZbarre   re   rh   test_issue_9334   s   r   c                  C   s   dd l } ts
td ttttftttdkfttdkft}|ddddks(J |   | 	dt
 t|ddddks?J W d    d S 1 sJw   Y  d S )	Nr   r   rd   rb      *   ignorenan)warningsr^   rU   r   rq   ru   r   r   catch_warningssimplefilterRuntimeWarningr   )r   r   re   re   rh   test_issue_12984  s   (
"r   c                  C   sr   t ttd } | ddksJ | ddksJ | ddksJ | ddks'J | ddks/J | ddks7J d S )	Nro   rd   rb   r   r         @      @rp   rf   re   re   rh   test_exponentiation  s   r   c                  C   sj   t ttt} | ddksJ | ddksJ | ddksJ t| dd d	k s+J | d
dks3J d S )Nr   r   rb   r   r   r   ro   g9v?gMbP?r   r   )r   rq   r   absrf   re   re   rh   	test_sqrt  s   r   c                  C   s   t tgttttgd} | t}d}| |d d   k r#|k s&J  J | |d   k r4|k s7J  J | d}d}| |d d   k rM|k sPJ  J | |d   k r^|k saJ  J d S )Nr   gdy=r   rb   n!	@gh㈵>)r   rq   r   r   r
   )rg   dr   re   re   rh   	test_trig!  s   &"&&r   c                  C   sX   t tttd  } ttt| ttttf}|t }d|  k r'dk s*J  J d S )Nro   giv[?gm[?)r   rq   r   r   ru   r   r   )rg   lr   re   re   rh   test_integral-  s   
 r   c                  C   s`   t ddtd td    tddftdtf} ttg| }|d}d|  k r+dk s.J  J d S )Nrb   ro   r   gX<?g<?)r   rq   ru   r   r   )ir   r   re   re   rh   test_double_integral4  s   , r   c                      sT   t tttftttf  ddddksJ  ddddksJ tt fd	d
 d S )Nrt   ro   rb   r   r   r   r   r   c                      rc   r   re   re   rf   re   rh   ri   D  rj   z$test_vector_simple.<locals>.<lambda>)r   rq   ru   r   r   rl   re   re   rf   rh   test_vector_simple?  s   r   c                      s\   t tdt dt f tt fdd  ddksJ  ddks$J  dd	ks,J d S )
Nrd   rb   c                      rc   r   re   re   rf   re   rh   ri   I  rj   z+test_vector_discontinuous.<locals>.<lambda>)g      r   ro   )            ?r   )r   r   )r   rq   r   ZeroDivisionErrorre   re   rf   rh   test_vector_discontinuousG  s
   r  c                  C   sV   t tgttttgd} | t}t|d d dk sJ t|d d dk s)J d S )Nr   r   rb   -C6?)r   rq   r   r   r
   r   rg   r   re   re   rh   test_trig_symbolicO  s   r  c                  C   sT   t tgttttg} | d}t|d d dk sJ t|d d dk s(J d S )Nr   r   rb   r  )r   rq   r   r   r   r  re   re   rh   test_trig_floatV  s   r  c                  C   s   t ttd } | ddksJ t tttgtttg} | dddg dks&J t ttt} | ddks5J t ttfttt d } | dddksKJ d S )	Nro   r   rb   rt   )rt   ro   rb   r   r   r   )r   rq   ru   r   r   r   rf   re   re   rh   	test_docs]  s   r  c                  C   s,   t ttfttdd} | dddksJ d S )Nr   r   r   r   )r   rq   ru   r   rf   re   re   rh   	test_mathh  s   r  c                  C   sP   t tttd } t| dtsJ t tttd dd} t| dts&J d S )Nro   r   r   )r   rq   r   
isinstancefloatrf   re   re   rh   test_sinm  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s4J ttttf| | gfdd}|ddd||gfksNJ 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syJ t|j|dddd|ksJ d S )Nr   rb   ro   rt   r   r   r   )rN   rq   ru   r   r   r   ZjacobianT)AZsolrg   Jvre   re   rh   test_matrixt  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sIJ G dd dt}|ttdgdgd	ggtt}t d
 t | d	kssJ tdddd}ttddddii|}tt|d}t | d	ksJ t|tt fdd d S )Nr   r   rb   ro   rt   rZ   c                   @   s   e Zd ZdS )ztest_numpy_matrix.<locals>.dotN)__name__
__module____qualname__re   re   re   rh   dot  s    r  r   )   rt   FT)Zallow_unknown_functionsZinlineZfully_qualified_modulesZuser_functionsprinterc                      s   t td S )Nr  rp   re   inpZp3Z	x_dot_mtxre   rh   ri         z#test_numpy_matrix.<locals>.<lambda>re   )rZ   rU   rN   rq   ru   r   r   arrayr   testingassert_allcloser	  Zndarrayr   ZzerosalldictrR   r   	Exception)r  sol_arrrg   r  Zf_dot1Z	strict_kwZp2Zf_dot2re   r  rh   test_numpy_matrix  s$   $ 

r"  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   rb   r   rZ   r   ro   )	rZ   rU   rN   rq   r   r  r  assert_array_equalr  r  rg   re   re   rh   test_numpy_transpose  s
   (r%  c                  C      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rm|ddd  krm|ddd  krmt 	dgkspJ  J d S )Nnumpy not installedrZ   r   rb   ro   rt      )
rZ   rU   rN   rq   ru   r   r   r$   r  r  r  rz   r   r   Zf4re   re   rh   test_numpy_dotproduct  s    




r*  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   rb   r   rd   rZ   r   ro   r   )rZ   rU   rN   rq   r   r  r#  r  r$  re   re   rh   test_numpy_inverse  s
   (r+  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 j
|ddd| t|dddt j	sMJ d S )Nr   r   rb   ro   rt   ZImmutableDenseMatrixrZ   )rZ   rU   rN   rq   ru   r   r   r  r   Zmatrixr  r  r	  )r  r!  rg   re   re   rh   test_numpy_old_matrix  s   $ r,  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s'J d S )Nr   r   r[   r   rb   ro   )	r[   rU   rP   rq   ru   r   r	  r]   Z
coo_matrix)r  rg   Bre   re   rh   test_scipy_sparse_matrix  s   
r.  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 t|t d	gt d
gd	ks<J t	t|t d	gt dgdksQJ t jdd d S )Nr   rb   rd   TrZ   r   r   )Zdivider   r   infwarn)
rZ   rU   r   rq   ru   r   Zseterrr
  r  r   )prg   re   re   rh    test_python_div_zero_issue_11306  s   (&*r2  c                  C   s   d dg} t r| d tr| d | D ](}tttjt |d}|ddks(J ttttjt |d}|ddks<J qtt	t
g| D ]%\}}tt|t|d}|dd	ksYJ |d	d	ksaJ |d
dksiJ qDd S )Nr   rZ   r   r   ro   r   r   rd   rb   y      @      @r   )rZ   appendr   r   rq   r3   ZOner    r   r   r   )Zmodsmodrg   Zabsfuncr   re   re   rh   test_issue9474  s    

r5  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   ro   rb   r      r   r   rZ   r   r^   绽|=)rtol)r^   rU   rZ   r   rq   ru   r!   Zlinspacer   r  r  )rr   ZxnZynZfv_exactZfv_numpyZ
fv_numexprre   re   rh   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 g d	 tttttd
kft td
k f}t j|t g dt dt j	dg d S )Nr   rt   ro   r   )r   TrZ   r   r   )
r   rb   ro   r   r   r   $   1   @   Q   r   rd   r   rb   rb   )
rZ   rU   r   rq   r   r  r#  Zaranger  r   )piecesrg   Z
nodef_funcre   re   rh   test_numpy_piecewise  s    "rB  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   rZ   r   TF)rZ   rU   r   rq   ru   r   r   r   r   r  r  r#  )Zand_funcZ
and_func_3Zor_funcZ	or_func_3Znot_funcZarr1Zarr2Zarr3re   re   rh   test_numpy_logical_ops  s      rC  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   rb   ro   rZ   r   r   rt   r   g      ?      @r   g      ?g     R@g     ]@      )rZ   rU   rN   rq   ru   r   r   r   r  r#  r  )ZxmatZymatZmat_funcrg   re   re   rh   test_numpy_matmul"  s   $$rG  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 || |||| ||ssJ d S )	Nr   r   rt      ro   rZ   r   r^   )rZ   rU   r^   r   randnr   rq   r   ru   r	   r   r   r   r   r   r   r   r   allclose)r   r   cr   ZnpfuncZnefuncre   re   rh   test_numpy_numexpr0  s   6$rL  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  s:J ttddd }tt	tf|t	td
d}t 
|| |d|  | d	 s`J d S )Nr   r   ro   r   ufevalc                 S   s   |d d S rn   re   rq   ru   re   re   rh   ri   E  r   z,test_numexpr_userfunctions.<locals>.<lambda>rb   r^   r   c                 S   s   d|  | d S rn   re   rO  re   re   rh   ri   I  s    )rZ   rU   r^   r   rI  typer   classmethodr   rq   rJ  rS   ru   )r   r   rM  funcre   re   rh   test_numexpr_userfunctions>  s   &rS  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|dd	ks5J W d    d S 1 s@w   Y  d S )
Ntensorflow not installed.rb   ro   r_   r   r   Zdtypesessionr   )r_   rU   r   r   rq   r   r   compatv1Sessionconstantfloat32rN  r   rR  r   r   re   re   rh   test_tensorflow_basic_mathN  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jj
t jd}||j||didd	ks9J W d    d S 1 sDw   Y  d S )
NrT  rb   ro   r_   r   rU  r   rW  Z	feed_dictr   )r_   rU   r   r   rq   r   r   rX  rY  rZ  Zplaceholderr\  rN  r]  re   re   rh   test_tensorflow_placeholdersY  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>J W d    d S 1 sIw   Y  d S )
NrT  rb   ro   r_   r   r   rU  r_  r   )r_   rU   r   r   rq   r   r   rX  rY  rZ  Variabler\  runZinitializerrN  r]  re   re   rh   test_tensorflow_variablesd  s    "rc  c                  C   s~   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s-J W d    d S 1 s8w   Y  d S )NrT  r_   r   FTrV  )r_   rU   r   r   r   rq   ru   r   rX  rY  rZ  rN  r   rR  r   re   re   rh   "test_tensorflow_logical_operationsp  s   "re  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 -}|dj	|ddks3J |dj	|ddks?J |dj	|ddksKJ W d    d S 1 sVw   Y  d S )NrT  r   rd   rb   r_   r   rV  )
r_   rU   r   r%   rq   r   rX  rY  rZ  rN  rd  re   re   rh   test_tensorflow_piecewisez  s   &"rf  c                  C   sv   t std ttt td } tt| dd}t jj }|dj|ddks)J W d    d S 1 s4w   Y  d S )NrT  ro   r_   r   r   rV  r   )	r_   rU   r   rq   r   rX  rY  rZ  rN  rd  re   re   rh   test_tensorflow_multi_max     "rg  c                  C   sv   t std ttt td } tt| dd}t jj }|dj|ddks)J W d    d S 1 s4w   Y  d S )NrT  ro   r_   r   r   rV  )	r_   rU   r   rq   r   rX  rY  rZ  rN  rd  re   re   rh   test_tensorflow_multi_min  rh  ri  c                  C   sl   t std tdk} tt| dd}t jj }|dj|ddks$J W d    d S 1 s/w   Y  d S )NrT  r   r_   r   rb   rV  T)r_   rU   rq   r   rX  rY  rZ  rN  rd  re   re   rh   test_tensorflow_relational  s   "rj  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	
 V}t d}| |j|ddksBJ ||j|ddksNJ ||j|d}td }t|| dk sfJ ||j|d}td }t|| dk s~J W d    d S 1 sw   Y  d S )	Nztensorflow not installedr_   r   y      ?       @rV  rb   ro   gư>)r_   rU   r   rq   rB   rC   r   rD   rX  rY  rZ  r[  rN  r   r   )func1func2Zfunc3Zfunc4r   r   Ztensorflow_resultsympy_resultre   re   rh   test_tensorflow_complexes  s"   
"rn  c                  C   s~   t std tttggtt t d} t jj }| t ddg}|j	|ddks-J W d    d S 1 s8w   Y  d S )NrT  r_   r   r   rV  g      @)
r_   rU   r   rq   ru   rX  rY  rZ  r[  rN  )rg   r   Zfcallre   re   rh   test_tensorflow_array_arg  s   "ro  c                  C   s&   t ttt } | ttt ksJ d S r   r   rq   ru   r   rf   re   re   rh   test_sym_single_arg  s   rq  c                  C   s0   t ttgtt t } | dddt ksJ d S rs   rp  rf   re   re   rh   test_sym_list_args  s   rr  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.J |t tt	ks:J d S )Nro   r   r   )
r   rq   r   r   r   r   ru   Zdoitr   r
   )rg   r   re   re   rh   test_sym_integral  s    (rs  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s,J tt|t|dfd	}|d
dks?J |d
dksGJ d S )Nrg   c                 S   r   )Nfirst fre   r   re   re   rh   ri     r   z&test_namespace_order.<locals>.<lambda>c                 S   r   )Nzsecond fre   r   re   re   rh   ri     r   c                 S   r   )N
function gre   r   re   re   rh   ri     r   )rg   grv  r   r   rb   rt  ru  )r   r   r   rq   )Zn1Zn2rg   rv  Zif1Zif2re   re   rh   test_namespace_order  s   

rw  c                  C   s   t d} t| | dd d S )Nrq   r   r   )r   Symbolr   r   re   re   rh   test_namespace_type  s   
ry  c                     s   t ddd  t ddd } tt t}tt| t}t tt| tks*J |ddks2J |dtdks=J td}t|drIJ t |d	d }t|dsWJ t dd
d t	t
 fdd d S )Nrg   c                 S      d|  S Nro   re   r   re   re   rh   ri     rj   ztest_imps.<locals>.<lambda>c                 S   s
   t | S r   )r   r   r   re   re   rh   ri     r{   rt      r   Z_imp_c                 S   rz  r{  re   r   re   re   rh   ri     rj   c                 S      | d S )Ne   re   r   re   re   rh   ri   	  rj   c                      s   t t tS r   rp   re   rg   r   re   rh   ri   
  r  )rS   r   rq   r   r   r   r   r   r   r   
ValueError)rv  l1l2rR  Zmy_fre   r  rh   	test_imps  s   
r  c                     sJ   t dttfD ]\}   fdd}td|}|| }||| ks"J qd S )N)r   r   ro   r   c                    s   | dkr dS )Nr   rb   re   )r   Zerror_classre   rh   r     s   z test_imps_errors.<locals>.myfuncrg   )r   rl   r  rS   )valr   rg   r   re   r  rh   test_imps_errors  s   
r  c                   C   s   t tdd  d S )Nc                   S   s   t tdd S )Nc                 S   s   | S r   re   r   re   re   rh   ri   "  r   z8test_imps_wrong_args.<locals>.<lambda>.<locals>.<lambda>)rS   r   re   re   re   rh   ri   "      z&test_imps_wrong_args.<locals>.<lambda>)r   r  re   re   re   rh   test_imps_wrong_args!     r  c                  C   s
  t j} tt| tddksJ ttd| t ddksJ tttft| t dddks1J tddd } tt| tddksEJ ttd| t ddksTJ tttft| t dddksfJ tt| ttf}|d	d
kswJ tt| ttg}|d	dd	gksJ tt| t| ttfg}|d	dd
gksJ tt| tti}|d	dd	iksJ tt| tti}|d	dd	iksJ ttt| ti}|d	d	diksJ ddd i}tt| t|}|d	dksJ tt| t|dd}|d	dksJ d S )Nr   rb   ro   rg   c                 S   r}  )Nr   re   r   re   re   rh   ri   -  rj   z$test_lambdify_imps.<locals>.<lambda>r   r~  rt   )g   rt   r  c                 S   r}  )Nc   re   r   re   re   rh   ri   ?  rj   F)Zuse_impsf   )r   r   r   rq   ru   rS   )rg   lamr   re   re   rh   test_lambdify_imps%  s2   $$r  c                     s  t dtd tdt d} d d   }t f|}|dddks0J ttdtd  }| d d  ksMJ t| fd|   }|ddd	ksaJ tt fd
d tt fdd tt fdd d S )NtFGz\alpharo   rt   	   rb   r   c                      s&   t     d S )Nr   r   re   r  r  r  re   rh   ri   W  s   & z$test_dummification.<locals>.<lambda>c                      s   t d  d  d S )Nro   r   r   re   r  r  re   rh   ri   X      c                      s   t d  d  d S )Nro   r   r   r   re   r  re   rh   ri   Y  r  )r   r   r   r   r   SyntaxError)ZalphaZ	some_exprr  re   r  rh   test_dummificationG  s    r  c                  C   sJ   t ddd} t| | }|ddksJ t| | dd}|ddks#J d S )Nz{v}ro   rb   Tr   )r   rO   r   )Zcurlyvr  re   re   rh   test_curly_matrix_symbol\  s
   
r  c                  C   s.   t d} | d }t| |}|ddksJ d S )Nifro         @r   )r   r   )Z	python_ifr   rg   re   re   rh   test_python_keywordse  s   
r  c                  C   s   t ttttftt t t } d }| j d t| |ks"J td}t |t	|} d }| j d t| |ks@J 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 +...)
r   r   rq   ru   r   
splitlines__doc__lenr   sum)rR  refZsymsre   re   rh   test_lambdify_docstringo  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	| |sBJ t	| |sJJ t	| |sRJ 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sJ d S )Nr   IntervalPrinterc                    s      | S r   )doprint)r   r  re   rh   intervalrepr     z+test_special_printers.<locals>.intervalreprro   rt   re   r   )r   r  rb   r   g?   )Zsympy.polys.numberfieldsr  r   r3   Halfr   rP  r   mpir	  rq   r,   )r  r   Zfunc0rk  rl  r  Zexp1r;   Zexp3Zexp_lsZsol1Zsol2Zsol3Zsol_lsre   r  rh   test_special_printers  s&   




r  c                   C   s,   t g t du s
J t g t du sJ d S )NTF)r   r   r   re   re   re   rh   test_true_false  s   r  c                   C   sv   t tttfftt dddksJ t ttttffftt t t dddks*J t ttd ddddks9J d S )	Nrb   r   rt   )ro   )rt   r   r   Fr  ro   )r   rq   ru   r   r   re   re   re   rh   test_issue_2790  s   $0"r  c                  C   s.   t ddd } | | d tdksJ d S )Nrg   c                 S   s   | d S r{  re   r   re   re   rh   ri     rj   z"test_issue_12092.<locals>.<lambda>ro   r6  )rS   r   r   rf   re   re   rh   test_issue_12092  s    r  c                  C   sF   G dd dt j} | d}d| }t |}|dddks!J 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   )selfr  re   re   rh   	_sympystr  r  z,test_issue_14911.<locals>.Variable._sympystrN)r  r  r  r  Z_lambdacodeZ
_numpycodere   re   re   rh   ra    s    ra  rq   ro     z2*x)r   rx  rQ   r  replace)ra  rq   ru   codere   re   rh   test_issue_14911  s
   r  c                   C   sT   t tttfttttddddksJ t tttfttttddddks(J d S )NTr   rt   F)r   rq   ru   r   r   re   re   re   rh   test_ITE  s   (,r  c                   C   sT   t tttfttttddddksJ t tttfttttddddks(J d S rs   )r   rq   ru   r   r   r   re   re   re   rh   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s4J d S )
Nr'  r   zi jrb   ro   rt   r   r   r   )	rZ   rU   r"   r   r  r   r#   rq   ru   )r   r   jr   re   re   rh   test_Indexed  s   6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s'J |tdd ks2J d S )Nr   rb   ro   )r   rq   ru   rX   rY   r   )Zexpr1Zexpr2re   re   rh   test_issue_12173  s   r  c                  C   s>   t std tttt} t| dtd  dk sJ d S )Nr'  rb   r   )rZ   rU   r   rq   r'   r   nrf   re   re   rh   test_issue_13642  s   $r  c                  C   s4   t tttd} t| dtd  dk sJ d S )Nr   rb   r   )r   rq   r'   r   r  rf   re   re   rh   test_sinc_mpmath  s   $r  c                  C   s   t  } t| | d dd}|ddksJ t| | d }|ddks#J t d}t||d }|ddks6J t|gg|d }|dgdksHJ d S )Nrb   Fr  ro   rt   rq   r&   r   )Zd1rz   Zf1bZd2r   r   re   re   rh   test_lambdify_dummy_arg  s   r  c                  C   s:   t  } tt| }t| |g| | }|dddksJ d S )Nr   rb   rt   )r&   r   r   r   )r   Zdsymrg   re   re   rh   %test_lambdify_mixed_symbol_dummy_args  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 J d S )Nr'  rZ   r   r   r   )rZ   rU   r   rq   ru   r  rf   re   re   rh   test_numpy_array_arg  s   r  c                  C   sD  t std 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
g}tjd t| |D ]k\}}tt|tdd}tdD ]Y}tjdddtjd	d
  }|tkrYt|}|tkrbt|}|tkrkt|}|| }t||| ddt|  k sJ t|||| ddt|  k sJ q>q-tttttg}t jjt jjt jjt jjt jjg}	t||	D ]i\}}ttt f|tt dd}tdD ]T}tjdd}
tjdddtjd	d
  }|tkrt|}||
| }t||
|| ddt|  k sJ t||
|||
| ddt|  k sJ qqd S )Nscipy not installedr   r[   r      r   r   r   gvIh%<=rb   )!r[   rU   r(   r)   r*   r+   r,   r-   r   ZgammalnZpsirZ   r   seedzipr   rq   rangeuniformr   realr   r.   r/   r0   r1   r2   ZpochZjvZyvZivZkvru   )Zsingle_arg_sympy_fnsZsingle_arg_scipy_fnssympy_fnZscipy_fnrg   r   tvrm  Zdouble_arg_sympy_fnsZdouble_arg_scipy_fnsZtv1Ztv2re   re   rh   test_scipy_fns  sP    


$* 
(0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 ]\}}| 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rxt|
}
|tkrtjdd}
ttjjd|dd
}	|f|	 |
f }|| }||  }ddt|  }t|| }z||k sJ W qI ty   t|jt|t|t|t|||dw q1d S )Nr  r   zn k a brb   ro   rt   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  rd   g&.>)rR  r   rm  scipy_resultr!   Ztol)r[   rU   rZ   r   r  r   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rq   r   r  Zrandinttupler  r  r   r   rl   AssertionErrorformatrepr)paramsZpolysmsgr  Z
num_paramsr   rg   _tnZtparamsr  Zvalsr  rm  atolr!   re   re   rh   test_scipy_polys?  sb    
r  c                  C   s$   t ttd } dt| v sJ d S )Nro   zx**2)r   rq   inspectZ	getsourcerf   re   re   rh   test_lambdify_inspect|  s   r  c                  C   s   t  t  } }t| |g| d|did}|dddddksJ t| |g|| fd}|dddks2J t| |g|| gd}|ddddgksGJ d S )Nrt   r   ro   )ro   rt   )rt   ro   r  )rq   ru   rz   r   r   re   re   rh   test_issue_14941  s   r  c                      s  t dt   t f  dddksJ tt f  dddks,J tt fdd tt f  dd	dddksJJ tt f  dd	tddtj	ksaJ td
 ddksnJ ttd
 dd	ddksJ d S )Nrg   r   r   r  ro   c                      s   t t f  ddS )NFr  )rN  rT   re   rg   Zfxre   rh   ri     s   z:test_lambdify_Derivative_arg_issue_16468.<locals>.<lambda>Tr  rb   )   r   )
r   rq   r!   r   rN  rT   r   r  r3   r  re   re   r  rh   (test_lambdify_Derivative_arg_issue_16468  s    $(.&r  c                  C   sP   t tgtt} d}| ||jksJ t tgtt}|||jks&J d S )Ny      @       @)r   r   r   rB   r  rC   imag)Zf_rer  Zf_imre   re   rh   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s1J t| | d }t ||t ddgddggsKJ d S )Nr'  r  ro   rb   rt   r   rd   g       r   g      ?r   %   6   r?  v   )rZ   rU   rO   r  r   rJ  )r  ZA0rg   rv  re   re   rh   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 sHJ d S )Nr  r   )r  r   r:  Z)hydrogen)rb   r   rt   rb   r   )r[   rU   Z	sympy.abcr  r   r:  r  Zsympy.physicsr  ZR_nlr   r   r   )r  r   r:  r  r  ZnvlvZrvZZvZsympy_valuerg   Zscipy_valuere   re   rh   test_issue_15654  s   r  c            	      C   sJ  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 g dg dg dgt jd| d| d| gd| d| d| gd| d| d| ggtdsJ t |t g dg dg dgt j|d d| d d| d g|d d| d d| d g|d d| d d| d ggtdsJ t |t g dg dg dgt g dg dg dgsJ t |t g dg dgt g dg dg dgt g dg dg dg dgt g dg dgs#J d S )Nr'  r  rt   r-  ro   Cr   Dr   kr   r|  rU  )ro   r   r|  )rb   ro   rt   r   )rb   ro   rt   r   r   )x      ih  i  iX  )rZ   rU   rO   r   r   Zarray_equalr  object)	r  r-  r  r  r  rg   rv  hr   re   re   rh   test_issue_15827  s>   "H"<"4 
r  c                  C   sF   t std td} dd }t| || dd}|dt jjks!J d S )Nr  rq   c                 S   s   t j| d  S r{  )r3   ZGoldenRatior   re   re   rh   ri     r  z"test_issue_16930.<locals>.<lambda>r[   r   rb   )r[   rU   r   r   Z	constantsZgolden_ratio)rq   rg   f_re   re   rh   test_issue_16930  s   r  c                  C   sH   t std td} t| gt| ddd}|dtddks"J d S )Nr  rq   rd   r[   r   r   )r[   rU   r   r   r   ZLambertWr   Zlambertw)rq   r  re   re   rh   test_issue_17898  s
   r  c                  C   s   t std tttt} ttttd}| g d}|g d}t|d  dk s/J t|d d  dk s=J t|d d  dk sKJ t|d  dk sWJ t|d d  dk seJ t|d d  dk ssJ d S )Nr'  rb   r@  r   r   r   ro   )rZ   rU   r   rq   r   	Heavisider   r  )rz   r   Zres1Zres2re   re   rh   test_issue_13167_21411  s    r  c                  C   s"   t tt} | dtdksJ d S )N   r   )r   rq   r   r   rf   re   re   rh   test_single_e  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s(J t| t}t| tf|dd}ttdd|dd dksFJ d S )Nr  r   r[   r   rb   rt   r8  )r[   rU   r   rY   rq   r   r   rX   )r   rz   r  r   re   re   rh   test_issue_16536  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s*J ttd|d dks8J d S )Nr  r[   r   ?r8  )r[   rU   r7   rq   r8   r   r   )rz   r   ZF1ZF2re   re   rh   test_fresnel_integrals_scipy  s    r  c                  C   sL   t std ttt} tttf| dd}ttdd|dd dks$J d S )Nr  r[   r   r  ffffff@r8  )r[   rU   r4   rq   ru   r   r   rg   r  re   re   rh   test_beta_scipy  s
   
$r  c                  C   s@   t tt} tttf| dd}tt dd|dd dksJ d S )Nr   r   r  r  r8  )r4   rq   ru   r   r   r  re   re   rh   test_beta_math"  s   
$r  c                  C   \   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s,J d S )	Nr  r[   r   gffffff?g@r   r   r8  )	r[   rU   r5   r   rq   ru   r   r   r   r  re   re   rh   test_betainc_scipy(  
   ,r  c                  C   r   )	Nr  r[   r   r   rD  r   rb   r8  )	r[   rU   r6   r   rq   ru   r   r   r   r  re   re   rh   test_betainc_regularized_scipy1  r  r  c            	      C   s   t std tttttttt	g} | D ]E}d|j
v r%|tt}ttf}d}nd|j
v r4|t}tf}d}ntdt||}|| }|tt|| }t |t|sWJ qtttft	tttt}td|dd	 d
 dk suJ d S )Nr'  ro   )333333?g?rb   )r  z:Need to handle other than unary & binary functions in testr   gJz5gn5g!z05g"}t3)rZ   rU   r9   r:   r;   r<   r=   r>   r?   r@   r   rq   ru   NotImplementedErrorr   subsr  r  r   rJ  r
  r   )	ZfuncsrR  r   r   num_argsrg   resultZ	referenceZlae2re   re   rh   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 sJ d S )Nr  r[   r   g#B;gWw'&l7gN~h)r[   rU   r   rq   rA   r   )Zcm1re   re   rh   test_scipy_special_mathT  s   r
  c                  C   s\   t std tttggtt t d} | t ddg}|dks"J dtt|v s,J d S )NCuPy not installedr`   r   r   r   r`   rU   r   rq   ru   r  r   rP  rg   r  re   re   rh   test_cupy_array_arg\  s   r  c                  C   s\   t std tttggtt t d} | t ddg}|dks"J dtt|v s,J d S )Nr  rZ   r   r   r   r`   r  r  re   re   rh   test_cupy_array_arg_using_numpyf  s   r  c                  C   r&  )Nr  r`   r   rb   ro   rt   r(  )
r`   rU   rN   rq   ru   r   r   r$   r  r  r)  re   re   rh   test_cupy_dotproductr  s    




r  c                  C   s  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 ]!}ts|j	rqdd|| fD ]}|j
|d}||j }|| qqd S )Nc                 S   s   d| fS )Nre   re   )exprsre   re   rh   	dummy_cse  s   z$test_lambdify_cse.<locals>.dummy_csec                 S   s   ddl m}m} || |dS )Nr   )cse_release_variablescse)Zpostprocess)Zsympy.simplify.cse_mainr  r  )r  r  r  re   re   rh   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 re   )r  r   ).0eZ	subs_dictre   rh   
<listcomp>  s    z<test_lambdify_cse.<locals>.Case.__init__.<locals>.<listcomp>)r   r  r  r  r  r  r  )r  r   r  r  r  re   r  rh   __init__  s   
z(test_lambdify_cse.<locals>.Case.__init__c                S   s   t | j| j|dS )Nr  )r   r   r  )r  r  re   re   rh   r     r  z(test_lambdify_cse.<locals>.Case.lambdifyr   )abstolreltolc                   s   | j rt fddt| jD sJ d S t| jD ]!\}}t| | }|dkr3| k s2J q|t| k s=J qd S )Nc                 3   s4    | ]\}}t j| t j|td  dV  qdS )rU  )r9  r  N)rZ   rJ  Zasarrayr
  )r  r   r:  r  r  r  re   rh   	<genexpr>  s    zAtest_lambdify_cse.<locals>.Case.assertAllClose.<locals>.<genexpr>r   )r  r  	enumerater  r   )r  r  r  r  r   r:  Zabs_errre   r  rh   assertAllClose  s   z.test_lambdify_cse.<locals>.Case.assertAllCloseN)r  r  r  r  r   r"  re   re   re   rh   Case  s    r#  ro   )r   r   r  )r   r  r  rb   )r   r   r  )r   r   r  r   )r   r   r   T)r   r  r  r  )rb   ro   Fr  )rq   ru   r   r   r  r'   rN   r   rZ   r  r   r  r"  )r  r  r#  casescaser  rg   r  re   re   rh   test_lambdify_cse  sn   






	"
4/

r&  )	itertoolsr   r   r  r   Zsympy.testing.pytestr   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   r1   r2   r3   r4   r5   r6   r7   r8   Zsympy.codegen.cfunctionsr9   r:   r;   r<   r=   r>   Zsympy.codegen.numpy_nodesr?   r@   Zsympy.codegen.scipy_nodesrA   Z$sympy.functions.elementary.complexesrB   rC   rD   Z#sympy.functions.special.polynomialsrE   rF   rG   rH   rI   rJ   rK   rL   rM   Zsympy.matricesrN   rO   rP   r   rQ   Zsympy.printing.numpyrR   r   rS   rT   rU   Zsympy.utilities.decoratorrV   Zsympy.externalrW   Z'sympy.functions.special.gamma_functionsrX   rY   ZMutableDenseMatrixrZ   r[   r^   r_   r`   osenvironr   rq   ru   r   rm   rr   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.  r2  r5  r;  rB  rC  rG  rL  rS  r^  r`  rc  re  rf  rg  ri  rj  rn  ro  rq  rr  rs  rw  ry  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&  re   re   re   rh   <module>   s&    ,







	

	
	
	



"	
 
0=		
	

