o
    Ebm3                     @   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#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   A/usr/lib/python3/dist-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logspaceZ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                   @   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   r-   r.   r/   r0   r1   r2   r   r$   r%   r5   r6   r   r   r   r   G   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#   )r1   r-   r   isnannanr4   r/   r   workdpsr2   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 ],\}}}|d u r*|d u r*|d  q|d u r1d}n|d u r7d}|t|j|j|| q|S )Ng        )r5   r6   zipr0   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	   r0   r   rD   r;   rangeshaper   Zhstackr/   Zreshaper   r?   r$   r%   check)r   r=   rG   rE   rF   r   r   r   rJ      s   
*

z_CDFData.check)Tr+   r,   NNNN)r   r   r    r   r?   rD   rJ   r   r   r   r   r*   F   s    
r*   c                  O   s   t | i |}|  d S r#   )r*   rJ   )r   kwdr   r   r   _assert_inverts   s   rM   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Zx2regularized)r   mpfZfsubbetainc)kr   pZonempr   r   r   _binomial_cdf   s   "

rU   c                 C   sf   |dk r	t dS t | t |t |} }}| | | | |  }t j| d |d |dd}|S )Nr      TrO   )r   rQ   rR   )ZdfnZdfdr(   Zubr>   r   r   r   _f_cdf   s   
"rW   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   g      ?rV   )	r   mpr2   r:   rQ   Zhyp2f1ZgammasqrtZpi)dftr2   Zfacr   r   r   _student_t_cdf   s   ""$r]   c                 C   sR   t |d d t ||  }|t | |  d | | |d d   d 9 }|S )NrV   r      rX   )r   ZbesselirZ   exp)r\   r[   ncr>   r   r   r   _noncentral_chi_pdf   s   0ra   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#   )ra   )r\   r[   r`   r   r   <lambda>       z%_noncentral_chi_cdf.<locals>.<lambda>r   )r   rY   r2   rQ   r:   Zquad)r(   r[   r`   r2   r>   r   rb   r   _noncentral_chi_cdf   s   "$re   c                 C   s   | | d|  |  | S )Nr   r   )rT   Zlmbdar   r   r   _tukey_lmbda_quantile   s   rf   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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$   )rM   spbdtrikrU   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   ri   rj   )NNư>r$   r6   )rM   rl   bdtrinrU   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 NTrO   r   rR   r   r   r(   r   r   r   rc          z)TestCDFlib.test_btdtria.<locals>.<lambda>r         Y@Finclusive_ar   rz   inclusive_bro   rk   )rM   rl   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   rs   rt   ru   rv   r   r   r   rc      rw   z)TestCDFlib.test_btdtrib.<locals>.<lambda>r   r   rx   Fry   r{   Hz>)NgC]r2<V瞯<rp   )rM   rl   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   Fry   r   rk   )rM   rl   fdtridfdrW   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   rP   r   Zgammaincrv   r   r   r   rc          z(TestCDFlib.test_gdtria.<locals>.<lambda>r        @@Fry   g     @r   Nr   绽|=rp   )rM   rl   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   rv   r   r   r   rc     r   z(TestCDFlib.test_gdtrib.<locals>.<lambda>r   r   rx   Fry   r   h㈵>rk   )rM   rl   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   rv   r   r   r   rc     r   z(TestCDFlib.test_gdtrix.<locals>.<lambda>rV   r   r   Fry   r   r   rp   )rM   rl   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   rk   )r   rl   stdtrr]   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   rk   )rM   rl   stdtridfr]   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   rp   )rM   rl   stdtritr]   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 )NrV   Tr   r   )r   r(   r   r   r   rc   *  s    z)TestCDFlib.test_chdtriv.<locals>.<lambda>r   r   r   rj   rk   )rM   rl   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   Fry   ri   rj   r   r   r$   r%   )rM   rl   	chndtridfre   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 )NrV   r   r   Fry   r   ri   rj   r   r   )rM   rl   	chndtrincre   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   Fry   ri   rj   r   )ro   NN)r   r$   r%   r6   )rM   rl   chndtrixre   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   )rl   tklmbdar(   r   r   r   rc   M  rd   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>c                    s    t |     S r#   )r   r_   r   Zoner   r   rc   N  r   r   rk   )r   rQ   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&.>)r1   r$   r6   rM   rl   r   rf   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   Fry   r   )r1   r$   r   r   r   r   r   test_tklmbda_pos_shapeY  s   
z!TestCDFlib.test_tklmbda_pos_shapeN)r   r   r    pytestmarkZxfailrn   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rg      s2    
	


	
	rg   c                  C   s   g d} t jd | D ]1\}}tt|}dd t j|D }tj| D ]}|| }tdd |D r;t	|t j
 q%	 q%qd S )N))r}   r   )r   r   )rm   r   )rq   r   )r   rV   )Zchndtrr   )r   r   )r   r   )r   r   )r   r   )Zncfdtrr^   )Zncfdtrir^   )Z
ncfdtridfnr^   )Z
ncfdtridfdr^   )Z	ncfdtrincr^   )r   r   )r   r   )r   r   )Znbdtrikr   )Znbdtrinr   )Znrdtrimnr   )Znrdtrisdr   )ZpdtrikrV   )r   rV   )r   rV   )r   rV   )Znctdtrr   )Znctdtritr   )Z	nctdtridfr   )Z	nctdtrincr   )r   rV   r   c                 S   s$   g | ]}t |tjtjtj fqS r   )floatr   r9   r   .0r(   r   r   r   
<listcomp>  s   $ z"test_nonfinite.<locals>.<listcomp>c                 s   s    | ]}t |V  qd S r#   )r   r8   r   r   r   r   	<genexpr>  s    z!test_nonfinite.<locals>.<genexpr>)r   ZrandomZseedgetattrrl   Zrand	itertoolsproductanyr   r9   )ZfuncsfuncZnumargsZargs_choicesr=   r>   r   r   r   test_nonfiniteb  s   "

r   c                  C   s.   t ddtdd } g d}t| | d S )Ng!?rV   g      4@ro   )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@)rl   r   r   Zaranger   )r>   Zres_expr   r   r   test_chndtrix_gh2158  s   r   r#   )&r!   r   Znumpyr   Znumpy.testingr   r   r   Zscipy.specialZspecialrl   Zscipy.special._testutilsr   r   r   Zscipy.special._mptestutilsr   r   r	   r
   r   r   ImportErrorr   r"   r*   rM   rU   rW   r]   ra   re   rf   r   Zslowrg   r   r   r   r   r   r   <module>   s:    P
	
	 7