o
    i~                    @   s  d dl Z d dlZd dlZd dlZd dlZd dl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 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' d dl(m)Z) d dl*m)  m+Z, d dl-m.Z.m/Z/m0Z0 d dl-m1Z1m2Z2m3Z3m4Z4m5Z5 d dl-m6Z6 d d	l-m7Z7m8Z8m9Z9 d d
l-m:Z:m;Z;m<Z< d dl=m>Z>m?Z? d dl@mAZAmBZBmCZC d dlDmEZEmFZFmGZG d dlHmIZImJZJmKZK d dlLZLejdkseM d  dkrejNnejOZPG dd dZQG dd dZRG dd dZSG dd dZTG dd dZUG dd dZVG dd dZWG dd  d ZXG d!d" d"ZYG d#d$ d$ZZG d%d& d&Z[G d'd( d(Z\G d)d* d*Z]G d+d, d,Z^G d-d. d.Z_G d/d0 d0Z`G d1d2 d2Zadd3d4ZbG d5d6 d6ZcG d7d8 d8ZdG d9d: d:ZeG d;d< d<ZfG d=d> d>ZgG d?d@ d@ZhG dAdB dBZiG dCdD dDZjG dEdF dFZkG dGdH dHZlG dIdJ dJZmG dKdL dLZnG dMdN dNZoG dOdP dPZpG dQdR dRZqG dSdT dTZrG dUdV dVZsG dWdX dXZtG dYdZ dZZuG d[d\ d\Zvd]d^ Zwd_d` ZxG dadb dbZydcdd Zzdedf Z{dgdh Z|didj Z}dkdl Z~dmdn Zejdodp ZeIdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd Zdd Zdd Zejjdd ZG dd dZG dd dZdS )    N)arrayisnanr_arangefinfopisincostanexplogzerossqrtasarrayinf
nan_to_numrealarctandoublearray_equal)raises)	assert_equalassert_almost_equalassert_array_equalassert_array_almost_equalassert_approx_equalassert_assert_allcloseassert_array_almost_equal_nulpsuppress_warnings)special)ellipeellipkellipkm1)elliprcelliprdelliprfelliprgelliprj)softplus)mathieu_odd_coefmathieu_even_coef	stirling2)lpnlpmnclpmn)np_longnp_ulong)xp_assert_closexp_assert_equalSCIPY_ARRAY_API)_FACTORIALK_LIMITS_64BITS_FACTORIALK_LIMITS_32BITS_is_subdtype)with_special_errorsassert_func_equalFuncDatawin3232bitc                   @   s  e Z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d1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/e0j1j2d[d\d]d^ Z3d_d` Z4dadb Z5dcdd Z6e0j1j2ded\dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>dvdw Z?dxdy Z@dzd{ ZAd|d} ZBd~d ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd ZdddÄ Zeddń ZfddǄ ZgddɄ Zhdd˄ Zidd̈́ Zjddτ Zkddф Zlddӄ ZmddՄ Znddׄ Zoddل Zpddۄ Zqdd݄ Zrdd߄ Zsdd Ztdd Zudd Zvdd Zwdd Zxdd Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zd d Ze0j1j2dd\dd Ze0j1j2dd\dd Ze0j1j2dd\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d=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Zdodp Zdqdr ZdsS (t  
TestCephesc                 C      t d d S Nr   )cephesairyself rD   X/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/special/tests/test_basic.py	test_airy@      zTestCephes.test_airyc                 C   r>   r?   )r@   airyerB   rD   rD   rE   
test_airyeC   rG   zTestCephes.test_airyec              	   C   s4  t g d}t g d}t t |d d d f |d d d f ddj}t g dg dg dg dg}ttj| |d	d
 t j	
d}t jt ddd|d d f }t dd}t t |d d d f |d d d f ddj}ttjt|d d df |d d df d |ddd d S )N)gL7A`?   g@   )   皙?   gffffff
@rL   )g޸g	TշJ?g	7?geLF)   g*+ @r   gM{@)gףp=
%@gϔ>@g<wg$@)   g,y3@iK  g5@vIh%<=rtol  i       r   f           ?绽|=atolrT   )npr   broadcast_arraysreshapeTr9   r@   binomravelrandomRandomStater   r   Zrand)rC   nknkZrknownrngrD   rD   rE   
test_binomF   s,   (

$(
&
zTestCephes.test_binomc              	   C   s   t jd t jt ddd }t dd}t t |d d d f |d d d f ddj	}t
tjt|d d df |d d df d	 |d
d
d d S )NrU   rZ   ,     r   rY   rL   rO   r[   r\   r]   )r_   re   seedr   logspacer   r   r`   ra   rb   r9   r@   rc   )rC   rg   rh   ri   rD   rD   rE   test_binom_2]   s   (
&
zTestCephes.test_binom_2c              	   C   s   t jdd }t jd t dd}t dd}t t |d d d f |d d d f ddj}||d d df |d d df k }t	t
j||d d df |d d df |ddd	 d S )
Nc                 S   sP   t | } t |}d}d}td|d D ]}|||  | 9 }||9 }qt|| S NrZ   )intrangefloat)rg   rh   numZdenirD   rD   rE   	binom_intk   s   
z.TestCephes.test_binom_exact.<locals>.binom_intrU   rZ      r   rL   rO   r]   )r_   	vectorizere   rn   r   r   r`   ra   rb   r9   r@   rc   )rC   rw   rg   rh   ri   rD   rD   rE   test_binom_exactj   s   

(
$ 
zTestCephes.test_binom_exactc                 C   s.   g d}t |}ttj|dddd  d S )N))rW   rX   gwP~)i  i  gii9~)i  i  gyhY~)i  i  gpvy~)i  i  gzN~)i  i  gGTɳ~)i  i  g@jH~)i  i  gF:aYͦ~)i  i  gɸV)i  i  g
{9)i  i  gyVxY)i    g*I y)i   i   gI)i  i  gW@N)i  i  g5y)r   rZ   rL   -q=rS   )r_   r   r:   r@   rc   check)rC   ZdatasetrD   rD   rE   test_binom_nooverflow_8346   s   
z%TestCephes.test_binom_nooverflow_8346c                 C      t tdddd d S )NrZ         ?      ?)r   r@   ZbdtrrB   rD   rD   rE   	test_bdtr      zTestCephes.test_bdtrc                 C      t tdddd d S NrZ      r   )r   r@   ZbdtrirB   rD   rD   rE   
test_bdtri   r   zTestCephes.test_bdtric                 C   r   r   )r   r@   ZbdtrcrB   rD   rD   rE   
test_bdtrc   r   zTestCephes.test_bdtrcc                 C      t tdddd d S NrZ   r         @)r   r@   ZbdtrinrB   rD   rD   rE   test_bdtrin   r   zTestCephes.test_bdtrinc                 C      t ddd d S r   )r@   ZbdtrikrB   rD   rD   rE   test_bdtrik      zTestCephes.test_bdtrikc                 C      t tdd d S Nr           )r   r@   beirB   rD   rD   rE   test_bei      zTestCephes.test_beic                 C   r   r   )r   r@   beiprB   rD   rD   rE   	test_beip   r   zTestCephes.test_beipc                 C   r   Nr   r   )r   r@   berrB   rD   rD   rE   test_ber   r   zTestCephes.test_berc                 C   r   r   )r   r@   berprB   rD   rD   rE   	test_berp   r   zTestCephes.test_berpc                 C      t tdddd d S r   )r   r@   Z
besselpolyrB   rD   rD   rE   test_besselpoly   r   zTestCephes.test_besselpolyc                 C   r   NrZ   r   )r   r@   ZbtdtriarB   rD   rD   rE   test_btdtria   r   zTestCephes.test_btdtriac                 C   r   r   )r   r@   ZbtdtribrB   rD   rD   rE   test_btdtrib   r   zTestCephes.test_btdtribc                 C   r   NrZ   r   )r   r@   cbrtrB   rD   rD   rE   	test_cbrt   r   zTestCephes.test_cbrtc                 C      t tddd d S NrZ   r   r   )r   r@   chdtrrB   rD   rD   rE   
test_chdtr      zTestCephes.test_chdtrc                 C   r   NrZ   r   r   )r   r@   chdtrcrB   rD   rD   rE   test_chdtrc   r   zTestCephes.test_chdtrcc                 C      t tddd d S NrZ   r   )r   r@   chdtrirB   rD   rD   rE   test_chdtri   r   zTestCephes.test_chdtric                 C   r   )Nr   r   )r   r@   ZchdtrivrB   rD   rD   rE   test_chdtriv   r   zTestCephes.test_chdtrivc                 C   s8  t tdddd tg dg dg dg dg dg d	g d
g dg dg dg dg dg dg}t|d d df |d d df |d d df }t||d d df dd tttjtjdd ttddtjd tt	ttj
dd tt	tdtj
d tt	tddtj
 d S )Nr   rZ   r   )      9@      4@  gL94)r          @   g7Fh9)gMbP?r         D@ggåc;){Gz?r   r   g	;)r          @k   g8x@x>)g     6@r   r   gg1\>>)r   r   r   g`>)      @r   r   gp!P?)g     u@g     r@      $@g j
?)      Y@      +@r   g]?)g     @r   r   g4ۙ?)g     b@r   r   g?)g      d@r   r   r   rL   r   r|   rS   r      )r   r@   Zchndtrr_   r   r   r   r   r   r   nan)rC   valuesZcdfrD   rD   rE   test_chndtr   s.   2zTestCephes.test_chndtrc                 C   r   Nr   rZ   r   )r   r@   Z	chndtridfrB   rD   rD   rE   test_chndtridf   r   zTestCephes.test_chndtridfc                 C   r   r   )r   r@   Z	chndtrincrB   rD   rD   rE   test_chndtrinc   r   zTestCephes.test_chndtrincc                 C   r   Nr   rZ   r   )r   r@   ZchndtrixrB   rD   rD   rE   test_chndtrix   r   zTestCephes.test_chndtrixc                 C   r   r   )r   r@   cosdgrB   rD   rD   rE   
test_cosdg   r   zTestCephes.test_cosdgc                 C   r   r   )r   r@   cosm1rB   rD   rD   rE   
test_cosm1   r   zTestCephes.test_cosm1c                 C   r   N-   r   )r   r@   cotdgrB   rD   rD   rE   
test_cotdg   r   zTestCephes.test_cotdgc                 C   s$   t tdd ttdd d S )Nr   r   gGz?gf?)r   r@   dawsnr   rB   rD   rD   rE   
test_dawsn   s   zTestCephes.test_dawsnc                 C   sV  g d}t dt j d t j}tt||ddd t dt j d t j}tt||ddd t dt j d	 t j}tt||ddd t	t d
rmt dt j d t j
}tt||ddd g d}t dt j d t j}tt||ddd t dt j dt j dt j }g d}tt|d|dd d S )N)rZ   r      rL   g-C6
?r   rN   decimal&.>rx   V瞯<float128r|      )rL   rJ            皙?)gg?gsOB?gsaL?g
7I^ʿr   )r_   r   r   astypefloat32r   r    diricfloat64hasattrr   r   )rC   Zn_oddxZn_evenZoctave_resultrD   rD   rE   
test_diric   s    
 zTestCephes.test_diricc                 C   sH   t d}t g d}tt|d d t jf |j|j|jfk d S )Nr   )rZ   r   rN   )	r_   r   r   r   r    r   Znewaxisshapesize)rC   r   rg   rD   rD   rE   test_diric_broadcasting  s   
0z"TestCephes.test_diric_broadcastingc                 C   r   r   )r   r@   r!   rB   rD   rD   rE   test_ellipe  r   zTestCephes.test_ellipec                 C   r   r   )r   r@   	ellipeincrB   rD   rD   rE   test_ellipeinc  r   zTestCephes.test_ellipeincc                 C      t dd d S Nr   rZ   )r@   ellipjrB   rD   rD   rE   test_ellipj"     zTestCephes.test_ellipjc                 C   s   t tdtd  d S )Nr   rL   )r   r"   r   rB   rD   rD   rE   test_ellipk%  r   zTestCephes.test_ellipkc                 C   r   r   )r   r@   	ellipkincrB   rD   rD   rE   test_ellipkinc(  r   zTestCephes.test_ellipkincc                 C   r   r   r   r@   erfrB   rD   rD   rE   test_erf+  r   zTestCephes.test_erfc                 C   s$   d}t t|t|  d d S )Ng#8x@r   r   rC   r   rD   rD   rE   test_erf_symmetry.  s    zTestCephes.test_erf_symmetryc                 C   r   r   )r   r@   erfcrB   rD   rD   rE   	test_erfc2  r   zTestCephes.test_erfcc                 C   r   )NrL   r   )r   r@   exp10rB   rD   rD   rE   
test_exp105  r   zTestCephes.test_exp10c                 C   r   )NrL         @)r   r@   exp2rB   rD   rD   rE   	test_exp28  r   zTestCephes.test_exp2c                 C   sP   t tdd t ttjtj t ttj d t ttjtj d S )Nr   r   rO   )r   r@   expm1r_   r   r   rB   rD   rD   rE   
test_expm1;  s   zTestCephes.test_expm1c                 C   s  t j}t|dd t|ttjdttjd t|ttjdttjtj t|ttjdttj tj t|ttjdttj tj  t|ttjdttjtj  t|tdtjttjtj t|tdtjttjtj t|ttjtjttjtj t|ttj tjtdd t|ttj tjtdd t|ttjtjttjtj t|tdtjttjtj t|tdtjttjtj t|ttjdttjtj t|ttjtjttjtj d S )N                r   rZ   rL   rJ   r   rO   )r@   r   r   complexr_   r   r   )rC   r   rD   rD   rE   test_expm1_complexA  s"    "$"  "  "   &zTestCephes.test_expm1_complexz-The real part of expm1(z) bad at these pointsreasonc                 C   sh   t g d}t t | }|d|  }t g d}t|}t|j|jd t|j|jd d S )N)皙?r   333333?r      rm                 ?)y=Cw?yC7gg)gF<Ug?yQ<D*?yg:><sKy>񸣼$	Um>ly;Vl <@r   rm   )	r_   r   r   r	   r@   r   r   imagr   )rC   yr   zexpectedfoundrD   rD   rE   test_expm1_complex_hardT  s   
z"TestCephes.test_expm1_complex_hardc                 C   0   t tdddd ttdddddd	 d S )
NrZ   r   r   ư>r   
   g2?r|   rS   )r   r@   Zfdtrr   rB   rD   rD   rE   	test_fdtri  s   
zTestCephes.test_fdtrc                 C   r  )
NrZ   r   r   rL   r  g    _BgDIXl?r|   rS   )r   r@   Zfdtrcr   rB   rD   rD   rE   
test_fdtrco  s   
zTestCephes.test_fdtrcc                 C   sD   t tddddgtddgdd d}t td	d|d
dd d S )NrZ   gV-?gx&1?g
}?g<zO'?r  rS   g׀?r  r   r|   )r   r@   fdtrir   )rC   prD   rD   rE   
test_fdtriv  s
   zTestCephes.test_fdtrizReturns nan on i686.c                 C   s   t tdddd d S )NrZ   r   )r   r@   r  rB   rD   rD   rE   test_fdtri_mysterious_failure~  s   z(TestCephes.test_fdtri_mysterious_failurec                 C      t tdddd d S r   )r   r@   ZfdtridfdrB   rD   rD   rE   test_fdtridfd  r   zTestCephes.test_fdtridfdc                 C   r   Nr   r   r   )r   r@   fresnelrB   rD   rD   rE   test_fresnel  r   zTestCephes.test_fresnelc                 C   r   Nr         8@)r   r@   gammarB   rD   rD   rE   
test_gamma  r   zTestCephes.test_gammac                 C   r   )Nr   rZ   r   )r   r@   gammainccinvrB   rD   rD   rE   test_gammainccinv  r   zTestCephes.test_gammainccinvc                 C   r>   )Nr  )r@   gammalnrB   rD   rD   rE   test_gammaln  rG   zTestCephes.test_gammalnc                 C   s^   t t j dddddddt jg	t j}t t jt jdd	d	ddddg	t j}tt|| d S )
N      gffffff       r   rZ   g@r   r   )r_   r   r   r   r   r   r@   Zgammasgn)rC   vals	referencerD   rD   rE   test_gammasgn  s   zTestCephes.test_gammasgnc                 C   r   r   )r   r@   gdtrrB   rD   rD   rE   	test_gdtr  r   zTestCephes.test_gdtrc                 C   s   t tddtjd d S r   )r   r@   r+  r_   r   rB   rD   rD   rE   test_gdtr_inf     zTestCephes.test_gdtr_infc                 C   r   r   )r   r@   ZgdtrcrB   rD   rD   rE   
test_gdtrc  r   zTestCephes.test_gdtrcc                 C   r  r   )r   r@   ZgdtriarB   rD   rD   rE   test_gdtria  r   zTestCephes.test_gdtriac                 C   s   t ddd d S NrZ   r   )r@   ZgdtribrB   rD   rD   rE   test_gdtrib  r   zTestCephes.test_gdtribc                 C   s   t ddd d S NrZ   r  )r@   ZgdtrixrB   rD   rD   rE   test_gdtrix  r   zTestCephes.test_gdtrixc                 C      t dd d S rq   )r@   hankel1rB   rD   rD   rE   test_hankel1  r   zTestCephes.test_hankel1c                 C   r5  rq   )r@   hankel1erB   rD   rD   rE   test_hankel1e  r   zTestCephes.test_hankel1ec                 C   r5  rq   )r@   hankel2rB   rD   rD   rE   test_hankel2  r   zTestCephes.test_hankel2c                 C   r5  rq   )r@   hankel2erB   rD   rD   rE   test_hankel2e  r   zTestCephes.test_hankel2ec                 C   s>   t tdddtd t tdddd tddd d S )NrZ   r   r   rJ   g㈮?)r   r@   hyp1f1r   rB   rD   rD   rE   test_hyp1f1  s   zTestCephes.test_hyp1f1c                 C      t tddddd d S r   )r   r@   hyp2f1rB   rD   rD   rE   test_hyp2f1  r.  zTestCephes.test_hyp2f1c                 C   r   r   )r   r@   i0rB   rD   rD   rE   test_i0  r   zTestCephes.test_i0c                 C   r   r   )r   r@   i0erB   rD   rD   rE   test_i0e  r   zTestCephes.test_i0ec                 C   r   r   )r   r@   i1rB   rD   rD   rE   test_i1  r   zTestCephes.test_i1c                 C   r   r   )r   r@   i1erB   rD   rD   rE   test_i1e  r   zTestCephes.test_i1ec                 C   r>   rq   )r@   it2i0k0rB   rD   rD   rE   test_it2i0k0  rG   zTestCephes.test_it2i0k0c                 C   r>   rq   )r@   it2j0y0rB   rD   rD   rE   test_it2j0y0  rG   zTestCephes.test_it2j0y0c                 C   r>   rq   )r@   Z
it2struve0rB   rD   rD   rE   test_it2struve0  rG   zTestCephes.test_it2struve0c                 C   r>   rq   )r@   ZitairyrB   rD   rD   rE   test_itairy  rG   zTestCephes.test_itairyc                 C   r   r  )r   r@   iti0k0rB   rD   rD   rE   test_iti0k0  r   zTestCephes.test_iti0k0c                 C   r   r  )r   r@   itj0y0rB   rD   rD   rE   test_itj0y0  r   zTestCephes.test_itj0y0c                 C   r   r   )r   r@   Zitmodstruve0rB   rD   rD   rE   test_itmodstruve0  r   zTestCephes.test_itmodstruve0c                 C   r   r   )r   r@   Z	itstruve0rB   rD   rD   rE   test_itstruve0  r   zTestCephes.test_itstruve0c                 C   r   r   )r   r@   ivrB   rD   rD   rE   test_iv  r   zTestCephes.test_ivc                 C   r   r   )r   r@   iverB   rD   rD   rE   test_ive  r   zTestCephes.test_ivec                 C   r   r   )r   r@   j0rB   rD   rD   rE   test_j0  r   zTestCephes.test_j0c                 C   r   r   )r   r@   j1rB   rD   rD   rE   test_j1  r   zTestCephes.test_j1c                 C   r   r   )r   r@   jnrB   rD   rD   rE   test_jn  r   zTestCephes.test_jnc                 C   r   r   )r   r@   jvrB   rD   rD   rE   test_jv  r   zTestCephes.test_jvc                 C   r   r   )r   r@   jverB   rD   rD   rE   test_jve  r   zTestCephes.test_jvec                 C   r>   NrL   )r@   k0rB   rD   rD   rE   test_k0  rG   zTestCephes.test_k0c                 C   r>   rf  )r@   k0erB   rD   rD   rE   test_k0e  rG   zTestCephes.test_k0ec                 C   r>   rf  )r@   k1rB   rD   rD   rE   test_k1   rG   zTestCephes.test_k1c                 C   r>   rf  )r@   k1erB   rD   rD   rE   test_k1e  rG   zTestCephes.test_k1ec                 C   r>   rf  )r@   keirB   rD   rD   rE   test_kei  rG   zTestCephes.test_keic                 C   r   r   )r   r@   keiprB   rD   rD   rE   	test_keip	  r   zTestCephes.test_keipc                 C   r>   rf  )r@   kerrB   rD   rD   rE   test_ker  rG   zTestCephes.test_kerc                 C   r>   rf  )r@   kerprB   rD   rD   rE   	test_kerp  rG   zTestCephes.test_kerpc                 C   r>   rf  )r@   kelvinrB   rD   rD   rE   test_kelvin  rG   zTestCephes.test_kelvinc                 C   r5  rq   )r@   knrB   rD   rD   rE   test_kn  r   zTestCephes.test_knc                 C   *   t tdd ttttj d S r   )r   r@   Zkolmogir   r_   r   r   rB   rD   rD   rE   test_kolmogi     zTestCephes.test_kolmogic                 C   r   r   )r   r@   Z
kolmogorovrB   rD   rD   rE   test_kolmogorov  r   zTestCephes.test_kolmogorovc                 C   r   )Nr   r'  )r   r@   Z_kolmogprB   rD   rD   rE   test_kolmogp  r   zTestCephes.test_kolmogpc                 C   r   r   )r   r@   Z_kolmogcrB   rD   rD   rE   test_kolmogc"  r   zTestCephes.test_kolmogcc                 C   r{  r   )r   r@   Z	_kolmogcir   r_   r   r   rB   rD   rD   rE   test_kolmogci%  r}  zTestCephes.test_kolmogcic                 C   r5  rq   )r@   kvrB   rD   rD   rE   test_kv)  r   zTestCephes.test_kvc                 C   r5  rq   )r@   kverB   rD   rD   rE   test_kve,  r   zTestCephes.test_kvec                 C   sL   t j}t|dd t|dtj  t|dtj t|tjtj d S )Nr   r   rO   )r@   log1pr   r_   r   r   )rC   r  rD   rD   rE   
test_log1p/  s
   zTestCephes.test_log1pc                 C   s  t j}t}t|dd t||dd|tj d t }|td t	||dtj|tjtj
d  t||dtj|tjtj t	||tj d|tjtj
 t||tjd|tjd t	||tj tj|tjdtj
 d  t	||tjtj|tjtj
d  t||tjtj|tjtj t||tj tj|tjtj t||tjtj|tjtj t||tjd|tjtj t||tjtj|tjtj W d    d S 1 sw   Y  d S )	Nr   rO   r   z%invalid value encountered in multiplyrZ   rL   r   rJ   )r@   r  r   r   r_   r   r   filterRuntimeWarningr   r   r   )rC   r  csuprD   rD   rE   test_log1p_complex6  s$   $ ",&"$" $"zTestCephes.test_log1p_complexc                 C   r   )Nr   rZ   r   )r   r@   ZlpmvrB   rD   rD   rE   	test_lpmvI  r   zTestCephes.test_lpmvc                 C   r   r   )r   r@   Z	mathieu_arB   rD   rD   rE   test_mathieu_aL  r   zTestCephes.test_mathieu_ac                 C   r   r   )r   r@   Z	mathieu_brB   rD   rD   rE   test_mathieu_bO  r   zTestCephes.test_mathieu_bc                 C   s   t tdddd tjdd }tdd}tjdtddd	f }tt|d d d f |d d d f d
d ||d d d f |d d d f d
ddd d S )NrZ   r   r   r   c                 S   s   |t jd 9 }| dkrddd| td|    S | dkr+t||d td|   S | dkrAtd| |td	| d
 d   S t| | |t| d | d	| d   t| d | d	| d      S )N   r   g;f?rZ   r   rL      r   rJ            ?)r_   r   r	   mqr
  rD   rD   rE   	ce_smallqV  s   $Hz.TestCephes.test_mathieu_cem.<locals>.ce_smallqd   r  rh|?+=rT   r^   )	r   r@   mathieu_cemr_   ry   r   r   ro   r   )rC   r  r  r  rD   rD   rE   test_mathieu_cemR  s   
*"
zTestCephes.test_mathieu_cemc                 C   s   t tdddd tjdd }tdd}tjdtddd	f }tt|d d d f |d d d f d
d ||d d d f |d d d f d
ddd d S )NrZ   r   r   r   c                 S   s   |t jd 9 }| dkrt||d td|   S | dkr-td| |td|  d  S t| | |t| d | d| d   t| d | d| d      S )Nr  rZ   r  r   rL   rJ   r  )r_   r   r   r  rD   rD   rE   	se_smallqo  s    Hz.TestCephes.test_mathieu_sem.<locals>.se_smallqr  r  r  r  r  r  r  )	r   r@   mathieu_semr_   ry   r   r   ro   r   )rC   r  r  r  rD   rD   rE   test_mathieu_semk  s   
*"
zTestCephes.test_mathieu_semc                 C   r  NrZ   r   r  )r   r@   mathieu_modcem1rB   rD   rD   rE   test_mathieu_modcem1  r   zTestCephes.test_mathieu_modcem1c                 C   s   t ddd tddd d d d f }tjtddd d d d d f }tdddd d d d f }t ||| d }t ||dd  t ||dd  }t |||d  d| t |||d   }t||dd	 d S )
NrZ   r   rJ   r  rL   r  rN   r\   rS   )	r@   mathieu_modcem2r_   r   r   ro   linspacer  r   rC   r  r  r
  y1fry2rD   rD   rE   test_mathieu_modcem2  s   "&zTestCephes.test_mathieu_modcem2c                 C   r  r  )r   r@   mathieu_modsem1rB   rD   rD   rE   test_mathieu_modsem1  r   zTestCephes.test_mathieu_modsem1c                 C   s   t ddd tddd d d d f }tjtddd d d d d f }tdddd d d d f }t ||| d }t ||dd t ||dd  }t |||d d| t |||d   }t||dd	 d S )
NrZ   rJ   r  rL   r  r   rN   r\   rS   )	r@   mathieu_modsem2r_   r   r   ro   r  r  r   r  rD   rD   rE   test_mathieu_modsem2  s   "$zTestCephes.test_mathieu_modsem2c                 C   s   t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t t	dddtjtjf d S )N'  r   g?      ?)
r   r@   r  r_   r   r  r  r  r  r  rB   rD   rD   rE   test_mathieu_overflow  s    z TestCephes.test_mathieu_overflowc                 C   sD   t dD ]}tddd}t|d ddd t|d	 d
dd qd S )N<   rL   r  rO   r   g.dS?r\   rS   rZ   gGc?-C6?)rs   r@   r  r   )rC   rh   vrD   rD   rE   test_mathieu_ticket_1847  s
   z#TestCephes.test_mathieu_ticket_1847c                 C   r>   r?   )r@   ZmodfresnelmrB   rD   rD   rE   test_modfresnelm  rG   zTestCephes.test_modfresnelmc                 C   r>   r?   )r@   ZmodfresnelprB   rD   rD   rE   test_modfresnelp  rG   zTestCephes.test_modfresnelpc                 C   r   r   )r   r@   Z	modstruverB   rD   rD   rE   test_modstruve  r   zTestCephes.test_modstruvec                 C   r   r   )r   r@   nbdtrrB   rD   rD   rE   
test_nbdtr  r   zTestCephes.test_nbdtrc                 C   r   r   )r   r@   nbdtrcrB   rD   rD   rE   test_nbdtrc  r   zTestCephes.test_nbdtrcc                 C   r   r   )r   r@   nbdtrirB   rD   rD   rE   test_nbdtri  r   zTestCephes.test_nbdtric                 C   r   )NrZ   rM   r   )r@   ZnbdtrikrB   rD   rD   rE   test_nbdtrik  r   zTestCephes.test_nbdtrikc                 C   r  r   )r   r@   ZnbdtrinrB   rD   rD   rE   test_nbdtrin  r   zTestCephes.test_nbdtrinc                 C   rA  r   )r   r@   ncfdtrrB   rD   rD   rE   test_ncfdtr  r.  zTestCephes.test_ncfdtrc                 C   sH   t tddddd g d}tddd|}ttddd|| d S )NrZ   r   r   )r   rZ   r  rL   r   r  )r   r@   Zncfdtrir  r   )rC   fr  rD   rD   rE   test_ncfdtri  s   zTestCephes.test_ncfdtrizpncfdtr uses a Boost math implementation but ncfdtridfdinverts the less accurate cdflib implementation of ncfdtr.c                 C   s2   g d}t d|dd}tt d|dd| d S )NrZ   rL   r   rL   r  rx   )r@   r  r   Z
ncfdtridfd)rC   Zdfdr  rD   rD   rE   test_ncfdtridfd     zTestCephes.test_ncfdtridfdzpncfdtr uses a Boost math implementation but ncfdtridfninverts the less accurate cdflib implementation of ncfdtr.c                 C   s6   g d}t |ddd}tt |ddd|dd d S )N)r  rZ   rL   r   g     @rL   r  rx   gh㈵>rS   )r@   r  r   Z
ncfdtridfn)rC   dfnr  rD   rD   rE   test_ncfdtridfn  s   zTestCephes.test_ncfdtridfnzoncfdtr uses a Boost math implementation but ncfdtrincinverts the less accurate cdflib implementation of ncfdtr.c                 C   s2   g d}t dd|d}tt dd|d| d S )N)r   r  r   rL   r   rx   )r@   r  r   Z	ncfdtrinc)rC   ncr  rD   rD   rE   test_ncfdtrinc  r  zTestCephes.test_ncfdtrincc                 C   s   t tdddd t tdddd tttjdddd	 tttd
tjd ttd
dtjd ttttjdd tttd
tjd tttd
dtj d S )NrZ   r   r   	   i   r   r   r   r   r   r   )	r   r@   Znctdtrr   r_   r   r   r   r   rB   rD   rD   rE   test_nctdtr  s   zTestCephes.test_nctdtrc                 C   r   )NrZ   r   r   )r@   Z	nctdtridfrB   rD   rD   rE   test_nctdtridf  r   zTestCephes.test_nctdtridfc                 C   s   t ddd d S r1  )r@   Z	nctdtrincrB   rD   rD   rE   test_nctdtrinc
  r   zTestCephes.test_nctdtrincc                 C   r   )Nr  r   r   )r@   ZnctdtritrB   rD   rD   rE   test_nctdtrit  r   zTestCephes.test_nctdtritc                 C   r  )Nr   rZ   r   )r   r@   ZnrdtrimnrB   rD   rD   rE   test_nrdtrimn  r   zTestCephes.test_nrdtrimnc                 C   s   t tddddddd d S )Nr   r   r   r]   )r   r@   ZnrdtrisdrB   rD   rD   rE   test_nrdtrisd  s   
zTestCephes.test_nrdtrisdc                 C      t dddd d S r1  )r@   Zobl_ang1rB   rD   rD   rE   test_obl_ang1  r   zTestCephes.test_obl_ang1c                 C   s2   t ddddd}t|d d t|d d d S )NrZ   r   r   r   )r@   Zobl_ang1_cvr   )rC   resultrD   rD   rE   test_obl_ang1_cv  s   zTestCephes.test_obl_ang1_cvc                 C   r   NrZ   r   r   )r   r@   Zobl_cvrB   rD   rD   rE   test_obl_cv  r   zTestCephes.test_obl_cvc                 C   r  r1  )r@   Zobl_rad1rB   rD   rD   rE   test_obl_rad1"  r   zTestCephes.test_obl_rad1c                 C      t ddddd d S r1  )r@   Zobl_rad1_cvrB   rD   rD   rE   test_obl_rad1_cv%  r   zTestCephes.test_obl_rad1_cvc                 C   r  r1  )r@   Zobl_rad2rB   rD   rD   rE   test_obl_rad2(  r   zTestCephes.test_obl_rad2c                 C   r  r1  )r@   Zobl_rad2_cvrB   rD   rD   rE   test_obl_rad2_cv+  r   zTestCephes.test_obl_rad2_cvc                 C   r   )NrZ   r   r  )r   r@   pbdvrB   rD   rD   rE   	test_pbdv.  r   zTestCephes.test_pbdvc                 C   r   r1  )r@   pbvvrB   rD   rD   rE   	test_pbvv1  r   zTestCephes.test_pbvvc                 C   r   r1  )r@   ZpbwarB   rD   rD   rE   	test_pbwa4  r   zTestCephes.test_pbwac                 C   s>   t dd}t|td t g dd}t|g d d S )Nr   rZ   rO   r   rZ   rL   )rZ   rZ   rZ   )r@   Zpdtrr   r_   r   r   rC   valrD   rD   rE   	test_pdtr7  s   zTestCephes.test_pdtrc                 C   sB   t dd}t|dtd  t g dd}t|g d d S )Nr   rZ   rO   r  r   )r   r   r   )r@   Zpdtrcr   r_   r   r   r  rD   rD   rE   
test_pdtrc>  s   zTestCephes.test_pdtrcc                 C   sD   t  }|td tdd W d    d S 1 sw   Y  d S )N-floating point number truncated to an integerr   )r   r  r  r@   pdtri)rC   r  rD   rD   rE   
test_pdtriE  s   "zTestCephes.test_pdtric                 C   sR   t dd}tt |d dd t dgdgdggg d}t|td d S )Nr   rZ   r   r  ffffff?)r   #B;r  )r   r   )r@   Zpdtrikr   Z	gammainccr   r_   r   )rC   rh   rD   rD   rE   test_pdtrikJ  s   zTestCephes.test_pdtrikc                 C   r  r1  )r@   Zpro_ang1rB   rD   rD   rE   test_pro_ang1Q  r   zTestCephes.test_pro_ang1c                 C   s    t tdddddtd d S )NrZ   r   r  )r   r@   Zpro_ang1_cvr   rB   rD   rD   rE   test_pro_ang1_cvT  s   zTestCephes.test_pro_ang1_cvc                 C   r   r  )r   r@   Zpro_cvrB   rD   rD   rE   test_pro_cvX  r   zTestCephes.test_pro_cvc                 C   r  r3  )r@   Zpro_rad1rB   rD   rD   rE   test_pro_rad1[  r   zTestCephes.test_pro_rad1c                 C   r  r1  )r@   Zpro_rad1_cvrB   rD   rD   rE   test_pro_rad1_cv^  r   zTestCephes.test_pro_rad1_cvc                 C   r  r1  )r@   Zpro_rad2rB   rD   rD   rE   test_pro_rad2a  r   zTestCephes.test_pro_rad2c                 C   r  r1  )r@   Zpro_rad2_cvrB   rD   rD   rE   test_pro_rad2_cvd  r   zTestCephes.test_pro_rad2_cvc                 C   r>   rq   )r@   psirB   rD   rD   rE   test_psig  rG   zTestCephes.test_psic                 C   s   t tdddd d S r?   )r   r@   radianrB   rD   rD   rE   test_radianj  r   zTestCephes.test_radianc                 C   r   r   )r   r@   rgammarB   rD   rD   rE   test_rgammam  r   zTestCephes.test_rgammac                 C   sd   t tdd t tdd t tdd t tdd t td	d t td
d d S )N333333@r   333333      g@r   gg            @r&  )r   r@   roundrB   rD   rD   rE   
test_roundp  s   zTestCephes.test_roundc                 C   r>   rq   )r@   ZshichirB   rD   rD   rE   test_shichix  rG   zTestCephes.test_shichic                 C   sl   t d t tj\}}t|tjd  t|d t tj \}}t|tj d  tt|d d S )NrZ   r   r   z cosine integral(-inf) is not nan)r@   Zsicir_   r   r   r   r   r   )rC   sr  rD   rD   rE   	test_sici{  s   

zTestCephes.test_sicic                 C   r   NZ   r   )r   r@   sindgrB   rD   rD   rE   
test_sindg  r   zTestCephes.test_sindgc                 C   s.   t tddd tttdtj d S )NrZ   r  ?)r   r@   smirnovr   r_   r   r   rB   rD   rD   rE   test_smirnov  s   zTestCephes.test_smirnovc                 C   sR   t tddd t tddd t tddd tttdtj d S )	NrZ   r  rO   rL         ?      r   g      ȿ)r   r@   Z	_smirnovpr   r_   r   r   rB   rD   rD   rE   test_smirnovp  s   zTestCephes.test_smirnovpc                 C   s   t tddd tttdtj tjddddd}ttd|dt	d|  tjddddd}ttd	|dt	d	|  d S )
NrZ   r  r   r  TZendpointr   r   rJ   )
r   r@   	_smirnovcr   r_   r   r   r  r   r  )rC   x10Zx4rD   rD   rE   test_smirnovc  s   "zTestCephes.test_smirnovcc                 C   P   t tdtddd t tdtddd tttdtj d S NrZ   rM   333333?)r   r@   r  smirnovir   r_   r   r   rB   rD   rD   rE   test_smirnovi     zTestCephes.test_smirnovic                 C   r  r  )r   r@   r  Z
_smirnovcir   r_   r   r   rB   rD   rD   rE   test_smirnovci  r  zTestCephes.test_smirnovcic                 C   r   r   )r   r@   ZspencerB   rD   rD   rE   test_spence  r   zTestCephes.test_spencec                 C   s:   t tddd ttddd ttddd d S )NrZ   r   r   r  rL   gMoF?)r   r@   Zstdtrr   rB   rD   rD   rE   
test_stdtr     zTestCephes.test_stdtrc                 C   r   )Nffffff?rZ   )r@   ZstdtridfrB   rD   rD   rE   test_stdtridf  r   zTestCephes.test_stdtridfc                 C   r   )NrZ   r!  )r@   ZstdtritrB   rD   rD   rE   test_stdtrit  r   zTestCephes.test_stdtritc                 C   r   r   )r   r@   struverB   rD   rD   rE   test_struve  r   zTestCephes.test_struvec                 C   r   r   )r   r@   tandgrB   rD   rD   rE   
test_tandg  r   zTestCephes.test_tandgc                 C   r   r   )r   r@   ZtklmbdarB   rD   rD   rE   test_tklmbda  r   zTestCephes.test_tklmbdac                 C   r>   rq   )r@   y0rB   rD   rD   rE   test_y0  rG   zTestCephes.test_y0c                 C   r>   rq   )r@   r  rB   rD   rD   rE   test_y1  rG   zTestCephes.test_y1c                 C   r5  rq   )r@   ynrB   rD   rD   rE   test_yn  r   zTestCephes.test_ync                 C   r5  rq   )r@   yvrB   rD   rD   rE   test_yv  r   zTestCephes.test_yvc                 C   r5  rq   )r@   yverB   rD   rD   rE   test_yve  r   zTestCephes.test_yvec                 C   s  t ddt ddt ddt ddt dd	t dd
t ddt ddt ddt ddt ddt ddt ddt ddt ddt ddg}t ddt dd t d!d"t d#d$t d%d&t d'd(t d)d*t d+d,t d-d.t d/dt d0d1t d2d3t d4d5t d6d7t d8d9t d:d:g}ttj||d;d< d S )=Ng@g+п皙ٿr   r  r   r   r   g      "g      "@g4׵/Yg8EGr?r  gffffff@ig>@r   g|Pk?r  rZ   ir  r  i   ig     j@  ļBg0"bgpتO#M?gMF>?g5-g`?g	S+?g6U?gǗʿgjD{?/,Gg` 0Gg!^?gnF5o{gI\Y?g7f8goC9	?gyhgEbr?g{g.
?ga~gT-s?gɤ,P&?g|bgޗY3g!ؑ-@gi$bghgy(V@^gһ>g>gx\h<rR   rS   )r   r9   r@   wofz)rC   r
  wrD   rD   rE   	test_wofz  sr   "zTestCephes.test_wofzN)__name__
__module____qualname__rF   rI   rk   rp   rz   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  pytestmarkxfailr  r  r  r  r  r  r  r   r"  r$  r*  r,  r-  r/  r0  r2  r4  r7  r9  r;  r=  r@  rC  rE  rG  rI  rK  rM  rO  rP  rQ  rS  rU  rV  rW  rY  r[  r]  r_  ra  rc  re  rh  rj  rl  rn  rp  rr  rt  rv  rx  rz  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  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/  r1  r7  rD   rD   rD   rE   r=   ?   s   

		r=   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zej	d	d
d Z
ej	d	dd ZdS )TestAiryc                 C   s^   t d}t|tg dd t d}t|tg dd t d}t|tg dd d S )NGz?)g*?gTk'kPĿge+?gyCyt?r  g=
ףp=?)g'$'?geοgL?g
HVV?g
ףp=
׿)gl@D|?gV~׭ͿgU?g3{ɔ?)r    rA   r   r   r   rD   rD   rE   rF     s$   





zTestAiry.test_airyc                 C   s   t d}t d}d gd }tdD ]}|| tdtd  ||< qtddD ]}|| tttdtd   ||< q)t||d d S )Nr   rJ   rL   gN贁N{?rP   )	r    rH   rA   rs   r   r   absr   r   )rC   abb1rg   rD   rD   rE   rI     s   


(zTestAiry.test_airyec                 C   s   t d}tddgtddgtddgtdd	gf}t||d
 t d}t|d tg dd t|d tg dd t|d tg dd t|d tg dd d S )NrL   glgoe2+
g(0[g X*JgUfݿg˰zU`?g4c1=C?gCuTrJ   r   r   )g&g(.2+
gRg}`g%́r  rZ   )g7;1[ge*JgVwgL g<3r  )gNݿg3%IQ`?gZyΌ׿gʀ11^?g33tտr   )gqM0=C?g7uTg\G`?gp⍞vg$.m?)r    bi_zerosr   r   )rC   biZbiarD   rD   rE   test_bi_zeros  s(   





zTestAiry.test_bi_zerosc                 C   s:   t d}t|tdgtdgtdgtdgfd d S )NrZ   gcqg!xLgMSt$?g ~:p?rJ   )r    ai_zerosr   r   )rC   ZairD   rD   rE   test_ai_zeros:  s   
zTestAiry.test_ai_zerosr   c                 C   s   t d\}}}}t |\}}}}t |\}}	}}dt|d  }
t|d }t||dd t||dd t||
 dddd t|	| dddd t|d d g d	dd t|d d g d
dd d S )NP  rZ   r  r\   rS   r   r]   rP   )guqgqHkZg4g9Ζ%gB~gL")gLgQO	gMQnGg3:g)}g )r    rG  rA   r@  r   )rC   r
  zpZai_zpxZaip_zxZai_zZaip_z_Zai_zpZaip_zpZai_envelopeZaip_enveloperD   rD   rE   test_ai_zeros_bigA  "   
zTestAiry.test_ai_zeros_bigc                 C   s   t d\}}}}t |\}}}}t |\}}}}	dt|d  }
t|d }t||dd t||dd t||
 dddd t|	| dddd t|d d g d	dd t|d d g d
dd d S )NrI  rZ   r  r\   rS   r   r]   rP   )gx&gg-2+
gRgg`gu%́g{ )g K;1[g*JgVwg<w gd
3g/{
")r    rD  rA   r@  r   )rC   r
  rJ  Zbi_zpxZbip_zxrK  Zbi_zZbip_zZbi_zpZbip_zpZbi_envelopeZbip_enveloperD   rD   rE   test_bi_zeros_bigZ  rM  zTestAiry.test_bi_zeros_bigN)r8  r9  r:  rF   rI   rF  rH  r;  r<  Z	fail_slowrL  rN  rD   rD   rD   rE   r>    s    
!


r>  c                   @      e Zd Zdd ZdS )TestAssocLaguerrec                 C   sL   t dd}t ddd}t||dd t ddd}t||dd d S )Nr  rZ   r   r  )r    genlaguerreZassoc_laguerrer   )rC   a1a2rD   rD   rE   test_assoc_laguerreu  s
   z%TestAssocLaguerre.test_assoc_laguerreN)r8  r9  r:  rT  rD   rD   rD   rE   rP  t      rP  c                   @   rO  )TestBesselpolyc                 C      d S NrD   rB   rD   rD   rE   r   ~     zTestBesselpoly.test_besselpolyN)r8  r9  r:  r   rD   rD   rD   rE   rV  }  rU  rV  c                   @   s   e Z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%S )&
TestKelvinc                 C      t d}t|dd d S )NrL   gT?r   )r    r   r   )rC   ZmbeirD   rD   rE   r        
zTestKelvin.test_beic                 C   r[  )NrL   gD,X?r   )r    r   r   )rC   ZmbeiprD   rD   rE   r     r\  zTestKelvin.test_beipc                 C   r[  )NrL   gPA4?r   )r    r   r   )rC   ZmberrD   rD   rE   r     r\  zTestKelvin.test_berc                 C   r[  )NrL   gii߿r   )r    r   r   )rC   ZmberprD   rD   rE   r     r\  zTestKelvin.test_berpc                 C   "   t d}t|tg dd d S )Nr   g&jj@g+"@g(rw+@gU2@g`<6@rJ   )r    Z	bei_zerosr   r   )rC   rE  rD   rD   rE   test_bei_zeros  s   
zTestKelvin.test_bei_zerosc                 C   r]  )Nr   )gyWo.@g╲ݏ @gנ{)@gK11@gWc"5@r  )r    Z
beip_zerosr   r   )rC   ZbiprD   rD   rE   test_beip_zeros     
zTestKelvin.test_beip_zerosc                 C   r]  )Nr   g\@g6ُ@gӟHY'@g>"D0@ggaO;4@rJ   )r    Z	ber_zerosr   r   )rC   r   rD   rD   rE   test_ber_zeros  ra  zTestKelvin.test_ber_zerosc                 C   r]  )Nr   g '@gs%@gF ^-@gvۅj3@gB7@rJ   )r    Z
berp_zerosr   r   )rC   ZbrprD   rD   rE   test_berp_zeros  ra  zTestKelvin.test_berp_zerosc              	   C   sr   t d}t|t dt dd  t dt dd  t dt dd  t 	dt 
dd  fd d S )NrL   r  r  )r    rw  r   r   r   rs  ro  r   r   ru  rq  )rC   ZmkelvrD   rD   rE   rx    s   
zTestKelvin.test_kelvinc                 C   r[  )NrL   g>ɿr   )r    ro  r   )rC   ZmkeirD   rD   rE   rp    r\  zTestKelvin.test_keic                 C   r[  )NrL   gr@d"?r   )r    rq  r   )rC   ZmkeiprD   rD   rE   rr    r\  zTestKelvin.test_keipc                 C   r[  )NrL   gܙUr   )r    rs  r   )rC   ZmkerrD   rD   rE   rt    r\  zTestKelvin.test_kerc                 C   r[  )NrL   g^.n3Jr   )r    ru  r   )rC   ZmkerprD   rD   rE   rv    r\  zTestKelvin.test_kerpc                 C   r]  )Nr   gE>Q@gB= @gPN)@gm91@g
%5@rJ   )r    Z	kei_zerosr   r   )rC   ro  rD   rD   rE   test_kei_zeros  ra  zTestKelvin.test_kei_zerosc                 C   r]  )Nr   gWf,@g?"@gFZ*o+@gOpN2@gEa6@rJ   )r    Z
keip_zerosr   r   )rC   rq  rD   rD   rE   test_keip_zeros  ra  zTestKelvin.test_keip_zerosc           
      C   s   t d}|\}}}}}}}}	t|tg dd t|tg dd t|tg dd t|tg dd t|tg dd t|tg dd t|tg d	d t|	tg d
d d S )Nr   rb  rJ   r^  )#?Q5U@q89 %@ol`.@gO0q3@rf  rd  )gum.@gݏ @gs{)@g䠄11@gN(D!5@gS@g89@@g^C'@g1ZG0@g+ڇ4@rh  )r    Zkelvin_zerosr   r   )
rC   tmpZberzZbeizZkerzZkeizZberpzZbeipzZkerpzZkeipzrD   rD   rE   test_kelvin_zeros  s4   
zTestKelvin.test_kelvin_zerosc                 C   r]  )Nr   )rj  rk  rl  rm  gD;q3@rJ   )r    Z	ker_zerosr   r   )rC   rs  rD   rD   rE   test_ker_zeros
  ra  zTestKelvin.test_ker_zerosc                 C   r]  )Nr   rn  rJ   )r    Z
kerp_zerosr   r   )rC   ru  rD   rD   rE   test_kerp_zeros  ra  zTestKelvin.test_kerp_zerosN)r8  r9  r:  r   r   r   r   r_  r`  rc  re  rx  rp  rr  rt  rv  rg  ri  rp  rq  rr  rD   rD   rD   rE   rZ    s&    		.rZ  c                   @   rO  )TestBernoullic                 C   r]  )Nr   )r   r  g-!lV?r   g镲r   rJ   )r    Z	bernoullir   r   )rC   ZbrnrD   rD   rE   test_bernoulli  s   
zTestBernoulli.test_bernoulliN)r8  r9  r:  rt  rD   rD   rD   rE   rs    rU  rs  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestBetaz
    Test beta and betaln.
    c                 C   s~   t tddd ttddtd ttddddd	d
 tdd}tdtd td }t||dd d S )NrZ   r   33333YN~h?   g6.8@rR   r   r  rL   rJ   rP   rS   )r   r    betar   r  )rC   betZbetgrD   rD   rE   	test_beta+  s   zTestBeta.test_betac                 C   s   t ttdd d S )NrO   rL   )r   r_   isinfr    rz  rB   rD   rD   rE   test_beta_inf5  r.  zTestBeta.test_beta_infc                 C   st   t tddd ttddtd ttddddd	d
 tdd}tttdd}t||dd d S )NrZ   r   rv  rw  rx     gIs	@r  r   r  rL   rJ   rR   rS   )r   r    Zbetalnr   r#  r   r@  rz  )rC   Zbetlnr{  rD   rD   rE   test_betaln8  s   zTestBeta.test_betalnN)r8  r9  r:  __doc__r|  r~  r  rD   rD   rD   rE   ru  &  s
    
ru  c                   @   s   e Zd ZdZdd Zejdg ddd Zejdg dd	d
 Z	ejdg ddd Z
ejdejejejejgejdg ddd Zejdejejgdd ZdS )TestBetaIncz?
    Tests for betainc, betaincinv, betaincc, betainccinv.
    c                 C   sj   t g d}ttdd|| ttdd|| ttdd|d|  ttdd|d|  d S )N)r   r  rZ   rZ   )r_   r   r   r    betainc
betaincinvbetainccbetainccinvr   rD   rD   rE   
test_a1_b1I  s
   zTestBetaInc.test_a1_b1z
a, b, x, p))rL   rJ   g@w?r   )rx  g     `e@r\   g*?)rx  ry  g"Yx;r  )g   `1?g    ئAg\aY4g    ?)rJ   i g-߇)?g;?c                 C   <   t |||}t||dd t |||}t||dd d S )Nr   rS   g-a=)r    r  r   r  rC   rA  rB  r   r  p1x1rD   rD   rE   test_betainc_betaincinv`  s   z#TestBetaInc.test_betainc_betaincinv))      @r   r  g     ?)      @g     *@      ?g&?)      ?r  g333333?gFoE?)r        2@r  gg2$Z?)r  r  gZd;?g6)r  r  r  g`<)      0@r  g?g<dEA>)g?g7Ê@g/3J?Hz>c                 C   r  )N+<rS   gV瞯=)r    r  r   r  r  rD   rD   rE   test_betaincc_betainccinvu  s   z%TestBetaInc.test_betaincc_betainccinvza, b, y, ref))cj,@r  ghHISOa gڭ Y;)g      ,@g      -@g둤g}c]춫;)r        .@gUv \U,gS^%:)r   g      ?gMoigKB;)r   g    i@g1$-g\_cp:c                 C   s    t |||}t||dd d S )Nr  rS   )r    r  r   )rC   rA  rB  r	  refr   rD   rD   rE   test_betaincinv_tiny_y  s   z"TestBetaInc.test_betaincinv_tiny_yfuncargs))r   rL   r   )r   rL   r   )r         r   )r  r   r   )r  r   333333ӿ)r  r   皙?c              	   C   s|   t jdd. tjt jdd t j|  W d    n1 sw   Y  W d    d S W d    d S 1 s7w   Y  d S )Nraise)domainr  match)r    errstater;  r   SpecialFunctionErrorr  )rC   r  r  rD   rD   rE   test_betainc_domain_errors  s   "z&TestBetaInc.test_betainc_domain_errorsdtypec                 C   sL   t jdg|d}t jdg|d}t|||}t||dt |j d d S )Nr   r  r   r  rS   )r_   r   r    r  r   r   eps)rC   r  rA  r   r  rD   rD   rE   test_gh21426  s   zTestBetaInc.test_gh21426N)r8  r9  r:  r  r  r;  r<  parametrizer  r  r  r    r  r  r  r  r  r_   r   r   r  rD   rD   rD   rE   r  D  s0    



	r  c                   @   sT   e Zd Zdd Zdd Zdd Zejjdd Z	d	d
 Z
dd Zejjdd ZdS )TestCombinatoricsc                 C   s   t tddgddgddg t tddd ttjddddd ttjddddd	d
 t dd tdD tdttddd ttj	d }ttj||d dd| d}tjdddd|kshJ d S )Nr  r   rJ         ^@g     @j@Texactx   )r  Z
repetition   c                 S   s   g | ]
}t jd |ddqS )rm   Tr  )r    comb.0rh   rD   rD   rE   
<listcomp>  s    z/TestCombinatorics.test_comb.<locals>.<listcomp>r3  rm   r   r^   rZ   l   hU7`S?Q r  2   )
r   r    r  r   rs   listr_   iinforr   max)rC   iir  rD   rD   rE   	test_comb  s   zTestCombinatorics.test_combc                 C   sL   d}d}t |}t |}tj||dd}tj||dd}||ks$J d S )NF   rV   Tr  )r_   int64r    r  )rC   rg   rh   Znp_nZnp_kZres_npZres_pyrD   rD   rE   test_comb_with_np_int64  s   

z)TestCombinatorics.test_comb_with_np_int64c                 C   z   t tjddddd t tjddddd t tjddddd t tjddddd ttg dg d	g d
 d S )NrL   r   Tr  r   rO   FrL   rO   rL   r  r   r   rO   r   )r   r   r   r  )r   r    r  r   rB   rD   rD   rE   test_comb_zeros  
   "z!TestCombinatorics.test_comb_zerosc                 C   sF   d}t j|d tjdddd W d    d S 1 sw   Y  d S )Nz`exact=True`r  r   rJ   Tr  )r;  deprecated_callr    r  )rC   msgrD   rD   rE   test_comb_exact_non_int_dep  s   "z-TestCombinatorics.test_comb_exact_non_int_depc                 C   sJ   t tddgddgddg ttddd ttjddddd d S )	Nr  r   rJ        @g     @Tr  i  )r   r    permr   r   rB   rD   rD   rE   	test_perm  s   zTestCombinatorics.test_permc                 C   r  )NrL   r   Tr  r   rO   Fr  r  )r   r   r   r  )r   r    r  r   rB   rD   rD   rE   test_perm_zeros  r  z!TestCombinatorics.test_perm_zerosc                 C   s>  t jtdd tjddgddgdd W d    n1 sw   Y  t jd	d tjd
ddd W d    n1 s<w   Y  t jd	d tjdddd W d    n1 sZw   Y  t jd	d tjdddd W d    n1 sxw   Y  t jtd	d tjdd
dd W d    d S 1 sw   Y  d S )Nzscalar integersr  rZ   rL   rJ   r   Tr  zNon-integergffffff@rP   gffffffr   g333333      @)r;  r   
ValueErrorr    r  r  rB   rD   rD   rE   test_perm_iv  s   "zTestCombinatorics.test_perm_ivN)r8  r9  r:  r  r  r  r;  r<  thread_unsafer  r  r  r  rD   rD   rD   rE   r    s    	
r  c                   @   sd   e Z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S )TestTrigonometricc                 C      t d}d}t|| d S )N   r   )r    r   r   )rC   cbZcbrlrD   rD   rE   r        
zTestTrigonometric.test_cbrtc                 C      t d}d}t||d d S )Ngfffff;@g鎖C@r  )r    r   r   )rC   Zcb1Zcbrl1rD   rD   rE   test_cbrtmore     
zTestTrigonometric.test_cbrtmorec                 C   &   t d}ttd }t||d d S )Nr
  r   r  r    r   r	   r   r   )rC   ZcdgZcdgrlrD   rD   rE   r        
zTestTrigonometric.test_cosdgc                 C   r  NrV   r  r  r  )rC   ZcdgmZcdgmrlrD   rD   rE   test_cosdgmore  r  z TestTrigonometric.test_cosdgmorec                 C   sV   t dt dt td f}tdd tdd ttd d f}t||d d S )Nr   r  r  rZ   r  )r    r   r   r	   r   )rC   csZcsrlrD   rD   rE   r     s    &zTestTrigonometric.test_cosm1c                 C   *   t d}ttd d }t||d d S )NrV   r  rO   r  r    r   r
   r   r   )rC   ctZctrlrD   rD   rE   r        
zTestTrigonometric.test_cotdgc                 C   r  )Nr   r   rO   r  r  )rC   Zct1Zctrl1rD   rD   rE   test_cotdgmore  r  z TestTrigonometric.test_cotdgmorec                 C   s   t tddd t tddd t tddd t tddd t td	dd t td
dd t tddd t tddd t tddd t tddd t tddd t tddd t tddd d S )Nr   r      r   r
  r   i   y   i  i;  i  )r   r    r   rB   rD   rD   rE   test_specialpoints!  s   z$TestTrigonometric.test_specialpointsc                 C   s&   t tdgd ttdd d S )Nr   rZ   r   r   )r   r    Zsincr   rB   rD   rD   rE   	test_sinc0  s   zTestTrigonometric.test_sincc                 C      t d}t|d d S r	  )r    r  r   )rC   ZsnrD   rD   rE   r  5     
zTestTrigonometric.test_sindgc                 C   H   t d}ttd }t||d t d}ttd }t||d d S )NrV   r  r  r   r   )r    r  r   r   r   )rC   ZsnmZsnmrlZsnm1Zsnmrl1rD   rD   rE   test_sindgmore9     

z TestTrigonometric.test_sindgmoreN)r8  r9  r:  r   r  r   r  r   r   r  r  r  r  r  rD   rD   rD   rE   r    s    r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )	TestTandgc                 C   r  r  r    r&  r
   r   r   )rC   tnZtnrlrD   rD   rE   r'  D  r  zTestTandg.test_tandgc                 C   r  )Nr   r   r  r  r   r  )rC   ZtnmZtnmrlZtnm1Ztnmrl1rD   rD   rE   test_tandgmoreI  r  zTestTandg.test_tandgmorec                 C   s   t tddd t tddd t tddd t tddd t td	dd t td
dd t tddd t tddd t tddd t tddd t tddd d S )Nr   r   r  r   r   r  r   r  r  r  iLr  r  r  r  )r   r    r&  rB   rD   rD   rE   r  Q  s   zTestTandg.test_specialpointsN)r8  r9  r:  r'  r  r  rD   rD   rD   rE   r  B  s    r  c                   @   T   e Z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S )	TestEllipc                 C   s   t dtj dS )zRegression test for #912.r   N)r    r   r_   r   rB   rD   rD   rE   test_ellipj_nan`  s   zTestEllip.test_ellipj_nanc                 C   s0   t dd}tdtdddg}t||d d S )Nr   r   r      )r    r   r   r	   r   )rC   elrelrD   rD   rE   r   d     zTestEllip.test_ellipjc                 C   s   t d}t|dd tt dtj tt dtd  tt tjd tt tjtj tt dtj t	t dd	 d S )
Nr   g;{yэ?r  r   r   rL   rO   gN?)
r    r"   r   r   r#   r_   r   r   r   r   )rC   elkrD   rD   rE   r   i  s   
zTestEllip.test_ellipkc                 C   s  t td d}t d}t||d dt d }dt d }t|d }t ||}t|dd tt td d	td  tt td d
tj tt td tj d	 tt td tj	tj	 tt td dtj	 tt ddd	 tt tjdtj tt tj dtj  tt tjtjtj	 tt tjtj tj	 tt tj tj tj	 tt tj tjtj	 tt tj	dtj	 tt tj	tj	tj	 t
t ddddd t
t ddd d S )NrL   r   rx   rm   r  r   gfoKh?r  r   r   r   r   gt?rZ   rM   r  rS   6<R!?r  gfON?)r    r   r   r"   r   r   r   r_   r   r   r   )rC   Zelkincr  alphaphir  rD   rD   rE   r   t  s0   
zTestEllip.test_ellipkincc                 C   s   d}d}t |d}g }tdD ]}|| t |d}qt||}t|t |dd t|t |}t|t |dd d S )	N    ?Pag?r   r  rZ   gV^8j?g,j6Ƅ@rL   )	r_   	nextafterrs   appendr    r   r   	full_liker   rC   Zmbadr  r  Zmvalsjr  f1rD   rD   rE   test_ellipkinc_2     
zTestEllip.test_ellipkinc_2c                 C   sD  t ddd}t ddd}t jdtd ddd}tt|d	t t |d
d tt|d	t t |d
d tt|d	t t |d
d t	tt jd d	t j
 tt| d	t t | d
d tt| d	t t | d
d tt| d	t t | d
d t	tt j d d	t j
 d S )Niir   gFFg<r  rL   Fr  rZ   r4  rS   )r_   ro   r  r   r   r    r   Zarcsinhr
   r   r   )rC   ZxlogZxlinZxlin2rD   rD   rE   test_ellipkinc_singular  s.    z!TestEllip.test_ellipkinc_singularc                 C   s   t d}t|dd tt dtd  tt dd tt tj tj tt tjtj tt dtj tt dd d S )	Nr   gl?r  r   rL   r   r  g?eg@)	r    r!   r   r   r   r_   r   r   r   )rC   elerD   rD   rE   r     s   
zTestEllip.test_ellipec                 C   s  t td d}t d}t||d dt d dt d }}t|d }t ||}t|dd tt td d	td  tt td d
d
 tt td tj tj tt td tj	tj	 tt td dtj	 tt ddd	 tt tjdtj tt tj dtj  tt tjtj tj tt tj tj tj  tt tjtjtj	 tt tj tjtj	 tt tj	dtj	 tt tj	tj	tj	 t
t ddd d S )NrL   r   r  4   r  #   g'?r  r   r   r   r   r  r  gL@)r    r   r   r!   r   r   r   r_   r   r   r   )rC   Zeleincr  r   r  r  rD   rD   rE   r     s,   
zTestEllip.test_ellipeincc                 C   s   d}d}t |d}g }tdD ]}|| t |d}qt||}t|t |dd t|t |}t|t |dd	 d S )
Nr  r  r   r  rZ   g%?rL   gXo
@rJ   )	r_   r  rs   r  r    r   r   r  r   r  rD   rD   rE   test_ellipeinc_2  r  zTestEllip.test_ellipeinc_2N)r8  r9  r:  r  r   r   r   r
  r  r   r   r  rD   rD   rD   rE   r  _  s    r  c                   @   sN   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	j
jdddd ZdS )TestEllipCarlsonzTest for Carlson elliptic integrals ellipr[cdfgj].
    The special values used in these tests can be found in Sec. 3 of Carlson
    (1994), https://arxiv.org/abs/math/9409227
    c                 C   s   t tddd tdtdksJ ttddsJ tdtdtdks&J tddgddgddgddgdd	gdd
gg}ttjtdddtdd dg}t	|D ]\}}t t| ||  qSd S )NrZ   r   r   r  g      @r   r               r  r   y
c?
cy=B?CGֿr   y檠f?P9lb?)
r   r$   r   r   r   r   r_   r   r   	enumeraterC   r  Zexpected_resultsrv   arrrD   rD   rE   test_elliprc  s*   zTestEllipCarlson.test_elliprcc                 C   s(  t tdddd t tdddd d tddtdksJ ttddds)J ttddtdds7J ttddtddsEJ ttddttjj	 d sWJ ttddtddsdJ t
g d	g d
g dg dg dg dg}t
g d}t|D ]\}}t t| ||  qd S )NrZ   r   rL   r   g`C+?r   r   rO   )r   r   r   r   r   r   r  r  r   r   r  r  )r               ?r  )y             r  r  )gfe_?gi+"?gP$M?ytgFU?7?@yR<8*y{62?z)r   r%   r   r_   r}  r   r   r   r   tinyr   r  r  rD   rD   rE   test_elliprd  s&   $zTestEllipCarlson.test_elliprdc              	   C   s   t tdddd t tdddd tdtddksJ ttddds'J ttddds1J tttdddks=J ttddtt dsKJ tg dg dg d	g d
g dg dg dg}tg d}t|D ]\}}t t| ||  qnd S )NrZ   r   rL   gPO?r   rO   )r   r   r   )r  r  r   )r   r   r   r  r  r   r  r  )r  r        ?      )geQO?ʞu5J?r  yp\y?kg2ΰ?gHwд?y|pF?-6Fj)	r   r&   r   r_   r}  r   r   r   r  r  rD   rD   rE   test_elliprf  s&   zTestEllipCarlson.test_elliprfc                 C   s   t tdddd t tdddd t tdddd ttdtds&J ttttdds3J tg dg dg dg dg dg d	g}ttjd
ddddg}t|D ]\}}t t| ||  qXd S )NrZ   r   r   )r   r  r  r  r  r  )r  r  r  )r   g8d`?r   gL+?g}^?y旮0?ʋW?yjN?^?gt?)	r   r'   r_   r}  r   r   r   r   r  r  rD   rD   rE   test_elliprg6  s,   zTestEllipCarlson.test_elliprgc                 C   s   t tddddd tddtddksJ ttdddds J ttdddds+J tdddtdks6J tg dg dg dg dg d	g d
g dg dg dg	}tg d}t|D ]\}}t t| ||  q_d S )NrZ   r   r   rO   )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   y            ?)r   r   r   r  )r   r   r         )	g @?gviM?ym?\Isؿg'4Ob?go0 ?yW7?xfOA?ybv㿘ܶ.gHQ?gjߡB7E)r   r(   r   r   r   r  r  rD   rD   rE   test_elliprjK  s&   		zTestEllipCarlson.test_elliprjzInsufficient accuracy on 32-bitr  c                 C   s8   t tdddddddd t td	d
dddddd d S )Ng   gq>g   `W:g    HBg   @ۘ?gRy|>r  r  r  g   ,@g    x=g   @e:g   `ݽ>g(HR)A)r   r(   rB   rD   rD   rE   test_elliprj_hardf  s    
z"TestEllipCarlson.test_elliprj_hardN)r8  r9  r:  r  r  r  r   r!  r$  r;  r<  r=  r%  rD   rD   rD   rE   r    s    r  c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )"TestEllipLegendreCarlsonIdentitieszTest identities expressing the Legendre elliptic integrals in terms
    of Carlson's symmetric integrals.  These identities can be found
    in the DLMF https://dlmf.nist.gov/19.25#i .
    c                 C   s^   t ddd| _ttj| _ddtdt | j  dd  | _t 	| jg| j| jf| _
d S )Nr   r   r   r   rO   r   )r_   r   Zm_n1_1r   r   minZmax_neglog2Z
very_neg_mZconcatenate
ms_up_to_1rB   rD   rD   rE   setup_class|  s   

z.TestEllipLegendreCarlsonIdentities.setup_classc                 C   s$   | j }tt|tdd| d dS )z5Test identity:
        K(m) = R_F(0, 1-m, 1)
        r   r   N)r)  r   r"   r&   rC   r  rD   rD   rE   test_k  s   z)TestEllipLegendreCarlsonIdentities.test_kc                 C   s>   t tj}|dtdt|   }tt|td|d dS )z\Test identity:
        K(m) = R_F(0, 1-m, 1)
        But with the ellipkm1 function
        r   r   r   N)	r   r   r  r   r_   r(  r   r#   r&   )rC   r  m1rD   rD   rE   test_km1  s   
z+TestEllipLegendreCarlsonIdentities.test_km1c                 C   s(   | j }tt|dtdd| d  dS )z9Test identity:
        E(m) = 2*R_G(0, 1-k^2, 1)
        r   r   r   N)r)  r   r!   r'   r+  rD   rD   rE   test_e  s   "z)TestEllipLegendreCarlsonIdentities.test_eN)r8  r9  r:  r  r*  r,  r.  r/  rD   rD   rD   rE   r&  v  s    r&  c                   @   sv   e Zd Zdd Zdd Zd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S )TestErfc                 C   r[  )Nr  g);T?r  )r    r   r   )rC   ZerrD   rD   rE   r     r\  zTestErf.test_erfc                 C   s&   t d}tg d}t||d d S )Nr   )yTcJ5?=W?yo@n@y'ʷ@g	@y"[

@,y]+@yld&@-;'j'>@rJ   )r    Z	erf_zerosr   r   )rC   ZerzZerzrrD   rD   rE   test_erf_zeros  s   
zTestErf.test_erf_zerosr   c                 C   s   t jd}d}|d|d|dd| d  }|d|d|dd| d  }|d|  }	t jdd	> ||	}
||j}t |
}|
| }
|	| }	t |}|| }|| }t||
|	||d
 t|||||d
 W d    d S 1 sww   Y  d S )NrU   r  g{Gz?rL   r   rZ   r  ignoreallr  )	r_   re   rf   paretorandintr  r   isfiniter9   )rC   r  Z
other_funcrT   r^   rj   rg   r   r	  r
  r6  Zw_realmaskrD   rD   rE   _check_variant_func  s"   ""


"zTestErf._check_variant_funcc                 C   s   | j tjdd ddd d S )Nc                 S   s   dt |  S rq   r@   r   r
  rD   rD   rE   <lambda>  s    z.TestErf.test_erfc_consistent.<locals>.<lambda>r|   r  r  )r9  r@   r   rB   rD   rD   rE   test_erfc_consistent  s   
zTestErf.test_erfc_consistentc                 C      | j tjdd dd d S )Nc                 S   s   t | |  t|  S rX  )r_   r   r@   r   r;  rD   rD   rE   r<    s    z/TestErf.test_erfcx_consistent.<locals>.<lambda>r|   rS   )r9  r@   erfcxrB   rD   rD   rE   test_erfcx_consistent  
   
zTestErf.test_erfcx_consistentc                 C   r>  )Nc                 S   s   dt d|   S )Nr  r  r:  r;  rD   rD   rE   r<    s    z.TestErf.test_erfi_consistent.<locals>.<lambda>r|   rS   )r9  r@   erfirB   rD   rD   rE   test_erfi_consistent  rA  zTestErf.test_erfi_consistentc                 C   r>  )Nc                 S   s&   t td t|  |   t|  S rf  )r   r   r_   r   r@   rB  r;  rD   rD   rE   r<    s   & z/TestErf.test_dawsn_consistent.<locals>.<lambda>r|   rS   )r9  r@   r   rB   rD   rD   rE   test_dawsn_consistent  rA  zTestErf.test_dawsn_consistentc                 C   6   t jt j t jg}t jddg}tt||dd d S )NrO   rZ   r   rS   )r_   r   r   r   r    r   rC   r(  r  rD   rD   rE   test_erf_nan_inf     zTestErf.test_erf_nan_infc                 C   rE  )NrL   r   r   rS   )r_   r   r   r   r    r   rF  rD   rD   rE   test_erfc_nan_inf  rH  zTestErf.test_erfc_nan_infc                 C   s8   t jt j t jg}t jt jdg}tt||dd d S )Nr   r   rS   )r_   r   r   r   r    r?  rF  rD   rD   rE   test_erfcx_nan_inf  s   zTestErf.test_erfcx_nan_infc                 C   s<   t jt j t jg}t jt j t jg}tt||dd d S )Nr   rS   )r_   r   r   r   r    rB  rF  rD   rD   rE   test_erfi_nan_inf  s   zTestErf.test_erfi_nan_infc                 C   rE  )Nr'  r   r   rS   )r_   r   r   r   r    r   rF  rD   rD   rE   test_dawsn_nan_inf  rH  zTestErf.test_dawsn_nan_infc                 C   s@   t jt j t jg}t jt jd  ddg}tt||dd d S )Nr  r   r   rS   )r_   r   r   r   r    r5  rF  rD   rD   rE   test_wofz_nan_inf  s   zTestErf.test_wofz_nan_infN)r   )r8  r9  r:  r   r1  r9  r=  r@  rC  rD  rG  rI  rJ  rK  rL  rM  rD   rD   rD   rE   r0    s    
	r0  c                   @   rO  )	TestEulerc           
      C   s  t d}t d}t d}t|dgdd t|ddgdd t|g ddd t d}g d}td	d
}tddD ]}|d rNt||  |d| < q<t|| |d| < q<tjdd t|| | }t	|}	W d    n1 svw   Y  t
|	dd d S )Nr   rZ   rL   r   rS   )rZ   r   rO   r   )rZ   rZ   r   =   ii  iY  i=) il   Q~ l   10[l   $8gC
 l   2l   v}Ju: )r   dr  r2  r3  r   r  )r    Zeulerr   r   rs   rt   r_   r  r   r  r   )
rC   Zeu0Zeu1Zeu2Zeu24Z	mathworldcorrectrh   errZerrmaxrD   rD   rE   
test_euler  s$   





zTestEuler.test_eulerN)r8  r9  r:  rS  rD   rD   rD   rE   rN    rU  rN  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestExpc                 C   r  )NrL   rJ   )r    r   r   rC   exZexrlrD   rD   rE   r     r  zTestExp.test_exp2c                 C   r  )Nr  g;f@r  )r    r   r   rC   ZexmZexmrlrD   rD   rE   test_exp2more#  r  zTestExp.test_exp2morec                 C   r  )NrL   r  )r    r   r   rU  rD   rD   rE   r   (  r  zTestExp.test_exp10c                 C   r  )Nr  gYs@r  )r    r   r   rW  rD   rD   rE   test_exp10more-  r  zTestExp.test_exp10morec                 C   N   t dt dt df}tdd tdd tdd f}t||d d S )NrL   r   rJ   rZ   r  r    r   r   r   rU  rD   rD   rE   r   2     "zTestExp.test_expm1c                 C   rZ  )NrL    @皙@rZ   r  r[  )rC   Zex1Zexrl1rD   rD   rE   test_expm1more7  r\  zTestExp.test_expm1moreN)	r8  r9  r:  r   rX  r   rY  r   r_  rD   rD   rD   rE   rT    s    rT  c                    s    fdd}dd }t | t |u s J dt |  dt | t| tjrJ| j|jks.J || | t|  | D ]\}}t|| d q<d	S t| rht|rht	t | drh|| oe|| d	S  d	S || | d	S )
a  
    Sharper assertion function that is stricter about matching types, not just values

    This is useful/necessary in some cases:
      * dtypes for arrays that have the same _values_ (e.g. element 1.0 vs 1)
      * distinguishing complex from real NaN
      * result types for scalars

    We still want to be able to allow a relative tolerance for the values though.
    The main logic comparison logic is handled by the xp_assert_* functions.
    c                    s(    d u rt | | d S t| | d d S )NrS   )r3   r2   r   r	  rS   rD   rE   assert_funcI  s   (z(assert_really_equal.<locals>.assert_funcc                 S   s    t | jrt | jsJ d S rX  )r_   r   r   r  r   rD   rD   rE   assert_complex_nanL      z/assert_really_equal.<locals>.assert_complex_nanztypes not equal: z, rS   r  N)
type
isinstancer_   ndarrayr  ziprd   assert_really_equalr   r7   )r   r	  rT   ra  rc  Zelem_xZelem_yrD   rS   rE   ri  =  s   ,
"ri  c                   @   sr  e Zd Zdd Zejdg ddd Zejdg dejd	d
dgdd Zejd	d
dgdd Z	ejdg ddd Z
ejdddgejdg ddd Zejdd
dgejdddgejjdejedejejd  edejejd ej ej d d ed!g
g d"d#ejd$ejejejgd%d& Zejddd'ejd(gd)d* Zejd+ed,d-ejd	d
dgd.d/ Zejd	d
dgejd0d eejejejejejej ej!ej"g
ejd1edd-d2d3 Z#ejd	d
dgejd4ed,d-d5d6 Z$ejd0ejej ej!ej"gejdg dd7d8 Z%ejded9d:d;d<d= Z&ejde'edd>e'ed9d:d; d?d@ Z(dAdB Z)dCdD Z*ejd0ejejeje+gejdddgejd	d
dgejd1edd-ejjdEg d,gd'gejgejejd  gejd,ggg dFd#dGdH Z,ejdddgejd	d
dgejjdd,d'dIejejejd  d gg dJd#dKdL Z-ejded9d:dMdNdO Z.ejde'edd>e'ed9d:dM dPdQ Z/dRdS Z0ejd0ejejeje+gejdddgejd	d
dgejd1edd-ejjdEg d,gd'gejgejejd  gejd,ggg dFd#dTdU Z1ejdddgejd	d
dgejjdd,d'dIejejejd  d gg dJd#dVdW Z2ejdXed,d-ejdedYdZd[d\d] Z3ejdXe'ed,d-d;dZg ejde'edd>e'ed>d^dM d_d` Z4dadb Z5ejd0ejejeje+gejdddgejd	d
dgejd1edd-ejjdEg d,gd'gejgejejd  gejd,ggg dFd#dcdd Z6ejdddgejd	d
dgejdXed,d-ejjdd,d'dIejejejd  d gg dJd#dedf Z7ejdd
dgejdg dejdXdgdhddidd'ejgdjdk Z8ejdd
dgejdg dejjdXd(ed!gd(dlgd#dmdn Z9ejdg dejdXed,dodpdq Z:drds Z;d S )tTestFactorialFunctionsc                 C   st   |r
t j||ddS |dkrt||nd}t||| | t || d  t || d  }|t|d S )NTrh   r  zerorZ   )r    
factorialkr_   modpowerr  r  maximum)rC   rg   rh   r  extendrr(  rD   rD   rE   factorialk_refb  s
   8z%TestFactorialFunctions.factorialk_refzexact,extend))Trl  )Frl  )Fr   c                 C   s`   ||d}t tjdi |sJ t tjdi |sJ t tjdddi|s.J d S )Nr  rq  rZ   rh   r   rZ   )r_   Zisscalarr    	factorial
factorial2rm  )rC   r  rq  kwrD   rD   rE   "test_factorialx_scalar_return_typek  s   
"z9TestFactorialFunctions.test_factorialx_scalar_return_typerg   )rO   r  r  TFc                 C   sX   d|i}t tj|fi |d t tj|fi |d t tj|fddi|d d S )Nr  r   rh   r   )r   r    rv  rw  rm  )rC   r  rg   rx  rD   rD   rE   $test_factorialx_negative_extend_zeros  s    z;TestFactorialFunctions.test_factorialx_negative_extend_zeroc                 C   s   d|i}d}g d}t jg d|rtnt jd}ttj|fi |||d ttj|fi |||d ttj|fddi|||d d S )	Nr  r   )r%  r   rZ   )r   r   rZ   rZ   r  rS   rh   r   )	r_   r   
native_intr   ri  r    rv  rw  rm  )rC   r  rx  rT   rg   r  rD   rD   rE   *test_factorialx_negative_extend_zero_array{  s   $zATestFactorialFunctions.test_factorialx_negative_extend_zero_arraygggffffff
c                 C   s  ddi}dddd}ddd	d}d
ddd}d}t tj|fi ||| |d t tj|fi ||| |d t tj|fddi||| |d t tj|gfi |d || |d t tj|gfi |d || |d t tj|gfddi|d || |d d S )Nrq  r   gRc/a_%g:\Oag@g*BZ'r  go	08G)?goNb]gMxcQgNy?g=u?g7K [n<rS   rh   r   r   )r   r    rv  rw  rm  )rC   rg   rx  Zexp_1Zexp_2Zexp_krT   rD   rD   rE   'test_factorialx_negative_extend_complex  s(     $&&.z>TestFactorialFunctions.test_factorialx_negative_extend_complexr  r   r   n_outerc                    s4   ddi  fdd}|||  |d| |  d S )Nrq  r   c                    s8  t t| d}td}|rtdntd}ttj| fi  | ttj| d fi  | ttj	| d fddi | d}ttj	| | fd|i | ttj| gfi  d | ttj| d gfi  d | ttj	| d gfddi d | ttj	| | gfd|i d | d S )	Nr  nan+nanjr   rL   r   rh   y      ?       r   )
r7   re  r_   
complex128r   ri  r    rv  rw  rm  )rg   
complexifyZcomplex_nanr   r  rx  rD   rE   _check  s   
  "&*zTTestFactorialFunctions.test_factorialx_negative_extend_complex_poles.<locals>._checki rD   )rC   r  r  r  rD   r  rE   -test_factorialx_negative_extend_complex_poles  s   zDTestFactorialFunctions.test_factorialx_negative_extend_complex_polesboxedrq  rl  r   r   r  r  NZnat)
NaNznp.float64('nan')	NaN+i*NaNznp.complex128('nan+nanj')r   zinf+0iz-infz-inf+0iNoneNaT)Zids
factorialxc                 C   s  d|d}|t jkrd|d< |rg dndddtd g}|t jkr#dnddg}tt||sUtjtd	d
 ||r<|gn|fi | W d    d S 1 sNw   Y  d S tt||r|dkrtjtdd
 ||rn|gn|fi | W d    d S 1 sw   Y  d S |dkott|d}|rt	dnt
d}	tt|drt|rt
|dkrdnd}
|dkrt
dn|
}	|r||gfi |d n||fi |}t||	 d S )NFrt  r   rh   rv   r  r  rv   r  r  Unsupported data type.*r  r   In order to use non-integer.*r  r   rl  r   r   )r    rm  re  rv  r7   r;  r   r  r_   r  r   r}  ri  )rC   r  rg   rq  r  rx  Zpermissible_typesZtypes_need_complex_extr  r  Zneg_inf_resultr  rD   rD   rE   test_factorialx_inf_nan  s(   

""*z.TestFactorialFunctions.test_factorialx_inf_nanr  stringc                 C   s   t jtdd tjd|d W d    n1 sw   Y  t jtdd tjd|d W d    n1 s7w   Y  t jtdd tjddd|d W d    d S 1 sXw   Y  d S )Nzargument `extend` must be.*r  rZ   )rq  r   Trh   r  rq  )r;  r   r  r    rv  rw  rm  )rC   rq  rD   rD   rE   test_factorialx_raises_extend  s   "z4TestFactorialFunctions.test_factorialx_raises_extendlevelsrZ   r   c                    s   d fdd	  fdd}t  ddgd}d	tdgd
tjdddgdtjddddgd}|tj||d|d  |tj||d|d  |tj|d|d|d  d S )NrZ   c                    s   |dkr| S  | | g|d S )z
            Double x and nest it k times

            For example:
            >>> _nest_me([3, 4], 2)
            [[[3, 4], [3, 4]], [[3, 4], [3, 4]]]
            r   rZ   rD   r   rh   _nest_merD   rE   r    s   zDTestFactorialFunctions.test_factorialx_array_shape.<locals>._nest_mec                    s4   t j |dtd}t| t j|t j d S )Nrh   r  )r_   r   objectr   r   r   )resZnucleusr   r  r  rD   rE   r  	  s   zBTestFactorialFunctions.test_factorialx_array_shape.<locals>._checkr   r   r  r  rx   Tr  r  r   r  rL   ru  )r_   r   mathrv  r    rw  rm  )rC   r  r  r  rg   exp_nucleusrD   r  rE   test_factorialx_array_shape  s   z2TestFactorialFunctions.test_factorialx_array_shaper  dimc                 C   s   t jd||d}dddd}ttj||dt j|d |d	 ttj||dt j|d
 |d	 ttj|d|dt j|d |d	 d S )Nr   )r  ndminr  rx   r  r  r  rZ   r  rL   r   )r_   r   r   r    rv  rw  rm  )rC   r  r  r  rg   r   rD   rD   rE   test_factorialx_array_dimension	  s   z6TestFactorialFunctions.test_factorialx_array_dimensionlevelc                    s   d fdd	  dg|d d}dddd	}|rt nt}|tj||d
tj|d |d |tj||d
tj|d |d |tj|d|d
tj|d |d d S )NrZ   c                    s   |dkr| S  | g|d S r   rD   r  r  rD   rE   r  $	  s   zCTestFactorialFunctions.test_factorialx_array_like.<locals>._nest_mer   r  r  rx   r  r  r  r  rL   r   ru  )r   r   r    rv  r_   r   rw  rm  )rC   r  r  rg   r  ra  rD   r  rE   test_factorialx_array_like!	  s   z1TestFactorialFunctions.test_factorialx_array_likec                    sh   ||d|r	t nt  fdd}||d ||d |tjd|d |tjddg|d d S )Nrt  c                    s   t | tjr| tjnt| } tj| fi tj|fi   tj| fi tj|fi   tj| fdditj|fddi d S )Nrh   r   )	rf  r_   rg  r   r  r    rv  rw  rm  )rg   Zn_refra  rx  rD   rE   r  ;	  s   "&&z;TestFactorialFunctions.test_factorialx_uint.<locals>._checkr   rZ   r  )r   r   r_   r   )rC   r  rq  r  r  rD   r  rE   test_factorialx_uint4	  s   
z+TestFactorialFunctions.test_factorialx_uintrV   r  r  c                 C   h   t jdkrdnd}tttj|ddtj|dd|d ttj|gddttj|gdd|d d S )Nr;   t0=r   Tr  FrS   )sysplatformr   rt   r    rv  r   rC   rg   rT   rD   rD   rE   test_factorial_accuracyG	     
z.TestFactorialFunctions.test_factorial_accuracy   c                 C   s   t |}t|tj|dd t|tj|gddd  tjdkr#dnd}t|}t|tj|dd|d t|tj|gddd |d dd	d
}t|tj|fi ||d t|tj|gfi |d |d d S )NTr  r   r;   +6=r   FrS   r   rt  )r  rv  r   r    r  r  rt   r   rC   rg   rQ  rT   rx  rD   rD   rE   test_factorial_int_referenceS	  s   

&z3TestFactorialFunctions.test_factorial_int_referencec                 C   sf   dd }|dd |dd |dd |d	d
 |dd |dd |dd |dd |dd d S )Nc                 S   s   t jdkrdnd}tt| ||d tt| gd ||d tjtdd tj| dd	 W d    n1 s9w   Y  tjtdd tj| gdd	 W d    d S 1 sYw   Y  d S )
Nr;   r  r   rS   r   `exact=True` only supports.*r  Tr  )r  r  r   r    rv  r;  r   r  )rg   r  rT   rD   rD   rE   r  g	  s   "zETestFactorialFunctions.test_factorial_float_reference.<locals>._checkr   gr?g(\?gc?g333333@g4s@g333333&@gމOAfffff@@g	²Gg     K@gC$JOglS@g }WgX@gX>%`g\CSe@gG=rD   rC   r  rD   rD   rE   test_factorial_float_referencef	  s   







z5TestFactorialFunctions.test_factorial_float_referencec                 C   sH   dd }|ddd |ddd |dd	d |d
dd |ddd d S )Nc                 S   s^   t jdkrdnd}ddd}ttj| fi |||d ttj| gfi |d ||d d S )	Nr;   r  V瞯<Fr   rt  rS   r   )r  r  r   r    rv  rg   r  rT   rx  rD   rD   rE   r  ~	  s   
&zGTestFactorialFunctions.test_factorial_complex_reference.<locals>._checkr  gkﴑ[?r                ykﴑ[?               @       @yB}ۿ?gH.gK	!@y      -C6?yI{xQrD   r  rD   rD   rE    test_factorial_complex_reference}	  s   z7TestFactorialFunctions.test_factorial_complex_referencecontent)z[]z[1]z[1.1]z[NaN]z[NaN+i*NaN]z[NaN, 1]c                    s  |t u rtrtd |tju rtdd |D rtd |tjkr1tdd |D r1td ||d |dks@t|dkrB|n|d }tj	|||d	}d }|d
krw|rwtj
tdd tj|fi   W d    n1 sqw   Y  nt|jg dstj
tdd tj|fi   W d    n1 sw   Y  n]t|jdr|d
krtj
tdd tj|fi   W d    n1 sw   Y  n2|rt|jdstj
tdd tj|fi   W d    n1 sw   Y  n	tj|fi  }|d urH fdd| D }t|dkr|d n|}|jr7|d
ko(t|jd}	|	r/tjn|r4tntj}tj	|||d	}
t||
dd d S d S )Nz+object arrays unsupported in array API modec                 s   &    | ]}t |p|t|kV  qd S rX  r_   r   rr   r  r   rD   rD   rE   	<genexpr>	     $ zKTestFactorialFunctions.test_factorial_array_corner_cases.<locals>.<genexpr>impossible combinationc                 s       | ]
}t t|d V  qdS r  Nr7   re  r  rD   rD   rE   r  	      rt  r   rZ   r  r  r   Incompatible options:.*r  r  r  r  r  rv   r  c                       g | ]}t j|fi  qS rD   )r    rv  r  r  rD   rE   r  	      zLTestFactorialFunctions.test_factorial_array_corner_cases.<locals>.<listcomp>r   rS   )r  r4   r;  skipr_   r  anyr   lenr   r   r  r    rv  r7   r  rd   r   r  r}  ri  rC   r  r  r  rq  r  rg   r  r  Zcxr  rD   r  rE   !test_factorial_array_corner_cases	  sP   



 
z8TestFactorialFunctions.test_factorial_array_corner_casesr  )1z1.1z2+2jr  r  r  c                 C   s  ||d}|dkr.|r.t jtdd tj|fi | W d    d S 1 s'w   Y  d S tt|dddtd gs^t jtdd tj|fi | W d    d S 1 sWw   Y  d S tt|dr|dkrt jtd	d tj|fi | W d    d S 1 sw   Y  d S |d u st|r|dkott|d}|rt	d
nt
d}ttj|fi || d S |rtt|drt jtdd tj|fi | W d    d S 1 sw   Y  d S ttj|fi |t|d  d S )Nrt  r   r  r  rv   r  r  r  r  r  r   r  rZ   )r;  r   r  r    rv  r7   re  r_   r   r  r   ri  r   r  rC   rg   r  rq  rx  r  r  rD   rD   rE   "test_factorial_scalar_corner_cases	  s,   
""""&z9TestFactorialFunctions.test_factorial_scalar_corner_casesr  c                 C   r  )Nr;   +=r   Tr  FrS   )r  r  r   rt   r    rw  r   r  rD   rD   rE   test_factorial2_accuracy	  r  z/TestFactorialFunctions.test_factorial2_accuracyc                 C   s   t tjtt|ddd}t|tj|dd t|tj|gddd  t	j
dkr,dnd}t|}t|tj|d	d|d
 t|tj|gd	dd |d
 d	dd}|d dkryt|tj|fi ||d
 t|tj|gfi |d |d
 d S d S )Nr   r  rZ   Tr  r;   r  r   FrS   r   rt  rL   )	functoolsreduceoperatormulr  rs   r   r    rw  r  r  rt   r   r  rD   rD   rE   test_factorial2_int_reference	  s   
&z4TestFactorialFunctions.test_factorial2_int_referencec                 C   s   dd }|ddd |dt dtdtj  d |dt dtdtj  d |dd	d |d
dd |ddd |ddd |ddd d S )Nc                 S   sP   d}ddd}t tj| fi |||d t tj| gfi |d ||d d S )Nr  Fr   rt  rS   r   )r   r    rw  r  rD   rD   rE   r  
  s   
&zHTestFactorialFunctions.test_factorial2_complex_reference.<locals>._checkr   r  rJ   rL   rm   r  g^D]?JO?r  y^D]?JO?        y      @      @y&0!:?gSt$gtQ*@y       -C6?yqj?x*)r    rw  r  r   r   r  rD   rD   rE   !test_factorial2_complex_reference
  s   ""z8TestFactorialFunctions.test_factorial2_complex_referencec                    s(  |t jkrtdd |D rtd |t jkr&tdd |D r&td ||d |dks5t|dkr7|n|d }t j|||d}d }|d	krl|rltjt	d
d t
j|fi   W d    n1 sfw   Y  n_t|jg dstjt	dd t
j|fi   W d    n1 sw   Y  n6t|jddgr|d	krtjt	dd t
j|fi   W d    n1 sw   Y  n	t
j|fi  }|d ur fdd| D }t|dkr|d n|}|jr|d	kot|jd}	|	rt jn|rtnt j}t j|||d}
t||
dd d S d S )Nc                 s   r  rX  r  r  rD   rD   rE   r  $
  r  zLTestFactorialFunctions.test_factorial2_array_corner_cases.<locals>.<genexpr>r  c                 s   r  r  r  r  rD   rD   rE   r  &
  r  rt  r   rZ   r  r   r  r  r  r  r  r  r  c                    r  rD   )r    rw  r  r  rD   rE   r  =
  r  zMTestFactorialFunctions.test_factorial2_array_corner_cases.<locals>.<listcomp>r  rS   )r_   r  r  r;  r  r   r  r   r   r  r    rw  r7   r  rd   r   r  r}  ri  r  rD   r  rE   "test_factorial2_array_corner_cases
  sB   


 
z9TestFactorialFunctions.test_factorial2_array_corner_casesc                 C   s  ||d}|dkr.|r.t jtdd tj|fi | W d    d S 1 s'w   Y  d S tt|dddtd gs^t jtdd tj|fi | W d    d S 1 sWw   Y  d S tt|ddgr|dkrt jtd	d tj|fi | W d    d S 1 sw   Y  d S |d u st|r|dkott|d}|rt	d
nt
d}ttj|fi || d S | j|fddi|}ttj|fi ||dd d S )Nrt  r   r  r  rv   r  r  r  r  r  r   rh   rL   r   rS   )r;  r   r  r    rw  r7   re  r_   r   r  r   ri  rs  r  rD   rD   rE   #test_factorial2_scalar_corner_casesH
  s&   
""" z:TestFactorialFunctions.test_factorial2_scalar_corner_casesrh   r  rm   ic                 C   sp   t jdkrdnd}tttj||ddtj||dd|d ttj|g|ddttj|g|dd|d d S )Nr;   r  r  Trk  FrS   )r  r  r   rt   r    rm  r   )rC   rg   rh   rT   rD   rD   rE   test_factorialk_accuracy`
  s   
z/TestFactorialFunctions.test_factorialk_accuracyr  c                 C   s  t tjtt|d| d}t|tj||dd t|tj|g|ddd  t	j
dkr/dnd}t|}t|tj||dd|d	 t|tj|g|ddd |d	 |dd
d}|| dkrd}t|tj|fi ||d	 t|tj|gfi |d |d	 d S d S )Nr   rZ   Tr  r;   gt =r  FrS   r   r  r  )r  r  r  r  r  rs   r   r    rm  r  r  rt   r   )rC   rg   rh   rQ  rT   rx  rD   rD   rE   test_factorialk_int_referenceo
  s    &z4TestFactorialFunctions.test_factorialk_int_referencec                 C   s   dd }|ddt jddddd |ddd	d |d
ddd |dddd |dddd |dddd |dddd |dddd |dddd |dddd |dddd |dddd |dddd |d dd!d |d"dd#d d S )$Nc                 S   sR   d}|ddd}t tj| fi |||d t tj| gfi |d ||d d S )Nr  Fr   r  rS   r   )r   r    rm  )rg   rh   r   rT   rx  rD   rD   rE   r  
  s   &zHTestFactorialFunctions.test_factorialk_complex_reference.<locals>._checkrJ   r   Trk  )rg   rh   r   r   gD!)@g      @gNq53@r  gG`@r  g     @y             @y            @y      @      @yRsU#[@y      @      y?M,a?y@/n?'?r  gyL_ǚZ?r  yyL_ǚZ?        g333333@gffffffyNV?*V7?g333333y)kh]bg):giߑT@y      -C6?y(5E?WTr    rm  r  rD   rD   rE   !test_factorialk_complex_reference
  s    z8TestFactorialFunctions.test_factorialk_complex_referencec                    s*  |t jkrtdd |D rtd |t jkr&tdd |D r&td d||d |dks6t|dkr8|n|d }t j|||d	}d }|d
krm|rmtjt	dd t
j|fi   W d    n1 sgw   Y  n_t|jg dstjt	dd t
j|fi   W d    n1 sw   Y  n6t|jddgr|d
krtjt	dd t
j|fi   W d    n1 sw   Y  n	t
j|fi  }|d ur fdd| D }t|dkr|d n|}|jr|d
kot|jd}	|	rt jn|rtnt j}t j|||d	}
t||
dd d S d S )Nc                 s   r  rX  r  r  rD   rD   rE   r  
  r  zLTestFactorialFunctions.test_factorialk_array_corner_cases.<locals>.<genexpr>r  c                 s   r  r  r  r  rD   rD   rE   r  
  r  r   r  r   rZ   r  r   r  r  r  r  r  r  r  c                    r  rD   r  r  r  rD   rE   r  
  r  zMTestFactorialFunctions.test_factorialk_array_corner_cases.<locals>.<listcomp>r  rS   )r_   r  r  r;  r  r   r  r   r   r  r    rm  r7   r  rd   r   r  r}  ri  r  rD   r  rE   "test_factorialk_array_corner_cases
  sB   

 
z9TestFactorialFunctions.test_factorialk_array_corner_casesc                 C   s  |||d}|dkr/|r/t jtdd tj|fi | W d    d S 1 s(w   Y  d S tt|dddtd gs_t jtdd tj|fi | W d    d S 1 sXw   Y  d S tt|ddgr|dkrt jtd	d tj|fi | W d    d S 1 sw   Y  d S |d u st|r|dkott|d}|rt	d
nt
d}ttj|fi || d S | j|fi |}ttj|fi ||dd d S )Nr  r   r  r  rv   r  r  r  r  r  r   r   rS   )r;  r   r  r    rm  r7   re  r_   r   r  r   ri  rs  )rC   rg   rh   r  rq  rx  r  r  rD   rD   rE   #test_factorialk_scalar_corner_cases
  s&   """ z:TestFactorialFunctions.test_factorialk_scalar_corner_casesrO   r   r   c                 C   s   |rdgnd}|||d}|dkrCd}t t|dr |dk r d}tjt|d tj|fi | W d    d S 1 s<w   Y  d S |dkrjtjtd	d tj|fi | W d    d S 1 scw   Y  d S tj|fi | d S )
NrZ   r  rl  r  rv   zFor `extend='zero'`.*r  r   zParameter k cannot be zero!)r7   re  r;  r   r  r    rm  )rC   rh   r  rq  r  rg   rx  r  rD   rD   rE    test_factorialk_raises_k_complex
  s   ""z7TestFactorialFunctions.test_factorialk_raises_k_complexr  c                 C   s`   |rdgnd}|||d}t jtdd tj|fi | W d    d S 1 s)w   Y  d S )NrZ   r  r  r  )r;  r   r  r    rm  )rC   rh   r  rq  r  rg   rx  rD   rD   rE   test_factorialk_raises_k_other  s
   "z5TestFactorialFunctions.test_factorialk_raises_k_otherr  c                 C   sD  |||d}|r|t  v rtt| g}ttj|fi |jt	 ttj|d fi |jtj
 tj|d fi |ttjjksGJ tt | g}ttj|fi |jtj
 ttj|d fi |jt tj|d fi |ttj
jksJ d S tt |dg}|rtntj}ttj|fi |j| d S )Nr  rZ   )r5   keysr_   r   r6   r   r    rm  r  r0   r  r  int32r  r  getr   )rC   rh   r  rq  rx  rg   r  rD   rD   rE   test_factorialk_dtype  s    (,z,TestFactorialFunctions.test_factorialk_dtypec                 C   s   t t jdddt jg}t t jdddt jg}ttj|dd| tjtdd tj|d	d W d    d S 1 s<w   Y  d S )
NrZ   rL   r   rP   Fr  r  r  T)	r_   r   r   r   r    rv  r;  r   r  rC   r   r  rD   rD   rE   test_factorial_mixed_nan_inputs)  s   "z6TestFactorialFunctions.test_factorial_mixed_nan_inputs)<r8  r9  r:  rs  r;  r<  r  ry  r{  r~  r  r  r_   r   r   r  r   Z
datetime64r    rv  rw  rm  r  r  rs   r  rr   Zint8Zint16r  r  Zuint8Zuint16Zuint32Zuint64r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD   rD   rD   rE   rj  a  s*   	



"&!



*+$

*&$*&$rj  c                   @   sb   e Zd Zejddddddddd	d
ejddfej ddfgdd Zdd Z	dd Z
dd ZdS )TestFresnelzz, s, c)r   gN?ց[?)y      ?        r  r  )y       ?yn<ӿj<Cy)BR;߿ux7Q?)y      yھ|}-2?y/?!ۿ)r  GM?pBR?)y      @        r  r  )y              @y       GMܿy        pBR?)y              gGMܿgpBR߿)y             y        GM?y       pBR߿r   r  c                 C   s&   t t|}t|t ||gd d S )Nr  )r   r    r  r   )rC   r
  r  r  frsrD   rD   rE   test_fresnel_values2  s    zTestFresnel.test_fresnel_valuesc                 C   sn   t d\}}t|tg dd t|tg dd t |d }t |d }t|dd t|dd d S )Nr   )y @X9v?y^I@48E?y=
ףp@+?y@eX?yO@Ǻ?r   )y.1?ǘ?yʡE6@:#J{/?yq-
@y&1?yh o@߾3?yW2q@qh?r   rZ   r  )r    fresnel_zerosr   r   r  )rC   szoczoZvals1Zvals2rD   rD   rE   test_fresnel_zerosW  s   

zTestFresnel.test_fresnel_zerosc                 C   s(   t d\}}t d}t||d d S )NrP   r  )r    r  Zfresnelc_zerosr   )rC   r  r  ZfrcrD   rD   rE   test_fresnelc_zerosj     
zTestFresnel.test_fresnelc_zerosc                 C   s(   t d\}}t d}t||d d S )Nr   r  )r    r  Zfresnels_zerosr   )rC   r  r  r  rD   rD   rE   test_fresnels_zeroso  r  zTestFresnel.test_fresnels_zerosN)r8  r9  r:  r;  r<  r  r_   r   r  r  r  r  rD   rD   rD   rE   r  1  s$    

r  c                   @   s   e Zd Zdd Zdd Zdd Zedd Zed	d
 Zdd Z	dd Z
ejdej ejgejejgfddgej ejgfeddedejfedddedejfdgejgfgdd ZdS )	TestGammac                 C   r  r  )r    r  r   )rC   ZgamrD   rD   rE   r   v  r  zTestGamma.test_gammac                 C   s(   t d}tt d}t||d d S )Nr   r  )r    r#  r   r  r   )rC   ZgamlnZlngamrD   rD   rE   r$  z     
zTestGamma.test_gammalnc                 C   s(   t dd}t dd}t||d d S )Nr   r  )r    r!  gammaincinvr   )rC   ZgccinvZgcinvrD   rD   rE   r"       zTestGamma.test_gammainccinvc                 C   sv   t dd}t d|}t|dd t dd}t dd}td|dd t|ddd t dd}td	|dd d S )
NrM   rZ   r  g?g`	\;r   r  gmb<g      &@)r    r  gammaincr   rC   r	  r   rD   rD   rE   test_gammaincinv  s   zTestGamma.test_gammaincinvc                 C   sR   dt dddt dddg}|D ]}td|}td|}t||dd qd S )	Nr  r   gCs?rZ   g^F    ?rM   r|   rS   )r_   r  r    r  r  r   )rC   ZptsZxpr	  r   rD   rD   rE   test_975  s   zTestGamma.test_975c                 C   s(   t d}dt d }t||d d S )Nr  rZ   )r    r  r  r   )rC   ZrgamZrlgamrD   rD   rE   r    r  zTestGamma.test_rgammac                 C   r   )NrO   r   )r   r    r  rB   rD   rD   rE   test_infinity  r   zTestGamma.test_infinityz
x,expectedr'  r   ir       i c   r  gP²Zdbc                 C   s   t t|| d S rX  )r   r    r  r  rD   rD   rE   
test_poles  s   zTestGamma.test_polesN)r8  r9  r:  r   r$  r"  r8   r  r  r  r  r;  r<  r  r_   r   r   rs   fullr  rD   rD   rD   rE   r  u  s(    

r  c                   @   r  )
TestHankelc                 C   "   t tddtdd d d S Nrz  rL   r   r  )r   r    r6  rB   rD   rD   rE   
test_negv1     "zTestHankel.test_negv1c                 C   8   t dd}t ddt ddd  }t||d d S NrZ   r  r  r  )r    r6  rb  r.  r   )rC   Zhank1ZhankrlrD   rD   rE   r7       zTestHankel.test_hankel1c                 C   r	  r
  )r   r    r8  rB   rD   rD   rE   test_negv1e  r  zTestHankel.test_negv1ec                 C   0   t dd}t ddtd }t||d d S )NrZ   r  y       r  )r    r8  r6  r   r   )rC   Zhank1eZhankrlerD   rD   rE   r9    r  zTestHankel.test_hankel1ec                 C   r	  r
  )r   r    r:  rB   rD   rD   rE   
test_negv2  r  zTestHankel.test_negv2c                 C   8   t dd}t ddt ddd  }t||d d S r  )r    r:  rb  r.  r   )rC   Zhank2Zhankrl2rD   rD   rE   r;    r  zTestHankel.test_hankel2c                 C   r	  r
  )r   r    r<  rB   rD   rD   rE   
test_neg2e  r  zTestHankel.test_neg2ec                 C   s(   t dd}t dd}t||d d S )NrZ   r  r  )r    r<  r   )rC   Zhank2eZhankrl2erD   rD   rE   test_hankl2e  r  zTestHankel.test_hankl2ec                 C   s0   t dd}t|jsJ t|jsJ d S r?   )r    r:  r_   r   r   isposinfr  rC   r  rD   rD   rE   test_hankel2_gh4517  s   zTestHankel.test_hankel2_gh4517N)r8  r9  r:  r  r7  r  r9  r  r;  r  r  r  rD   rD   rD   rE   r    s    r  c                   @   s\   e Z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S )	TestHyperc                 C   r  r  )r    Zh1vpjvpyvpr   )rC   Zh1Zh1realrD   rD   rE   	test_h1vp  r  zTestHyper.test_h1vpc                 C   r  r  )r    Zh2vpr  r  r   )rC   Zh2Zh2realrD   rD   rE   	test_h2vp  r  zTestHyper.test_h2vpc                 C   s  t tddddd t tddddd td	g d
}tg d}t ||dd td	tg d
d }t ||tdd g d}g d}t||}g d}t ||dd tt|gd |}t |t|gd dd tt	tjt|gd ddg d S )Nr  r   Qvo?r|   rS   r   r   r   r   )g      rO   r   rZ   r  )g̷?g3|t-Ք?r   go?g{h?r   r   r  r  )r   rZ   r   )r   gc?r  rL   r   rZ   )
r   r    hyp0f1r_   r   r   r   vstackassert_raisesr  )rC   r   r  r  Zx2rD   rD   rE   test_hyp0f1  s"   zTestHyper.test_hyp0f1c                 C   s   t dd}t|d d S )N皙?y      ?      ?y;EG?uM?)r    r   r   r  rD   rD   rE   test_hyp0f1_gh5764  s   zTestHyper.test_hyp0f1_gh5764c                 C   s  t ddd}t|dd tg g dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dh}|D ]\}}}}t |||}tt|| | dik  qd S )jNr  r  g?rN   )g{*= g˱a)g5=gvX@)g)AI@gDAhg$Pj)g~٭@)g,qUp,g@=&?gX 3@gZ@)g\@g88*@g\ֳ!=@g   ƞA)gAZ;gOFA'gxŝO<g_Dc D)g^g@g V*E7g4)3@g7-XtD)gΧU(@g2Tj8g$@g  LhB)ge;@gJgogr@g `屫B)g5'.@gqZ=g7߈Y.g8w)gB,@g"^#@grT[	R3@g  B)gYgN],*@g*!j,g1@)g#r @gq{874*gWs%o.@gMdD)g8|.2@g*!,g?I(#@gJ
r .)gu8g#=)@g*'1g)ψvA)g%0N:@gUx1@gx@gr),c@)g:M8@gGb+=@g3ҜV/@gX9ҙim@)g"dxz@gqKgv7##@g  >B)g kx-gD8L+8@g܈2g72LU@)gtd@Q4h6@g%@}gr3b @gu߯ѡ)g򋷺?g"p$`E2@gY|T3g\D?)gV-(+@g$[3@g;/@gEQwв@)g[fgLL4gQV@g0#.@)g;@g/?jvgx.<N&@g^I)g+9gX[?gbZSH%@g5/)@)g}RgŢ	@g},*@g6@g1w-@)gRA(g_@g5A} :=g   FA)gQz5@gq.#gTq&gc ?)gφ%#gZV@
g%@0@g   Syd)gB۽ܟ%@g*>8gV@'g	ʦ)g/H:gn@S g)bǙ9@g  9)gT쁹3!gD gkLFr%@g3333`4A)g:k
g\=)'gi,k9gbx?)giXwg-CwU5@g'jin9gX5@)gb@gTy4#/@g]pH=gIw?)g63@g2XxM:@g~?^0gW1?)g37g R{@gicx.4?gmm?)gv܏%7@g9Ma%=g}ygGr##@)gG8-xы.@gǂ@ghb(@g  A)gw1@gq2@gO],@g0ɷ-X@)g2@g́y#<@gͣx?g]?)g];˄f$@g1}0g_9g8ڃ@)g:!ω1g)q(@gg2gv%)A)gYN:+gn	Ȱ-?g>gZd|I.A)gr/K@g\}L9@g*gΙ?)gQq5V@g?)@g'@0@glۭ`@)gVn:gRQ0gT&g QC)gR4 8gi+gK @g{G)gtiq+g(O?3g	1=@g  8cB)g|>oϘg\!<@g"?4V?g%c\q?)g gpfP!gAO:@g,\)g=R8@g%;gz3@g~0G)g.CVl@ge< .@g9@gkq1A)g=~$gpR7@g 77g,ǆ@)g^g{)gRA2@g  dL)gf=4,R@gyO-g#ޕ~8@g)g|ݩ%P4g:<9@gKzs4g$(~O4@)g2y3@g1$6g&TpxA6gG!JA)gf^XH
^;@g7r:@g`,/@gi{dA)gihx@g!B8(@g7j*@gh@)glmF<gpO4@g`2"@g-)gnV3!2@g.mq1g!Z{.@grOE)gs`m@gzAUguC=V#@g  \)gPL-(@g,9$"9g6u7@geRF)gw8gv=5@gjRW+g(\-@)gyg~=@g4MVgwz:@)g^0g+7%g-@j81g5ׂ,j)gj4gz0g-</;gݽ]
D)gN43@g}W6@gLUS!9gɍF>)g Q4@g=}gȮ5@g]nhgF)gV9g9gf9,#gF|}fv?)g=^ee;@gy}2g'T> g#o@)g+5g;gN8Cg8@g   bkA)gSx+26@g@gI0gSMC)gT*0@g`<6gWy5@gǟRj)gӰk
g/:?gJLHR"@gxu-)gKu@g6gt8_x7@gd;=')g+:;@gBͤ10@g";gK$?)gp @g dg	=@g=6` F)gTbR.g9:g3@gUfgRbKZ@)g!g%P73;g]?gr	y?)g)Yv2gȹq@g/3g   A)g?j/|g7:@g#~oݽ?g8pE?)gPj/gS"X)gYgt0N?)ggo&	xT7@g-hT@#@g.;%r?)g'_@gɖ@7g:Kڞ$@g [B)gk5ں9gѼ:gk%tp;@g  .<^)gf:OI&gO/g#01|2gf`Y)gqv~@guFd9@gz+S7gF1/$?)gx3g~[6:g;s9@gKw*1@)gP@gv;K,gҬd&<@g!s)gֈ`|.gOwx=@g+MK<gUU@)gکI@g©jG1g4g؃66@g(4ν4E)gS>?gD-lgSL,c<gԉE4?)gd?A g3$)glx^?gs>|T?)g(%@g:ĉ$@g~^gv2gJHF&?)g}r":@g3\z;@go)@g+hA)g@')"gVv/@guQU-gfy2yt@)gM6y%$g/;R#@g):@gw%",6Կ)g%x'g$6g5gu$9?)glkC9g<tF8gp?g ?r  )r    r?  r   r   r   r@  )rC   hyp1Zref_datarA  rB  r  r  r  rD   rD   rE   r@    s  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdgzTestHyper.test_hyp1f1c                 C   s,   t ddd}t ddd}t||d d S )Nr   r  g7B.g|:B.r  r    r?  r   )rC   r&  Zhyp2rD   rD   rE   test_hyp1f1_gh2957  s   zTestHyper.test_hyp1f1_gh2957c                 C   s   t ddd}t|dd d S )Nr   r  ig<`?r  r'  )rC   ZhyprD   rD   rE   test_hyp1f1_gh2282  s   zTestHyper.test_hyp1f1_gh2282c           	      C   s  dddddt d gdddddtd	 gddd
d	dt d gg ddddtd	d
 tdgddddtdtd td td gdd
d
ddtt td
 td td gdd
dddtt td td td gdddddtd td td td gg dg d g d!g d"g d#d$d%g}t|D ]\}\}}}}}t	||||}t
||dd&| d' qd S )(Nr   rZ   r  |Gz?r  g?g|Gzr   r   rL   r#  r$  )r   r  r  r*  gYi2?rz  r   g433333?rJ   r  r   rO   r  r   g      ?r         @g      gUUUUUUտg  @gUUUUUU?g)r  r  r         $gEciH!@)r  r   rZ   r  gzG?)rL   rz  rZ   r  gy&1|)r>  r   rZ   r  g"nN%@?)rL   r|  rZ   r  g!J)r  |      %@r?  gzS;)r  r-  g      %r?  g[B.VP<test #%derr_msg)r   r   r   r	   r    r  r   r   r  rB  r   )	rC   r   rv   rA  rB  r  r   r  cvrD   rD   rE   rC    sZ   zTestHyper.test_hyp2f1c                 C   s   t ddd}t|dd g dg d}}t|t|}}d}t |||}ttt|  t |||t d| | t |  |d|  t d| | d	| | t |t d	|     }t||d
 d S )NrZ   r  r  g D?rN   )r  r  333333?g)r  g	@r2  g	r   rL   r  )	r    hyperur   r   r   r   r?  r  r   )rC   Zval1rA  rB  r
  ZhypuZhprlrD   rD   rE   test_hyperu  s   $zTestHyper.test_hyperuc                 C   s   t tddddd d S )NrZ   r  g3333334@g(¨?r  )r   r    r4  rB   rD   rD   rE   test_hyperu_gh2287  s   zTestHyper.test_hyperu_gh2287N)r8  r9  r:  r  r  r#  r%  r@  r(  r)  rC  r5  r6  rD   rD   rD   rE   r    s    t$r  c                   @   s  e Z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d1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3ddfdgZ4e5j6j7e89 dhkdidjdkdl Z:e5j6j7e89 dhkdidjdmdn Z;dodp Z<dqdr Z=e5j6j>dsdt Z?dudv Z@dwdx ZAdydz ZBd{d| ZCd}d~ ZDdd ZEdd ZFdddZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdeS )
TestBesselc                 C   &   t td}t|t ddgd d S )Nr   gbɃ?gΝJ ֿr  )r   r    rT  r   )rC   Zit0rD   rD   rE   rU       
zTestBessel.test_itj0y0c                 C   r8  )Nr   gbqTtt?g/]ooۿr  )r   r    rN  r   )rC   Zit2rD   rD   rE   rO    r9  zTestBessel.test_it2j0y0c                 C      t tddtdd d S Nr   rL   rz  )r   r    rX  rB   rD   rD   rE   test_negv_iv     zTestBessel.test_negv_ivc                 C   &   t d}t dd}t||d d S Nr  r   r  )r    r\  r`  r   rC   ZozZozrrD   rD   rE   r]    r  zTestBessel.test_j0c                 C   r>  Nr  rZ   r  )r    r^  r`  r   rC   Zo1Zo1rrD   rD   rE   r_    r  zTestBessel.test_j1c                 C      t dd}t|dd d S )NrZ   r   ;x?r  )r    r`  r   )rC   ZjnnrrD   rD   rE   ra       zTestBessel.test_jnc                 C   r	  r
  )r   r    rb  rB   rD   rD   rE   test_negv_jv  r  zTestBessel.test_negv_jvc                 C   s^   g dg dg dg dg dg}t |D ]\}\}}}t||}t||dd| d qd S )	N)r   r  g
Ye?)UUUUUU?:0yE>g˿+>)rG  r\   g)%->)g@r\   g5c)!9)rG  r   g%,Ϳr  r/  r0  )r  r    rb  r   )rC   r   rv   r  r   r	  ZycrD   rD   rE   rc    s   zTestBessel.test_jvc                 C   r	  r
  )r   r    rd  rB   rD   rD   rE   test_negv_jve  r  zTestBessel.test_negv_jvec                 C   sT   t dd}t|dd t dd}d}t d|tt|j  }t||d d S )NrZ   r   rD  r  ?      ?)r    rd  r   rb  r   r@  r  )rC   ZjvexpZjvexp1r
  ZjvexprrD   rD   rE   re    s   zTestBessel.test_jvec                 C   s   t dd}t dd}t|tg dd t|tg dd t dd}t|tg dd	d
 t dd}t|tg dd	d
 d S )Nr   r   rZ   )go@.=@gzj,[@glN!@g5/ D'@gh>-@rJ   gW@g0@gQX$@g*@g8*5{x0@rY   )gEk[@g~Cju]@gYrʝ^@g, `@gf	`@rR   rS   -  )gts@g&ǭr3t@gWt@g,$Y&u@gu@)r    jn_zerosr   r   r   )rC   jn0Zjn1Zjn102Zjn301rD   rD   rE   test_jn_zeros  s    
zTestBessel.test_jn_zerosc                 C   s   t dd}t|d ddd t|d ddd t|d	 d
dd t dd}t|d ddd t|d ddd t|d	 ddd t dd}t|tg ddd d S )Nr   rl   i  g;@rR   rS   i  g8v@i+  gׂMm@r  gxi@g	,@gи{>@i  r   )gUDX@g!@g*HS@gz5 @g@2;@rH  )r    rM  r   r   )rC   rN  Zjn10Zjn3010rD   rD   rE   test_jn_zeros_slow  s   
zTestBessel.test_jn_zeros_slowc           
         s   t j  fdd}tddD ]:}t |\}}}}t|||D ](\}}}	|	dkr3t ||ddd q|	dkrBt|||ddd qtd| qd S )	Nc                    s     | d | | d | d S )NrZ   rL   rD   )rg   r   r`  rD   rE   jnp,  rd  z(TestBessel.test_jnjnp_zeros.<locals>.jnprZ   rV   r   r  r  zInvalid t return for nt=%d)r    r`  rs   Zjnjnp_zerosrh  r   AssertionError)
rC   rR  ntr
  rg   r  tzznnttrD   rQ  rE   test_jnjnp_zeros)  s   zTestBessel.test_jnjnp_zerosc                 C   sF   t dd}t|tg dd t dd}tt d|ddd d S )	NrZ   r   g(yu?gOXeS@ga!@gxi'@g'Nw(-@rJ     r   r   r  )r    Z	jnp_zerosr   r   r   r  )rC   rR  rD   rD   rE   test_jnp_zeros8  s   zTestBessel.test_jnp_zerosc                 C   sD   t dd}t|tg dtg dtg dtg dfd d S )NrZ   r   rK  rZ  )"@g+@g-9(1!@gȘ'@g>tA}-@)g0v@gjt@gH.?$@g}"O*@gGŧp0@)r    Z
jnyn_zerosr   r   )rC   ZjnzrD   rD   rE   test_jnyn_zerosB  s   


zTestBessel.test_jnyn_zerosc                 C   s8   t dd}t ddt dd d }t||d d S )NrL   rZ   r   r  )r    r  rb  r   )rC   ZjvprimZjv0rD   rD   rE   test_jvpY  r  zTestBessel.test_jvpc                 C   r>  r?  )r    rg  r  r   )rC   ZozkZozkrrD   rD   rE   rh  ^  r  zTestBessel.test_k0c                 C   r>  r?  )r    ri  r  r   )rC   ZozkeZozkerrD   rD   rE   rj  c  r  zTestBessel.test_k0ec                 C   r>  rA  )r    rk  r  r   )rC   Zo1kZo1krrD   rD   rE   rl  h  r  zTestBessel.test_k1c                 C   r>  rA  )r    rm  r  r   )rC   Zo1keZo1kerrD   rD   rE   rn  m  r  zTestBessel.test_k1ec           
      C   s  dt j  d }dt j  d }td||}td||}td||}td||}t|jdgd t|jt|| d || gd d || d || d  d|| d  |d  d|d  |d  g}|d |d d|d   |d |d  |d  g}t|jt|d	 d || d || d  || d
  d
|| d  || d  |d  d|| d  |d  |d  d|d  |d  |d  g}|d |d d|d   |d d|d   d|d   |d |d  |d  |d  g}	t|jt|	d d d S )Nr   rZ   r   rL   r   r  r   rJ   r   rP   r  r  g      H@)r_   re   r    Zjacobir   r  r   )
rC   rA  rB  ZP0ZP1ZP2ZP3cpZp2cZp3crD   rD   rE   test_jacobir  s    &B2D8XzTestBessel.test_jacobic                 C   rC  )Nr   r   _2?r  )r    ry  r   )rC   Zkn1rD   rD   rE   rz    rE  zTestBessel.test_knc                 C   r:  Nr   r^  r  r   r    r  rB   rD   rD   rE   test_negv_kv  r=  zTestBessel.test_negv_kvc                 C   rC  )Nr   r   rb  r  r    r  r   )rC   Zkv0rD   rD   rE   test_kv0  rE  zTestBessel.test_kv0c                 C   rC  )NrZ   r   gKދ@r  rf  )rC   kv1rD   rD   rE   test_kv1  rE  zTestBessel.test_kv1c                 C   rC  )NrL   r   g)lHH@r  rf  )rC   kv2rD   rD   rE   test_kv2  rE  zTestBessel.test_kv2c                 C   r   )Nr  rZ   g.Ք"H)r   r    ry  rB   rD   rD   rE   test_kn_largeorder  r   zTestBessel.test_kn_largeorderc                 C   s   t tddd d S )Nr   g =`XCrd  rB   rD   rD   rE   test_kv_largearg  r   zTestBessel.test_kv_largeargc                 C   r:  rc  )r   r    r  rB   rD   rD   rE   test_negv_kve  r=  zTestBessel.test_negv_kvec                 C   s`   t dd}t ddtd }t||d d}t d|}t d|t| }t||d d S )Nr   r   r  rJ  )r    r  r  r   r   )rC   Zkve1rh  r
  Zkve2rj  rD   rD   rE   r    s   zTestBessel.test_kvec                 C   s*   d}t td| tjd|ddd d S )Nr^  rZ   r   rg   r  )r   r    r  kvp)rC   r
  rD   rD   rE   test_kvp_v0n1  s   &zTestBessel.test_kvp_v0n1c                 C   sN   d}d}t |d | || t ||  }t j||dd}t||d d S )Nr   r^  rZ   ro  r  r    r  rp  r   rC   r  r
  Zxcr   rD   rD   rE   test_kvp_n1  s
   &zTestBessel.test_kvp_n1c                 C   sd   d}d}|d |d  | |d  t || t |d ||  }t j||dd}t||d d S )Nr   r^  rL   rZ   ro  r  rr  rs  rD   rD   rE   test_kvp_n2  s
   <zTestBessel.test_kvp_n2c                 C   r>  r?  )r    r)  r,  r   r@  rD   rD   rE   r*    r  zTestBessel.test_y0c                 C   r>  rA  )r    r  r,  r   rB  rD   rD   rE   r+    r  zTestBessel.test_y1c                 C   sp   t d\}}t jddd\}}t||f }t||f }ttt d|dd ttt d|| dd d S )NrL   rZ   r   r   r  )r    Zy0_zerosr   r   r@  r.  )rC   ZyoZypoZzoZzpor4  ZallvalrD   rD   rE   test_y0_zeros  s    zTestBessel.test_y0_zerosc                 C   s*   t d}t|tdgtdgfd d S )NrZ   r]  gѮBO?r   )r    Zy1_zerosr   r   )rC   r  rD   rD   rE   test_y1_zeros  s   
 zTestBessel.test_y1_zerosc                 C   s.   t jddd}t|tdgtdgfd d S )NrZ   rv  yL
F%u?!rh?y;OnгY?r   )r    Z	y1p_zerosr   r   )rC   Zy1prD   rD   rE   test_y1p_zeros  s   zTestBessel.test_y1p_zerosc                 C   sB   t dd}t|tddgd t dd}t|g ddd	 d S )
NrJ   rL   g3@g(A&"@r   r[  )g]E.+"|@gH(|@gff|}@g&b`~@gHO_~@r   rS   )r    Zyn_zerosr   r   r   )rC   ZanrD   rD   rE   test_yn_zeros  s   

zTestBessel.test_yn_zerosc                 C   sh   t dd}t|tddgd t dd}tt d|ddd	 t d
d}tt d
|ddd	 d S )Nr   rL   gQhվ@gzN@rP   +   r   r   r  r[  r   )r    	ynp_zerosr   r   r   r  rC   ZaorD   rD   rE   test_ynp_zeros  s   zTestBessel.test_ynp_zerosc                 C   s&   t dd}tt d|ddd d S )Nr[  r   r   r  r  )r    r|  r   r  r}  rD   rD   rE   test_ynp_zeros_large_order  s   z%TestBessel.test_ynp_zeros_large_orderc                 C   rC  NrZ   r   5,1
r  )r    r,  r   )rC   Zyn2nrD   rD   rE   r-    rE  zTestBessel.test_ync                 C   s    t dd}|tj ksJ d S )NrX   rZ   )r@   r,  r_   r   )rC   ZobservedrD   rD   rE   test_yn_gh_20405  s   zTestBessel.test_yn_gh_20405c                 C   r	  r
  )r   r    r.  rB   rD   rD   rE   test_negv_yv  r  zTestBessel.test_negv_yvc                 C   rC  r  )r    r.  r   )rC   Zyv2rD   rD   rE   r/    rE  zTestBessel.test_yvc                 C   r	  r
  )r   r    r0  rB   rD   rD   rE   test_negv_yve   r  zTestBessel.test_negv_yvec                 C   sH   t dd}t|dd t ddtd }t dd}t||d d S )NrZ   r   r  r  rJ  rO   )r    r0  r   r.  r   )rC   Zyve2Zyve2rZyve22rD   rD   rE   r1    s
   zTestBessel.test_yvec                 C   s8   t ddt dd d }t dd}t||d d S )NrZ   r   r   r   rL   r  )r    r.  r  r   )rC   ZyvprZyvp1rD   rD   rE   test_yvp
     zTestBessel.test_yvpc                 c   sF    g d}g d}t ||E dH  t dtdd dgE dH  dS )z>Yield points at which to compare Cephes implementation to AMOS)irv        4r,  r   r  r   r   {G(@r  rL  )ir  rO   r   r        i@g     y@g     Ă@g@  i'  Nr   ir  r  )	itertoolsproductr   )rC   r  r
  rD   rD   rE   _cephes_vs_amos_points  s
   "z!TestBessel._cephes_vs_amos_pointsdy=r   Nc                 C   s   |   D ]a\}}|d ur|||rq||||||d |t||}}	}
t|r9tt|	dk||f qt|rIt|	jdk||f qt||	||f||d |t|kret|
|	||f||d qd S )Nr   u <7~r   )r1  rT   r^   )	r  rr   r_   r}  r   r@  r   r  r   )rC   r	  f2rT   r^   r  r  r
  c1c2c3rD   rD   rE   check_cephes_vs_amos  s   *

zTestBessel.check_cephes_vs_amosppc64lezfails on ppc64ler  c                 C      | j tjtjddd d S )Nr\   u5% r  )r  r    rb  r`  rB   rD   rD   rE   test_jv_cephes_vs_amos*     z!TestBessel.test_jv_cephes_vs_amosc                 C   r  )Nr  r  r  r  r    r.  r,  rB   rD   rD   rE   test_yv_cephes_vs_amos/  r  z!TestBessel.test_yv_cephes_vs_amosc                 C   s$   dd }| j tjtjdd|d d S )Nc                 S   s   t | dkS )Nr  )r@  )r  r
  rD   rD   rE   skipper5  s   zDTestBessel.test_yv_cephes_vs_amos_only_small_orders.<locals>.skipperr  r  )rT   r^   r  r  )rC   r  rD   rD   rE   (test_yv_cephes_vs_amos_only_small_orders4  s   
z3TestBessel.test_yv_cephes_vs_amos_only_small_ordersc                 C   sH   t jdd | jtjtjddd W d    d S 1 sw   Y  d S )Nr2  r3  g:0y5>r  r  )r_   r  r  r    rX  rB   rD   rD   rE   test_iv_cephes_vs_amos:  s   "z!TestBessel.test_iv_cephes_vs_amosc           	   
   C   sz  d}t jd t jd|dt jjd|d  }t jd|dt jjd|d  }t jjd|dd	k}|| t j||< t jd
dG t	||}t	||d }t j
|t|dk< t j
|t|dk< d	|t|dk < d	|t|dk < t|| d }d	|t |< W d    n1 sw   Y  t |}t|| dk || || t	|| || t	|| || d f d S )Ni@B rZ   r   rO   rL   r   r   r  r   r2  r3  r   r  gYngH׊>)r_   re   rn   r5  r6  r   r  r  r    rX  r   r@  r   Zargmaxr   )	rC   Nr  r   Zimskr  r  Zdcrh   rD   rD   rE    test_iv_cephes_vs_amos_mass_test>  s*   ""

6z+TestBessel.test_iv_cephes_vs_amos_mass_testc                 C   s0   | j tjtjddd | j tjtjddd d S )Nr   r  r  )r  r    r  ry  rB   rD   rD   rE   test_kv_cephes_vs_amos^     z!TestBessel.test_kv_cephes_vs_amosc                 C   s:   t tddd t tddd t tddd d S )	Nr   rJ   gP?rL  r  g~Omʒ?gY8E@@gKSn)r   r    rb  rB   rD   rD   rE   test_ticket_623b  r   zTestBessel.test_ticket_623c                 C   s  t tddd t tddd t tddd t tddd t tddd t tddd	 t tddd
 t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd	 t tddd
 t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddtddtd  t tddtddtd  t t	ddtddtd  t t
ddtddtd  t tddtdddtdd   t tddtdddtdd   dS )zNegative-order BesselsrO   rZ   gl)ܿr  gPj?gk?g%E*2ig敋?gw--`?gÉB?gW?r  g޴?gz|?a?gpx%?y      ?        y      ?      ?yYD?`{1wy6x?B]#Ӯ?y ?b>?y.}9d?8kؿy      ?333333?r  y333333?      ?r  N)r   r    rb  r.  rX  r  rd  r   r0  rZ  r  r6  r:  rB   rD   rD   rE   test_ticket_853g  sP   """"

zTestBessel.test_ticket_853c                 C   sB  t ttdd t ttdd t ttdd t ttdd t ttdd t ttdd t ttdd t ttdd t tt	dd t tt	dd t tt
dd t tt
dd t ttddd  td t ttddd   td dS )zReal-valued Bessel domainsr   rO   rZ   r   rL   rJ   N)r   r   r    rb  rX  r.  r  rd  rZ  r0  r  rH   r4  r  rB   rD   rD   rE   test_ticket_854  s   &,zTestBessel.test_ticket_854c                 C   s0   t tddtjk t tddtjk d S )Nr  r   )r   r    r  r_   r   r  rB   rD   rD   rE   test_gh_7909  r  zTestBessel.test_gh_7909c                 C   s(   t tddd t tddd dS )zReal-valued Bessel I overflowrZ   i  g~rW   i`  g ?los~Nr   r    rX  rB   rD   rD   rE   test_ticket_503  s   zTestBessel.test_ticket_503c                 C   r   )Nr  rZ   r  r  rB   rD   rD   rE   test_iv_hyperg_poles  r   zTestBessel.test_iv_hyperg_poles   c                 C   s   t d|t}|d|  td|  t|d  t|| d  }t|t|< t|}t	|
 ttj | t	|d d  }| |fS )Nr   rL   r   rZ   rO   r  )r   r   r   r   r    r#  r   r   r   r@  r  r   r  sumrC   r  r
  rg   rh   rr  rR  rD   rD   rE   	iv_series  s   8*zTestBessel.iv_seriesc                 C   4   dD ]}|  d|\}}tt||||d qd S )Nr   r   r  r   r^   r1  )r  r   r    rD  rC   r
  valuerR  rD   rD   rE   test_i0_series     zTestBessel.test_i0_seriesc                 C   r  )Nr  rZ   r  )r  r   r    rH  r  rD   rD   rE   test_i1_series  r  zTestBessel.test_i1_seriesc                 C   sD   dD ]}dD ]}|  ||\}}tt||||||fd qqd S )N)r  r,  r   r   r   r  r  )r   r   r  y             @r  )r  r   r    rX  rC   r  r
  r  rR  rD   rD   rE   test_iv_series  s   zTestBessel.test_iv_seriesc              	   C   sv   ddgddgddgddgddgd	d
gddgddgg}t |D ]\}\}}t|t|  }t||dd| d qd S )Nr   r   r\   r  g0oO?r   g!?grb?r  gpH?r   gC~?r   ggo?r  r/  r0  )r  r    rD  r   r   rC   r   rv   r   r  r2  rD   rD   rE   rE    s   	zTestBessel.test_i0c                 C   r>  r?  )r    rF  rZ  r   )rC   ZoizeZoizerrD   rD   rE   rG    r  zTestBessel.test_i0ec                 C   sp   ddgddgddgddgdd	gd
dgddgg}t |D ]\}\}}t|t|  }t||dd| d qd S )Nr   r\   gj|=r  gȕ![1?r   g;͘?r   gRΜ?r   g|?r   g}f?r  r/  r0  )r  r    rH  r   r   r  rD   rD   rE   rI    s   zTestBessel.test_i1c                 C   r>  rA  )r    rJ  rZ  r   )rC   Zoi1eZoi1errD   rD   rE   rK    r  zTestBessel.test_i1ec                 C   s&   t td}t|t ddgd d S )Nr   gїJB?@g*u?)r   r    rR  r   )rC   Ziti0rD   rD   rE   rS    r9  zTestBessel.test_iti0k0c                 C   s"   t d}t|tddgd d S )Nr  gݳɄ|T?gVƥ
@rP   )r    rL  r   r   )rC   Zit2krD   rD   rE   rM    s   

zTestBessel.test_it2i0k0c                 C   s$   t ddtd }t|dd d S )Nr   r  皙gv M?r  )r    rX  r   r   )rC   iv1rD   rD   rE   rY    s   zTestBessel.test_ivc                 C   r:  r;  )r   r    rZ  rB   rD   rD   rE   test_negv_ive  r=  zTestBessel.test_negv_ivec                 C   r  )Nr   r  r  r  )r    rZ  rX  r   r   )rC   Zive1r  rD   rD   rE   r[  
  r  zTestBessel.test_ivec                 C   s    t tddtddd d S )NrZ   rL   r   r  )r   r    rX  ivprB   rD   rD   rE   	test_ivp0  rd  zTestBessel.test_ivp0c                 C   s8   t ddt dd d }t dd}t||d d S )Nr   rL   rZ   r  )r    rX  r  r   r   rD   rD   rE   test_ivp  r  zTestBessel.test_ivp)r  r   N)r  )Vr8  r9  r:  rU  rO  r<  r]  r_  ra  rF  rc  rI  re  rO  rP  rY  r\  r^  r_  rh  rj  rl  rn  ra  rz  re  rg  ri  rk  rl  rm  rn  r  rq  rt  ru  r*  r+  rw  rx  ry  rz  r~  r  r-  r  r  r/  r  r1  r  r  r  r;  r<  r=  r  machiner  r  r  r  Zslowr  r  r  r  r  r  r  r  r  r  r  r  rE  rG  rI  rK  rS  rM  rY  r  r[  r  r  rD   rD   rD   rE   r7    s    
	



2
r7  c                   @      e Zd Zdd Zdd ZdS )TestLaguerrec                 C   s   t d}t d}t d}t d}t d}t d}t|jdgd t|jddgd t|jtg d	d
 d t|jtg dd d t|jtg dd d t|jtg dd d d S )Nr   rZ   rL   r   rJ   r   r  rO   )rZ   r%  rL   r   )rO   r  irP   r  )rZ   iH   ir   r  )rO   r   i8iX  ir  r  )r    Zlaguerrer   r  r   )rC   lag0lag1lag2lag3Zlag4Zlag5rD   rD   rE   test_laguerre  s   





zTestLaguerre.test_laguerrec              	   C   s   dt j  d }td|}td|}td|}td|}t|jdg t|jd|d g t|jtdd|d  |d	 |d
  gd
  t|jtdd|d  d|d  |d  |d |d  |d  gd  d S )Nr   r  r   rZ   rL   r   rO   r  r   r   rz  r  )r_   re   r    rQ  r   r  r   r   )rC   rh   r  r  r  r  rD   rD   rE   test_genlaguerre'  s   $>zTestLaguerre.test_genlaguerreN)r8  r9  r:  r  r  rD   rD   rD   rE   r    s    r  c                   @   rO  )
TestLambdac              	   C   sx   t dd}tt dddt dd d gtt dddt dd d dt dd d  gf}t||d d S )NrZ   r  r   rL   r  r   r  )r    Zlmbdar   r`  r  rb  r   )rC   ZlamZlamrrD   rD   rE   
test_lmbda:  s
   "6zTestLambda.test_lmbdaN)r8  r9  r:  r  rD   rD   rD   rE   r  9  rU  r  c                   @   r  )	TestLog1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )Nr  r  r  r  r  r    r  r   r   )rC   Zl1pZl1prlrD   rD   rE   r  D     zTestLog1p.test_log1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )NrZ   r  r3  rL   r]  r^  r  r  )rC   Zl1pmZl1pmrlrD   rD   rE   test_log1pmoreI  r  zTestLog1p.test_log1pmoreN)r8  r9  r:  r  r  rD   rD   rD   rE   r  C  s    r  c                   @   r  )TestMathieuc                 C   rW  rX  rD   rB   rD   rD   rE   r  Q  rY  zTestMathieu.test_mathieu_ac                 C   r   )NrL   r   )r    r+   rB   rD   rD   rE   test_mathieu_even_coefT  r   z"TestMathieu.test_mathieu_even_coefc                 C   rW  rX  rD   rB   rD   rD   rE   test_mathieu_odd_coefX  s   z!TestMathieu.test_mathieu_odd_coefN)r8  r9  r:  r  r  r  rD   rD   rD   rE   r  O  s    r  c                   @   r  )TestFresnelIntegralc                 C   rW  rX  rD   rB   rD   rD   rE   r  _  rY  z$TestFresnelIntegral.test_modfresnelpc                 C   rW  rX  rD   rB   rD   rD   rE   r  b  rY  z$TestFresnelIntegral.test_modfresnelmN)r8  r9  r:  r  r  rD   rD   rD   rE   r  ]  s    r  c                   @   rO  )TestOblCvSeqc                 C   &   t ddd}t|tg dd d S )Nr   r   rZ   )g~T~Oֿgt_J?gm{@g@j'&@r   )r    Z
obl_cv_seqr   r   )rC   ZoblrD   rD   rE   test_obl_cv_seqg     zTestOblCvSeq.test_obl_cv_seqN)r8  r9  r:  r  rD   rD   rD   rE   r  f  rU  r  c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestParabolicCylinderc                 C   s0   t dd}t|tddgtddgfd d S )NrZ   r  gQ?gx$(~?gx$(~g(\?rJ   )r    pbdn_seqr   r   )rC   ZpbrD   rD   rE   test_pbdn_seqp  s   z#TestParabolicCylinder.test_pbdn_seqc                 C   s4   t dd dt ddd  t ddd   d S )NrZ   r   r  r   )r    r  rB   rD   rD   rE   r  w  s   (zTestParabolicCylinder.test_pbdvc                 C   s<   t dd}t dd}t|t|d t|d fd d S )NrZ   r  r   rJ   )r    r  Zpbdv_seqr   r   )rC   ZpbnZpbvrD   rD   rE   test_pbdv_seq{  s   $z#TestParabolicCylinder.test_pbdv_seqc                 C   s   t ddd}d|d  t t j tdd|   }tt|dd |ddd	 ttd
dd ddd ttddd ddd d S )Nr  r  r   rL   r   r   r   r  r  gGz$@gq=
ףp4@gHQ9r|   rS   g(\#gQ@gkS a>)r_   r  r   r   r    r  r   r  )rC   etar
  rD   rD   rE   test_pbdv_points  s
   *z&TestParabolicCylinder.test_pbdv_pointsc                 C      t dddd d d f }t dddd d d f }t||}ddt|  }t||| d t||| d  | d	 }t|d
 |ddd d S Nr%  rJ   r  r  r  r   r  r   r   rZ   r  r  )r_   r  r    r  r@  r   rC   r   r  r  r  ZdprD   rD   rE   test_pbdv_gradient     0z(TestParabolicCylinder.test_pbdv_gradientc                 C   r  r  )r_   r  r    r  r@  r   r  rD   rD   rE   test_pbvv_gradient  r  z(TestParabolicCylinder.test_pbvv_gradientc                 C   s<   t dd\}}t|tg d t|tg d d S )NrL   r   )g:4@g1{н?g7,%n?)gX@g=<'?gʠ?)r    Zpbvv_seqr   r_   r   )rC   Zres1Zres2rD   rD   rE   test_pbvv_seq  s   z#TestParabolicCylinder.test_pbvv_seqN)
r8  r9  r:  r  r  r  r  r  r  r  rD   rD   rD   rE   r  o  s    
		r  c                   @   rO  )TestPolygammac                 C   s   t dd}t dd}t|dd t|dd g d}tt d|t | g d	}g d
}g d}tt ||| t|gd }tt |t|gd | tt t|gd || d S )NrL   rZ   r   gX];r  gOV,@@)rL   r   g  8Br   r  r  )g2}jg.M?g}2;ο)r    Z	polygammar   r  r_   r!  )rC   Zpoly2Zpoly3r   rg   r  rD   rD   rE   test_polygamma  s"   zTestPolygamma.test_polygammaN)r8  r9  r:  r  rD   rD   rD   rE   r    s    r  c                   @   rO  )TestProCvSeqc                 C   r  )Nr   r   rZ   )g"~j?g6?Ң@g)u8F"@g2g)@r   )r    Z
pro_cv_seqr   r   )rC   ZprolrD   rD   rE   test_pro_cv_seq  r  zTestProCvSeq.test_pro_cv_seqN)r8  r9  r:  r  rD   rD   rD   rE   r    rU  r  c                   @   rO  )TestPsic                 C   r[  )NrZ   goxr  )r    r  r   )rC   ZpsrD   rD   rE   r    r\  zTestPsi.test_psiN)r8  r9  r:  r  rD   rD   rD   rE   r    rU  r  c                   @   r  )
TestRadianc                 C   s"   t ddd}t|td d d S )Nr
  r   r   r   r    r  r   r   )rC   ZradrD   rD   rE   r    s   zTestRadian.test_radianc                 C   s&   t ddd}t|td d d d S )Nr
  rZ   r  rL   gC?r   r  )rC   Zrad1rD   rD   rE   test_radianmore  s   zTestRadian.test_radianmoreN)r8  r9  r:  r  r  rD   rD   rD   rE   r    s    r  c                   @   r  )TestRiccatic                 C   |   d\}}t ||f}t|D ]"}t||}tj||dd}|| |d|f< || | |d|f< qt|t||d d S N)rL   r   T)Z
derivativer   rZ   r  )r_   emptyrs   r    Zspherical_jnr   Z
riccati_jn)rC   r  r   Srg   r  jprD   rD   rE   test_riccati_jn     zTestRiccati.test_riccati_jnc                 C   r  r  )r_   r  rs   r    Zspherical_ynr   Z
riccati_yn)rC   r  r   Crg   r	  ZyprD   rD   rE   test_riccati_yn  r  zTestRiccati.test_riccati_ynN)r8  r9  r:  r  r  rD   rD   rD   rE   r    s    
r  c                   @   r  )TestSoftplusc                 C   s   dd l }|jd}d}|jdd|d}|jdd|d}|jdd|d}|jd	d
|d}|||||g}g dg dg dg dg}	t|}
t|
|	dd d S )Nr   l   (sr   iir     r  g
ףp=@@r  )g%~B7gpNf7g8B8)gJR{?g6]=gXes>)g n@?@gWH;@glH.=@)g9lchPR@gS@gzsevB@r  rS   )numpyre   Zdefault_rnguniformstackr)   r   )rC   r_   rj   rg   rR  rS  a3Za4rA  r  r  rD   rD   rE   test_softplus  s   zTestSoftplus.test_softplusc                 C   sT   t dd }t d}| }|dk}t|||d t|| ||< t|| d S )Nr   rL   r   )outwhere)r_   r   Zonescopyr)   r   )rC   r   r   r  r  rD   rD   rE   test_softplus_with_kwargs  s   
z&TestSoftplus.test_softplus_with_kwargsN)r8  r9  r:  r  r  rD   rD   rD   rE   r    s    r  c                   @   rO  )	TestRoundc              	   C   s@   t tttdtdtdtdf}d}t|| d S )Ng333333$@g$@r.  g333333%@)r  r  r  r  )r  maprr   r    r  r   )rC   ZrndZrndrlrD   rD   rE   r    s   
zTestRound.test_roundN)r8  r9  r:  r  rD   rD   rD   rE   r    rU  r  c                  C   s  t j} tj}tj}tj}tj}tj}t }|j	t
d t| ddddd||  t| ddd|d d|d	d
|   ||d d
   t| ddd|d d|d	d
|    t| dd||d d|dd
|   |dd
| d   ||d
 d
   t| dd|d |d d|dd
|   |dd
| d d   ||d d
  d||d d
  d   t| dd|d |d d|dd
|   |dd| d d   ||d d   W d    d S 1 sw   Y  d S )Ncategoryr   r   r  rL   r   rJ   r  r  r   rx   r  r   r   r  r   g      @rZ   r   r  g      ?g     A@)r    sph_harmr_   r   r   r   r   r	   r   r  DeprecationWarningr   )shr   r   r   r   r	   r  rD   rD   rE   test_sph_harm)  sV   
"r  c                  C   s   t t j} t _}|jtd ttddddj|  ttdgdddj|  ttddgddj|  ttdddgdj|  ttddddgj|  ttdgdgdgdgj|  W d    d S 1 skw   Y  d S )Nr  r   )	r_   r  r  r   r  r	  r   r    r  )dtr  rD   rD   rE   "test_sph_harm_ufunc_loop_selectionH  s   ""r  c                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )
TestStruver  c                 C   sp   t d|}d| d| d| | d   t|d  t|| d  }t| ttj | }| |fS )z?Compute Struve function & error estimate from its power series.r   rO   r   rL   rZ   r  )	r   r    r  r@  r  r   r   r  r  r  rD   rD   rE   _seriesV  s   
@zTestStruve._seriesc                 C   sH   dD ]}dD ]}|  ||\}}tt|||d|d||ff qqdS )z-Check Struve function versus its power series)
ir  (\r  rO   r   rZ   r   r     )rZ   r  r   r3  rV   r   r  N)r  r   r    r$  r  rD   rD   rE   test_vs_series]  s   "zTestStruve.test_vs_seriesc                 C   s   t tddddd t tddddd t td	d
ddd t tddddd ttddtdd  ttddtdd  ttddtdd
  ttddtdd
  tttdd tttdd d S )Nr  r3  g;cv=?r  rS   gQ g< j?rH  r  r  g?r|   g       igzz?r  i)   r  r  r  gffffffrO   g333333$)r   r    r$  r   r   r   rB   rD   rD   rE   test_some_valuesd  s   zTestStruve.test_some_valuesc                 C   sR   t tddtdd t tddtdd t tddtdd dS )zRegression test for #679r   g3@g*   4@r  g333333N)r   r    r$  rB   rD   rD   rE   test_regression_679q  s   


zTestStruve.test_regression_679N)r  )r8  r9  r:  r  r  r  r  rD   rD   rD   rE   r  U  s
    
r  c                   C   r   )Nr  r   gdX	
?)r   r    r   rD   rD   rD   rE   test_chi2_smalldf{  r   r  c                   C   s   t tdtjd d S )Nr!  r   )r   r    r   r_   r   rD   rD   rD   rE   test_ch2_inf  r   r  c                   C   r   )Nr  r   yj_?)r   r    r   rD   rD   rD   rE   test_chi2c_smalldf  r   r  c                   C   r   )Nr  r  r   )r   r    r   rD   rD   rD   rE   test_chi2_inv_smalldf  r   r  c                  C   s  d} t dtdtd d| d d}d}d}t tdgd	ggg d
d||g|d	|gg| d d}t tdd|| d t tdd|| d t tdd| | d t tddd| d t tddd| d t tddd| d t tddd| d t tddd| d t tddd| d t tddd| d td}t t|j|jd | d t td!|j |jd"| d t t|jd	|j d#| d ttd$d$d$ ttd%d$d$ ttdd&tj	 ttd$tj
tj	 tttj
d$tj	 ttd$tj
 tj	 tttj
 d$tj	 tttj
tj
 tj	 tttj
 tj
tj	 ttdtj	tj	 tttj	dtj	 ttdtj
tj
 tttj
dtj
 ttdtj
 tj
  tttj
 dtj
  d S )'NrR   rZ   rL   gDSYC?rS   gQ_?g?@g>;,
i}@r   )rZ   r   r   g=O?rO   r  r   rP   gXs*@r  g   V4oAgO1eAgꌠ9Y>)FgEg^ 9^;gd-?gP.5_gsTNNeg6dgu?j/ g]XC}KdgѧRg"!x{{ r   g][#!Rr  gٍS1gN_ r   r  r  )r   r    Zagmr_   r   r   r  r  r   r   r   )rT   Zagm13Zagm15Zagm35Zagm12firD   rD   rE   test_agm_simple  sr   
r  c                  C   s.  t  } | td ttddtdd ttdddtddd ttdddtddd ttdddtddd tt	ddt	dd tt
ddt
dd ttddtdd ttddtdd ttddtdd W d    d S 1 sw   Y  d S )Nr  rZ   r  g?rL   gffffff@)r   r  r  r   r    Zexpnr  r  r  r  ry  r,  r  r  )r  rD   rD   rE   test_legacy  s   "r  c                  C   s   dd l } |  S r?   )	threadingLock)r  rD   rD   rE   errstate_lock  s   r   c              	   C   sx   | 0 t jdd tt jt jdd W d    n1 sw   Y  W d    d S W d    d S 1 s5w   Y  d S )Nr  r3  rZ   y        .B}T)r    r  r"  r  rX  )r   rD   rD   rE   test_error_raising  s   "r!  c                  C   s   dd } t jddt jfdt jfdgtd}t j|ddgf }t | |d d df |d d d	f }ttj	||d
d
d t | |d d df |d d d	f }ttj	||d
d
d d S )Nc                 S   b   t jdd! | dkrt |s| W  d    S | t | W  d    S 1 s*w   Y  d S Nr2  )invalidr   )r_   r  r   r   r`  rD   rD   rE   xfunc     $ztest_xlogy.<locals>.xfuncr   r   r   r   r   r  )r   r  )rZ   r  rZ   rR   r  )
r_   r   r   r   rt   r   ry   r9   r    xlogy)r%  z1Zz2w1Zw2rD   rD   rE   
test_xlogy  s   "((r,  c                  C   sl   dd } t jddt jfdt jfddgtd}t | |d d df |d d df }ttj||d	d	d
 d S )Nc                 S   r"  r#  )r_   r  r   r  r`  rD   rD   rE   r%    r&  ztest_xlog1py.<locals>.xfuncr'  r   r(  )rZ   gKH9r  rZ   rR   r  )	r_   r   r   r   rt   ry   r9   r    Zxlog1py)r%  r*  r+  rD   rD   rE   test_xlog1py  s   (r-  c                  C   s   dd } dddt jf}ddg}g }t||D ]\}}|||  qt j|td}t j| t jgd	|}t	t
j||d
d
d d S )Nc                 S   s   | dk rt j S t| |  S r?   )r_   r   r    r)  rb  rD   rD   rE   r%    s   ztest_entr.<locals>.xfuncr   r   r   rO   rZ   r  ZotypesrR   r  )r_   r   r  r  r  r   rt   ry   r   r9   r    Zentr)r%  r   signsr  Zsgnr  r
  r6  rD   rD   rE   	test_entr  s   r0  c            
      C      dd } d}ddg}g }t ||||D ]\}}}}||| || f qtj|td}tj| tjgd|d d df |d d df }	tt	j
|	|d	d	d
 d S )Nc                 S   sd   | dk s|dk s|dkr| dkrt jS t | st |r t jS | dkr&|S t| | | |  | S r?   )r_   r   r  r    r)  r`  rD   rD   rE   r%    s    ztest_kl_div.<locals>.xfuncr   r   r   rO   rZ   r  r.  r   rR   r  )r  r  r  r_   r   rt   ry   r   r9   r    Zkl_div
r%  r   r/  r  ZsgnavaZsgnbZvbr
  r6  rD   rD   rE   test_kl_div  s   0r5  c            
      C   r1  )Nc                 S   s:   | dkr|dkrt | | | S | dkr|dkrdS tjS r?   )r    r)  r_   r   r`  rD   rD   rE   r%  +  s
   ztest_rel_entr.<locals>.xfuncr2  rO   rZ   r  r.  r   rR   r  )r  r  r  r_   r   rt   ry   r   r9   r    rel_entrr3  rD   rD   rE   test_rel_entr*  s   0r7  c                  C   sR   t g d} g d}| d d df }| d d df }tt|||ddd d S )N))gpB?gĬB?)gtK&?gCtK&?)g>уO'?gvуO'?)ggQW"g    G=r   rZ   rR   r  )r_   r   r   r    r6  Zinputsr  r   r	  rD   rD   rE    test_rel_entr_gh_20710_near_zero<  s
   r9  c                  C   s^   t jdd tg d} g d}| d d df }| d d df }tt |||ddd d S )	Nr2  r3  ))rJ   X )rw  gZbti)r:  g  4&kC)gMG.@g)Z?g wa)r   rZ   rR   r  )r    Zseterrr_   r   r   r6  r8  rD   rD   rE   test_rel_entr_gh_20710_overflowO  s   
r;  c                  C   s   t tddtj ttdddtd  ttddd dd } tjd	d}tj	| tj
gd
|d d df |d d df }ttj||ddd d S )NrO   r  rL   r   r  r   c                 S   s@   | dk rt jS t || k rdt | S | t |d|    S )Nr   r   )r_   r   r@  squaredeltarr  rD   rD   rE   r%  j  s
   ztest_huber.<locals>.xfuncr  r.  r   rZ   rR   r  )r   r    Zhuberr_   r   r   r<  re   randnry   r   r9   r%  r
  r6  rD   rD   rE   
test_hubere  s   0rA  c                  C   sx   dd } t t jdd ddgddgg }t j| t jgd|d d df |d d df }ttj	||d	d	d
 d S )Nc                 S   s<   | dk rt jS | r|sdS | d t d||  d  d  S )Nr   rL   rZ   )r_   r   r   r=  rD   rD   rE   r%  x  s
   "z test_pseudo_huber.<locals>.xfuncr  rL   r   r   r.  rZ   rR   r  )
r_   r   re   r?  tolistry   r   r9   r    pseudo_huberr@  rD   rD   rE   test_pseudo_huberw  s   (0rD  c                  C   s*   d} d}t | |}d}t||dd d S )Nr   gC]r2<gs.-De8rR   rS   )r    rC  r   )r>  rr  r	  r  rD   rD   rE   test_pseudo_huber_small_r  s
   rE  c                   C   sv   t jtdd tdd W d    n1 sw   Y  t jtdd tdd W d    d S 1 s4w   Y  d S )NzToo many predicted coefficientsr  rW   )r;  Zwarnsr  r*   r+   rD   rD   rD   rE   test_runtime_warning  s   "rF  c                   @   s  e Zd Zdgddgg dg dg dg dg dg dg d	g d
g dgZejddei fdeddifgdd Z	ejddei fdeddifgdd Z
ejddei fdeddifgdd Zejddei fdeddifgdd Zejddei fdeddifgdd Zdd Zdd Zejd d!d"d#d$ejgejd%g d&ejd'ddgd(d) Zejd'ddgd*d+ Zejddei fdeddifgd,d- Zejddei fdeddifgd.d/ Zd0d1 Zd2S )3TestStirling2rZ   r   )r   rZ   rZ   )r   rZ   r   rZ   )r   rZ   rN   rP   rZ   )r   rZ   rx   r   r  rZ   )r   rZ      r
  A   rx   rZ   )r   rZ   ?   rL  i^     r3  rZ   )	r   rZ      i  i    i
     rZ   )
r   rZ      i  iZ  i'  iV
  i  $   rZ   )r   rZ   r{   r$  i9  i  i+Y    i  r   rZ   zis_exact, comp, kwargsTFrT   r|   c                 C   sR   t dt| jD ]}tt |d }| j| }||t|g||dfi | qd S )NrZ   r  )rs   r  tabler  r,   )rC   is_exactcompkwargsrg   Zk_valuesrowrD   rD   rE   test_table_cases  s
   
 zTestStirling2.test_table_casesc                 C   s   |t dd|d| jd d fi | |t dd|d| jd d fi | |t dd|ddfi | |t dgdg|ddgfi | d S )Nr   r  rJ   rL   r   r   r   )r,   rS  rC   rT  rU  rV  rD   rD   rE   test_valid_single_integer  s   &&&z'TestStirling2.test_valid_single_integerc                 C   sX   |t dd|ddfi | |t dd|ddfi | |t dd|ddfi | d S )NrO   r  r   rL   r,   rY  rD   rD   rE   test_negative_integer  s    z#TestStirling2.test_negative_integerc                 C   s   | j d d | j d d g}|ttddgtddg|d| |tddgtddg|d| |ttddgddg|d| d S )Nr  r   rJ   r  )rS  r,   r   )rC   rT  rU  rV  ansrD   rD   rE   test_array_inputs  s&   


zTestStirling2.test_array_inputsrR   c                 C   s8   g d}g d}g d}|t |||d|fi | d S )N)r   rZ   r   r   rM  rR  rQ  )rO   r   r   r   r  r  r  )r  r   rL   r   r   rN   r   r  r[  rC   rT  rU  rV  r]  rg   rh   rD   rD   rE   test_mixed_values  s    zTestStirling2.test_mixed_valuesc                    s:   dt d }tt |ddd  fdd|D  dS )	z{Test parity follows well known identity.

        en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind#Parity
        r  e   Tr  rL   c                    s,   g | ]}t  |d   d  | d  qS )rL   rZ   )r  r  r  ro  rD   rE   r    s   , z5TestStirling2.test_correct_parity.<locals>.<listcomp>N)r_   r   r   r,   )rC   KrD   ro  rE   test_correct_parity  s
   z!TestStirling2.test_correct_parityc                 C   sl   t ddg}ddg}ddg}tt||dd|sJ t d	d
g}ddg}ddg}tt||dd|s4J d S )Nl   V^;. l   k4-Tr   rV   rK   rJ   Tr  l	   D,"SBXp!N l   wY)H_1e_*   r{     )r   r   r,   )rC   r]  rg   rh   rD   rD   rE   test_big_numbers  s   zTestStirling2.test_big_numbersr  r+  r   y      @      ?Z12rb  )r  r   2NrT  c                 C   s>   t t t|||d W d    d S 1 sw   Y  d S )Nr  )r;  r   	TypeErrorr,   )rC   r  rb  rT  rD   rD   rE   test_unsupported_input_types  s   "z*TestStirling2.test_unsupported_input_typesc                 C   sz   t | jd dd  }t g dtd}t g dtd}tt tt|||d| W d    d S 1 s6w   Y  d S )NrJ   rZ   rJ   rJ   rJ   rJ   r  rZ   rL   r   rJ   r  )r   rS  r  r;  r   rh  r   r,   )rC   rT  r]  rg   rh   rD   rD   rE   !test_numpy_array_int_object_dtype	  s   "z/TestStirling2.test_numpy_array_int_object_dtypec                 C   sV   t | jd dd  }t g dtd}t g dtd}|t||dd|fi | d S )NrJ   rZ   rj  r  rk  Fr  )r   rS  r1   r,   r_  rD   rD   rE   #test_numpy_array_unsigned_int_dtype  s    z1TestStirling2.test_numpy_array_unsigned_int_dtypec                 C   s   t g dg dg}t g dg dg}t g d}|t|||d|fi | t dgdgdgdgdgg}t g d}t d	d
 tdD }|t||dd|fi | d S )N)rZ   rx   r   r  )rZ   rN   rP   rZ   )r   r   r   r   rj  rk  r  rJ   )r   rZ   rL   r   rJ   r   c                 S   s   g | ]}g d qS ))r   rZ   rN   rP   rZ   r   rD   )r  rK  rD   rD   rE   r  ,  s    zDTestStirling2.test_broadcasting_arrays_correctly.<locals>.<listcomp>r   F)r   r,   rs   r_  rD   rD   rE   "test_broadcasting_arrays_correctly  s    z0TestStirling2.test_broadcasting_arrays_correctlyc                 C   sp   t tddd}|D ]+}t td|d }t|g|dd}|t|g|dd }tt|| dk s5J q
d S )	N3   ra  r   rZ   Tr  Fgh㈵>)r  rs   r,   r_   r  r@  )rC   r   rg   Z	k_entriesdenomru   rD   rD   rE   test_temme_rel_max_error/  s   z&TestStirling2.test_temme_rel_max_errorN)r8  r9  r:  rS  r;  r<  r  r   r   rX  rZ  r\  r^  r`  rc  rf  r_   r   ri  rl  rm  rn  rq  rD   rD   rD   rE   rG    sr    





	

rG  c                   @   s6   e Zd Zdd Zejdeegdd Z	dd Z
dS )	TestLegendreDeprecationc                 C   s@   d}t j|d tdd}W d    d S 1 sw   Y  d S )Nz$`scipy.special.lpn` is deprecated...r  rZ   r   )r;  r  r-   rC   r  rK  rD   rD   rE   test_warn_lpn<  s   "z%TestLegendreDeprecation.test_warn_lpnxlpmnc                 C   sL   d|j  d}tj|d |ddd}W d    d S 1 sw   Y  d S )Nz`scipy.special.z` is deprecated...r  rZ   r   )r8  r;  r  )rC   ru  messagerK  rD   rD   rE   test_warn_xlpmnA  s   "z'TestLegendreDeprecation.test_warn_xlpmnc                 C   sF   d}t j|d tdddd}W d    d S 1 sw   Y  d S )Nz)`scipy.special.sph_harm` is deprecated...r  rZ   r   )r;  r  r    r  rs  rD   rD   rE   test_warn_sph_harmG  s   "z*TestLegendreDeprecation.test_warn_sph_harmN)r8  r9  r:  rt  r;  r<  r  r.   r/   rw  rx  rD   rD   rD   rE   rr  :  s
    
rr  rX  )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"  Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipyr    Zscipy.special._ufuncsZ_ufuncsr@   Zscipy.specialr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   Zscipy._lib._utilr0   r1   Zscipy._lib._array_apir2   r3   r4   Zscipy.special._basicr5   r6   r7   Zscipy.special._testutilsr8   r9   r:   r  architecturer  r  r}  r=   r>  rP  rV  rZ  rs  ru  r  r  r  r  r  r  r&  r0  rN  rT  ri  rj  r  r  r  r  r7  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Zfixturer   r!  r,  r-  r0  r5  r7  r9  r;  rA  rD  rE  r<  r  rF  rG  rr  rD   rD   rD   rE   <module>   s   X,
       @|	 rGE  ,b
 $     UDC) `    \!
		7	
)&=


	 