a
    Qek4                     @   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y   edZY n0 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#dd Z$d d! Z%dS )$z
Test cdflib functions versus mpmath, if available.

The following functions still need tests:

- ncfdtr
- ncfdtri
- ncfdtridfn
- ncfdtridfd
- ncfdtrinc
- nbdtrik
- nbdtrin
- nrdtrimn
- nrdtrisd
- pdtrik
- nctdtr
- 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   S/var/www/sunrise/env/lib/python3.9/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 )
z5Return an array containing approximatively n numbers.r      ig333333?gffffff?F)ZendpointNi)maxnpZlogspacelog10ZlinspaceZr_unique)r   nmZv1Zv2Z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   :   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   xZmask1Zmask2r   r   r   __call__@   s    ((zEndpointFilter.__call__N)r   r    r!   r   r*   r   r   r   r   r#   9   s   r#   c                   @   s.   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
sNd | _d | _nf|
d us^|d urt	|
t
rp|
| _n|
gt| j | _t	|t
r|| _q|gt| j | _nd | _d | _d S r$   )spfuncmpfuncindexargspecspfunc_firstdpsr   r%   r&   
isinstancelist
endpt_rtol
endpt_atollen)r   r.   r/   r0   r1   r2   r3   r   r%   r&   r6   r7   r   r   r   r   G   s*    


z_CDFData.__init__c                 G   s   | j rx| j| }t|r tjS t|}||| j< t| j	( | j
t| }t|j}W d    q1 sl0    Y  n`t| j	$ | j
| }t|j}W d    n1 s0    Y  t|}||| j< | jt| }|S r$   )r2   r.   r   isnannanr5   r0   r   workdpsr3   r/   tupler
   real)r   argsresr   r   r   idmapd   s     


*
(
z_CDFData.idmapc                 C   s   | j d u r| jd u rd S g }t| j | j| jD ]Z\}}}|d u rV|d u rV|d  q.n|d u rdd}n|d u rpd}|t|j|j|| q.|S )N        )r6   r7   zipr1   appendr#   r   r   )r   filtersr%   r&   specr   r   r   get_param_filterx   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&   Z
vectorizedparam_filter)r	   r1   r   rF   r<   rangeshaper   Zhstackr0   Zreshaper   r@   r%   r&   check)r   r>   rI   rG   rH   r   r   r   rL      s    
*
z_CDFData.check)Tr,   r-   NNNN)r   r    r!   r   r@   rF   rL   r   r   r   r   r+   F   s      
r+   c                  O   s   t | i |}|  d S r$   )r+   rL   )r   kwdr   r   r   _assert_inverts   s    rO   c                 C   sp   t | t |t |  } }}| dkr4t dS | |krFt dS t jd|dd}t j||  | d |ddS )Nr   r   T)exactZx2regularized)r   mpfZfsubbetainc)kr   pZonempr   r   r   _binomial_cdf   s    "

rW   c                 C   sf   |dk rt dS t | t |t |  } }}| | | | |  }t j| d |d |dd}|S )Nr      TrQ   )r   rS   rT   )dfnZdfdr)   Zubr?   r   r   r   _f_cdf   s    
"rZ   c                 C   s   |d u rt jj}t | t | t | } }t dd| d  d|d  |  }||t d| d   9 }|t t j|  t d|    }d| W  d    S 1 s0    Y  d S )N      ?r   g      ?rX   )	r   mpr3   r;   rS   Zhyp2f1gammasqrtpi)dftr3   Zfacr   r   r   _student_t_cdf   s    ""rb   c                 C   sR   t |d d t ||  }|t | |  d | | |d d   d 9 }|S )NrX   r      r[   )r   Zbesselir^   exp)ra   r`   ncr?   r   r   r   _noncentral_chi_pdf   s    0rf   c                    s~   |d u rt jj}t | t  t   }  t |. t  fddd| g}|W  d    S 1 sp0    Y  d S )Nc                    s   t |  S r$   )rf   )ra   r`   re   r   r   <lambda>       z%_noncentral_chi_cdf.<locals>.<lambda>r   )r   r\   r3   rS   r;   Zquad)r)   r`   re   r3   r?   r   rg   r   _noncentral_chi_cdf   s    "rj   c                 C   s   | | d|  |  | S )Nr   r   )rV   lmbdar   r   r   _tukey_lmbda_quantile   s    rl   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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 ),
TestCDFlibF)runc                 C   s(   t tjtdt tddt gdd d S )Nr   r     -C6?r%   )rO   spbdtrikrW   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   ro   rp   )NNư>r%   r7   )rO   rr   bdtrinrW   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   s   t j| ||ddS NTrQ   r   rT   r   r   r)   r   r   r   rh      ri   z)TestCDFlib.test_btdtria.<locals>.<lambda>r         Y@Finclusive_ar   r~   inclusive_bru   rq   )rO   rr   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   s   t j| ||ddS ry   rz   r{   r   r   r   rh      ri   z)TestCDFlib.test_btdtrib.<locals>.<lambda>r   r   r|   Fr}   r   Hz>)NgC]r2<V瞯<rv   )rO   rr   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   rq   )rO   rr   fdtridfdrZ   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   s   t j|| | ddS NTr   rR   r   Zgammaincr{   r   r   r   rh      ri   z(TestCDFlib.test_gdtria.<locals>.<lambda>r        @@Fr}   g     @r   Nr   绽|=rv   )rO   rr   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   s   t j|| | ddS r   r   r{   r   r   r   rh     ri   z(TestCDFlib.test_gdtrib.<locals>.<lambda>r   r   r|   Fr}   r   h㈵>rq   )rO   rr   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   s   t j|| | ddS r   r   r{   r   r   r   rh     ri   z(TestCDFlib.test_gdtrix.<locals>.<lambda>rX   r   r   Fr}   r   r   rv   )rO   rr   gdtrixr   r   r   r   r   r   test_gdtrix
  s    zTestCDFlib.test_gdtrixc                 C   s(   t tjttddtdtjgdd d S )Nr   r   r   r   rq   )r   rr   stdtrrb   r   r   r   infr   r   r   r   
test_stdtr  s
    zTestCDFlib.test_stdtrc                 C   s    t tjtdt t gdd d S )Nr   r   rq   )rO   rr   stdtridfrb   r   r   r   r   r   r   test_stdtridf  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   rv   )rO   rr   stdtritrb   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 )NrX   Tr   r   )r   r)   r   r   r   rh   *  ri   z)TestCDFlib.test_chdtriv.<locals>.<lambda>r   r   r   rp   rq   )rO   rr   chdtrivr   r   r   r   r   r   test_chdtriv'  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}   ro   rp   r   r   r%   r&   )rO   rr   	chndtridfrj   r   r   r   r   r   r   test_chndtridf-  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 )NrX   r   r   Fr}   r   ro   rp   r   r   )rO   rr   	chndtrincrj   r   r   r   r   r   r   r   test_chndtrinc7  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}   ro   rp   r   )ru   NN)r   r%   r&   r7   )rO   rr   chndtrixrj   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   )rr   tklmbdar)   r   r   r   rh   M  ri   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>c                    s    t |     S r$   )r   rd   r   Zoner   r   rh   N  ri   r   rq   )r   rS   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&.>)r2   r%   r7   rO   rr   r   rl   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   )r2   r%   r   r   r   r   r   test_tklmbda_pos_shapeY  s    z!TestCDFlib.test_tklmbda_pos_shaperk   )r[         ?g       @c                 C   s(   d| }t t| |g|ddg d S )Nr   rA   r   )r   rr   r   )r   rk   boundr   r   r   test_tklmbda_lmbda1b  s    zTestCDFlib.test_tklmbda_lmbda1N)r   r    r!   pytestmarkZxfailrt   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zparametrizer   r   r   r   r   rm      s4   
	


	
	
rm   c                  C   s~   g d} t jd | D ]`\}}tt|}dd t j|D }tj| D ],}|| }tdd |D rJt	|t j
 qJqJqd S )N))r   r   )r   r   )rs   r   )rw   r   )r   rX   )Zchndtrr   )r   r   )r   r   )r   r   )r   r   )Zncfdtrrc   )Zncfdtrirc   )Z
ncfdtridfnrc   )Z
ncfdtridfdrc   )Z	ncfdtrincrc   )r   r   )r   r   )r   r   )Znbdtrikr   )Znbdtrinr   )Znrdtrimnr   )Znrdtrisdr   )ZpdtrikrX   )r   rX   )r   rX   )r   rX   )Znctdtrr   )Znctdtritr   )Z	nctdtridfr   )Z	nctdtrincr   )r   rX   r   c                 S   s$   g | ]}t |tjtjtj fqS r   )floatr   r:   r   .0r)   r   r   r   
<listcomp>  ri   z"test_nonfinite.<locals>.<listcomp>c                 s   s   | ]}t |V  qd S r$   )r   r9   r   r   r   r   	<genexpr>  ri   z!test_nonfinite.<locals>.<genexpr>)r   randomseedgetattrrr   Zrand	itertoolsproductanyr   r:   )funcsfuncZnumargsZargs_choicesr>   r?   r   r   r   test_nonfiniteh  s    "

r   c                  C   s.   t ddtdd } g d}t| | d S )Ng!?rX   g      4@ru   )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@)rr   r   r   Zaranger   )r?   Zres_expr   r   r   test_chndtrix_gh2158  s    r   )N)N)&r"   r   numpyr   Znumpy.testingr   r   r   Zscipy.specialZspecialrr   Zscipy.special._testutilsr   r   r   Zscipy.special._mptestutilsr   r   r	   r
   r   r   ImportErrorr   r#   r+   rO   rW   rZ   rb   rf   rj   rl   r   Zslowrm   r   r   r   r   r   r   <module>   s6   P	

	 7