
    geJM                        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ggz  ZddhZd Z ej!        "                    d e                       d             Z#ej!        "                    de          d             Z$ej!        "                    de          d             Z%ej!        "                    de          d             Z&ej!        "                    de          d             Z'd Z(d Z)d Z*d Z+d Z,d Z-ej!        "                    dg d           ej!        "                    d!e          d"                         Z.ej!        "                    d!e          d#             Z/d$ Z0ej!        "                    d% e0                      d&             Z1d' Z2ej!        "                    d(e          d)             Z3d* 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               #      K   t                      } t          D ]V\  }}|t          v r*t          j        |||t          j        j                  V  n	|||| vfV  |                     |           Wd S )N)marks)setr   distslowpytestparammarkslowadd)seendistnameargs      Elib/python3.11/site-packages/scipy/stats/tests/test_discrete_basic.pycases_test_discrete_basicr.      s      55D%  #x,xhfk>NOOOOOOOC!55555     zdistname,arg,first_casec                    	 t          t          |           }n# t          $ r | }d} Y nw xY wt          j                            d            |j        |ddi}t          j        |          } |j        | \  }}t          |||| dz              t          |||            t          |||| dz              t          ||           d}t          ||||| dz              |rd	}	|j        |j        |j        |j        |j        g}
d
dddd}|                    | d          }t'          ||||	|
           | dk    rt)          |           t+          ||           t-          ||           t/          ||           t1          |||            |j        j        t          j        j        k    rt9          ||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ks                r-   test_discrete_basicrY   $   s   ))) ) ) )() INN7
&*
%$
%
%C9S>>D6<DAq&#tX
%:;;;&#x(((fc4F!2333vs###EVS#u%46 6 6  B V]FJ  aa+,. .JJx##C):EBBB,,,!&)))#FC000vs###vs### 	fc8,,,$(9(BBB!&#u/@AAAAA'B B$ CB    ))zdistname,argc                    	 t          t          |           }n# t          $ r | }d} Y nw xY w |j        |ddi\  }}}}t          |||            t	          |||||            t          ||||            t          |||||            t          ||||||            | dvrt          ||||||            t          |||d           t          |||||z  z   d           d S )Nr1   momentsmvsk)zipf	yulesimonr   r   )
r:   r   r;   r   r   r   r	   r
   r   check_moment_frozen)r+   r,   rP   rR   rS   srX   s          r-   test_momentsrb   O   s)   ))) ) ) )() s3F33JAq!QX... aH---fc1h///VS!Q111fc1aH555,,,&#q!Q999 Q***QqsUA.....rZ   zdist,shape_argsc                 :   | dv }	 t          t          |           }n%# t          $ r | }d| j        d| j        d} Y nw xY wt          j        d          }|j        }g }g }t          |          D ]]}|dz   fd|dz   z  z   }	||         }
|	                    t          j
        |	|
                     |                    d	|	d	                    ^|	                    |           |	                    |j                   t          || |||t
          j        g           d S )
N)	betabinomskellamr_   dlaplacenchypergeom_fisherr9   zrv_discrete(values=(z, z))r   r   )r   r   r   )r:   r   r;   xkpkr<   zerosnumargsrangeappendfullinsertr2   r   int_)dist
shape_args
shape_onlydistfunclocnargsallargsbshaperX   shp	param_vals              r-   test_rvs_broadcastr{   f   sJ     I IJA5$'' A A A@dg@@47@@@A (1++CEGF5\\ ! !1uhq1u%qM	rwsI..///aQ    NN3
MM#( $bgYOOOOOs    >>z	dist,argsc           
         	 t          t          |           }n# t          $ r | }Y nw xY wt          j                            d           t          j                            dd          dt          j                            dd          g} |j        | \  }}|D ]B}t          j	        |dz
  |z   ||z   g |j
        dg|R d|i |j
        d	g|R d|ig           Cd S )
NM r   r   
           ru         ?)r:   r   r;   r<   r=   r>   r6   supportnptassert_array_equalppf)rq   argsrP   re_locs_a_bru   s          r-   test_ppf_with_locr      s   %%    INN7y  b))1bi.?.?2.F.FGGV^T"FB  T#Xr#vVZ,d,,,,,jfj.Mt.M.M.M.M.MN	 	 	 	     ''z
dist, argsc                    	 t          t          |           }n# t          $ r | }Y nw xY wt          j                            d           t          j                            dd          dt          j                            dd          g} |j        | \  }}|D ]F}||z   |dz
  |z   f} |j        dg|R d|i |j        d	g|R d|if}t          j
        ||           Gt          j                            ddd
          t          j        d
          t          j                            ddd
          g} |j        | \  }}|D ]F}||z   |dz
  |z   f} |j        dg|R d|i |j        d	g|R d|if}t          j
        ||           Gd S )Nr}   r~   r   r   r   r   r   ru   r   )   r   r2   )r:   r   r;   r<   r=   r>   r6   r   isfr   r   rj   )	rq   r   rP   r   r   r   ru   expectedress	            r-   test_isf_with_locr      s   %%    INN7y  b))1bi.?.?2.F.FGGV^T"FB . .8R!Vc\)fj,d,,,,,jfj.Ld.L.L.L.L.LLx----y  bv 66xy  BV 446G V^T"FB . .8R!Vc\)fj,d,,,,,jfj.Ld.L.L.L.L.LLx----. .r   c                     | j         |g|R  }|dt          j        |          z  z
  }t          j         | j        |g|R  ||dz              t          j         | j         | j         |g|R  dz
  g|R  ||dz              t          | d          sW | j        | \  }}|||k              }t          j         | j         | j         |g|R  dz   g|R  || j        z   |dz              d S d S )N   z
-roundtrip:0yE>rh   z ppf-cdf-next)	rG   r<   spacingr   r   r   hasattrr   inc)	rP   r,   rQ   msgcdf_supp	cdf_supp0r   r   supp1s	            r-   rA   rA      sa    vz$%%%%H 2bj2222I:6:i6#666|!35 5 5 :6:jfj&<&<&<&<t&CJcJJJ|!35 5 5 64   J%BTBYzvz*&*U*AS*A*A*AD*HO3OOO$vz133H	J 	J 	J 	J 	JJ Jr/   c           	      P   t          | d          r| j        }n>t           | j        dg|R  dz
            }t	          t          ||dz                       } | j        |g|R  } | j        |g|R                                  }d\  }}|dk    rd\  }}t          j
        ||d         z
  ||d         z
  ||	           t          j        |          }	|	d d
         t          j        |	          dz  z   }
t          j         | j        |
g|R  d           d} | |d|i}t          j
        |                    |	dd          |z             t          j        |                    |	|z                                  t          j        |                    |
|z             d           d S )Nrh   r3   r   r   )绽|=r   re   )h㈵>r   r   atolrtolr   r         ?ru   )r   rh   intr   listrl   rG   rE   cumsumr   r   r<   asarraydiffassert_equal)rP   r,   r+   indexstartindcdfspmfs_cumr   r   rX   	k_shiftedru   rq   s                r-   rB   rB      s   vt 5	zvz$----122U8X]33446:e"c"""Dvz%&#&&&--//HJD$9
dtAw8A;(>!. . . . 	
5A#2#A%IZVZ	0C000!444 C6C c  D122--rwtxxC7H7H/I/IJJJTXXi#o..22222r/   c                 b    t          j         | |                     |          |dd           d S )Nr   r   )r   r   moment)rP   r,   rR   rX   s       r-   r`   r`      sC    ++A.."0 0 0 0 0 0r/   c                    t          j         | j        |g|R  d | j        |g|R  z
  dd           t	          j        ddd          }t          j         | j        |g|R   | j        d|z
  g|R  dd            | j        dg|R  }t          j         | j        |dz
  g|R  dk               t          j         | j        |dz   g|R  dk               d S )	Nr   r   r   r3   Gz?   r   r   )	r   r   sfrG   r<   linspacer   r   assert_)rP   r,   rQ   r   q	median_sfs         r-   rC   rC      s1   		$----rJFJt4Jc4J4J4J/J"0 0 0 0 	D$##A

1+s+++ZVZQ-E-E-E-E"0 0 0 0 
3%%%%IK		)a-.#...4555K

9q=/3///#566666r/   c                 p   d} | j         | \  }}t          t          |d                    }t          t          |d                    dz   }	t	          ||	          }
d}|g}g }|
D ]V} | j        |g|R  }||z
  |dz
  k    r:|                    |           |                    ||z
             |}|d|z
  k    r nW|d         |k     r-|                    |           |                    d|z
             t          j        |          }t          j        |          }|dz   }||d<   t          j	        ||          \  }}t          j        t          j        |          t          |          |z            \  }}t          j        ||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+=r   r   zchisquare - test for z
 at arg = z with pval = N)r   r   maxminrl   rG   rm   r<   array	histogramr   	chisquarelenr   r   str)rP   r,   r?   rT   r   wsuppr   r   lohighdistsupportlastdistsuppdistmassiicurrenthistsuppfreqhsuppchispvals                        r-   rD   rD      s   $ E V^S!FB	SU^^		Bs2t}}!DD//KDtHH  &*R&#&&&T>UU]**OOBOOGdN+++D!e)$$|bD!!!x!!Hx!!H $HHQK ,sH--KD%$S(1BCCJD$Kuc#hhhhD			+, , , , ,r/   c                 N    | j         t          j        d| j         v           d S d S )Nscale)__doc__r   r   )rP   s    r-   rK   rK   4  s/    ~!G6>122222 "!r/   method)rE   rF   rG   rH   r   rI   r   r   zdistname, argsc                    	 t          t          |          n# t          $ r Y d S w xY w| dv rddg}nddg}d |D             }ddg} j        |g|R d|i}t	          j        |fdt          |g||R  D             d	d	
           d S )N)r   r   r   r   r   r   c                     g | ]}|gd z  	S )r   r   ).0ps     r-   
<listcomp>z+test_methods_with_lists.<locals>.<listcomp>H  s    			A1#a%			r/   ru   c                 $    g | ]} j         | S r   )rE   )r   rS   rq   s     r-   r   z+test_methods_with_lists.<locals>.<listcomp>L  s!    @@@!1@@@r/   V瞯<)r   r   )r:   r   r;   rE   r   r   zip)r   r+   r   zp2ru   resultrq   s          @r-   test_methods_with_listsr   :  s    uh''   #JF					Ba&CTXa&"&&&#&&F@@@@s1/?r/?3/?/?/?@@@"0 0 0 0 0 0s    
''c                     t          t          |           }t          j        dd          } |j        |g|R  }t          j        }t          j        ||           d S )Nr   )r:   r   r<   arangerG   nanr   r   )r+   r   rq   xvalsr   s         r-   test_cdf_gh13280_regressionr   P  s]     5(##D
	"bA48ADvHT8$$$$$r/   c               #     K   ddhi} t                      }t          D ]\  }}||v r
|                    |           	 t          t          |          }n# t
          $ r Y Bw xY w|                                }t          |          D ]B\  }}|j        | 	                    |t                                v s|j
        s6||j        |fV  Cd S )Nnbinomn)r#   r   r)   r:   r   r;   _shape_info	enumeratenamerJ   integrality)integrality_exceptionsr*   r+   shapesrq   
shape_infoishapes           r-   "cases_test_discrete_integer_shapesr   Z  s      '.55D( / /&t	5(++DD 	 	 	H	 %%''
!*-- 	/ 	/HAu
488355IIII) JEJ.....	// /s   A
A A zdistname, shapename, shapesc                    t          t          |           }|                                }d |D             }|                    |          }t	          |          }||         }|dz
  }	|dz
  }
|g|	g|
gg||<    |j        | \  }}t          j        t          j        ||d                    } |j	        |g|R  }t          j
        t          j        |dd d f                             rJ t          j        t          j        |dd d f                             sJ t          j
        t          j        |dd d f                             rJ d S )Nc                     g | ]	}|j         
S r   )r   )r   r   s     r-   r   z'test_integer_shapes.<locals>.<listcomp>y  s    666%5:666r/   r   r   r   r   r   )r:   r   r   r   r   r   r<   roundr   rE   anyisnanall)r+   	shapenamer   rq   r   shape_namesr   shapes_copyvalid_shapeinvalid_shapenew_valid_shapeabr   rE   s                  r-   test_integer_shapesr  t  sZ    5(##D!!##J66:666K)$$Av,,K)K#%M!AoO"mm_6GHKN4< DAq
Q1%%&&A
$(1
#{
#
#
#Cvbhs1aaa4y))*****6"(3q!!!t9%%&&&&&vbhs1aaa4y))*******r/   c                     d} t          j        t          |           5  t          j        dd          j         d d d            n# 1 swxY w Y   t          j        t          |           5  t          j        dd          j         d d d            n# 1 swxY w Y   dt          j        _        t          j        dd          }t          |t                    sJ t          t          j        d           d S )Nz,'rv_discrete_frozen' object has no attribute)matchr   r   herringpdf)
r%   raisesAttributeErrorr   binomr  logpdf
isinstancer   delattr)messagefrozen_binoms     r-   test_frozen_attributesr    sP    =G	~W	5	5	5 ! !B  ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	~W	5	5	5 $ $B##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $EKO;r3''Ll$677777EKs#   AA	A	+BBBzdistname, shapesc                 f   t          | t                    rt          t          |           }n| } |j        | \  }}t          j         |j        ddgg|R  |dz
  |f           t          j         |j        ddgg|R  |dz
  |f           t          j         |j	        dg|R  |dz
  |f           d S )Nr   r   )
r  r   r:   r   r   r   r   r   r   interval)r+   r   rq   r   r  s        r-   test_intervalr    s     (C   uh''4< DAqXTXq!f.v...1a999XTXq!f.v...1a999]T]1.v...1a99999r/   c            	      X   t           j                            d          } t          j        |                     d          dz            }|                     d          }|t          j        |          z  }t          j        ||f          t          j        dg|d d                                         z             |z   dz  }t          j        |dd                                          |d         dz   gz             |z   dz  }t          j	        |          }t          j        dg|d d                                         z             |z   dz  }t          j        |dd                                          dgz             |z   dz  }
                                \  }}	t          ||d                    t          |	|d                    t                              |          |           t                              |          d           t                              |          d           t          j        d	          5  t                              |          t          j        |                     t                              |          t           j                    t                              |          t           j                    d d d            n# 1 swxY w Y   t                              |          |           t                              |          |           t                              |          dg|d d                                         z              t          j        d	          5  t                              |          t          j                            |                    d
           t                              |          t          j                            |                    d
           t                              |          t          j                            |                    d
           d d d            n# 1 swxY w Y   t                              |          d                    |          z
             t                              |          d                    |          z
             t                              |          d                    |          z
             t          j        d	          5  t                              |          t          j                            |                    d
           t                              |          t          j                            |                    d
           t                              |          t          j                            |                    d
           d d d            n# 1 swxY w Y   t                              |          |           t                              |          |           t                              |          d d         |dd                     t                              d          |dz
             t                              d          |	                               |          }
t                              |
          |           t                              d|z
                                |                     t                              d|z
                                |                     t                              d          |	           t                              d          |dz
             t          j        ddd          }                    |dz                                |dz            f}t                              d|z
            |           t                              d                                                     t                              d          |dz
  |	f                               d          }t                                          |           t          j        ||z            }t          j        ||z
  dz  |z            }t          j        ||z
  dz  |z            |dz  z  }t          j        ||z
  dz  |z            |dz  z  dz
  }t                                          |           t                                          t          j        |                     t                                          |           t                              d          ||||f           t          j        |dz  |z            }t                              d          |           t                              d           d           t                                          |           t                              d           |           t          j        d	          5  t                              fd                                                       d d d            n# 1 swxY w Y   t           j                            d          } !                    d|           }t           j                            d          }                     |                     d                    }t          ||           d S )Nl   KU[ r   r   r   r   r   r   ignore)divider   )r   r3   r   r   r   g      ?r   r]   )r\   c                     dS )Nr   r   r   s    r-   <lambda>z test_rv_sample.<locals>.<lambda>  s    ! r/   c                     | dz  S )Nr   r   r  s    r-   r  z test_rv_sample.<locals>.<lambda>  s
    !Q$ r/   c                 .                         |           S )N)rF   )r   rq   s    r-   r  z test_rv_sample.<locals>.<lambda>  s    t{{1~~ r/   d   )r2   random_stater   )"r<   r=   default_rngsortsumr   rN   r   tolistr   r   r   rE   errstaterF   loginfrG   rH   r   rI   r   r   r   r  medianmeanstdsqrtvarr   expectentropyr?   )rngrh   ri   xk_leftxk_rightcdf2	cdf2_left
cdf2_rightr   r  sf2psint2med2mean2var2skew2kurt2mom3r?   rvs0rq   s                        @r-   test_rv_sampler;    s
    )


,
,C	B"$	%	%B	BB"&**BRH---D xb"gnn...//"4a7GABBBrF1H:566;Q>H 9R==D1#SbS	 0 0 2 2233d:A=I(48??,,s233d:A=J <<>>DAqAr!uAr"v DHHRLL"%%%DHHX&&***DHHW%%q))) 
H	%	%	% 7 7B444H--w777G,,rvg6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 DHHRLL$'''DHHX&&---DHHW%%s49+;+;+=+='=>>>	H	%	%	% $ $B)=)="	$ 	$ 	$ 	$H--rvdhhx6H6H/I/I"	$ 	$ 	$ 	$G,,bfTXXg5F5F.G.G"	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ DGGBKK488B<<000DGGH%%q(););';<<<DGGG$$a(9(9&9:::	H	%	%	% $ $

2twwr{{(;(;"	$ 	$ 	$ 	$

8,,bfTWWX5F5F.G.G"	$ 	$ 	$ 	$

7++RVDGGG4D4D-E-E"	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ DHHTNNB'''DHHY'',,,DHHZ(("-r!""v666DHHQKKQ'''DHHQKK### ''"++CDHHSMM2&&&DHHQy[))488I+>+>???DHHQz\**DHHZ,@,@AAADHHQKK###DHHQKKQ''' 
T4	$	$B88BqD>>488BqD>>)DDMM!B$''...DMM!$$dkkmm444DMM!$$qsAh/// 88C==DDKKMM4((( F2b5MME62:/B&''DFBJ?R'((4#;6EFBJ?R'((472Q6EDIIKK'''DHHJJ...DHHJJ%%%DJJvJ..eU0KLLL 62q5B,DDKKNND))) DKK,,a000DKKMM5)))DKK//666 
H	%	%	% P P%=%=%=%=>>>OOOP P P P P P P P P P P P P P P )


,
,C
((#(
.
.C
)


,
,C88CJJCJ(())DCsK   BK**K.1K.CQ<<R R CX22X69X6:lll)5numpy.testingtestingr   r   numpyr<   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   rN   r$   r.   r'   parametrizerY   rb   r{   r   r   rA   rB   r`   rC   rD   rK   r   r   r   r  r  r  r;  r   r/   r-   <module>rD     s         ) ) ) ) ) )           , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , D C C C C C C C @ @ @ @ @ @***+ #%#4000"56 6 |$   24M4M4O4OPP'B 'B QP'BT 66/ / 76/, *L99!P !P :9!PH l33  43  |44. . 54.0J J J23 3 360 0 0
7 7 75, 5, 5,p3 3 3  $A $A $A B B)<880 0 98B B0& )?;;% % <;%/ / /4 6;;==? ?+ +? ?+,      +\::: : ;::s s s s sr/   