o
    hJM                     @   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 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d.d/ Z.ej!"d-ed0d1 Z/d2d3 Z0ej!"d4e0 d5d6 Z1d7d8 Z2ej!"d9ed:d; Z3d<d= Z4dS )>    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 zipfian
nhypergeomc                  c   sV    t  } tD ]"\}}|tv rtj|||tjjdV  n|||| vfV  | | qd S )N)marks)setr   distslowpytestparammarkslowadd)seendistnameargr   r   `/var/www/html/scripts/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   s^  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|| t|| 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      )randint	hypergeom	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___entropyrv_discreter   )r)   r*   
first_casedistfnr;   suppmvalphalocscale_defaultsmethsspec_kkr   r   r+   test_discrete_basic$   sL   





rU   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||||||  | dvrTt||||||  t	|||d t	|||||  d d S )Nr-   momentsmvsk)zipf	yulesimonr   r   )
r6   r   r7   r   r   r   r   r	   r
   check_moment_frozen)r)   r*   rL   rN   rO   srT   r   r   r+   test_momentsO   s    r\   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 }t|D ]"}|d fd|d   }	|| }
|	t
|	|
 |d	|	d	  q2|	| |	|j t|| |||tjg d S )
N)	betabinomskellamrY   dlaplacenchypergeom_fisherr5   zrv_discrete(values=(z, z))r   r   )r   r   r   )r6   r   r7   xkpkr8   zerosnumargsrangeappendfullinsertr.   r   int_)dist
shape_args
shape_onlydistfunclocnargsallargsbshaperT   shp	param_valr   r   r+   test_rvs_broadcastf   s&   

rt   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   
           rn         ?)r6   r   r7   r8   r9   r:   r2   supportnptassert_array_equalppf)rj   argsrL   re_locs_a_brn   r   r   r+   test_ppf_with_loc   s   .r   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 )Nru   rv   rw   r   r   rx   ry   rn   rz   )   r   r.   )r6   r   r7   r8   r9   r:   r2   r{   isfr|   r}   rc   )	rj   r   rL   r   r   r   rn   expectedresr   r   r+   test_isf_with_loc   s,   00r   c           	      C   s   | j |g|R  }|dt|  }t| j|g|R  ||d  t| j| j |g|R  d g|R  ||d  t| dsk| j| \}}|||k  }t| j| j |g|R  d g|R  || j |d  d S d S )N   z
-roundtrip:0yE>ra   z ppf-cdf-next)	rC   r8   spacingr|   r}   r~   hasattrr{   inc)	rL   r*   rM   msgcdf_supp	cdf_supp0r   r   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 )Nra   r/   r   rx   )绽|=r   r^   )h㈵>r   r   atolrtolrw   r         ?rn   )r   ra   intr~   listre   rC   rA   cumsumr|   r   r8   asarraydiffassert_equal)rL   r*   r)   indexstartindcdfspmfs_cumr   r   rT   	k_shiftedrn   rj   r   r   r+   r>      s&   

.r>   c                 C   s    t j| | ||ddd d S )Nr   r   )r|   r   moment)rL   r*   rN   rT   r   r   r+   rZ      s   
rZ   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 )	Nrz   r   r   r/   Gz?   r   r   )	r|   r   sfrC   r8   linspacer   r~   assert_)rL   r*   rM   r   q	median_sfr   r   r+   r?      s   (( $r?   c                 C   s>  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	|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+=rw   r   z2chisquare - test for %s at arg = %s with pval = %sN)r{   r   maxminre   rC   rf   r8   array	histogramr   	chisquarelenr|   r   str)rL   r*   r;   rP   r   wsuppr   r   lohighdistsupportlastdistsuppdistmassiicurrenthistsuppfreqhsuppchispvalr   r   r+   r@      s>   





r@   c                 C   s"   | j d urtd| j v d S d S )Nscale)__doc__r|   r   )rL   r   r   r+   rG   4  s   
rG   method)rA   rB   rC   rD   r   rE   r~   r   zdistname, argsc                    s   zt t| W n
 ty   Y d S w | dv rd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)r~   r   r   r   r   r   c                 S   s   g | ]}|gd  qS )r   r   ).0pr   r   r+   
<listcomp>H      z+test_methods_with_lists.<locals>.<listcomp>rn   c                    s   g | ]} j | qS r   )rA   )r   rO   rj   r   r+   r   L  r   V瞯<)r   r   )r6   r   r7   rA   r|   r   zip)r   r)   r   zp2rn   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 )Nr   )r6   r   r8   arangerC   nanr|   r   )r)   r   rj   xvalsr   r   r   r+   test_cdf_gh13280_regressionP  s
   
r   c               	   c   s    ddhi} t  }tD ]A\}}||v rq|| ztt|}W n	 ty)   Y qw | }t|D ]\}}|j| 	|t  v sC|j
sDq2||j|fV  q2qd S )Nnbinomn)r!   r   r'   r6   r   r7   _shape_info	enumeratenamerF   integrality)integrality_exceptionsr(   r)   shapesrj   
shape_infoishaper   r   r+   "cases_test_discrete_integer_shapesZ  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   y  s    z'test_integer_shapes.<locals>.<listcomp>r   r   r   r   r   )r6   r   r   r   r   r{   r8   roundr   rA   anyisnanall)r)   	shapenamer   rj   r   shape_namesr   shapes_copyvalid_shapeinvalid_shapenew_valid_shapeabr   rA   r   r   r+   test_integer_shapest  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)matchrx   r   herringpdf)
r#   raisesAttributeErrorr   binomr   logpdf
isinstancer   delattr)message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   r6   r   r{   r|   r   r~   r   interval)r)   r   rj   r   r   r   r   r+   test_interval  s   
&&&r   c                     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[ rx   r   r   rw   r   r   ignore)divider   )r   r/   r   r   r   g      ?r   rW   )rV   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)rB   r   r   r   r+   r     s   
 d   )r.   random_stater   )"r8   r9   default_rngsortsumr   rJ   r   tolistr   r{   r   rA   errstaterB   loginfrC   rD   r   rE   r~   r   r   r   medianmeanstdsqrtvarr   expectentropyr;   )rngra   rb   xk_leftxk_rightcdf2	cdf2_left
cdf2_rightr   r   sf2psint2med2mean2var2skew2kurt2mom3r;   rvs0r   r   r+   test_rv_sample  s   
$,
$$"		 

" r   )5numpy.testingtestingr|   r   numpyr8   r#   scipyr   common_testsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   scipy.stats._distr_paramsr   r   !scipy.stats._distn_infrastructurer   r   rJ   r"   r,   r%   parametrizerU   r\   rt   r   r   r=   r>   rZ   r?   r@   rG   r   r   r   r   r   r   r   r   r   r   r+   <module>   sT    @

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