U
    Q»{jm3  ã                   @   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k
r�   edƒZY nX 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   ú^/var/www/html/bwave/python/venv/lib/python3.8/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   é   iâÿÿÿg333333Ó?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 k	s^|d k	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.   r/   r0   r1   r2   r3   r   r%   r&   r6   r7   r   r   r   r   G   s*    


z_CDFData.__init__c              	   G   s´   | j rd| j|Ž }t |¡r tjS t|ƒ}||| j< t | j	¡� | j
t|ƒŽ }t|jƒ}W 5 Q R X nLt | j	¡� | j
|Ž }t|jƒ}W 5 Q R X 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 kr| jd krd S g }t| j | j| jƒD ]Z\}}}|d krV|d krV| d ¡ q.n|d krdd}n|d krpd}| t|j|j||ƒ¡ q.|S )Ng        )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   rE   r<   ÚrangeÚshaper   Zhstackr0   Zreshaper   r@   r%   r&   Úcheck)r   r>   rH   rF   rG   r   r   r   rK   ‰   s    
*   ýz_CDFData.check)Tr,   r-   NNNN)r   r    r!   r   r@   rE   rK   r   r   r   r   r+   F   s              þ
r+   c                  O   s   t | |Ž}| ¡  d S r$   )r+   rK   )r   ÚkwÚdr   r   r   Ú_assert_inverts–   s    
rN   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    "

rV   c                 C   sf   |dk rt  d¡S t  | ¡t  |¡t  |¡  } }}| | | | |  }t j| d |d |dd�}|S )Nr   é   TrP   )r   rR   rS   )ÚdfnZdfdr)   Zubr?   r   r   r   Ú_f_cdf¦   s    
"rY   c              
   C   s®   |d krt jj}t  |¡�Š t  | ¡t  |¡ } }t  dd| d  d|d  |  ¡}||t  d| d  ¡ 9 }|t  t j|  ¡t  d|  ¡  }d| W  5 Q R £ S Q R X d S )Nç      à?r   g      ø?rW   )	r   Úmpr3   r;   rR   Zhyp2f1ÚgammaÚsqrtÚpi)ÚdfÚtr3   Zfacr   r   r   Ú_student_t_cdf¯   s    ""ra   c                 C   sR   t  |d d t  ||  ¡¡}|t  | |  d ¡| | |d d   d 9 }|S )NrW   r   é   rZ   )r   Zbesselir]   Úexp)r`   r_   Úncr?   r   r   r   Ú_noncentral_chi_pdfº   s    0re   c              
      sr   |d krt jj}t  | ¡t  ˆ ¡t  ˆ¡  } ‰ ‰t  |¡�, t  ‡ ‡fdd„d| g¡}|W  5 Q R £ S Q R X d S )Nc                    s   t | ˆ ˆƒS r$   )re   )r`   ©r_   rd   r   r   Ú<lambda>Å   ó    z%_noncentral_chi_cdf.<locals>.<lambda>r   )r   r[   r3   rR   r;   Zquad)r)   r_   rd   r3   r?   r   rf   r   Ú_noncentral_chi_cdfÀ   s    "ri   c                 C   s   | | d|  |  | S )Nr   r   )rU   Zlmbdar   r   r   Ú_tukey_lmbda_quantileÉ   s    rj   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%   )rN   ÚspÚbdtrikrV   r   r   r   r   r   r   Útest_bdtrikÒ   s     üzTestCDFlib.test_bdtrikc              	   C   s0   t tjtdtddƒtƒ tƒ gdd d dgd� d S )Nr   rm   rn   ç�íµ ÷Æ°>©r%   r7   )rN   rp   ÚbdtrinrV   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 ©NTrP   ©r   rS   ©r   r   r)   r   r   r   rg   ä   rh   z)TestCDFlib.test_btdtria.<locals>.<lambda>r   ç      Y@F©Úinclusive_ar   ©r|   Úinclusive_brs   ro   )rN   rp   Úbtdtriar   r   r   r   r   r   Útest_btdtriaá   s     ÿûzTestCDFlib.test_btdtriac                 C   sB   t tjdd„ dtdddd�tƒ tddddd�gd	d d
dgd� d S )Nc                 S   s   t j| ||dd�S rw   rx   ry   r   r   r   rg   í   rh   z)TestCDFlib.test_btdtrib.<locals>.<lambda>r   r   rz   Fr{   r}   çH¯¼šò×z>g¬CÒÑ]r2<çVçž¯Ò<rt   )rN   rp   Ú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�   ro   )rN   rp   ÚfdtridfdrY   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d dd	gd
� d S )Nc                 S   s   t j|| | dd�S ©NT©r   rQ   ©r   Zgammaincry   r   r   r   rg   ý   rh   z(TestCDFlib.test_gdtria.<locals>.<lambda>r   ç     @�@Fr{   g     ˆÃ@r�   ç»½×Ùß|Û=rt   )rN   rp   Ú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Š   ry   r   r   r   rg     rh   z(TestCDFlib.test_gdtrib.<locals>.<lambda>r   r   rz   Fr{   r‹   çñhãˆµøä>ro   )rN   rp   Ú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d dd	gd
� d S )Nc                 S   s   t j|| | dd�S rˆ   rŠ   ry   r   r   r   rg     rh   z(TestCDFlib.test_gdtrix.<locals>.<lambda>rW   r   r‹   Fr{   r�   rŒ   rt   )rN   rp   Ú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�   ro   )r   rp   Ústdtrra   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�   ro   )rN   rp   Ústdtridfra   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Œ   rt   )rN   rp   Ústdtritra   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 )NrW   Tr‰   rŠ   )r   r)   r   r   r   rg   *  rh   z)TestCDFlib.test_chdtriv.<locals>.<lambda>r   r   r…   rn   ro   )rN   rp   Ú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{   rm   rn   r‚   ©r   r%   r&   )rN   rp   Ú	chndtridfri   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 )NrW   r   r…   Fr{   r   rm   rn   r‚   r�   )rN   rp   Ú	chndtrincri   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d	d d gd
� d S )Nr   r   r…   Fr{   rm   rn   r‚   rs   )r   r%   r&   r7   )rN   rp   Úchndtrixri   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   )rp   Útklmbda©r)   r   r   r   rg   M  rh   z4TestCDFlib.test_tklmbda_zero_shape.<locals>.<lambda>c                    s   ˆ t  |  ¡ˆ   S r$   )r   rc   r¥   ©Úoner   r   rg   N  rh   r�   ro   )r   rR   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   içÿÿÿF)r~   r�   g•Ö&è.>)r2   r%   r7   ©rN   rp   r¤   rj   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_shapeN)r   r    r!   ÚpytestÚmarkZxfailrr   rv   r€   r„   r‡   rŽ   r‘   r“   r–   r˜   rš   rœ   rŸ   r¡   r£   r¨   rª   r«   r   r   r   r   rk   Î   s0   
	


	
	rk   c                  C   s¸   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g} t j d ¡ | D ]`\}}tt|ƒ}d!d"„ t j |¡D ƒ}tj|Ž D ],}||Ž }td#d$„ |D ƒƒr„t	|t j
ƒ q„q„qRd S )%N)r   r   )rƒ   r   )rq   r   )ru   r   )r›   rW   )Zchndtrr   )r¢   r   )rž   r   )r    r   )r†   r   )Zncfdtrrb   )Zncfdtrirb   )Z
ncfdtridfnrb   )Z
ncfdtridfdrb   )Z	ncfdtrincrb   )r’   r   )r�   r   )r�   r   )Znbdtrikr   )Znbdtrinr   )Znrdtrimnr   )Znrdtrisdr   )ZpdtrikrW   )r”   rW   )r™   rW   )r—   rW   )Znctdtrr   )Znctdtritr   )Z	nctdtridfr   )Z	nctdtrincr   )r¤   rW   r   c                 S   s$   g | ]}t |ƒtjtjtj f‘qS r   )Úfloatr   r:   r•   ©Ú.0r)   r   r   r   Ú
<listcomp>Š  s     z"test_nonfinite.<locals>.<listcomp>c                 s   s   | ]}t  |¡V  qd S r$   )r   r9   r¯   r   r   r   Ú	<genexpr>�  s     z!test_nonfinite.<locals>.<genexpr>)r   ÚrandomÚseedÚgetattrrp   ZrandÚ	itertoolsÚproductÚanyr   r:   )ÚfuncsÚfuncZnumargsZargs_choicesr>   r?   r   r   r   Útest_nonfiniteb  sV    á"

ÿr»   c                  C   sR   t  ddt d¡d ¡} ddddd	d
ddddddddddddddg}t| |ƒ d S )Ngé!çýÿï?rW   g      4@rs   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@)rp   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.specialÚspecialrp   Zscipy.special._testutilsr   r   r   Zscipy.special._mptestutilsr   r   r	   r
   r   r   ÚImportErrorr   r#   r+   rN   rV   rY   ra   re   ri   rj   r­   Zslowrk   r»   r¼   r   r   r   r   Ú<module>   s6   P	

	 7