U
    HvfN                     @   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   I/tmp/pip-unpacked-wheel-96ln3f52/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{Gz?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rt||||||  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nargs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 )NM r   r   
           r]         ?)re   )rf   )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    
&ro   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	
|| qd S )Nra   rb   rc   r   r   rd   re   r]   rf   )   r   r,   )re   )rf   )re   )rf   )r2   r   r3   r4   r5   r6   r0   rg   isfrh   ri   rV   )	r\   rk   rF   rl   rm   rn   r]   expectedresr   r   r)   test_isf_with_loc   s(    
((ru   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 )Nrd   z
-roundtrip:0yE>rT   z ppf-cdf-next)	r?   r4   spacingrh   ri   rj   hasattrrg   inc)	rF   r(   rG   msgZcdf_suppZ	cdf_supp0rm   rn   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   rd   )绽|=r{   rS   )h㈵>r|   r   atolrtolrc   r         ?r]   )r-   )rx   rT   intrj   listrW   r?   r=   cumsumrh   r   r4   ZasarrayZ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 )Nr{   r}   )rh   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 )
Nrf   r{   r}   r-   Gz?   r   r   )r   )	rh   r   sfr?   r4   linspacerr   rj   assert_)rF   r(   rG   rz   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 qqN|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+=rc   rv   z2chisquare - test for %s at arg = %s with pval = %sN)rg   r   maxminrW   r?   rX   r4   arrayZ	histogramr   Z	chisquarelenrh   r   str)rF   r(   r7   rJ   rz   Zwsupprm   rn   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 )NZscale)__doc__rh   r   )rF   r   r   r)   rC   8  s    
rC   methodr=   r>   r?   r@   r   rA   rj   rr   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)rj   rr   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=   rh   r   zip)r   r'   rk   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?   nanrh   r   )r'   rk   r\   xvalsrs   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
sqh||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 rttt|dd d f stt
t|dd d f rt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   rp   r   r   )r2   r   r   r   r   rg   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)matchrd   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   rg   rh   r   rj   rr   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   KU[ rd   r   r   rc   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_staterq   )"r4   r5   Zdefault_rngsortsumr   rE   r   tolistr   rg   r   r=   Zerrstater>   loginfr?   r@   r   rA   rj   rr   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.testingZtestingrh   r   Z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`   ro   ru   r9   r:   rP   r;   r<   rC   r   r   r   r   r   r   r   r   r   r   r)   <module>   s`   H

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