o
    ?Hh[                     @   s  d Z ddlZddlZddlmZmZ ddlZddlm	Z
 ddlmZmZmZ ddlmZmZmZmZmZ zddlZW n eyG   edZY nw G dd dZG d	d
 d
ZG dd dZdd Zdd Zdd Zd>ddZdd Zd>ddZdd Z ej!j"eedG dd dZ#g dZ$ej!j%de$d d! e$D d"d#d$ Z&d%d& Z'd'd( Z(d)d* Z)d+d, Z*ej!%d-g d.g d/g d0g d1g d2g d3g d4g d5g d6g d7g d8g d9gd:d; Z+G d<d= d=Z,dS )?z
Test cdflib functions versus mpmath, if available.

The following functions still need tests:

- ncfdtri
- ncfdtridfn
- ncfdtridfd
- ncfdtrinc
- nbdtrik
- nbdtrin
- pdtrik
- nctdtrit
- nctdtridf
- nctdtrinc

    N)assert_equalassert_allclose)MissingModulecheck_versionFuncData)ArgIntArgget_args	mpf2floatassert_mpmath_equalmpmathc                   @   s    e Zd ZdZdd Zdd ZdS )ProbArgz*Generate a set of probabilities on [0, 1].c                 C   s   d| _ d| _d S )Nr      )abself r   _/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/special/tests/test_cdflib.py__init__'   s   
zProbArg.__init__c                 C   sr   t d|d }tdtd|}tjdd|d dddd }dttdd	| }tj|||f }t|S )
z3Return an array containing approximately n numbers.r      i333333?gffffff?F)endpointNi)maxnplogspacelog10linspacer_unique)r   nmv1v2v3vr   r   r   values,   s   
zProbArg.valuesN)__name__
__module____qualname____doc__r   r&   r   r   r   r   r   $   s    r   c                   @   s   e Zd Zdd Zdd ZdS )EndpointFilterc                 C   s   || _ || _|| _|| _d S N)r   r   rtolatol)r   r   r   r-   r.   r   r   r   r   7   s   
zEndpointFilter.__init__c                 C   sb   t || j | jt | j | j k }t || j | jt | j | j k }t ||B ddS )NFT)r   absr   r-   r.   r   where)r   xmask1mask2r   r   r   __call__=   s   ((zEndpointFilter.__call__N)r'   r(   r)   r   r4   r   r   r   r   r+   6   s    r+   c                   @   s4   e Zd Z			dddZdd Zd	d
 Zdd ZdS )_CDFDataT     Nc                 C   s   || _ || _|| _|| _|| _|| _|| _|| _|	| _t	|t
s(d | _d | _d S |
d us0|d urWt	|
t
r9|
| _n	|
gt| j | _t	|t
rL|| _d S |gt| j | _d S d | _d | _d S r,   )spfuncmpfuncindexargspecspfunc_firstdpsr    r-   r.   
isinstancelist
endpt_rtol
endpt_atollen)r   r8   r9   r:   r;   r<   r=   r    r-   r.   r@   rA   r   r   r   r   D   s*   





z_CDFData.__init__c                 G   s   | j r>| j| }t|rtjS t|}||| j< t| j	 | j
t| }t|j}W d    |S 1 s7w   Y  |S t| j	 | j
| }t|j}W d    n1 sYw   Y  t|}||| j< | jt| }|S r,   )r<   r8   r   isnannanr?   r:   r   workdpsr=   r9   tupler
   real)r   argsresr   r   r   idmapa   s*   





z_CDFData.idmapc                 C   s   | j d u r| jd u rd S g }t| j | j| jD ],\}}}|d u r*|d u r*|d  q|d u r1d}n|d u r7d}|t|j|j|| q|S )N        )r@   rA   zipr;   appendr+   r   r   )r   filtersr-   r.   specr   r   r   get_param_filteru   s   
z_CDFData.get_param_filterc              
   C   s   t | j| j}|  }tt|jd }|jd }t||d d | j	f 
|jd df}t| j|||| j| jd|d  d S )Nr   r   F)param_columnsresult_columnsr-   r.   
vectorizedparam_filter)r	   r;   r    rP   rF   rangeshaper   hstackr:   reshaper   rJ   r-   r.   check)r   rH   rT   rQ   rR   r   r   r   rY      s   
*

z_CDFData.check)Tr6   r7   NNNN)r'   r(   r)   r   rJ   rP   rY   r   r   r   r   r5   C   s    
r5   c                  O   s   t | i |}|  d S r,   )r5   rY   )r   kwdr   r   r   _assert_inverts   s   r\   c                 C   sp   t | t |t |} }}| dkrt dS | |kr#t dS t jd|dd}t j||  | d |ddS )Nr   r   T)exactx2regularized)r   mpffsubbetainc)kr    ponempr   r   r   _binomial_cdf   s   "

rg   c                 C   sf   |dk r	t dS t | t |t |} }}| | | | |  }t j| d |d |dd}|S )Nr      Tr^   )r   ra   rc   )dfndfdr1   ubrI   r   r   r   _f_cdf   s   
"rl   c                 C   s   |d u rt jj}t |F t | t |} }t dd| d  d|d  |  }||t d| d   9 }|t t j|  t d|    }d| W  d    S 1 sVw   Y  d S )N      ?r         ?rh   )	r   mpr=   rE   ra   hyp2f1gammasqrtpi)dftr=   facr   r   r   _student_t_cdf   s   ""$rw   c                 C   sR   t |d d t ||  }|t | |  d | | |d d   d 9 }|S )Nrh   r      rm   )r   besselirr   exp)ru   rt   ncrI   r   r   r   _noncentral_chi_pdf   s   0r|   c                    s~   |d u rt jj}t | t  t }  t | t  fddd| g}|W  d    S 1 s8w   Y  d S )Nc                    s   t |  S r,   )r|   )ru   rt   r{   r   r   <lambda>       z%_noncentral_chi_cdf.<locals>.<lambda>r   )r   ro   r=   ra   rE   quad)r1   rt   r{   r=   rI   r   r}   r   _noncentral_chi_cdf   s   "$r   c                 C   s   | | d|  |  | S )Nr   r   )re   lmbdar   r   r   _tukey_lmbda_quantile   s   r   z0.19c                   @   s  e Zd Zejjdddd Zdd Zdd Zd	d
 Z	ejjdddd Z
d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d Zdd Zejjdddd  Zejjddd!d" Zd#d$ Zd%d& Zd'd( Zejjddd)d* Zejd+g d,d-d. Zd/S )0
TestCDFlibF)runc                 C   s(   t tjtdt tddt gdd d S )Nr   r     -C6?r-   )r\   spbdtrikrg   r   r   r   r   r   r   test_bdtrik   s   
zTestCDFlib.test_bdtrikc                 C   s.   t tjtdtddt t gdg dd d S )Nr   r   r   )NNư>r-   rA   )r\   r   bdtrinrg   r   r   r   r   r   r   test_bdtrin   s   
zTestCDFlib.test_bdtrinc                 C   s:   t tjdd dt tddddtdddddgd	d
 d S )Nc                 S      t j| ||ddS NTr^   r   rc   r   r   r1   r   r   r   r~          z)TestCDFlib.test_btdtria.<locals>.<lambda>r         Y@Finclusive_ar   r   inclusive_br   r   )r\   r   btdtriar   r   r   r   r   r   test_btdtria   s   
zTestCDFlib.test_btdtriac                 C   s@   t tjdd dtddddt tdddddgd	g d
d d S )Nc                 S   r   r   r   r   r   r   r   r~      r   z)TestCDFlib.test_btdtrib.<locals>.<lambda>r   r   r   Fr   r   Hz>)NgC]r2<V瞯<r   )r\   r   btdtribr   r   r   r   r   r   test_btdtrib   s   
zTestCDFlib.test_btdtribc                 C   s0   t tjtdtddt tddddgdd d S )Nr   d   r   Fr   r   r   )r\   r   fdtridfdrl   r   r   r   r   r   r   r   test_fdtridfd   s   
zTestCDFlib.test_fdtridfdc                 C   s>   t tjdd dt tddddtddddgdg d	d
 d S )Nc                 S      t j|| | ddS NTr   r`   r   gammaincr   r   r   r   r~          z(TestCDFlib.test_gdtria.<locals>.<lambda>r        @@Fr   g     @r   Nr   绽|=r   )r\   r   gdtriar   r   r   r   r   r   test_gdtria   s   
zTestCDFlib.test_gdtriac                 C   s8   t tjdd dtddddt tddddgd	d
 d S )Nc                 S   r   r   r   r   r   r   r   r~     r   z(TestCDFlib.test_gdtrib.<locals>.<lambda>r   r   r   Fr   r   h㈵>r   )r\   r   gdtribr   r   r   r   r   r   test_gdtrib  s   
zTestCDFlib.test_gdtribc              
   C   s>   t tjdd dtddddtddddt gdg d	d
 d S )Nc                 S   r   r   r   r   r   r   r   r~     r   z(TestCDFlib.test_gdtrix.<locals>.<lambda>rh   r   r   Fr   r   r   r   )r\   r   gdtrixr   r   r   r   r   r   test_gdtrix  s   
zTestCDFlib.test_gdtrixc                 C   s8   t tjdd dt tdtjdddtddgd	d
 d S )Nc                 S      t || |S r,   r   ncdfr1   yzr   r   r   r~   !      z*TestCDFlib.test_nrdtrimn.<locals>.<lambda>r   皙?Fr   g    _g    _Br   r   )r\   r   nrdtrimnr   r   r   infr   r   r   r   test_nrdtrimn  s   
zTestCDFlib.test_nrdtrimnc              
   C   s:   t tjdd dttj ddddt tddgdd	 d S )
Nc                 S   r   r,   r   r   r   r   r   r~   +  r   z*TestCDFlib.test_nrdtrisd.<locals>.<lambda>r   
   Fr   g}Ô%ITr   r   )r\   r   nrdtrisdr   r   r   r   r   r   r   r   test_nrdtrisd(  s   
zTestCDFlib.test_nrdtrisdc                 C   s(   t tjttddtdtjgdd d S )Nr   r   r   r   r   )r   r   stdtrrw   r   r   r   r   r   r   r   r   
test_stdtr2  s
   
zTestCDFlib.test_stdtrc                 C   s    t tjtdt t gdd d S )Nr   r   r   )r\   r   stdtridfrw   r   r   r   r   r   r   test_stdtridf9  s
   
zTestCDFlib.test_stdtridfc                 C   s*   t tjtdtddt gdd dgd d S )Nr   r   r   r   r   )r\   r   stdtritrw   r   r   r   r   r   r   test_stdtrit@  s   
zTestCDFlib.test_stdtritc                 C   s(   t tjdd dt tddgdd d S )Nc                 S   s   t j| d |d ddS )Nrh   Tr   r   )r%   r1   r   r   r   r~   J  s    z)TestCDFlib.test_chdtriv.<locals>.<lambda>r   r   r   r   r   )r\   r   chdtrivr   r   r   r   r   r   test_chdtrivG  s
   
zTestCDFlib.test_chdtrivc                 C   s8   t tjtdtddddt tddddgdddd	 d S )
Nr   r   r   Fr   r   r   r   r    r-   r.   )r\   r   	chndtridfr   r   r   r   r   r   r   test_chndtridfM  s   
zTestCDFlib.test_chndtridfc              	   C   s4   t tjtdtddddtddt gddd	d
 d S )Nrh   r   r   Fr   r   r   r   r   r   )r\   r   	chndtrincr   r   r   r   r   r   r   r   test_chndtrincW  s   
zTestCDFlib.test_chndtrincc                 C   s:   t tjtdt tddtddddgdddg d	d
 d S )Nr   r   r   Fr   r   r   r   )r   NN)r    r-   r.   rA   )r\   r   chndtrixr   r   r   r   r   r   r   r   test_chndtrix`  s   
zTestCDFlib.test_chndtrixc                    s.   t d tdd  fddt gdd d S )Nr   c                 S   s   t | dS )Nr   )r   tklmbdar1   r   r   r   r~   m  r   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>c                    s    t |     S r,   )r   rz   r   oner   r   r~   n  r   r   r   )r   ra   r   r   r   r   r   r   test_tklmbda_zero_shapei  s   


z"TestCDFlib.test_tklmbda_zero_shapec              
   C   s0   t tjtdt tddddgddddgd d S )Nr   iF)r   r   g&.>)r<   r-   rA   r\   r   r   r   r   r   r   r   r   r   test_tklmbda_neg_shapeq  s   
z!TestCDFlib.test_tklmbda_neg_shapec              
   C   s*   t tjtdt tddddgddd d S )Nr   r   Fr   r   )r<   r-   r   r   r   r   r   test_tklmbda_pos_shapey  s   
z!TestCDFlib.test_tklmbda_pos_shaper   )rm         ?g       @c                 C   s(   d| }t t| |g|ddg d S )Nr   rK   r   )r   r   r   )r   r   boundr   r   r   test_tklmbda_lmbda1  s    zTestCDFlib.test_tklmbda_lmbda1N)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   parametrizer   r   r   r   r   r      s:    







	
	
r   ))r   r   )r   r   )r   r   )r   r   )r   rh   )chndtrr   )r   r   )r   r   )r   r   )r   r   )ncfdtrrx   )ncfdtrirx   )
ncfdtridfnrx   )
ncfdtridfdrx   )	ncfdtrincrx   )r   r   )r   r   )r   r   )nbdtrikr   )nbdtrinr   )r   r   )r   r   )pdtrikrh   )r   rh   )r   rh   )r   rh   )nctdtrr   )nctdtritr   )	nctdtridfr   )	nctdtrincr   )r   rh   zfunc,numargsc                 C   s   g | ]}|d  qS )r   r   .0r1   r   r   r   
<listcomp>  r   r   )idsc                 C   sh   t jd}tt| } dd ||D }tj| D ]}| | }tdd |D r0t|t j	 q	 qd S )Nl   7'}?J-0 c                 S   s$   g | ]}t |tjtjtj fqS r   )floatr   rD   r   r   r   r   r   r     s   $ z"test_nonfinite.<locals>.<listcomp>c                 s   s    | ]}t |V  qd S r,   )r   rC   r   r   r   r   	<genexpr>  s    z!test_nonfinite.<locals>.<genexpr>)
r   randomdefault_rnggetattrr   	itertoolsproductanyr   rD   )funcnumargsrngargs_choicesrH   rI   r   r   r   test_nonfinite  s   
r   c                  C   s.   t ddtdd } g d}t| | d S )Ng!?rh         4@r   )gyY;@gA@gʾC@g-E@g-oG@gNCEI@g0_{J@gY-L@gjrM@gZǧ9N@g-]fP@gmj#P@ggAQ@gl@Q@gndhR@g$܂R@g@FTxS@gēT@g]gϖT@gc$U@)r   r   r   aranger   )rI   res_expr   r   r   test_chndtrix_gh2158  s   r   c                  C   sB   g d} g d}g d}g d}t | ||}t||ddd d S )N)
MbP?\(\?皙#@b     i'  r  r  r  r  )
r  r   r   皙?+?r  r   r   r  r  )
~jtX?333333?rn      ,  r  r	  rn   r
  r  )
K ˸@gtI?x9" @g.$Bt+@gO,oq@r  gZc^?r  g@gjgdy=rK   r-   r.   )r   r   r   )dfarrparrtarrdesiredactualr   r   r   test_nctdtrinc_gh19896  s   r  c                   C   sX   t t tt j t j dddt jgsJ t t tt j g ds*J d S )N      rK   r   )rK   g      ?rm   g      ?r   )r   allrC   r   r   r   r   r   r   r   r   test_stdtr_stdtrit_neg_inf  s   0(r  c                  C   s   t t jt j ddddddddt jg} | d d d f } t t jt j ddddddt jg	}t t t| t j|s>J t t t	| t j|sNJ d S )	Ng      $r  rK   r   rm   gH.?r         $@)
r   arrayrD   r   
atleast_2dr  rC   r   r   r   )r   re   r   r   r   test_bdtrik_nbdtrik_inf  s     $r  zdfn,dfd,nc,f,expected)r   r   r   r   g,]?)r   r   {Gz?r   gsCr:)r   r  r   r  gnhUg?)r  r  r   r   g%g{E?)r   r   r  r  g 	
1)r   r   r   r   gڞ^)k;)r   r  r   r  glB?)r   r  r  r  g)Dt^\,?)r  r   r   r   g|?)r   r   r   r   g?)r   r   r   r  r   )r   r   r   r  g*}?c                 C   s    t t| ||||ddd d S )NvIh%<=r   r  )r   r   r   )ri   rj   r{   fexpectedr   r   r   test_ncfdtr  s    :r   c                   @   s  e Zd Zejdg dddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?ejd@dAdBdCejjdDdEdFdGdHdI ZdJdK Z	ejdLg dMg dNg dOg dPdQdQe
jdQdRgdQdQe
j dRdRggdSdT ZdUS )V
TestNctdtrzdf, nc, x, expected)r  ffffffr  gD i?)r  r"  r	  g?)r  r"  rn   g7?)r  r"  r
  gU?)r  RQ?r  g?)r  r#  r	  gx$p?)r  r#  rn   g7?)r  r#  r
  g]ŧe?)r  ffffff@r  g樼?)r  r$  r	  g:GF ?)r  r$  rn   gpa?)r  r$  r
  gfO!t?)r  &   r  g    )r  r%  r	  gQb] )r  r%  rn   gy+)r  r%  r
  guQRm?)r  r"  r  g/C*i?)r  r"  r	  g.b?)r  r"  rn   gI'v?)r  r"  r
  g?)r  r#  r  g?)r  r#  r	  gD-?)r  r#  rn   gy0 ?)r  r#  r
  gC?)r  r$  r  g?)r  r$  r	  g:e!?)r  r$  rn   gh?)r  r$  r
  g?)r  r%  r  g+    )r  r%  r	  gPDp   )r  r%  rn   gM)r  r%  r
  ggS>^X#>)r  r"  r  gNG0i?)r  r"  r	  g%Wح?)r  r"  rn   g?)r  r"  r
  r   )r  r#  r  g aYҏ?)r  r#  r	  gpku+?)r  r#  rn   gZVq?)r  r#  r
  r   )r  r$  r  g_a?)r  r$  r	  g+,!?)r  r$  rn   gqgb?)r  r$  r
  g?)r  r%  r  gQ    )r  r%  r	  g%Q   )r  r%  rn   gTh-1)r  r%  r
  g¤5)r  r"  r  geK0i?)r  r"  r	  g?)r  r"  rn   gjS?)r  r"  r
  r   )r  r#  r  g|S׏?)r  r#  r	  gfG-?)r  r#  rn   g^"?)r  r#  r
  r   )r  r$  r  gm?)r  r$  r	  g|q]/!?)r  r$  rn   g+%αs?)r  r$  r
  r   )r  r%  r  gn    )r  r%  r	  gm   r  r%  rn   gDdz+Bug in underlying Boost math implementation)reason)marks)r  r%  r
  g>H*c                 C   s"   t |||}t||ddd d S )Nr  gr  )r   r   r   )r   rt   r{   r1   r  resultr   r   r   test_gh19896S  s   IzTestNctdtr.test_gh19896c                 C   s*   d\}}}d}t t||||dd d S )N)i  r   r   g-^?g+=r   r   r   r   )r   rt   r{   r1   r  r   r   r   test_nctdtr_gh8344  s   
zTestNctdtr.test_nctdtr_gh8344zdf, nc, x, expected, rtol)g      @g      @g       gG>g:0y5>)r   r  r   g'$ <r  )r   g      g       @gjx?r  )r  r   r	  ge*mt-r  r   rK   c                 C   s   t t|||||d d S )Nr   r*  )r   rt   r{   r1   r  r-   r   r   r   test_accuracy  s   zTestNctdtr.test_accuracyN)r'   r(   r)   r   r   r   paramr   r)  r+  r   r   r,  r   r   r   r   r!  +  s&   
(	
 !"#$%&'()*+,-./0123456789:;<=>?B
D
r!  r,   )-r*   r   numpyr   numpy.testingr   r   r   scipy.specialspecialr   scipy.special._testutilsr   r   r   scipy.special._mptestutilsr   r   r	   r
   r   r   ImportErrorr   r+   r5   r\   rg   rl   rw   r|   r   r   r   slowr   funcsr   r   r   r  r  r  r   r!  r   r   r   r   <module>   sh    P
	
	 <#


.