a
    /'a(                     @   sz  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mZ g dg dfZeejedd	gg7 Zd
dh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&g d'ejd(ed)d* Z*ejd(ed+d, Z+dS )-    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invdistdiscrete)r            )皙?皙?g333333?g?)values ZzipfianZ
nhypergeomc                  c   sT   t  } tD ]D\}}|tv r4tj|||tjjdV  n|||| vfV  | | q
d S )N)Zmarks)setr   distslowpytestZparammarkZslowadd)seendistnameargr   r   Dlib/python3.9/site-packages/scipy/stats/tests/test_discrete_basic.pycases_test_discrete_basic   s    r$   zdistname,arg,first_casec                 C   s\  zt t| }W n ty(   | }d} Y n0 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}|| d}t||||	|
 | dkrt| t|| t|| t|| t|||  |jjtjjkrXt||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   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distfnr1   suppmvalphaZlocscale_defaultsZmethsZspec_kkr   r   r#   test_discrete_basic   sF    







rF   zdistname,argc                 C   s   zt t| }W n ty(   | }d} Y n0 |j|ddi\}}}}t|||  t|||||  t||||  t|||||  t||||||  | dvrt||||||  t	|||d t	|||||  d d S )Nr%   ZmomentsZmvsk)Zzipf	yulesimonr   r   )
r,   r   r-   r   r   r   r   r   r	   check_moment_frozen)r!   r"   r@   rB   rC   srE   r   r   r#   test_momentsJ   s    
rJ   zdist,shape_argsc                 C   s   | dv }zt t| }W n& ty<   | }d| j| jf } Y n0 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skellamrG   ZdlaplaceZnchypergeom_fisherr+   zrv_discrete(values=(%r, %r))r   r   )r   r   r   )r,   r   r-   xkZpkr.   ZzerosZnumargsrangeappendZfullinsertr&   r   Zint_)distZ
shape_argsZ
shape_onlyZdistfunclocnargsZallargsZbshaperE   ZshpZ	param_valr   r   r#   test_rvs_broadcasta   s$    

rS   z	dist,argsc              	   C   s   zt t| }W n ty$   | }Y n0 tjd tjdddtjddg}|j| \}}|D ]L}t	|d | || g|j
dg|R d|i|j
d	g|R d|ig qbd S )
NiM ir   r   
   g        rQ         ?)r,   r   r-   r.   r/   r0   r*   supportnptassert_array_equalppf)rP   argsr@   Zre_locs_a_brQ   r   r   r#   test_ppf_with_loc   s    
.r^   c                 C   s   t | j| j|g|R  g|R  ||d  t | j| j|g|R  d g|R  ||d  t| ds| j| \}}|||k  }t | j| j|g|R  d g|R  || j |d  d S )Nz
-roundtrip:0yE>rL   z ppf-cdf-next)rX   rY   rZ   r9   hasattrrW   Zinc)r@   r"   rA   msgr\   r]   Zsupp1r   r   r#   r3      s    "&
&r3   c           	      C   s   t | dr| j}n,t| jdg|R  d }tt||d }| j|g|R  }| j|g|R   }d\}}|dkr~d\}}t	j
||d  ||d  ||d	 d S )
NrL   r'   r   rU   )绽|=rb   rK   )h㈵>rc   r   atolrtol)r`   rL   intrZ   listrM   r9   r7   ZcumsumrX   assert_allclose)	r@   r"   r!   indexZstartindZcdfsZpmfs_cumre   rf   r   r   r#   r4      s    
r4   c                 C   s    t j| | ||ddd d S )Nrb   rd   )rX   ri   Zmoment)r@   r"   rB   rE   r   r   r#   rH      s    rH   c                 C   s   t j| j|g|R  d| j|g|R   ddd tddd}t j| j|g|R  | jd| g|R  ddd | jdg|R  }t | j|d g|R  dk t | j|d g|R  dk d S )	NrV   rb   rd   r'   gGz?   g      ?r   )	rX   ri   sfr9   r.   ZlinspaceisfrZ   assert_)r@   r"   rA   ra   qZ	median_sfr   r   r#   r5      s    (( r5   c                 C   s>  d}| j | \}}tt|d}tt|dd }	t||	}
d}|g}g }|
D ]R}| j|g|R  }|| |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+=rT   r_   z2chisquare - test for %s at arg = %s with pval = %sN)rW   rg   maxminrM   r9   rN   r.   ZarrayZ	histogramr   Z	chisquarelenrX   rn   str)r@   r"   r1   rD   ra   Zwsuppr\   r]   loZhighZdistsupportZlastZdistsuppZdistmassZiiZcurrentZhistsuppZfreqZhsuppZchisZpvalr   r   r#   r6      s<    





r6   c                 C   s   | j d urtd| j v d S )NZscale)__doc__rX   rn   )r@   r   r   r#   r=     s    
r=   method)r7   r8   r9   r:   rl   r;   rZ   rm   zdistname, argsc                    s   zt t| W n ty"   Y d S 0 | dv r6ddg}nddg}dd |D }ddg} j|g|R d|i}tj| fd	dt|g||R  D d
d
d d S )N)rZ   rm   r   r   r   r   c                 S   s   g | ]}|gd  qS )r   r   ).0pr   r   r#   
<listcomp>      z+test_methods_with_lists.<locals>.<listcomp>rQ   c                    s   g | ]} j | qS r   )r7   )rw   rC   rP   r   r#   ry     rz   gV瞯<)rf   re   )r,   r   r-   r7   rX   ri   zip)rv   r!   r[   zZp2rQ   resultr   r{   r#   test_methods_with_lists  s    
 r   c                 C   s>   t t| }tdd}|j|g|R  }tj}t|| d S )N   )r,   r   r.   Zaranger9   nanrX   Zassert_equal)r!   r[   rP   xvalsZexpectedr   r   r#   test_cdf_gh13280_regression  s
    
r   ),Znumpy.testingZtestingrX   Znumpyr.   r   Zscipyr   Zcommon_testsr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Zscipy.stats._distr_paramsr   r   r   r?   r   r$   r   ZparametrizerF   rJ   rS   r^   r3   r4   rH   r5   r6   r=   r   r   r   r   r   r#   <module>   s8   @

*

$
8