U
    »mœdbN  ã                   @   sØ  d dl Z d dlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZ d dlZd dlmZmZmZmZ d dlm
Z d dlmZ d dlmZ e j ddd	d
g¡dd„ ƒZe j dddg¡dd„ ƒZdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%dd„ Z&dd „ Z'd!d"„ Z(d#d$„ Z)d%d&„ Z*d'd(„ Z+d)d*„ Z,d+d,„ Z-d-d.„ Z.e j d/d0d1d2d3d4d5d6d7d8g	¡d9d:„ ƒZ/d;d<„ Z0d=d>„ Z1d?d@„ Z2e j 3dA¡dBdC„ ƒZ4G dDdE„ dEƒZ5G dFdG„ dGƒZ6e j dHdIdJdKgdLd dMgg¡dNdO„ ƒZ7dPdQ„ Z8dS )Ré    N)Ú	betabinomÚ	hypergeomÚ
nhypergeomÚ	bernoulliÚ	boltzmannÚskellamÚzipfÚzipfianÚbinomÚnbinomÚnchypergeom_fisherÚnchypergeom_walleniusÚrandint)Úassert_almost_equalÚassert_equalÚassert_allcloseÚsuppress_warnings)r
   )Úroot_scalar)Úquadzk, M, n, N, expected, rtol)é   é
   é   é   gÏó<Ïó<ï?çVçž¯Ò<)ék   é'  é¸  é×   gŒâÙÿÿÿï?r   )r   r   r   r   gŸåèS©;ç»½×Ùß|Ë=c                 C   s"   t  | |||¡}t|||d� d S ©N©Úrtol)r   Úcdfr   ©ÚkÚMÚnÚNÚexpectedr!   Úp© r*   ú_/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_discrete_distns.pyÚtest_hypergeom_cdf   s    r,   )é   r   r   r   gäûòÿÿÿï?r   )é}   r   r   r   g«™Çö!˜:<r   c                 C   s"   t  | |||¡}t|||d� d S r   )r   Úsfr   r#   r*   r*   r+   Útest_hypergeom_sf   s    r0   c            
      C   sÌ   d} d}d}d}t  | |||¡}t  ||  ||| |¡}t  ||  |||| ¡}t  | |||¡}t||dd� t||dd� t||dd� d} d}d}d}t  | |||¡}t | || ¡}	t||	dd� d S )Nr   é2   r   é   )Údecimalé   é   )r   Zlogpmfr   r   )
r$   r'   ÚKr&   Zlogpmf1Zlogpmf2Zlogpmf3Zlogpmf4Zhypergeom_logpmfZbernoulli_logpmfr*   r*   r+   Útest_hypergeom_logpmf)   s$    r7   c                  C   sh   d\} }}d}t  || ||¡}t || ||| d ¡| | |d   | || d   }t||dd� d S )N)é-   é   é   é   r4   g»½×Ùß|Û=r    )r   Úpmfr   r   )r%   r&   Úrr$   ZNHGZHGr*   r*   r+   Útest_nhypergeom_pmfC   s
    
8r>   c                  C   sj   d} d}d}t  |d ¡}t || ||¡}t || ||¡}t|ddddgdd	� t|dd
ddgdd	� d S )Nr:   r   r   r4   g’$I’$I²?gÛ¶mÛ¶mË?g·mÛ¶mÛÖ?ç‚vIhÂ%<=r    ç’$I’$IÒ?g%I’$I’ä?ç      ð?)ÚnpÚaranger   r<   r"   r   )r%   r&   r=   Úsupportr<   r"   r*   r*   r+   Útest_nhypergeom_pmfcdfL   s    rE   c                  C   sV   d} d}d}t  ddddgddddgg| ||¡}t|ddddgddddggdd� d S )Nr   r   r   r4   é   r?   r    )r   r<   r   )r%   r&   r=   r<   r*   r*   r+   Útest_nhypergeom_r0X   s
    $rG   c                  C   s2   t jddddgdgdggdd�} | jdks.t‚d S )	Né   r5   r:   é	   r2   r9   ©r   r4   rF   r   ©Úsize)r   ÚrvsÚshapeÚAssertionError)Úxr*   r*   r+   Útest_nhypergeom_rvs_shapea   s     rQ   c                  C   sV   t j d¡ tjddddd�} t j d¡ t jjdd�}t |ddd¡}t| |ƒ d S )Nr   rH   r5   é   éd   rK   )rB   ÚrandomÚseedr   rM   ÚuniformÚppfr   )rP   r)   Úyr*   r*   r+   Útest_nhypergeom_accuracyi   s    rY   c                  C   s¢   t  dd¡} d}t | d|¡}| dk}t||ƒ t  d¡}d}t | ||¡}ddddd	d
ddg}t||dd� t | ||¡}ddddddddg}t||dd� d S )Néýÿÿÿr   r4   g°rh‘í|¿?r   rF   r   g’$I’$Iâ?r@   g’$I’$IÂ?r?   r    gÛ¶mÛ¶më?)rB   rC   r   r<   r   Úlogr   r"   )r$   r'   r)   r(   ZlamÚcr*   r*   r+   Útest_boltzmann_upper_boundt   s    

r]   c                  C   sJ   d} t  | d ¡}t| ddƒ |¡}t  d| d  | d ¡}t||ƒ d S )Né   r4   )rB   rC   r   r<   Úrepeatr   )r&   r$   r)   r(   r*   r*   r+   Útest_betabinom_a_and_b_unity‡   s
    r`   c                  C   sH   d} d}t  d¡}td| |ƒ |¡}t| | |  ƒ |¡}t||ƒ d S )Ngffffff@g)\�Âõ(ä?rF   r4   )rB   rC   r   r<   r   r   )ÚaÚbr$   r)   r(   r*   r*   r+   Útest_betabinom_bernoulli‘   s    
rc   c                  C   s$   d\} }}t tj| ||d�dƒ d S )N)gÍÌÌÌÌÌì?r   r4   ©Ú
confidencer&   r)   ©r   r   )r   r   Úinterval©Úalphar&   r)   r*   r*   r+   Útest_issue_10317›   s    
rj   c                  C   s$   d\} }}t tj| ||d�dƒ d S )N)gffffffî?r   r   rd   rf   )r   r
   rg   rh   r*   r*   r+   Útest_issue_11134    s    
rk   c                   C   sT   t j d¡ tt t j d¡dd¡dƒ tt ddd¡dƒ tt ddd¡dƒ d S )Nr   r   ç      à?éÿÿÿÿr4   )rB   rT   rU   r   r
   rW   Úrandr*   r*   r*   r+   Útest_issue_7406¥   s    ro   c                  C   sv   d} t jjddd�}d}t ||| ¡}t|dƒ t  ddd¡}t ||| ¡}t|dƒ d}t ||| ¡}t||ƒ d S )	Nr   rS   r   rK   rm   ç{®Gáz„?g®Gáz®ï?r4   )rB   rT   r   r
   rW   r   Úlinspace)r)   r&   rP   rW   r*   r*   r+   Útest_issue_5122®   s    

rr   c                   C   s"   t tdt dd¡ƒ d¡dƒ d S )Néè  rZ   iœÿÿÿrp   r   )r   r
   rB   ÚlogspacerW   r*   r*   r*   r+   Útest_issue_1603¿   s    ru   c                  C   s2   d} t  ddd¡}tt |d| | ¡ddd� d S )Nrl   r   é   r2   rF   rp   )Úatol)rB   rt   r   r
   r"   )r)   rP   r*   r*   r+   Útest_issue_5503Ã   s    rx   zx, n, p, cdf_desired)i,  rs   ç333333Ó?g’24û½à?)r   r   ry   gUž…7i(à?)i0u  i † ry   gÎ­Ì‘Çà?)ià“ i@B ry   g8@¨�
à?)iÀÆ- é€–˜ ry   gfø‡(Gà?)i€ÃÉé áõry   gÓwàtg à?)i�êÉr{   ry   g¥Vç}Öˆï?)ipœÉr{   ry   g¢°�ÿzÌ�?)i0 Ér{   ry   g¡éÉnåC:c                 C   s   t t | ||¡|ƒ d S ©N©r   r
   r"   )rP   r&   r)   Zcdf_desiredr*   r*   r+   Útest_issue_5503pt2É   s    r~   c                   C   s   t t ddd¡dƒ d S )NrF   l    J)£gê-�™—q=gB.¸Ã+ní?r}   r*   r*   r*   r+   Útest_issue_5503pt3Ø   s    r   c                   C   s   t t ddd¡dƒ d S )Néú   r1   gAAà?g_[CË®i³8)r   r   r/   r*   r*   r*   r+   Útest_issue_6682Ý   s    r�   c                  C   s$   d} d}d}t t || |¡dƒ d S )Nrs   rp   iä  ç        )r   r
   r<   )r&   r)   r$   r*   r*   r+   Ú%test_boost_divide_by_zero_issue_15101ä   s    rƒ   zignore::RuntimeWarningc               	   C   sH   ddddddddd	g	} t  d
| | ¡}dddddddddg	}t||ƒ d S )Nr4   r   rS   rs   iˆ  iº  iì  i‚  ip  r   gâ–>l¦ïä?g‹ëõz½oá?gVr�Ržsà?g°�ˆŠ$à?gVWêCWà?g4y�Bà?g4ö€.à?g.ÚLròà?gDáøÅêà?)r   r"   r   )Úmur"   Zcdf_expectedr*   r*   r+   Útest_skellam_gh11474ë   s        þr…   c                   @   sl   e Zd Zdd„ Zdd„ Zdd„ Zej d¡ e 	e 
dd	d
¡ej ddd
¡f¡jZej de¡dd„ ƒZdS )ÚTestZipfianc                 C   sŒ   d}d}t  dd¡}tt |||¡t ||¡ƒ tt |||¡t ||¡ƒ tt |||¡t ||¡ƒ ttj||dd�tj|dd�ƒ d S )Ng      @rz   r4   é   Úmsvk©Zmoments)	rB   rC   r   r	   r<   r   r"   r/   Ústats)Úselfra   r'   r$   r*   r*   r+   Útest_zipfian_asymptoticü   s    ÿz#TestZipfian.test_zipfian_asymptoticc                 C   s¬   d\}}d}t  d|d ¡}tt |||¡t |||¡dd� tt |||¡t |||¡dd� tt |||¡t |||¡dd� ttj||dd�tj||dd�dd� d S )N)gGœ¡úÿÿï?gÜ1¯  ð?é   r4   g�íµ ÷Æ >r    rˆ   r‰   )rB   rC   r   r	   r<   r"   r/   rŠ   )r‹   Zalt1Zagt1r'   r$   r*   r*   r+   Útest_zipfian_continuity  s     ÿÿÿ ÿz#TestZipfian.test_zipfian_continuityc              
   C   sÈ   t j d¡ t jjdddd�}t j d¡d d }t jjdddd�}ddd	d
ddddddg
}ddd	dddddddg
}tt |||¡dd … |dd … dd� tt |||¡dd … |dd … dd� d S )Nr   r4   r^   r   rK   rS   g÷Ä¹Ô¨Š€?gØ¡–Ÿkïþ>g	]x�[ï?gÿÇ™ûÊ>g	¤W¿³4?gÂ€
-ä?g˜$fhnåý=g9´’±[.Ä>g±`ý€Ö”Ø>gn²màì ?gÉaæñj¯ì?gZ›k=èþï?gõ…�óþÿï?g90×þï?gÉ¸˜UŽÿï?rA   gJ_9ïÿï?g2h2-ûÿï?gB0ýÅþï?ç�íµ ÷Æ°>r    g-Cëâ6
?)	rB   rT   rU   r   rn   r   r	   r<   r"   )r‹   r$   ra   r&   r<   r"   r*   r*   r+   Útest_zipfian_R  s*        þ
    ÿ(zTestZipfian.test_zipfian_Rr   éþÿÿÿr4   r   rF   é(   za, nc                    sò   t jdd„ ƒ‰ t j‡ fdd„ƒ}t  |d ¡}||||ƒ}t  |¡}t j||d�}t j|| d |d�}|d }	t j|| |	 d	 |d�}
t j|| |	 d
 |d�d	 }tt |||¡|ƒ tt |||¡|ƒ ttj	||dd�|||
|gƒ d S )Nc                 S   s   dt  d| d ¡|   ¡ S )z$Naive implementation of harmonic sumr4   )rB   rC   Úsum)r&   Úsr*   r*   r+   ÚHns6  s    z+TestZipfian.test_zipfian_naive.<locals>.Hnsc                    s.   | dk s| |krdS d| |  ˆ ||ƒ S dS )z#Naive implementation of zipfian pmfr4   r‚   Nr*   )r$   ra   r&   ©r•   r*   r+   Úpzip;  s    z,TestZipfian.test_zipfian_naive.<locals>.pzipr4   )ÚweightsrF   rl   r   r   Zmvskr‰   )
rB   Ú	vectorizerC   ZcumsumZaverager   r	   r<   r"   rŠ   )r‹   ra   r&   r—   r$   r<   r"   ÚmeanÚvarZstdZskewZkurtosisr*   r–   r+   Útest_zipfian_naive2  s"    


ÿzTestZipfian.test_zipfian_naiveN)Ú__name__Ú
__module__Ú__qualname__rŒ   rŽ   r�   rB   rT   rU   Zvstackrt   r   ÚTZnaive_testsÚpytestÚmarkÚparametrizerœ   r*   r*   r*   r+   r†   û   s   ÿr†   c                   @   sê   e Zd Zej d¡ dZdZejjdeed�Z	ejjdeed�Z
e	e
 Zejdeejd�Ze dee
 ¡Ze ee	¡Zejeeejd�ZejjejŽ d Zej ddd	g¡d
d„ ƒZdd„ Zdd„ Zdd„ Zej ddd	g¡dd„ ƒZdS )ÚTestNCHrF   ©rF   r   r   rS   r4   rK   r   Ú	dist_namer   r   c                 C   sX   t tdœ}|| }| j| j| j| jf\}}}}t|j||||dd�t ||||¡ƒ d S )N©r   r   r4   )Úodds)	r   r   rP   r'   Úm1r&   r   r<   r   )r‹   r¦   ÚdistsÚdistrP   r'   r©   r&   r*   r*   r+   Útest_nch_hypergeom_  s    ÿÿzTestNCH.test_nch_hypergeomc           
      C   s–   | j | j| j| j| jf\}}}}}tjdd„ ƒ}||||||ƒ\}}}	tt 	|||||¡|ƒ ttj
||||dd�|ƒ ttj
||||dd�|	ƒ d S )Nc                    s�   |ˆ ‰t  dˆˆ ¡‰t  ˆˆ¡‰‡‡‡‡fdd„‰ ‡ ‡‡fdd„}|dƒ}|dƒ}|dƒ}ˆ | ƒ| }	|| }
|| || d  }|	|
|fS )Nr   c                    s(   t ˆ | ƒ}t ˆˆ|  ƒ}|| ˆ|   S r|   )Úspecial_binom)rP   Út1Út2©r©   Úm2r&   Úwr*   r+   Úfv  s    
zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.fc                    s"   t ‡‡ fdd„tˆˆd ƒD ƒƒS )Nc                 3   s   | ]}ˆ |ƒ|ˆ  V  qd S r|   r*   )Ú.0rX   )r³   r$   r*   r+   Ú	<genexpr>|  s     zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>r4   )r“   Úrange©r$   )r³   ÚxlÚxur·   r+   ÚP{  s    zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.Pr4   rF   ©rB   ÚmaximumÚminimum)rP   r'   r©   r&   r²   rº   ZP0ZP1ZP2r<   rš   r›   r*   )r³   r©   r±   r&   r²   r¸   r¹   r+   Úpmf_mean_varo  s    z;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_varÚmr‰   Úv)rP   r'   r©   r&   r¨   rB   r™   r   r   r<   rŠ   )
r‹   rP   r'   r©   r&   r¨   r¾   r<   rš   r›   r*   r*   r+   Útest_nchypergeom_fisher_naivek  s    "
ÿÿz%TestNCH.test_nchypergeom_fisher_naivec              	      s`  t j d¡ d}d}t jjd||d�}t jjd||d�}|| }tjd||jd�}t  d|| ¡}t  ||¡}tj|||jd�}	t jj|	jŽ d }
dd„ ‰t j	‡fd	d
„ƒ‰ t
ƒ �8}|jtdd� tt ||||
¡ˆ ||||
ƒdd� W 5 Q R X t j	‡ fdd„ƒ}t
ƒ �<}|jtdd� ttj||||
dd�|||||
ƒdd� W 5 Q R X t j	‡fdd„ƒ}||	||||
ƒ}t |	||||
¡}d\}}t  || ¡||t  |¡  k }| ¡ t  |¡d k�sÂt‚t||  ||  ||  |
|  ƒD ]r\}}}}
|| }ˆ||||
ƒ\}}t  ||d ¡}	||	||||
ƒ ¡ dk �s<t‚tt |	||||
¡ ¡ dƒ �qèd S )NrF   r¥   rS   r4   rK   r   c                 S   s,   | | }t  d|| ¡}t  ||¡}||fS )Nr   r»   )r'   r©   r&   r²   r±   r¸   r¹   r*   r*   r+   rD   œ  s    z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.supportc                    s>   | ˆ  ‰ˆ| ˆ ˆˆƒ\}}‡ ‡‡‡fdd„}t |||fd�jS )Nc                    s    | ˆ  dˆ|  ˆ  ˆ  d S ©Nr4   r*   )Úur°   r*   r+   Úfun§  s    zCTestNCH.test_nchypergeom_wallenius_naive.<locals>.mean.<locals>.fun)Zbracket)r   Úroot)r'   r©   r&   r²   r¸   r¹   rÄ   ©rD   r°   r+   rš   ¢  s    z6TestNCH.test_nchypergeom_wallenius_naive.<locals>.meanz!invalid value encountered in mean)Úmessageg{®Gáz”?r    c                    sZ   | | }ˆ | |||ƒ}|||  }|| || |  }| | | | d || ||    S rÂ   r*   )r'   r©   r&   r²   r±   rÃ   ra   rb   )rš   r*   r+   Úvariance²  s
    z:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variancerÀ   r‰   gš™™™™™©?c                    sH   |ˆ ‰ˆ|ˆˆˆƒ\}}‡‡‡‡‡fdd„‰ ‡ ‡‡‡fdd„}|ˆƒS )Nc                    sH   ˆˆ ˆ  ˆˆˆ   }d| ˆ|   ˆ d| d|   ˆˆ   }|S rÂ   r*   )ÚtÚDÚres)r©   r±   r&   r²   rP   r*   r+   Ú	integrandÈ  s    ,zHTestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.integrandc                    s:   t ˆ| ƒ}t ˆˆ|  ƒ}tˆ ddddd�}|| |d  S )Nr   r4   g¼‰Ø—²Òœ<)ZepsrelZepsabs)r­   r   )rP   r®   r¯   Zthe_integral)rÌ   r©   r±   r&   r*   r+   r³   Í  s    
 ÿz@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.fr*   )rP   r'   r©   r&   r²   r¸   r¹   r³   rÆ   )rÌ   r©   r±   r&   r²   rP   r+   r<   Ã  s
    z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf)r�   r�   rl   )rB   rT   rU   r   rM   rN   r¼   r½   rn   r™   r   ÚfilterÚRuntimeWarningr   r   rš   rŠ   r<   Úabsr“   ÚprodrO   ÚziprC   )r‹   rN   Úmax_mr©   r±   r'   r&   r¸   r¹   rP   r²   ÚsuprÈ   r<   Zpmf0Zpmf1rw   r!   Úir*   )rš   rD   r+   Ú test_nchypergeom_wallenius_naive�  s\    	ÿ ÿÿý 2z(TestNCH.test_nchypergeom_wallenius_naivec           	      C   s¬   d}d}d}d}t  d¡}t  dddd	d
ddddddddddddddddg¡}d}d}tt |||||¡|ddd� tt ||||¡|dd� tt ||||¡|d d� d S )!Nr1   r�   r^   g      @r‡   g9”T€ÆÕå;g»��rþü�<gÝD,P=g³4À VŒ=g'±	,îñð=gC�åõ‹ŒG>gyzžtj…”>gÁÙë«t•×>gÃ+k…†?g ‰Me´GD?gqNZVÉ’o?gœcø2nž‘?g~Z€ÄN¬?g¼EŸ}?YÀ?gõÛÀ¢ßöÊ?gËÎ‡aQÏ?gè€]?…É?gr”…)‚‚º?gÌáÙp{¡?g3Í9	·†y?gµ Ñmç>?gJ®ò•´�-@gñihÞ@r?   )r!   rw   r    g•dyáý¥=)rB   rC   Úarrayr   r   r<   rš   r›   )	r‹   r%   r&   r'   r¨   rÓ   r<   rš   r›   r*   r*   r+   Útest_wallenius_against_mpmathé  sR    
ì ÿ ÿ ÿz%TestNCH.test_wallenius_against_mpmathc                 C   sF   t tdœ}|| }|jdddgdggdddgd	d
�}|jd	ksBt‚d S )Nr§   r1   r�   r   r^   rl   rA   g       @rJ   rK   )r   r   rM   rN   rO   )r‹   r¦   rª   r«   rP   r*   r*   r+   Útest_rvs_shape  s    ÿ"zTestNCH.test_rvs_shapeN)r�   rž   rŸ   rB   rT   rU   rN   rÒ   r   r©   r±   r'   rM   r&   r¼   r¸   r½   r¹   rP   rn   r¨   r¡   r¢   r£   r¬   rÁ   rÕ   r×   rØ   r*   r*   r*   r+   r¤   Q  s,   ÿ

"\*ÿr¤   zmu, q, expectedr   éx   g@	›#á¸iÜ  g"q³V§UÀc                 C   s.   d}||||    }}t t |||¡|ƒ d S )Nr^   )r   r   Zlogcdf)r„   Úqr(   rL   r&   r)   r*   r*   r+   Útest_nbinom_11465   s    rÛ   c                  C   s`   t  ddd¡} d}t|ƒ | ¡}| d dk}t|d |ƒ t|d d| ƒ t||  dƒ d S )Nr   r4   rR   gš™™™™™é?rm   )rB   rq   r   r<   r   r   )rP   r)   r<   rÔ   r*   r*   r+   Útest_gh_17146-  s    rÜ   )9r¡   Zscipy.statsr   r   r   r   r   r   r   r	   r
   r   r   r   r   ÚnumpyrB   Znumpy.testingr   r   r   r   Zscipy.specialr­   Zscipy.optimizer   Zscipy.integrater   r¢   r£   r,   r0   r7   r>   rE   rG   rQ   rY   r]   r`   rc   rj   rk   ro   rr   ru   rx   r~   r   r�   rƒ   Úfilterwarningsr…   r†   r¤   rÛ   rÜ   r*   r*   r*   r+   Ú<module>   sz   <üÿ
þÿ
		

	÷


V Pÿÿ

