a
    ˆù»j0F  ã                   @   sz  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d0dd„Zdd„ Zd1d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'ej! (d'¡d(d)„ ƒZ)d*d+„ Z*d,d-„ Z+d.d/„ Z,dS )2zã
Test cdflib functions versus mpmath, if available.

The following functions still need tests:

- ncfdtr
- ncfdtri
- ncfdtridfn
- ncfdtridfd
- ncfdtrinc
- nbdtrik
- nbdtrin
- 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   úEE:\soccer\ml_env\Lib\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   é   iâÿÿÿç333333Ó?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   9   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$   8   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r¨t	|
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/   r0   r1   r2   r3   r4   r   r&   r'   r7   r8   r   r   r   r   F   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   ƒ qØ1 sl0    Y  n`t | j	¡�$ | j
|Ž }t|jƒ}W d   ƒ n1 s®0    Y  t|ƒ}||| j< | jt|ƒŽ }|S r%   )r3   r/   r   ÚisnanÚnanr6   r1   r   Úworkdpsr4   r0   Útupler
   Úreal)r   ÚargsÚresr   r   r   Úidmapc   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ç        )r7   r8   Úzipr2   Úappendr$   r   r   )r   Úfiltersr&   r'   Úspecr   r   r   Úget_param_filterw   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	   r2   r   rG   r=   ÚrangeÚshaper   Zhstackr1   Zreshaper   rA   r&   r'   Úcheck)r   r?   rJ   rH   rI   r   r   r   rM   ˆ   s    
*
ýz_CDFData.check)Tr-   r.   NNNN)r    r!   r"   r   rA   rG   rM   r   r   r   r   r,   E   s      þ
r,   c                  O   s   t | i |¤Ž}| ¡  d S r%   )r,   rM   )r   ÚkwÚdr   r   r   Ú_assert_inverts•   s    rP   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    "

rX   c                 C   sf   |dk rt  d¡S t  | ¡t  |¡t  |¡  } }}| | | | |  }t j| d |d |dd�}|S )Nr   é   TrR   )r   rT   rU   )ÚdfnZdfdr*   Zubr@   r   r   r   Ú_f_cdf¥   s    
"r[   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 s¬0    Y  d S )Nç      à?r   ç      ø?rY   )	r   Úmpr4   r<   rT   Zhyp2f1ÚgammaÚsqrtÚpi)ÚdfÚtr4   Zfacr   r   r   Ú_student_t_cdf®   s    ""rd   c                 C   sR   t  |d d t  ||  ¡¡}|t  | |  d ¡| | |d d   d 9 }|S )NrY   r   é   r\   )r   Zbesselir`   Úexp)rc   rb   Úncr@   r   r   r   Ú_noncentral_chi_pdf¹   s    0rh   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%   )rh   )rc   ©rb   rg   r   r   Ú<lambda>Ä   ó    z%_noncentral_chi_cdf.<locals>.<lambda>r   )r   r^   r4   rT   r<   Zquad)r*   rb   rg   r4   r@   r   ri   r   Ú_noncentral_chi_cdf¿   s    "rl   c                 C   s   | | d|  |  | S )Nr   r   )rW   Úlmbdar   r   r   Ú_tukey_lmbda_quantileÈ   s    rn   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&   )rP   ÚspÚbdtrikrX   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   rq   rr   )NNç�íµ ÷Æ°>©r&   r8   )rP   rt   ÚbdtrinrX   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 ©NTrR   ©r   rU   ©r   r   r*   r   r   r   rj   ã   rk   z)TestCDFlib.test_btdtria.<locals>.<lambda>r   ç      Y@F©Úinclusive_ar   ©r€   Úinclusive_brw   rs   )rP   rt   Ú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 r{   r|   r}   r   r   r   rj   ì   rk   z)TestCDFlib.test_btdtrib.<locals>.<lambda>r   r   r~   Fr   r�   çH¯¼šò×z>)Ng¬CÒÑ]r2<çVçž¯Ò<rx   )rP   rt   Ú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…   rs   )rP   rt   Úfdtridfdr[   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   rS   ©r   Zgammaincr}   r   r   r   rj   ÿ   rk   z(TestCDFlib.test_gdtria.<locals>.<lambda>r   ç     @�@Fr   g     ˆÃ@r…   ©Nr…   ç»½×Ùß|Û=rx   )rP   rt   Ú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   rj   
  rk   z(TestCDFlib.test_gdtrib.<locals>.<lambda>r   r   r~   Fr   r�   çñhãˆµøä>rs   )rP   rt   Ú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   rj     rk   z(TestCDFlib.test_gdtrix.<locals>.<lambda>rY   r   r�   Fr   r…   r�   rx   )rP   rt   Ú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   s   t  || |¡S r%   ©r   Zncdf©r*   ÚyÚzr   r   r   rj   #  rk   z*TestCDFlib.test_nrdtrimn.<locals>.<lambda>r   çš™™™™™¹?Fr�   g    _ Âg    _ Br”   rs   )rP   rt   Ú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   s   t  || |¡S r%   r™   rš   r   r   r   rj   -  rk   z*TestCDFlib.test_nrdtrisd.<locals>.<lambda>r   é
   Fr�   g}Ã”%­I²Tr”   rs   )rP   rt   Ú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…   rs   )r   rt   Ústdtrrd   r   r   r   rŸ   r   r   r   r   Ú
test_stdtr4  s
    ýzTestCDFlib.test_stdtrc                 C   s    t tjtdtƒ tƒ gdd� d S )Nr   r…   rs   )rP   rt   Ústdtridfrd   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‘   rx   )rP   rt   Ústdtritrd   r   r   r   r   r   r   Útest_stdtritB  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 )NrY   Tr�   rŽ   )r   r*   r   r   r   rj   L  rk   z)TestCDFlib.test_chdtriv.<locals>.<lambda>r   r   r‰   rr   rs   )rP   rt   Úchdtrivr   r   r   r   r   r   Útest_chdtrivI  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   rq   rr   r†   ©r   r&   r'   )rP   rt   Ú	chndtridfrl   r   r   r   r   r   r   Útest_chndtridfO  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 )NrY   r   r‰   Fr   r   rq   rr   r†   r¬   )rP   rt   Ú	chndtrincrl   r   r   r   r   r   r   r   Útest_chndtrincY  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   rq   rr   r†   )rw   NN)r   r&   r'   r8   )rP   rt   Úchndtrixrl   r   r   r   r   r   r   r   Útest_chndtrixb  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   )rt   Útklmbda©r*   r   r   r   rj   o  rk   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>c                    s   ˆ t  |  ¡ˆ   S r%   )r   rf   r´   ©Úoner   r   rj   p  rk   r…   rs   )r   rT   r   r   r   r   rµ   r   Útest_tklmbda_zero_shapek  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   içÿÿÿF)r‚   r”   g•Ö&è.>)r3   r&   r8   ©rP   rt   r³   rn   r   r   r   r   r   r   Útest_tklmbda_neg_shapes  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”   )r3   r&   r¸   r   r   r   r   Útest_tklmbda_pos_shape{  s    üz!TestCDFlib.test_tklmbda_pos_shaperm   )r\   ç      ð?g       @c                 C   s(   d| }t t | |g|¡ddgƒ d S )Nr   rB   r»   )r   rt   r³   )r   rm   Úboundr   r   r   Útest_tklmbda_lmbda1„  s    zTestCDFlib.test_tklmbda_lmbda1N)r    r!   r"   ÚpytestÚmarkZxfailrv   rz   r„   rˆ   r‹   r“   r–   r˜   r    r£   r¥   r§   r©   r«   r®   r°   r²   r·   r¹   rº   Úparametrizer½   r   r   r   r   ro   Í   s8   







	
	
ro   ))rƒ   r   )r‡   r   )ru   r   )ry   r   )rª   rY   )Zchndtrr   )r±   r   )r­   r   )r¯   r   )rŠ   r   )Zncfdtrre   )Zncfdtrire   )Z
ncfdtridfnre   )Z
ncfdtridfdre   )Z	ncfdtrincre   )r—   r   )r•   r   )r’   r   )Únbdtrikr   )Znbdtrinr   )rž   r   )r¢   r   )ZpdtrikrY   )r¤   rY   )r¨   rY   )r¦   rY   )Únctdtrr   )Znctdtritr   )Z	nctdtridfr   )Ú	nctdtrincr   )r³   rY   zfunc,numargsc                 C   s   g | ]}|d  ‘qS )r   r   ©Ú.0r*   r   r   r   Ú
<listcomp>­  rk   rÆ   )Zidsc                 C   sf   t j d¡}tt| ƒ} dd„ | |¡D ƒ}tj|Ž D ],}| |Ž }tdd„ |D ƒƒr4t|t j	ƒ q4q4d S )Nl   7'}?J-0 c                 S   s$   g | ]}t |ƒtjtjtj f‘qS r   )Úfloatr   r;   rŸ   rÄ   r   r   r   rÆ   ²  rk   z"test_nonfinite.<locals>.<listcomp>c                 s   s   | ]}t  |¡V  qd S r%   )r   r:   rÄ   r   r   r   Ú	<genexpr>·  rk   z!test_nonfinite.<locals>.<genexpr>)
r   ÚrandomZdefault_rngÚgetattrrt   Ú	itertoolsÚproductÚanyr   r;   )ÚfuncZnumargsÚrngZargs_choicesr?   r@   r   r   r   Útest_nonfinite­  s    
rÐ   c                  C   s.   t  ddt d¡d ¡} g d¢}t| |ƒ d S )Ngé!çýÿï?rY   g      4@rw   )gyY�‹¡;@gŽ¾î A@g‹Ê¾ªüC@g‡�-â®ðE@g�×-o­G@gN—„•CEI@gŸ0¹_{ÃJ@gY¨×ÉÜ-L@gjŸ­ðrˆM@gZÇ§9ÖN@g-¤]˜fP@gmj€#©P@gÓgè±ÃAQ@glÖ@€ÝÖQ@gÕn¦dÎhR@g$®Ü‚ê÷R@g@ÏFTx„S@gìÄ“³T@g†]±gÏ–T@gc$øU@)rt   r±   r   Zaranger   )r@   Zres_expr   r   r   Útest_chndtrix_gh2158À  s    rÑ   z&32bit fails due to algorithm thresholdc                  C   sf   g d¢} g d¢}g d¢}g d¢}g }t  | ||¡D ]\}}}|t |||¡g7 }q2t||ddd� d S )N)ç\�Âõ(\ï?çš™™™™™#@éb   éÔ  )gffffffÀgR¸…ëQØ?gffffff@é&   )çú~j¼t“X?ç333333Ã?r]   é   )@ç¤ŽpFhÿï?rÚ   gM/qáìÿï?g™eaõýÿï?gÔëŽù�Ö?gÌx$—pÙ?g0Øü˜Šðæ?gkeÅ§eæî?çë‰+î1÷?rÛ   gà«Éa¢?gip#˜té?rB   rB   rB   g€…!È¨mˆ?rÚ   rÚ   g‘3Ÿvÿÿï?r»   gÐ•��Ö?gÌ:·-¡Ú?g½æy�0 ë?g¹£CÚÿÿï?rÛ   rÛ   g@;ÇÊš‹?gNŽ¾Åþï?rB   rB   rB   g   ìó¦>rÚ   rÚ   gÕÂ$Ûÿÿï?r»   g\+aYÒ�Ö?g0¹k„u+Ú?g2{q˜ºë?r»   rÛ   rÛ   g€@L7d‚†?r»   rB   rB   rB   rB   rÚ   rÚ   g©æËàÿÿï?r»   gŠå³×�Ö?gÚ™¾—’-Ú?g²_œ"Êë?r»   rÛ   rÛ   g f³u†?r»   rB   rB   rB   rB   rw   rB   ©r&   r'   )rË   rÌ   rt   rÂ   r   )ÚdfarrZpnoncarrÚtarrZresarrZactarrrb   rW   rc   r   r   r   Útest_nctdtr_gh19896Ñ  s    rß   c                  C   sB   g d¢} g d¢}g d¢}g d¢}t  | ||¡}t||ddd� d S )N)
çü©ñÒMbP?rÒ   rÓ   rÔ   rÕ   i'  rÔ   rÓ   rÒ   rà   )
rà   r�   r   çš™™™™™é?ç+‡ÙÎ÷ï?rà   r�   r   rá   râ   )
r×   rØ   r]   rÙ   é,  r×   rØ   r]   rÙ   rã   )
ç�K ·Ë¸@gtúIŽö?çx9ô" @g.$Bt+@gÜO, oq@rä   gZcÖ^æö?rå   g„… ¬²³@gÂ¥j²Àg•dyáý•=rB   rÜ   )rt   rÃ   r   )rÝ   ZparrrÞ   Z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¡¡¡s0J ‚t  t  t t j g d¢¡¡¡sTJ ‚d S )Nç      ð¿rB   r»   )rB   g      Ð?r\   g      è?r»   )r   Úallr:   rt   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|¡¡¡sœJ ‚d S )	Ng      $Àrè   rB   r”   r\   g§èH.ÿï?r»   g      $@)
r   Úarrayr;   rŸ   Z
atleast_2dré   r:   rt   ru   rÁ   )r›   rW   r   r   r   Útest_bdtrik_nbdtrik_inf  s     ÿÿ rì   )N)N)-r#   rË   Únumpyr   Znumpy.testingr   r   r¾   Zscipy.specialZspecialrt   Zscipy.special._testutilsr   r   r   Zscipy.special._mptestutilsr   r   r	   r
   r   r   ÚImportErrorr   r$   r,   rP   rX   r[   rd   rh   rl   rn   r¿   Zslowro   ÚfuncsrÀ   rÐ   rÑ   Zxfail_on_32bitrß   rç   rê   rì   r   r   r   r   Ú<module>   sD   P	

	 <#


"