o
    iR                     @   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 d dlmZmZ d dlmZ g dg d	fZeejed
dgg7 ZddhZddi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'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d0d1 Z/ej"#d/ed2d3 Z0d4d5 Z1ej"#d6e1 d7d8 Z2d9d: Z3ej"#d;ed<d= Z4ej"5d>d?d@ Z6dAdB Z7dS )C    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)distdiscreteinvdistdiscrete)rv_discrete_frozen)r            )皙?皙?g333333?g?values ZzipfianZ
nhypergeomnbinom   c                  c   sV    t  } tD ]"\}}|tv rtj|||tjjdV  n|||| vfV  | | qd S )N)Zmarks)setr   distslowpytestparammarkZslowadd)seendistnameargr   r   _/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/stats/tests/test_discrete_basic.pycases_test_discrete_basic   s   r*   zdistname,arg,first_casec                 C   sf  zt t| }W n ty   | }d} Y nw tjd |j|ddi}t|}|j| \}}t|||| d  t	|||  t
|||| d  t|| d}t||||| d  |rd	}	|j|j|j|j|jg}
d
dddd}|| d}t||||	|
 | dkrt| t|| | dvrt|| t|| t|||  |jjtjjkrt||tj d S d S d S )Nsample distributioniP sizei  z cdf_ppfz oth{Gz?z
 chisquare)r      r   r      )randintZ	hypergeomZ	bernoullinchypergeom_walleniusr   >   poisson_binom)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distfnr8   suppmvalphaZlocscale_defaultsZmethsZspec_kkr   r   r)   test_discrete_basic&   sN   





rM   zdistname,argc                 C   s  zt t| }W n ty   | }d} Y nw |j|ddi\}}}}t|||  t|||||  t||||  t|||||  t||||||  tj	
 }| dv rV|t t||||||  W d    n1 siw   Y  t|||d t|||||  d d S )Nr+   momentsmvsk)Zzipf
betanbinomr   r   )r3   r   r4   r   r   r   r   r	   r5   testingZsuppress_warningsfilterRuntimeWarningr
   check_moment_frozen)r'   r(   rG   rI   rJ   srL   supr   r   r)   test_momentsR   s&   
rW   zdist,shape_argsc              	   C   s  | dv }zt t| }W n ty!   | }d| jd| jd} Y nw td}|j}g }g }| dkrMtdd}||f}d	}t	|| |||t
tg d S t|D ]"}	|	d
 fd|	d   }
||	 }|t|
| |d|
d  qQ|| ||j t	|| |||t
tg d S )N)Z	betabinomrP   skellamZ	yulesimonZdlaplaceZnchypergeom_fisherr1   r2   zrv_discrete(values=(z, z))r   r2   )r   r   
         ?)r   r   r   )r   r   r   )r3   r   r4   xkpkr5   zerosZnumargsfullr   Zdtypeintrangeappendinsertr,   )distZ
shape_argsZ
shape_onlyZdistfunclocnargsZallargsZbshapeprL   ZshpZ	param_valr   r   r)   test_rvs_broadcastk   s:   

rg   z	dist,argsc              	   C   s   zt t| }W n ty   | }Y nw tjd tjdddtjddg}|j| \}}|D ]&}t	|d | || g|j
dg|R d|i|j
d	g|R d|ig q1d S )
NM r   r   rY           rd         ?)r3   r   r4   r5   r6   r7   r0   supportnptassert_array_equalppf)rc   argsrG   re_locs_a_brd   r   r   r)   test_ppf_with_loc   s   .ru   z
dist, argsc           	      C   sP  zt t| }W n ty   | }Y nw tjd tjdddtjddg}|j| \}}|D ]*}|| |d | f}|jdg|R d|i|jd	g|R d|if}t	
|| q1tjjddd
dtd
tjjddd
dg}|j| \}}|D ]*}|| |d | f}|jdg|R d|i|jd	g|R d|if}t	
|| q{d S )Nrh   ri   rj   r   r   rY   rk   rd   rl   )   r   r,   )r3   r   r4   r5   r6   r7   r0   rm   isfrn   ro   r]   )	rc   rq   rG   rr   rs   rt   rd   expectedresr   r   r)   test_isf_with_loc   s,   00r{   c           
      C   s   | j |g|R  }t| jd}||t|  }t| j|g|R  ||d  t| j| j |g|R  d g|R  ||d  t	| dsr| j
| \}}|||k  }	t| j| j |	g|R  d g|R  |	| j |d  d S d S )N   z
-roundtrip:0yE>r[   z ppf-cdf-next)r@   roundtrip_cdf_ppf_exceptionsrC   namer5   spacingrn   ro   rp   hasattrrm   inc)
rG   r(   rH   msgZcdf_suppZn_ulpsZ	cdf_supp0rs   rt   Zsupp1r   r   r)   r:      s    &
&r:   c              	   C   s8  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	 t|}	|	d d
 t|	d  }
t	| j|
g|R  d d}| |d|i}t	
||	dd  | t||	|  t	||
| d d S )Nr[   r-   r   rY   )绽|=r   rX   )h㈵>r   r   atolrtolrj   r   rZ   rd   )r   r[   r_   rp   listr`   r@   r>   cumsumrn   r   r5   Zasarraydiffassert_equal)rG   r(   r'   indexZstartindZcdfsZpmfs_cumr   r   rL   Z	k_shiftedrd   rc   r   r   r)   r;      s&   

.r;   c                 C   s    t j| | ||ddd d S )Nr   r   )rn   r   moment)rG   r(   rI   rL   r   r   r)   rT      s   
rT   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 )	Nrl   r   r   r-   Gz?   rZ   r   )	rn   r   sfr@   r5   linspacerx   rp   assert_)rG   r(   rH   r   qZ	median_sfr   r   r)   r<      s   (( $r<   c              
   C   sF  d}| j | \}}tt|d}tt|dd }	t||	}
d}|g}g }|
D ])}| j|g|R  }|| |d krP|| |||  |}|d| krP nq'|d |k rc|| |d|  t|}t|}|d }||d< t	||\}}t
t|t|| \}}t||kd	| d
t| dt|  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+=rj   r}   zchisquare - test for z
 at arg = z with pval = N)rm   r_   maxminr`   r@   ra   r5   arrayZ	histogramr   Z	chisquarelenrn   r   str)rG   r(   r8   rK   r   Zwsupprs   rt   lohighZdistsupportlastZdistsuppZdistmassiicurrentZhistsuppfreqZhsuppZchisZpvalr   r   r)   r=     s<   




r=   c                 C   s"   | j d urtd| j v d S d S )Nscale)__doc__rn   r   )rG   r   r   r)   rD   G  s   
rD   method)r>   r?   r@   rA   r   rB   rp   rx   zdistname, argsc                    s   zt t|}W n
 ty   Y d S w t ||  | dv r ddg}nddg}dd |D }ddg} |g|R d|i}tj| fd	dt|g||R  D d
d
d d S )N)rp   rx   r   r   r   r   c                 S   s   g | ]}|gd  qS )r   r   ).0rf   r   r   r)   
<listcomp>\  s    z+test_methods_with_lists.<locals>.<listcomp>rd   c                    s   g | ]} | qS r   r   )r   rJ   Zdist_methodr   r)   r   `  s    V瞯<)r   r   )r3   r   r4   rn   r   zip)r   r'   rq   rc   zZp2rd   resultr   r   r)   test_methods_with_listsM  s    

 
r   c                 C   s>   t t| }tdd}|j|g|R  }tj}t|| d S )Nr|   )r3   r   r5   Zaranger@   nanrn   r   )r'   rq   rc   xvalsry   r   r   r)   test_cdf_gh13280_regressiond  s
   
r   c               	   c   s    dhdhd} t  }tD ]A\}}||v rq|| ztt|}W n	 ty+   Y qw | }t|D ]\}}|j| 	|t  v sE|j
sFq4||j|fV  q4qd S )Nn)r   rP   )r    r   r%   r3   r   r4   _shape_info	enumerater   rC   Zintegrality)Zintegrality_exceptionsr&   r'   shapesrc   
shape_infoishaper   r   r)   "cases_test_discrete_integer_shapesn  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	|g|R  }t
t|dd d f rYJ tt|dd d f siJ t
t|dd d f ryJ d S )Nc                 S   s   g | ]}|j qS r   )r   )r   r   r   r   r)   r     s    z'test_integer_shapes.<locals>.<listcomp>rZ   r   rv   r   r   )r3   r   r   r   r   rm   r5   roundr   r>   anyisnanall)r'   Z	shapenamer   rc   r   Zshape_namesr   Zshapes_copyZvalid_shapeZinvalid_shapeZnew_valid_shapeabr   r>   r   r   r)   test_integer_shapes  s   

  $r   c                  C   s   d} t jt| d tddj W d    n1 sw   Y  t jt| d tddj W d    n1 s9w   Y  dtj_tdd}t|tsOJ t	tjd d S )Nz,'rv_discrete_frozen' object has no attribute)matchrY   rZ   Zherringpdf)
r"   ZraisesAttributeErrorr   Zbinomr   Zlogpdf
isinstancer   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g|R  |d |f t|jddgg|R  |d |f t|j	dg|R  |d |f d S )Nr   r   )
r   r   r3   r   rm   rn   r   rp   rx   interval)r'   r   rc   r   r   r   r   r)   test_interval  s   
&&&r   zSensible to machine precisionc                     sH  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	' t |t | t |t j  t |t j  W d    n1 sw   Y  t || t || t |dg|d d    t jdd	8 t |t  |d
d t |t  |d
d t |t  |d
d W d    n	1 s9w   Y  t |d |  t |d |  t |d |  t jdd	8 t |t  |d
d t |t  |d
d t |t  |d
d W d    n	1 sw   Y  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 d    n	1 sw   Y  t jd}  j!d| d}t jd}  | jdd}t|| d S )Nl   KU[ rY   r   r   rj   r   r   ignore)divider   )r   r-   r   rZ   r   g      ?r   rO   )rN   c                 S   s   dS )Nr   r   r   r   r   r)   <lambda>%  s    z test_rv_sample.<locals>.<lambda>c                 S   s   | d S )Nr   r   r   r   r   r)   r   '  s    c                    s
     | S )N)r?   r   rc   r   r)   r   +  s   
 d   )r,   random_staterw   )"r5   r6   Zdefault_rngsortsumr   rF   r   tolistr   rm   r   r>   Zerrstater?   loginfr@   rA   r   rB   rp   rx   r   r   ZmedianmeanZstdsqrtvarr   expectZentropyr8   )rngr[   r\   Zxk_leftZxk_rightZcdf2Z	cdf2_leftZ
cdf2_rightr   r   Zsf2ZpsZint2Zmed2Zmean2Zvar2Zskew2Zkurt2Zmom3r8   Zrvs0r   r   r)   test_rv_sample  s   
$,
$$"		 

" r   c                  C   s<   G dd dt j} | dtdd}|jdd}t|d d S )	Nc                   @   s   e Zd Zdd ZdS )z-test__pmf_float_input.<locals>.rv_exponentialc                 S   s   ddd|   S )NgUUUUUU?r   r   r   )selfr   r   r   r)   _pmf9  s   z2test__pmf_float_input.<locals>.rv_exponential._pmfN)__name__
__module____qualname__r   r   r   r   r)   rv_exponential8  s    r   rk   r   )r   r   *   )r   r   )r   rF   floatr8   r   )r   rvr8   r   r   r)   test__pmf_float_input4  s   r   )8Znumpy.testingrQ   rn   r   numpyr5   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   Z!scipy.stats._distn_infrastructurer   r   rF   r!   r~   r*   r$   ZparametrizerM   rW   rg   ru   r{   r:   r;   rT   r<   r=   rD   r   r   r   r   r   r   Zxfail_on_32bitr   r   r   r   r   r)   <module>   sZ    @

+

0

9
	



u