o
    Eb*                    @   s  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 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,m-Z- d dl*m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7Z7G d	d
 d
Z8G dd dZ9G dd dZ:G dd dZ;G dd dZ<G dd dZ=G dd dZ>G dd dZ?G dd dZ@G dd dZAG dd dZBG dd  d eCZDG d!d" d"eCZEG 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/d0 d0ZLG d1d2 d2ZMG d3d4 d4ZNG d5d6 d6ZOG d7d8 d8ZPG d9d: d:ZQG d;d< d<ZRG d=d> d>ZSG d?d@ d@ZTG dAdB dBZUG dCdD dDZVG dEdF dFZWG dGdH dHZXG dIdJ dJZYG dKdL dLZZG dMdN dNZ[G dOdP dPZ\G dQdR dRZ]dSdT Z^dUdV Z_G dWdX dXZ`dYdZ Zad[d\ Zbd]d^ Zcd_d` Zddadb Zedcdd Zfe4dedf Zgdgdh Zhdidj Zidkdl Zjdmdn Zkdodp Zldqdr Zmdsdt ZndS )u    N)arrayisnanr_arangefinfopisincostanexplogzerossqrtasarrayinf
nan_to_numrealarctanfloat_)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)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^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6e7j8j9didjdkdl Z:dmdn Z;dodp Z<dqdr Z=e7j8j9dsdj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dtdu Zdvdw Zdxdy Zdzd{ Zd|d} Zd~S (  
TestCephesc                 C      t d d S Nr   )cephesairyself r2   @/usr/lib/python3/dist-packages/scipy/special/tests/test_basic.py	test_airy/      zTestCephes.test_airyc                 C   r,   r-   )r.   airyer0   r2   r2   r3   
test_airye2   r5   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
@r:   )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           ?绽|=atolrB   )npr   broadcast_arraysreshapeTr)   r.   binomZravelrandomseedr   r   Zrand)r1   nknkZrknownr2   r2   r3   
test_binom5   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 )NrC   rH   ,     r   rG   r:   r=   rI   rJ   rK   )rM   rR   rS   r   logspacer   r   rN   rO   rP   r)   r.   rQ   )r1   rT   rU   rV   r2   r2   r3   test_binom_2L   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   sX   t | } t |}t d}t d}td|d D ]}|||  | 9 }||9 }qt|| S NrH   )intrangefloat)rT   rU   ZnumZdenir2   r2   r3   	binom_intZ   s   
z.TestCephes.test_binom_exact.<locals>.binom_intrC   rH      r   r:   r=   rK   )rM   	vectorizerR   rS   r   r   rN   rO   rP   r)   r.   rQ   )r1   ra   rT   rU   rV   r2   r2   r3   test_binom_exactY   s   

(
$ 
zTestCephes.test_binom_exactc                 C   s.   g d}t |}ttj|dddd  d S )N))rE   rF   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  i  g*I y)i   i   gI)i  i  gW@N)i  i  g5y)r   rH   r:   -q=rA   )rM   r   r*   r.   rQ   check)r1   Zdatasetr2   r2   r3   test_binom_nooverflow_8346p   s   
z%TestCephes.test_binom_nooverflow_8346c                 C      t tdddd d S )NrH         ?      ?)r   r.   Zbdtrr0   r2   r2   r3   	test_bdtr      zTestCephes.test_bdtrc                 C      t tdddd d S NrH      ri   )r   r.   Zbdtrir0   r2   r2   r3   
test_bdtri   rl   zTestCephes.test_bdtric                 C   rm   rn   )r   r.   Zbdtrcr0   r2   r2   r3   
test_bdtrc   rl   zTestCephes.test_bdtrcc                 C      t tdddd d S NrH   r         @)r   r.   Zbdtrinr0   r2   r2   r3   test_bdtrin   rl   zTestCephes.test_bdtrinc                 C      t ddd d S rn   )r.   Zbdtrikr0   r2   r2   r3   test_bdtrik      zTestCephes.test_bdtrikc                 C      t tdd d S Nr           )r   r.   beir0   r2   r2   r3   test_bei      zTestCephes.test_beic                 C   ry   rz   )r   r.   beipr0   r2   r2   r3   	test_beip   r~   zTestCephes.test_beipc                 C   ry   Nr   rj   )r   r.   berr0   r2   r2   r3   test_ber   r~   zTestCephes.test_berc                 C   ry   rz   )r   r.   berpr0   r2   r2   r3   	test_berp   r~   zTestCephes.test_berpc                 C      t tdddd d S r   )r   r.   Z
besselpolyr0   r2   r2   r3   test_besselpoly   rl   zTestCephes.test_besselpolyc                 C   F   t tddd ttddtd ttddddd	d
 d S )NrH   rj   33333YN~h?   g6.8@r@   r   rB   rL   )r   r.   betar   gammar0   r2   r2   r3   	test_beta   
   
zTestCephes.test_betac                 C   s,   t tdddd ttdddd d S )NrH   rj   r   r   rJ   g*?)r   r.   betaincr   r0   r2   r2   r3   test_betainc   s   zTestCephes.test_betaincc                 C   r   )NrH   r{   r   r   r      gIs	@+=r   r   )r   r.   betalnr   gammalnr0   r2   r2   r3   test_betaln   r   zTestCephes.test_betalnc                 C   s2   t tdddd ttddddddd	 d S )
NrH   rj   r   r         ?g"
Yx;gAfc=r   r   )r   r.   
betaincinvr   r0   r2   r2   r3   test_betaincinv   s   
zTestCephes.test_betaincinvc                 C   s   t ttdd d S )Nr=   r:   )r   rM   isinfr   r   r0   r2   r2   r3   test_beta_inf      zTestCephes.test_beta_infc                 C   r   NrH   rj   )r   r.   Zbtdtrr0   r2   r2   r3   
test_btdtr   rl   zTestCephes.test_btdtrc                 C   r   r   )r   r.   Zbtdtrir0   r2   r2   r3   test_btdtri   rl   zTestCephes.test_btdtric                 C   r   NrH   rt   )r   r.   Zbtdtriar0   r2   r2   r3   test_btdtria   rl   zTestCephes.test_btdtriac                 C   r   r   )r   r.   Zbtdtribr0   r2   r2   r3   test_btdtrib   rl   zTestCephes.test_btdtribc                 C   ry   r   )r   r.   cbrtr0   r2   r2   r3   	test_cbrt   r~   zTestCephes.test_cbrtc                 C      t tddd d S NrH   r   r{   )r   r.   chdtrr0   r2   r2   r3   
test_chdtr      zTestCephes.test_chdtrc                 C   r   NrH   r   rj   )r   r.   chdtrcr0   r2   r2   r3   test_chdtrc   r   zTestCephes.test_chdtrcc                 C      t tddd d S NrH   r{   )r   r.   chdtrir0   r2   r2   r3   test_chdtri   r   zTestCephes.test_chdtric                 C   r   )Nr   rt   )r   r.   Zchdtrivr0   r2   r2   r3   test_chdtriv   r   zTestCephes.test_chdtrivc                 C   s8  t tdddd tg dg dg dg dg dg d	g d
g dg dg dg dg dg dg}t|d d df |d d df |d d df }t||d d df dd tttjtjdd ttddtjd tt	ttj
dd tt	tdtj
d tt	tddtj
 d S )Nr   rH   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   rj   gp!P?)g     u@g     r@      $@g j
?)      Y@      +@r   g]?)g     @r   r   g4ۙ?)g     b@r   r   g?)g      d@r   r   rj   r:   ro   re   rA   r      )r   r.   ZchndtrrM   r   r   r   r   r   r   nan)r1   valuesZcdfr2   r2   r3   test_chndtr   s.   2zTestCephes.test_chndtrc                 C   rh   Nr   rH   rt   )r   r.   Z	chndtridfr0   r2   r2   r3   test_chndtridf   rl   zTestCephes.test_chndtridfc                 C   rr   r   )r   r.   Z	chndtrincr0   r2   r2   r3   test_chndtrinc   rl   zTestCephes.test_chndtrincc                 C   rr   Nr   rH   r{   )r   r.   Zchndtrixr0   r2   r2   r3   test_chndtrix   rl   zTestCephes.test_chndtrixc                 C   ry   r   )r   r.   cosdgr0   r2   r2   r3   
test_cosdg   r~   zTestCephes.test_cosdgc                 C   ry   rz   )r   r.   cosm1r0   r2   r2   r3   
test_cosm1  r~   zTestCephes.test_cosm1c                 C   ry   N-   rj   )r   r.   cotdgr0   r2   r2   r3   
test_cotdg  r~   zTestCephes.test_cotdgc                 C   s$   t tdd ttdd d S )Nr   r{   gGz?gf?)r   r.   dawsnr   r0   r2   r2   r3   
test_dawsn  s   zTestCephes.test_dawsnc                 C   sV  g d}t dt j d t j}tt||ddd t dt j d t j}tt||ddd t dt j d	 t j}tt||ddd t	t d
rmt dt j d t j
}tt||ddd g d}t dt j d t j}tt||ddd t dt j dt j dt j }g d}tt|d|dd d S )N)rH   r      r:   g-C6
?rj   r<   Zdecimal&.>rb   V瞯<float128re      )r:   r8            皙?)gg?gsOB?gsaL?g
7I^ʿro   )rM   r   r   astypeZfloat32r   r   diricfloat64hasattrr   r   )r1   Zn_oddxZn_evenZoctave_resultr2   r2   r3   
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   )rH   ro   r<   )	rM   r   r   r   r   r   Znewaxisshapesize)r1   r   rT   r2   r2   r3   test_diric_broadcasting$  s   
0z"TestCephes.test_diric_broadcastingc                 C   ry   r   )r   r.   r    r0   r2   r2   r3   test_ellipe)  r~   zTestCephes.test_ellipec                 C   r   r   )r   r.   	ellipeincr0   r2   r2   r3   test_ellipeinc,  r   zTestCephes.test_ellipeincc                 C      t dd d S )Nr   rH   )r.   ellipjr0   r2   r2   r3   test_ellipj/     zTestCephes.test_ellipjc                 C   s   t tdtd  d S )Nr   r:   )r   r!   r   r0   r2   r2   r3   test_ellipk2  r   zTestCephes.test_ellipkc                 C   r   rz   )r   r.   	ellipkincr0   r2   r2   r3   test_ellipkinc5  r   zTestCephes.test_ellipkincc                 C   ry   rz   r   r.   erfr0   r2   r2   r3   test_erf8  r~   zTestCephes.test_erfc                 C   s$   d}t t|t|  d d S )Ng#8x@r{   r   r1   r   r2   r2   r3   test_erf_symmetry;  s    zTestCephes.test_erf_symmetryc                 C   ry   r   )r   r.   erfcr0   r2   r2   r3   	test_erfc?  r~   zTestCephes.test_erfcc                 C   ry   )Nr:   r   )r   r.   exp10r0   r2   r2   r3   
test_exp10B  r~   zTestCephes.test_exp10c                 C   ry   )Nr:         @)r   r.   exp2r0   r2   r2   r3   	test_exp2E  r~   zTestCephes.test_exp2c                 C   sP   t tdd t ttjtj t ttj d t ttjtj d S )Nr   r{   r=   )r   r.   expm1rM   r   r   r0   r2   r2   r3   
test_expm1H  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   rH   r:   r8   r   r=   )r.   r   r   complexrM   r   r   )r1   r   r2   r2   r3   test_expm1_complexN  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      rY                 ?)y=Cw?yC7gg)gF<Ug?yQ<D*?yg:><sKy>񸣼$	Um>ly;Vl <@ro   rY   )	rM   r   r   r	   r.   r   r   imagr   )r1   yr   zexpectedfoundr2   r2   r3   test_expm1_complex_harda  s   
z"TestCephes.test_expm1_complex_hardc                 C   0   t tdddd ttdddddd	 d S )
NrH   r   r{   ư>r   
   g2?re   rA   )r   r.   Zfdtrr   r0   r2   r2   r3   	test_fdtrv  s   
zTestCephes.test_fdtrc                 C   r  )
NrH   r   rj   r:   r  g    _BgDIXl?re   rA   )r   r.   Zfdtrcr   r0   r2   r2   r3   
test_fdtrc|  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 )NrH   gV-?gx&1?g
}?g<zO'?r  rA   g׀?r  ro   re   )r   r.   fdtrir   )r1   pr2   r2   r3   
test_fdtri  s
   zTestCephes.test_fdtrizReturns nan on i686.c                 C   s   t tdddd d S )NrH   ri   )r   r.   r  r0   r2   r2   r3   test_fdtri_mysterious_failure  s   z(TestCephes.test_fdtri_mysterious_failurec                 C      t tdddd d S rs   )r   r.   Zfdtridfdr0   r2   r2   r3   test_fdtridfd  rl   zTestCephes.test_fdtridfdc                 C   ry   Nr   r{   r{   )r   r.   fresnelr0   r2   r2   r3   test_fresnel  r~   zTestCephes.test_fresnelc                 C   ry   Nr         8@)r   r.   r   r0   r2   r2   r3   
test_gamma  r~   zTestCephes.test_gammac                 C   r   )Nr   rH   r{   )r   r.   gammainccinvr0   r2   r2   r3   test_gammainccinv  r   zTestCephes.test_gammainccinvc                 C   r,   )Nr  )r.   r   r0   r2   r2   r3   test_gammaln  r5   zTestCephes.test_gammalnc                 C   s2   t g dt j}tt|t t| d S )N)      gffffffrH   g@)rM   r   r   r   r.   Zgammasgnsignrgamma)r1   valsr2   r2   r3   test_gammasgn  s    zTestCephes.test_gammasgnc                 C   rh   r   )r   r.   gdtrr0   r2   r2   r3   	test_gdtr  rl   zTestCephes.test_gdtrc                 C   s   t tddtjd d S r   )r   r.   r)  rM   r   r0   r2   r2   r3   test_gdtr_inf  r   zTestCephes.test_gdtr_infc                 C   rh   r   )r   r.   Zgdtrcr0   r2   r2   r3   
test_gdtrc  rl   zTestCephes.test_gdtrcc                 C   r  r   )r   r.   Zgdtriar0   r2   r2   r3   test_gdtria  rl   zTestCephes.test_gdtriac                 C   s   t ddd d S NrH   r   )r.   Zgdtribr0   r2   r2   r3   test_gdtrib  rx   zTestCephes.test_gdtribc                 C   s   t ddd d S NrH   r  )r.   Zgdtrixr0   r2   r2   r3   test_gdtrix  rx   zTestCephes.test_gdtrixc                 C      t dd d S r\   )r.   hankel1r0   r2   r2   r3   test_hankel1  r   zTestCephes.test_hankel1c                 C   r2  r\   )r.   hankel1er0   r2   r2   r3   test_hankel1e  r   zTestCephes.test_hankel1ec                 C   r2  r\   )r.   hankel2r0   r2   r2   r3   test_hankel2  r   zTestCephes.test_hankel2c                 C   r2  r\   )r.   hankel2er0   r2   r2   r3   test_hankel2e  r   zTestCephes.test_hankel2ec                 C   s>   t tdddtd t tdddd tddd d S )NrH   rj   ro   r8   g㈮?)r   r.   hyp1f1r   r0   r2   r2   r3   test_hyp1f1  s   zTestCephes.test_hyp1f1c                 C      t tddddd d S r   )r   r.   hyp2f1r0   r2   r2   r3   test_hyp2f1  r   zTestCephes.test_hyp2f1c                 C   ry   r   )r   r.   i0r0   r2   r2   r3   test_i0  r~   zTestCephes.test_i0c                 C   ry   r   )r   r.   i0er0   r2   r2   r3   test_i0e  r~   zTestCephes.test_i0ec                 C   ry   rz   )r   r.   i1r0   r2   r2   r3   test_i1  r~   zTestCephes.test_i1c                 C   ry   rz   )r   r.   i1er0   r2   r2   r3   test_i1e  r~   zTestCephes.test_i1ec                 C   r,   r\   )r.   it2i0k0r0   r2   r2   r3   test_it2i0k0  r5   zTestCephes.test_it2i0k0c                 C   r,   r\   )r.   it2j0y0r0   r2   r2   r3   test_it2j0y0  r5   zTestCephes.test_it2j0y0c                 C   r,   r\   )r.   Z
it2struve0r0   r2   r2   r3   test_it2struve0  r5   zTestCephes.test_it2struve0c                 C   r,   r\   )r.   Zitairyr0   r2   r2   r3   test_itairy  r5   zTestCephes.test_itairyc                 C   ry   r  )r   r.   iti0k0r0   r2   r2   r3   test_iti0k0  r~   zTestCephes.test_iti0k0c                 C   ry   r  )r   r.   itj0y0r0   r2   r2   r3   test_itj0y0  r~   zTestCephes.test_itj0y0c                 C   ry   rz   )r   r.   Zitmodstruve0r0   r2   r2   r3   test_itmodstruve0  r~   zTestCephes.test_itmodstruve0c                 C   ry   rz   )r   r.   Z	itstruve0r0   r2   r2   r3   test_itstruve0  r~   zTestCephes.test_itstruve0c                 C   r   r   )r   r.   ivr0   r2   r2   r3   test_iv  r   zTestCephes.test_ivc                 C   r   r   )r   r.   iver0   r2   r2   r3   
_check_ive  r   zTestCephes._check_ivec                 C   ry   r   )r   r.   j0r0   r2   r2   r3   test_j0  r~   zTestCephes.test_j0c                 C   ry   rz   )r   r.   j1r0   r2   r2   r3   test_j1  r~   zTestCephes.test_j1c                 C   r   r   )r   r.   jnr0   r2   r2   r3   test_jn  r   zTestCephes.test_jnc                 C   r   r   )r   r.   jvr0   r2   r2   r3   test_jv  r   zTestCephes.test_jvc                 C   r   r   )r   r.   jver0   r2   r2   r3   
_check_jve  r   zTestCephes._check_jvec                 C   r,   Nr:   )r.   k0r0   r2   r2   r3   test_k0  r5   zTestCephes.test_k0c                 C   r,   rc  )r.   k0er0   r2   r2   r3   test_k0e  r5   zTestCephes.test_k0ec                 C   r,   rc  )r.   k1r0   r2   r2   r3   test_k1  r5   zTestCephes.test_k1c                 C   r,   rc  )r.   k1er0   r2   r2   r3   test_k1e  r5   zTestCephes.test_k1ec                 C   r,   rc  )r.   keir0   r2   r2   r3   test_kei  r5   zTestCephes.test_keic                 C   ry   rz   )r   r.   keipr0   r2   r2   r3   	test_keip  r~   zTestCephes.test_keipc                 C   r,   rc  )r.   kerr0   r2   r2   r3   test_ker  r5   zTestCephes.test_kerc                 C   r,   rc  )r.   kerpr0   r2   r2   r3   	test_kerp  r5   zTestCephes.test_kerpc                 C   r,   rc  )r.   kelvinr0   r2   r2   r3   _check_kelvin  r5   zTestCephes._check_kelvinc                 C   r2  r\   )r.   knr0   r2   r2   r3   test_kn  r   zTestCephes.test_knc                 C   *   t tdd ttttj d S r   )r   r.   Zkolmogir   rM   r   r   r0   r2   r2   r3   test_kolmogi      zTestCephes.test_kolmogic                 C   ry   r   )r   r.   Z
kolmogorovr0   r2   r2   r3   test_kolmogorov$  r~   zTestCephes.test_kolmogorovc                 C   ry   )Nr          )r   r.   Z_kolmogpr0   r2   r2   r3   test_kolmogp'  r~   zTestCephes.test_kolmogpc                 C   ry   rz   )r   r.   Z_kolmogcr0   r2   r2   r3   test_kolmogc*  r~   zTestCephes.test_kolmogcc                 C   rx  rz   )r   r.   Z	_kolmogcir   rM   r   r   r0   r2   r2   r3   test_kolmogci-  rz  zTestCephes.test_kolmogcic                 C   r2  r\   )r.   kvr0   r2   r2   r3   	_check_kv1  r   zTestCephes._check_kvc                 C   r2  r\   )r.   kver0   r2   r2   r3   
_check_kve4  r   zTestCephes._check_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{   r=   )r.   log1pr   rM   r   r   )r1   r  r2   r2   r3   
test_log1p7  s
   zTestCephes.test_log1pc                 C   s  t j}t}t|dd t||dd|tj d t }|td t	||dtj|tjtj
d  t||dtj|tjtj t	||tj d|tjtj
 t||tjd|tjd t	||tj tj|tjdtj
 d  t	||tjtj|tjtj
d  t||tjtj|tjtj t||tj tj|tjtj t||tjtj|tjtj t||tjd|tjtj t||tjtj|tjtj W d    d S 1 sw   Y  d S )	Nr   r=   r   z%invalid value encountered in multiplyrH   r:   ro   r8   )r.   r  r   r   rM   r   r   filterRuntimeWarningr   r   r   )r1   r  csupr2   r2   r3   test_log1p_complex>  s$   $ ",&"$" $"zTestCephes.test_log1p_complexc                 C   rh   )Nr   rH   rj   )r   r.   lpmvr0   r2   r2   r3   	test_lpmvQ  rl   zTestCephes.test_lpmvc                 C   r   r   )r   r.   Z	mathieu_ar0   r2   r2   r3   test_mathieu_aT  r   zTestCephes.test_mathieu_ac                 C   r   r   )r   r.   Z	mathieu_br0   r2   r2   r3   test_mathieu_bW  r   zTestCephes.test_mathieu_bc                 C   s   t tdddd tjdd }tdd}tjdtddd	f }tt|d d d f |d d d f d
d ||d d d f |d d d f d
ddd d S )NrH   r   rj   r{   c                 S   s   |t jd 9 }| dkrddd| td|    S | dkr+t||d td|   S | dkrAtd| |td	| d
 d   S t| | |t| d | d	| d   t| d | d	| d      S )N   r   g;f?rH   ri   r:      ro   r8      r   )rM   r   r	   mqr
  r2   r2   r3   	ce_smallq^  s   $Hz.TestCephes.test_mathieu_cem.<locals>.ce_smallqd   r  rh|?r   r   )	r   r.   mathieu_cemrM   rc   r   r   rZ   r   )r1   r  r  r  r2   r2   r3   test_mathieu_cemZ  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 )NrH   r   r{   rj   c                 S   s   |t jd 9 }| dkrt||d td|   S | dkr-td| |td|  d  S t| | |t| d | d| d   t| d | d| d      S )Nr  rH   r  ro   r:   r8   r  )rM   r   r   r  r2   r2   r3   	se_smallqs  s    Hz.TestCephes.test_mathieu_sem.<locals>.se_smallqr  r  r  r  r  r   r   )	r   r.   mathieu_semrM   rc   r   r   rZ   r   )r1   r  r  r  r2   r2   r3   test_mathieu_semo  s   
*"
zTestCephes.test_mathieu_semc                 C   r  NrH   r   r  )r   r.   mathieu_modcem1r0   r2   r2   r3   test_mathieu_modcem1  rl   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 )
NrH   r   r8   r  r:   r  r<   rJ   rA   )	r.   mathieu_modcem2rM   r   r   rZ   linspacer  r   r1   r  r  r
  y1frZy2r2   r2   r3   test_mathieu_modcem2  s   "&.zTestCephes.test_mathieu_modcem2c                 C   r  r  )r   r.   mathieu_modsem1r0   r2   r2   r3   test_mathieu_modsem1  rl   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 )
NrH   r8   r  r:   r  r   r<   rJ   rA   )	r.   mathieu_modsem2rM   r   r   rZ   r  r  r   r  r2   r2   r3   test_mathieu_modsem2  s   "$,zTestCephes.test_mathieu_modsem2c                 C   s   t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t tdddtjtjf t t	dddtjtjf d S )N'  r   g?      ?)
r   r.   r  rM   r   r  r  r  r  r  r0   r2   r2   r3   test_mathieu_overflow  s    z TestCephes.test_mathieu_overflowc                 C   sD   t dD ]}tddd}t|d ddd t|d	 d
dd qd S )N<   r:   r  r=   r   g.dS?rJ   rA   rH   gGc?-C6?)r^   r.   r  r   )r1   rU   vr2   r2   r3   test_mathieu_ticket_1847  s
   z#TestCephes.test_mathieu_ticket_1847c                 C   r,   r-   )r.   Zmodfresnelmr0   r2   r2   r3   test_modfresnelm  r5   zTestCephes.test_modfresnelmc                 C   r,   r-   )r.   Zmodfresnelpr0   r2   r2   r3   test_modfresnelp  r5   zTestCephes.test_modfresnelpc                 C   r   r   )r   r.   Z	modstruver0   r2   r2   r3   _check_modstruve  r   zTestCephes._check_modstruvec                 C   r   r   )r   r.   nbdtrr0   r2   r2   r3   
test_nbdtr  rl   zTestCephes.test_nbdtrc                 C   r   r   )r   r.   nbdtrcr0   r2   r2   r3   test_nbdtrc  rl   zTestCephes.test_nbdtrcc                 C   r   r   )r   r.   nbdtrir0   r2   r2   r3   test_nbdtri  rl   zTestCephes.test_nbdtric                 C   rv   )NrH   r;   ri   )r.   Znbdtrikr0   r2   r2   r3   Z__check_nbdtrik  rx   zTestCephes.__check_nbdtrikc                 C   r  rs   )r   r.   Znbdtrinr0   r2   r2   r3   test_nbdtrin  rl   zTestCephes.test_nbdtrinc                 C   r>  r   )r   r.   ncfdtrr0   r2   r2   r3   test_ncfdtr  r   zTestCephes.test_ncfdtrc                 C   sH   t tddddd g d}tddd|}ttddd|| d S )NrH   r   r{   )ri   rH   r  r:   ro   r  )r   r.   Zncfdtrir  r   )r1   fr  r2   r2   r3   test_ncfdtri  s   zTestCephes.test_ncfdtric                 C   s2   g d}t d|dd}tt d|dd| d S )N)rH   r:   ro   r:   r   rb   )r.   r  r   Z
ncfdtridfd)r1   Zdfdr  r2   r2   r3   test_ncfdtridfd     zTestCephes.test_ncfdtridfdc                 C   s6   g d}t |ddd}tt |ddd|dd d S )N)r  rH   r:   ro   g     @r:   r   rb   gh㈵>rA   )r.   r  r   Z
ncfdtridfn)r1   Zdfnr  r2   r2   r3   test_ncfdtridfn  s   zTestCephes.test_ncfdtridfnc                 C   s2   g d}t dd|d}tt dd|d| d S )N)ri   r  r   r:   ro   rb   )r.   r  r   Z	ncfdtrinc)r1   Zncr  r2   r2   r3   test_ncfdtrinc  r  zTestCephes.test_ncfdtrincc                 C   s   t tdddd t tdddd tttjdddd	 tttd
tjd ttd
dtjd ttttjdd tttd
tjd tttd
dtj d S )NrH   r   ri   	   i   r   r{   rj   r   r   r   )	r   r.   Znctdtrr   rM   r   r   r   r   r0   r2   r2   r3   test_nctdtr  s   zTestCephes.test_nctdtrc                 C   rv   )NrH   ri   r   )r.   Z	nctdtridfr0   r2   r2   r3   Z__check_nctdtridf  rx   zTestCephes.__check_nctdtridfc                 C   s   t ddd d S r.  )r.   Z	nctdtrincr0   r2   r2   r3   test_nctdtrinc  rx   zTestCephes.test_nctdtrincc                 C   rv   )Nr  r   ri   )r.   Znctdtritr0   r2   r2   r3   test_nctdtrit  rx   zTestCephes.test_nctdtritc                 C   r  )Nri   rH   rj   )r   r.   Znrdtrimnr0   r2   r2   r3   test_nrdtrimn  rl   zTestCephes.test_nrdtrimnc                 C   s   t tddddddd d S )Nri   r{   r   rK   )r   r.   Znrdtrisdr0   r2   r2   r3   test_nrdtrisd   s   
zTestCephes.test_nrdtrisdc                 C      t dddd d S r.  )r.   Zobl_ang1r0   r2   r2   r3   test_obl_ang1  r~   zTestCephes.test_obl_ang1c                 C   s2   t ddddd}t|d d t|d d d S )NrH   r   rj   r{   )r.   Zobl_ang1_cvr   )r1   resultr2   r2   r3   test_obl_ang1_cv  s   zTestCephes.test_obl_ang1_cvc                 C   rh   NrH   r   r   )r   r.   Zobl_cvr0   r2   r2   r3   _check_obl_cv  rl   zTestCephes._check_obl_cvc                 C   r  r.  )r.   Zobl_rad1r0   r2   r2   r3   test_obl_rad1  r~   zTestCephes.test_obl_rad1c                 C      t ddddd d S r.  )r.   Zobl_rad1_cvr0   r2   r2   r3   test_obl_rad1_cv  r   zTestCephes.test_obl_rad1_cvc                 C   r  r.  )r.   Zobl_rad2r0   r2   r2   r3   test_obl_rad2  r~   zTestCephes.test_obl_rad2c                 C   r  r.  )r.   Zobl_rad2_cvr0   r2   r2   r3   test_obl_rad2_cv  r   zTestCephes.test_obl_rad2_cvc                 C   r   )NrH   r   r  )r   r.   pbdvr0   r2   r2   r3   	test_pbdv  r   zTestCephes.test_pbdvc                 C   r   r.  )r.   pbvvr0   r2   r2   r3   	test_pbvv  r   zTestCephes.test_pbvvc                 C   r   r.  )r.   Zpbwar0   r2   r2   r3   	test_pbwa!  r   zTestCephes.test_pbwac                 C   s>   t dd}t|td t g dd}t|g d d S )Nr   rH   r=   r   rH   r:   )rH   rH   rH   )r.   Zpdtrr   rM   r   r   r1   valr2   r2   r3   	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   rH   r=   r  r{   )r   r   r   )r.   Zpdtrcr   rM   r   r   r  r2   r2   r3   
test_pdtrc+  s   zTestCephes.test_pdtrcc                 C   sD   t  }|td tdd W d    d S 1 sw   Y  d S )N-floating point number truncated to an integerri   )r   r  r  r.   pdtri)r1   r  r2   r2   r3   
test_pdtri2  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 )Nri   rH   r   r   ffffff?)r   #B;r  )ro   ro   )r.   Zpdtrikr   Z	gammainccr   rM   r   )r1   rU   r2   r2   r3   test_pdtrik7  s   zTestCephes.test_pdtrikc                 C   r  r.  )r.   Zpro_ang1r0   r2   r2   r3   test_pro_ang1>  r~   zTestCephes.test_pro_ang1c                 C   s    t tdddddtd d S )NrH   r   r  )r   r.   Zpro_ang1_cvr   r0   r2   r2   r3   test_pro_ang1_cvA  s   zTestCephes.test_pro_ang1_cvc                 C   rh   r  )r   r.   Zpro_cvr0   r2   r2   r3   _check_pro_cvE  rl   zTestCephes._check_pro_cvc                 C   r  r0  )r.   Zpro_rad1r0   r2   r2   r3   test_pro_rad1H  r~   zTestCephes.test_pro_rad1c                 C   r  r.  )r.   Zpro_rad1_cvr0   r2   r2   r3   test_pro_rad1_cvK  r   zTestCephes.test_pro_rad1_cvc                 C   r  r.  )r.   Zpro_rad2r0   r2   r2   r3   test_pro_rad2N  r~   zTestCephes.test_pro_rad2c                 C   r  r.  )r.   Zpro_rad2_cvr0   r2   r2   r3   test_pro_rad2_cvQ  r   zTestCephes.test_pro_rad2_cvc                 C   r,   r\   )r.   psir0   r2   r2   r3   test_psiT  r5   zTestCephes.test_psic                 C   s   t tdddd d S r-   )r   r.   radianr0   r2   r2   r3   test_radianW  rl   zTestCephes.test_radianc                 C   ry   r   )r   r.   r&  r0   r2   r2   r3   test_rgammaZ  r~   zTestCephes.test_rgammac                 C   sd   t tdd t tdd t tdd t tdd t td	d t td
d d S )N333333@r   333333      g@r   gg            @r$  )r   r.   roundr0   r2   r2   r3   
test_round]  s   zTestCephes.test_roundc                 C   r,   r\   )r.   Zshichir0   r2   r2   r3   test_shichie  r5   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 )NrH   ri   r   z cosine integral(-inf) is not nan)r.   ZsicirM   r   r   r   r   r   )r1   sr  r2   r2   r3   	test_sicih  s   

zTestCephes.test_sicic                 C   ry   NZ   rj   )r   r.   sindgr0   r2   r2   r3   
test_sindgs  r~   zTestCephes.test_sindgc                 C   s.   t tddd tttdtj d S )NrH   r  ?)r   r.   smirnovr   rM   r   r   r0   r2   r2   r3   test_smirnovv  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 )	NrH   r  r=   r:         ?      ro   g      ȿ)r   r.   Z	_smirnovpr   rM   r   r   r0   r2   r2   r3   test_smirnovpz  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 )
NrH   r  r   r  TZendpointro   r   r8   )
r   r.   	_smirnovcr   rM   r   r   r  r   r  )r1   Zx10Zx4r2   r2   r3   test_smirnovc  s   "zTestCephes.test_smirnovcc                 C   P   t tdtddd t tdtddd tttdtj d S NrH   r;   333333?)r   r.   r  smirnovir   rM   r   r   r0   r2   r2   r3   test_smirnovi     zTestCephes.test_smirnovic                 C   r  r  )r   r.   r	  Z
_smirnovcir   rM   r   r   r0   r2   r2   r3   test_smirnovci  r  zTestCephes.test_smirnovcic                 C   ry   r   )r   r.   Zspencer0   r2   r2   r3   test_spence  r~   zTestCephes.test_spencec                 C   s:   t tddd ttddd ttddd d S )NrH   r   ri   r  r:   gMoF?)r   r.   Zstdtrr   r0   r2   r2   r3   
test_stdtr     zTestCephes.test_stdtrc                 C   r   )Nffffff?rH   )r.   Zstdtridfr0   r2   r2   r3   test_stdtridf  r   zTestCephes.test_stdtridfc                 C   r   )NrH   r  )r.   Zstdtritr0   r2   r2   r3   test_stdtrit  r   zTestCephes.test_stdtritc                 C   r   rz   )r   r.   struver0   r2   r2   r3   test_struve  r   zTestCephes.test_struvec                 C   ry   r   )r   r.   tandgr0   r2   r2   r3   
test_tandg  r~   zTestCephes.test_tandgc                 C   r   r   )r   r.   Ztklmbdar0   r2   r2   r3   test_tklmbda  r   zTestCephes.test_tklmbdac                 C   r,   r\   )r.   y0r0   r2   r2   r3   test_y0  r5   zTestCephes.test_y0c                 C   r,   r\   )r.   r  r0   r2   r2   r3   test_y1  r5   zTestCephes.test_y1c                 C   r2  r\   )r.   ynr0   r2   r2   r3   test_yn  r   zTestCephes.test_ync                 C   r2  r\   )r.   yvr0   r2   r2   r3   test_yv  r   zTestCephes.test_yvc                 C   r2  r\   )r.   yver0   r2   r2   r3   
_check_yve  r   zTestCephes._check_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   rj   g      "g      "@g4׵/Yg8EGr?r  gffffff@ig>@r{   g|Pk?r  rH   ir  r  i   ig     j@  ļBg0"bgpتO#M?gMF>?g5-g`?g	S+?g6U?gǗʿgjD{?/,Gg` 0Gg!^?gnF5o{gI\Y?g7f8goC9	?gyhgEbr?g{g.
?ga~gT-s?gɤ,P&?g|bgޗY3g!ؑ-@gi$bghgy(V@^gһ>g>gx\h<r@   rA   )r   r)   r.   wofz)r1   r
  wr2   r2   r3   	test_wofz  sr   "zTestCephes.test_wofzN)__name__
__module____qualname__r4   r7   rW   r[   rd   rg   rk   rp   rq   ru   rw   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  pytestmarkxfailr  r  r  r  r  r  r  r  r!  r"  r(  r*  r+  r,  r-  r/  r1  r4  r6  r8  r:  r=  r@  rB  rD  rF  rH  rJ  rL  rM  rN  rP  rR  rS  rT  rV  rX  rZ  r\  r^  r`  rb  re  rg  ri  rk  rm  ro  rq  rs  ru  rw  ry  r{  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Z_TestCephes__check_nbdtrikr  r  r  r  r  r  r  Z_TestCephes__check_nctdtridfr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r%  r+  r2   r2   r2   r3   r+   .   s   

	r+   c                   @   <   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   r/   r   r   r   r2   r2   r3   r4     s   


zTestAiry.test_airyc                 C   s   t d}t d}d gd }tdD ]}|| tdtd  ||< qtddD ]}|| tttdtd   ||< q)t||d d S )Nr   r8   r:   gN贁N{?r>   )	r   r6   r/   r^   r   r   absr   r   )r1   abZb1rT   r2   r2   r3   r7     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 )Nr:   glgoe2+
g(0[g X*JgUfݿg˰zU`?g4c1=C?gCuTr8   r   r   )g&g(.2+
gRg}`g%́r  rH   )g7;1[ge*JgVwgL g<3r  )gNݿg3%IQ`?gZyΌ׿gʀ11^?g33tտro   )gqM0=C?g7uTg\G`?gp⍞vg$.m?)r   bi_zerosr   r   )r1   biZbiar2   r2   r3   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 )NrH   gcqg!xLgMSt$?g ~:p?r8   )r   ai_zerosr   r   )r1   Zair2   r2   r3   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  rH   r   rJ   rA   r   rK   r>   )guqgqHkZg4g9Ζ%gB~gL")gLgQO	gMQnGg3:g)}g )r   r;  r/   r5  r   )r1   r
  zpZai_zpxZaip_zxZai_zZaip_z_Zai_zpZaip_zpZai_envelopeZaip_enveloper2   r2   r3   test_ai_zeros_big"  "   
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=  rH   r   rJ   rA   r   rK   r>   )gx&gg-2+
gRgg`gu%́g{ )g K;1[g*JgVwg<w gd
3g/{
")r   r8  r/   r5  r   )r1   r
  r>  Zbi_zpxZbip_zxr?  Zbi_zZbip_zZbi_zpZbip_zpZbi_envelopeZbip_enveloper2   r2   r3   test_bi_zeros_big:  rA  zTestAiry.test_bi_zeros_bigN)	r,  r-  r.  r4   r7   r:  r<  r@  rB  r2   r2   r2   r3   r3    s    

!r3  c                   @      e Zd Zdd ZdS )TestAssocLaguerrec                 C   sL   t dd}t ddd}t||dd t ddd}t||dd d S )Nr  rH   r   r  )r   genlaguerreZassoc_laguerrer   )r1   Za1Za2r2   r2   r3   test_assoc_laguerreT  s
   z%TestAssocLaguerre.test_assoc_laguerreN)r,  r-  r.  rF  r2   r2   r2   r3   rD  S      rD  c                   @   rC  )TestBesselpolyc                 C      d S Nr2   r0   r2   r2   r3   r   ]     zTestBesselpoly.test_besselpolyN)r,  r-  r.  r   r2   r2   r2   r3   rH  \  rG  rH  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&
TestKelvinc                 C      t d}t|dd d S )Nr:   gT?r   )r   r|   r   )r1   Zmbeir2   r2   r3   r}   b     
zTestKelvin.test_beic                 C   rM  )Nr:   gD,X?r   )r   r   r   )r1   Zmbeipr2   r2   r3   r   f  rN  zTestKelvin.test_beipc                 C   rM  )Nr:   gPA4?r   )r   r   r   )r1   Zmberr2   r2   r3   r   j  rN  zTestKelvin.test_berc                 C   rM  )Nr:   gii߿r   )r   r   r   )r1   Zmberpr2   r2   r3   r   n  rN  zTestKelvin.test_berpc                 C   "   t d}t|tg dd d S )Nr   g&jj@g+"@g(rw+@gU2@g`<6@r8   )r   Z	bei_zerosr   r   )r1   r9  r2   r2   r3   test_bei_zerosr  s   
zTestKelvin.test_bei_zerosc                 C   rO  )Nr   )gyWo.@g╲ݏ @gנ{)@gK11@gWc"5@r  )r   Z
beip_zerosr   r   )r1   Zbipr2   r2   r3   test_beip_zeros{     
zTestKelvin.test_beip_zerosc                 C   rO  )Nr   g\@g6ُ@gӟHY'@g>"D0@ggaO;4@r8   )r   Z	ber_zerosr   r   )r1   r   r2   r2   r3   test_ber_zeros  rS  zTestKelvin.test_ber_zerosc                 C   rO  )Nr   g '@gs%@gF ^-@gvۅj3@gB7@r8   )r   Z
berp_zerosr   r   )r1   Zbrpr2   r2   r3   test_berp_zeros  rS  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 )Nr:   r  r  )r   rt  r   r   r|   rp  rl  r   r   rr  rn  )r1   Zmkelvr2   r2   r3   test_kelvin  s   
zTestKelvin.test_kelvinc                 C   rM  )Nr:   g>ɿr   )r   rl  r   )r1   Zmkeir2   r2   r3   rm    rN  zTestKelvin.test_keic                 C   rM  )Nr:   gr@d"?r   )r   rn  r   )r1   Zmkeipr2   r2   r3   ro    rN  zTestKelvin.test_keipc                 C   rM  )Nr:   gܙUr   )r   rp  r   )r1   Zmkerr2   r2   r3   rq    rN  zTestKelvin.test_kerc                 C   rM  )Nr:   g^.n3Jr   )r   rr  r   )r1   Zmkerpr2   r2   r3   rs    rN  zTestKelvin.test_kerpc                 C   rO  )Nr   gE>Q@gB= @gPN)@gm91@g
%5@r8   )r   Z	kei_zerosr   r   )r1   rl  r2   r2   r3   test_kei_zeros  rS  zTestKelvin.test_kei_zerosc                 C   rO  )Nr   gWf,@g?"@gFZ*o+@gOpN2@gEa6@r8   )r   Z
keip_zerosr   r   )r1   rn  r2   r2   r3   test_keip_zeros  rS  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   rT  r8   rP  )#?Q5U@q89 %@ol`.@gO0q3@rY  rV  )gum.@gݏ @gs{)@g䠄11@gN(D!5@gS@g89@@g^C'@g1ZG0@g+ڇ4@r[  )r   Zkelvin_zerosr   r   )
r1   tmpZberzZbeizZkerzZkeizZberpzZbeipzZkerpzZkeipzr2   r2   r3   test_kelvin_zeros  s4   
zTestKelvin.test_kelvin_zerosc                 C   rO  )Nr   )r]  r^  r_  r`  gD;q3@r8   )r   Z	ker_zerosr   r   )r1   rp  r2   r2   r3   test_ker_zeros  rS  zTestKelvin.test_ker_zerosc                 C   rO  )Nr   ra  r8   )r   Z
kerp_zerosr   r   )r1   rr  r2   r2   r3   test_kerp_zeros  rS  zTestKelvin.test_kerp_zerosN)r,  r-  r.  r}   r   r   r   rQ  rR  rU  rW  rX  rm  ro  rq  rs  rZ  r\  rc  rd  re  r2   r2   r2   r3   rL  a  s&    		.rL  c                   @   rC  )TestBernoullic                 C   rO  )Nr   )rj   r  g-!lV?r{   g镲r{   r8   )r   Z	bernoullir   r   )r1   Zbrnr2   r2   r3   test_bernoulli  s   
zTestBernoulli.test_bernoulliN)r,  r-  r.  rg  r2   r2   r2   r3   rf    rG  rf  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestBetac                 C   s:   t dd}t dt d t d }t||d d S )Nr:   r8   r>   r  )r   r   r   r   )r1   betZbetgr2   r2   r3   r     s   zTestBeta.test_betac                 C   s0   t dd}ttt dd}t||d d S )Nr:   r8   r  )r   r   r   r5  r   r   )r1   Zbetlnri  r2   r2   r3   r        zTestBeta.test_betalnc                 C   s   t ddd}t|dd d S )NrH   r   r  )r   r   r   )r1   Zbtincr2   r2   r3   r        zTestBeta.test_betaincc                 C   s,   t ddd}t dd|}t|dd d S )Nr:   r8   ri   r   )r   r   r   r   )r1   r	  compr2   r2   r3   r        zTestBeta.test_betaincinvN)r,  r-  r.  r   r   r   r   r2   r2   r2   r3   rh    s
    rh  c                   @   s4   e Z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tjdddd| d S )Nr  ro   r8         ^@g     @j@Texactx   )rq  Z
repetition   c                 S   s   g | ]
}t jd |ddqS )rY   Trp  )r   comb).0rU   r2   r2   r3   
<listcomp>!  s    z/TestCombinatorics.test_comb.<locals>.<listcomp>r'  rY   r   rL   rH   l   hU7`S?Q r  2   )r   r   rt  r   r   r   r^   listrM   Ziinfor]   max)r1   iir  r2   r2   r3   	test_comb  s   zTestCombinatorics.test_combc                 C   sB   d}d}t |}t |}ttj||ddtj||dd d S )NF   rD   Trp  )rM   Zint64r   r   rt  )r1   rT   rU   Znp_nZnp_kr2   r2   r3   test_comb_with_np_int64*  s   

z)TestCombinatorics.test_comb_with_np_int64c                 C   z   t tjddddd t tjddddd t tjddddd t tjddddd ttg dg d	g d
 d S )Nr:   ro   Trp  r   r=   Fr:   r=   r:   r  ro   ro   r=   ro   )r{   r{   r{   ro  )r   r   rt  r   r0   r2   r2   r3   test_comb_zeros2     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  ro   r8        @g     @Trp  i  )r   r   permr   r   r0   r2   r2   r3   	test_perm:  s   zTestCombinatorics.test_permc                 C   r  )Nr:   ro   Trp  r   r=   Fr  r  )r{   r{   r{   r  )r   r   r  r   r0   r2   r2   r3   test_perm_zeros?  r  z!TestCombinatorics.test_perm_zerosN)r,  r-  r.  r|  r~  r  r  r  r2   r2   r2   r3   rn    s    rn  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestTrigonometricc                 C      t d}d}t|| d S )N   r   )r   r   r   )r1   cbZcbrlr2   r2   r3   r   I     
zTestTrigonometric.test_cbrtc                 C      t d}d}t||d d S )Ngfffff;@g鎖C@r  )r   r   r   )r1   Zcb1Zcbrl1r2   r2   r3   test_cbrtmoreN     
zTestTrigonometric.test_cbrtmorec                 C   &   t d}ttd }t||d d S )Nr  r   r  r   r   r	   r   r   )r1   ZcdgZcdgrlr2   r2   r3   r   S     
zTestTrigonometric.test_cosdgc                 C   r  NrD         @r  r  )r1   ZcdgmZcdgmrlr2   r2   r3   test_cosdgmoreX  r  z TestTrigonometric.test_cosdgmorec                 C   sV   t dt dt td f}tdd tdd ttd d f}t||d d S )Nr   r  r  rH   r  )r   r   r   r	   r   )r1   csZcsrlr2   r2   r3   r   ]  s    &zTestTrigonometric.test_cosm1c                 C   *   t d}ttd d }t||d d S )NrD   r  r=   r  r   r   r
   r   r   )r1   ZctZctrlr2   r2   r3   r   b     
zTestTrigonometric.test_cotdgc                 C   r  )Nr   r   r=   r  r  )r1   Zct1Zctrl1r2   r2   r3   test_cotdgmoreg  r  z TestTrigonometric.test_cotdgmorec                 C   s   t tddd t tddd t tddd t tddd t td	dd t td
dd t tddd t tddd t tddd t tddd t tddd t tddd t tddd d S )Nr   rj      r   r  r{   i   y   i  i;  i  )r   r   r   r0   r2   r2   r3   test_specialpointsl  s   z$TestTrigonometric.test_specialpointsc                 C   s&   t tdgd ttdd d S )Nr   rH   r{   rj   )r   r   Zsincr   r0   r2   r2   r3   	test_sinc{  s   zTestTrigonometric.test_sincc                 C      t d}t|d d S r  )r   r   r   )r1   Zsnr2   r2   r3   r       
zTestTrigonometric.test_sindgc                 C   H   t d}ttd }t||d t d}ttd }t||d d S )NrD   r  r  r   r   )r   r   r   r   r   )r1   ZsnmZsnmrlZsnm1Zsnmrl1r2   r2   r3   test_sindgmore     

z TestTrigonometric.test_sindgmoreN)r,  r-  r.  r   r  r   r  r   r   r  r  r  r  r  r2   r2   r2   r3   r  H  s    r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )	TestTandgc                 C   r  r  r   r  r
   r   r   )r1   tnZtnrlr2   r2   r3   r    r  zTestTandg.test_tandgc                 C   r  )Nr   r   r  r  r   r  )r1   ZtnmZtnmrlZtnm1Ztnmrl1r2   r2   r3   test_tandgmore  r  zTestTandg.test_tandgmorec                 C   s   t tddd t tddd t tddd t tddd t td	dd t td
dd t tddd t tddd t tddd t tddd t tddd d S )Nr   r{   r  r   rj   r  r   r  r  r  iLr  r  r  r  )r   r   r  r0   r2   r2   r3   r    s   zTestTandg.test_specialpointsN)r,  r-  r.  r  r  r  r2   r2   r2   r3   r    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.ri   N)r   r   rM   r   r0   r2   r2   r3   test_ellipj_nan  s   zTestEllip.test_ellipj_nanc                 C   s0   t dd}tdtdddg}t||d d S )Nr   r   rj      )r   r   r   r	   r   )r1   elZrelr2   r2   r3   r     rj  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{   rj   r:   r=   gN?)
r   r!   r   r   r"   rM   r   r   r   r   )r1   elkr2   r2   r3   r     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 )Nr:   r   rb   rY   r  r   gfoKh?r  r{   rj   r   ri   gt?rH   r;   r   rA   6<R!?r  gfON?)r   r   r   r!   r   r   r   rM   r   r   r   )r1   Zelkincr  alphaphir  r2   r2   r3   r     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  rH   gV^8j?g,j6Ƅ@r:   )	rM   	nextafterr^   appendr   r   r   	full_liker   r1   Zmbadr  r  Zmvalsjr  f1r2   r2   r3   test_ellipkinc_2     
zTestEllip.test_ellipkinc_2c                 C   sD  t ddd}t ddd}t jdtd ddd}tt|d	t t |d
d tt|d	t t |d
d tt|d	t t |d
d t	tt jd d	t j
 tt| d	t t | d
d tt| d	t t | d
d tt| d	t t | d
d t	tt j d d	t j
 d S )Niir   gFFg<r  r:   Fr  rH   r(  rA   )rM   rZ   r  r   r   r   r   Zarcsinhr
   r   r   )r1   ZxlogZxlinZxlin2r2   r2   r3   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{   r:   rj   r  g?eg@)	r   r    r   r   r   rM   r   r   r   )r1   eler2   r2   r3   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 )Nr:   r   r  4   r  #   g'?r  r{   rj   r   ri   r  r  gL@)r   r   r   r    r   r   r   rM   r   r   r   )r1   Zeleincr  r  r  r  r2   r2   r3   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  rH   g%?r:   gXo
@r8   )	rM   r  r^   r  r   r   r   r  r   r  r2   r2   r3   test_ellipeinc_2   r  zTestEllip.test_ellipeinc_2N)r,  r-  r.  r  r   r   r   r  r  r   r   r  r2   r2   r2   r3   r    s    r  c                   @   sN   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Ze	j
jdddd ZdS )TestEllipCarlsonzTest for Carlson elliptic integrals ellipr[cdfgj].
    The special values used in these tests can be found in Sec. 3 of Carlson
    (1994), https://arxiv.org/abs/math/9409227
    c                 C   s   t tddd tdtdksJ ttddsJ tdtdtdks&J tddgddgddgddgdd	gdd
gg}ttjtdddtdd dg}t	|D ]\}}t t| ||  qSd S )NrH   r{   r   r   g      @r   r                      r   y
c?
cy=B?CGֿr   y檠f?P9lb?)
r   r#   r   r   r   r   rM   r   r   	enumerater1   argsZexpected_resultsr`   arrr2   r2   r3   test_elliprc6  s*   zTestEllipCarlson.test_elliprcc                 C   s(  t tdddd t tdddd d tddtdksJ ttddds)J ttddtdds7J ttddtddsEJ ttddttjj	 d sWJ ttddtddsdJ t
g d	g d
g dg dg dg dg}t
g d}t|D ]\}}t t| ||  qd S )NrH   r   r:   r   g`C+?r{   r   r=   )r{   r   rj   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   rM   r   r   r   r   Zdoubletinyr   r  r  r2   r2   r3   test_elliprdJ  s&   $zTestEllipCarlson.test_elliprdc              	   C   s   t tdddd t tdddd tdtddksJ ttddds'J ttddds1J tttdddks=J ttddtt dsKJ tg dg dg d	g d
g dg dg dg}tg d}t|D ]\}}t t| ||  qnd S )NrH   r   r:   gPO?r{   r=   )rj   r   r{   )r  r  r{   )ri   rj   r{   r  r  r{   r  r  )r  r        ?      )geQO?ʞu5J?r  yp\y?kg2ΰ?gHwд?y|pF?-6Fj)	r   r%   r   rM   r   r   r   r   r  r  r2   r2   r3   test_elliprfb  s&   zTestEllipCarlson.test_elliprfc                 C   s   t tdddd t tdddd t tdddd ttdtds&J ttttdds3J tg dg dg dg dg dg d	g}ttjd
ddddg}t|D ]\}}t t| ||  qXd S )NrH   r   ri   )r{         0@r  r  r  r  )r  r  r  )r{   g8d`?r   gL+?g}^?y旮0?ʋW?yjN?^?gt?)	r   r&   rM   r   r   r   r   r   r  r  r2   r2   r3   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s+J tdddtdks6J tg dg dg dg dg d	g d
g dg dg dg	}tg d}t|D ]\}}t t| ||  q_d S )NrH   r{   r   r=   )r{   rj   r   r   )r   r   r   rt   )r   r   r   r  )r  r  r{   r   )r              rj   r   )r  r  r{   r  )r  r  rj   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  r2   r2   r3   test_elliprj  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|>g+<r  r   g   ,@g    x=g   @e:g   `ݽ>g(HR)A)r   r'   r0   r2   r2   r3   test_elliprj_hard  s    
z"TestEllipCarlson.test_elliprj_hardN)r,  r-  r.  __doc__r  r  r  r  r  r/  r0  r1  r  r2   r2   r2   r3   r  1  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   rj   r   r   r=   r{   )rM   r   Zm_n1_1r   r   minZmax_neglog2Z
very_neg_mZconcatenate
ms_up_to_1r0   r2   r2   r3   setup_class  s   

z.TestEllipLegendreCarlsonIdentities.setup_classc                 C   s$   | j }tt|tdd| d dS )z5Test identity:
        K(m) = R_F(0, 1-m, 1)
        r{   rj   N)r  r   r!   r%   r1   r  r2   r2   r3   test_k  s   z)TestEllipLegendreCarlsonIdentities.test_kc                 C   s>   t tj}|dtdt|   }tt|td|d dS )z\Test identity:
        K(m) = R_F(0, 1-m, 1)
        But with the ellipkm1 function
        r   r{   rj   N)	r   r   r  r   rM   r  r   r"   r%   )r1   r  Zm1r2   r2   r3   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{   rj   N)r  r   r    r&   r  r2   r2   r3   test_e  s   "z)TestEllipLegendreCarlsonIdentities.test_eN)r,  r-  r.  r  r  r  r  r  r2   r2   r2   r3   r    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   rM  )Nr   g);T?r  )r   r   r   )r1   Zerr2   r2   r3   r     rN  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'>@r8   )r   Z	erf_zerosr   r   )r1   ZerzZerzrr2   r2   r3   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	> ||}	||j}
t |	}|	| }	|| }t |
}|
| }
|| }t||	|||d
 t||
|||d
 W d    d S 1 s{w   Y  d S )NrC   r  g{Gz?r:   r   rH   r  ignoreallr   )	rM   rR   rS   paretorandinterrstater   Zisfiniter)   )r1   funcZ
other_funcrB   rL   rT   r   r	  r
  r*  Zw_realmaskr2   r2   r3   _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 r\   r.   r   r
  r2   r2   r3   <lambda>  s    z.TestErf.test_erfc_consistent.<locals>.<lambda>re   r   r   )r  r.   r   r0   r2   r2   r3   test_erfc_consistent  s   
zTestErf.test_erfc_consistentc                 C      | j tjdd dd d S )Nc                 S   s   t | |  t|  S rJ  )rM   r   r.   r   r  r2   r2   r3   r    s    z/TestErf.test_erfcx_consistent.<locals>.<lambda>re   rA   )r  r.   erfcxr0   r2   r2   r3   test_erfcx_consistent  
   
zTestErf.test_erfcx_consistentc                 C   r  )Nc                 S   s   dt d|   S )Nr  r  r  r  r2   r2   r3   r    s    z.TestErf.test_erfi_consistent.<locals>.<lambda>re   rA   )r  r.   erfir0   r2   r2   r3   test_erfi_consistent  r  zTestErf.test_erfi_consistentc                 C   r  )Nc                 S   s&   t td t|  |   t|  S rc  )r   r   rM   r   r.   r  r  r2   r2   r3   r  %  s   & z/TestErf.test_dawsn_consistent.<locals>.<lambda>re   rA   )r  r.   r   r0   r2   r2   r3   test_dawsn_consistent"  r  zTestErf.test_dawsn_consistentc                 C   6   t jt j t jg}t jddg}tt||dd d S )Nr=   rH   r   rA   )rM   r   r   r   r   r   r1   r'  r  r2   r2   r3   test_erf_nan_inf)     zTestErf.test_erf_nan_infc                 C   r  )Nr:   r   r   rA   )rM   r   r   r   r   r   r   r2   r2   r3   test_erfc_nan_inf.  r  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   rA   )rM   r   r   r   r   r  r   r2   r2   r3   test_erfcx_nan_inf3  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   rA   )rM   r   r   r   r   r  r   r2   r2   r3   test_erfi_nan_inf8  s   zTestErf.test_erfi_nan_infc                 C   r  )Nr|  r{   r   rA   )rM   r   r   r   r   r   r   r2   r2   r3   test_dawsn_nan_inf=  r  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   rA   )rM   r   r   r   r   r)  r   r2   r2   r3   test_wofz_nan_infB  s   zTestErf.test_wofz_nan_infN)r   )r,  r-  r.  r   r  r  r  r  r  r  r  r  r  r  r  r  r2   r2   r2   r3   r    s    
	r  c                   @   rC  )	TestEulerc           
      C   s  t d}t d}t d}t|dgdd t|ddgdd t|g ddd t d}g d}td	d
}tddD ]}|d rNt||  |d| < q<t|| |d| < q<tjdd t|| | }t	|}	W d    n1 svw   Y  t
|	dd d S )Nr   rH   r:   r   rA   )rH   r   r=   r   )rH   rH   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   r^   r_   rM   r  r   rz  r   )
r1   Zeu0Zeu1Zeu2Zeu24Z	mathworldcorrectrU   errZerrmaxr2   r2   r3   
test_eulerI  s$   





zTestEuler.test_eulerN)r,  r-  r.  r  r2   r2   r2   r3   r  H  rG  r  c                   @   r2  )TestExpc                 C   r  )Nr:   r8   )r   r   r   r1   exZexrlr2   r2   r3   r   b  r  zTestExp.test_exp2c                 C   r  )N      @g;f@r  )r   r   r   r1   ZexmZexmrlr2   r2   r3   test_exp2moreg  r  zTestExp.test_exp2morec                 C   r  )Nr:   r  )r   r   r   r  r2   r2   r3   r   l  r  zTestExp.test_exp10c                 C   r  )Nr  gYs@r  )r   r   r   r  r2   r2   r3   test_exp10moreq  r  zTestExp.test_exp10morec                 C   N   t dt dt df}tdd tdd tdd f}t||d d S )Nr:   ro   r8   rH   r  r   r   r   r   r  r2   r2   r3   r   v     "zTestExp.test_expm1c                 C   r  )Nr:    @皙@rH   r  r  )r1   Zex1Zexrl1r2   r2   r3   test_expm1more{  r  zTestExp.test_expm1moreN)	r,  r-  r.  r   r  r   r  r   r  r2   r2   r2   r3   r  a  s    r  c                	   @   s   e Zd Zdd Zejdddeddfeddfgd	d
 Z	dd Z
dd Zejdejdfejdfeejgdfeejgdfgdd Zejjejdkdddd ZdS )TestFactorialFunctionsc                 C   s  t tdd t tdd t tdd t g dtjg ddd t tdd	gd
d	ggddgddgg ttjdddd ttjdddd ttjdddd ttjdddd ttjdddd ttjg dddg d ttdd	gd
d	ggdddgddgg tttdddttddd tttdddttddd tttdddttddd dD ]}tdtd| tg dtg d| qtddD ]Q}t|}t|t|d t|t|gdd  t	t
|t|d t	t
|t|gdd  tt|dt|d tt|gdt|gd qd S )Nr   rH   r:   )r  r  ro  )ro   r8   r   Frp  r   ro   r8   rr  r>   r   Trb       Xn)r<   r8   rb   r  )i  r   r  i _7    )TF)rH   r:   r   r   )rH   r:   r#  )r   r   	factorialr   rM   r   r   r^   mathr   r_   )r1   rq  rT   r  r2   r2   r3   test_factorial  s^   

z%TestFactorialFunctions.test_factorialzx, exact)rH   T)rH   FrH   TFc                 C   s   t tj||dsJ d S Nrp  )rM   Zisscalarr   r   )r1   r   rq  r2   r2   r3   test_factorial_0d_return_type  s   z4TestFactorialFunctions.test_factorial_0d_return_typec                 C   s4   t g dtjg ddd ttjdddd d S )N)g     @Z@g      x@g     @)r<   r  r  Frp  r<   Ti   )r   r   Z
factorial2r   r0   r2   r2   r3   test_factorial2  s   z&TestFactorialFunctions.test_factorial2c                 C   s0   t tjddddd t tjddddd d S )Nr   rH   Trp  rr  ro   r  )r   r   Z
factorialkr0   r2   r2   r3   test_factorialk     z&TestFactorialFunctions.test_factorialkc                 C   s    t j||d}tt| d S r#  )r   r   r   rM   r   )r1   r   rq  r  r2   r2   r3   test_nan_inputs  s   z&TestFactorialFunctions.test_nan_inputs)ro   r  z*Python 3.10+ math.factorial() requires intr  c              	   C   s   t t jdddt jg}t ;}|td tj|dd}tt t jdddt jg| tj|dd}tt t jdddt jg| W d    d S 1 sMw   Y  d S )	NrH   r:   ro   z-Using factorial\(\) with floats is deprecatedTrp  r>   F)	rM   r   r   r   r  DeprecationWarningr   r   r   )r1   r   r  r  r2   r2   r3   test_mixed_nan_inputs  s    "z,TestFactorialFunctions.test_mixed_nan_inputsN)r,  r-  r.  r"  r/  r0  parametrizerM   r   r$  r&  r'  r   r)  Zskipifsysversion_infor+  r2   r2   r2   r3   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)ri   gN?ց[?)y      ?        r0  r1  )y       ?yn<ӿj<Cy)BR;߿ux7Q?)y      yھ|}-2?y/?!ۿ)r  GM?pBR?)y      @        r2  r3  )y              @y       GMܿy        pBR?)y              gGMܿgpBR߿)y             y        GM?y       pBR߿ri   r  c                 C   s&   t t|}t|t ||gd d S )Nr  )r   r   r  r   )r1   r
  r  r  frsr2   r2   r3   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@Ǻ?ro   )y.1?ǘ?yʡE6@:#J{/?yq-
@y&1?yh o@߾3?yW2q@qh?r   rH   r  )r   fresnel_zerosr   r   r  )r1   szoczoZvals1Zvals2r2   r2   r3   test_fresnel_zeros  s   

zTestFresnel.test_fresnel_zerosc                 C   s(   t d\}}t d}t||d d S )Nr>   r  )r   r6  Zfresnelc_zerosr   )r1   r7  r8  Zfrcr2   r2   r3   test_fresnelc_zeros"     
zTestFresnel.test_fresnelc_zerosc                 C   s(   t d\}}t d}t||d d S )Nr   r  )r   r6  Zfresnels_zerosr   )r1   r7  r8  r4  r2   r2   r3   test_fresnels_zeros'  r;  zTestFresnel.test_fresnels_zerosN)r,  r-  r.  r/  r0  r,  rM   r   r5  r9  r:  r<  r2   r2   r2   r3   r/    s$    

r/  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   r  r  )r   r   r   )r1   Zgamr2   r2   r3   r  .  r  zTestGamma.test_gammac                 C   s(   t d}tt d}t||d d S )Nro   r  )r   r   r   r   r   )r1   ZgamlnZlngamr2   r2   r3   r"  2     
zTestGamma.test_gammalnc                 C   s(   t dd}t dd}t||d d S )Nri   r  )r   r   gammaincinvr   )r1   ZgccinvZgcinvr2   r2   r3   r!  7     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 )
Nr;   rH   r  g?g`	\;r   rx  gmb<g      &@)r   r?  gammaincr   r1   r	  r   r2   r2   r3   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?rH   g^F    ?r;   re   rA   )rM   r  r   r?  rA  r   )r1   ZptsZxpr	  r   r2   r2   r3   test_975H  s   zTestGamma.test_975c                 C   s(   t d}dt d }t||d d S )Nr  rH   )r   r&  r   r   )r1   ZrgamZrlgamr2   r2   r3   r  U  r>  zTestGamma.test_rgammac                 C   s(   t ttd ttdd d S )Nr=   r   )r   rM   r   r   r   r   r&  r0   r2   r2   r3   test_infinityZ  s   zTestGamma.test_infinityN)r,  r-  r.  r  r"  r!  r(   rC  rD  r  rE  r2   r2   r2   r3   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   "   t tddtdd d d S Nr  r:   ro   r  )r   r   r3  r0   r2   r2   r3   
test_negv1a     "zTestHankel.test_negv1c                 C   8   t dd}t ddt ddd  }t||d d S NrH   r  r  r  )r   r3  r_  r"  r   )r1   Zhank1Zhankrlr2   r2   r3   r4  d     zTestHankel.test_hankel1c                 C   rG  rH  )r   r   r5  r0   r2   r2   r3   test_negv1ei  rJ  zTestHankel.test_negv1ec                 C   0   t dd}t ddtd }t||d d S )NrH   r  y       r  )r   r5  r3  r   r   )r1   Zhank1eZhankrler2   r2   r3   r6  l  rj  zTestHankel.test_hankel1ec                 C   rG  rH  )r   r   r7  r0   r2   r2   r3   
test_negv2q  rJ  zTestHankel.test_negv2c                 C   8   t dd}t ddt ddd  }t||d d S rL  )r   r7  r_  r"  r   )r1   Zhank2Zhankrl2r2   r2   r3   r8  t  rM  zTestHankel.test_hankel2c                 C   rG  rH  )r   r   r9  r0   r2   r2   r3   
test_neg2ey  rJ  zTestHankel.test_neg2ec                 C   s(   t dd}t dd}t||d d S )NrH   r  r  )r   r9  r   )r1   Zhank2eZhankrl2er2   r2   r3   test_hankl2e|  r@  zTestHankel.test_hankl2eN)r,  r-  r.  rI  r4  rN  r6  rP  r8  rR  rS  r2   r2   r2   r3   rF  _  s    rF  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   rK  rL  )r   Zh1vpjvpyvpr   )r1   Zh1Zh1realr2   r2   r3   	test_h1vp  rM  zTestHyper.test_h1vpc                 C   rQ  rL  )r   Zh2vprU  rV  r   )r1   Zh2Zh2realr2   r2   r3   	test_h2vp  rM  zTestHyper.test_h2vpc                 C   s  t tddddd t tddddd td	g d
}tg d}t ||dd td	tg d
d }t ||tdd g d}g d}t||}g d}t ||dd tt|gd |}t |t|gd dd tt	tjt|gd ddg d S )Nr  ri   Qvo?re   rA   r   rj   r   r   )g      r=   r   rH   r  )g̷?g3|t-Ք?rj   go?g{h?r   ri   r  r  )r   rH   ri   )rj   gc?rY  r:   ro   rH   )
r   r   hyp0f1rM   r   r   r   	row_stackassert_raises
ValueError)r1   r   r  Zx1Zx2r2   r2   r3   test_hyp0f1  s"   zTestHyper.test_hyp0f1c                 C   s   t dd}t|d d S )N皙?      ?      ?y;EG?uM?)r   r[  r   )r1   resr2   r2   r3   test_hyp0f1_gh5764  s   zTestHyper.test_hyp0f1_gh5764c                 C   s  t ddd}t|dd tg g dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg dg d g d!g d"g d#g d$g d%g d&g d'g d(g d)g d*g d+g d,g d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9g d:g d;g d<g d=g d>g d?g d@g dAg dBg dCg dDg dEg dFg dGg dHg dIg dJg dKg dLg dMg dNg dOg dPg dQg dRg dSg dTg dUg dVg dWg dXg dYg dZg d[g d\g d]g d^g d_g d`g dag dbg dcg ddg deg dfg dgg dh}|D ]\}}}}t |||}tt|| | dik  qd S )jNr  r  g?r<   )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   r5  )r1   hyp1Zref_datar6  r7  r  r  r  r2   r2   r3   r=    s  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcezTestHyper.test_hyp1f1c                 C   s,   t ddd}t ddd}t||d d S )Nri   r  g7B.g|:B.r  r   r<  r   )r1   rd  Zhyp2r2   r2   r3   test_hyp1f1_gh2957 	  rm  zTestHyper.test_hyp1f1_gh2957c                 C   s   t ddd}t|dd d S )Nri   r  ig<`?r  re  )r1   Zhypr2   r2   r3   test_hyp1f1_gh2282%	  rk  zTestHyper.test_hyp1f1_gh2282c           	      C   s  dddddt d gdddddtd	 gddd
d	dt d gg ddddtd	d
 tdgddddtdtd td td gdd
d
ddtt td
 td td gdd
dddtt td td td gdddddtd td td td gg dg d g d!g d"g d#d$d%g}t|D ]\}\}}}}}t	||||}t
||dd&| d' qd S )(Nri   rH   r  |Gz?r  g?g|Gzrt   r   r:   r  r`  )ro   r  r  rh  gYi2?r  ro   g433333?r8   r  r   r=   g      ?r   g      ?r   g      @g      gUUUUUUտg  @gUUUUUU?g)r  r  rj         $gEciH!@)r  ro   rH   r  gzG?)r:   r  rH   r  gy&1|)r;  ro   rH   r  g"nN%@?)r:   r  rH   r  g!J)r  |      %@r4  gzS;)r  rj  g      %r4  g[B.VP<test #%derr_msg)r   r   r   r	   r   r   r   r   r  r?  r   )	r1   r   r`   r6  r7  r  r   r  cvr2   r2   r3   r@  )	  sN   0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 )NrH   r  r  g D?r<   )r  r  333333?g)r  g	@r&  g	ri   r:   r  )	r   hyperur   r   r   r   r<  r   r   )r1   Zval1r6  r7  r
  ZhypuZhprlr2   r2   r3   test_hyperuH	  s   $zTestHyper.test_hyperuc                 C   s   t tddddd d S )NrH   r  g3333334@g(¨?r  )r   r   rq  r0   r2   r2   r3   test_hyperu_gh2287U	  s   zTestHyper.test_hyperu_gh2287N)r,  r-  r.  rW  rX  r_  rc  r=  rf  rg  r@  rr  rs  r2   r2   r2   r3   rT    s    rrT  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   &   t td}t|t ddgd d S )Nr   gbɃ?gΝJ ֿr  )r   r   rQ  r   )r1   Zit0r2   r2   r3   rR  [	     zTestBessel.test_itj0y0c                 C   ru  )Nr   gbqTtt?g/]ooۿr  )r   r   rK  r   )r1   Zit2r2   r2   r3   rL  _	  rv  zTestBessel.test_it2j0y0c                 C      t tddtdd d S Nro   r:   r  )r   r   rU  r0   r2   r2   r3   test_negv_ivc	     zTestBessel.test_negv_ivc                 C   &   t d}t dd}t||d d S Nr  r   r  )r   rY  r]  r   r1   ZozZozrr2   r2   r3   rZ  f	  r  zTestBessel.test_j0c                 C   r{  Nr  rH   r  )r   r[  r]  r   r1   Zo1Zo1rr2   r2   r3   r\  k	  r  zTestBessel.test_j1c                 C      t dd}t|dd d S )NrH   r   ;x?r  )r   r]  r   )r1   Zjnnrr2   r2   r3   r^  p	     zTestBessel.test_jnc                 C   rG  rH  )r   r   r_  r0   r2   r2   r3   test_negv_jvt	  rJ  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  rJ   g)%->)g@rJ   g5c)!9)r  r   g%,Ϳr  rl  rm  )r  r   r_  r   )r1   r   r`   r  r   r	  Zycr2   r2   r3   r`  w	  s   zTestBessel.test_jvc                 C   rG  rH  )r   r   ra  r0   r2   r2   r3   test_negv_jve	  rJ  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 )NrH   r   r  r  ?      ?)r   ra  r   r_  r   r5  r  )r1   ZjvexpZjvexp1r
  Zjvexprr2   r2   r3   test_jve	  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   rH   )go@.=@gzj,[@glN!@g5/ D'@gh>-@r8   gW@g0@gQX$@g*@g8*5{x0@rG   )gEk[@g~Cju]@gYrʝ^@g, `@gf	`@r@   rA   -  )gts@g&ǭr3t@gWt@g,$Y&u@gu@)r   jn_zerosr   r   r   )r1   jn0Zjn1Zjn102Zjn301r2   r2   r3   test_jn_zeros	  s    
zTestBessel.test_jn_zerosc                 C   s   t dd}t|d ddd t|d ddd t|d	 d
dd t dd}t|d ddd t|d ddd t|d	 ddd t dd}t|tg ddd d S )Nr   rX   i  g;@r@   rA   i  g8v@i+  gׂMm@r  gxi@g	,@gи{>@i  r   )gUDX@g!@g*HS@gz5 @g@2;@r  )r   r  r   r   )r1   r  Zjn10Zjn3010r2   r2   r3   test_jn_zeros_slow	  s   
zTestBessel.test_jn_zeros_slowc           
         s   t j  fdd}tddD ]:}t |\}}}}t|||D ](\}}}	|	dkr3t ||ddd q|	dkrBt|||ddd qtd| qd S )	Nc                    s     | d | | d | d S )NrH   r:   r2   )rT   r   r]  r2   r3   jnp	      z(TestBessel.test_jnjnp_zeros.<locals>.jnprH   rD   r   r  rw  zInvalid t return for nt=%d)r   r]  r^   Zjnjnp_zeroszipr   AssertionError)
r1   r  ntr
  rT   r  tZzznnttr2   r  r3   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 )	NrH   r   g(yu?gOXeS@ga!@gxi'@g'Nw(-@r8     r   r   rw  )r   Z	jnp_zerosr   r   r   rU  )r1   r  r2   r2   r3   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 )NrH   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   )r1   Zjnzr2   r2   r3   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 )Nr:   rH   ro   r  )r   rU  r_  r   )r1   ZjvprimZjv0r2   r2   r3   test_jvp	  rM  zTestBessel.test_jvpc                 C   r{  r|  )r   rd  r  r   )r1   ZozkZozkrr2   r2   r3   re  	  r  zTestBessel.test_k0c                 C   r{  r|  )r   rf  r  r   )r1   ZozkeZozkerr2   r2   r3   rg  	  r  zTestBessel.test_k0ec                 C   r{  r~  )r   rh  r  r   )r1   Zo1kZo1krr2   r2   r3   ri  	  r  zTestBessel.test_k1c                 C   r{  r~  )r   rj  r  r   )r1   Zo1keZo1kerr2   r2   r3   rk  	  r  zTestBessel.test_k1ec           
      C   s  dt j  d }dt j  d }td||}td||}td||}td||}t|jdgd t|jt|| d || gd d || d || d  d|| d  |d  d|d  |d  g}|d |d d|d   |d |d  |d  g}t|jt|d	 d || d || d  || d
  d
|| d  || d  |d  d|| d  |d  |d  d|d  |d  |d  g}|d |d d|d   |d d|d   d|d   |d |d  |d  |d  g}	t|jt|	d d d S )Nr   rH   r   r:   ro   r  r   r8   r   r>   r  r  g      H@)rM   rR   r   Zjacobir   r  r   )
r1   r6  r7  ZP0ZP1ZP2ZP3cpZp2cZp3cr2   r2   r3   test_jacobi
  s    &B2D8XzTestBessel.test_jacobic                 C   r  )Nr   r   _2?r  )r   rv  r   )r1   Zkn1r2   r2   r3   rw  
  r  zTestBessel.test_knc                 C   rw  Nr   r  r  r   r   r  r0   r2   r2   r3   test_negv_kv
  rz  zTestBessel.test_negv_kvc                 C   r  )Nr   r   r  r  r   r  r   )r1   Zkv0r2   r2   r3   test_kv0
  r  zTestBessel.test_kv0c                 C   r  )NrH   r   gKދ@r  r  )r1   kv1r2   r2   r3   test_kv1!
  r  zTestBessel.test_kv1c                 C   r  )Nr:   r   g)lHH@r  r  )r1   kv2r2   r2   r3   test_kv2%
  r  zTestBessel.test_kv2c                 C   r   )N    rH   g.Ք"H)r   r   rv  r0   r2   r2   r3   test_kn_largeorder)
  r   zTestBessel.test_kn_largeorderc                 C   s   t tddd d S )Nr   g =`XCr  r0   r2   r2   r3   test_kv_largearg,
  r   zTestBessel.test_kv_largeargc                 C   rw  r  )r   r   r  r0   r2   r2   r3   test_negv_kve/
  rz  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   r  r  r   r   )r1   Zkve1r  r
  Zkve2r  r2   r2   r3   test_kve2
  s   zTestBessel.test_kvec                 C   s*   d}t td| tjd|ddd d S )Nr  rH   r   rT   r  )r   r   r  kvp)r1   r
  r2   r2   r3   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  rH   r  r  r   r  r  r   r1   r  r
  Zxcr   r2   r2   r3   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  r:   rH   r  r  r  r  r2   r2   r3   test_kvp_n2F
  s
   <zTestBessel.test_kvp_n2c                 C   r{  r|  )r   r  r   r   r}  r2   r2   r3   r  M
  r  zTestBessel.test_y0c                 C   r{  r~  )r   r  r   r   r  r2   r2   r3   r  R
  r  zTestBessel.test_y1c                 C   sp   t d\}}t jddd\}}t||f }t||f }ttt d|dd ttt d|| dd d S )Nr:   rH   r   r{   r  )r   Zy0_zerosr   r   r5  r"  )r1   ZyoZypoZzoZzpor  Zallvalr2   r2   r3   test_y0_zerosW
  s    zTestBessel.test_y0_zerosc                 C   s*   t d}t|tdgtdgfd d S )NrH   r  gѮBO?r   )r   Zy1_zerosr   r   )r1   r  r2   r2   r3   test_y1_zeros_
  s   
 zTestBessel.test_y1_zerosc                 C   s.   t jddd}t|tdgtdgfd d S )NrH   r  yL
F%u?!rh?y;OnгY?ro   )r   Z	y1p_zerosr   r   )r1   Zy1pr2   r2   r3   test_y1p_zerosc
  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 )
Nr8   r:   g3@g(A&"@r   r  )g]E.+"|@gH(|@gff|}@g&b`~@gHO_~@r   rA   )r   Zyn_zerosr   r   r   )r1   Zanr2   r2   r3   test_yn_zerosg
  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   r:   gQhվ@gzN@r>   +   r   r   rw  r  r   )r   	ynp_zerosr   r   r   rV  r1   Zaor2   r2   r3   test_ynp_zeroso
  s   zTestBessel.test_ynp_zerosc                 C   s&   t dd}tt d|ddd d S )Nr  r   r   r   rw  )r   r  r   rV  r  r2   r2   r3   test_ynp_zeros_large_orderw
  s   z%TestBessel.test_ynp_zeros_large_orderc                 C   r  NrH   r   5,1
r  )r   r   r   )r1   Zyn2nr2   r2   r3   r!  {
  r  zTestBessel.test_ync                 C   rG  rH  )r   r   r"  r0   r2   r2   r3   test_negv_yv
  rJ  zTestBessel.test_negv_yvc                 C   r  r  )r   r"  r   )r1   Zyv2r2   r2   r3   r#  
  r  zTestBessel.test_yvc                 C   rG  rH  )r   r   r$  r0   r2   r2   r3   test_negv_yve
  rJ  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 )NrH   r   r  r  r  r=   )r   r$  r   r"  r   )r1   Zyve2Zyve2rZyve22r2   r2   r3   test_yve
  s
   zTestBessel.test_yvec                 C   s8   t ddt dd d }t dd}t||d d S )NrH   r   ro   r   r:   r  )r   r"  rV  r   )r1   ZyvprZyvp1r2   r2   r3   test_yvp
     zTestBessel.test_yvpc                 c   sF    g d}g d}t ||E dH  t dtdd dgE dH  dS )z>Yield points at which to compare Cephes implementation to AMOS)ir         4ri  r   r  r{   rj   {G(@ro  r  )ir  r=   rj   r        i@g     y@g     Ă@g@  i'  Nri   ir  r  )	itertoolsproductr   )r1   r  r
  r2   r2   r3   _cephes_vs_amos_points
  s
   "z!TestBessel._cephes_vs_amos_pointsdy=r   Nc                 C   s   |   D ]a\}}|d ur|||rq||||||d |t||}}	}
t|r9tt|	dk||f qt|rIt|	jdk||f qt||	||f||d |t|kret|
|	||f||d qd S )Nr   u <7~r   )rn  rB   rL   )	r  r]   rM   r   r   r5  r   r  r   )r1   r  f2rB   rL   skipr  r
  c1c2Zc3r2   r2   r3   check_cephes_vs_amos
  s   *

zTestBessel.check_cephes_vs_amosZppc64lezfails on ppc64ler  c                 C      | j tjtjddd d S )NrJ   u5% r   )r  r   r_  r]  r0   r2   r2   r3   test_jv_cephes_vs_amos
     z!TestBessel.test_jv_cephes_vs_amosc                 C   r  )Nr  r  r   r  r   r"  r   r0   r2   r2   r3   test_yv_cephes_vs_amos
  r  z!TestBessel.test_yv_cephes_vs_amosc                 C   s$   dd }| j tjtjdd|d d S )Nc                 S   s   t | dkS )Nrx  )r5  )r  r
  r2   r2   r3   r  
  s    zETestBessel.test_yv_cephes_vs_amos_only_small_orders.<locals>.<lambda>r  r  )rB   rL   r  r  )r1   Zskipperr2   r2   r3   (test_yv_cephes_vs_amos_only_small_orders
  s   z3TestBessel.test_yv_cephes_vs_amos_only_small_ordersc                 C   sH   t jdd | jtjtjddd W d    d S 1 sw   Y  d S )Nr  r  g:0y5>r  r   )rM   r  r  r   rU  r0   r2   r2   r3   test_iv_cephes_vs_amos
  s   "z!TestBessel.test_iv_cephes_vs_amosc           	   
   C   sx  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||< t jd
dG t	||}t	||d }t j
|t|dk< t j
|t|dk< d	|t|dk < d	|t|dk < t|| d }d	|t |< W d    n1 sw   Y  t |}t|| dk || || t	|| || t	|| || d f d S )Ni@B rH   ri   r=   r:   )r   r   r  r   r  r  r   r  gYngH׊>)rM   rR   rS   r  r  r   r]   r  r   rU  r   r5  r   Zargmaxr   )	r1   Nr  r   Zimskr  r  ZdcrU   r2   r2   r3    test_iv_cephes_vs_amos_mass_test
  s$   ""
Jz+TestBessel.test_iv_cephes_vs_amos_mass_testc                 C   s0   | j tjtjddd | j tjtjddd d S )Nr   r  r   )r  r   r  rv  r0   r2   r2   r3   test_kv_cephes_vs_amos
  r(  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 )	Nro   r8   gP?r  r  g~Omʒ?gY8E@@gKSn)r   r   r_  r0   r2   r2   r3   test_ticket_623
  r  zTestBessel.test_ticket_623c                 C   s  t tddd t tddd t tddd t tddd t tddd t tddd	 t tddd
 t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd	 t tddd
 t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddtddtd  t tddtddtd  t t	ddtddtd  t t
ddtddtd  t tddtdddtdd   t tddtdddtdd   dS )zNegative-order Besselsr=   rH   gl)ܿr  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?g333333ӿy333333?      ?r  N)r   r   r_  r"  rU  r  ra  r   r$  rW  r  r3  r7  r0   r2   r2   r3   test_ticket_853
  sD   """"*.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 domainsri   r=   rH   r   r:   r8   N)r   r   r   r_  rU  r"  r  ra  rW  r$  r  r6   r  anyr0   r2   r2   r3   test_ticket_854  s   &,zTestBessel.test_ticket_854c                 C   s0   t tddtjk t tddtjk d S )Nr  r   )r   r   r  rM   r   r  r0   r2   r2   r3   test_gh_7909%  r(  zTestBessel.test_gh_7909c                 C   s(   t tddd t tddd dS )zReal-valued Bessel I overflowrH   i  g~rE   i`  g ?los~Nr   r   rU  r0   r2   r2   r3   test_ticket_503)  s   zTestBessel.test_ticket_503c                 C   r   )Nr  rH   r  r  r0   r2   r2   r3   test_iv_hyperg_poles.  r   zTestBessel.test_iv_hyperg_poles   c                 C   s   t d|t}|d|  td|  t|d  t|| d  }t|t|< t|}t	|
 ttj | t	|d d  }| |fS )Nr   r:   ri   rH   r=   r  )r   r   r   r   r   r   r   r   r   r5  rz  r   epssumr1   r  r
  rT   rU   rr  r2   r2   r3   	iv_series1  s   8*zTestBessel.iv_seriesc                 C   4   dD ]}|  d|\}}tt||||d qd S )Nrj   r   r  r   rL   rn  )r  r   r   rA  r1   r
  valuer  r2   r2   r3   test_i0_series9     zTestBessel.test_i0_seriesc                 C   r  )Nr  rH   r  )r  r   r   rE  r  r2   r2   r3   test_i1_series>  r  zTestBessel.test_i1_seriesc                 C   sD   dD ]}dD ]}|  ||\}}tt||||||fd qqd S )N)r  ri  r   r{   rj   r  ro  )rj   r   r  y             @r  )r  r   r   rU  r1   r  r
  r  r  r2   r2   r3   test_iv_seriesC  s   zTestBessel.test_iv_seriesc              	   C   sv   ddgddgddgddgddgd	d
gddgddgg}t |D ]\}\}}t|t|  }t||dd| d qd S )Nr{   rj   rJ   r  g0oO?ri   g!?grb?r  gpH?rt   gC~?r   ggo?r  rl  rm  )r  r   rA  r   r   r1   r   r`   r   r  ro  r2   r2   r3   rB  I  s   	zTestBessel.test_i0c                 C   r{  r|  )r   rC  rW  r   )r1   ZoizeZoizerr2   r2   r3   rD  W  r  zTestBessel.test_i0ec                 C   sp   ddgddgddgddgdd	gd
dgddgg}t |D ]\}\}}t|t|  }t||dd| d qd S )Nr{   rJ   gj|=r  gȕ![1?ri   g;͘?rj   gRΜ?rt   g|?r   g}f?r  rl  rm  )r  r   rE  r   r   r  r2   r2   r3   rF  \  s   zTestBessel.test_i1c                 C   r{  r~  )r   rG  rW  r   )r1   Zoi1eZoi1err2   r2   r3   rH  i  r  zTestBessel.test_i1ec                 C   s&   t td}t|t ddgd d S )Nr   gїJB?@g*u?)r   r   rO  r   )r1   Ziti0r2   r2   r3   rP  n  rv  zTestBessel.test_iti0k0c                 C   s"   t d}t|tddgd d S )Nr  gݳɄ|T?gVƥ
@r>   )r   rI  r   r   )r1   Zit2kr2   r2   r3   rJ  r  s   
zTestBessel.test_it2i0k0c                 C   s$   t ddtd }t|dd d S )Nr   r  皙gv M?r  )r   rU  r   r   )r1   iv1r2   r2   r3   rV  v  s   zTestBessel.test_ivc                 C   rw  rx  )r   r   rW  r0   r2   r2   r3   test_negv_ivez  rz  zTestBessel.test_negv_ivec                 C   rO  )Nr   r  r  r  )r   rW  rU  r   r   )r1   Zive1r  r2   r2   r3   test_ive}  rj  zTestBessel.test_ivec                 C   s    t tddtddd d S )NrH   r:   r   r  )r   r   rU  ivpr0   r2   r2   r3   	test_ivp0  r  zTestBessel.test_ivp0c                 C   s8   t ddt dd d }t dd}t||d d S )Nr   r:   rH   r  )r   rU  r  r   rB  r2   r2   r3   test_ivp  r  zTestBessel.test_ivp)r  r   N)r  )Ur,  r-  r.  rR  rL  ry  rZ  r\  r^  r  r`  r  r  r  r  r  r  r  r  re  rg  ri  rk  r  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r  r#  r  r  r  r  r  r/  r0  r1  platformmachiner  r  r  r  Zslowr  r  r  r  r  r  r  r  r  r  r  r  rB  rD  rF  rH  rP  rJ  rV  r  r   r  r  r2   r2   r2   r3   rt  Z	  s    
	



,
rt  c                   @      e Zd Zdd Zdd ZdS )TestLaguerrec                 C   s   t d}t d}t d}t d}t d}t d}t|jdgd t|jddgd t|jtg d	d
 d t|jtg dd d t|jtg dd d t|jtg dd d d S )Nr   rH   r:   ro   r8   r   r  r=   )rH   r#  r:   r   )r=   r  ir>   r  )rH   iH   ir   r  )r=   r   i8iX  irr  ro  )r   Zlaguerrer   r  r   )r1   lag0lag1lag2lag3Zlag4Zlag5r2   r2   r3   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   rH   r:   ro   r=   r  rj   r   r  r  )rM   rR   r   rE  r   r  r   r   )r1   rU   r	  r
  r  r  r2   r2   r3   test_genlaguerre  s   .LzTestLaguerre.test_genlaguerreN)r,  r-  r.  r  r  r2   r2   r2   r3   r    s    r  c                   @   rC  )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   rH   r:   ro   r8   r   )ro   r   r=   r   r  r   )r   r   r  r   )r  r   r  r   ro   r   )?   r   ir   rb   r   )r   Zlegendrer   r  r   r   )r1   Zleg0Zleg1Zleg2Zleg3Zleg4Zleg5r2   r2   r3   test_legendre  s   





zTestLegendre.test_legendreN)r,  r-  r.  r  r2   r2   r2   r3   r    rG  r  c                   @   rC  )
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 )NrH   r  r   r:   r  r   r  )r   Zlmbdar   r]  rU  r_  r   )r1   ZlamZlamrr2   r2   r3   
test_lmbda  s
   "6zTestLambda.test_lmbdaN)r,  r-  r.  r  r2   r2   r2   r3   r    rG  r  c                   @   r  )	TestLog1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )Nr  r  r  r  r  r   r  r   r   )r1   Zl1pZl1prlr2   r2   r3   r       zTestLog1p.test_log1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )NrH   皙?rp  r:   r  r  r  r  )r1   Zl1pmZl1pmrlr2   r2   r3   test_log1pmore  r  zTestLog1p.test_log1pmoreN)r,  r-  r.  r  r  r2   r2   r2   r3   r    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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?r:   ro   rj   ri   rH   r{   r>   r<   )r   clpmnr   r   r   )r1   r
  Zclpr2   r2   r3   
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 )	NrJ   rH   ro   ri   r  r:   r   r<   )r   r  r   r   r  r1   r  r  rT   r   Zclp_plusZ	clp_minusr2   r2   r3   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 )
NrJ   rH   ro   ri   r  r   y             y              ?r<   )r   r  r   r   r  rM   r   r   r  r2   r2   r3   test_clpmn_close_to_real_3  s   $$" z0TestLegendreFunctions.test_clpmn_close_to_real_3c              
   C   sj   d}d}d}d}dD ](}t t|||d|  |d ||f t|||d|  |d ||f d q
d S )NHz>rH   r  r:   ro   r   r>   )r   r   r  )r1   r  r  rT   r   typer2   r2   r3   test_clpmn_across_unit_circle  s   $$z3TestLegendreFunctions.test_clpmn_across_unit_circlec              
   C   s   dD ]A}t dD ]:}t d|D ]2}t|||}tt|d ddd f   t|||}tt|d ddd f   qqqd S )N)rH   r=   r8   rH   )r^   r   r  r   rM   r   r  lpmn)r1   r
  rT   r  lpr2   r2   r3   test_inf  s   "$zTestLegendreFunctions.test_infc                 C   s   g d}d}d}dD ]9}|D ]4}dD ]/}t |||d|  |d t |||d|  |d  | }tt ||||d |d	d
 qqq
d S )N)ra  y            ?y            y      ?      r  r  r  r  r:   ro   r   )r   y        MbP?ri   r   rH   r  rA   )r   r  r   )r1   Zzvalsr  rT   r!  r
  hZapprox_derivativer2   r2   r3   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   r:   ri   rj   ri         r{   rj   r  r8   )r   r#  r   r   r1   r$  r2   r2   r3   	test_lpmn  s   zTestLegendreFunctions.test_lpmnc                 C   0   t dd}t|tg dtg dfd d S )Nr:   ri   r(  r*  r8   )r   Zlpnr   r   )r1   Zlpnfr2   r2   r3   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 s2w   Y  t|dkp@t| d S )Nr   r:   ri   r)  r<   (   r   gI?r  r  r=   )r   r  r   rM   r  r   r   r+  r2   r2   r3   r  #  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   r:   ri   r8   rH   )r   lqmnlqnr   )r1   Zlqmnflqfr2   r2   r3   	test_lqmn/  s   zTestLegendreFunctions.test_lqmnc                 C   sR   d}d}|| || fD ]}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 ?gh㈵>r:   rH   r   )r=   r=   N)r   r0  r   )r1   Zx0deltar   Zlqr  r2   r2   r3   test_lqmn_gt15  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 )Nr8   r  )r   r   r   )r   rH   )r   r0  r   r   )r1   r6  r7  r2   r2   r3   test_lqmn_shape@  s   z%TestLegendreFunctions.test_lqmn_shapec                 C   r-  )Nr:   ri   )gk+ݓ?g=yX5gW2)g|a2U?g~jt?gڊer8   )r   r1  r   r   )r1   r2  r2   r2   r3   test_lqnI  s   
zTestLegendreFunctions.test_lqnN)r,  r-  r.  r  r  r  r"  r%  r'  r,  r.  r  r3  r5  r6  r7  r2   r2   r2   r3   r    s    					r  c                   @   r  )TestMathieuc                 C   rI  rJ  r2   r0   r2   r2   r3   r  Q  rK  zTestMathieu.test_mathieu_ac                 C   r   )Nr:   r   )r   Zmathieu_even_coefr0   r2   r2   r3   test_mathieu_even_coefT  r   z"TestMathieu.test_mathieu_even_coefc                 C   rI  rJ  r2   r0   r2   r2   r3   test_mathieu_odd_coefX  s   z!TestMathieu.test_mathieu_odd_coefN)r,  r-  r.  r  r9  r:  r2   r2   r2   r3   r8  O  s    r8  c                   @   r  )TestFresnelIntegralc                 C   rI  rJ  r2   r0   r2   r2   r3   r  _  rK  z$TestFresnelIntegral.test_modfresnelpc                 C   rI  rJ  r2   r0   r2   r2   r3   r  b  rK  z$TestFresnelIntegral.test_modfresnelmN)r,  r-  r.  r  r  r2   r2   r2   r3   r;  ]  s    r;  c                   @   rC  )TestOblCvSeqc                 C   &   t ddd}t|tg dd d S )Nr   ro   rH   )g~T~Oֿgt_J?gm{@g@j'&@r   )r   Z
obl_cv_seqr   r   )r1   Zoblr2   r2   r3   test_obl_cv_seqg     zTestOblCvSeq.test_obl_cv_seqN)r,  r-  r.  r>  r2   r2   r2   r3   r<  f  rG  r<  c                   @   r2  )TestParabolicCylinderc                 C   s0   t dd}t|tddgtddgfd d S )NrH   r  gQ?gx$(~?gx$(~g(\?r8   )r   pbdn_seqr   r   )r1   Zpbr2   r2   r3   test_pbdn_seqp  s   z#TestParabolicCylinder.test_pbdn_seqc                 C   s4   t dd dt ddd  t ddd   d S )NrH   r   r  r   )r   r  r0   r2   r2   r3   r  w  s   (zTestParabolicCylinder.test_pbdvc                 C   s<   t dd}t dd}t|t|d t|d fd d S )NrH   r  r   r8   )r   rA  Zpbdv_seqr   r   )r1   ZpbnZpbvr2   r2   r3   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   r:   ri   r{   r   r   r   gGz$@gq=
ףp4@gHQ9re   rA   g(\#gQ@gkS a>)rM   r  r   r   r   r   r   r  )r1   etar
  r2   r2   r3   test_pbdv_points  s
   *z&TestParabolicCylinder.test_pbdv_pointsc                 C      t dddd d d f }t dddd d d f }t||}ddt|  }t||| d t||| d  | d	 }t|d
 |ddd d S Nr#  r8   r  r  r  r   r  r   r   rH   r  r   )rM   r  r   r  r5  r   r1   r   rD  r  r  Zdpr2   r2   r3   test_pbdv_gradient     0z(TestParabolicCylinder.test_pbdv_gradientc                 C   rF  rG  )rM   r  r   r  r5  r   rH  r2   r2   r3   test_pbvv_gradient  rJ  z(TestParabolicCylinder.test_pbvv_gradientN)	r,  r-  r.  rB  r  rC  rE  rI  rK  r2   r2   r2   r3   r@  o  s    
	r@  c                   @   rC  )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 )Nr:   rH   ro   gX];r  gOV,@@)r:   ro   g  8Br   r  rZ  )g2}jg.M?g}2;ο)r   Z	polygammar   r  rM   r\  )r1   Zpoly2Zpoly3r   rT   r  r2   r2   r3   test_polygamma  s"   zTestPolygamma.test_polygammaN)r,  r-  r.  rM  r2   r2   r2   r3   rL    s    rL  c                   @   rC  )TestProCvSeqc                 C   r=  )Nr   ro   rH   )g"~j?g6?Ң@g)u8F"@g2g)@r   )r   Z
pro_cv_seqr   r   )r1   Zprolr2   r2   r3   test_pro_cv_seq  r?  zTestProCvSeq.test_pro_cv_seqN)r,  r-  r.  rO  r2   r2   r2   r3   rN    rG  rN  c                   @   rC  )TestPsic                 C   rM  )NrH   goxr  )r   r  r   )r1   Zpsr2   r2   r3   r    rN  zTestPsi.test_psiN)r,  r-  r.  r  r2   r2   r2   r3   rP    rG  rP  c                   @   r  )
TestRadianc                 C   s"   t ddd}t|td d d S )Nr  r   r   r   r   r  r   r   )r1   Zradr2   r2   r3   r    s   zTestRadian.test_radianc                 C   s&   t ddd}t|td d d d S )Nr  rH   r  r:   gC?r   rR  )r1   Zrad1r2   r2   r3   test_radianmore  rv  zTestRadian.test_radianmoreN)r,  r-  r.  r  rS  r2   r2   r2   r3   rQ    s    rQ  c                   @   r  )TestRiccatic                 C   |   d\}}t ||f}t|D ]"}t||}tj||dd}|| |d|f< || | |d|f< qt|t||d d S N)r:   r   T)Z
derivativer   rH   r  )rM   emptyr^   r   Zspherical_jnr   Z
riccati_jn)r1   r  r   SrT   r  Zjpr2   r2   r3   test_riccati_jn     zTestRiccati.test_riccati_jnc                 C   rU  rV  )rM   rW  r^   r   Zspherical_ynr   Z
riccati_yn)r1   r  r   CrT   r	  Zypr2   r2   r3   test_riccati_yn  rZ  zTestRiccati.test_riccati_ynN)r,  r-  r.  rY  r\  r2   r2   r2   r3   rT    s    
rT  c                   @   rC  )	TestRoundc              	   C   s@   t tttdtdtdtdf}d}t|| d S )Ng333333$@g$@rk  g333333%@)r  r  r  r  )ry  mapr]   r   r  r   )r1   ZrndZrndrlr2   r2   r3   r    s   .zTestRound.test_roundN)r,  r-  r.  r  r2   r2   r2   r3   r]    rG  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   ri   r  r:   r{   r8   r   g      .@r   rb   r  r   r   g      ?rt   g      @rH   r   r  g      ?g     A@)	r   sph_harmrM   r   r   r   r   r	   r   )shr   r   r   r   r	   r2   r2   r3   test_sph_harm  sP   
ra  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 r-   )rM   dtypeZ
complex128r   r   r_  )Zdtr2   r2   r3   "test_sph_harm_ufunc_loop_selection  s   $rc  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   r=   ri   r:   rH   r  )	r   r   r   r5  rz  r   r   r  r  r  r2   r2   r3   _series  s   
@zTestStruve._seriesc                 C   sH   dD ]}dD ]}|  ||\}}tt|||d|d||ff qqdS )z-Check Struve function versus its power series)
ir  (\r  r=   r   rH   r  r     )rH   r  r   r'  rD   r   r   N)re  r   r   r  r  r2   r2   r3   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 )Nrf  r'  g;cv=?r  rA   gQ g< j?r  r  r  g?re   g       igzz?r  i)   r  r  r  gffffffr=   g333333$)r   r   r  r   r   r   r0   r2   r2   r3   test_some_values)  s   zTestStruve.test_some_valuesc                 C   sR   t tddtdd t tddtdd t tddtdd dS )zRegression test for #679r   g3@g*   4@r  g333333N)r   r   r  r0   r2   r2   r3   test_regression_6796  s   zTestStruve.test_regression_679N)r  )r,  r-  r.  re  rh  rj  rk  r2   r2   r2   r3   rd    s
    
rd  c                   C   r   )Nr  ro   gdX	
?)r   r   r   r2   r2   r2   r3   test_chi2_smalldf=  r   rl  c                   C   s   t tdtjd d S )Nr  rj   )r   r   r   rM   r   r2   r2   r2   r3   test_ch2_infA  rl   rm  c                   C   r   )Nr  ro   yj_?)r   r   r   r2   r2   r2   r3   test_chi2c_smalldfE  r   ro  c                   C   r   )Nr  rn  ro   )r   r   r   r2   r2   r2   r3   test_chi2_inv_smalldfI  r   rp  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 )'Nr@   rH   r:   gDSYC?rA   gQ_?g?@g>;,
i}@ro   )rH   ro   r   g=O?r=   r  r   r>   gXs*@r  g   V4oAgO1eAgꌠ9Y>)FgEg^ 9^;gd-?gP.5_gsTNNeg6dgu?j/ g]XC}KdgѧRg"!x{{ rj   g][#!Rr  gٍS1gN_ r   c   r  )r   r   ZagmrM   r   r   r  rz  r   r   r   )rB   Zagm13Zagm15Zagm35Zagm12fir2   r2   r3   test_agm_simpleM  sr   
rs  c                  C   s.  t  } | td ttddtdd ttdddtddd ttdddtddd ttdddtddd tt	ddt	dd tt
ddt
dd ttddtdd ttddtdd ttddtdd W d    d S 1 sw   Y  d S )Nr  rH   r  g?r:   gffffff@)r   r  r  r   r   Zexpnr  r  r  r  rv  r   r  r  )r  r2   r2   r3   test_legacy  s   "rt  c                   C   s   t tjtjdd d S )NrH   y        .B}T)r]  r   ZSpecialFunctionErrorrU  r2   r2   r2   r3   test_error_raising  s   ru  c                  C   s   dd } t jddt jfdt jfdgtd}t j|ddgf }t | |d d df |d d d	f }ttj	||d
d
d t | |d d df |d d d	f }ttj	||d
d
d d S )Nc                 S   b   t jdd! | dkrt |s| W  d    S | t | W  d    S 1 s*w   Y  d S Nr  )Zinvalidr   )rM   r  r   r   r   r	  r2   r2   r3   xfunc     $ztest_xlogy.<locals>.xfuncr   r   r   rj   r   rb  )r   r  )rH   r  rH   r@   r   )
rM   r   r   r   r_   r   rc   r)   r   xlogy)ry  z1Zz2w1Zw2r2   r2   r3   
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   rv  rw  )rM   r  r   r  rx  r2   r2   r3   ry    rz  ztest_xlog1py.<locals>.xfuncr{  r   r|  )rH   gKH9r}  rH   r@   r   )	rM   r   r   r   r_   rc   r)   r   Zxlog1py)ry  r  r  r2   r2   r3   test_xlog1py  s   (r  c                  C   s   dd } dddt jf}ddg}g }t||D ]\}}|||  qt j|td}t j| t jgd	|}t	t
j||d
d
d d S )Nc                 S   s   | dk rt j S t| |  S r-   )rM   r   r   r~  )r   r2   r2   r3   ry    s   ztest_entr.<locals>.xfuncr   ri   rj   r=   rH   r}  Zotypesr@   r   )rM   r   r  r  r  r   r_   rc   r   r)   r   Zentr)ry  r   signsr  Zsgnr  r
  r*  r2   r2   r3   	test_entr  s   r  c            
      C      dd } d}ddg}g }t ||||D ]\}}}}||| || f qtj|td}tj| tjgd|d d df |d d df }	tt	j
|	|d	d	d
 d S )Nc                 S   sd   | dk s|dk s|dkr| dkrt jS t | st |r t jS | dkr&|S t| | | |  | S r-   )rM   r   Zisposinfr   r~  rx  r2   r2   r3   ry    s    ztest_kl_div.<locals>.xfuncr   ri   rj   r=   rH   r}  r  r   r@   r   )r  r  r  rM   r   r_   rc   r   r)   r   Zkl_div
ry  r   r  r  ZsgnaZvaZsgnbZvbr
  r*  r2   r2   r3   test_kl_div  s   0r  c            
      C   r  )Nc                 S   s:   | dkr|dkrt | | | S | dkr|dkrdS tjS r-   )r   r~  rM   r   rx  r2   r2   r3   ry    s
   ztest_rel_entr.<locals>.xfuncr  r=   rH   r}  r  r   r@   r   )r  r  r  rM   r   r_   rc   r   r)   r   Zrel_entrr  r2   r2   r3   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 )Nr=   r  r:   ri   r  r   c                 S   s@   | dk rt jS t || k rdt | S | t |d|    S )Nr   ri   )rM   r   r5  squarer4  r  r2   r2   r3   ry    s
   ztest_huber.<locals>.xfuncr  r  r   rH   r@   r   )r   r   ZhuberrM   r   r   r  rR   randnrc   r   r)   ry  r
  r*  r2   r2   r3   
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 )Nr   r:   rH   )rM   r   r   r  r2   r2   r3   ry    s
   "z test_pseudo_huber.<locals>.xfuncr  r:   r   ri   r  rH   r@   r   )
rM   r   rR   r  tolistrc   r   r)   r   Zpseudo_huberr  r2   r2   r3   test_pseudo_huber  s   (0r  )or  r  r-  ZnumpyrM   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r/  r   r]  Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipyr   Zscipy.special._ufuncsZ_ufuncsr.   Zscipy.specialr    r!   r"   r#   r$   r%   r&   r'   Zscipy.special._testutilsr(   r)   r*   r!  r+   r3  rD  rH  rL  rf  rh  rn  r  r  r  objectr  r  r  r  r  r  r/  r=  rF  rT  rt  r  r  r  r  r  r8  r;  r<  r@  rL  rN  rP  rQ  rT  r]  ra  rc  rd  rl  rm  ro  rp  rs  rt  ru  r  r  r  r  r  r  r  r2   r2   r2   r3   <module>   s   T,       >n	 .E  +b hD2# Y    5 		.	
#=
