B
    `%                 @   sl  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 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 Z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'd( Z'ejd)d*d+d,d-d.d/d0d1gejd2ed3d4 Z(dS )5    N)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)distdiscrete         g?g?g333333?g?)values c              c   s6   t  } x*tD ]"\}}|||| kfV  | | qW d S )N)setr   add)seendistnameargr   r   T/home/dcms/DCMS/lib/python3.7/site-packages/scipy/stats/tests/test_discrete_basic.pycases_test_discrete_basic   s    r   zdistname,arg,first_casec             C   s\  y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|| d}t||||| d  |rXd	}	|j|j|j|j|jg}
d
ddd}|| d}t||||	|
 | dkrt| t|| t|| t|| t|||  |jjtjjkrXt||tj d S )Nzsample distributioniP sizei  z cdf_ppfz othg{Gz?z
 chisquare)r      r   r   )randintZ	hypergeomZ	bernoullir   )getattrr   	TypeErrornprandomseedrvsuniquecheck_cdf_ppfcheck_pmf_cdf	check_othr   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distfnr'   suppmvalphaZlocscale_defaultsZmethsZspec_kkr   r   r   test_discrete_basic   s>    








r<   zdistname,argc             C   s   y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 )Nzsample distributionZmomentsZmvsk)Zzipf	yulesimonr   r   )
r"   r   r#   r   r   r   r   r   r	   check_moment_frozen)r   r   r6   r8   r9   sr;   r   r   r   test_momentsB   s    
r@   zdist,shape_argsc             C   s   | dk}yt t| }W n( tk
r>   | }d| j| jf } Y nX td}|j}g }g }xPt|D ]D}|d fd|d   }	|| }
|	t
|	|
 |d|	d  qbW |	| |	|j t|| |||tjg d S )N)Z	betabinomskellamr=   Zdlaplacezrv_discrete(values=(%r, %r))r   r   )r   r   r   )r"   r   r#   xkpkr$   zerosZnumargsrangeappendfullinsertr   r   int_)distZ
shape_argsZ
shape_onlyZdistfunclocnargsallargsZbshaper;   ZshpZ	param_valr   r   r   test_rvs_broadcastY   s$    

rN   z	dist,argsc          	   C   s   yt t| }W n tk
r&   | }Y nX tjd tjdddtjddg}|j| \}}xL|D ]D}t	|d | || g|j
d
|d|i|j
d|d|ig qfW d S )NiM ir   r   
           rK         ?)rQ   )rR   )r"   r   r#   r$   r%   r&   r!   supportnptassert_array_equalppf)rJ   argsr6   Zre_locs_a_brK   r   r   r   test_ppf_with_loc}   s    

rZ   c             C   s   t | j| j|f| f| ||d  t | j| j|f| d f| ||d  t| ds| j| \}}|||k  }t | j| j|f| d f| || j |d  d S )Nz
-roundtripg:0yE>rB   z ppf-cdf-next)rT   rU   rV   r/   hasattrrS   inc)r6   r   r7   msgrX   rY   Zsupp1r   r   r   r)      s    "
"r)   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	 d S )NrB   {Gz?r   rP   )g|=g|=rA   )gh㈵>gh㈵>r   )atolrtol)r^   )r[   rB   intrV   listrE   r/   r-   ZcumsumrT   assert_allclose)	r6   r   r   indexZstartindZcdfsZpmfs_cumr_   r`   r   r   r   r*      s    
r*   c             C   s    t j| | ||ddd d S )Ng|=)r_   r`   )rT   rc   Zmoment)r6   r   r8   r;   r   r   r   r>      s    r>   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 )
Ng      ?g|=)r_   r`   g{Gz?gGz?         ?r   )rf   )	rT   rc   sfr/   r$   ZlinspaceisfrV   assert_)r6   r   r7   r]   qZ	median_sfr   r   r   r+      s    $
$
r+   c             C   s>  d}| j | \}}tt|d}tt|dd }	t||	}
d}|g}g }xV|
D ]N}| j|f| }|| |d krP|| |||  |}|d| krPP qPW |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+=rO   g:0yE>z2chisquare - test for %s at arg = %s with pval = %sN)rS   ra   maxminrE   r/   rF   r$   arrayZ	histogramr   Z	chisquarelenrT   ri   str)r6   r   r'   r:   r]   ZwsupprX   rY   lohighZdistsupportlastZdistsuppZdistmassiicurrentZhistsuppfreqZhsuppZchisZpvalr   r   r   r,      s8    






r,   c             C   s   | j d k	rtd| j k d S )NZscale)__doc__rT   ri   )r6   r   r   r   r3      s    
r3   methodr-   r.   r/   r0   rg   r1   rV   rh   zdistname, argsc                s   yt t| W n tk
r"   d S X | dkr6d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)rV   rh   g?g?r   r   c             S   s   g | ]}|gd  qS )r   r   ).0pr   r   r   
<listcomp>  s    z+test_methods_with_lists.<locals>.<listcomp>rK   c                s   g | ]} j | qS r   )r-   )rx   r9   )rJ   r   r   rz     s    gV瞯<)r`   r_   )r"   r   r#   r-   rT   rc   zip)rw   r   rW   zp2rK   resultr   )rJ   r   test_methods_with_lists   s    
r   ))Znumpy.testingZtestingrT   numpyr$   ZpytestZscipyr   Zcommon_testsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Zscipy.stats._distr_paramsr   valsr5   r   markZparametrizer<   r@   rN   rZ   r)   r*   r>   r+   r,   r3   r   r   r   r   r   <module>   s*   @)$8