U
    Hvf:3                    @   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l*m3Z3m4Z4 d d	l5m6Z6m7Z7m8Z8 d dl9Z9G 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ZCG dd dZDG d d! d!eEZFG d"d# d#eEZGG d$d% d%ZHG d&d' d'ZIG d(d) d)ZJG d*d+ d+ZKG d,d- d-ZLG d.d/ d/ZMG d0d1 d1ZNG d2d3 d3ZOG d4d5 d5ZPG d6d7 d7ZQG d8d9 d9ZRG d:d; d;ZSG d<d= d=ZTG d>d? d?ZUG d@dA dAZVG dBdC dCZWG dDdE dEZXG dFdG dGZYG dHdI dIZZG dJdK dKZ[G dLdM dMZ\G dNdO dOZ]G dPdQ dQZ^G dRdS dSZ_dTdU Z`dVdW ZaG dXdY dYZbdZd[ Zcd\d] Zdd^d_ Zed`da Zfdbdc Zgddde Zhe6dfdg Zidhdi Zjdjdk Zkdldm Zldndo Zmdpdq Zndrds Zodtdu Zpdvdw Zqdxdy ZrdS )z    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)mathieu_odd_coefmathieu_even_coef)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   s   t d d S Nr   )cephesairyself r3   B/tmp/pip-unpacked-wheel-96ln3f52/scipy/special/tests/test_basic.py	test_airy0   s    zTestCephes.test_airyc                 C   s   t d d S r.   )r/   airyer1   r3   r3   r4   
test_airye3   s    zTestCephes.test_airyec              	   C   sN  t ddddg}t ddddg}t t |d d d f |d d d f dd	j}t d
dddgddddgddddgddddg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 )&NgL7A`?   g@      皙?   gffffff
@g޸g	TշJ?g	7?geLF   g*+ @r   gM{@gףp=
%@gϔ>@g<wg$@   g,y3@iK  g5@vIh%<=rtol  i       f           ?绽|=atolrB   )npr   broadcast_arraysreshapeTr+   r/   binomZravelrandomseedr   r   Zrand)r2   nknkZrknownr3   r3   r4   
test_binom6   s6    * 



&* & 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   )r2   rT   rU   rV   r3   r3   r4   test_binom_2M   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   numZdenir3   r3   r4   	binom_int[   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   )r2   rb   rT   rU   rV   r3   r3   r4   test_binom_exactZ   s     

* $  zTestCephes.test_binom_exactc                 C   sH   ddddddddd	d
dddddg}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)r2   Zdatasetr3   r3   r4   test_binom_nooverflow_8346q   s$    
z%TestCephes.test_binom_nooverflow_8346c                 C   s   t tdddd d S )NrH         ?      ?)r   r/   Zbdtrr1   r3   r3   r4   	test_bdtr   s    zTestCephes.test_bdtrc                 C   s   t tdddd d S NrH      ri   )r   r/   Zbdtrir1   r3   r3   r4   
test_bdtri   s    zTestCephes.test_bdtric                 C   s   t tdddd d S rl   )r   r/   Zbdtrcr1   r3   r3   r4   
test_bdtrc   s    zTestCephes.test_bdtrcc                 C   s   t tdddd d S NrH   r         @)r   r/   Zbdtrinr1   r3   r3   r4   test_bdtrin   s    zTestCephes.test_bdtrinc                 C   s   t ddd d S rl   )r/   Zbdtrikr1   r3   r3   r4   test_bdtrik   s    zTestCephes.test_bdtrikc                 C   s   t tdd d S Nr           )r   r/   beir1   r3   r3   r4   test_bei   s    zTestCephes.test_beic                 C   s   t tdd d S rt   )r   r/   beipr1   r3   r3   r4   	test_beip   s    zTestCephes.test_beipc                 C   s   t tdd d S Nr   rj   )r   r/   berr1   r3   r3   r4   test_ber   s    zTestCephes.test_berc                 C   s   t tdd d S rt   )r   r/   berpr1   r3   r3   r4   	test_berp   s    zTestCephes.test_berpc                 C   s   t tdddd d S rz   )r   r/   Z
besselpolyr1   r3   r3   r4   test_besselpoly   s    zTestCephes.test_besselpolyc                 C   sF   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   gammar1   r3   r3   r4   	test_beta   s     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   r1   r3   r3   r4   test_betainc   s    zTestCephes.test_betaincc                 C   sF   t tddd ttddtd ttddddd	d
 d S )NrH   ru   r   r   r      gIs	@+=r   r   )r   r/   betalnr   gammalnr1   r3   r3   r4   test_betaln   s     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   r1   r3   r3   r4   test_betaincinv   s      zTestCephes.test_betaincinvc                 C   s   t ttdd d S )Nr=   r:   )r   rM   isinfr   r   r1   r3   r3   r4   test_beta_inf   s    zTestCephes.test_beta_infc                 C   s   t tdddd d S NrH   rj   )r   r/   Zbtdtrr1   r3   r3   r4   
test_btdtr   s    zTestCephes.test_btdtrc                 C   s   t tdddd d S r   )r   r/   Zbtdtrir1   r3   r3   r4   test_btdtri   s    zTestCephes.test_btdtric                 C   s   t tdddd d S NrH   rq   )r   r/   Zbtdtriar1   r3   r3   r4   test_btdtria   s    zTestCephes.test_btdtriac                 C   s   t tdddd d S r   )r   r/   Zbtdtribr1   r3   r3   r4   test_btdtrib   s    zTestCephes.test_btdtribc                 C   s   t tdd d S r   )r   r/   cbrtr1   r3   r3   r4   	test_cbrt   s    zTestCephes.test_cbrtc                 C   s   t tddd d S NrH   r   ru   )r   r/   chdtrr1   r3   r3   r4   
test_chdtr   s    zTestCephes.test_chdtrc                 C   s   t tddd d S NrH   r   rj   )r   r/   chdtrcr1   r3   r3   r4   test_chdtrc   s    zTestCephes.test_chdtrcc                 C   s   t tddd d S NrH   ru   )r   r/   chdtrir1   r3   r3   r4   test_chdtri   s    zTestCephes.test_chdtric                 C   s   t tddd d S )Nr   rq   )r   r/   Zchdtrivr1   r3   r3   r4   test_chdtriv   s    zTestCephes.test_chdtrivc                 C   sl  t tdddd tddddgddd	d
gddddgddddgddddgddddgddddgddddgddddgddddgd ddd!gd"ddd#gd$dddg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   ru   g      9@      4@i  gL94       @   g7Fh9MbP?g      D@ggåc;{Gz?g	;       @k   g8x@x>g     6@gg1\>>g`>      @rj   gp!P?g     u@g     r@      $@g j
?      Y@g      +@g]?g     @g4ۙ?g     b@g?g      d@r:   rm   rf   rA      )r   r/   ZchndtrrM   r   r   r   r   r   r   nan)r2   valuesZcdfr3   r3   r4   test_chndtr   s.    












2zTestCephes.test_chndtrc                 C   s   t tdddd d S Nr   rH   rq   )r   r/   Z	chndtridfr1   r3   r3   r4   test_chndtridf   s    zTestCephes.test_chndtridfc                 C   s   t tdddd d S r   )r   r/   Z	chndtrincr1   r3   r3   r4   test_chndtrinc   s    zTestCephes.test_chndtrincc                 C   s   t tdddd d S Nr   rH   ru   )r   r/   Zchndtrixr1   r3   r3   r4   test_chndtrix   s    zTestCephes.test_chndtrixc                 C   s   t tdd d S rz   )r   r/   cosdgr1   r3   r3   r4   
test_cosdg   s    zTestCephes.test_cosdgc                 C   s   t tdd d S rt   )r   r/   cosm1r1   r3   r3   r4   
test_cosm1  s    zTestCephes.test_cosm1c                 C   s   t tdd d S N-   rj   )r   r/   cotdgr1   r3   r3   r4   
test_cotdg  s    zTestCephes.test_cotdgc                 C   s$   t tdd ttdd d S )Nr   ru   gGz?gf?)r   r/   dawsnr   r1   r3   r3   r4   
test_dawsn  s    zTestCephes.test_dawsnc                 C   s^  dddg}t dt j d t j}tt||ddd t dt j d	 t j}tt||dd
d t dt j d t j}tt||dd
d t	t drt dt j d t j
}tt||ddd dddg}t dt j d	 t j}tt||dd
d t dt j dt j dt j }ddddg}tt|d|d
d d S )NrH   r      r:   g-C6
?rj   r<   decimal&.>rc   V瞯<float128rf      r8            皙?gg?gsOB?gsaL?g
7I^ʿrm   )rM   r   r   astypeZfloat32r   r   diricfloat64hasattrr   r   )r2   Zn_oddxZn_evenZoctave_resultr3   r3   r4   
test_diric  s&    


  zTestCephes.test_diricc                 C   sJ   t d}t dddg}tt|d d t jf |j|j|jfk d S )Nr   rH   rm   r<   )	rM   r   r   r   r   r   Znewaxisshapesize)r2   r   rT   r3   r3   r4   test_diric_broadcasting%  s    
z"TestCephes.test_diric_broadcastingc                 C   s   t tdd d S r   )r   r/   r    r1   r3   r3   r4   test_ellipe*  s    zTestCephes.test_ellipec                 C   s   t tddd d S r   )r   r/   	ellipeincr1   r3   r3   r4   test_ellipeinc-  s    zTestCephes.test_ellipeincc                 C   s   t dd d S )Nr   rH   )r/   ellipjr1   r3   r3   r4   test_ellipj0  s    zTestCephes.test_ellipjc                 C   s   t tdtd  d S )Nr   r:   )r   r!   r   r1   r3   r3   r4   test_ellipk3  s    zTestCephes.test_ellipkc                 C   s   t tddd d S rt   )r   r/   	ellipkincr1   r3   r3   r4   test_ellipkinc6  s    zTestCephes.test_ellipkincc                 C   s   t tdd d S rt   r   r/   erfr1   r3   r3   r4   test_erf9  s    zTestCephes.test_erfc                 C   s$   d}t t|t|  d d S )Ng#8x@ru   r   r2   r   r3   r3   r4   test_erf_symmetry<  s    zTestCephes.test_erf_symmetryc                 C   s   t tdd d S rz   )r   r/   erfcr1   r3   r3   r4   	test_erfc@  s    zTestCephes.test_erfcc                 C   s   t tdd d S )Nr:   r   )r   r/   exp10r1   r3   r3   r4   
test_exp10C  s    zTestCephes.test_exp10c                 C   s   t tdd d S )Nr:         @)r   r/   exp2r1   r3   r3   r4   	test_exp2F  s    zTestCephes.test_exp2c                 C   sP   t tdd t ttjtj t ttj d t ttjtj d S )Nr   ru   r=   )r   r/   expm1rM   r   r   r1   r3   r3   r4   
test_expm1I  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   )r2   r   r3   r3   r4   test_expm1_complexO  s"     "$"  "  "   zTestCephes.test_expm1_complexz-The real part of expm1(z) bad at these pointsreasonc                 C   sx   t ddddddg}t t | }|d|  }t dd	d
dddg}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 <@rm   )	rM   r   r   r	   r/   r   r   imagr   )r2   yr   zexpectedfoundr3   r3   r4   test_expm1_complex_hardb  s    
z"TestCephes.test_expm1_complex_hardc                 C   s0   t tdddd ttdddddd	 d S )
NrH   r   ru   ư>r   
   g2?rf   rA   )r   r/   Zfdtrr   r1   r3   r3   r4   	test_fdtrw  s    zTestCephes.test_fdtrc                 C   s0   t tdddd ttdddddd	 d S )
NrH   r   rj   r:   r   g    _BgDIXl?rf   rA   )r   r/   Zfdtrcr   r1   r3   r3   r4   
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   rm   rf   )r   r/   fdtrir   )r2   pr3   r3   r4   
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   r1   r3   r3   r4   test_fdtri_mysterious_failure  s    z(TestCephes.test_fdtri_mysterious_failurec                 C   s   t tdddd d S rp   )r   r/   Zfdtridfdr1   r3   r3   r4   test_fdtridfd  s    zTestCephes.test_fdtridfdc                 C   s   t tdd d S Nr   ru   ru   )r   r/   fresnelr1   r3   r3   r4   test_fresnel  s    zTestCephes.test_fresnelc                 C   s   t tdd d S Nr         8@)r   r/   r   r1   r3   r3   r4   
test_gamma  s    zTestCephes.test_gammac                 C   s   t tddd d S )Nr   rH   ru   )r   r/   gammainccinvr1   r3   r3   r4   test_gammainccinv  s    zTestCephes.test_gammainccinvc                 C   s   t d d S )Nr   )r/   r   r1   r3   r3   r4   test_gammaln  s    zTestCephes.test_gammalnc                 C   s8   t dddddgt j}tt|t t| d S )N      gffffffrH   g@)rM   r   r   r   r/   Zgammasgnsignrgamma)r2   valsr3   r3   r4   test_gammasgn  s    zTestCephes.test_gammasgnc                 C   s   t tdddd d S r   )r   r/   gdtrr1   r3   r3   r4   	test_gdtr  s    zTestCephes.test_gdtrc                 C   s   t tddtjd d S r   )r   r/   r  rM   r   r1   r3   r3   r4   test_gdtr_inf  s    zTestCephes.test_gdtr_infc                 C   s   t tdddd d S r   )r   r/   Zgdtrcr1   r3   r3   r4   
test_gdtrc  s    zTestCephes.test_gdtrcc                 C   s   t tdddd d S r   )r   r/   Zgdtriar1   r3   r3   r4   test_gdtria  s    zTestCephes.test_gdtriac                 C   s   t ddd d S NrH   r   )r/   Zgdtribr1   r3   r3   r4   test_gdtrib  s    zTestCephes.test_gdtribc                 C   s   t ddd d S NrH   r   )r/   Zgdtrixr1   r3   r3   r4   test_gdtrix  s    zTestCephes.test_gdtrixc                 C   s   t dd d S r\   )r/   hankel1r1   r3   r3   r4   test_hankel1  s    zTestCephes.test_hankel1c                 C   s   t dd d S r\   )r/   hankel1er1   r3   r3   r4   test_hankel1e  s    zTestCephes.test_hankel1ec                 C   s   t dd d S r\   )r/   hankel2r1   r3   r3   r4   test_hankel2  s    zTestCephes.test_hankel2c                 C   s   t dd d S r\   )r/   hankel2er1   r3   r3   r4   test_hankel2e  s    zTestCephes.test_hankel2ec                 C   s>   t tdddtd t tdddd tddd d S )NrH   rj   rm   r8   g㈮?)r   r/   hyp1f1r   r1   r3   r3   r4   test_hyp1f1  s    zTestCephes.test_hyp1f1c                 C   s   t tddddd d S r   )r   r/   hyp2f1r1   r3   r3   r4   test_hyp2f1  s    zTestCephes.test_hyp2f1c                 C   s   t tdd d S rz   )r   r/   i0r1   r3   r3   r4   test_i0  s    zTestCephes.test_i0c                 C   s   t tdd d S rz   )r   r/   i0er1   r3   r3   r4   test_i0e  s    zTestCephes.test_i0ec                 C   s   t tdd d S rt   )r   r/   i1r1   r3   r3   r4   test_i1  s    zTestCephes.test_i1c                 C   s   t tdd d S rt   )r   r/   i1er1   r3   r3   r4   test_i1e  s    zTestCephes.test_i1ec                 C   s   t d d S r\   )r/   it2i0k0r1   r3   r3   r4   test_it2i0k0  s    zTestCephes.test_it2i0k0c                 C   s   t d d S r\   )r/   it2j0y0r1   r3   r3   r4   test_it2j0y0  s    zTestCephes.test_it2j0y0c                 C   s   t d d S r\   )r/   Z
it2struve0r1   r3   r3   r4   test_it2struve0  s    zTestCephes.test_it2struve0c                 C   s   t d d S r\   )r/   Zitairyr1   r3   r3   r4   test_itairy  s    zTestCephes.test_itairyc                 C   s   t tdd d S r  )r   r/   iti0k0r1   r3   r3   r4   test_iti0k0  s    zTestCephes.test_iti0k0c                 C   s   t tdd d S r  )r   r/   itj0y0r1   r3   r3   r4   test_itj0y0  s    zTestCephes.test_itj0y0c                 C   s   t tdd d S rt   )r   r/   Zitmodstruve0r1   r3   r3   r4   test_itmodstruve0  s    zTestCephes.test_itmodstruve0c                 C   s   t tdd d S rt   )r   r/   Z	itstruve0r1   r3   r3   r4   test_itstruve0  s    zTestCephes.test_itstruve0c                 C   s   t tddd d S r   )r   r/   ivr1   r3   r3   r4   test_iv  s    zTestCephes.test_ivc                 C   s   t tddd d S r   )r   r/   iver1   r3   r3   r4   
_check_ive  s    zTestCephes._check_ivec                 C   s   t tdd d S rz   )r   r/   j0r1   r3   r3   r4   test_j0  s    zTestCephes.test_j0c                 C   s   t tdd d S rt   )r   r/   j1r1   r3   r3   r4   test_j1  s    zTestCephes.test_j1c                 C   s   t tddd d S rz   )r   r/   jnr1   r3   r3   r4   test_jn  s    zTestCephes.test_jnc                 C   s   t tddd d S rz   )r   r/   jvr1   r3   r3   r4   test_jv  s    zTestCephes.test_jvc                 C   s   t tddd d S rz   )r   r/   jver1   r3   r3   r4   
_check_jve   s    zTestCephes._check_jvec                 C   s   t d d S Nr:   )r/   k0r1   r3   r3   r4   test_k0  s    zTestCephes.test_k0c                 C   s   t d d S rL  )r/   k0er1   r3   r3   r4   test_k0e  s    zTestCephes.test_k0ec                 C   s   t d d S rL  )r/   k1r1   r3   r3   r4   test_k1	  s    zTestCephes.test_k1c                 C   s   t d d S rL  )r/   k1er1   r3   r3   r4   test_k1e  s    zTestCephes.test_k1ec                 C   s   t d d S rL  )r/   keir1   r3   r3   r4   test_kei  s    zTestCephes.test_keic                 C   s   t tdd d S rt   )r   r/   keipr1   r3   r3   r4   	test_keip  s    zTestCephes.test_keipc                 C   s   t d d S rL  )r/   kerr1   r3   r3   r4   test_ker  s    zTestCephes.test_kerc                 C   s   t d d S rL  )r/   kerpr1   r3   r3   r4   	test_kerp  s    zTestCephes.test_kerpc                 C   s   t d d S rL  )r/   kelvinr1   r3   r3   r4   _check_kelvin  s    zTestCephes._check_kelvinc                 C   s   t dd d S r\   )r/   knr1   r3   r3   r4   test_kn  s    zTestCephes.test_knc                 C   s*   t tdd ttttj d S r   )r   r/   Zkolmogir   rM   r   r   r1   r3   r3   r4   test_kolmogi!  s    zTestCephes.test_kolmogic                 C   s   t tdd d S rz   )r   r/   Z
kolmogorovr1   r3   r3   r4   test_kolmogorov%  s    zTestCephes.test_kolmogorovc                 C   s   t tdd d S )Nr          )r   r/   Z_kolmogpr1   r3   r3   r4   test_kolmogp(  s    zTestCephes.test_kolmogpc                 C   s   t tdd d S rt   )r   r/   Z_kolmogcr1   r3   r3   r4   test_kolmogc+  s    zTestCephes.test_kolmogcc                 C   s*   t tdd ttttj d S rt   )r   r/   Z	_kolmogcir   rM   r   r   r1   r3   r3   r4   test_kolmogci.  s    zTestCephes.test_kolmogcic                 C   s   t dd d S r\   )r/   kvr1   r3   r3   r4   	_check_kv2  s    zTestCephes._check_kvc                 C   s   t dd d S r\   )r/   kver1   r3   r3   r4   
_check_kve5  s    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   ru   r=   )r/   log1pr   rM   r   r   )r2   rl  r3   r3   r4   
test_log1p8  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 5 Q R X d S )	Nr   r=   r   z%invalid value encountered in multiplyrH   r:   rm   r8   )r/   rl  r   r   rM   r   r   filterRuntimeWarningr   r   r   )r2   rl  csupr3   r3   r4   test_log1p_complex?  s"    
$ ",&"$" zTestCephes.test_log1p_complexc                 C   s   t tdddd d S )Nr   rH   rj   )r   r/   lpmvr1   r3   r3   r4   	test_lpmvR  s    zTestCephes.test_lpmvc                 C   s   t tddd d S r   )r   r/   Z	mathieu_ar1   r3   r3   r4   test_mathieu_aU  s    zTestCephes.test_mathieu_ac                 C   s   t tddd d S r   )r   r/   Z	mathieu_br1   r3   r3   r4   test_mathieu_bX  s    zTestCephes.test_mathieu_bc                 C   s   t tdddd tjdd }tdd}tjdtddd	f }tt|d d d f |d d d f d
d ||d d d f |d d d f d
ddd d S )NrH   r   rj   ru   c                 S   s   |t jd 9 }| dkr2ddd| td|    S | dkrVt||d td|   S | dkrtd| |td	| d
 d   S t| | |t| d | d	| d   t| d | d	| d      S d S )N   r   g;f?rH   ri   r:      rm   r8      r   )rM   r   r	   mqr   r3   r3   r4   	ce_smallq_  s    $z.TestCephes.test_mathieu_cem.<locals>.ce_smallqd   r   rh|?r   r   )	r   r/   mathieu_cemrM   rd   r   r   rZ   r   )r2   r~  r|  r}  r3   r3   r4   test_mathieu_cem[  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   ru   rj   c                 S   s   |t jd 9 }| dkr2t||d td|   S | dkrZtd| |td|  d  S t| | |t| d | d| d   t| d | d| d      S d S )Nrx  rH   ry  rm   r:   r8   rz  )rM   r   r   r{  r3   r3   r4   	se_smallqt  s     z.TestCephes.test_mathieu_sem.<locals>.se_smallqr  r  r  r   r  r   r   )	r   r/   mathieu_semrM   rd   r   r   rZ   r   )r2   r  r|  r}  r3   r3   r4   test_mathieu_semp  s    
*" zTestCephes.test_mathieu_semc                 C   s   t tdddd d S NrH   r   r  )r   r/   mathieu_modcem1r1   r3   r3   r4   test_mathieu_modcem1  s    zTestCephes.test_mathieu_modcem1c                 C   s   t ddd tddd d d d f }tjtddd d d d d f }tdddd d d d f }t ||| d }t ||dd  t ||dd  }t |||d  d| t |||d   }t||dd	 d S )
NrH   r   r8   rk  r:   r   r<   rJ   rA   )	r/   mathieu_modcem2rM   r   r   rZ   linspacer  r   r2   r|  r}  r   y1fry2r3   r3   r4   test_mathieu_modcem2  s    "&.zTestCephes.test_mathieu_modcem2c                 C   s   t tdddd d S r  )r   r/   mathieu_modsem1r1   r3   r3   r4   test_mathieu_modsem1  s    zTestCephes.test_mathieu_modsem1c                 C   s   t ddd tddd d d d f }tjtddd d d d d f }tdddd d d d f }t ||| d }t ||dd t ||dd  }t |||d d| t |||d   }t||dd	 d S )
NrH   r8   rk  r:   r   r   r<   rJ   rA   )	r/   mathieu_modsem2rM   r   r   rZ   r  r  r   r  r3   r3   r4   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  r1   r3   r3   r4   test_mathieu_overflow  s    z TestCephes.test_mathieu_overflowc                 C   sD   t dD ]6}tddd}t|d ddd t|d	 d
dd qd S )N<   r:   r  r=   r   g.dS?rJ   rA   rH   gGc?-C6?)r^   r/   r  r   )r2   rU   vr3   r3   r4   test_mathieu_ticket_1847  s    z#TestCephes.test_mathieu_ticket_1847c                 C   s   t d d S r.   )r/   Zmodfresnelmr1   r3   r3   r4   test_modfresnelm  s    zTestCephes.test_modfresnelmc                 C   s   t d d S r.   )r/   Zmodfresnelpr1   r3   r3   r4   test_modfresnelp  s    zTestCephes.test_modfresnelpc                 C   s   t tddd d S r   )r   r/   Z	modstruver1   r3   r3   r4   _check_modstruve  s    zTestCephes._check_modstruvec                 C   s   t tdddd d S r   )r   r/   nbdtrr1   r3   r3   r4   
test_nbdtr  s    zTestCephes.test_nbdtrc                 C   s   t tdddd d S r   )r   r/   nbdtrcr1   r3   r3   r4   test_nbdtrc  s    zTestCephes.test_nbdtrcc                 C   s   t tdddd d S r   )r   r/   nbdtrir1   r3   r3   r4   test_nbdtri  s    zTestCephes.test_nbdtric                 C   s   t ddd d S )NrH   r;   ri   )r/   Znbdtrikr1   r3   r3   r4   Z__check_nbdtrik  s    zTestCephes.__check_nbdtrikc                 C   s   t tdddd d S rp   )r   r/   Znbdtrinr1   r3   r3   r4   test_nbdtrin  s    zTestCephes.test_nbdtrinc                 C   s   t tddddd d S r   )r   r/   ncfdtrr1   r3   r3   r4   test_ncfdtr  s    zTestCephes.test_ncfdtrc                 C   sJ   t tddddd dddg}tddd|}ttddd|| d S )NrH   r   ru   ri   r  r:   rm   )r   r/   Zncfdtrir  r   )r2   fr   r3   r3   r4   test_ncfdtri  s    
zTestCephes.test_ncfdtric                 C   s4   dddg}t d|dd}tt d|dd| d S )NrH   r:   rm   r   rc   )r/   r  r   Z
ncfdtridfd)r2   Zdfdr   r3   r3   r4   test_ncfdtridfd  s    
zTestCephes.test_ncfdtridfdc                 C   s<   dddddg}t |ddd}tt |ddd|dd	 d S )
Nr   rH   r:   rm   g     @r   rc   gh㈵>rA   )r/   r  r   Z
ncfdtridfn)r2   dfnr   r3   r3   r4   test_ncfdtridfn  s    zTestCephes.test_ncfdtridfnc                 C   s4   dddg}t dd|d}tt dd|d| d S )Nri   r  r   r:   rm   rc   )r/   r  r   Z	ncfdtrinc)r2   Zncr   r3   r3   r4   test_ncfdtrinc  s    
zTestCephes.test_ncfdtrincc                 C   s   t tdddd t tdddd tttjdddd	 tttd
tjd ttd
dtjd ttttjdd tttd
tjd tttd
dtj d S )NrH   r   ri   	   i   r   ru   rj   r   r   r   )	r   r/   Znctdtrr   rM   r   r   r   r   r1   r3   r3   r4   test_nctdtr  s    zTestCephes.test_nctdtrc                 C   s   t ddd d S )NrH   ri   r   )r/   Z	nctdtridfr1   r3   r3   r4   Z__check_nctdtridf  s    zTestCephes.__check_nctdtridfc                 C   s   t ddd d S r  )r/   Z	nctdtrincr1   r3   r3   r4   test_nctdtrinc  s    zTestCephes.test_nctdtrincc                 C   s   t ddd d S )Nr   r   ri   )r/   Znctdtritr1   r3   r3   r4   test_nctdtrit  s    zTestCephes.test_nctdtritc                 C   s   t tdddd d S )Nri   rH   rj   )r   r/   Znrdtrimnr1   r3   r3   r4   test_nrdtrimn  s    zTestCephes.test_nrdtrimnc                 C   s   t tddddddd d S )Nri   ru   r   rK   )r   r/   Znrdtrisdr1   r3   r3   r4   test_nrdtrisd  s     zTestCephes.test_nrdtrisdc                 C   s   t dddd d S r  )r/   Zobl_ang1r1   r3   r3   r4   test_obl_ang1  s    zTestCephes.test_obl_ang1c                 C   s2   t ddddd}t|d d t|d d d S )NrH   r   rj   ru   )r/   Zobl_ang1_cvr   )r2   resultr3   r3   r4   test_obl_ang1_cv  s    zTestCephes.test_obl_ang1_cvc                 C   s   t tdddd d S NrH   r   r   )r   r/   Zobl_cvr1   r3   r3   r4   _check_obl_cv  s    zTestCephes._check_obl_cvc                 C   s   t dddd d S r  )r/   Zobl_rad1r1   r3   r3   r4   test_obl_rad1  s    zTestCephes.test_obl_rad1c                 C   s   t ddddd d S r  )r/   Zobl_rad1_cvr1   r3   r3   r4   test_obl_rad1_cv  s    zTestCephes.test_obl_rad1_cvc                 C   s   t dddd d S r  )r/   Zobl_rad2r1   r3   r3   r4   test_obl_rad2  s    zTestCephes.test_obl_rad2c                 C   s   t ddddd d S r  )r/   Zobl_rad2_cvr1   r3   r3   r4   test_obl_rad2_cv  s    zTestCephes.test_obl_rad2_cvc                 C   s   t tddd d S )NrH   r   r  )r   r/   pbdvr1   r3   r3   r4   	test_pbdv  s    zTestCephes.test_pbdvc                 C   s   t dd d S r  )r/   pbvvr1   r3   r3   r4   	test_pbvv  s    zTestCephes.test_pbvvc                 C   s   t dd d S r  )r/   Zpbwar1   r3   r3   r4   	test_pbwa"  s    zTestCephes.test_pbwac                 C   sB   t dd}t|td t dddgd}t|dddg d S )Nr   rH   r=   r:   )r/   Zpdtrr   rM   r   r   r2   valr3   r3   r4   	test_pdtr%  s    zTestCephes.test_pdtrc                 C   sF   t dd}t|dtd  t dddgd}t|dddg d S )Nr   rH   r=   r:   ru   )r/   Zpdtrcr   rM   r   r   r  r3   r3   r4   
test_pdtrc,  s    zTestCephes.test_pdtrcc              	   C   s.   t  }|td tdd W 5 Q R X d S )N-floating point number truncated to an integerri   )r   rn  ro  r/   pdtri)r2   rq  r3   r3   r4   
test_pdtri3  s    zTestCephes.test_pdtric                 C   sT   t dd}tt |d dd t dgdgdggdddg}t|td d S )	Nri   rH   r   r   ffffff?#B;r   )rm   rm   )r/   Zpdtrikr   Z	gammainccr   rM   r   )r2   rU   r3   r3   r4   test_pdtrik8  s    zTestCephes.test_pdtrikc                 C   s   t dddd d S r  )r/   Zpro_ang1r1   r3   r3   r4   test_pro_ang1?  s    zTestCephes.test_pro_ang1c                 C   s    t tdddddtd d S )NrH   r   rw  )r   r/   Zpro_ang1_cvr   r1   r3   r3   r4   test_pro_ang1_cvB  s    zTestCephes.test_pro_ang1_cvc                 C   s   t tdddd d S r  )r   r/   Zpro_cvr1   r3   r3   r4   _check_pro_cvF  s    zTestCephes._check_pro_cvc                 C   s   t dddd d S r  )r/   Zpro_rad1r1   r3   r3   r4   test_pro_rad1I  s    zTestCephes.test_pro_rad1c                 C   s   t ddddd d S r  )r/   Zpro_rad1_cvr1   r3   r3   r4   test_pro_rad1_cvL  s    zTestCephes.test_pro_rad1_cvc                 C   s   t dddd d S r  )r/   Zpro_rad2r1   r3   r3   r4   test_pro_rad2O  s    zTestCephes.test_pro_rad2c                 C   s   t ddddd d S r  )r/   Zpro_rad2_cvr1   r3   r3   r4   test_pro_rad2_cvR  s    zTestCephes.test_pro_rad2_cvc                 C   s   t d d S r\   )r/   psir1   r3   r3   r4   test_psiU  s    zTestCephes.test_psic                 C   s   t tdddd d S r.   )r   r/   radianr1   r3   r3   r4   test_radianX  s    zTestCephes.test_radianc                 C   s   t tdd d S r   )r   r/   r  r1   r3   r3   r4   test_rgamma[  s    zTestCephes.test_rgammac                 C   sd   t tdd t tdd t tdd t tdd t td	d t td
d d S )N333333@r   333333      g@r   gg            @r  )r   r/   roundr1   r3   r3   r4   
test_round^  s    zTestCephes.test_roundc                 C   s   t d d S r\   )r/   Zshichir1   r3   r3   r4   test_shichif  s    zTestCephes.test_shichic                 C   sl   t d t tj\}}t|tjd  t|d t tj \}}t|tj d  tt|d d S )NrH   ri   r   z cosine integral(-inf) is not nan)r/   ZsicirM   r   r   r   r   r   )r2   srp  r3   r3   r4   	test_sicii  s    

zTestCephes.test_sicic                 C   s   t tdd d S NZ   rj   )r   r/   sindgr1   r3   r3   r4   
test_sindgt  s    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   r1   r3   r3   r4   test_smirnovw  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:         ?      rm   g      ȿ)r   r/   Z	_smirnovpr   rM   r   r   r1   r3   r3   r4   test_smirnovp{  s    zTestCephes.test_smirnovpc                 C   s   t tddd tttdtj tjddddd}ttd|dt	d|  tjddddd}ttd	|dt	d	|  d S )
NrH   r   r   r   TZendpointrm   r   r8   )
r   r/   	_smirnovcr   rM   r   r   r  r   r  )r2   Zx10Zx4r3   r3   r4   test_smirnovc  s    zTestCephes.test_smirnovcc                 C   sP   t tdtddd t tdtddd tttdtj d S NrH   r;   333333?)r   r/   r  smirnovir   rM   r   r   r1   r3   r3   r4   test_smirnovi  s    zTestCephes.test_smirnovic                 C   sP   t tdtddd t tdtddd tttdtj d S r  )r   r/   r  Z
_smirnovcir   rM   r   r   r1   r3   r3   r4   test_smirnovci  s    zTestCephes.test_smirnovcic                 C   s   t tdd d S r   )r   r/   Zspencer1   r3   r3   r4   test_spence  s    zTestCephes.test_spencec                 C   s:   t tddd ttddd ttddd d S )NrH   r   ri   r  r:   gMoF?)r   r/   Zstdtrr   r1   r3   r3   r4   
test_stdtr  s    zTestCephes.test_stdtrc                 C   s   t dd d S )Nffffff?rH   )r/   Zstdtridfr1   r3   r3   r4   test_stdtridf  s    zTestCephes.test_stdtridfc                 C   s   t dd d S )NrH   r  )r/   Zstdtritr1   r3   r3   r4   test_stdtrit  s    zTestCephes.test_stdtritc                 C   s   t tddd d S rt   )r   r/   struver1   r3   r3   r4   test_struve  s    zTestCephes.test_struvec                 C   s   t tdd d S r   )r   r/   tandgr1   r3   r3   r4   
test_tandg  s    zTestCephes.test_tandgc                 C   s   t tddd d S r   )r   r/   Ztklmbdar1   r3   r3   r4   test_tklmbda  s    zTestCephes.test_tklmbdac                 C   s   t d d S r\   )r/   y0r1   r3   r3   r4   test_y0  s    zTestCephes.test_y0c                 C   s   t d d S r\   )r/   r  r1   r3   r3   r4   test_y1  s    zTestCephes.test_y1c                 C   s   t dd d S r\   )r/   ynr1   r3   r3   r4   test_yn  s    zTestCephes.test_ync                 C   s   t dd d S r\   )r/   yvr1   r3   r3   r4   test_yv  s    zTestCephes.test_yvc                 C   s   t dd d S r\   )r/   yver1   r3   r3   r4   
_check_yve  s    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>@ru   g|Pk?r   rH   irk  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)r2   r   wr3   r3   r4   	test_wofz  s            "zTestCephes.test_wofzN)__name__
__module____qualname__r5   r7   rW   r[   re   rh   rk   rn   ro   rr   rs   rw   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   pytestmarkxfailr   r   r   r  r  r  r  r
  r  r  r  r  r  r  r  r  r  r  r   r"  r$  r'  r)  r+  r-  r/  r1  r3  r5  r6  r7  r9  r;  r<  r=  r?  rA  rC  rE  rG  rI  rK  rN  rP  rR  rT  rV  rX  rZ  r\  r^  r`  ra  rb  rd  re  rf  rh  rj  rm  rr  rt  ru  rv  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  r3   r3   r3   r4   r-   /   s~  

	r-   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestAiryc                 C   sj   t d}t|tddddgd t d}t|tdd	d
dgd t d}t|tddddgd d S )NGz?g*?gTk'kPĿge+?gyCyt?ry  g=
ףp=?g'$'?geοgL?g
HVV?g
ףp=
׿gl@D|?gV~׭ͿgU?g3{ɔ?)r   r0   r   r   r   r3   r3   r4   r5     s    


zTestAiry.test_airyc                 C   s   t d}t d}d gd }tdD ] }|| tdtd  ||< q&tddD ]*}|| tttdtd   ||< qRt||d d S )Nr   r8   r:   gN贁N{?r>   )	r   r6   r0   r^   r   r   absr   r   )r2   abZb1rT   r3   r3   r4   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dddddgd t|d tdddddgd t|d tdddddgd t|d td d!d"d#d$g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տrm   gqM0=C?g7uTg\G`?gp⍞vg$.m?)r   bi_zerosr   r   )r2   biZbiar3   r3   r4   test_bi_zeros  sP    





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   )r2   Zair3   r3   r4   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 d	d
ddddgdd t|d d ddddddg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  r0   r  r   )r2   r   zpZai_zpxZaip_zxZai_zZaip_z_Zai_zpZaip_zpZai_envelopeZaip_enveloper3   r3   r4   test_ai_zeros_big#  s2        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 d	d
ddddgdd t|d d ddddddg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   r  r0   r  r   )r2   r   r  Zbi_zpxZbip_zxr   Zbi_zZbip_zZbi_zpZbip_zpZbi_envelopeZbip_enveloper3   r3   r4   test_bi_zeros_big;  s2        zTestAiry.test_bi_zeros_bigN)	r  r  r  r5   r7   r  r  r!  r"  r3   r3   r3   r4   r    s   

!r  c                   @   s   e Zd Zdd ZdS )TestAssocLaguerrec                 C   sL   t dd}t ddd}t||dd t ddd}t||dd d S )Nr   rH   r   ry  )r   genlaguerreZassoc_laguerrer   )r2   Za1Za2r3   r3   r4   test_assoc_laguerreU  s
    z%TestAssocLaguerre.test_assoc_laguerreN)r  r  r  r%  r3   r3   r3   r4   r#  T  s   r#  c                   @   s   e Zd Zdd ZdS )TestBesselpolyc                 C   s   d S Nr3   r1   r3   r3   r4   r   ^  s    zTestBesselpoly.test_besselpolyN)r  r  r  r   r3   r3   r3   r4   r&  ]  s   r&  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&
TestKelvinc                 C   s   t d}t|dd d S )Nr:   gT?r   )r   rv   r   )r2   Zmbeir3   r3   r4   rw   c  s    
zTestKelvin.test_beic                 C   s   t d}t|dd d S )Nr:   gD,X?r   )r   rx   r   )r2   Zmbeipr3   r3   r4   ry   g  s    
zTestKelvin.test_beipc                 C   s   t d}t|dd d S )Nr:   gPA4?r   )r   r{   r   )r2   Zmberr3   r3   r4   r|   k  s    
zTestKelvin.test_berc                 C   s   t d}t|dd d S )Nr:   gii߿r   )r   r}   r   )r2   Zmberpr3   r3   r4   r~   o  s    
zTestKelvin.test_berpc                 C   s(   t d}t|tdddddgd d S )Nr   &jj@+"@(rw+@硄U2@`<6@r8   )r   Z	bei_zerosr   r   )r2   r  r3   r3   r4   test_bei_zeross  s    
zTestKelvin.test_bei_zerosc                 C   s(   t d}t|tdddddgd d S )Nr   gyWo.@g╲ݏ @gנ{)@gK11@gWc"5@ry  )r   Z
beip_zerosr   r   )r2   Zbipr3   r3   r4   test_beip_zeros|  s    
zTestKelvin.test_beip_zerosc                 C   s(   t d}t|tdddddgd d S )Nr   \@6ُ@ӟHY'@>"D0@gaO;4@r8   )r   Z	ber_zerosr   r   )r2   r{   r3   r3   r4   test_ber_zeros  s    
zTestKelvin.test_ber_zerosc                 C   s(   t d}t|tdddddgd d S )Nr    '@s%@F ^-@vۅj3@B7@r8   )r   Z
berp_zerosr   r   )r2   Zbrpr3   r3   r4   test_berp_zeros  s    
zTestKelvin.test_berp_zerosc              	   C   sr   t d}t|t dt dd  t dt dd  t dt dd  t 	dt 
dd  fd d S )Nr:   r   ry  )r   r]  r   r{   rv   rY  rU  r}   rx   r[  rW  )r2   Zmkelvr3   r3   r4   test_kelvin  s    
zTestKelvin.test_kelvinc                 C   s   t d}t|dd d S )Nr:   g>ɿr   )r   rU  r   )r2   Zmkeir3   r3   r4   rV    s    
zTestKelvin.test_keic                 C   s   t d}t|dd d S )Nr:   gr@d"?r   )r   rW  r   )r2   Zmkeipr3   r3   r4   rX    s    
zTestKelvin.test_keipc                 C   s   t d}t|dd d S )Nr:   gܙUr   )r   rY  r   )r2   Zmkerr3   r3   r4   rZ    s    
zTestKelvin.test_kerc                 C   s   t d}t|dd d S )Nr:   g^.n3Jr   )r   r[  r   )r2   Zmkerpr3   r3   r4   r\    s    
zTestKelvin.test_kerpc                 C   s(   t d}t|tdddddgd d S )Nr   E>Q@B= @PN)@m91@
%5@r8   )r   Z	kei_zerosr   r   )r2   rU  r3   r3   r4   test_kei_zeros  s    
zTestKelvin.test_kei_zerosc                 C   s(   t d}t|tdddddgd d S )Nr   Wf,@?"@FZ*o+@OpN2@Ea6@r8   )r   Z
keip_zerosr   r   )r2   rW  r3   r3   r4   test_keip_zeros  s    
zTestKelvin.test_keip_zerosc           
      C   s   t d}|\}}}}}}}}	t|tdddddgd t|tdd	d
ddgd t|tdddddgd t|tdddddgd t|tdddddgd t|tddddd gd t|td!d"d#d$d%gd t|	td&d'd(d)d*gd d S )+Nr   r0  r1  r2  r3  r4  r8   r)  r*  r+  r,  r-  #?Q5U@q89 %@ol`.@gO0q3@r=  r>  r?  r@  rA  r6  r7  r8  r9  r:  gum.@gݏ @gs{)@g䠄11@gN(D!5@S@89@@^C'@群1ZG0@+ڇ4@rC  rD  rE  rF  rG  )r   Zkelvin_zerosr   r   )
r2   tmpZberzZbeizZkerzZkeizZberpzZbeipzZkerpzZkeipzr3   r3   r4   test_kelvin_zeros  s    
zTestKelvin.test_kelvin_zerosc                 C   s(   t d}t|tdddddgd d S )Nr   rI  rJ  rK  rL  gD;q3@r8   )r   Z	ker_zerosr   r   )r2   rY  r3   r3   r4   test_ker_zeros  s    
zTestKelvin.test_ker_zerosc                 C   s(   t d}t|tdddddgd d S )Nr   rM  rN  rO  rP  rQ  r8   )r   Z
kerp_zerosr   r   )r2   r[  r3   r3   r4   test_kerp_zeros  s    
zTestKelvin.test_kerp_zerosN)r  r  r  rw   ry   r|   r~   r.  r/  r5  r;  r<  rV  rX  rZ  r\  rB  rH  rS  rT  rU  r3   r3   r3   r4   r(  b  s$   		.r(  c                   @   s   e Zd Zdd ZdS )TestBernoullic              	   C   s*   t d}t|tddddddgd d S )Nr   rj   r  g-!lV?ru   g镲r8   )r   Z	bernoullir   r   )r2   Zbrnr3   r3   r4   test_bernoulli  s    
zTestBernoulli.test_bernoulliN)r  r  r  rW  r3   r3   r3   r4   rV    s   rV  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>   ry  )r   r   r   r   )r2   betZbetgr3   r3   r4   r     s    zTestBeta.test_betac                 C   s0   t dd}ttt dd}t||d d S )Nr:   r8   ry  )r   r   r   r  r   r   )r2   ZbetlnrY  r3   r3   r4   r     s    zTestBeta.test_betalnc                 C   s   t ddd}t|dd d S )NrH   r   ry  )r   r   r   )r2   Zbtincr3   r3   r4   r     s    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   )r2   r   compr3   r3   r4   r     s    zTestBeta.test_betaincinvN)r  r  r  r   r   r   r   r3   r3   r3   r4   rX    s   rX  c                   @   s   e Zd Zdd Zejdddgejdddgejddd	gejd
ddgdd Zdd Zdd Z	dd Z
dd ZdS )TestCombinatoricsc                 C   s   t tddgddgddg ttddd ttjddddd ttjddddd	d
 tdd tdD tdttddd t	t
jd }ttj||d dd| d}tjdddd|kstd S )Nr   rm   r8         ^@g     @j@Texactx   )r^  
repetition   c                 S   s   g | ]}t jd |ddqS )rY   Tr]  )r   comb).0rU   r3   r3   r4   
<listcomp>"  s     z/TestCombinatorics.test_comb.<locals>.<listcomp>r	  rY   r   rL   rH   l   hU7`S?Q r  2   )r   r   rb  r   r   r   r^   listrM   Ziinfor]   maxAssertionError)r2   iir   r3   r3   r4   	test_comb  s     zTestCombinatorics.test_combr`  TFlegacyrU   r  rm   N      @r8   c              	   C   s   |rL|t |ks|t |krLtjtdd tj||d||d}W 5 Q R X ntj||d||d}|r|rt || d t | }}d}nt |t | }}tj||||d}t|| d S )Nz1Non-integer arguments are currently being cast tomatchT)r^  rl  r`  rH   F)rl  r`  )r]   r  warnsDeprecationWarningr   rb  r   )r2   rm  rU   rl  r`  r  r   r3   r3   r4   test_comb_legacy+  s$    z"TestCombinatorics.test_comb_legacyc                 C   sL   d}d}t |}t |}tj||dd}tj||dd}||ksHtd S )NF   rD   Tr]  )rM   Zint64r   rb  ri  )r2   rT   rU   Znp_nZnp_kZres_npZres_pyr3   r3   r4   test_comb_with_np_int64I  s    

z)TestCombinatorics.test_comb_with_np_int64c                 C   s   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ddddgddddgd	d	d	d
g d S )Nr:   rm   Tr]  r   r=   Fr   ru   r\  )r   r   rb  r   r1   r3   r3   r4   test_comb_zerosR  s    
z!TestCombinatorics.test_comb_zerosc                 C   sJ   t tddgddgddg ttddd ttjddddd d S )	Nr   rm   r8        @g     @Tr]  i  )r   r   permr   r   r1   r3   r3   r4   	test_permZ  s    zTestCombinatorics.test_permc                 C   s   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ddddgddddgd	d	d	d
g d S )Nr:   rm   Tr]  r   r=   Fr   ru   rw  )r   r   rx  r   r1   r3   r3   r4   test_perm_zeros_  s    
z!TestCombinatorics.test_perm_zerosN)r  r  r  rk  r  r  parametrizers  ru  rv  ry  rz  r3   r3   r3   r4   r[    s   	r[  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestTrigonometricc                 C   s   t d}d}t|| d S )N   r   )r   r   r   )r2   cbZcbrlr3   r3   r4   r   i  s    
zTestTrigonometric.test_cbrtc                 C   s   t d}d}t||d d S )Ngfffff;@g鎖C@ry  )r   r   r   )r2   Zcb1Zcbrl1r3   r3   r4   test_cbrtmoren  s    
zTestTrigonometric.test_cbrtmorec                 C   s&   t d}ttd }t||d d S )Nr  r   ry  r   r   r	   r   r   )r2   ZcdgZcdgrlr3   r3   r4   r   s  s    
zTestTrigonometric.test_cosdgc                 C   s&   t d}ttd }t||d d S NrD         @ry  r  )r2   ZcdgmZcdgmrlr3   r3   r4   test_cosdgmorex  s    
z TestTrigonometric.test_cosdgmorec                 C   sV   t dt dt td f}tdd tdd ttd d f}t||d d S )Nr   r   r   rH   ry  )r   r   r   r	   r   )r2   csZcsrlr3   r3   r4   r   }  s     &zTestTrigonometric.test_cosm1c                 C   s*   t d}ttd d }t||d d S )NrD   r  r=   ry  r   r   r
   r   r   )r2   ctZctrlr3   r3   r4   r     s    
zTestTrigonometric.test_cotdgc                 C   s*   t d}ttd d }t||d d S )Nr   r   r=   ry  r  )r2   Zct1Zctrl1r3   r3   r4   test_cotdgmore  s    
z TestTrigonometric.test_cotdgmorec                 C   s   t tddd t tddd t tddd t tddd t td	dd t td
dd t tddd t tddd t tddd t tddd t tddd t tddd t tddd d S )Nr   rj      r   r  ru   i   y   i  i;  i  )r   r   r   r1   r3   r3   r4   test_specialpoints  s    z$TestTrigonometric.test_specialpointsc                 C   s&   t tdgd ttdd d S )Nr   rH   ru   rj   )r   r   Zsincr   r1   r3   r3   r4   	test_sinc  s    zTestTrigonometric.test_sincc                 C   s   t d}t|d d S r  )r   r  r   )r2   Zsnr3   r3   r4   r    s    
zTestTrigonometric.test_sindgc                 C   sH   t d}ttd }t||d t d}ttd }t||d d S )NrD   r  ry  r   r   )r   r  r   r   r   )r2   ZsnmZsnmrlZsnm1Zsnmrl1r3   r3   r4   test_sindgmore  s    

z TestTrigonometric.test_sindgmoreN)r  r  r  r   r  r   r  r   r   r  r  r  r  r  r3   r3   r3   r4   r|  h  s   r|  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )	TestTandgc                 C   s&   t d}ttd }t||d d S r  r   r  r
   r   r   )r2   tnZtnrlr3   r3   r4   r    s    
zTestTandg.test_tandgc                 C   sH   t d}ttd }t||d t d}ttd }t||d d S )Nr   r   ry  r  r   r  )r2   ZtnmZtnmrlZtnm1Ztnmrl1r3   r3   r4   test_tandgmore  s    

zTestTandg.test_tandgmorec                 C   s   t tddd t tddd t tddd t tddd t td	dd t td
dd t tddd t tddd t tddd t tddd t tddd d S )Nr   ru   r  r   rj   r  r   r  r  rx  iLr  r  r  r  )r   r   r  r1   r3   r3   r4   r    s    zTestTandg.test_specialpointsN)r  r  r  r  r  r  r3   r3   r3   r4   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   r1   r3   r3   r4   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   )r2   elrelr3   r3   r4   r     s    zTestEllip.test_ellipjc                 C   s   t d}t|dd tt dtj tt dtd  tt tjd tt tjtj tt dtj t	t dd	 d S )
Nr   g;{yэ?r   ru   rj   r:   r=   gN?)
r   r!   r   r   r"   rM   r   r   r   r   )r2   elkr3   r3   r4   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   rc   rY   rx  r   gfoKh?ry  ru   rj   r   ri   gt?rH   r;   r   rA   6<R!?r  gfON?)r   r   r   r!   r   r   r   rM   r   r   r   )r2   Zelkincr  alphaphir|  r3   r3   r4   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   r2   Zmbadr  r|  Zmvalsjr  f1r3   r3   r4   test_ellipkinc_2  s    
zTestEllip.test_ellipkinc_2c                 C   sD  t ddd}t ddd}t jdtd ddd}tt|d	t t |d
d tt|d	t t |d
d tt|d	t t |d
d t	tt jd d	t j
 tt| d	t t | d
d tt| d	t t | d
d tt| d	t t | d
d t	tt j d d	t j
 d S )Niir   gFFg<r   r:   Fr  rH   r
  rA   )rM   rZ   r  r   r   r   r   Zarcsinhr
   r   r   )r2   ZxlogZxlinZxlin2r3   r3   r4   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?ry  ru   r:   rj   r  g?eg@)	r   r    r   r   r   rM   r   r   r   )r2   eler3   r3   r4   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   rx  #   g'?ry  ru   rj   r   ri   r  r  gL@)r   r   r   r    r   r   r   rM   r   r   r   )r2   Zeleincr  r  r  r|  r3   r3   r4   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  r3   r3   r4   test_ellipeinc_2@  s    
zTestEllip.test_ellipeinc_2N)r  r  r  r  r   r   r   r  r  r   r   r  r3   r3   r3   r4   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"tttdds4ttdtdtdksLttddgddgddgddgdd	gdd
gg}ttjt	dddt	dd dg}t
|D ]\}}t t| ||  qd S )NrH   ru   r   r   g      @r   r                       r   y
c?
cy=B?CGֿr   y檠f?P9lb?)r   r#   r   ri  r   r   r   rM   r   r   	enumerater2   argsZexpected_resultsra   arrr3   r3   r4   test_elliprcV  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<tttdddsRtttddtddsntttddtddstttddttj	j
 d stttddtddsttddd	gddd
gdddgdddgdddgdddgg}tddddddg}t|D ]\}}t t| ||  qd S )NrH   r   r:   r   g`C+?ru   r   r=   rj   r   r   r              ?y             gfe_?gi+"?gP$M?ytgFU?7?@yR<8*y{62?z)r   r$   r   ri  rM   r   r   r   r   doubletinyr   r  r  r3   r3   r4   test_elliprdj  s0    $
zTestEllipCarlson.test_elliprdc              
   C   s  t tdddd t tdddd tdtddks8tttdddsNtttdddsbttttdddksztttddtt dsttdddgd	d
dgdddgdd	dgdddgd	d
dgdd	dgg}tdddddddg}t	|D ]\}}t t| ||  qd S )NrH   r   r:   gPO?ru   r=   rj   r   r   r  ri   r  r   r         ?      geQO?gʞu5J?yp\y?kg2ΰ?gHwд?y|pF?-6Fj)
r   r%   r   ri  rM   r   r   r   r   r  r  r3   r3   r4   test_elliprf  s2    
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sLtttttddsfttdddgdddgdd	d
gdd	dgd
dd	gdddgg}ttjdddddg}t	|D ]\}}t t| ||  qd S )NrH   r   ri   ru   g      0@r   r   r   r   r  r  g8d`?gL+?g}^?y旮0?ʋW?yjN?^?gt?)
r   r&   rM   r   r   ri  r   r   r   r  r  r3   r3   r4   test_elliprg  s*    
zTestEllipCarlson.test_elliprgc                 C   s  t tddddd tddtddks*tttdddds@tttddddsVttdddtdkslttddddgdddd	gdddd
gddddgd
dddgddddgd
dddgddddgddddgg	}tdddddddddg	}t|D ]\}}t t| ||  qd S )NrH   ru   r   r=   rj   r   r   r   rq   r  r   r              r  y            ?r        g @?gviM?ym?\Isؿg'4Ob?go0 ?yW7?xfOA?ybv㿘ܶ.gHQ?gjߡB7E)r   r'   r   ri  r   r   r  r  r3   r3   r4   test_elliprj  s6    







		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'   r1   r3   r3   r4   test_elliprj_hard  s$      z"TestEllipCarlson.test_elliprj_hardN)r  r  r  __doc__r  r  r  r  r  r  r  r  r  r3   r3   r3   r4   r  Q  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=   ru   )rM   r   Zm_n1_1r   r   minZmax_neglog2Z
very_neg_mZconcatenate
ms_up_to_1r1   r3   r3   r4   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)
        ru   rj   N)r  r   r!   r%   r2   r|  r3   r3   r4   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   ru   rj   N)	r   r   r  r   rM   r  r   r"   r%   )r2   r  m1r3   r3   r4   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   ru   rj   N)r  r   r    r&   r  r3   r3   r4   test_e  s    z)TestEllipLegendreCarlsonIdentities.test_eN)r  r  r  r  r  r  r  r  r3   r3   r3   r4   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   s   t d}t|dd d S )Nr   g);T?ry  )r   r   r   )r2   Zerr3   r3   r4   r     s    
zTestErf.test_erfc                 C   s,   t d}tdddddg}t||d d S )Nr   yTcJ5?=W?yo@n@y'ʷ@g	@y"[

@,y]+@yld&@-;'j'>@r8   )r   Z	erf_zerosr   r   )r2   ZerzZerzrr3   r3   r4   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	p ||}	||j}
t |	}|	| }	|| }t |
}|
| }
|| }t||	|||d
 t||
|||d
 W 5 Q R X d S )NrC   r  g{Gz?r:   r   rH   r   ignoreallr   )	rM   rR   rS   paretorandinterrstater   isfiniter+   )r2   funcZ
other_funcrB   rL   rT   r   r   r   r  Zw_realmaskr3   r3   r4   _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   r3   r3   r4   <lambda>/      z.TestErf.test_erfc_consistent.<locals>.<lambda>rf   r   r   )r  r/   r   r1   r3   r3   r4   test_erfc_consistent,  s    zTestErf.test_erfc_consistentc                 C   s   | j tjdd dd d S )Nc                 S   s   t | |  t|  S r'  )rM   r   r/   r   r  r3   r3   r4   r  7  r  z/TestErf.test_erfcx_consistent.<locals>.<lambda>rf   rA   )r  r/   erfcxr1   r3   r3   r4   test_erfcx_consistent4  s
    zTestErf.test_erfcx_consistentc                 C   s   | j tjdd dd d S )Nc                 S   s   dt d|   S )Nr  r   r  r  r3   r3   r4   r  >  r  z.TestErf.test_erfi_consistent.<locals>.<lambda>rf   rA   )r  r/   erfir1   r3   r3   r4   test_erfi_consistent;  s
    zTestErf.test_erfi_consistentc                 C   s   | j tjdd dd d S )Nc                 S   s&   t td t|  |   t|  S rL  )r   r   rM   r   r/   r  r  r3   r3   r4   r  E  r  z/TestErf.test_dawsn_consistent.<locals>.<lambda>rf   rA   )r  r/   r   r1   r3   r3   r4   test_dawsn_consistentB  s
    zTestErf.test_dawsn_consistentc                 C   s6   t jt j t jg}t jddg}tt||dd d S )Nr=   rH   r   rA   )rM   r   r   r   r   r   r2   r  r   r3   r3   r4   test_erf_nan_infI  s    zTestErf.test_erf_nan_infc                 C   s6   t jt j t jg}t jddg}tt||dd d S )Nr:   r   r   rA   )rM   r   r   r   r   r   r  r3   r3   r4   test_erfc_nan_infN  s    zTestErf.test_erfc_nan_infc                 C   s8   t jt j t jg}t jt jdg}tt||dd d S )Nr   r   rA   )rM   r   r   r   r   r  r  r3   r3   r4   test_erfcx_nan_infS  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  r3   r3   r4   test_erfi_nan_infX  s    zTestErf.test_erfi_nan_infc                 C   s6   t jt j t jg}t jddg}tt||dd d S )Nrc  ru   r   rA   )rM   r   r   r   r   r   r  r3   r3   r4   test_dawsn_nan_inf]  s    zTestErf.test_dawsn_nan_infc                 C   s@   t jt j t jg}t jt jd  ddg}tt||dd d S )Nr   r   r   rA   )rM   r   r   r   r   r  r  r3   r3   r4   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  r3   r3   r3   r4   r    s   	
r  c                   @   s   e Zd Zdd ZdS )	TestEulerc           
      C   s
  t d}t d}t d}t|dgdd t|ddgdd t|dddgdd t d}dddd	d
ddddddddg}tdd}tddD ]8}|d rt||  |d| < qt|| |d| < qtjdd t|| | }t	|}	W 5 Q R X t
|	dd d S )Nr   rH   r:   r   rA   r=   r   r   =   ii  iY  i=) il   Q~ l   10[l   $8gC
 l   2l   v}Ju: )r   dr  r  r  ru   r  )r   Zeulerr   r   r^   r_   rM   r  r   rh  r   )
r2   Zeu0Zeu1Zeu2Zeu24Z	mathworldcorrectrU   errZerrmaxr3   r3   r4   
test_euleri  s.    



  
zTestEuler.test_eulerN)r  r  r  r  r3   r3   r3   r4   r  h  s   r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestExpc                 C   s   t d}d}t|| d S )Nr:   r8   )r   r   r   r2   exZexrlr3   r3   r4   r     s    
zTestExp.test_exp2c                 C   s   t d}d}t||d d S )N      @g;f@ry  )r   r   r   r2   ZexmZexmrlr3   r3   r4   test_exp2more  s    
zTestExp.test_exp2morec                 C   s   t d}d}t|| d S )Nr:   r  )r   r   r   r  r3   r3   r4   r     s    
zTestExp.test_exp10c                 C   s   t d}d}t||d d S )Nr  gYs@ry  )r   r   r   r  r3   r3   r4   test_exp10more  s    
zTestExp.test_exp10morec                 C   sN   t dt dt df}tdd tdd tdd f}t||d d S )Nr:   rm   r8   rH   ry  r   r   r   r   r  r3   r3   r4   r     s    "zTestExp.test_expm1c                 C   sN   t dt dt df}tdd tdd tdd f}t||d d S )Nr:    @皙@rH   ry  r  )r2   Zex1Zexrl1r3   r3   r4   test_expm1more  s    "zTestExp.test_expm1moreN)	r  r  r  r   r  r   r  r   r  r3   r3   r3   r4   r    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 dddgtjddd	g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ddddgddddddg 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ddddgtddddg| qtddD ]}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	  r\  rm   r8   r   Fr]  r_  r>   r   Trc   l    Xnr<   r   i  i _7    )TFr  )r   r   	factorialr   rM   r   r   r^   mathr   r_   )r2   r^  rT   r  r3   r3   r4   test_factorial  s\    



z%TestFactorialFunctions.test_factorialzx, exact)rH   T)rH   FrH   TFc                 C   s   t tj||dstd S Nr]  )rM   Zisscalarr   r  ri  )r2   r   r^  r3   r3   r4   test_factorial_0d_return_type  s    z4TestFactorialFunctions.test_factorial_0d_return_typec                 C   s8   t dddgtjdddgdd ttjdd	dd
 d S )Ng     @Z@g      x@g     @r<   ry  r  Fr]  Ti   )r   r   Z
factorial2r   r1   r3   r3   r4   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   Tr]  r_  rm   r   )r   r   Z
factorialkr1   r3   r3   r4   test_factorialk  s    z&TestFactorialFunctions.test_factorialkc                 C   s    t j||d}tt| d S r  )r   r  r   rM   r   )r2   r   r^  r  r3   r3   r4   test_nan_inputs  s    z&TestFactorialFunctions.test_nan_inputs)rm   r   z*Python 3.10+ math.factorial() requires intr   c              	   C   s   t t jdddt jg}t j}|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 5 Q R X d S )	NrH   r:   rm   z-Using factorial\(\) with floats is deprecatedTr]  r>   F)	rM   r   r   r   rn  rr  r   r  r   )r2   r   rq  r  r3   r3   r4   test_mixed_nan_inputs  s    z,TestFactorialFunctions.test_mixed_nan_inputsN)r  r  r  r  r  r  r{  rM   r   r  r  r  r   r  Zskipifsysversion_infor  r3   r3   r3   r4   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      ?        r  r  )y       ?yn<ӿj<Cy)BR;߿ux7Q?)y      yھ|}-2?y/?!ۿ)r  GM?pBR?)y      @        r  r  )y              @y       GMܿy        pBR?)y              gGMܿgpBR߿)y             y        GM?y       pBR߿ri   r  c                 C   s&   t t|}t|t ||gd d S )Nry  )r   r   r  r   )r2   r   r  rp  frsr3   r3   r4   test_fresnel_values
  s     zTestFresnel.test_fresnel_valuesc                 C   sz   t d\}}t|tdddddgd t|tdd	d
ddg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@Ǻ?rm   y.1?ǘ?yʡE6@:#J{/?yq-
@y&1?yh o@߾3?yW2q@qh?r   rH   r  )r   fresnel_zerosr   r   r  )r2   szoczoZvals1Zvals2r3   r3   r4   test_fresnel_zeros/  s.    zTestFresnel.test_fresnel_zerosc                 C   s(   t d\}}t d}t||d d S )Nr>   rz  )r   r  Zfresnelc_zerosr   )r2   r  r  Zfrcr3   r3   r4   test_fresnelc_zerosB  s    
zTestFresnel.test_fresnelc_zerosc                 C   s(   t d\}}t d}t||d d S )Nr   rz  )r   r  Zfresnels_zerosr   )r2   r  r  r  r3   r3   r4   test_fresnels_zerosG  s    
zTestFresnel.test_fresnels_zerosN)r  r  r  r  r  r{  rM   r   r  r  r  r  r3   r3   r3   r4   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   s   t d}t|d d S r  )r   r   r   )r2   Zgamr3   r3   r4   r
  N  s    
zTestGamma.test_gammac                 C   s(   t d}tt d}t||d d S )Nrm   ry  )r   r   r   r   r   )r2   ZgamlnZlngamr3   r3   r4   r  R  s    
zTestGamma.test_gammalnc                 C   s(   t dd}t dd}t||d d S )Nri   ry  )r   r  gammaincinvr   )r2   ZgccinvZgcinvr3   r3   r4   r  W  s    zTestGamma.test_gammainccinvc                 C   sv   t dd}t d|}t|dd t dd}t dd}td|dd t|ddd t dd}td	|dd d S )
Nr;   rH   r   g?g`	\;r   rf  gmb<g      &@)r   r  gammaincr   r2   r   r   r3   r3   r4   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;   rf   rA   )rM   r  r   r  r  r   )r2   ZptsZxpr   r   r3   r3   r4   test_975h  s    
 
 zTestGamma.test_975c                 C   s(   t d}dt d }t||d d S )Nry  rH   )r   r  r   r   )r2   ZrgamZrlgamr3   r3   r4   r  u  s    
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  r1   r3   r3   r4   test_infinityz  s    zTestGamma.test_infinityN)r  r  r  r
  r  r  r*   r  r  r  r  r3   r3   r3   r4   r  M  s   

r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )
TestHankelc                 C   s"   t tddtdd d d S Nr  r:   rm   r  )r   r   r  r1   r3   r3   r4   
test_negv1  s    zTestHankel.test_negv1c                 C   s8   t dd}t ddt ddd  }t||d d S NrH   r   r   ry  )r   r  rH  r  r   )r2   Zhank1Zhankrlr3   r3   r4   r    s    zTestHankel.test_hankel1c                 C   s"   t tddtdd d d S r   )r   r   r  r1   r3   r3   r4   test_negv1e  s    zTestHankel.test_negv1ec                 C   s0   t dd}t ddtd }t||d d S )NrH   r   y       ry  )r   r  r  r   r   )r2   Zhank1eZhankrler3   r3   r4   r     s    zTestHankel.test_hankel1ec                 C   s"   t tddtdd d d S r   )r   r   r!  r1   r3   r3   r4   
test_negv2  s    zTestHankel.test_negv2c                 C   s8   t dd}t ddt ddd  }t||d d S r"  )r   r!  rH  r  r   )r2   Zhank2Zhankrl2r3   r3   r4   r"    s    zTestHankel.test_hankel2c                 C   s"   t tddtdd d d S r   )r   r   r#  r1   r3   r3   r4   
test_neg2e  s    zTestHankel.test_neg2ec                 C   s(   t dd}t dd}t||d d S )NrH   r   ry  )r   r#  r   )r2   Zhank2eZhankrl2er3   r3   r4   test_hankl2e  s    zTestHankel.test_hankl2eN)r  r  r  r!  r  r#  r   r$  r"  r%  r&  r3   r3   r3   r4   r    s   r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )	TestHyperc                 C   s8   t dd}t ddt ddd  }t||d d S r"  )r   Zh1vpjvpyvpr   )r2   h1Zh1realr3   r3   r4   	test_h1vp  s    zTestHyper.test_h1vpc                 C   s8   t dd}t ddt ddd  }t||d d S r"  )r   Zh2vpr(  r)  r   )r2   h2Zh2realr3   r3   r4   	test_h2vp  s    zTestHyper.test_h2vpc              
   C   s&  t tddddd t tddddd td	d
ddddg}tdddddg}t ||dd td	td
ddddgd }t ||tdd dddg}dddg}t||}dddg}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   gQvo?rf   rA   r   rj   r   r   g      r=   rH   r  g̷?g3|t-Ք?go?g{h?r   gc?r:   rm   )
r   r   hyp0f1rM   r   r   r   	row_stackassert_raises
ValueError)r2   r   r   x1Zx2r3   r3   r4   test_hyp0f1  s*    
  


 zTestHyper.test_hyp0f1c                 C   s   t dd}t|d d S )N皙?      ?      ?y;EG?uM?)r   r.  r   )r2   resr3   r3   r4   test_hyp0f1_gh5764  s    zTestHyper.test_hyp0f1_gh5764c              h   C   st  t ddd}t|dd tddddgd	d
ddgddddgddddgddddgddddgdddd gd!d"d#d$gd%d&d'd(gd)d*d+d,gd-d.d/d0gd1d2d3d4gd5d6d7d8gd9d:d;d<gd=d>d?d@gdAdBdCdDgdEdFdGdHgdIdJdKdLgdMdNdOdPgdQdRdSdTgdUdVdWdXgdYdZd[d\gd]d^d_d`gdadbdcddgdedfdgdhgdidjdkdlgdmdndodpgdqdrdsdtgdudvdwdxgdydzd{d|gd}d~ddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgdddd gddddgddddgd	d
ddgddddgddddgddddgddddgdddd gd!d"d#d$gd%d&d'd(gd)d*d+d,gd-d.d/d0gd1d2d3d4gd5d6d7d8gd9d:d;d<gd=d>d?d@gdAdBdCdDgdEdFdGdHgdIdJdKdLgdMdNdOdPgdQdRdSdTgdUdVdWdXgdYdZd[d\gd]d^d_d`gdadbdcddgdedfdgdhgdidjdkdlgdmdndodpgdqdrdsdtgdudvdwdxgdydzd{d|gd}d~ddgddddgddddgddddgddddgddddggd}|D ]6\}}}}t |||}tt|| | dk  q8d S (  Nr   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   ƞAgAZ;gOFA'gxŝO<g_Dc Dg^g@g V*E7g4)3@g7-XtDgΧU(@g2Tj8g$@g  LhBge;@gJgogr@g `屫Bg5'.@gqZ=g7߈Y.g8wgB,@g"^#@grT[	R3@g  BgYgN],*@g*!j,g1@g#r @gq{874*gWs%o.@gMdDg8|.2@g*!,g?I(#@gJ
r .gu8g#=)@g*'1g)ψvAg%0N:@gUx1@gx@gr),c@g:M8@gGb+=@g3ҜV/@gX9ҙim@g"dxz@gqKgv7##@g  >Bg 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^Ig+9gX[?gbZSH%@g5/)@g}RgŢ	@g},*@g6@g1w-@gRA(g_@g5A} :=g   FAgQz5@gq.#gTq&gc ?gφ%#gZV@
g%@0@g   SydgB۽ܟ%@g*>8gV@'g	ʦg/H:gn@S g)bǙ9@g  9gT쁹3!gD gkLFr%@g3333`4Ag: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  Agw1@gq2@gO],@g0ɷ-X@g2@g́y#<@gͣx?g]?g];˄f$@g1}0g_9g8ڃ@g:!ω1g)q(@gg2gv%)AgYN:+gn	Ȱ-?g>gZd|I.Agr/K@g\}L9@g*gΙ?gQq5V@g?)@g'@0@glۭ`@gVn:gRQ0gT&g QCgR4 8gi+gK @g{Ggtiq+g(O?3g	1=@g  8cBg|>oϘg\!<@g"?4V?g%c\q?g gpfP!gAO:@g,\g=R8@g%;gz3@g~0Gg.CVl@ge< .@g9@gkq1Ag=~$gpR7@g 77g,ǆ@g^g{)gRA2@g  dLgf=4,R@gyO-g#ޕ~8@gg|ݩ%P4g:<9@gKzs4g$(~O4@g2y3@g1$6g&TpxA6gG!JAgf^XH
^;@g7r:@g`,/@gi{dAgihx@g!B8(@g7j*@gh@glmF<gpO4@g`2"@g-gnV3!2@g.mq1g!Z{.@grOEgs`m@gzAUguC=V#@g  \gPL-(@g,9$"9g6u7@geRFgw8gv=5@gjRW+g(\-@gyg~=@g4MVgwz:@g^0g+7%g-@j81g5ׂ,jgj4gz0g-</;gݽ]
DgN43@g}W6@gLUS!9gɍF>g Q4@g=}gȮ5@g]nhgFgV9g9gf9,#gF|}fv?g=^ee;@gy}2g'T> g#o@g+5g;gN8Cg8@g   bkAgSx+26@g@gI0gSMCgT*0@g`<6gWy5@gǟRjgӰk
g/:?gJLHR"@gxu-gKu@g6gt8_x7@gd;='g+:;@gBͤ10@g";gK$?gp @g dg	=@g=6` FgTbR.g9:g3@gUfgRbKZ@g!g%P73;g]?gr	y?g)Yv2gȹq@g/3g   Ag?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 [Bgk5ں9gѼ:gk%tp;@g  .<^gf:OI&gO/g#01|2gf`Ygqv~@guFd9@gz+S7gF1/$?gx3g~[6:g;s9@gKw*1@gP@gv;K,gҬd&<@g!sgֈ`|.gOwx=@g+MK<gUU@gکI@g©jG1g4g؃66@g(4ν4EgS>?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Ag@')"gVv/@guQU-gfy2yt@gM6y%$g/;R#@g):@gw%",6Կg%x'g$6g5gu$9?glkC9g<tF8gp?g ?r  )r   r&  r   r   r   r  )r2   hyp1Zref_datar  r  rp  r   r  r3   r3   r4   r'    s    




























































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.rz  r   r&  r   )r2   r8  Zhyp2r3   r3   r4   test_hyp1f1_gh2957@	  s    zTestHyper.test_hyp1f1_gh2957c                 C   s   t ddd}t|dd d S )Nri   r  ig<`?rz  r9  )r2   Zhypr3   r3   r4   test_hyp1f1_gh2282E	  s    zTestHyper.test_hyp1f1_gh2282c           	      C   s  dddddt d gdddddtd	 gddd
d	dt d gdddddg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dd d!d"d#gd$ddd%d&gd
ddd%d'gd(ddd%d)gd
d*dd%d+gd,d-g}t|D ]8\}\}}}}}t	||||}t
||dd.| d/ qtd S )0Nri   rH   r  g|Gz?r  g?g|Gzrq   r   r:   r  r4  rm   r  gYi2?r  g433333?r8   ry  r   r=   g      ?r   g      ?r   rn  g      gUUUUUUտg  @gUUUUUU?gr  rj         $gEciH!@rk  r  gzG?gy&1|r%  g"nN%@?r  g!J)r   |      %@r  gzS;)r   r=  g      %r  g[B.VP<test #%derr_msg)r   r   r   r	   r   r   r   r   r  r(  r   )	r2   r   ra   r  r  rp  r   r  cvr3   r3   r4   r)  I	  sP    0zTestHyper.test_hyp2f1c                 C   s   t ddd}t|dd dddd	gd
dddg }}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:   rz  )	r   hyperur   r   r   r   r&  r   r   )r2   Zval1r  r  r   ZhypuZhprlr3   r3   r4   test_hyperuh	  s    $zTestHyper.test_hyperuc                 C   s   t tddddd d S )NrH   r  g3333334@g(¨?rz  )r   r   rD  r1   r3   r3   r4   test_hyperu_gh2287u	  s     zTestHyper.test_hyperu_gh2287N)r  r  r  r+  r-  r3  r7  r'  r:  r;  r)  rE  rF  r3   r3   r3   r4   r'    s   rr'  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2ddddeZ3e4j5j6e78 dfkdgdhdidj Z9e4j5j6e78 dfkdgdhdkdl Z:dmdn Z;dodp Z<e4j5j=dqdr Z>dsdt Z?dudv Z@dwdx ZAdydz ZBd{d| ZCd}d~ ZDdd ZEdddZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdcS )
TestBesselc                 C   s&   t td}t|t ddgd d S )Nr   gbɃ?gΝJ ֿry  )r   r   r:  r   )r2   Zit0r3   r3   r4   r;  {	  s    zTestBessel.test_itj0y0c                 C   s&   t td}t|t ddgd d S )Nr   gbqTtt?g/]ooۿry  )r   r   r4  r   )r2   Zit2r3   r3   r4   r5  	  s    zTestBessel.test_it2j0y0c                 C   s   t tddtdd d S Nrm   r:   r  )r   r   r>  r1   r3   r3   r4   test_negv_iv	  s    zTestBessel.test_negv_ivc                 C   s&   t d}t dd}t||d d S Nr   r   ry  )r   rB  rF  r   r2   ZozZozrr3   r3   r4   rC  	  s    
zTestBessel.test_j0c                 C   s&   t d}t dd}t||d d S Nr   rH   ry  )r   rD  rF  r   r2   Zo1Zo1rr3   r3   r4   rE  	  s    
zTestBessel.test_j1c                 C   s   t dd}t|dd d S )NrH   r   ;x?ry  )r   rF  r   )r2   Zjnnrr3   r3   r4   rG  	  s    zTestBessel.test_jnc                 C   s"   t tddtdd d d S r   )r   r   rH  r1   r3   r3   r4   test_negv_jv	  s    zTestBessel.test_negv_jvc                 C   sh   dddgdddgdddgd	dd
gdddgg}t |D ].\}\}}}t||}t||dd| d q4d S )Nr   r   g
Ye?gUUUUUU?:0yE>g˿+>rJ   g)%->g@g5c)!9r   g%,Ϳry  r?  r@  )r  r   rH  r   )r2   r   ra   r  r   r   Zycr3   r3   r4   rI  	  s    zTestBessel.test_jvc                 C   s"   t tddtdd d d S r   )r   r   rJ  r1   r3   r3   r4   test_negv_jve	  s    zTestBessel.test_negv_jvec                 C   sT   t dd}t|dd t dd}d}t d|tt|j  }t||d d S )NrH   r   rN  ry  ?      ?)r   rJ  r   rH  r   r  r   )r2   ZjvexpZjvexp1r   Zjvexprr3   r3   r4   test_jve	  s    zTestBessel.test_jvec                 C   s   t dd}t dd}t|tdddddgd	 t|td
ddddgd	 t dd}t|tdddddgdd t dd}t|tdddddgdd d S )Nr   r   rH   go@.=@gzj,[@glN!@g5/ D'@gh>-@r8   W@0@盬QX$@*@8*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   )r2   jn0Zjn1Zjn102Zjn301r3   r3   r4   test_jn_zeros	  sH    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dddddg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;@rP  )r   rZ  r   r   )r2   r[  Zjn10Zjn3010r3   r3   r4   test_jn_zeros_slow	  s"    zTestBessel.test_jn_zeros_slowc           
         s   t j  fdd}tddD ]v}t |\}}}}t|||D ]R\}}}	|	dkrft ||ddd q>|	dkrt|||ddd q>td| q>qd S )	Nc                    s     | d | | d | d S )NrH   r:   r3   )rT   r   rF  r3   r4   jnp	  s    z(TestBessel.test_jnjnp_zeros.<locals>.jnprH   rD   r   r   re  zInvalid t return for nt=%d)r   rF  r^   Zjnjnp_zeroszipr   ri  )
r2   r_  ntr   rT   r|  tzznnttr3   r^  r4   test_jnjnp_zeros	  s    zTestBessel.test_jnjnp_zerosc                 C   sL   t dd}t|tdddddgd t d	d}tt d	|d
dd d S )NrH   r   (yu?OXeS@a!@xi'@'Nw(-@r8     r   r   re  )r   Z	jnp_zerosr   r   r   r(  )r2   r_  r3   r3   r4   test_jnp_zeros	  s    zTestBessel.test_jnp_zerosc                 C   s\   t dd}t|tdddddgtdd	d
ddgtdddddgtdddddgfd d S )NrH   r   rT  rU  rV  rW  rX  rg  rh  ri  rj  rk  "@g+@g-9(1!@gȘ'@g>tA}-@g0v@gjt@gH.?$@g}"O*@gGŧp0@)r   Z
jnyn_zerosr   r   )r2   Zjnzr3   r3   r4   test_jnyn_zeros	  s8    zTestBessel.test_jnyn_zerosc                 C   s8   t dd}t ddt dd d }t||d d S )Nr:   rH   rm   r   )r   r(  rH  r   )r2   ZjvprimZjv0r3   r3   r4   test_jvp
  s    zTestBessel.test_jvpc                 C   s&   t d}t dd}t||d d S rJ  )r   rM  rg  r   )r2   ZozkZozkrr3   r3   r4   rN  
  s    
zTestBessel.test_k0c                 C   s&   t d}t dd}t||d d S rJ  )r   rO  ri  r   )r2   ZozkeZozkerr3   r3   r4   rP  
  s    
zTestBessel.test_k0ec                 C   s&   t d}t dd}t||d d S rL  )r   rQ  rg  r   )r2   Zo1kZo1krr3   r3   r4   rR  
  s    
zTestBessel.test_k1c                 C   s&   t d}t dd}t||d d S rL  )r   rS  ri  r   )r2   Zo1keZo1kerr3   r3   r4   rT  
  s    
zTestBessel.test_k1ec           
      C   s  dt j  d }dt j  d }td||}td||}td||}td||}t|jdgd t|jt|| d || gd d || d || d  d|| d  |d  d|d  |d  g}|d |d d|d   |d |d  |d  g}t|jt|d	 d || d || d  || d
  d
|| d  || d  |d  d|| d  |d  |d  d|d  |d  |d  g}|d |d d|d   |d d|d   d|d   |d |d  |d  |d  g}	t|jt|	d d d S )Nr   rH   r   r:   rm   r  r   r8   r   r>   rz  ry  g      H@)rM   rR   r   Zjacobir   rp  r   )
r2   r  r  ZP0ZP1ZP2ZP3cpZp2cZp3cr3   r3   r4   test_jacobi$
  s"    &B2D XzTestBessel.test_jacobic                 C   s   t dd}t|dd d S )Nr   r   _2?ry  )r   r_  r   )r2   Zkn1r3   r3   r4   r`  6
  s    zTestBessel.test_knc                 C   s   t tddtdd d S Nr   r  r  r   r   rg  r1   r3   r3   r4   test_negv_kv:
  s    zTestBessel.test_negv_kvc                 C   s   t dd}t|dd d S )Nr   r   rs  r   r   rg  r   )r2   Zkv0r3   r3   r4   test_kv0=
  s    zTestBessel.test_kv0c                 C   s   t dd}t|dd d S )NrH   r   gKދ@r   rw  )r2   kv1r3   r3   r4   test_kv1A
  s    zTestBessel.test_kv1c                 C   s   t dd}t|dd d S )Nr:   r   g)lHH@r   rw  )r2   kv2r3   r3   r4   test_kv2E
  s    zTestBessel.test_kv2c                 C   s   t tddd d S )N    rH   g.Ք"H)r   r   r_  r1   r3   r3   r4   test_kn_largeorderI
  s    zTestBessel.test_kn_largeorderc                 C   s   t tddd d S )Nr   g =`XCru  r1   r3   r3   r4   test_kv_largeargL
  s    zTestBessel.test_kv_largeargc                 C   s   t tddtdd d S rt  )r   r   ri  r1   r3   r3   r4   test_negv_kveO
  s    zTestBessel.test_negv_kvec                 C   s`   t dd}t ddtd }t||d d}t d|}t d|t| }t||d d S )Nr   r   ry  rR  )r   ri  rg  r   r   )r2   Zkve1ry  r   Zkve2r{  r3   r3   r4   test_kveR
  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   rg  kvp)r2   r   r3   r3   r4   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   rg  r  r   r2   r  r   Zxcr   r3   r3   r4   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  r3   r3   r4   test_kvp_n2f
  s
    <zTestBessel.test_kvp_n2c                 C   s&   t d}t dd}t||d d S rJ  )r   r  r  r   rK  r3   r3   r4   r   m
  s    
zTestBessel.test_y0c                 C   s&   t d}t dd}t||d d S rL  )r   r  r  r   rM  r3   r3   r4   r  r
  s    
zTestBessel.test_y1c                 C   sp   t d\}}t jddd\}}t||f }t||f }ttt d|dd ttt d|| dd d S )Nr:   rH   r   ru   r   )r   Zy0_zerosr   r   r  r  )r2   ZyoZypoZzoZzpor  Zallvalr3   r3   r4   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   rn  gѮBO?r   )r   Zy1_zerosr   r   )r2   r  r3   r3   r4   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?rm   )r   Z	y1p_zerosr   r   )r2   Zy1pr3   r3   r4   test_y1p_zeros
  s    zTestBessel.test_y1p_zerosc                 C   sH   t dd}t|tddgd t dd}t|ddd	d
dgdd d S )Nr8   r:   g3@g(A&"@r   rl  g]E.+"|@gH(|@gff|}@g&b`~@gHO_~@r   rA   )r   Zyn_zerosr   r   r   )r2   Zanr3   r3   r4   test_yn_zeros
  s     zTestBessel.test_yn_zerosc                 C   sh   t dd}t|tddgd t dd}tt d|ddd	 t d
d}tt d
|ddd	 d S )Nr   r:   gQhվ@gzN@r>   +   r   r   re  rl  r   )r   	ynp_zerosr   r   r   r)  r2   Zaor3   r3   r4   test_ynp_zeros
  s    zTestBessel.test_ynp_zerosc                 C   s&   t dd}tt d|ddd d S )Nrl  r   r   r   re  )r   r  r   r)  r  r3   r3   r4   test_ynp_zeros_large_order
  s    z%TestBessel.test_ynp_zeros_large_orderc                 C   s   t dd}t|dd d S NrH   r   5,1
ry  )r   r  r   )r2   Zyn2nr3   r3   r4   r  
  s    zTestBessel.test_ync                 C   s"   t tddtdd d d S r   )r   r   r  r1   r3   r3   r4   test_negv_yv
  s    zTestBessel.test_negv_yvc                 C   s   t dd}t|dd d S r  )r   r  r   )r2   Zyv2r3   r3   r4   r  
  s    zTestBessel.test_yvc                 C   s"   t tddtdd d d S r   )r   r   r  r1   r3   r3   r4   test_negv_yve
  s    zTestBessel.test_negv_yvec                 C   sH   t dd}t|dd t ddtd }t dd}t||d d S )NrH   r   r  ry  rR  r=   )r   r  r   r  r   )r2   Zyve2Zyve2rZyve22r3   r3   r4   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   rm   r   r:   r   )r   r  r)  r   )r2   ZyvprZyvp1r3   r3   r4   test_yvp
  s    zTestBessel.test_yvpc                 c   sj   ddddddddd	d
dg}ddddddddddddg}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 AMOSir         4r<  r   r  ru   rj   {G(@r\  rY  ir  r=   r        i@g     y@g     Ă@g@  i'  Nri   ir  r  )	itertoolsproductr   )r2   r  r   r3   r3   r4   _cephes_vs_amos_points
  s    z!TestBessel._cephes_vs_amos_pointsdy=r   Nc                 C   s   |   D ]\}}|d k	r$|||r$q||||||d |t||  }}	}
t|rrtt|	dk||f qt|rt|	jdk||f qt||	||f||d |t|krt|
|	||f||d qd S )Nr   u <7~r   )rA  rB   rL   )	r  r]   rM   r   r   r  r   r   r   )r2   r  f2rB   rL   skipr  r   c1c2c3r3   r3   r4   check_cephes_vs_amos
  s    *

 zTestBessel.check_cephes_vs_amosppc64lezfails on ppc64ler   c                 C   s   | j tjtjddd d S )NrJ   u5% r   )r  r   rH  rF  r1   r3   r3   r4   test_jv_cephes_vs_amos
  s    z!TestBessel.test_jv_cephes_vs_amosc                 C   s   | j tjtjddd d S )Nr  r  r   r  r   r  r  r1   r3   r3   r4   test_yv_cephes_vs_amos
  s    z!TestBessel.test_yv_cephes_vs_amosc                 C   s$   dd }| j tjtjdd|d d S )Nc                 S   s   t | dkS )Nrf  )r  )r  r   r3   r3   r4   r  
  r  zETestBessel.test_yv_cephes_vs_amos_only_small_orders.<locals>.<lambda>r  r  )rB   rL   r  r  )r2   skipperr3   r3   r4   (test_yv_cephes_vs_amos_only_small_orders
  s    z3TestBessel.test_yv_cephes_vs_amos_only_small_ordersc              	   C   s2   t jdd | jtjtjddd W 5 Q R X d S )Nr  r  g:0y5>r  r   )rM   r  r  r   r>  r1   r3   r3   r4   test_iv_cephes_vs_amos
  s    z!TestBessel.test_iv_cephes_vs_amosc           	   
   C   sd  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 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 5 Q R X t |}t|| dk || || t	|| || t	|| || d f d S )Ni@B rH   ri   r=   r:   )r   r   ry  r   r  r  r   r  gYngH׊>)rM   rR   rS   r  r  r   r]   r  r   r>  r   r  r   Zargmaxr   )	r2   rm  r  r   Zimskr  r  dcrU   r3   r3   r4    test_iv_cephes_vs_amos_mass_test
  s"    ""
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   rg  r_  r1   r3   r3   r4   test_kv_cephes_vs_amos
  s    z!TestBessel.test_kv_cephes_vs_amosc                 C   s:   t tddd t tddd t tddd d S )	Nrm   r8   gP?rY  r  g~Omʒ?gY8E@@gKSn)r   r   rH  r1   r3   r3   r4   test_ticket_623  s    zTestBessel.test_ticket_623c                 C   s  t tddd t tddd t tddd t tddd t tddd t tddd	 t tddd
 t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd	 t tddd
 t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddd t tddtddtd  t tddtddtd  t t	ddtddtd  t t
ddtddtd  t tddtdddtdd   t tddtdddtdd   dS )zNegative-order Besselsr=   rH   gl)ܿrk  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   rH  r  r>  rg  rJ  r   r  r@  ri  r  r!  r1   r3   r3   r4   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   rH  r>  r  rg  rJ  r@  r  ri  r6   r  anyr1   r3   r3   r4   test_ticket_8544  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   rg  rM   r   ri  r1   r3   r3   r4   test_gh_7909E  s    zTestBessel.test_gh_7909c                 C   s(   t tddd t tddd dS )zReal-valued Bessel I overflowrH   i  g~rE   i`  g ?los~Nr   r   r>  r1   r3   r3   r4   test_ticket_503I  s    zTestBessel.test_ticket_503c                 C   s   t tddd d S )Nr  rH   r  r  r1   r3   r3   r4   test_iv_hyperg_polesN  s    zTestBessel.test_iv_hyperg_poles   c                 C   s   t d|t}|d|  td|  t|d  t|| d  }t|t|< t|}t	|
 ttj | t	|d d  }| |fS )Nr   r:   ri   rH   r=   r   )r   r   r   r   r   r   r   r   r   r  rh  r   epssumr2   r  r   rT   rU   rr  r3   r3   r4   	iv_seriesQ  s    8*zTestBessel.iv_seriesc                 C   s4   dD ]*}|  d|\}}tt||||d qd S )Nrj   r   r  r   rL   rA  )r  r   r   r*  r2   r   valuer  r3   r3   r4   test_i0_seriesY  s    zTestBessel.test_i0_seriesc                 C   s4   dD ]*}|  d|\}}tt||||d qd S )Nr  rH   r  )r  r   r   r.  r  r3   r3   r4   test_i1_series^  s    zTestBessel.test_i1_seriesc                 C   sD   dD ]:}dD ]0}|  ||\}}tt||||||fd qqd S )N)r  r<  r   ru   rj   r  r\  )rj   r   r  y             @r  )r  r   r   r>  r2   r  r   r  r  r3   r3   r4   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 ]4\}\}}t|t|  }t||dd| d q<d S )Nru   rj   rJ   r   g0oO?ri   g!?grb?r  gpH?rq   gC~?r   ggo?ry  r?  r@  )r  r   r*  r   r   r2   r   ra   r   r  rB  r3   r3   r4   r+  i  s    	zTestBessel.test_i0c                 C   s&   t d}t dd}t||d d S rJ  )r   r,  r@  r   )r2   ZoizeZoizerr3   r3   r4   r-  w  s    
zTestBessel.test_i0ec                 C   sp   ddgddgddgddgdd	gd
dgddgg}t |D ]4\}\}}t|t|  }t||dd| d q6d S )Nru   rJ   gj|=r   gȕ![1?ri   g;͘?rj   gRΜ?rq   g|?r   g}f?ry  r?  r@  )r  r   r.  r   r   r  r3   r3   r4   r/  |  s    zTestBessel.test_i1c                 C   s&   t d}t dd}t||d d S rL  )r   r0  r@  r   )r2   Zoi1eZoi1err3   r3   r4   r1    s    
zTestBessel.test_i1ec                 C   s&   t td}t|t ddgd d S )Nr   gїJB?@g*u?)r   r   r8  r   )r2   Ziti0r3   r3   r4   r9    s    zTestBessel.test_iti0k0c                 C   s"   t d}t|tddgd d S )Nr   gݳɄ|T?gVƥ
@r>   )r   r2  r   r   )r2   Zit2kr3   r3   r4   r3    s    
zTestBessel.test_it2i0k0c                 C   s$   t ddtd }t|dd d S )Nr   r   皙gv M?r   )r   r>  r   r   )r2   iv1r3   r3   r4   r?    s    zTestBessel.test_ivc                 C   s   t tddtdd d S rH  )r   r   r@  r1   r3   r3   r4   test_negv_ive  s    zTestBessel.test_negv_ivec                 C   s0   t dd}t ddtd }t||d d S )Nr   r   r  r   )r   r@  r>  r   r   )r2   Zive1r  r3   r3   r4   test_ive  s    zTestBessel.test_ivec                 C   s    t tddtddd d S )NrH   r:   r   r   )r   r   r>  ivpr1   r3   r3   r4   	test_ivp0  s    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   r>  r  r   r  r3   r3   r4   test_ivp  s    zTestBessel.test_ivp)r  r   N)r  )Ur  r  r  r;  r5  rI  rC  rE  rG  rO  rI  rQ  rS  r\  r]  rf  rm  ro  rp  rN  rP  rR  rT  rr  r`  rv  rx  rz  r|  r~  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  platformmachiner  r  r  r  Zslowr  r  r  r  r  r  r  r  r  r  r  r  r+  r-  r/  r1  r9  r3  r?  r  r  r  r  r3   r3   r3   r4   rG  z	  s   
	



,
rG  c                   @   s   e Zd Zdd Zdd ZdS )TestLaguerrec              	   C   s   t d}t d}t d}t d}t d}t d}t|jdgd t|jddgd t|jtdd	dgd
 d t|jtddddgd d t|jtdddddgd d t|jtddddddgd d d S )Nr   rH   r:   rm   r8   r   r  r=   r  r   r  ir>   r  iH   ir   r	  r   i8iX  ir_  r\  )r   Zlaguerrer   rp  r   )r2   lag0lag1lag2lag3Zlag4Zlag5r3   r3   r4   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:   rm   r=   rk  rj   r   r  r  )rM   rR   r   r$  r   rp  r   r   )r2   rU   r  r  r  r  r3   r3   r4   test_genlaguerre  s    .zTestLaguerre.test_genlaguerreN)r  r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd ZdS )TestLegendrec              	   C   s   t d}t d}t d}t d}t d}t d}t|jdg t|jddg t|jtdddgd d	d
 t|jtddddgd  t|jtdddddgd  t|jtddddddgd  d S )Nr   rH   r:   rm   r8   r   r=   r   r  r   r  r  r  r   ?   irc   )r   Zlegendrer   rp  r   r   )r2   Zleg0Zleg1Zleg2Zleg3Zleg4Zleg5r3   r3   r4   test_legendre  s    





zTestLegendre.test_legendreN)r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd ZdS )
TestLambdac              	   C   sx   t dd}tt dddt dd d gtt dddt dd d dt dd d  gf}t||d d S )NrH   r   r   r:   rk  r   ry  )r   Zlmbdar   rF  r(  rH  r   )r2   ZlamZlamrr3   r3   r4   
test_lmbda  s
    "6zTestLambda.test_lmbdaN)r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )	TestLog1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )Nr   r   rz  r  ry  r   rl  r   r   )r2   Zl1pZl1prlr3   r3   r4   rm    s    zTestLog1p.test_log1pc                 C   sB   t dt dt df}tdtdtdf}t||d d S )NrH   皙?rC  r:   r  r  ry  r  )r2   Zl1pmZl1pmrlr3   r3   r4   test_log1pmore  s    zTestLog1p.test_log1pmoreN)r  r  r  rm  r  r3   r3   r3   r4   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:   rm   rj   ri   rH   ru   r>   r<   )r   clpmnr   r   r   )r2   r   Zclpr3   r3   r4   
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   rm   ri   r   r:   r   r<   )r   r  r   r   rs  r2   r  r|  rT   r   Zclp_plusZ	clp_minusr3   r3   r4   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   rm   ri   r   r   y             y              ?r<   )r   r  r   r   rs  rM   r   r   r  r3   r3   r4   test_clpmn_close_to_real_3  s    $$" z0TestLegendreFunctions.test_clpmn_close_to_real_3c              
   C   sj   d}d}d}d}dD ]P}t t|||d|  |d ||f t|||d|  |d ||f d qd S )NHz>rH   r   r:   rm   r   r>   )r   r   r  )r2   r  r|  rT   r   typer3   r3   r4   test_clpmn_across_unit_circle  s    $" z3TestLegendreFunctions.test_clpmn_across_unit_circlec              
   C   s   dD ]}t dD ]t}t d|D ]d}t|||}tt|d ddd f   t|||}tt|d ddd f   qqqd S )N)rH   r=   r8   rH   )r^   r   r  r   rM   r   r  lpmn)r2   r   rT   r|  lpr3   r3   r4   test_inf  s    "zTestLegendreFunctions.test_infc                 C   s   ddddddddg}d	}d
}dD ]r}|D ]h}dD ]^}t |||d|  |d t |||d|  |d  | }tt ||||d |dd q0q(q d S )Nr5  y            ?y            y      ?      r  r  r  r  r:   rm   r  )r   y        MbP?ri   r   rH   r  rA   )r   r  r   )r2   Zzvalsr|  rT   r  r   hZapprox_derivativer3   r3   r4   test_deriv_clpmn"  s(       z&TestLegendreFunctions.test_deriv_clpmnc                 C   s:   t ddd}t|tdddggtdddggfd d S )	Nr   r:   ri   rj         ru   r  r8   )r   r  r   r   r2   r  r3   r3   r4   	test_lpmn1  s    zTestLegendreFunctions.test_lpmnc                 C   s4   t dd}t|tdddgtdddgfd d S )Nr:   ri   rj   r  ru   r  r8   )r   Zlpnr   r   )r2   Zlpnfr3   r3   r4   test_lpn:  s    zTestLegendreFunctions.test_lpnc              	   C   st   t ddd}t|dd t ddd}t|dd tjd	d
 t ddd}W 5 Q R X t|dkplt| d S )Nr   r:   ri   r  r<   (   r   gI?r  r  r=   )r   rs  r   rM   r  r   r   r  r3   r3   r4   rt  C  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   )r2   Zlqmnflqfr3   r3   r4   	test_lqmnO  s    zTestLegendreFunctions.test_lqmnc                 C   sR   d}d}|| || fD ]4}t dd|d d }d|| d  }t|| qdS )znalgorithm for real arguments changes at 1.0001
           test against analytical result for m=2, n=1
        gqh ?gh㈵>r:   rH   r   )r=   r=   N)r   r  r   )r2   Zx0deltar   Zlqr   r3   r3   r4   test_lqmn_gt1U  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   r  r   r   )r2   r  r  r3   r3   r4   test_lqmn_shape`  s    z%TestLegendreFunctions.test_lqmn_shapec                 C   s4   t dd}t|tdddgtdddgfd	 d S )
Nr:   ri   gk+ݓ?g=yX5gW2g|a2U?g~jt?gڊer8   )r   r  r   r   )r2   r  r3   r3   r4   test_lqni  s    zTestLegendreFunctions.test_lqnN)r  r  r  r  r  r  r  r  r  r  r  rt  r  r   r  r  r3   r3   r3   r4   r    s   					r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestMathieuc                 C   s   d S r'  r3   r1   r3   r3   r4   ru  q  s    zTestMathieu.test_mathieu_ac                 C   s   t dd d S )Nr:   r   )r   r)   r1   r3   r3   r4   test_mathieu_even_coeft  s    z"TestMathieu.test_mathieu_even_coefc                 C   s   d S r'  r3   r1   r3   r3   r4   test_mathieu_odd_coefx  s    z!TestMathieu.test_mathieu_odd_coefN)r  r  r  ru  r  r  r3   r3   r3   r4   r  o  s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestFresnelIntegralc                 C   s   d S r'  r3   r1   r3   r3   r4   r    s    z$TestFresnelIntegral.test_modfresnelpc                 C   s   d S r'  r3   r1   r3   r3   r4   r    s    z$TestFresnelIntegral.test_modfresnelmN)r  r  r  r  r  r3   r3   r3   r4   r  }  s   r  c                   @   s   e Zd Zdd ZdS )TestOblCvSeqc                 C   s*   t ddd}t|tddddgd d S )	Nr   rm   rH   g~T~Oֿgt_J?gm{@g@j'&@r   )r   Z
obl_cv_seqr   r   )r2   Zoblr3   r3   r4   test_obl_cv_seq  s    zTestOblCvSeq.test_obl_cv_seqN)r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )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   )r2   Zpbr3   r3   r4   test_pbdn_seq  s    z#TestParabolicCylinder.test_pbdn_seqc                 C   s4   t dd dt ddd  t ddd   d S )NrH   r   r   r   )r   r  r1   r3   r3   r4   r    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   r
  Zpbdv_seqr   r   )r2   ZpbnZpbvr3   r3   r4   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   ru   r   r   r   gGz$@gq=
ףp4@gHQ9rf   rA   g(\#gQ@gkS a>)rM   r  r   r   r   r   r   r  )r2   etar   r3   r3   r4   test_pbdv_points  s
    *z&TestParabolicCylinder.test_pbdv_pointsc                 C   s   t dddd d d f }t dddd d d f }t||}ddt|  }t||| d t||| d  | d	 }t|d
 |ddd d S Nr  r8   ry  r  r   r   r  r   r   rH   r   r   )rM   r  r   r  r  r   r2   r   r  r   r  Zdpr3   r3   r4   test_pbdv_gradient  s    0z(TestParabolicCylinder.test_pbdv_gradientc                 C   s   t dddd d d f }t dddd d d f }t||}ddt|  }t||| d t||| d  | d	 }t|d
 |ddd d S r  )rM   r  r   r  r  r   r  r3   r3   r4   test_pbvv_gradient  s    0z(TestParabolicCylinder.test_pbvv_gradientN)	r  r  r  r  r  r  r  r  r  r3   r3   r3   r4   r	    s   
	r	  c                   @   s   e Zd Zdd ZdS )TestPolygammac                 C   s   t dd}t dd}t|dd t|dd dddg}tt d|t | dddg}d	d
dg}dddg}tt ||| t|gd }tt |t|gd | tt t|gd || d S )Nr:   rH   rm   gX];r   gOV,@@g  8Br   ri   r  r  g2}jg.M?g}2;ο)r   Z	polygammar   r  rM   r/  )r2   Zpoly2Zpoly3r   rT   r   r3   r3   r4   test_polygamma  s&    


zTestPolygamma.test_polygammaN)r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd ZdS )TestProCvSeqc                 C   s*   t ddd}t|tddddgd d S )	Nr   rm   rH   g"~j?g6?Ң@g)u8F"@g2g)@r   )r   Z
pro_cv_seqr   r   )r2   Zprolr3   r3   r4   test_pro_cv_seq  s    zTestProCvSeq.test_pro_cv_seqN)r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd ZdS )TestPsic                 C   s   t d}t|dd d S )NrH   goxry  )r   r  r   )r2   Zpsr3   r3   r4   r    s    
zTestPsi.test_psiN)r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )
TestRadianc                 C   s"   t ddd}t|td d d S )Nr  r   r   r   r   r  r   r   )r2   Zradr3   r3   r4   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   r  )r2   Zrad1r3   r3   r4   test_radianmore  s    zTestRadian.test_radianmoreN)r  r  r  r  r  r3   r3   r3   r4   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )TestRiccatic                 C   s|   d\}}t ||f}t|D ]D}t||}tj||dd}|| |d|f< || | |d|f< qt|t||d d S N)r:   r   T)Z
derivativer   rH   ry  )rM   emptyr^   r   Zspherical_jnr   Z
riccati_jn)r2   rm  r   SrT   r  Zjpr3   r3   r4   test_riccati_jn  s    zTestRiccati.test_riccati_jnc                 C   s|   d\}}t ||f}t|D ]D}t||}tj||dd}|| |d|f< || | |d|f< qt|t||d d S r  )rM   r  r^   r   Zspherical_ynr   Z
riccati_yn)r2   rm  r   CrT   r   Zypr3   r3   r4   test_riccati_yn  s    zTestRiccati.test_riccati_ynN)r  r  r  r  r!  r3   r3   r3   r4   r    s   
r  c                   @   s   e Zd Zdd ZdS )	TestRoundc              	   C   s@   t tttdtdtdtdf}d}t|| d S )Ng333333$@g$@r>  g333333%@)r   r   r   r   )rg  mapr]   r   r  r   )r2   ZrndZrndrlr3   r3   r4   r    s    .zTestRound.test_roundN)r  r  r  r  r3   r3   r3   r4   r"    s   r"  c                  C   s  t j} tj}tj}tj}tj}tj}t| ddddd||  t| ddd|d d|dd	|   ||d d	   t| ddd|d d|dd	|    t| dd||d d|d
d	|   |dd	| d   ||d	 d	   t| dd|d |d d|dd	|   |dd	| d d   ||d d	  d||d d	  d   t| dd|d |d d|dd	|   |dd| d d   ||d d   d S )Nr   ri   rk  r:   ru   r8   r   g      .@r   rc   r   r   r   g      ?rq   g      @rH   r   r  g      ?g     A@)	r   sph_harmrM   r   r   r   r   r	   r   )shr   r   r   r   r	   r3   r3   r4   test_sph_harm  sP    
r&  c                  C   s   t t j} ttddddj|  ttdgdddj|  ttddgddj|  ttdddgdj|  ttddddgj|  ttdgdgdgdgj|  d S r.   )rM   dtypeZ
complex128r   r   r$  )dtr3   r3   r4   "test_sph_harm_ufunc_loop_selection/  s    r)  c                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )
TestStruver  c                 C   sp   t d|}d| d| d| | d   t|d  t|| d  }t| ttj | }| |fS )z?Compute Struve function & error estimate from its power series.r   r=   ri   r:   rH   r  )	r   r   r   r  rh  r   r   r  r  r  r3   r3   r4   _series;  s    
@zTestStruve._seriesc                 C   sH   dD ]>}dD ]4}|  ||\}}tt|||d|d||ff qqdS )z-Check Struve function versus its power series)
ir  (\r  r=   r   rH   r  r     )rH   r   r   r	  rD   r   r   N)r+  r   r   r  r  r3   r3   r4   test_vs_seriesB  s    zTestStruve.test_vs_seriesc                 C   s   t tddddd t tddddd t td	d
ddd t tddddd ttddtdd  ttddtdd  ttddtdd
  ttddtdd
  tttdd tttdd d S )Nr,  r	  g;cv=?r  rA   gQ g< j?rP  r  r  g?rf   g       igzz?r  i)   rz  r  r   gffffffr=   g333333$)r   r   r  r   r   r   r1   r3   r3   r4   test_some_valuesI  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  r1   r3   r3   r4   test_regression_679V  s    zTestStruve.test_regression_679N)r  )r  r  r  r+  r.  r0  r1  r3   r3   r3   r4   r*  :  s   
r*  c                   C   s   t tddd d S )Nr  rm   gdX	
?)r   r   r   r3   r3   r3   r4   test_chi2_smalldf]  s    r2  c                   C   s   t tdtjd d S )Nr  rj   )r   r   r   rM   r   r3   r3   r3   r4   test_ch2_infa  s    r3  c                   C   s   t tddd d S )Nr  rm   yj_?)r   r   r   r3   r3   r3   r4   test_chi2c_smalldfe  s    r5  c                   C   s   t tddd d S )Nr  r4  rm   )r   r   r   r3   r3   r3   r4   test_chi2_inv_smalldfi  s    r6  c                  C   s  d} t dtdtd d| d d}d}d}t tdgd	ggdd	d
g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}@rm   r   g=O?r=   rk  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  rh  r   r   r   )rB   Zagm13Zagm15Zagm35Zagm12fir3   r3   r4   test_agm_simplem  sr    
r9  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 5 Q R X d S )Nr  rH   r   g?r:   gffffff@)r   rn  ro  r   r   Zexpnr  r  r  r  r_  r  r  r  )rq  r3   r3   r4   test_legacy  s    
r:  c                   C   s   t tjtjdd d S )NrH   y        .B}T)r0  r   ZSpecialFunctionErrorr>  r3   r3   r3   r4   test_error_raising  s    r;  c                  C   s   dd } t jddt jfdt jfdgtd}t j|ddgf }t | |d d df |d d d	f }ttj	||d
d
d t | |d d df |d d d	f }ttj	||d
d
d d S )Nc              
   S   sX   t jddB | dkr0t |s0| W  5 Q R  S | t | W  5 Q R  S W 5 Q R X d S Nr  )invalidr   )rM   r  r   r   r   r   r3   r3   r4   xfunc  s    ztest_xlogy.<locals>.xfuncr   r   r   rj   r   r'  )r   r   )rH   r   rH   r@   r   )
rM   r   r   r   r_   r   rd   r+   r   xlogy)r?  z1Zz2w1Zw2r3   r3   r4   
test_xlogy  s    "((rF  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   sX   t jddB | dkr0t |s0| W  5 Q R  S | t | W  5 Q R  S W 5 Q R X d S r<  )rM   r  r   rl  r>  r3   r3   r4   r?    s    ztest_xlog1py.<locals>.xfuncr@  r   rA  )rH   gKH9rB  rH   r@   r   )	rM   r   r   r   r_   rd   r+   r   Zxlog1py)r?  rD  rE  r3   r3   r4   test_xlog1py  s    (rG  c                  C   s   dd } dddt jf}ddg}g }t||D ]\}}|||  q.t j|td}t j| t jgd	|}t	t
j||d
d
d d S )Nc                 S   s"   | dk rt j S t| |  S d S r.   )rM   r   r   rC  )r   r3   r3   r4   r?    s    ztest_entr.<locals>.xfuncr   ri   rj   r=   rH   rB  Zotypesr@   r   )rM   r   r  r  r  r   r_   rd   r   r+   r   Zentr)r?  r   signsr  Zsgnr  r   r  r3   r3   r4   	test_entr  s    rJ  c            
      C   s   dd } d}ddg}g }t ||||D ]"\}}}}||| || f q(tj|td}tj| tjgd|d d df |d d df }	tt	j
|	|d	d	d
 d S )Nc                 S   sh   | dk s |dk s |dkr&| dkr&t jS t | s:t |r@t jS | dkrL|S t| | | |  | S d S r.   )rM   r   Zisposinfr   rC  r>  r3   r3   r4   r?    s     ztest_kl_div.<locals>.xfuncr   ri   rj   r=   rH   rB  rH  r   r@   r   )r  r  r  rM   r   r_   rd   r   r+   r   Zkl_div
r?  r   rI  r  ZsgnavaZsgnbZvbr   r  r3   r3   r4   test_kl_div  s    0rN  c            
      C   s   dd } d}ddg}g }t ||||D ]"\}}}}||| || f q(tj|td}tj| tjgd|d d df |d d df }	tt	j
|	|d	d	d
 d S )Nc                 S   s>   | dkr |dkr t | | | S | dkr4|dkr4dS tjS d S r.   )r   rC  rM   r   r>  r3   r3   r4   r?    s
    ztest_rel_entr.<locals>.xfuncrK  r=   rH   rB  rH  r   r@   r   )r  r  r  rM   r   r_   rd   r   r+   r   Zrel_entrrL  r3   r3   r4   test_rel_entr  s    0rO  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   sD   | dk rt jS t || k r*dt | S | t |d|    S d S )Nr   ri   )rM   r   r  squarer  r  r3   r3   r4   r?    s
    ztest_huber.<locals>.xfuncr   rH  r   rH   r@   r   )r   r   ZhuberrM   r   r   rP  rR   randnrd   r   r+   r?  r   r  r3   r3   r4   
test_huber  s    0rT  c                  C   sx   dd } t t jdd ddgddgg }t j| t jgd|d d df |d d df }ttj	||d	d	d
 d S )Nc                 S   s@   | dk rt jS | r|sdS | d t d||  d  d  S d S )Nr   r:   rH   )rM   r   r   rQ  r3   r3   r4   r?  (  s
    z test_pseudo_huber.<locals>.xfuncr   r:   r   ri   rH  rH   r@   r   )
rM   r   rR   rR  tolistrd   r   r+   r   pseudo_huberrS  r3   r3   r4   test_pseudo_huber'  s    (0rW  c                  C   s*   d} d}t | |}d}t||dd d S )Nrj   gC]r2<gs.-De8r@   rA   )r   rV  r   )r  r  r   r   r3   r3   r4   test_pseudo_huber_small_r5  s
    rX  c                	   C   sL   t jtdd tdd W 5 Q R X t jtdd tdd W 5 Q R X d S )NzToo many predicted coefficientsro  rE   )r  rq  ro  r(   r)   r3   r3   r3   r4   test_runtime_warningB  s    rY  )sr  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   r0  Znumpy.testingr   r   r   r   r   r   r   r   r   Zscipyr   Zscipy.special._ufuncsZ_ufuncsr/   Zscipy.specialr    r!   r"   r#   r$   r%   r&   r'   r(   r)   Zscipy.special._testutilsr*   r+   r,   r   r-   r  r#  r&  r(  rV  rX  r[  r|  r  r  objectr  r  r  r  r  r  r  r  r  r'  rG  r  r  r  r  r  r  r  r  r	  r  r  r  r  r  r"  r&  r)  r*  r2  r3  r5  r6  r9  r:  r;  rF  rG  rJ  rN  rO  rT  rW  rX  rY  r3   r3   r3   r4   <module>   s   T,       >n	 ME  +b hD2# Y    5 		.	
#=
