a
    h                    @   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-m6Z6m7Z7m8Z8 d d	l9m:Z: d d
l;m<Z<m=Z= d dl>m?Z?m@Z@ d dlAmBZBmCZCmDZD d dlEZEG dd dZFG dd dZGG dd dZHG dd dZIG dd dZJG dd dZKG dd dZLG dd dZMG dd dZNG dd  d ZOG d!d" d"ZPG 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/d0 d0ZWG d1d2 d2ZXG d3d4 d4ZYG d5d6 d6ZZG d7d8 d8Z[G d9d: d:Z\G d;d< d<Z]G d=d> d>Z^G d?d@ d@Z_G dAdB dBZ`G dCdD dDZaG dEdF dFZbG dGdH dHZcG dIdJ dJZdG dKdL dLZeG dMdN dNZfG dOdP dPZgG dQdR dRZhG dSdT dTZiG dUdV dVZjG dWdX dXZkdYdZ Zld[d\ ZmG d]d^ d^Znd_d` Zodadb Zpdcdd Zqdedf Zrdgdh Zsdidj ZteBdkdl Zudmdn Zvdodp Zwdqdr Zxdsdt Zydudv Zzdwdx Z{dydz Z|d{d| Z}d}d~ Z~G dd dZd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)mathieu_odd_coefmathieu_even_coef	stirling2)_NoValue)np_longnp_ulong)_FACTORIALK_LIMITS_64BITS_FACTORIALK_LIMITS_32BITS)with_special_errorsassert_func_equalFuncDatac                   @   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^ Z1e2j3j4d_d`dadb Z5dcdd Z6dedf Z7dgdh Z8e2j3j4did`djdk 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 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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZdZd[ Zd\d] Zd^d_ Zd`da Zdbdc Zddde Zdfdg Zdhdi Zdjdk Zdldm Zdndo Zdpdq Zdrds ZdtS (u  
TestCephesc                 C   s   t d d S Nr   )cephesairyself r:   Z/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/special/tests/test_basic.py	test_airy7   s    zTestCephes.test_airyc                 C   s   t d d S r5   )r6   airyer8   r:   r:   r;   
test_airye:   s    zTestCephes.test_airyec              	   C   s6  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t j	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
@rA   )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           ?绽|=atolrI   )npr   broadcast_arraysreshapeTr2   r6   binomravelrandomseedr   r   Zrand)r9   nknkZrknownr:   r:   r;   
test_binom=   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 )NrJ   rO   ,     r   rN   rA   rD   rP   rQ   rR   )rT   rZ   r[   r   logspacer   r   rU   rV   rW   r2   r6   rX   )r9   r\   r]   r^   r:   r:   r;   test_binom_2T   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 NrO   )intrangefloat)r\   r]   numZdenir:   r:   r;   	binom_intb   s    
z.TestCephes.test_binom_exact.<locals>.binom_intrJ   rO      r   rA   rD   rR   )rT   	vectorizerZ   r[   r   r   rU   rV   rW   r2   r6   rX   )r9   rj   r\   r]   r^   r:   r:   r;   test_binom_exacta   s    

*$ zTestCephes.test_binom_exactc                 C   s.   g d}t |}ttj|dddd  d S )N))rL   rM   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   rO   rA   -q=rH   )rT   r   r3   r6   rX   check)r9   Zdatasetr:   r:   r;   test_binom_nooverflow_8346x   s    
z%TestCephes.test_binom_nooverflow_8346c                 C   s   t tdddd d S )NrO         ?      ?)r   r6   Zbdtrr8   r:   r:   r;   	test_bdtr   s    zTestCephes.test_bdtrc                 C   s   t tdddd d S NrO      rr   )r   r6   Zbdtrir8   r:   r:   r;   
test_bdtri   s    zTestCephes.test_bdtric                 C   s   t tdddd d S ru   )r   r6   Zbdtrcr8   r:   r:   r;   
test_bdtrc   s    zTestCephes.test_bdtrcc                 C   s   t tdddd d S NrO   r         @)r   r6   Zbdtrinr8   r:   r:   r;   test_bdtrin   s    zTestCephes.test_bdtrinc                 C   s   t ddd d S ru   )r6   Zbdtrikr8   r:   r:   r;   test_bdtrik   s    zTestCephes.test_bdtrikc                 C   s   t tdd d S Nr           )r   r6   beir8   r:   r:   r;   test_bei   s    zTestCephes.test_beic                 C   s   t tdd d S r}   )r   r6   beipr8   r:   r:   r;   	test_beip   s    zTestCephes.test_beipc                 C   s   t tdd d S Nr   rs   )r   r6   berr8   r:   r:   r;   test_ber   s    zTestCephes.test_berc                 C   s   t tdd d S r}   )r   r6   berpr8   r:   r:   r;   	test_berp   s    zTestCephes.test_berpc                 C   s   t tdddd d S r   )r   r6   Z
besselpolyr8   r:   r:   r;   test_besselpoly   s    zTestCephes.test_besselpolyc                 C   sH   t jdd tddd}W d    n1 s00    Y  t|d d S Nzdeprecated in SciPy 1.12.0matchrO   rs   )pytestdeprecated_callr    Zbtdtrr   r9   yr:   r:   r;   
test_btdtr   s    ,zTestCephes.test_btdtrc                 C   sH   t jdd tddd}W d    n1 s00    Y  t|d d S r   )r   r   r    Zbtdtrir   r   r:   r:   r;   test_btdtri   s    ,zTestCephes.test_btdtric                 C   s   t tdddd d S NrO   rz   )r   r6   Zbtdtriar8   r:   r:   r;   test_btdtria   s    zTestCephes.test_btdtriac                 C   s   t tdddd d S r   )r   r6   Zbtdtribr8   r:   r:   r;   test_btdtrib   s    zTestCephes.test_btdtribc                 C   s   t tdd d S NrO   rs   )r   r6   cbrtr8   r:   r:   r;   	test_cbrt   s    zTestCephes.test_cbrtc                 C   s   t tddd d S NrO   r   r~   )r   r6   chdtrr8   r:   r:   r;   
test_chdtr   s    zTestCephes.test_chdtrc                 C   s   t tddd d S NrO   r   rs   )r   r6   chdtrcr8   r:   r:   r;   test_chdtrc   s    zTestCephes.test_chdtrcc                 C   s   t tddd d S NrO   r~   )r   r6   chdtrir8   r:   r:   r;   test_chdtri   s    zTestCephes.test_chdtric                 C   s   t tddd d S )Nr   rz   )r   r6   Zchdtrivr8   r:   r:   r;   test_chdtriv   s    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   rO   r~   )      9@      4@  gL94)r          @   g7Fh9)MbP?r         D@ggåc;){Gz?r   r   g	;)r          @k   g8x@x>)g     6@r   r   gg1\>>)r   r   r   g`>)      @r   rs   gp!P?)g     u@g     r@      $@g j
?)      Y@      +@r   g]?)g     @r   r   g4ۙ?)g     b@r   r   g?)g      d@r   r   rs   rA   rv   ro   rH   r      )r   r6   ZchndtrrT   r   r   r   r   r   r   nan)r9   valuesZcdfr:   r:   r;   test_chndtr   s.    2zTestCephes.test_chndtrc                 C   s   t tdddd d S Nr   rO   rz   )r   r6   Z	chndtridfr8   r:   r:   r;   test_chndtridf   s    zTestCephes.test_chndtridfc                 C   s   t tdddd d S r   )r   r6   Z	chndtrincr8   r:   r:   r;   test_chndtrinc   s    zTestCephes.test_chndtrincc                 C   s   t tdddd d S Nr   rO   r~   )r   r6   Zchndtrixr8   r:   r:   r;   test_chndtrix   s    zTestCephes.test_chndtrixc                 C   s   t tdd d S r   )r   r6   cosdgr8   r:   r:   r;   
test_cosdg   s    zTestCephes.test_cosdgc                 C   s   t tdd d S r}   )r   r6   cosm1r8   r:   r:   r;   
test_cosm1   s    zTestCephes.test_cosm1c                 C   s   t tdd d S N-   rs   )r   r6   cotdgr8   r:   r:   r;   
test_cotdg   s    zTestCephes.test_cotdgc                 C   s$   t tdd ttdd d S )Nr   r~   gGz?gf?)r   r6   dawsnr   r8   r:   r:   r;   
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
rt 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)rO   r      rA   g-C6
?rs   rC   decimal&.>rk   V瞯<float128ro      )rA   r?            皙?)gg?gsOB?gsaL?g
7I^ʿrv   )rT   r   r   astypeZfloat32r   r    diricfloat64hasattrr   r   )r9   Zn_oddxZn_evenZoctave_resultr:   r:   r;   
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   )rO   rv   rC   )	rT   r   r   r   r    r   Znewaxisshapesize)r9   r   r\   r:   r:   r;   test_diric_broadcasting  s    
z"TestCephes.test_diric_broadcastingc                 C   s   t tdd d S r   )r   r6   r!   r8   r:   r:   r;   test_ellipe  s    zTestCephes.test_ellipec                 C   s   t tddd d S r   )r   r6   	ellipeincr8   r:   r:   r;   test_ellipeinc   s    zTestCephes.test_ellipeincc                 C   s   t dd d S Nr   rO   )r6   ellipjr8   r:   r:   r;   test_ellipj#  s    zTestCephes.test_ellipjc                 C   s   t tdtd  d S )Nr   rA   )r   r"   r   r8   r:   r:   r;   test_ellipk&  s    zTestCephes.test_ellipkc                 C   s   t tddd d S r}   )r   r6   	ellipkincr8   r:   r:   r;   test_ellipkinc)  s    zTestCephes.test_ellipkincc                 C   s   t tdd d S r}   r   r6   erfr8   r:   r:   r;   test_erf,  s    zTestCephes.test_erfc                 C   s$   d}t t|t|  d d S )Ng#8x@r~   r   r9   r   r:   r:   r;   test_erf_symmetry/  s    zTestCephes.test_erf_symmetryc                 C   s   t tdd d S r   )r   r6   erfcr8   r:   r:   r;   	test_erfc3  s    zTestCephes.test_erfcc                 C   s   t tdd d S )NrA   r   )r   r6   exp10r8   r:   r:   r;   
test_exp106  s    zTestCephes.test_exp10c                 C   s   t tdd d S )NrA         @)r   r6   exp2r8   r:   r:   r;   	test_exp29  s    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~   rD   )r   r6   expm1rT   r   r   r8   r:   r:   r;   
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   rO   rA   r?   r   rD   )r6   r   r   complexrT   r   r   )r9   r   r:   r:   r;   test_expm1_complexB  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      ra                 ?)y=Cw?yC7gg)gF<Ug?yQ<D*?yg:><sKy>񸣼$	Um>ly;Vl <@rv   ra   )	rT   r   r   r	   r6   r   r   imagr   )r9   r   r   zexpectedfoundr:   r:   r;   test_expm1_complex_hardU  s    
z"TestCephes.test_expm1_complex_hardc                 C   s0   t tdddd ttdddddd	 d S )
NrO   r   r~   ư>r   
   g2?ro   rH   )r   r6   Zfdtrr   r8   r:   r:   r;   	test_fdtrj  s    zTestCephes.test_fdtrc                 C   s0   t tdddd ttdddddd	 d S )
NrO   r   rs   rA   r   g    _BgDIXl?ro   rH   )r   r6   Zfdtrcr   r8   r:   r:   r;   
test_fdtrcp  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 )NrO   gV-?gx&1?g
}?g<zO'?r   rH   g׀?r   rv   ro   )r   r6   fdtrir   )r9   pr:   r:   r;   
test_fdtriw  s
    zTestCephes.test_fdtrizReturns nan on i686.c                 C   s   t tdddd d S )NrO   rr   )r   r6   r   r8   r:   r:   r;   test_fdtri_mysterious_failure  s    z(TestCephes.test_fdtri_mysterious_failurec                 C   s   t tdddd d S ry   )r   r6   Zfdtridfdr8   r:   r:   r;   test_fdtridfd  s    zTestCephes.test_fdtridfdc                 C   s   t tdd d S Nr   r~   r~   )r   r6   fresnelr8   r:   r:   r;   test_fresnel  s    zTestCephes.test_fresnelc                 C   s   t tdd d S Nr         8@)r   r6   gammar8   r:   r:   r;   
test_gamma  s    zTestCephes.test_gammac                 C   s   t tddd d S )Nr   rO   r~   )r   r6   gammainccinvr8   r:   r:   r;   test_gammainccinv  s    zTestCephes.test_gammainccinvc                 C   s   t d d S )Nr   )r6   gammalnr8   r:   r:   r;   test_gammaln  s    zTestCephes.test_gammalnc                 C   s2   t g dt j}tt|t t| d S )N)      gffffffrO   g@)rT   r   r   r   r6   Zgammasgnsignrgamma)r9   valsr:   r:   r;   test_gammasgn  s    zTestCephes.test_gammasgnc                 C   s   t tdddd d S r   )r   r6   gdtrr8   r:   r:   r;   	test_gdtr  s    zTestCephes.test_gdtrc                 C   s   t tddtjd d S r   )r   r6   r  rT   r   r8   r:   r:   r;   test_gdtr_inf  s    zTestCephes.test_gdtr_infc                 C   s   t tdddd d S r   )r   r6   Zgdtrcr8   r:   r:   r;   
test_gdtrc  s    zTestCephes.test_gdtrcc                 C   s   t tdddd d S r   )r   r6   Zgdtriar8   r:   r:   r;   test_gdtria  s    zTestCephes.test_gdtriac                 C   s   t ddd d S NrO   r   )r6   Zgdtribr8   r:   r:   r;   test_gdtrib  s    zTestCephes.test_gdtribc                 C   s   t ddd d S NrO   r   )r6   Zgdtrixr8   r:   r:   r;   test_gdtrix  s    zTestCephes.test_gdtrixc                 C   s   t dd d S rd   )r6   hankel1r8   r:   r:   r;   test_hankel1  s    zTestCephes.test_hankel1c                 C   s   t dd d S rd   )r6   hankel1er8   r:   r:   r;   test_hankel1e  s    zTestCephes.test_hankel1ec                 C   s   t dd d S rd   )r6   hankel2r8   r:   r:   r;   test_hankel2  s    zTestCephes.test_hankel2c                 C   s   t dd d S rd   )r6   hankel2er8   r:   r:   r;   test_hankel2e  s    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 )NrO   rs   rv   r?   g㈮?)r   r6   hyp1f1r   r8   r:   r:   r;   test_hyp1f1  s    zTestCephes.test_hyp1f1c                 C   s   t tddddd d S r   )r   r6   hyp2f1r8   r:   r:   r;   test_hyp2f1  s    zTestCephes.test_hyp2f1c                 C   s   t tdd d S r   )r   r6   i0r8   r:   r:   r;   test_i0  s    zTestCephes.test_i0c                 C   s   t tdd d S r   )r   r6   i0er8   r:   r:   r;   test_i0e  s    zTestCephes.test_i0ec                 C   s   t tdd d S r}   )r   r6   i1r8   r:   r:   r;   test_i1  s    zTestCephes.test_i1c                 C   s   t tdd d S r}   )r   r6   i1er8   r:   r:   r;   test_i1e  s    zTestCephes.test_i1ec                 C   s   t d d S rd   )r6   it2i0k0r8   r:   r:   r;   test_it2i0k0  s    zTestCephes.test_it2i0k0c                 C   s   t d d S rd   )r6   it2j0y0r8   r:   r:   r;   test_it2j0y0  s    zTestCephes.test_it2j0y0c                 C   s   t d d S rd   )r6   Z
it2struve0r8   r:   r:   r;   test_it2struve0  s    zTestCephes.test_it2struve0c                 C   s   t d d S rd   )r6   Zitairyr8   r:   r:   r;   test_itairy  s    zTestCephes.test_itairyc                 C   s   t tdd d S r  )r   r6   iti0k0r8   r:   r:   r;   test_iti0k0  s    zTestCephes.test_iti0k0c                 C   s   t tdd d S r  )r   r6   itj0y0r8   r:   r:   r;   test_itj0y0  s    zTestCephes.test_itj0y0c                 C   s   t tdd d S r}   )r   r6   Zitmodstruve0r8   r:   r:   r;   test_itmodstruve0  s    zTestCephes.test_itmodstruve0c                 C   s   t tdd d S r}   )r   r6   Z	itstruve0r8   r:   r:   r;   test_itstruve0  s    zTestCephes.test_itstruve0c                 C   s   t tddd d S r   )r   r6   ivr8   r:   r:   r;   test_iv  s    zTestCephes.test_ivc                 C   s   t tddd d S r   )r   r6   iver8   r:   r:   r;   test_ive  s    zTestCephes.test_ivec                 C   s   t tdd d S r   )r   r6   j0r8   r:   r:   r;   test_j0  s    zTestCephes.test_j0c                 C   s   t tdd d S r}   )r   r6   j1r8   r:   r:   r;   test_j1  s    zTestCephes.test_j1c                 C   s   t tddd d S r   )r   r6   jnr8   r:   r:   r;   test_jn  s    zTestCephes.test_jnc                 C   s   t tddd d S r   )r   r6   jvr8   r:   r:   r;   test_jv  s    zTestCephes.test_jvc                 C   s   t tddd d S r   )r   r6   jver8   r:   r:   r;   test_jve  s    zTestCephes.test_jvec                 C   s   t d d S NrA   )r6   k0r8   r:   r:   r;   test_k0  s    zTestCephes.test_k0c                 C   s   t d d S rN  )r6   k0er8   r:   r:   r;   test_k0e  s    zTestCephes.test_k0ec                 C   s   t d d S rN  )r6   k1r8   r:   r:   r;   test_k1  s    zTestCephes.test_k1c                 C   s   t d d S rN  )r6   k1er8   r:   r:   r;   test_k1e  s    zTestCephes.test_k1ec                 C   s   t d d S rN  )r6   keir8   r:   r:   r;   test_kei  s    zTestCephes.test_keic                 C   s   t tdd d S r}   )r   r6   keipr8   r:   r:   r;   	test_keip  s    zTestCephes.test_keipc                 C   s   t d d S rN  )r6   kerr8   r:   r:   r;   test_ker  s    zTestCephes.test_kerc                 C   s   t d d S rN  )r6   kerpr8   r:   r:   r;   	test_kerp  s    zTestCephes.test_kerpc                 C   s   t d d S rN  )r6   kelvinr8   r:   r:   r;   test_kelvin  s    zTestCephes.test_kelvinc                 C   s   t dd d S rd   )r6   knr8   r:   r:   r;   test_kn  s    zTestCephes.test_knc                 C   s*   t tdd ttttj d S r   )r   r6   Zkolmogir   rT   r   r   r8   r:   r:   r;   test_kolmogi  s    zTestCephes.test_kolmogic                 C   s   t tdd d S r   )r   r6   Z
kolmogorovr8   r:   r:   r;   test_kolmogorov  s    zTestCephes.test_kolmogorovc                 C   s   t tdd d S )Nr          )r   r6   Z_kolmogpr8   r:   r:   r;   test_kolmogp  s    zTestCephes.test_kolmogpc                 C   s   t tdd d S r}   )r   r6   Z_kolmogcr8   r:   r:   r;   test_kolmogc  s    zTestCephes.test_kolmogcc                 C   s*   t tdd ttttj d S r}   )r   r6   Z	_kolmogcir   rT   r   r   r8   r:   r:   r;   test_kolmogci!  s    zTestCephes.test_kolmogcic                 C   s   t dd d S rd   )r6   kvr8   r:   r:   r;   test_kv%  s    zTestCephes.test_kvc                 C   s   t dd d S rd   )r6   kver8   r:   r:   r;   test_kve(  s    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~   rD   )r6   log1pr   rT   r   r   )r9   rn  r:   r:   r;   
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    n1 s0    Y  d S )	Nr   rD   r   z%invalid value encountered in multiplyrO   rA   rv   r?   )r6   rn  r   r   rT   r   r   filterRuntimeWarningr   r   r   )r9   rn  csupr:   r:   r;   test_log1p_complex2  s"    
$ ",&"$" zTestCephes.test_log1p_complexc                 C   s   t tdddd d S )Nr   rO   rs   )r   r6   lpmvr8   r:   r:   r;   	test_lpmvE  s    zTestCephes.test_lpmvc                 C   s   t tddd d S r   )r   r6   Z	mathieu_ar8   r:   r:   r;   test_mathieu_aH  s    zTestCephes.test_mathieu_ac                 C   s   t tddd d S r   )r   r6   Z	mathieu_br8   r:   r:   r;   test_mathieu_bK  s    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 )NrO   r   rs   r~   c                 S   s   |t jd 9 }| dkr2ddd| td|    S | dkrVt||d td|   S | dkrtd| |td	| d
 d   S t| | |t| d | d	| d   t| d | d	| d      S d S )N   r   g;f?rO   rr   rA      rv   r?            ?)rT   r   r	   mqr   r:   r:   r;   	ce_smallqR  s    $z.TestCephes.test_mathieu_cem.<locals>.ce_smallqd   r   rh|?+=rI   rS   )	r   r6   mathieu_cemrT   rl   r   r   rb   r   )r9   r  r  r  r:   r:   r;   test_mathieu_cemN  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 )NrO   r   r~   rs   c                 S   s   |t jd 9 }| dkr2t||d td|   S | dkrZtd| |td|  d  S t| | |t| d | d| d   t| d | d| d      S d S )Nrz  rO   r{  rv   rA   r?   r|  )rT   r   r   r~  r:   r:   r;   	se_smallqk  s     z.TestCephes.test_mathieu_sem.<locals>.se_smallqr  r  r  r   r  r  r  )	r   r6   mathieu_semrT   rl   r   r   rb   r   )r9   r  r  r  r:   r:   r;   test_mathieu_semg  s    
*"zTestCephes.test_mathieu_semc                 C   s   t tdddd d S NrO   r   r  )r   r6   mathieu_modcem1r8   r:   r:   r;   test_mathieu_modcem1}  s    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 )
NrO   r   r?   rm  rA   r   rC   rQ   rH   )	r6   mathieu_modcem2rT   r   r   rb   linspacer  r   r9   r  r  r   y1fry2r:   r:   r;   test_mathieu_modcem2  s    "&zTestCephes.test_mathieu_modcem2c                 C   s   t tdddd d S r  )r   r6   mathieu_modsem1r8   r:   r:   r;   test_mathieu_modsem1  s    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 )
NrO   r?   rm  rA   r   r   rC   rQ   rH   )	r6   mathieu_modsem2rT   r   r   rb   r  r  r   r  r:   r:   r;   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   r6   r  rT   r   r  r  r  r  r  r8   r:   r:   r;   test_mathieu_overflow  s    z TestCephes.test_mathieu_overflowc                 C   sD   t dD ]6}tddd}t|d ddd t|d	 d
dd qd S )N<   rA   r  rD   r   g.dS?rQ   rH   rO   gGc?-C6?)rf   r6   r  r   )r9   r]   vr:   r:   r;   test_mathieu_ticket_1847  s    z#TestCephes.test_mathieu_ticket_1847c                 C   s   t d d S r5   )r6   Zmodfresnelmr8   r:   r:   r;   test_modfresnelm  s    zTestCephes.test_modfresnelmc                 C   s   t d d S r5   )r6   Zmodfresnelpr8   r:   r:   r;   test_modfresnelp  s    zTestCephes.test_modfresnelpc                 C   s   t tddd d S r   )r   r6   Z	modstruver8   r:   r:   r;   test_modstruve  s    zTestCephes.test_modstruvec                 C   s   t tdddd d S r   )r   r6   nbdtrr8   r:   r:   r;   
test_nbdtr  s    zTestCephes.test_nbdtrc                 C   s   t tdddd d S r   )r   r6   nbdtrcr8   r:   r:   r;   test_nbdtrc  s    zTestCephes.test_nbdtrcc                 C   s   t tdddd d S r   )r   r6   nbdtrir8   r:   r:   r;   test_nbdtri  s    zTestCephes.test_nbdtric                 C   s   t ddd d S )NrO   rB   rr   )r6   Znbdtrikr8   r:   r:   r;   test_nbdtrik  s    zTestCephes.test_nbdtrikc                 C   s   t tdddd d S ry   )r   r6   Znbdtrinr8   r:   r:   r;   test_nbdtrin  s    zTestCephes.test_nbdtrinc                 C   s   t tddddd d S r   )r   r6   ncfdtrr8   r:   r:   r;   test_ncfdtr  s    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 )NrO   r   r~   )rr   rO   r  rA   rv   r  )r   r6   Zncfdtrir  r   )r9   fr   r:   r:   r;   test_ncfdtri  s    zTestCephes.test_ncfdtric                 C   s2   g d}t d|dd}tt d|dd| d S )NrO   rA   rv   rA   r}  rk   )r6   r  r   Z
ncfdtridfd)r9   Zdfdr   r:   r:   r;   test_ncfdtridfd  s    zTestCephes.test_ncfdtridfdc                 C   s6   g d}t |ddd}tt |ddd|dd d S )N)r   rO   rA   rv   g     @rA   r}  rk   gh㈵>rH   )r6   r  r   Z
ncfdtridfn)r9   dfnr   r:   r:   r;   test_ncfdtridfn  s    zTestCephes.test_ncfdtridfnc                 C   s2   g d}t dd|d}tt dd|d| d S )N)rr   r  r   rA   rv   rk   )r6   r  r   Z	ncfdtrinc)r9   ncr   r:   r:   r;   test_ncfdtrinc  s    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 )NrO   r   rr   	   i   r   r~   rs   r   r   r   )	r   r6   Znctdtrr   rT   r   r   r   r   r8   r:   r:   r;   test_nctdtr  s    zTestCephes.test_nctdtrc                 C   s   t ddd d S )NrO   rr   r   )r6   Z	nctdtridfr8   r:   r:   r;   test_nctdtridf  s    zTestCephes.test_nctdtridfc                 C   s   t ddd d S r  )r6   Z	nctdtrincr8   r:   r:   r;   test_nctdtrinc  s    zTestCephes.test_nctdtrincc                 C   s   t ddd d S )Nr   r   rr   )r6   Znctdtritr8   r:   r:   r;   test_nctdtrit  s    zTestCephes.test_nctdtritc                 C   s   t tdddd d S )Nrr   rO   rs   )r   r6   Znrdtrimnr8   r:   r:   r;   test_nrdtrimn  s    zTestCephes.test_nrdtrimnc                 C   s   t tddddddd d S )Nrr   r~   r   rR   )r   r6   Znrdtrisdr8   r:   r:   r;   test_nrdtrisd  s    zTestCephes.test_nrdtrisdc                 C   s   t dddd d S r  )r6   Zobl_ang1r8   r:   r:   r;   test_obl_ang1  s    zTestCephes.test_obl_ang1c                 C   s2   t ddddd}t|d d t|d d d S )NrO   r   rs   r~   )r6   Zobl_ang1_cvr   )r9   resultr:   r:   r;   test_obl_ang1_cv  s    zTestCephes.test_obl_ang1_cvc                 C   s   t tdddd d S NrO   r   r   )r   r6   Zobl_cvr8   r:   r:   r;   test_obl_cv	  s    zTestCephes.test_obl_cvc                 C   s   t dddd d S r  )r6   Zobl_rad1r8   r:   r:   r;   test_obl_rad1  s    zTestCephes.test_obl_rad1c                 C   s   t ddddd d S r  )r6   Zobl_rad1_cvr8   r:   r:   r;   test_obl_rad1_cv  s    zTestCephes.test_obl_rad1_cvc                 C   s   t dddd d S r  )r6   Zobl_rad2r8   r:   r:   r;   test_obl_rad2  s    zTestCephes.test_obl_rad2c                 C   s   t ddddd d S r  )r6   Zobl_rad2_cvr8   r:   r:   r;   test_obl_rad2_cv  s    zTestCephes.test_obl_rad2_cvc                 C   s   t tddd d S )NrO   r   r  )r   r6   pbdvr8   r:   r:   r;   	test_pbdv  s    zTestCephes.test_pbdvc                 C   s   t dd d S r  )r6   pbvvr8   r:   r:   r;   	test_pbvv  s    zTestCephes.test_pbvvc                 C   s   t dd d S r  )r6   Zpbwar8   r:   r:   r;   	test_pbwa  s    zTestCephes.test_pbwac                 C   s>   t dd}t|td t g dd}t|g d d S )Nr   rO   rD   r   rO   rA   )rO   rO   rO   )r6   Zpdtrr   rT   r   r   r9   valr:   r:   r;   	test_pdtr!  s    zTestCephes.test_pdtrc                 C   sB   t dd}t|dtd  t g dd}t|g d d S )Nr   rO   rD   r  r~   )r   r   r   )r6   Zpdtrcr   rT   r   r   r  r:   r:   r;   
test_pdtrc(  s    zTestCephes.test_pdtrcc                 C   sB   t  (}|td tdd W d    n1 s40    Y  d S )N-floating point number truncated to an integerrr   )r   rp  rq  r6   pdtri)r9   rs  r:   r:   r;   
test_pdtri/  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 )Nrr   rO   r   r}  ffffff?)r   #B;r   )rv   rv   )r6   Zpdtrikr   Z	gammainccr   rT   r   r9   r]   r:   r:   r;   test_pdtrik4  s    zTestCephes.test_pdtrikc                 C   s   t dddd d S r  )r6   Zpro_ang1r8   r:   r:   r;   test_pro_ang1;  s    zTestCephes.test_pro_ang1c                 C   s    t tdddddtd d S )NrO   r   ry  )r   r6   Zpro_ang1_cvr   r8   r:   r:   r;   test_pro_ang1_cv>  s    zTestCephes.test_pro_ang1_cvc                 C   s   t tdddd d S r  )r   r6   Zpro_cvr8   r:   r:   r;   test_pro_cvB  s    zTestCephes.test_pro_cvc                 C   s   t dddd d S r  )r6   Zpro_rad1r8   r:   r:   r;   test_pro_rad1E  s    zTestCephes.test_pro_rad1c                 C   s   t ddddd d S r  )r6   Zpro_rad1_cvr8   r:   r:   r;   test_pro_rad1_cvH  s    zTestCephes.test_pro_rad1_cvc                 C   s   t dddd d S r  )r6   Zpro_rad2r8   r:   r:   r;   test_pro_rad2K  s    zTestCephes.test_pro_rad2c                 C   s   t ddddd d S r  )r6   Zpro_rad2_cvr8   r:   r:   r;   test_pro_rad2_cvN  s    zTestCephes.test_pro_rad2_cvc                 C   s   t d d S rd   )r6   psir8   r:   r:   r;   test_psiQ  s    zTestCephes.test_psic                 C   s   t tdddd d S r5   )r   r6   radianr8   r:   r:   r;   test_radianT  s    zTestCephes.test_radianc                 C   s   t tdd d S r   )r   r6   r  r8   r:   r:   r;   test_rgammaW  s    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   r6   roundr8   r:   r:   r;   
test_roundZ  s    zTestCephes.test_roundc                 C   s   t d d S rd   )r6   Zshichir8   r:   r:   r;   test_shichib  s    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 )NrO   rr   r   z cosine integral(-inf) is not nan)r6   ZsicirT   r   r   r   r   r   )r9   srr  r:   r:   r;   	test_sicie  s    

zTestCephes.test_sicic                 C   s   t tdd d S NZ   rs   )r   r6   sindgr8   r:   r:   r;   
test_sindgp  s    zTestCephes.test_sindgc                 C   s.   t tddd tttdtj d S )NrO   r   ?)r   r6   smirnovr   rT   r   r   r8   r:   r:   r;   test_smirnovs  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 )	NrO   r   rD   rA         ?      rv   g      ȿ)r   r6   Z	_smirnovpr   rT   r   r   r8   r:   r:   r;   test_smirnovpw  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 )
NrO   r   r   r   TZendpointrv   r   r?   )
r   r6   	_smirnovcr   rT   r   r   r  r   r  )r9   x10Zx4r:   r:   r;   test_smirnovc}  s    zTestCephes.test_smirnovcc                 C   sP   t tdtddd t tdtddd tttdtj d S NrO   rB   333333?)r   r6   r  smirnovir   rT   r   r   r8   r:   r:   r;   test_smirnovi  s    zTestCephes.test_smirnovic                 C   sP   t tdtddd t tdtddd tttdtj d S r  )r   r6   r  Z
_smirnovcir   rT   r   r   r8   r:   r:   r;   test_smirnovci  s    zTestCephes.test_smirnovcic                 C   s   t tdd d S r   )r   r6   Zspencer8   r:   r:   r;   test_spence  s    zTestCephes.test_spencec                 C   s:   t tddd ttddd ttddd d S )NrO   r   rr   r  rA   gMoF?)r   r6   Zstdtrr   r8   r:   r:   r;   
test_stdtr  s    zTestCephes.test_stdtrc                 C   s   t dd d S )Nffffff?rO   )r6   Zstdtridfr8   r:   r:   r;   test_stdtridf  s    zTestCephes.test_stdtridfc                 C   s   t dd d S )NrO   r  )r6   Zstdtritr8   r:   r:   r;   test_stdtrit  s    zTestCephes.test_stdtritc                 C   s   t tddd d S r}   )r   r6   struver8   r:   r:   r;   test_struve  s    zTestCephes.test_struvec                 C   s   t tdd d S r   )r   r6   tandgr8   r:   r:   r;   
test_tandg  s    zTestCephes.test_tandgc                 C   s   t tddd d S r   )r   r6   Ztklmbdar8   r:   r:   r;   test_tklmbda  s    zTestCephes.test_tklmbdac                 C   s   t d d S rd   )r6   y0r8   r:   r:   r;   test_y0  s    zTestCephes.test_y0c                 C   s   t d d S rd   )r6   r  r8   r:   r:   r;   test_y1  s    zTestCephes.test_y1c                 C   s   t dd d S rd   )r6   ynr8   r:   r:   r;   test_yn  s    zTestCephes.test_ync                 C   s   t dd d S rd   )r6   yvr8   r:   r:   r;   test_yv  s    zTestCephes.test_yvc                 C   s   t dd d S rd   )r6   yver8   r:   r:   r;   test_yve  s    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   rs   g      "g      "@g4׵/Yg8EGr?r  gffffff@ig>@r~   g|Pk?r   rO   irm  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<rG   rH   )r   r2   r6   wofz)r9   r   wr:   r:   r;   	test_wofz  sr    "zTestCephes.test_wofzN)__name__
__module____qualname__r<   r>   r_   rc   rm   rq   rt   rw   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   r   r   r   r   r   r   r   r   r   markxfailr   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  r3  r5  r7  r8  r9  r;  r=  r>  r?  rA  rC  rE  rG  rI  rK  rM  rP  rR  rT  rV  rX  rZ  r\  r^  r`  rb  rc  rd  rf  rg  rh  rj  rl  ro  rt  rv  rw  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  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;   r4   6   st  

	r4   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 )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    r7   r   r   r   r:   r:   r;   r<     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   ||< qRt||d d S )Nr   r?   rA   gN贁N{?rE   )	r    r=   r7   rf   r   r   absr   r   )r9   abb1r\   r:   r:   r;   r>     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 )NrA   glgoe2+
g(0[g X*JgUfݿg˰zU`?g4c1=C?gCuTr?   r   r   )g&g(.2+
gRg}`g%́r   rO   )g7;1[ge*JgVwgL g<3r   )gNݿg3%IQ`?gZyΌ׿gʀ11^?g33tտrv   )gqM0=C?g7uTg\G`?gp⍞vg$.m?)r    bi_zerosr   r   )r9   biZbiar:   r:   r;   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 )NrO   gcqg!xLgMSt$?g ~:p?r?   )r    ai_zerosr   r   )r9   Zair:   r:   r;   test_ai_zeros$  s    
zTestAiry.test_ai_zerosc                 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  rO   r}  rQ   rH   r   rR   rE   )guqgqHkZg4g9Ζ%gB~gL")gLgQO	gMQnGg3:g)}g )r    r(  r7   r!  r   )r9   r   zpZai_zpxZaip_zxZai_zZaip_z_Zai_zpZaip_zpZai_envelopeZaip_enveloper:   r:   r;   test_ai_zeros_big+  s"    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 )Nr*  rO   r}  rQ   rH   r   rR   rE   )gx&gg-2+
gRgg`gu%́g{ )g K;1[g*JgVwg<w gd
3g/{
")r    r%  r7   r!  r   )r9   r   r+  Zbi_zpxZbip_zxr,  Zbi_zZbip_zZbi_zpZbip_zpZbi_envelopeZbip_enveloper:   r:   r;   test_bi_zeros_bigC  s"    zTestAiry.test_bi_zeros_bigN)	r  r  r  r<   r>   r'  r)  r-  r.  r:   r:   r:   r;   r    s   
!r  c                   @   s   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   rO   r   r{  )r    genlaguerreZassoc_laguerrer   )r9   Za1Za2r:   r:   r;   test_assoc_laguerre]  s
    z%TestAssocLaguerre.test_assoc_laguerreN)r  r  r  r1  r:   r:   r:   r;   r/  \  s   r/  c                   @   s   e Zd Zdd ZdS )TestBesselpolyc                 C   s   d S Nr:   r8   r:   r:   r;   r   f  s    zTestBesselpoly.test_besselpolyN)r  r  r  r   r:   r:   r:   r;   r2  e  s   r2  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   s   t d}t|dd d S )NrA   gT?r   )r    r   r   )r9   Zmbeir:   r:   r;   r   k  s    
zTestKelvin.test_beic                 C   s   t d}t|dd d S )NrA   gD,X?r   )r    r   r   )r9   Zmbeipr:   r:   r;   r   o  s    
zTestKelvin.test_beipc                 C   s   t d}t|dd d S )NrA   gPA4?r   )r    r   r   )r9   Zmberr:   r:   r;   r   s  s    
zTestKelvin.test_berc                 C   s   t d}t|dd d S )NrA   gii߿r   )r    r   r   )r9   Zmberpr:   r:   r;   r   w  s    
zTestKelvin.test_berpc                 C   s"   t d}t|tg dd d S )Nr   g&jj@g+"@g(rw+@gU2@g`<6@r?   )r    Z	bei_zerosr   r   )r9   r&  r:   r:   r;   test_bei_zeros{  s    
zTestKelvin.test_bei_zerosc                 C   s"   t d}t|tg dd d S )Nr   )gyWo.@g╲ݏ @gנ{)@gK11@gWc"5@r{  )r    Z
beip_zerosr   r   )r9   Zbipr:   r:   r;   test_beip_zeros  s    
zTestKelvin.test_beip_zerosc                 C   s"   t d}t|tg dd d S )Nr   g\@g6ُ@gӟHY'@g>"D0@ggaO;4@r?   )r    Z	ber_zerosr   r   )r9   r   r:   r:   r;   test_ber_zeros  s    
zTestKelvin.test_ber_zerosc                 C   s"   t d}t|tg dd d S )Nr   g '@gs%@gF ^-@gvۅj3@gB7@r?   )r    Z
berp_zerosr   r   )r9   Zbrpr:   r:   r;   test_berp_zeros  s    
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 )NrA   r   r{  )r    r_  r   r   r   r[  rW  r   r   r]  rY  )r9   Zmkelvr:   r:   r;   r`    s    
zTestKelvin.test_kelvinc                 C   s   t d}t|dd d S )NrA   g>ɿr   )r    rW  r   )r9   Zmkeir:   r:   r;   rX    s    
zTestKelvin.test_keic                 C   s   t d}t|dd d S )NrA   gr@d"?r   )r    rY  r   )r9   Zmkeipr:   r:   r;   rZ    s    
zTestKelvin.test_keipc                 C   s   t d}t|dd d S )NrA   gܙUr   )r    r[  r   )r9   Zmkerr:   r:   r;   r\    s    
zTestKelvin.test_kerc                 C   s   t d}t|dd d S )NrA   g^.n3Jr   )r    r]  r   )r9   Zmkerpr:   r:   r;   r^    s    
zTestKelvin.test_kerpc                 C   s"   t d}t|tg dd d S )Nr   gE>Q@gB= @gPN)@gm91@g
%5@r?   )r    Z	kei_zerosr   r   )r9   rW  r:   r:   r;   test_kei_zeros  s    
zTestKelvin.test_kei_zerosc                 C   s"   t d}t|tg dd d S )Nr   gWf,@g?"@gFZ*o+@gOpN2@gEa6@r?   )r    Z
keip_zerosr   r   )r9   rY  r:   r:   r;   test_keip_zeros  s    
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   r8  r?   r5  )#?Q5U@q89 %@ol`.@gO0q3@r<  r:  )gum.@gݏ @gs{)@g䠄11@gN(D!5@gS@g89@@g^C'@g1ZG0@g+ڇ4@r>  )r    Zkelvin_zerosr   r   )
r9   tmpZberzZbeizZkerzZkeizZberpzZbeipzZkerpzZkeipzr:   r:   r;   test_kelvin_zeros  s4    
zTestKelvin.test_kelvin_zerosc                 C   s"   t d}t|tg dd d S )Nr   )r@  rA  rB  rC  gD;q3@r?   )r    Z	ker_zerosr   r   )r9   r[  r:   r:   r;   test_ker_zeros  s    
zTestKelvin.test_ker_zerosc                 C   s"   t d}t|tg dd d S )Nr   rD  r?   )r    Z
kerp_zerosr   r   )r9   r]  r:   r:   r;   test_kerp_zeros  s    
zTestKelvin.test_kerp_zerosN)r  r  r  r   r   r   r   r6  r7  r9  r;  r`  rX  rZ  r\  r^  r=  r?  rF  rG  rH  r:   r:   r:   r;   r4  j  s$   		.r4  c                   @   s   e Zd Zdd ZdS )TestBernoullic                 C   s"   t d}t|tg dd d S )Nr   )rs   r  g-!lV?r~   g镲r~   r?   )r    Z	bernoullir   r   )r9   Zbrnr:   r:   r;   test_bernoulli  s    
zTestBernoulli.test_bernoulliN)r  r  r  rJ  r:   r:   r:   r;   rI    s   rI  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 )NrO   rs   33333YN~h?   g6.8@rG   r   r  rA   r?   rE   rH   )r   r    betar   r
  )r9   betZbetgr:   r:   r;   	test_beta  s    zTestBeta.test_betac                 C   s   t ttdd d S )NrD   rA   )r   rT   isinfr    rP  r8   r:   r:   r;   test_beta_inf  s    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 )NrO   r~   rL  rM  rN     gIs	@r  r   r  rA   r?   rG   rH   )r   r    Zbetalnr   r  r   r!  rP  )r9   ZbetlnrQ  r:   r:   r;   test_betaln   s    zTestBeta.test_betalnN)r  r  r  __doc__rR  rT  rV  r:   r:   r:   r;   rK    s   
rK  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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}  rO   rO   )rT   r   r   r    betainc
betaincinvbetainccbetainccinvr   r:   r:   r;   
test_a1_b11  s
    zTestBetaInc.test_a1_b1z
a, b, x, p))rA   r?   g@w?rr   )rN  g     `e@rQ   g*?)rN  rO  g"Yx;r}  )g   `1?g    ئAg\aY4g    ?)r?   i g-߇)?g;?c                 C   s<   t |||}t||dd t |||}t||dd d S )Nr   rH   g-a=)r    rY  r   rZ  r9   r"  r#  r   r   p1x1r:   r:   r;   test_betainc_betaincinvH  s    z#TestBetaInc.test_betainc_betaincinv))      @r   r}  g     ?)      @g     *@      ?g&?)      ?rc  g333333?gFoE?)re        2@r   gg2$Z?)re  rf  gZd;?g6)re  r	  r  g`<)      0@r  g?g<dEA>)g?g7Ê@g/3J?Hz>c                 C   s<   t |||}t||dd t |||}t||dd d S )N+<rH   gV瞯=)r    r[  r   r\  r^  r:   r:   r;   test_betaincc_betainccinv]  s    z%TestBetaInc.test_betaincc_betainccinvza, b, y, ref))cj,@rk  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  rH   )r    rZ  r   )r9   r"  r#  r   refr   r:   r:   r;   test_betaincinv_tiny_yo  s    z"TestBetaInc.test_betaincinv_tiny_yfuncargs))r   rA   rr   )r   rA   rr   )r         rr   )r  r   rr   )r  r   333333ӿ)r  r   皙?c              	   C   sj   t jddJ tjt jdd t j|  W d    n1 s>0    Y  W d    n1 s\0    Y  d S )Nraise)domainru  r   )r    errstater   r   SpecialFunctionErrorrY  )r9   ro  rp  r:   r:   r;   test_betainc_domain_errors  s    z&TestBetaInc.test_betainc_domain_errorsN)r  r  r  rW  r]  r   r  parametrizera  rj  rn  r    rY  rZ  r[  r\  rx  r:   r:   r:   r;   rX  ,  s*   


	
rX  c                   @   s   e Zd Zdd Zejdddgejdddegejddd	gejd
ddgdd Zdd Z	dd Z
dd Zdd Z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sJ d S )Nr   rv   r?         ^@g     @j@Texactx   )r}  
repetition   c                 S   s   g | ]}t jd |ddqS )ra   Tr|  )r    comb.0r]   r:   r:   r;   
<listcomp>      z/TestCombinatorics.test_comb.<locals>.<listcomp>r  ra   r   rS   rO   l   hU7`S?Q r  2   )r   r    r  r   r   r   rf   listrT   iinfore   max)r9   iir   r:   r:   r;   	test_comb  s    zTestCombinatorics.test_combr  TFlegacyr]   r  rv   N      @r?   c                 C   s   |t urLtjtdd$ tj||d||d}W d    q`1 s@0    Y  ntj||d||d}|r|rt|| d t| }}d}nt|t| }}t 4}|t ur|t tj||||d}W d    n1 s0    Y  t	|| d S )Nz$Using 'legacy' keyword is deprecatedr   T)r}  r  r  rO   F)r  r  )
r,   r   warnsDeprecationWarningr    r  re   r   rp  r   )r9   r  r]   r  r  r  rs  r   r:   r:   r;   test_comb_legacy  s*    &
0z"TestCombinatorics.test_comb_legacyc                 C   sL   d}d}t |}t |}tj||dd}tj||dd}||ksHJ d S )NF   rK   Tr|  )rT   int64r    r  )r9   r\   r]   Znp_nZnp_kZres_npZres_pyr:   r:   r;   test_comb_with_np_int64  s    

z)TestCombinatorics.test_comb_with_np_int64c                 C   sz   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 )NrA   rv   Tr|  r   rD   FrA   rD   rA   r   rv   rv   rD   rv   )r~   r~   r~   r{  )r   r    r  r   r8   r:   r:   r;   test_comb_zeros  s    z!TestCombinatorics.test_comb_zerosc                 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   rv   r?        @g     @Tr|  i  )r   r    permr   r   r8   r:   r:   r;   	test_perm  s    zTestCombinatorics.test_permc                 C   sz   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 )NrA   rv   Tr|  r   rD   Fr  r  )r~   r~   r~   r  )r   r    r  r   r8   r:   r:   r;   test_perm_zeros  s    z!TestCombinatorics.test_perm_zerosc                 C   sH   t jdd( tddgddgdd W d    n1 s:0    Y  d S )Nzuse keyword argumentsr   r   rv   r?   F)r   r   r    r  r8   r:   r:   r;   test_positional_deprecation  s    z-TestCombinatorics.test_positional_deprecationN)r  r  r  r  r   r  ry  r,   r  r  r  r  r  r  r:   r:   r:   r;   rz    s   	rz  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   s   t d}d}t|| d S )N   r   )r    r   r   )r9   cbZcbrlr:   r:   r;   r     s    
zTestTrigonometric.test_cbrtc                 C   s   t d}d}t||d d S )Ngfffff;@g鎖C@r{  )r    r   r   )r9   Zcb1Zcbrl1r:   r:   r;   test_cbrtmore  s    
zTestTrigonometric.test_cbrtmorec                 C   s&   t d}ttd }t||d d S )Nr  r   r{  r    r   r	   r   r   )r9   ZcdgZcdgrlr:   r:   r;   r     s    
zTestTrigonometric.test_cosdgc                 C   s&   t d}ttd }t||d d S NrK         @r{  r  )r9   ZcdgmZcdgmrlr:   r:   r;   test_cosdgmore  s    
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   rO   r{  )r    r   r   r	   r   )r9   csZcsrlr:   r:   r;   r      s     &zTestTrigonometric.test_cosm1c                 C   s*   t d}ttd d }t||d d S )NrK   r  rD   r{  r    r   r
   r   r   )r9   ctZctrlr:   r:   r;   r     s    
zTestTrigonometric.test_cotdgc                 C   s*   t d}ttd d }t||d d S )Nr   r   rD   r{  r  )r9   Zct1Zctrl1r:   r:   r;   test_cotdgmore
  s    
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   rs      r   r  r~   i   y   i  i;  i  )r   r    r   r8   r:   r:   r;   test_specialpoints  s    z$TestTrigonometric.test_specialpointsc                 C   s&   t tdgd ttdd d S )Nr   rO   r~   rs   )r   r    Zsincr   r8   r:   r:   r;   	test_sinc  s    zTestTrigonometric.test_sincc                 C   s   t d}t|d d S r  )r    r  r   )r9   Zsnr:   r:   r;   r  #  s    
zTestTrigonometric.test_sindgc                 C   sH   t d}ttd }t||d t d}ttd }t||d d S )NrK   r  r{  r   r   )r    r  r   r   r   )r9   ZsnmZsnmrlZsnm1Zsnmrl1r:   r:   r;   test_sindgmore'  s    

z TestTrigonometric.test_sindgmoreN)r  r  r  r   r  r   r  r   r   r  r  r  r  r  r:   r:   r:   r;   r    s   r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestTandgc                 C   s&   t d}ttd }t||d d S r  r    r  r
   r   r   )r9   tnZtnrlr:   r:   r;   r	  2  s    
zTestTandg.test_tandgc                 C   sH   t d}ttd }t||d t d}ttd }t||d d S )Nr   r   r{  r  r   r  )r9   ZtnmZtnmrlZtnm1Ztnmrl1r:   r:   r;   test_tandgmore7  s    

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   rs   r  r   r  r  rz  iLr  r  r  r  )r   r    r  r8   r:   r:   r;   r  ?  s    zTestTandg.test_specialpointsN)r  r  r  r	  r  r  r:   r:   r:   r;   r  0  s   r  c                   @   sT   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.rr   N)r    r   rT   r   r8   r:   r:   r;   test_ellipj_nanN  s    zTestEllip.test_ellipj_nanc                 C   s0   t dd}tdtdddg}t||d d S )Nr   r   rs      )r    r   r   r	   r   )r9   elrelr:   r:   r;   r   R  s    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~   rs   rA   rD   gN?)
r    r"   r   r   r#   rT   r   r   r   r   )r9   elkr:   r:   r;   r   W  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 )NrA   r   rk   ra   rz  r   gfoKh?r{  r~   rs   r   rr   gt?rO   rB   r  rH   6<R!?r  gfON?)r    r   r   r"   r   r   r   rT   r   r   r   )r9   Zelkincr  alphaphir  r:   r:   r;   r   b  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   rO   gV^8j?g,j6Ƅ@rA   )	rT   	nextafterrf   appendr    r   r   	full_liker   r9   Zmbadr  r  Zmvalsjr  f1r:   r:   r;   test_ellipkinc_2  s    
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   rA   Fr  rO   r  rH   )rT   rb   r  r   r   r    r   Zarcsinhr
   r   r   )r9   ZxlogZxlinZxlin2r:   r:   r;   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~   rA   rs   r  g?eg@)	r    r!   r   r   r   rT   r   r   r   )r9   eler:   r:   r;   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 )NrA   r   r  4   rz  #   g'?r{  r~   rs   r   rr   r  r  gL@)r    r   r   r!   r   r   r   rT   r   r   r   )r9   Zeleincr  r  r  r  r:   r:   r;   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   rO   g%?rA   gXo
@r?   )	rT   r  rf   r  r    r   r   r  r   r  r:   r:   r;   test_ellipeinc_2  s    
zTestEllip.test_ellipeinc_2N)r  r  r  r  r   r   r   r  r  r   r   r  r:   r:   r:   r;   r  M  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s4J tdtdtdksLJ 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| ||  qd S )NrO   r~   r   r}  g      @r   r                rq  r   y
c?
cy=B?CGֿr   y檠f?P9lb?)
r   r$   r   r   r   r   rT   r   r   	enumerater9   rp  Zexpected_resultsri   arrr:   r:   r;   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sRJ ttddtddsnJ ttddtddsJ ttddttjj	 d sJ ttddtddsJ t
g d	g d
g dg dg dg dg}t
g d}t|D ]\}}t t| ||  qd S )NrO   r   rA   r   g`C+?r~   r   rD   )r~   r   rs   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   rT   rS  r   r   r   r   tinyr   r  r  r:   r:   r;   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s8J ttdddsNJ ttdddsbJ tttdddkszJ ttddtt dsJ tg dg dg d	g d
g dg dg dg}tg d}t|D ]\}}t t| ||  qd S )NrO   r   rA   gPO?r~   rD   )rs   r   r~   )r   r  r~   )rr   rs   r~   r  r   r~   r  r  )r  r         ?      )geQO?ʞu5J?r  yp\y?kg2ΰ?gHwд?y|pF?-6Fj)	r   r&   r   rT   rS  r   r   r   r  r  r:   r:   r;   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sLJ ttttddsfJ 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| ||  qd S )NrO   r   rr   )r~   rg  rg  r  r  r  )r  r  r   )r~   g8d`?r   gL+?g}^?y旮0?ʋW?yjN?^?gt?)	r   r'   rT   rS  r   r   r   r   r  r  r:   r:   r;   test_elliprg$  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sVJ tdddtdkslJ 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| ||  qd S )NrO   r~   r   rD   )r~   rs   r   r   )r   r   r   rz   )r   r   r   r  )r   r  r~   r   )r              rs   r   )r   r  r~   r  )r  r  rs   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  r:   r:   r;   test_elliprj9  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|>ri  r  r  g   ,@g    x=g   @e:g   `ݽ>g(HR)A)r   r(   r8   r:   r:   r;   test_elliprj_hardT  s     z"TestEllipCarlson.test_elliprj_hardN)r  r  r  rW  r  r  r  r  r  r   r  r  r  r:   r:   r:   r;   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   rs   r   r   rD   r~   )rT   r   Zm_n1_1r   r   minZmax_neglog2Z
very_neg_mZconcatenate
ms_up_to_1r8   r:   r:   r;   setup_classj  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~   rs   N)r  r   r"   r&   r9   r  r:   r:   r;   test_kv  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~   rs   N)	r   r   r  r   rT   r  r   r#   r&   )r9   r  m1r:   r:   r;   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~   rs   N)r  r   r!   r'   r  r:   r:   r;   test_e  s    z)TestEllipLegendreCarlsonIdentities.test_eN)r  r  r  rW  r  r  r  r  r:   r:   r:   r;   r  d  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   s   t d}t|dd d S )Nr}  g);T?r{  )r    r   r   )r9   Zerr:   r:   r;   r     s    
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'>@r?   )r    Z	erf_zerosr   r   )r9   ZerzZerzrr:   r:   r;   test_erf_zeros  s    
zTestErf.test_erf_zerosr   c                 C   s  t jd d}t jd|dt jdd| d  }t jd|dt jdd| d  }|d|  }t jdd	z ||}	||j}
t |	}|	| }	|| }t |
}|
| }
|| }t||	|||d
 t||
|||d
 W d    n1 s0    Y  d S )NrJ   r  g{Gz?rA   r   rO   r   ignoreallr  )	rT   rZ   r[   paretorandintrv  r   isfiniter2   )r9   ro  Z
other_funcrI   rS   r\   r   r   r   r  Zw_realmaskr:   r:   r;   _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 rd   r6   r   r   r:   r:   r;   <lambda>  r  z.TestErf.test_erfc_consistent.<locals>.<lambda>ro   r  r  )r  r6   r   r8   r:   r:   r;   test_erfc_consistent  s    zTestErf.test_erfc_consistentc                 C   s   | j tjdd dd d S )Nc                 S   s   t | |  t|  S r3  )rT   r   r6   r   r  r:   r:   r;   r    r  z/TestErf.test_erfcx_consistent.<locals>.<lambda>ro   rH   )r  r6   erfcxr8   r:   r:   r;   test_erfcx_consistent  s
    zTestErf.test_erfcx_consistentc                 C   s   | j tjdd dd d S )Nc                 S   s   dt d|   S )Nr  r   r  r  r:   r:   r;   r    r  z.TestErf.test_erfi_consistent.<locals>.<lambda>ro   rH   )r  r6   erfir8   r:   r:   r;   test_erfi_consistent  s
    zTestErf.test_erfi_consistentc                 C   s   | j tjdd dd d S )Nc                 S   s&   t td t|  |   t|  S rN  )r   r   rT   r   r6   r   r  r:   r:   r;   r    r  z/TestErf.test_dawsn_consistent.<locals>.<lambda>ro   rH   )r  r6   r   r8   r:   r:   r;   test_dawsn_consistent  s
    zTestErf.test_dawsn_consistentc                 C   s6   t jt j t jg}t jddg}tt||dd d S )NrD   rO   r   rH   )rT   r   r   r   r    r   r9   r  r   r:   r:   r;   test_erf_nan_inf  s    zTestErf.test_erf_nan_infc                 C   s6   t jt j t jg}t jddg}tt||dd d S )NrA   r   r   rH   )rT   r   r   r   r    r   r  r:   r:   r;   test_erfc_nan_inf  s    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   rH   )rT   r   r   r   r    r  r  r:   r:   r;   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   rH   )rT   r   r   r   r    r   r  r:   r:   r;   test_erfi_nan_inf  s    zTestErf.test_erfi_nan_infc                 C   s6   t jt j t jg}t jddg}tt||dd d S )Nre  r~   r   rH   )rT   r   r   r   r    r   r  r:   r:   r;   test_dawsn_nan_inf  s    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   rH   )rT   r   r   r   r    r  r  r:   r:   r;   test_wofz_nan_inf  s    zTestErf.test_wofz_nan_infN)r   )r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r	  r:   r:   r:   r;   r    s   	
r  c                   @   s   e Zd Zdd ZdS )	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 ]8}|d rt||  |d| < qxt|| |d| < qxtjdd( t|| | }t	|}	W d    n1 s0    Y  t
|	dd d S )Nr   rO   rA   r   rH   )rO   r   rD   r   )rO   rO   r   =   ii  iY  i=) il   Q~ l   10[l   $8gC
 l   2l   v}Ju: )r   dr  r  r  r~   r  )r    Zeulerr   r   rf   rg   rT   rv  r   r  r   )
r9   Zeu0Zeu1Zeu2Zeu24Z	mathworldcorrectr]   errZerrmaxr:   r:   r;   
test_euler  s"    




&zTestEuler.test_eulerN)r  r  r  r  r:   r:   r:   r;   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S )TestExpc                 C   s   t d}d}t|| d S )NrA   r?   )r    r   r   r9   exZexrlr:   r:   r;   r     s    
zTestExp.test_exp2c                 C   s   t d}d}t||d d S )Nrb  g;f@r{  )r    r   r   r9   ZexmZexmrlr:   r:   r;   test_exp2more  s    
zTestExp.test_exp2morec                 C   s   t d}d}t|| d S )NrA   r  )r    r   r   r  r:   r:   r;   r     s    
zTestExp.test_exp10c                 C   s   t d}d}t||d d S )Nrb  gYs@r{  )r    r   r   r  r:   r:   r;   test_exp10more  s    
zTestExp.test_exp10morec                 C   sN   t dt dt df}tdd tdd tdd f}t||d d S )NrA   rv   r?   rO   r{  r    r   r   r   r  r:   r:   r;   r      s    "zTestExp.test_expm1c                 C   sN   t dt dt df}tdd tdd tdd f}t||d d S )NrA    @皙@rO   r{  r  )r9   Zex1Zexrl1r:   r:   r;   test_expm1more%  s    "zTestExp.test_expm1moreN)	r  r  r  r   r  r   r  r   r  r:   r:   r:   r;   r    s   r  c                   @   s
  e Zd Zejdddg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ddgejjde	j
de	dgg dd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ddee	je	je	je	je	je	je	je	jg
ejdedddd Zejdddgejdedddd Zejded d!d"d#d$ Zejdeedd%eed d!d" d&d' Zd(d) Zejde	je	je	je gejdddgejdeddejjdg dgd*ge	j
ge	j
dggg d+dd,d- Z!ejdddgejjddd*d.e	j
dgg d/dd0d1 Z"ejded d!d2d3d4 Z#ejdeedd%eed d!d2 d5d6 Z$ejde	je	je	je gejdddgejdeddejjdg dge	j
ge	j
dggg d7dd8d9 Z%ejdddgejjddd*d.e	j
dgg d/dd:d; Z&ejd<eddejded=d>d?d@dA Z'ejd<eeddd"d>g ejdeedd%eed%dBd2 dCdD Z(ejde	je	je	je gejdddgejdeddejjdg dge	j
ge	j
dggg d7ddEdF Z)ejdg dGejd<eddejjddd*d.e	j
dgg d/ddHdI Z*ejd<dd*e	j
dJgdKdL Z+ejdddgejd<eddMdNdO Z,dPdQ Z-dS )RTestFactorialFunctionsr}  TFc                 C   sN   t tjd|dsJ t tjd|ds0J t tjdd|dsJJ d S )NrO   r|  rv   )rT   Zisscalarr    	factorial
factorial2
factorialk)r9   r}  r:   r:   r;   "test_factorialx_scalar_return_type,  s    z9TestFactorialFunctions.test_factorialx_scalar_return_typer\   )rD   rm  c                 C   sB   t tj||dd t tj||dd t tj|d|dd d S )Nr|  r   rv   )r   r    r  r  r  )r9   r}  r\   r:   r:   r;   test_factorialx_negative2  s    z/TestFactorialFunctions.test_factorialx_negativec                 C   sf   |rt nt}|tjg d|dg d |tjg d|dg d |tjg dd|dg d d S )N)r  r   rO   r|  )r   r   rO   rO   rv   )r   r   r    r  r  r  )r9   r}  assert_funcr:   r:   r;   test_factorialx_negative_array9  s    z5TestFactorialFunctions.test_factorialx_negative_arraycontentNZnat)NaNNoneZNaT)Zidsc                 C   s|  t j||dtju sJ t j||dtju s0J t j|d|dtju sJJ |tjurtjtdd  t j|g|d W d    q1 s0    Y  nb|rtjtdd  t j|g|d W d    q1 s0    Y  nt	t j|g|dd sJ tjtdd  t j|g|d W d    n1 s,0    Y  tjtdd" t j|gd|d W d    n1 sn0    Y  d S )	Nr|  rv   zUnsupported datatype.*r   factorial with `exact=Tr.*r   zfactorial2 does not support.*zfactorialk does not support.*)
r    r  rT   r   r  r  r   r   
ValueErrorr   )r9   r$  r}  r:   r:   r;   test_factorialx_nanD  s    
000z*TestFactorialFunctions.test_factorialx_nanlevelsrO   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 )NrO   c                    s"   |dkr| S  | | g|d S 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   rO   Nr:   r   r]   _nest_mer:   r;   r-  `  s    zDTestFactorialFunctions.test_factorialx_array_shape.<locals>._nest_mec                    s4   t j |dtd}t| t j|t j d S )Nr]   dtype)rT   r   objectr   r   r   )resZnucleusr   r-  r*  r:   r;   _checkm  s    zBTestFactorialFunctions.test_factorialx_array_shape.<locals>._checkr   r   r.  r~  rk   Tr|  r   rv   r  rA   )rO   )rT   r   mathr  r    r  r  )r9   r*  r}  r4  r\   exp_nucleusr:   r3  r;   test_factorialx_array_shape]  s    z2TestFactorialFunctions.test_factorialx_array_shaper0  dimr   c                 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   )r0  ndminr~  rk   r   r  r|  rO   r9  rA   rv   )rT   r   r   r    r  r  r  )r9   r8  r0  r}  r\   r   r:   r:   r;   test_factorialx_array_dimension}  s    z6TestFactorialFunctions.test_factorialx_array_dimensionlevelc                    s   d fdd	  dg|d d}dddd	}|r4t 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 )NrO   c                    s    |dkr| S  | g|d S d S r   r:   r+  r,  r:   r;   r-    s    zCTestFactorialFunctions.test_factorialx_array_like.<locals>._nest_mer   r.  r~  rk   r   r  r|  r:  rA   rv   )rO   )r   r   r    r  rT   r   r  r  )r9   r<  r}  r\   r6  r"  r:   r,  r;   test_factorialx_array_like  s    z1TestFactorialFunctions.test_factorialx_array_likerK   rz  r   c                 C   sh   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 )Nwin32t0=r   Tr|  FrH   )sysplatformr   rg   r    r  r   r9   r\   rI   r:   r:   r;   test_factorial_accuracy  s    z.TestFactorialFunctions.test_factorial_accuracy   c                 C   s   t |}t|t|d t|t|gdd  tjdkrBdnd}tt|t|d|d tt|t|gdd |d d S )NTr   r>  r?  r   FrH   )r5  r  r   r    r@  rA  r   rg   )r9   r\   r  rI   r:   r:   r;   test_factorial_int_reference  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 t| | t t| gd | tjdd$ t tj| dd| W d    n1 s\0    Y  tjtdd  tj| gdd W d    n1 s0    Y  d S )Nr   Non-integer values.*r   Tr|  r'  )r   r    r  r   r   r   r(  )r\   r   r:   r:   r;   r4    s    2zETestFactorialFunctions.test_factorial_float_reference.<locals>._checkr   gr?g(\?gc?g333333@g4s@g333333&@gމOAgfffff@@g	²Gg     K@gC$JOglS@g }WgX@gX>%`g\CSe@gG=r:   )r9   r4  r:   r:   r;   test_factorial_float_reference  s    







z5TestFactorialFunctions.test_factorial_float_referencers  )[][1]z[1.1][NaN][NaN, 1]c                 C   s  |t jkr&tdd |D r&td |dks:t|dkr>|n|d }t j|||d}d }|sntj||d}nt 	|j
t jst 	|j
t jstjtdd	 tj||d W d    n1 s0    Y  nf|r$t 	|j
t js$tjtd
d	 tj||d W d    n1 s0    Y  ntj||d}dd }|d ur|jrT| n|}|jrntj||dng }	t j|	||d}
|||
 d S )Nc                 s   s   | ]}t |V  qd S r3  rT   r   r  r   r:   r:   r;   	<genexpr>  r  zKTestFactorialFunctions.test_factorial_array_corner_cases.<locals>.<genexpr>impossible combinationr   rO   r9  r0  r|  Unsupported datatype*r   zfactorial with `exact=.*c                 S   s:   t | t |ks,J dt |  dt | t| | d S )Nztypes not equal: z, )typer   r   r   r:   r:   r;   assert_really_equal  s    ,zUTestFactorialFunctions.test_factorial_array_corner_cases.<locals>.assert_really_equal)rT   r  anyr   skiplenr   r    r  
issubdtyper0  integerfloatingr   r(  ndimrY   r   )r9   r$  r8  r}  r0  r\   r  rT  Zn_flatrm  r   r:   r:   r;   !test_factorial_array_corner_cases  s,    	
 .0
z8TestFactorialFunctions.test_factorial_array_corner_casesy       @       @)1z1.1z2+2jr%  r&  c                 C   s  |d u s6|t ju s6t t|t js6t t|t jrt t|t jr|r|t jurtjdd tj	||d}W d    q1 s0    Y  ntj	||d}|t ju s|d u rt jnt	|}t
|| n>tjtdd tj	||d W d    n1 s0    Y  d S )NrF  r   r|  rQ  )rT   r   rX  rR  rY  rZ  r   r   r    r  r   r   r(  r9   r\   r}  r  r   r:   r:   r;   "test_factorial_scalar_corner_cases  s    $."z9TestFactorialFunctions.test_factorial_scalar_corner_casesr   c                 C   sh   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>  g+=r   Tr|  FrH   )r@  rA  r   rg   r    r  r   rB  r:   r:   r;   test_factorial2_accuracy	  s    z/TestFactorialFunctions.test_factorial2_accuracyc                 C   s|   t tjtt|ddd}t|t|d t|t|gdd  t	t
|t|d t	t
|t|gdd  d S )Nr   rm  rO   TF)	functoolsreduceoperatormulr  rf   r   r    r  r   rg   )r9   r\   r  r:   r:   r;   test_factorial2_int_reference	  s
    z4TestFactorialFunctions.test_factorial2_int_reference)rH  rI  rJ  rK  c                 C   s   |t jkr&tdd |D r&td |dks:t|dkr>|n|d }t j|||d}t |jt j	sj|st
j||d}|s|stnt}||| n:tjtdd	 t
|d
 W d    n1 s0    Y  d S )Nc                 s   s   | ]}t |V  qd S r3  rL  rM  r:   r:   r;   rN  3	  r  zLTestFactorialFunctions.test_factorial2_array_corner_cases.<locals>.<genexpr>rO  r   rO   rP  r|  factorial2 does not*r   rv   )rT   r  rU  r   rV  rW  r   rX  r0  rY  r    r  r   r   r   r(  )r9   r$  r8  r}  r0  r\   r  ro  r:   r:   r;   "test_factorial2_array_corner_cases+	  s    
 z9TestFactorialFunctions.test_factorial2_array_corner_casesc                 C   s   |d u s$|t ju s$t t|t jr`tj||d}|t ju sD|d u rJt jnt|}t|| n<t	j
tdd tj||d W d    n1 s0    Y  d S )Nr|  rf  r   )rT   r   rX  rR  rY  r    r  r  r   r   r   r(  r^  r:   r:   r;   #test_factorial2_scalar_corner_casesC	  s    $"z:TestFactorialFunctions.test_factorial2_scalar_corner_casesr]   rU  ra   ic                 C   sV   t ttj||ddtj||dd t tj|g|ddttj|g|dd d S )NTr]   r}  F)r   rg   r    r  r   )r9   r\   r]   r:   r:   r;   test_factorialk_accuracyP	  s    	z/TestFactorialFunctions.test_factorialk_accuracyr  c                 C   s   t tjtt|d| d}t|t||d t|t|g|dd  t	t
|t||d t	t
|t|g|dd  d S )Nr   rO   TF)ra  rb  rc  rd  r  rf   r   r    r  r   rg   )r9   r\   r]   r  r:   r:   r;   test_factorialk_int_reference^	  s
    z4TestFactorialFunctions.test_factorialk_int_referencec                 C   s   |t jkr&tdd |D r&td |dks:t|dkr>|n|d }t j|||rV|nt jd}t |j	t j
st|sttj|d|d| n>tjtd	d
  tj|d|d W d    n1 s0    Y  d S )Nc                 s   s   | ]}t |V  qd S r3  rL  rM  r:   r:   r;   rN  v	  r  zLTestFactorialFunctions.test_factorialk_array_corner_cases.<locals>.<genexpr>rO  r   rO   rP  rv   r|  factorialk does not*r   )rT   r  rU  r   rV  rW  r   r   rX  r0  rY  r   r    r  r   r(  )r9   r$  r8  r}  r0  r\   r:   r:   r;   "test_factorialk_array_corner_casesn	  s    
 z9TestFactorialFunctions.test_factorialk_array_corner_cases)TFNc              	   C   s  |d u s$|t ju s$t t|t jr|d u rjtjdd  tj|||d}W d    qz1 s^0    Y  ntj|||d}|t ju p|d u }|rt jnd}t	|| nrtj
tddR t ,}|td tj|||d W d    n1 s0    Y  W d    n1 s0    Y  d S )Nzfactorialk will default.*r   ri  rO   rl  zfactorialk will default)rT   r   rX  rR  rY  r   r   r    r  r   r   r(  r   rp  r  )r9   r\   r]   r}  r  Znan_condr   rs  r:   r:   r;   #test_factorialk_scalar_corner_cases	  s    $0z:TestFactorialFunctions.test_factorialk_scalar_corner_casesr]  c                 C   s>   t jtdd td| W d    n1 s00    Y  d S )Nzk must be a positive integer*r   rO   )r   r   r(  r    r  r  r:   r:   r;   test_factorialk_raises_k	  s    z/TestFactorialFunctions.test_factorialk_raises_kr|  c                 C   sH  ||d}|r|t  v rt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sJ 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sDJ n>tt |dg}|r$tntj}ttj|fi |j| d S )Nri  rO   )r/   keysrT   r   r0   r   r    r  r0  r-   r  r  int32r  r1  getr   )r9   r]   r}  kwr\   r0  r:   r:   r;   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    n1 sv0    Y  d S )
NrO   rA   rv   rE   Fr|  zfactorial with `exact=True.*r   T)	rT   r   r   r   r    r  r   r   r(  )r9   r   r   r:   r:   r;   test_factorial_mixed_nan_inputs	  s
    z6TestFactorialFunctions.test_factorial_mixed_nan_inputs).r  r  r  r   r  ry  r  r   r#  rT   r   Z
datetime64r)  rf   r7  re   Zint8Zint16rq  r  Zuint8Zuint16Zuint32Zuint64r;  r=  rC  r  rE  rG  r   
complex128r1  r\  r_  r`  re  rg  rh  rj  rk  rm  rn  ro  rt  ru  r:   r:   r:   r;   r  +  s   





#




r  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)rr   gN?ց[?)y      ?        rx  ry  )y       ?yn<ӿj<Cy)BR;߿ux7Q?)y      yھ|}-2?y/?!ۿ)r  GM?pBR?)y      @        rz  r{  )y              @y       GMܿy        pBR?)y              gGMܿgpBR߿)y             y        GM?y       pBR߿rr   r  c                 C   s&   t t|}t|t ||gd d S )Nr{  )r   r    r  r   )r9   r   r  rr  frsr:   r:   r;   test_fresnel_values	  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@Ǻ?rv   )y.1?ǘ?yʡE6@:#J{/?yq-
@y&1?yh o@߾3?yW2q@qh?r   rO   r  )r    fresnel_zerosr   r   r  )r9   szoczoZvals1Zvals2r:   r:   r;   test_fresnel_zeros	  s    

zTestFresnel.test_fresnel_zerosc                 C   s(   t d\}}t d}t||d d S )NrE   r|  )r    r~  Zfresnelc_zerosr   )r9   r  r  Zfrcr:   r:   r;   test_fresnelc_zeros	  s    
zTestFresnel.test_fresnelc_zerosc                 C   s(   t d\}}t d}t||d d S )Nr   r|  )r    r~  Zfresnels_zerosr   )r9   r  r  r|  r:   r:   r;   test_fresnels_zeros	  s    
zTestFresnel.test_fresnels_zerosN)r  r  r  r   r  ry  rT   r   r}  r  r  r  r:   r:   r:   r;   rw  	  s"   

rw  c                   @   sL   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
dS )	TestGammac                 C   s   t d}t|d d S r  )r    r
  r   )r9   Zgamr:   r:   r;   r  
  s    
zTestGamma.test_gammac                 C   s(   t d}tt d}t||d d S )Nrv   r{  )r    r  r   r
  r   )r9   ZgamlnZlngamr:   r:   r;   r  
  s    
zTestGamma.test_gammalnc                 C   s(   t dd}t dd}t||d d S )Nrr   r{  )r    r  gammaincinvr   )r9   ZgccinvZgcinvr:   r:   r;   r  

  s    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 )
NrB   rO   r   g?g`	\;r   r  gmb<g      &@)r    r  gammaincr   r9   r   r   r:   r:   r;   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?rO   g^F    ?rB   ro   rH   )rT   r  r    r  r  r   )r9   ZptsZxpr   r   r:   r:   r;   test_975
  s    zTestGamma.test_975c                 C   s(   t d}dt d }t||d d S )Nr{  rO   )r    r  r
  r   )r9   ZrgamZrlgamr:   r:   r;   r  (
  s    
zTestGamma.test_rgammac                 C   s(   t ttd ttdd d S )NrD   r   )r   rT   rS  r    r
  r   r  r8   r:   r:   r;   test_infinity-
  s    zTestGamma.test_infinityN)r  r  r  r  r  r  r1   r  r  r  r  r:   r:   r:   r;   r   
  s   

r  c                   @   sL   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S )
TestHankelc                 C   s"   t tddtdd d d S Nr  rA   rv   r  )r   r    r  r8   r:   r:   r;   
test_negv14
  s    zTestHankel.test_negv1c                 C   s8   t dd}t ddt ddd  }t||d d S NrO   r   r   r{  )r    r  rJ  r  r   )r9   Zhank1Zhankrlr:   r:   r;   r   7
  s    zTestHankel.test_hankel1c                 C   s"   t tddtdd d d S r  )r   r    r!  r8   r:   r:   r;   test_negv1e<
  s    zTestHankel.test_negv1ec                 C   s0   t dd}t ddtd }t||d d S )NrO   r   y       r{  )r    r!  r  r   r   )r9   Zhank1eZhankrler:   r:   r;   r"  ?
  s    zTestHankel.test_hankel1ec                 C   s"   t tddtdd d d S r  )r   r    r#  r8   r:   r:   r;   
test_negv2D
  s    zTestHankel.test_negv2c                 C   s8   t dd}t ddt ddd  }t||d d S r  )r    r#  rJ  r  r   )r9   Zhank2Zhankrl2r:   r:   r;   r$  G
  s    zTestHankel.test_hankel2c                 C   s"   t tddtdd d d S r  )r   r    r%  r8   r:   r:   r;   
test_neg2eL
  s    zTestHankel.test_neg2ec                 C   s(   t dd}t dd}t||d d S )NrO   r   r{  )r    r%  r   )r9   Zhank2eZhankrl2er:   r:   r;   test_hankl2eO
  s    zTestHankel.test_hankl2eN)r  r  r  r  r   r  r"  r  r$  r  r  r:   r:   r:   r;   r  2
  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   s8   t dd}t ddt ddd  }t||d d S r  )r    Zh1vpjvpyvpr   )r9   Zh1Zh1realr:   r:   r;   	test_h1vpV
  s    zTestHyper.test_h1vpc                 C   s8   t dd}t ddt ddd  }t||d d S r  )r    Zh2vpr  r  r   )r9   Zh2Zh2realr:   r:   r;   	test_h2vp[
  s    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 )Nrb  rr   Qvo?ro   rH   r   rs   r   r   )g      rD   r   rO   r  )g̷?g3|t-Ք?rs   go?g{h?r   rr   r  rb  )r   rO   rr   )rs   gc?r  rA   rv   rO   )
r   r    hyp0f1rT   r   r   r   vstackassert_raisesr(  )r9   r   r   r`  Zx2r:   r:   r;   test_hyp0f1`
  s"    zTestHyper.test_hyp0f1c                 C   s   t dd}t|d d S )N皙?      ?      ?y;EG?uM?)r    r  r   )r9   r2  r:   r:   r;   test_hyp0f1_gh5764z
  s    zTestHyper.test_hyp0f1_gh5764c              f   C   s  t ddd}t|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 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gd}|D ]4\}}}}t |||}tt|| | dik  q~d S )jNr   r   g?rC   )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!  )r9   hyp1Zref_datar"  r#  rr  r   r  r:   r:   r;   r)  
  s    gzTestHyper.test_hyp1f1c                 C   s,   t ddd}t ddd}t||d d S )Nrr   r  g7B.g|:B.r|  r    r(  r   )r9   r  Zhyp2r:   r:   r;   test_hyp1f1_gh2957
  s    zTestHyper.test_hyp1f1_gh2957c                 C   s   t ddd}t|dd d S )Nrr   r  ig<`?r|  r  )r9   Zhypr:   r:   r;   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 ]8\}\}}}}}t	||||}t
||dd&| d' qPd S )(Nrr   rO   r  |Gz?rb  g?g|Gzrz   r   rA   r  r  )rv   r  r  r  gYi2?r  rv   g433333?r?   r{  r   rD   re  r   g      ?r   r  g      gUUUUUUտg  @gUUUUUU?g)r  r  rs         $gEciH!@)rm  rv   rO   r  gzG?)rA   r  rO   r  gy&1|)r'  rv   rO   r  g"nN%@?)rA   r!  rO   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  r*  r   )	r9   r   ri   r"  r#  rr  r   r  cvr:   r:   r;   r+  
  sX    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 )NrO   r   r  g D?rC   )r   r  333333?g)r  g	@r  g	rr   rA   r|  )	r    hyperur   r   r   r   r(  r
  r   )r9   Zval1r"  r#  r   ZhypuZhprlr:   r:   r;   test_hyperu"  s    $zTestHyper.test_hyperuc                 C   s   t tddddd d S )NrO   r  g3333334@g(¨?r|  )r   r    r  r8   r:   r:   r;   test_hyperu_gh2287/  s    zTestHyper.test_hyperu_gh2287N)r  r  r  r  r  r  r  r)  r  r  r+  r  r  r:   r:   r:   r;   r  U
  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` Z2ddddeZ3e4j5j6e78 dfkdgdhdidj Z9e4j5j6e78 dfkdgdhdkdl Z:dmdn Z;dodp Z<e4j5j=dqdr Z>dsdt Z?dudv Z@dwdx ZAdydz ZBd{d| ZCd}d~ ZDdd ZEdddZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdcS )
TestBesselc                 C   s&   t td}t|t ddgd d S )Nr   gbɃ?gΝJ ֿr{  )r   r    r<  r   )r9   Zit0r:   r:   r;   r=  5  s    
zTestBessel.test_itj0y0c                 C   s&   t td}t|t ddgd d S )Nr   gbqTtt?g/]ooۿr{  )r   r    r6  r   )r9   Zit2r:   r:   r;   r7  =  s    
zTestBessel.test_it2j0y0c                 C   s   t tddtdd d S Nrv   rA   r  )r   r    r@  r8   r:   r:   r;   test_negv_ivE  s    zTestBessel.test_negv_ivc                 C   s&   t d}t dd}t||d d S Nr   r   r{  )r    rD  rH  r   r9   ZozZozrr:   r:   r;   rE  H  s    
zTestBessel.test_j0c                 C   s&   t d}t dd}t||d d S Nr   rO   r{  )r    rF  rH  r   r9   Zo1Zo1rr:   r:   r;   rG  M  s    
zTestBessel.test_j1c                 C   s   t dd}t|dd d S )NrO   r   ;x?r{  )r    rH  r   )r9   Zjnnrr:   r:   r;   rI  R  s    zTestBessel.test_jnc                 C   s"   t tddtdd d d S r  )r   r    rJ  r8   r:   r:   r;   test_negv_jvV  s    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˿+>)r  rQ   g)%->)g@rQ   g5c)!9)r  r   g%,Ϳr{  r  r  )r  r    rJ  r   )r9   r   ri   r  r   r   Zycr:   r:   r;   rK  Y  s    zTestBessel.test_jvc                 C   s"   t tddtdd d d S r  )r   r    rL  r8   r:   r:   r;   test_negv_jved  s    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 )NrO   r   r  r{  ?      ?)r    rL  r   rJ  r   r!  r   )r9   ZjvexpZjvexp1r   Zjvexprr:   r:   r;   rM  g  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   rO   )go@.=@gzj,[@glN!@g5/ D'@gh>-@r?   gW@g0@gQX$@g*@g8*5{x0@rN   )gEk[@g~Cju]@gYrʝ^@g, `@gf	`@rG   rH   -  )gts@g&ǭr3t@gWt@g,$Y&u@gu@)r    jn_zerosr   r   r   )r9   jn0Zjn1Zjn102Zjn301r:   r:   r;   test_jn_zeroso  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   r`   i  g;@rG   rH   i  g8v@i+  gׂMm@r   gxi@g	,@gи{>@i  r   )gUDX@g!@g*HS@gz5 @g@2;@r  )r    r  r   r   )r9   r  Zjn10Zjn3010r:   r:   r;   test_jn_zeros_slow  s    zTestBessel.test_jn_zeros_slowc           
         s   t j  fdd}tddD ]v}t |\}}}}t|||D ]R\}}}	|	dkrft ||ddd q>|	dkrt|||ddd q>td| q>qd S )	Nc                    s     | d | | d | d S )NrO   rA   r:   )r\   r   rH  r:   r;   jnp  s    z(TestBessel.test_jnjnp_zeros.<locals>.jnprO   rK   r   r   r  zInvalid t return for nt=%d)r    rH  rf   Zjnjnp_zeroszipr   AssertionError)
r9   r  ntr   r\   r  tzznnttr:   r  r;   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 )	NrO   r   g(yu?gOXeS@ga!@gxi'@g'Nw(-@r?     r   r   r  )r    Z	jnp_zerosr   r   r   r  )r9   r  r:   r:   r;   test_jnp_zeros  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 )NrO   r   r  r  )"@g+@g-9(1!@gȘ'@g>tA}-@)g0v@gjt@gH.?$@g}"O*@gGŧp0@)r    Z
jnyn_zerosr   r   )r9   Zjnzr:   r:   r;   test_jnyn_zeros  s    


zTestBessel.test_jnyn_zerosc                 C   s8   t dd}t ddt dd d }t||d d S )NrA   rO   rv   r   )r    r  rJ  r   )r9   ZjvprimZjv0r:   r:   r;   test_jvp  s    zTestBessel.test_jvpc                 C   s&   t d}t dd}t||d d S r  )r    rO  ri  r   )r9   ZozkZozkrr:   r:   r;   rP    s    
zTestBessel.test_k0c                 C   s&   t d}t dd}t||d d S r  )r    rQ  rk  r   )r9   ZozkeZozkerr:   r:   r;   rR    s    
zTestBessel.test_k0ec                 C   s&   t d}t dd}t||d d S r  )r    rS  ri  r   )r9   Zo1kZo1krr:   r:   r;   rT    s    
zTestBessel.test_k1c                 C   s&   t d}t dd}t||d d S r  )r    rU  rk  r   )r9   Zo1keZo1kerr:   r:   r;   rV    s    
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   rO   r   rA   rv   r  r   r?   r   rE   r|  r{  g      H@)rT   rZ   r    Zjacobir   rr  r   )
r9   r"  r#  ZP0ZP1ZP2ZP3cpZp2cZp3cr:   r:   r;   test_jacobi  s     &B2D8XzTestBessel.test_jacobic                 C   s   t dd}t|dd d S )Nr   r   _2?r{  )r    ra  r   )r9   Zkn1r:   r:   r;   rb    s    zTestBessel.test_knc                 C   s   t tddtdd d S Nr   r  r  r   r    ri  r8   r:   r:   r;   test_negv_kv  s    zTestBessel.test_negv_kvc                 C   s   t dd}t|dd d S )Nr   r   r  r   r    ri  r   )r9   Zkv0r:   r:   r;   test_kv0  s    zTestBessel.test_kv0c                 C   s   t dd}t|dd d S )NrO   r   gKދ@r   r  )r9   kv1r:   r:   r;   test_kv1  s    zTestBessel.test_kv1c                 C   s   t dd}t|dd d S )NrA   r   g)lHH@r   r  )r9   kv2r:   r:   r;   test_kv2  s    zTestBessel.test_kv2c                 C   s   t tddd d S )N    rO   g.Ք"H)r   r    ra  r8   r:   r:   r;   test_kn_largeorder  s    zTestBessel.test_kn_largeorderc                 C   s   t tddd d S )Nr   g =`XCr  r8   r:   r:   r;   test_kv_largearg  s    zTestBessel.test_kv_largeargc                 C   s   t tddtdd d S r  )r   r    rk  r8   r:   r:   r;   test_negv_kve  s    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{  r  )r    rk  ri  r   r   )r9   Zkve1r  r   Zkve2r  r:   r:   r;   rl    s    zTestBessel.test_kvec                 C   s*   d}t td| tjd|ddd d S )Nr  rO   r   r\   r   )r   r    ri  kvp)r9   r   r:   r:   r;   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  rO   r  r   r    ri  r  r   r9   r  r   Zxcr   r:   r:   r;   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  rA   rO   r  r   r  r  r:   r:   r;   test_kvp_n2(  s
    <zTestBessel.test_kvp_n2c                 C   s&   t d}t dd}t||d d S r  )r    r  r  r   r  r:   r:   r;   r  /  s    
zTestBessel.test_y0c                 C   s&   t d}t dd}t||d d S r  )r    r  r  r   r  r:   r:   r;   r  4  s    
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 )NrA   rO   r   r~   r   )r    Zy0_zerosr   r   r!  r  )r9   ZyoZypoZzoZzpor  Zallvalr:   r:   r;   test_y0_zeros9  s    zTestBessel.test_y0_zerosc                 C   s*   t d}t|tdgtdgfd d S )NrO   r  gѮBO?r   )r    Zy1_zerosr   r   )r9   r  r:   r:   r;   test_y1_zerosA  s    
zTestBessel.test_y1_zerosc                 C   s.   t jddd}t|tdgtdgfd d S )NrO   r  yL
F%u?!rh?y;OnгY?rv   )r    Z	y1p_zerosr   r   )r9   Zy1pr:   r:   r;   test_y1p_zerosE  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 )
Nr?   rA   g3@g(A&"@r   r  )g]E.+"|@gH(|@gff|}@g&b`~@gHO_~@r   rH   )r    Zyn_zerosr   r   r   )r9   Zanr:   r:   r;   test_yn_zerosM  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   rA   gQhվ@gzN@rE   +   r   r   r  r  r   )r    	ynp_zerosr   r   r   r  r9   Zaor:   r:   r;   test_ynp_zerosX  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  r:   r:   r;   test_ynp_zeros_large_order`  s    z%TestBessel.test_ynp_zeros_large_orderc                 C   s   t dd}t|dd d S NrO   r   5,1
r{  )r    r  r   )r9   Zyn2nr:   r:   r;   r  d  s    zTestBessel.test_ync                 C   s"   t tddtdd d d S r  )r   r    r  r8   r:   r:   r;   test_negv_yvh  s    zTestBessel.test_negv_yvc                 C   s   t dd}t|dd d S r  )r    r  r   )r9   Zyv2r:   r:   r;   r  k  s    zTestBessel.test_yvc                 C   s"   t tddtdd d d S r  )r   r    r  r8   r:   r:   r;   test_negv_yveo  s    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 )NrO   r   r  r{  r  rD   )r    r  r   r  r   )r9   Zyve2Zyve2rZyve22r:   r:   r;   r  r  s
    zTestBessel.test_yvec                 C   s8   t ddt dd d }t dd}t||d d S )NrO   r   rv   r   rA   r   )r    r  r  r   )r9   ZyvprZyvp1r:   r:   r;   test_yvpy  s    zTestBessel.test_yvpc                 c   sD   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)irL        4r  r   r  r~   rs   {G(@r{  r  )ir  rD   rs   r        i@g     y@g     Ă@g@  i'  Nrr   ir  r  )	itertoolsproductr   )r9   r  r   r:   r:   r;   _cephes_vs_amos_points~  s    z!TestBessel._cephes_vs_amos_pointsdy=r   Nc                 C   s   |   D ]\}}|d ur$|||r$q||||||d |t||  }}	}
t|rrtt|	dk||f qt|rt|	jdk||f qt||	||f||d |t|krt|
|	||f||d qd S )Nr   u <7~r   )r  rI   rS   )	r  re   rT   rS  r   r!  r   r   r   )r9   r  f2rI   rS   rV  r  r   c1c2c3r:   r:   r;   check_cephes_vs_amos  s    *

zTestBessel.check_cephes_vs_amosppc64lezfails on ppc64ler   c                 C   s   | j tjtjddd d S )NrQ   u5% r  )r  r    rJ  rH  r8   r:   r:   r;   test_jv_cephes_vs_amos  s    z!TestBessel.test_jv_cephes_vs_amosc                 C   s   | j tjtjddd d S )Nr  r
  r  r  r    r  r  r8   r:   r:   r;   test_yv_cephes_vs_amos  s    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   r:   r:   r;   skipper  s    zDTestBessel.test_yv_cephes_vs_amos_only_small_orders.<locals>.skipperr  r
  )rI   rS   rV  r  )r9   r  r:   r:   r;   (test_yv_cephes_vs_amos_only_small_orders  s    z3TestBessel.test_yv_cephes_vs_amos_only_small_ordersc                 C   sF   t jdd& | jtjtjddd W d    n1 s80    Y  d S )Nr  r  g:0y5>r
  r  )rT   rv  r  r    r@  r8   r:   r:   r;   test_iv_cephes_vs_amos  s    z!TestBessel.test_iv_cephes_vs_amosc           	   
   C   s|  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 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 s0    Y  t |}t|| dk || || t	|| || t	|| || d f d S )Ni@B rO   rr   rD   rA   )r   r   r{  r   r  r  r   r  gYngH׊>)rT   rZ   r[   r  r  r   r  rv  r    r@  r   r!  r   Zargmaxr   )	r9   r  r  r   Zimskr  r  Zdcr]   r:   r:   r;    test_iv_cephes_vs_amos_mass_test  s(    "".

6z+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    ri  ra  r8   r:   r:   r;   test_kv_cephes_vs_amos  s    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 )	Nrv   r?   gP?r  r  g~Omʒ?gY8E@@gKSn)r   r    rJ  r8   r:   r:   r;   test_ticket_623  s    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 BesselsrD   rO   gl)ܿrm  gPj?gk?g%E*2ig敋?gw--`?gÉB?gW?r  g޴?gz|?a?gpx%?y      ?              ?      ?yYD?`{1wy6x?B]#Ӯ?y ?b>?y.}9d?8kؿy      ?333333?rr  y333333?      ?r   N)r   r    rJ  r  r@  ri  rL  r   r  rB  rk  r  r#  r8   r:   r:   r;   test_ticket_853  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 domainsrr   rD   rO   r   rA   r?   N)r   r   r    rJ  r@  r  ri  rL  rB  r  rk  r=   r  rU  r8   r:   r:   r;   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    ri  rT   r   rk  r8   r:   r:   r;   test_gh_7909  s    zTestBessel.test_gh_7909c                 C   s(   t tddd t tddd dS )zReal-valued Bessel I overflowrO   i  g~rL   i`  g ?los~Nr   r    r@  r8   r:   r:   r;   test_ticket_503  s    zTestBessel.test_ticket_503c                 C   s   t tddd d S )Nr  rO   r  r  r8   r:   r:   r;   test_iv_hyperg_poles"  s    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   rA   rr   rO   rD   r   )r   r   r   r   r    r  r   r   r   r!  r  r   epssumr9   r  r   r\   r]   rr  r:   r:   r;   	iv_series%  s    8*zTestBessel.iv_seriesc                 C   s4   dD ]*}|  d|\}}tt||||d qd S )Nrs   r   r  r   rS   r  )r!  r   r    r,  r9   r   valuer  r:   r:   r;   test_i0_series-  s    zTestBessel.test_i0_seriesc                 C   s4   dD ]*}|  d|\}}tt||||d qd S )Nr"  rO   r#  )r!  r   r    r0  r$  r:   r:   r;   test_i1_series2  s    zTestBessel.test_i1_seriesc                 C   sD   dD ]:}dD ]0}|  ||\}}tt||||||fd qqd S )N)r  r  r   r~   rs   r  r{  )rs   r   r  y             @r#  )r!  r   r    r@  r9   r  r   r%  r  r:   r:   r;   test_iv_series7  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 ]4\}\}}t|t|  }t||dd| d q<d S )Nr~   rs   rQ   r   g0oO?rr   g!?grb?rb  gpH?rz   gC~?r   ggo?r{  r  r  )r  r    r,  r   r   r9   r   ri   r   r  r  r:   r:   r;   r-  =  s    	zTestBessel.test_i0c                 C   s&   t d}t dd}t||d d S r  )r    r.  rB  r   )r9   ZoizeZoizerr:   r:   r;   r/  K  s    
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 ]4\}\}}t|t|  }t||dd| d q6d S )Nr~   rQ   gj|=r   gȕ![1?rr   g;͘?rs   gRΜ?rz   g|?r   g}f?r{  r  r  )r  r    r0  r   r   r*  r:   r:   r;   r1  P  s    zTestBessel.test_i1c                 C   s&   t d}t dd}t||d d S r  )r    r2  rB  r   )r9   Zoi1eZoi1err:   r:   r;   r3  ]  s    
zTestBessel.test_i1ec                 C   s&   t td}t|t ddgd d S )Nr   gїJB?@g*u?)r   r    r:  r   )r9   Ziti0r:   r:   r;   r;  b  s    
zTestBessel.test_iti0k0c                 C   s"   t d}t|tddgd d S )Nr   gݳɄ|T?gVƥ
@rE   )r    r4  r   r   )r9   Zit2kr:   r:   r;   r5  j  s    

zTestBessel.test_it2i0k0c                 C   s$   t ddtd }t|dd d S )Nr   r   皙gv M?r   )r    r@  r   r   )r9   iv1r:   r:   r;   rA  r  s    zTestBessel.test_ivc                 C   s   t tddtdd d S r  )r   r    rB  r8   r:   r:   r;   test_negv_ivev  s    zTestBessel.test_negv_ivec                 C   s0   t dd}t ddtd }t||d d S )Nr   r   r+  r   )r    rB  r@  r   r   )r9   Zive1r,  r:   r:   r;   rC  y  s    zTestBessel.test_ivec                 C   s    t tddtddd d S )NrO   rA   r   r   )r   r    r@  ivpr8   r:   r:   r;   	test_ivp0~  s    zTestBessel.test_ivp0c                 C   s8   t ddt dd d }t dd}t||d d S )Nr   rA   rO   r   )r    r@  r.  r   r  r:   r:   r;   test_ivp  s    zTestBessel.test_ivp)r  r   N)r  )Ur  r  r  r=  r7  r  rE  rG  rI  r  rK  r  rM  r  r  r  r  r  r  rP  rR  rT  rV  r  rb  r  r  r  r  r  r  r  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rA  machiner  r  r  r  Zslowr  r  r  r  r  r  r  r  r!  r&  r'  r)  r-  r/  r1  r3  r;  r5  rA  r-  rC  r/  r0  r:   r:   r:   r;   r  4  s   
	



2
r  c                   @   s   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   rO   rA   rv   r?   r   r  rD   )rO   r  rA   r   )rD   r  irE   r  )rO   iH   ir   r	  )rD   r   i8iX  ir~  r{  )r    Zlaguerrer   rr  r   )r9   lag0lag1lag2lag3Zlag4Zlag5r:   r:   r;   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   rO   rA   rv   rD   rm  rs   r   r  r  )rT   rZ   r    r0  r   rr  r   r   )r9   r]   r4  r5  r6  r7  r:   r:   r;   test_genlaguerre  s    $>zTestLaguerre.test_genlaguerreN)r  r  r  r8  r9  r:   r:   r:   r;   r2    s   r2  c                   @   sR   e Zd Zdd Zejdg dejdg dejdg dd	d
 ZdS )TestLegendrec                 C   s   t d}t d}t d}t d}t d}t d}t|jdg t|jddg t|jtg dd d	d
 t|jtg dd  t|jtg dd  t|jtg dd  d S )Nr   rO   rA   rv   r?   r   )rv   r   rD   r   r  r   )r   r   r  r   )r  r   r  r   rv   r   )?   r   ir   rk   r   )r    Zlegendrer   rr  r   r   )r9   Zleg0Zleg1Zleg2Zleg3Zleg4Zleg5r:   r:   r;   test_legendre  s    





zTestLegendre.test_legendrer\   )rO   rA   rv   r?   r   zr)g?g{ɚ)@gue#gbLd?g7f?zi)go^#@g"1?g7ܘ~ @g^26g6n"c                 C   sZ   t |||d  }t d|||d  }t|d |d d  t|d |d d  d S )Nr   r   rO   )r    lpnclpmnr   )r9   r\   r=  r>  ZreslpnZresclpmnr:   r:   r;   test_lpn_against_clpmn  s    z#TestLegendre.test_lpn_against_clpmnN)r  r  r  r<  r   r  ry  rA  r:   r:   r:   r;   r:    s
   r:  c                   @   s   e Zd Zdd ZdS )
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 )NrO   r   r   rA   rm  r   r{  )r    Zlmbdar   rH  r  rJ  r   )r9   ZlamZlamrr:   r:   r;   
test_lmbda  s
    "6zTestLambda.test_lmbdaN)r  r  r  rC  r:   r:   r:   r;   rB    s   rB  c                   @   s   e Zd Zdd Zdd ZdS )	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    rn  r   r   )r9   Zl1pZl1prlr:   r:   r;   ro    s    zTestLog1p.test_log1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )NrO   rs  r  rA   r  r  r{  rE  )r9   Zl1pmZl1pmrlr:   r:   r;   test_log1pmore  s    zTestLog1p.test_log1pmoreN)r  r  r  ro  rF  r:   r:   r:   r;   rD    s   rD  c                   @   st   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S )TestLegendreFunctionsc                 C   s   d}t dd|d}t|td|dd| | d  gdt|| d d| t|| d  gddd|| d  ggtddd| gd|t|| d  dd| | d  t|| d  gddd| ggfd	 d S )
Ny      ?333333?rA   rv   rs   rr   rO   r~   rE   rC   )r    r@  r   r   r   )r9   r   Zclpr:   r:   r;   
test_clpmn  s    (8z TestLegendreFunctions.test_clpmnc              	   C   s   d}d}d}d}t |||d|  dd ||f }t |||d|  dd ||f }tt||gtt |||t |||gd d S )	NrQ   rO   rv   rr   r   rA   r   rC   )r    r@  r   r   ru  r9   r  r  r\   r   Zclp_plusZ	clp_minusr:   r:   r;   test_clpmn_close_to_real_2  s    $$z0TestLegendreFunctions.test_clpmn_close_to_real_2c              	   C   s   d}d}d}d}t |||d|  dd ||f }t |||d|  dd ||f }tt||gtt |||td| tj  t |||td| tj  gd	 d S )
NrQ   rO   rv   rr   r   r   y             y              ?rC   )r    r@  r   r   ru  rT   r   r   rI  r:   r:   r;   test_clpmn_close_to_real_3  s    $$" z0TestLegendreFunctions.test_clpmn_close_to_real_3c              
   C   sj   d}d}d}d}dD ]P}t t|||d|  |d ||f t|||d|  |d ||f d qd S )Nrh  rO   r   rA   rv   r   rE   )r   r    r@  )r9   r  r  r\   r   rR  r:   r:   r;   test_clpmn_across_unit_circle  s    $$z3TestLegendreFunctions.test_clpmn_across_unit_circlec              
   C   s   dD ]}t dD ]t}t d|D ]d}t|||}tt|d ddd f   t|||}tt|d ddd f   qqqd S )N)rO   rD   r?   rO   )rf   r    r@  r   rT   rS  r  lpmn)r9   r   r\   r  lpr:   r:   r;   test_inf  s    "zTestLegendreFunctions.test_infc                 C   s   g d}d}d}dD ]r}|D ]h}dD ]^}t |||d|  |d t |||d|  |d  | }tt ||||d |d	d
 q$qqd S )N)r  y            ?y            y      ?      r  r  r  r  rA   rv   rL  )r   y        MbP?rr   r   rO   r  rH   )r    r@  r   )r9   Zzvalsr  r\   rR  r   hZapprox_derivativer:   r:   r;   test_deriv_clpmn  s    z&TestLegendreFunctions.test_deriv_clpmnc                 C   s6   t ddd}t|tg dgtg dgfd d S )Nr   rA   rr   rs   rr         r~   rs   r  r?   )r    rN  r   r   r9   rO  r:   r:   r;   	test_lpmn   s    zTestLegendreFunctions.test_lpmnc                 C   s0   t dd}t|tg dtg dfd d S )NrA   rr   rS  rU  r?   )r    r?  r   r   )r9   Zlpnfr:   r:   r;   test_lpn)  s    
zTestLegendreFunctions.test_lpnc                 C   s   t ddd}t|dd t ddd}t|dd tjd	d
 t ddd}W d    n1 sd0    Y  t|dkpt| d S )Nr   rA   rr   rT  rC   (   r   gI?r  r  rD   )r    ru  r   rT   rv  r   r   rV  r:   r:   r;   rv  2  s    ,zTestLegendreFunctions.test_lpmvc                 C   sN   t ddd}t dd}t|d d |d d t|d d |d d d S )Nr   rA   rr   r?   rO   )r    lqmnlqnr   )r9   Zlqmnflqfr:   r:   r;   	test_lqmn>  s    zTestLegendreFunctions.test_lqmnc                 C   sR   d}d}|| || fD ]4}t dd|d d }d|| d  }t|| qdS )znalgorithm for real arguments changes at 1.0001
           test against analytical result for m=2, n=1
        gqh ?h㈵>rA   rO   r   )rD   rD   N)r    rZ  r   )r9   Zx0deltar   Zlqr   r:   r:   r;   test_lqmn_gt1D  s    z#TestLegendreFunctions.test_lqmn_gt1c                 C   sX   t ddd\}}t|jd t|jd t ddd\}}t|jd t|jd d S )Nr?   rs  )r   r   r   )r   rO   )r    rZ  r   r   )r9   r"  r#  r:   r:   r;   test_lqmn_shapeO  s    z%TestLegendreFunctions.test_lqmn_shapec                 C   s0   t dd}t|tg dtg dfd d S )NrA   rr   )gk+ݓ?g=yX5gW2)g|a2U?g~jt?gڊer?   )r    r[  r   r   )r9   r\  r:   r:   r;   test_lqnX  s    
zTestLegendreFunctions.test_lqnN)r  r  r  rH  rJ  rK  rM  rP  rR  rW  rX  rv  r]  r`  ra  rb  r:   r:   r:   r;   rG    s   					rG  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestMathieuc                 C   s   d S r3  r:   r8   r:   r:   r;   rw  `  s    zTestMathieu.test_mathieu_ac                 C   s   t dd d S )NrA   r   )r    r*   r8   r:   r:   r;   test_mathieu_even_coefc  s    z"TestMathieu.test_mathieu_even_coefc                 C   s   d S r3  r:   r8   r:   r:   r;   test_mathieu_odd_coefg  s    z!TestMathieu.test_mathieu_odd_coefN)r  r  r  rw  rd  re  r:   r:   r:   r;   rc  ^  s   rc  c                   @   s   e Zd Zdd Zdd ZdS )TestFresnelIntegralc                 C   s   d S r3  r:   r8   r:   r:   r;   r  n  s    z$TestFresnelIntegral.test_modfresnelpc                 C   s   d S r3  r:   r8   r:   r:   r;   r  q  s    z$TestFresnelIntegral.test_modfresnelmN)r  r  r  r  r  r:   r:   r:   r;   rf  l  s   rf  c                   @   s   e Zd Zdd ZdS )TestOblCvSeqc                 C   s&   t ddd}t|tg dd d S )Nr   rv   rO   )g~T~Oֿgt_J?gm{@g@j'&@r   )r    Z
obl_cv_seqr   r   )r9   Zoblr:   r:   r;   test_obl_cv_seqv  s    zTestOblCvSeq.test_obl_cv_seqN)r  r  r  rh  r:   r:   r:   r;   rg  u  s   rg  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 )NrO   r   gQ?gx$(~?gx$(~g(\?r?   )r    pbdn_seqr   r   )r9   Zpbr:   r:   r;   test_pbdn_seq  s    z#TestParabolicCylinder.test_pbdn_seqc                 C   s4   t dd dt ddd  t ddd   d S )NrO   r   r   r   )r    r  r8   r:   r:   r;   r    s    zTestParabolicCylinder.test_pbdvc                 C   s<   t dd}t dd}t|t|d t|d fd d S )NrO   r   r   r?   )r    rj  Zpbdv_seqr   r   )r9   ZpbnZpbvr:   r:   r;   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   rA   rr   r~   r   r  r  gGz$@gq=
ףp4@gHQ9ro   rH   g(\#gQ@gkS a>)rT   r  r   r   r    r
  r   r  )r9   etar   r:   r:   r;   test_pbdv_points  s
    *z&TestParabolicCylinder.test_pbdv_pointsc                 C   s   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  r?   r{  r  r   r   rh  r   r   rO   r   r  )rT   r  r    r  r!  r   r9   r   rm  r   r  Zdpr:   r:   r;   test_pbdv_gradient  s    0z(TestParabolicCylinder.test_pbdv_gradientc                 C   s   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 ro  )rT   r  r    r  r!  r   rp  r:   r:   r;   test_pbvv_gradient  s    0z(TestParabolicCylinder.test_pbvv_gradientc                 C   s<   t dd\}}t|tg d t|tg d d S )NrA   rv   )g:4@g1{н?g7,%n?)gX@g=<'?gʠ?)r    Zpbvv_seqr   rT   r   )r9   Zres1Zres2r:   r:   r;   test_pbvv_seq  s    z#TestParabolicCylinder.test_pbvv_seqN)
r  r  r  rk  r  rl  rn  rq  rr  rs  r:   r:   r:   r;   ri  ~  s   
		ri  c                   @   s   e Zd Zdd ZdS )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 )NrA   rO   rv   gX];r   gOV,@@)rA   rv   g  8Br   r  r  )g2}jg.M?g}2;ο)r    Z	polygammar   r  rT   r  )r9   Zpoly2Zpoly3r   r\   r   r:   r:   r;   test_polygamma  s"    zTestPolygamma.test_polygammaN)r  r  r  ru  r:   r:   r:   r;   rt    s   rt  c                   @   s   e Zd Zdd ZdS )TestProCvSeqc                 C   s&   t ddd}t|tg dd d S )Nr   rv   rO   )g"~j?g6?Ң@g)u8F"@g2g)@r   )r    Z
pro_cv_seqr   r   )r9   Zprolr:   r:   r;   test_pro_cv_seq  s    zTestProCvSeq.test_pro_cv_seqN)r  r  r  rw  r:   r:   r:   r;   rv    s   rv  c                   @   s   e Zd Zdd ZdS )TestPsic                 C   s   t d}t|dd d S )NrO   goxr{  )r    r  r   )r9   Zpsr:   r:   r;   r    s    
zTestPsi.test_psiN)r  r  r  r  r:   r:   r:   r;   rx    s   rx  c                   @   s   e Zd Zdd Zdd ZdS )
TestRadianc                 C   s"   t ddd}t|td d d S )Nr  r   r   r   r    r  r   r   )r9   Zradr:   r:   r;   r    s    zTestRadian.test_radianc                 C   s&   t ddd}t|td d d d S )Nr  rO   r  rA   gC?r   rz  )r9   Zrad1r:   r:   r;   test_radianmore  s    zTestRadian.test_radianmoreN)r  r  r  r  r{  r:   r:   r:   r;   ry    s   ry  c                   @   s   e Zd Zdd Zdd ZdS )TestRiccatic                 C   s|   d\}}t ||f}t|D ]D}t||}tj||dd}|| |d|f< || | |d|f< qt|t||d d S N)rA   r   T)Z
derivativer   rO   r{  )rT   emptyrf   r    Zspherical_jnr   Z
riccati_jn)r9   r  r   Sr\   r  jpr:   r:   r;   test_riccati_jn  s    zTestRiccati.test_riccati_jnc                 C   s|   d\}}t ||f}t|D ]D}t||}tj||dd}|| |d|f< || | |d|f< qt|t||d d S r}  )rT   r~  rf   r    Zspherical_ynr   Z
riccati_yn)r9   r  r   Cr\   r   Zypr:   r:   r;   test_riccati_yn  s    zTestRiccati.test_riccati_ynN)r  r  r  r  r  r:   r:   r:   r;   r|    s   
r|  c                   @   s   e Zd Zdd ZdS )	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  mapre   r    r  r   )r9   ZrndZrndrlr:   r:   r;   r    s    
zTestRound.test_roundN)r  r  r  r  r:   r:   r:   r;   r    s   r  c                  C   s  t j} tj}tj}tj}tj}tj}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   d S )Nr   rr   rm  rA   r~   r?   r}  rl  r   rk   r   r   r   rd  rz   g      @rO   r   r  g      ?g     A@)	r    sph_harmrT   r   r   r   r   r	   r   )shr   r   r   r   r	   r:   r:   r;   test_sph_harm  sP    
r  c                  C   s   t t j} 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|  d S r5   )rT   r0  rv  r   r    r  )dtr:   r:   r;   "test_sph_harm_ufunc_loop_selection*  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   rD   rr   rA   rO   r  )	r   r    r
  r!  r  r   r   r  r  r  r:   r:   r;   _series6  s    
@zTestStruve._seriesc                 C   sH   dD ]>}dD ]4}|  ||\}}tt|||d|d||ff qqdS )z-Check Struve function versus its power series)
ir  (\r  rD   r   rO   r  r     )rO   r   r   r  rK   r   r  N)r  r   r    r  r(  r:   r:   r;   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  r  g;cv=?rh  rH   gQ g< j?r  r  r  g?ro   g       igzz?r  i)   r|  r  r   gffffffrD   g333333$)r   r    r  r   r   r   r8   r:   r:   r;   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@rq  g333333N)r   r    r  r8   r:   r:   r;   test_regression_679Q  s    


zTestStruve.test_regression_679N)r  )r  r  r  r  r  r  r  r:   r:   r:   r;   r  5  s   
r  c                   C   s   t tddd d S )Nr  rv   gdX	
?)r   r    r   r:   r:   r:   r;   test_chi2_smalldf[  s    r  c                   C   s   t tdtjd d S )Nr  rs   )r   r    r   rT   r   r:   r:   r:   r;   test_ch2_inf_  s    r  c                   C   s   t tddd d S )Nr  rv   yj_?)r   r    r   r:   r:   r:   r;   test_chi2c_smalldfc  s    r  c                   C   s   t tddd d S )Nr  r  rv   )r   r    r   r:   r:   r:   r;   test_chi2_inv_smalldfg  s    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 )'NrG   rO   rA   gDSYC?rH   gQ_?g?@g>;,
i}@rv   )rO   rv   r   g=O?rD   rm  r   rE   gXs*@r  g   V4oAgO1eAgꌠ9Y>)FgEg^ 9^;gd-?gP.5_gsTNNeg6dgu?j/ g]XC}KdgѧRg"!x{{ rs   g][#!Rr  gٍS1gN_ r   c   r   )r   r    ZagmrT   r   r   r  r  r   r   r   )rI   Zagm13Zagm15Zagm35Zagm12fir:   r:   r;   test_agm_simplek  sr    
r  c                  C   s0  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    n1 s"0    Y  d S )Nr  rO   r   g?rA   gffffff@)r   rp  rq  r   r    Zexpnr  r  r  r  ra  r  r  r  )rs  r:   r:   r;   test_legacy  s    
r  c                   C   s   t tjtjdd d S )NrO   y        .B}T)r  r    rw  r@  r:   r:   r:   r;   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   sp   t jddP | dkr2t |s2| W  d    S | t | W  d    S W d    n1 sb0    Y  d S Nr  )invalidr   )rT   rv  r   r   rS  r:   r:   r;   xfunc  s    ztest_xlogy.<locals>.xfuncr   r   r   rs   r   r/  )r   r   )rO   r   rO   rG   r  )
rT   r   r   r   rg   r   rl   r2   r    xlogy)r  z1Zz2w1Zw2r:   r:   r;   
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   sp   t jddP | dkr2t |s2| W  d    S | t | W  d    S W d    n1 sb0    Y  d S r  )rT   rv  r   rn  rS  r:   r:   r;   r    s    ztest_xlog1py.<locals>.xfuncr  r   r  )rO   gKH9r/  rO   rG   r  )	rT   r   r   r   rg   rl   r2   r    Zxlog1py)r  r  r  r:   r:   r;   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 d S r5   )rT   r   r    r  )r   r:   r:   r;   r    s    ztest_entr.<locals>.xfuncr   rr   rs   rD   rO   r/  ZotypesrG   r  )rT   r   r  r   r  r   rg   rl   r   r2   r    Zentr)r  r   signsr  Zsgnr  r   r  r:   r:   r;   	test_entr  s    r  c            
      C   s   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   sh   | dk s |dk s |dkr&| dkr&t jS t | s:t |r@t jS | dkrL|S t| | | |  | S d S r5   )rT   r   Zisposinfr    r  rS  r:   r:   r;   r    s     ztest_kl_div.<locals>.xfuncr   rr   rs   rD   rO   r/  r  r   rG   r  )r  r   r  rT   r   rg   rl   r   r2   r    Zkl_div
r  r   r  r  ZsgnavaZsgnbZvbr   r  r:   r:   r;   test_kl_div  s    0r  c            
      C   s   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   s>   | dkr |dkr t | | | S | dkr4|dkr4dS tjS d S r5   )r    r  rT   r   rS  r:   r:   r;   r    s
    ztest_rel_entr.<locals>.xfuncr  rD   rO   r/  r  r   rG   r  )r  r   r  rT   r   rg   rl   r   r2   r    Zrel_entrr  r:   r:   r;   test_rel_entr  s    0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 )NrD   r  rA   rr   rb  r   c                 S   sD   | dk rt jS t || k r*dt | S | t |d|    S d S )Nr   rr   )rT   r   r!  squarer_  r   r:   r:   r;   r    s
    ztest_huber.<locals>.xfuncr   r  r   rO   rG   r  )r   r    ZhuberrT   r   r   r  rZ   randnrl   r   r2   r  r   r  r:   r:   r;   
test_huber  s    0r  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 d S )Nr   rA   rO   )rT   r   r   r  r:   r:   r;   r  &  s
    z test_pseudo_huber.<locals>.xfuncr   rA   r   rr   r  rO   rG   r  )
rT   r   rZ   r  tolistrl   r   r2   r    pseudo_huberr  r:   r:   r;   test_pseudo_huber%  s    (0r  c                  C   s*   d} d}t | |}d}t||dd d S )Nrs   gC]r2<gs.-De8rG   rH   )r    r  r   )r_  r   r   r   r:   r:   r;   test_pseudo_huber_small_r3  s
    r  c                   C   st   t jtdd tdd W d    n1 s.0    Y  t jtdd tdd W d    n1 sf0    Y  d S )NzToo many predicted coefficientsr   rL   )r   r  rq  r)   r*   r:   r:   r:   r;   test_runtime_warning@  s    (r  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TestStirling2rO   r   )r   rO   rO   )r   rO   rv   rO   )r   rO   rC   rE   rO   )r   rO   rk   r   r   rO   )r   rO      r  A   rk   rO   )r   rO   r;  r  i^     r  rO   )	r   rO      i  i    i
     rO   )
r   rO      i  iZ  i'  iV
  i  $   rO   )r   rO   rn   r$  i9  i  i+Y    i  r   rO   zis_exact, comp, kwargsTFrI   ro   c                 C   sR   t dt| jD ]<}tt |d }| j| }||t|g||dfi | qd S )NrO   r|  )rf   rW  tabler  r+   )r9   is_exactcompkwargsr\   Zk_valuesrowr:   r:   r;   test_table_casesX  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|  r?   rA   r   rv   r   )r+   r  r9   r  r  r  r:   r:   r;   test_valid_single_integerb  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 )NrD   r|  r   rA   r+   r  r:   r:   r;   test_negative_integern  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   rv   r?   r|  )r  r+   r   )r9   r  r  r  ansr:   r:   r;   test_array_inputsx  s&    


zTestStirling2.test_array_inputsrG   c                 C   s8   g d}g d}g d}|t |||d|fi | d S )N)r   rO   rv   r   r  r  r  )rD   r   rv   r   r{  r   r   )rm  r   rA   rv   r   rC   rv   r|  r  r9   r  r  r  r  r\   r]   r:   r:   r;   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|  rA   c                    s,   g | ]$}t  |d   d  | d  qS )rA   rO   )r5  r  r  r  r:   r;   r    r  z5TestStirling2.test_correct_parity.<locals>.<listcomp>N)rT   r   r   r+   )r9   Kr:   r  r;   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|s4J t d	d
g}ddg}ddg}tt||dd|shJ d S )Nl   V^;. l   k4-Tr   rK   r@   r?   Tr|  l	   D,"SBXp!N l   wY)H_1e_*   r     )r   r   r+   )r9   r  r\   r]   r:   r:   r;   test_big_numbers  s    zTestStirling2.test_big_numbersr  r  r   y      @      ?Z12r  )r  rv   2Nr  c                 C   s<   t t t|||d W d    n1 s.0    Y  d S )Nr|  )r   r   	TypeErrorr+   )r9   r  r  r  r:   r:   r;   test_unsupported_input_types  s    z*TestStirling2.test_unsupported_input_typesc                 C   sx   t | jd dd  }t g dtd}t g dtd}tt$ tt|||d| W d    n1 sj0    Y  d S )Nr?   rO   r?   r?   r?   r?   r/  rO   rA   rv   r?   r|  )r   r  r1  r   r   r  r   r+   )r9   r  r  r\   r]   r:   r:   r;   !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 )Nr?   rO   r  r/  r  Fr|  )r   r  r.   r+   r  r:   r:   r;   #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)rO   rk   r   r   )rO   rC   rE   rO   )r   r   r   r   r  r  r|  r?   )r   rO   rA   rv   r?   r   c                 S   s   g | ]}g d qS ))r   rO   rC   rE   rO   r   r:   )r  r,  r:   r:   r;   r    r  zDTestStirling2.test_broadcasting_arrays_correctly.<locals>.<listcomp>r   F)r   r+   rf   r  r:   r:   r;   "test_broadcasting_arrays_correctly  s    z0TestStirling2.test_broadcasting_arrays_correctlyc                 C   sp   t tddd}|D ]V}t td|d }t|g|dd}|t|g|dd }tt|| dk sJ qd S )	N3   r  r   rO   Tr|  Fr^  )r  rf   r+   rT   r  r!  )r9   r   r\   Z	k_entriesdenomrh   r:   r:   r;   test_temme_rel_max_error  s    z&TestStirling2.test_temme_rel_max_errorN)r  r  r  r  r   r  ry  r   r   r  r  r  r  r  r  r  rT   r   r  r  r  r  r  r:   r:   r:   r;   r  I  sp   





	

r  )ra  r  rc  rA  r@  numpyrT   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_ufuncsr6   Zscipy.specialr!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Zscipy._lib.deprecationr,   Zscipy._lib._utilr-   r.   Zscipy.special._basicr/   r0   Zscipy.special._testutilsr1   r2   r3   r5  r4   r  r/  r2  r4  rI  rK  rX  rz  r  r  r  r  r  r  r
  r  r  rw  r  r  r  r  r2  r:  rB  rD  rG  rc  rf  rg  ri  rt  rv  rx  ry  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r:   r:   r:   r;   <module>   s   X,       3z	 jUE  ,b    D2# `    W"
 		7	
&=
	