U
    »mœd�N  ã                   @   s"  d dl mZ d dl mZ d dlZd dlZd dlm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mZmZmZ d dlmZmZ d dlmZ ddd	d
gddddgfZeej ed�dgg7 ZddhZ!dd„ Z"ej# $d¡ej# %de"ƒ ¡dd„ ƒƒZ&ej# $d¡ej# %de¡dd„ ƒƒZ'ej# %de¡dd„ ƒZ(ej# %de¡d d!„ ƒZ)ej# %d"e¡d#d$„ ƒZ*d%d&„ Z+d'd(„ Z,d)d*„ Z-d+d,„ Z.d-d.„ Z/d/d0„ Z0ej# %d1d2d3d4d5d6d7d8d9g¡ej# %d:e¡d;d<„ ƒƒZ1ej# %d:e¡d=d>„ ƒZ2d?d@„ Z3ej# %dAe3ƒ ¡dBdC„ ƒZ4dDdE„ Z5ej# %dFe¡dGdH„ ƒZ6dIdJ„ Z7dS )Ké    N)Úassert_allclose)Ústatsé   )Úcheck_normalizationÚcheck_momentÚcheck_mean_expectÚcheck_var_expectÚcheck_skew_expectÚcheck_kurt_expectÚcheck_entropyÚcheck_private_entropyÚcheck_edge_supportÚcheck_named_argsÚcheck_random_state_propertyÚcheck_picklingÚcheck_rvs_broadcastÚcheck_freezingÚ'check_deprecation_warning_gh5982_momentÚ)check_deprecation_warning_gh5982_interval)ÚdistdiscreteÚinvdistdiscrete)Úrv_discrete_frozené   é   é   çš™™™™™¹?çš™™™™™É?g333333Ó?gš™™™™™Ù?©Úvalues© ZzipfianZ
nhypergeomc                  c   sT   t ƒ } tD ]D\}}|tkr4tj|||tjjd�V  n|||| kfV  |  |¡ q
d S )N)Zmarks)Úsetr   ÚdistslowÚpytestÚparamÚmarkZslowÚadd)ÚseenÚdistnameÚargr   r   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_discrete_basic.pyÚcases_test_discrete_basic   s    r*   zignore::RuntimeWarningzdistname,arg,first_casec                 C   sv  zt t| ƒ}W n tk
r*   | }d} Y nX tj d¡ |j|ddiŽ}t |¡}|j|Ž \}}t|||| d ƒ t	||| ƒ t
|||| d ƒ t||ƒ t||| ƒ t||| ƒ d}t||||| d ƒ |�rrd	}	|j|j|j|j|jg}
d
ddddœ}| | d¡}t||||	|
ƒ | dk�r(t|ƒ t||ƒ t||ƒ t||ƒ t||| ƒ |jjtjjk�rrt||tjƒ d S )Núsample distributioniP• ÚsizeiÐ  z cdf_ppfz othç{®Gáz„?z
 chisquare)r   é   r   r   é   )ÚrandintZ	hypergeomZ	bernoulliÚnchypergeom_walleniusr   )Úgetattrr   Ú	TypeErrorÚnpÚrandomÚseedÚrvsÚuniqueÚcheck_cdf_ppfÚcheck_pmf_cdfÚ	check_othr   r   r   Úcheck_discrete_chisquareÚpmfÚlogpmfÚcdfÚlogcdfÚlogsfÚgetr   Úcheck_scale_docstringr   r   r   r   Ú	__class__Z_entropyÚrv_discreter   )r'   r(   Z
first_caseÚdistfnr7   ÚsuppÚmÚvÚalphaZlocscale_defaultsZmethsZspec_kÚkr   r   r)   Útest_discrete_basic$   sJ    



ÿÿÿ



rL   zdistname,argc                 C   sÒ   zt t| ƒ}W n tk
r*   | }d} Y nX |j|ddiŽ\}}}}t||| ƒ t||||| ƒ t|||| ƒ t||||| ƒ t|||||| ƒ | dkrªt|||||| ƒ t	|||dƒ t	|||||  dƒ d S )Nr+   ÚmomentsÚmvsk)ZzipfÚ	yulesimonr   r   )
r2   r   r3   r   r   r   r   r	   r
   Úcheck_moment_frozen)r'   r(   rF   rH   rI   ÚsrK   r   r   r)   Útest_momentsR   s    
rR   zdist,shape_argsc                 C   sÖ   | dk}zt t| ƒ}W n( tk
r>   | }d| j| jf } Y nX t d¡}|j}g }g }t|ƒD ]D}|d fd|d   }	|| }
| 	t 
|	|
¡¡ | d|	d ¡ q`| 	|¡ | 	|j¡ t|| |||tjgƒ d S )N)Z	betabinomÚskellamrO   ZdlaplaceZnchypergeom_fisherr1   zrv_discrete(values=(%r, %r))r   r   )r   r   r   )r2   r   r3   ÚxkÚpkr4   ÚzerosZnumargsÚrangeÚappendÚfullÚinsertr,   r   Úint_)ÚdistZ
shape_argsZ
shape_onlyZdistfuncÚlocÚnargsZallargsZbshaperK   ZshpZ	param_valr   r   r)   Útest_rvs_broadcastj   s$    

r_   z	dist,argsc              	   C   s®   zt t| ƒ}W n tk
r&   | }Y nX tj d¡ tj dd¡dtj dd¡g}|j|Ž \}}|D ]D}t 	|d | || g|j
d
|žd|iŽ|j
d|žd|iŽg¡ qdd S )NéM£ éöÿÿÿéÿÿÿÿr   r   é
   ç        r]   ç      ð?)rd   )re   )r2   r   r3   r4   r5   r6   r0   ÚsupportÚnptÚassert_array_equalÚppf)r\   ÚargsrF   Úre_locsÚ_aÚ_br]   r   r   r)   Útest_ppf_with_loc�   s    
&þrn   z
dist, argsc           	      C   sB  zt t| ƒ}W n tk
r&   | }Y nX tj d¡ tj dd¡dtj dd¡g}|j|Ž \}}|D ]L}|| |d | f}|jd|žd|iŽ|jd|žd|iŽf}t	 
||¡ qdtjjddd
d�t d
¡tjjddd
d�g}|j|Ž \}}|D ]L}|| |d | f}|jd|žd|iŽ|jd|žd|iŽf}t	 
||¡ qðd S )Nr`   ra   rb   r   r   rc   rd   r]   re   )é   r   ©r,   )rd   )re   )rd   )re   )r2   r   r3   r4   r5   r6   r0   rf   Úisfrg   rh   rV   )	r\   rj   rF   rk   rl   rm   r]   ÚexpectedÚresr   r   r)   Útest_isf_with_loc    s(    
(þ(rt   c           	      C   sÊ   | j |f|žŽ }|dt |¡  }t | j|f|žŽ ||d ¡ t | j| j |f|žŽ d f|žŽ ||d ¡ t| dƒsÆ| j|Ž \}}|||k  }t | j| j |f|žŽ d f|žŽ || j |d ¡ d S )Nrc   z
-roundtripç:Œ0âŽyE>rT   z ppf-cdf-next)	r?   r4   Úspacingrg   rh   ri   Úhasattrrf   Úinc)	rF   r(   rG   ÚmsgZcdf_suppZ	cdf_supp0rl   rm   Zsupp1r   r   r)   r9   ¹   s"     ÿ" ÿ
" ÿr9   c              	   C   s.  t | dƒr| j}n(t| jd|žŽ d ƒ}tt||d ƒƒ}| j|f|žŽ }| j|f|žŽ  ¡ }d\}}|dkrvd\}}t	j
||d  ||d  ||d	� t |¡}	|	d d
… t |	¡d  }
t	 | j|
f|žŽ d¡ d}| |d|iŽ}t	 
| |	dd … | ¡t | |	| ¡¡¡ t	 | |
| ¡d¡ d S )NrT   r-   r   rc   )ç»½×Ùß|Û=rz   rS   )çñhãˆµøä>r{   r   ©ÚatolÚrtolrb   r   ç      à?r]   )r-   )rw   rT   Úintri   ÚlistrW   r?   r=   Úcumsumrg   r   r4   ZasarrayÚdiffÚassert_equal)rF   r(   r'   ÚindexZstartindZcdfsZpmfs_cumr}   r~   rK   Z	k_shiftedr]   r\   r   r   r)   r:   Ò   s(    
 ÿ
.r:   c                 C   s    t j| |Ž  |¡|ddd� d S )Nrz   r|   )rg   r   Úmoment)rF   r(   rH   rK   r   r   r)   rP   í   s     ÿrP   c                 C   s¸   t j| j|f|žŽ d| j|f|žŽ  ddd� t ddd¡}t j| j|f|žŽ | jd| f|žŽ ddd� | jd	|žŽ }t  | j|d f|žŽ dk¡ t  | j|d f|žŽ dk¡ d S )
Nre   rz   r|   r-   ç®Gáz®ï?é   r   r   )r   )	rg   r   Úsfr?   r4   Úlinspacerq   ri   Úassert_)rF   r(   rG   ry   ÚqZ	median_sfr   r   r)   r;   ò   s    $ ÿ$ ÿr;   c                 C   s<  d}| j |Ž \}}tt|dƒƒ}tt|dƒƒd }	t||	ƒ}
d}|g}g }|
D ]P}| j|f|žŽ }|| |d krN| |¡ | || ¡ |}|d| krN q qN|d |k rÄ| |¡ | d| ¡ t |¡}t |¡}|d }||d< t 	||¡\}}t
 t |¡t|ƒ| ¡\}}t ||kd	|t|ƒt|ƒf ¡ d
S )as  Perform chisquare test for random sample of a discrete distribution

    Parameters
    ----------
    distname : string
        name of distribution function
    arg : sequence
        parameters of distribution
    alpha : float
        significance level, threshold for p-value

    Returns
    -------
    result : bool
        0 if test passes, 1 if test fails

    gš™™™™™©?iüÿÿiè  r   r   g›+¡†›„=rb   ru   z2chisquare - test for %s at arg = %s with pval = %sN)rf   r€   ÚmaxÚminrW   r?   rX   r4   ÚarrayZ	histogramr   Z	chisquareÚlenrg   r‹   Ústr)rF   r(   r7   rJ   ry   Zwsupprl   rm   ÚloÚhighZdistsupportÚlastZdistsuppZdistmassÚiiÚcurrentZhistsuppÚfreqZhsuppZchisZpvalr   r   r)   r<      s<    





ÿÿr<   c                 C   s   | j d k	rt d| j k¡ d S )NÚscale)Ú__doc__rg   r‹   )rF   r   r   r)   rC   8  s    
rC   Úmethodr=   r>   r?   r@   r‰   rA   ri   rq   zdistname, argsc                    sž   zt t|ƒ‰ W n tk
r$   Y d S X | dkr8ddg}nddg}dd„ |D ƒ}ddg}ˆ j|f|žd|iŽ}tj|‡ fd	d„t|f||fžŽ D ƒd
d
d� d S )N)ri   rq   r   r   r   r   c                 S   s   g | ]}|gd  ‘qS )r   r   )Ú.0Úpr   r   r)   Ú
<listcomp>L  s     z+test_methods_with_lists.<locals>.<listcomp>r]   c                    s   g | ]}ˆ j |Ž ‘qS r   )r=   )r›   rI   ©r\   r   r)   r�   P  s     çVçž¯Ò<)r~   r}   )r2   r   r3   r=   rg   r   Úzip)rš   r'   rj   ÚzÚp2r]   Úresultr   rž   r)   Útest_methods_with_lists>  s    
 þr¤   c                 C   s<   t t| ƒ}t dd¡}|j|f|žŽ }tj}t ||¡ d S )Néþÿÿÿé   )r2   r   r4   Zaranger?   Únanrg   r„   )r'   rj   r\   ÚxÚvalsrr   r   r   r)   Útest_cdf_gh13280_regressionT  s
    
rª   c               	   c   s¢   ddhi} t ƒ }tD ]ˆ\}}||kr&q| |¡ ztt|ƒ}W n tk
rV   Y qY nX | ¡ }t|ƒD ]2\}}|j|  	|t ƒ ¡ksh|j
sŒqh||j|fV  qhqd S )NZnbinomÚn)r    r   r%   r2   r   r3   Ú_shape_infoÚ	enumerateÚnamerB   Zintegrality)Zintegrality_exceptionsr&   r'   Úshapesr\   Ú
shape_infoÚiÚshaper   r   r)   Ú"cases_test_discrete_integer_shapes^  s"    


ÿr³   zdistname, shapename, shapesc                 C   sô   t t| ƒ}| ¡ }dd„ |D ƒ}| |¡}t|ƒ}|| }|d }	|d }
|g|	g|
gg||< |j|Ž \}}t t ||d¡¡}|j	|f|žŽ }t 
t |dd d …f ¡¡r°t‚t t |dd d …f ¡¡sÐt‚t 
t |dd d …f ¡¡rðt‚d S )Nc                 S   s   g | ]
}|j ‘qS r   )r®   )r›   r²   r   r   r)   r�   }  s     z'test_integer_shapes.<locals>.<listcomp>r   r   ro   r   r   )r2   r   r¬   r…   r�   rf   r4   ÚroundrŠ   r=   ÚanyÚisnanÚAssertionErrorÚall)r'   Z	shapenamer¯   r\   r°   Zshape_namesr±   Zshapes_copyZvalid_shapeZinvalid_shapeZnew_valid_shapeÚaÚbr¨   r=   r   r   r)   Útest_integer_shapesx  s    

  r»   c               	   C   s†   d} t jt| d�� t dd¡j W 5 Q R X t jt| d�� t dd¡j W 5 Q R X dtj_t dd¡}t|tƒsvt	‚t
tjdƒ d S )Nz,'rv_discrete_frozen' object has no attribute)Úmatchrc   r   ZherringÚpdf)r"   ZraisesÚAttributeErrorr   Zbinomr½   ZlogpdfÚ
isinstancer   r·   Údelattr)ÚmessageZfrozen_binomr   r   r)   Útest_frozen_attributes�  s    rÂ   zdistname, shapesc                 C   s’   t | tƒrtt| ƒ}n| }|j|Ž \}}t |jddgf|žŽ |d |f¡ t |jddgf|žŽ |d |f¡ t |j	d|žŽ |d |f¡ d S )Nr   r   )r   )
r¿   r‘   r2   r   rf   rg   r„   ri   rq   Úinterval)r'   r¯   r\   r¹   rº   r   r   r)   Útest_intervalž  s    
$$rÄ   c               	      sò  t j d¡} t  |  d¡d ¡}|  d¡}|t  |¡ }tj||fd�‰ t  dg|d d…  ¡  ¡| d }t  |dd …  ¡ |d d g ¡| d }t  	|¡}t  dg|d d…  ¡  ¡| d }t  |dd …  ¡ dg ¡| d }ˆ  
¡ \}}	t||d ƒ t|	|d ƒ tˆ  |¡|ƒ tˆ  |¡dƒ tˆ  |¡dƒ t jdd	��D tˆ  |¡t  |¡ƒ tˆ  |¡t j ƒ tˆ  |¡t j ƒ W 5 Q R X tˆ  |¡|ƒ tˆ  |¡|ƒ tˆ  |¡dg|d d…  ¡  ƒ t jdd	��f tˆ  |¡t  ˆ  |¡¡d
d� tˆ  |¡t  ˆ  |¡¡d
d� tˆ  |¡t  ˆ  |¡¡d
d� W 5 Q R X tˆ  |¡dˆ  |¡ ƒ tˆ  |¡dˆ  |¡ ƒ tˆ  |¡dˆ  |¡ ƒ t jdd	��f tˆ  |¡t  ˆ  |¡¡d
d� tˆ  |¡t  ˆ  |¡¡d
d� tˆ  |¡t  ˆ  |¡¡d
d� W 5 Q R X tˆ  |¡|ƒ tˆ  |¡|ƒ tˆ  |¡d d… |dd … ƒ tˆ  d¡|d ƒ tˆ  d¡|	ƒ ˆ  |¡}
tˆ  |
¡|ƒ tˆ  d| ¡ˆ  |¡ƒ tˆ  d| ¡ˆ  |¡ƒ tˆ  d¡|	ƒ tˆ  d¡|d ƒ t  ddd¡}ˆ  |d ¡ˆ  |d ¡f}tˆ  d| ¡|ƒ tˆ  d¡ˆ  ¡ ƒ tˆ  d¡|d |	fƒ ˆ  d¡}tˆ  ¡ |ƒ t  || ¡}t  || d | ¡}t  || d | ¡|d  }t  || d | ¡|d  d }tˆ  ¡ |ƒ tˆ  ¡ t  |¡ƒ tˆ  ¡ |ƒ tˆ jdd�||||fƒ t  |d | ¡}tˆ  d¡|ƒ tˆ  dd„ ¡dƒ tˆ  ¡ |ƒ tˆ  dd„ ¡|ƒ t jdd	��$ tˆ  ‡ fdd„¡ ˆ   ¡ ƒ W 5 Q R X t j d¡} ˆ j!d| d�}t j d¡} ˆ  | jdd�¡}t||ƒ d S )Nl   íKÉU[ rc   r   r   rb   r   r   Úignore)ÚdividerŸ   )r}   r-   r‡   r   r   g      ø?r   rN   )rM   c                 S   s   dS )Nr   r   ©r¨   r   r   r)   Ú<lambda>  ó    z test_rv_sample.<locals>.<lambda>c                 S   s   | d S )Nr   r   rÇ   r   r   r)   rÈ     rÉ   c                    s
   ˆ   | ¡S )N)r>   rÇ   rž   r   r)   rÈ     rÉ   éd   )r,   Zrandom_staterp   )"r4   r5   Zdefault_rngÚsortÚsumr   rE   r�   Útolistr‚   rf   r   r=   Zerrstater>   ÚlogÚinfr?   r@   r‰   rA   ri   rq   rŠ   rÃ   ZmedianZmeanZstdÚsqrtÚvarr†   ÚexpectZentropyr7   )ÚrngrT   rU   Zxk_leftZxk_rightZcdf2Z	cdf2_leftZ
cdf2_rightr¹   rº   Zsf2ZpsZint2Zmed2Zmean2Zvar2Zskew2Zkurt2Zmom3r7   Zrvs0r   rž   r)   Útest_rv_sample®  s¨    
$,
$$"ÿÿÿÿÿÿ 

"(rÔ   )8Znumpy.testingÚtestingrg   r   Únumpyr4   r"   Zscipyr   Zcommon_testsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   Zscipy.stats._distr_paramsr   r   Z!scipy.stats._distn_infrastructurer   r©   rE   r!   r*   r$   ÚfilterwarningsZparametrizerL   rR   r_   rn   rt   r9   r:   rP   r;   r<   rC   r¤   rª   r³   r»   rÂ   rÄ   rÔ   r   r   r   r)   Ú<module>   s`   H

,

$

8   ÿ
	ÿ

