o
    gbN                     @   s  d dl 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 d dlZd dlmZmZmZmZ d dlm
Z d dlmZ d dlmZ e jdg dd	d
 Ze jdddgdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'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.d/d0 Z/d1d2 Z0d3d4 Z1d5d6 Z2e j3d7d8d9 Z4G d:d; d;Z5G d<d= d=Z6e jd>g d?g d@gdAdB Z7dCdD Z8dS )E    N)	betabinom	hypergeom
nhypergeom	bernoulli	boltzmannskellamzipfzipfianbinomnbinomnchypergeom_fishernchypergeom_walleniusrandint)assert_almost_equalassert_equalassert_allclosesuppress_warnings)r
   )root_scalar)quadzk, M, n, N, expected, rtol))   
         g<<?V瞯<)k   '       g?r   )r   r   r   r   gS;绽|=c                 C   "   t | |||}t|||d d S Nrtol)r   cdfr   kMnNexpectedr"   p r+   d/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/scipy/stats/tests/test_discrete_distns.pytest_hypergeom_cdf   s   r-   )   r   r   r   g?r   )}   r   r   r   g!:<r   c                 C   r   r    )r   sfr   r$   r+   r+   r,   test_hypergeom_sf   s   r1   c            
      C   s   d} d}d}d}t | |||}t ||  ||| |}t ||  |||| }t | |||}t||dd t||dd t||dd d} d}d}d}t | |||}t| || }	t||	dd d S )Nr   2   r      )decimal      )r   logpmfr   r   )
r%   r(   Kr'   logpmf1logpmf2logpmf3logpmf4hypergeom_logpmfbernoulli_logpmfr+   r+   r,   test_hypergeom_logpmf)   s$   r?   c                  C   sh   d\} }}d}t || ||}t|| ||| d | | |d   | || d   }t||dd d S )N)-            r5   g|=r!   )r   pmfr   r   )r&   r'   rr%   NHGHGr+   r+   r,   test_nhypergeom_pmfC   s
   
8rH   c                  C   sb   d} d}d}t |d }t|| ||}t|| ||}t|g ddd t|g ddd d S )	NrB   r   r   r5   )$I$I?g۶m۶m?m۶m?rJ   vIh%<=r!   )rI   $I$I?g%I$I?      ?)nparanger   rD   r#   r   )r&   r'   rE   supportrD   r#   r+   r+   r,   test_nhypergeom_pmfcdfL   s   rQ   c                  C   sF   d} d}d}t g dg dg| ||}t|g dg dgdd	 d S )
Nr   r   r   )r   r5      r   )r5   rR   r   r   )r5   r   r   r5   )r   r   r5   r   rK   r!   )r   rD   r   )r&   r'   rE   rD   r+   r+   r,   test_nhypergeom_r0X   s
   rS   c                  C   s0   t jdg ddgdggdd} | jdksJ d S )N   )r6   rB   	   r3   rA   r   r5   rR   r   size)r   rvsshape)xr+   r+   r,   test_nhypergeom_rvs_shapea   s   r\   c                  C   sV   t jd tjddddd} t jd t jjdd}t|ddd}t| | d S )Nr   rT   r6      d   rW   )rN   randomseedr   rY   uniformppfr   )r[   r*   yr+   r+   r,   test_nhypergeom_accuracyi   s   rd   c                  C   s   t dd} d}t| d|}| dk}t|| t d}d}t| ||}g d}t||d	d
 t| ||}g d}t||d	d
 d S )Nr   r5   grh|?r   rR   r   )r   r   r   $I$I?rL   g$I$I?r   r   rK   r!   )r   r   r   rf   g۶m۶m?r5   r5   r5   )rN   rO   r   rD   r   logr   r#   )r%   r(   r*   r)   lamcr+   r+   r,   test_boltzmann_upper_boundt   s   

rj   c                  C   sJ   d} t | d }t| dd|}t d| d  | d }t|| d S )N   r5   )rN   rO   r   rD   repeatr   )r'   r%   r*   r)   r+   r+   r,   test_betabinom_a_and_b_unity   s
   rm   c                  C   sH   d} d}t d}td| ||}t| | |  |}t|| d S )Ngffffff@g)\(?rR   r5   )rN   rO   r   rD   r   r   )abr%   r*   r)   r+   r+   r,   test_betabinom_bernoulli   s   
rp   c                  C   $   d\} }}t tj| ||dd d S )N)g?r   r5   
confidencer'   r*   r   r   )r   r   intervalalphar'   r*   r+   r+   r,   test_issue_10317      
rx   c                  C   rq   )N)gffffff?r   r   rr   rt   )r   r
   ru   rv   r+   r+   r,   test_issue_11134   ry   rz   c                   C   sT   t jd ttt jdddd ttdddd ttdddd d S )Nr   r         ?r5   )rN   r_   r`   r   r
   rb   randr+   r+   r+   r,   test_issue_7406   s   r~   c                  C   sv   d} t jjddd}d}t||| }t|d t ddd}t||| }t|d d}t||| }t|| d S )	Nr   r^   r   rW   r|   {Gz?gGz?r5   )rN   r_   r   r
   rb   r   linspace)r*   r'   r[   rb   r+   r+   r,   test_issue_5122   s   

r   c                   C   s"   t tdtdddd d S )N  re   ir   r   )r   r
   rN   logspacerb   r+   r+   r+   r,   test_issue_1603      "r   c                  C   s2   d} t ddd}tt|d| | ddd d S )Nr{   r      r3   rR   r   )atol)rN   r   r   r
   r#   )r*   r[   r+   r+   r,   test_issue_5503   s    r   zx, n, p, cdf_desired)	)i,  r   333333?g24?)r   r   r   gU7i(?)i0u  i r   gέ̑?)i i@B r   g8@
?)i- 逖 r   gf(G?)i r   gwtg ?)ir   r   gV}ֈ?)ipr   r   gz̍?)i0 r   r   gnC:c                 C   s   t t| ||| d S Nr   r
   r#   )r[   r'   r*   cdf_desiredr+   r+   r,   test_issue_5503pt2   s   r   c                   C      t tdddd d S )NrR   l    J)g-q=gB.+n?r   r+   r+   r+   r,   test_issue_5503pt3   s   r   c                   C   r   )N   r2   gAA?g_[Cˮi8)r   r   r0   r+   r+   r+   r,   test_issue_6682   s   r   c                  C   s$   d} d}d}t t|| |d d S )Nr   r   i          )r   r
   rD   )r'   r*   r%   r+   r+   r,   %test_boost_divide_by_zero_issue_15101   s   r   zignore::RuntimeWarningc                  C   s,   g d} t d| | }g d}t|| d S )N)	r5   r   r^   r   i  i  i  i  ip  r   )	g>l?gzo?gVrRs?g$?gVWCW?g4yB?g4.?g.Lr?gD?)r   r#   r   )mur#   cdf_expectedr+   r+   r,   test_skellam_gh11474   s   r   c                   @   sl   e Zd Zdd Zdd Zdd Zejd e	e
dd	d
ejddd
fjZejdedd ZdS )TestZipfianc                 C   s   d}d}t dd}tt|||t|| tt|||t|| tt|||t|| ttj||ddtj|dd d S )Ng      @r   r5      msvkmoments)	rN   rO   r   r	   rD   r   r#   r0   stats)selfrn   r(   r%   r+   r+   r,   test_zipfian_asymptotic   s   z#TestZipfian.test_zipfian_asymptoticc                 C   s   d\}}d}t d|d }tt|||t|||dd tt|||t|||dd tt|||t|||dd ttj||ddtj||dddd d S )N)gG?g1  ?   r5   gƠ>r!   r   r   )rN   rO   r   r	   rD   r#   r0   r   )r   alt1agt1r(   r%   r+   r+   r,   test_zipfian_continuity  s   
z#TestZipfian.test_zipfian_continuityc                 C   s   t jd t jjdddd}t jdd d }t jjdddd}g d}g d}tt|||dd  |dd  d	d
 tt|||dd  |dd  dd
 d S )Nr   r5   rk   r   rW   r^   )
gĹԨ?gءk>	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?)
gaj?gZk=?r   g?g90?gɸU?rM   gJ_9?g2h2-?gB0?ư>r!   g-C6
?)	rN   r_   r`   r   r}   r   r	   rD   r#   )r   r%   rn   r'   rD   r#   r+   r+   r,   test_zipfian_R  s   (,zTestZipfian.test_zipfian_Rr   r5   r   rR   (   za, nc                    s   t jdd  t j fdd}t |d }||||}t |}t j||d}t j|| d |d}|d }	t j|| |	 d	 |d}
t j|| |	 d
 |dd	 }tt|||| tt|||| ttj	||dd|||
|g d S )Nc                 S   s   dt d| d |   S )z$Naive implementation of harmonic sumr5   )rN   rO   sum)r'   sr+   r+   r,   Hns6  s   z+TestZipfian.test_zipfian_naive.<locals>.Hnsc                    s*   | dk s| |kr
dS d| |   || S )z#Naive implementation of zipfian pmfr5   r   r+   )r%   rn   r'   r   r+   r,   pzip;  s   z,TestZipfian.test_zipfian_naive.<locals>.pzipr5   )weightsrR   r{   r   r   mvskr   )
rN   	vectorizerO   cumsumaverager   r	   rD   r#   r   )r   rn   r'   r   r%   rD   r#   meanvarstdskewkurtosisr+   r   r,   test_zipfian_naive2  s"   


zTestZipfian.test_zipfian_naiveN)__name__
__module____qualname__r   r   r   rN   r_   r`   vstackr   r   Tnaive_testspytestmarkparametrizer   r+   r+   r+   r,   r      s    r   c                   @   s   e Zd Zejd dZdZejjdeedZ	ejjdeedZ
e	e
 ZejdeejdZedee
 Zeee	ZejeeejdZejjej d Zejddd	gd
d Zdd Zdd Zdd Zejddd	gdd ZdS )TestNCHrR   rR   r   r   r^   r5   rW   r   	dist_namer   r   c                 C   sX   t td}|| }| j| j| j| jf\}}}}t|j||||ddt|||| d S )Nr   r   r5   )odds)	r   r   r[   r(   m1r'   r   rD   r   )r   r   distsdistr[   r(   r   r'   r+   r+   r,   test_nch_hypergeom_  s   zTestNCH.test_nch_hypergeomc           
      C   s   | j | j| j| j| jf\}}}}}tjdd }||||||\}}}	tt	|||||| ttj
||||dd| ttj
||||dd|	 d S )Nc                    s   | t d t fdd  fdd}|d}|d}|d} | | }	|| }
|| || d  }|	|
|fS )Nr   c                    s(   t  | }t |  }|| |   S r   )special_binom)r[   t1t2r   m2r'   wr+   r,   fv  s   
zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.fc                    s"   t  fddtd D S )Nc                 3   s     | ]} ||  V  qd S r   r+   ).0rc   )r   r%   r+   r,   	<genexpr>|  s    zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>r5   )r   ranger%   )r   xlxur   r,   P{  r   zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.Pr5   rR   rN   maximumminimum)r[   r(   r   r'   r   r   P0P1P2rD   r   r   r+   )r   r   r   r'   r   r   r   r,   pmf_mean_varo  s   
z;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_varmr   v)r[   r(   r   r'   r   rN   r   r   r   rD   r   )
r   r[   r(   r   r'   r   r   rD   r   r   r+   r+   r,   test_nchypergeom_fisher_naivek  s   "
z%TestNCH.test_nchypergeom_fisher_naivec              	      s  t jd d}d}t jjd||d}t jjd||d}|| }tjd||jd}t d|| }t ||}tj|||jd}	t jj|	j d }
dd t j	fd	d
 t
 !}|jtdd tt||||
 ||||
dd W d    n1 s}w   Y  t j	 fdd}t
 #}|jtdd ttj||||
dd|||||
dd W d    n1 sw   Y  t j	fdd}||	||||
}t|	||||
}d\}}t || ||t |  k }| t |d ksJ t||  ||  ||  |
|  D ]9\}}}}
|| }||||
\}}t ||d }	||	||||
 dk s1J tt|	||||
 d qd S )NrR   r   r^   r5   rW   r   c                 S   s,   | | }t d|| }t ||}||fS )Nr   r   )r(   r   r'   r   r   r   r   r+   r+   r,   rP     s   z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.supportc                    s>   |   |  \}} fdd}t |||fdjS )Nc                    s    |   d|      d S Nr5   r+   )ur   r+   r,   fun  s    zCTestNCH.test_nchypergeom_wallenius_naive.<locals>.mean.<locals>.fun)bracket)r   root)r(   r   r'   r   r   r   r   rP   r   r,   r     s   z6TestNCH.test_nchypergeom_wallenius_naive.<locals>.meanz!invalid value encountered in mean)messageg{Gz?r!   c                    sZ   | | } | |||}|||  }|| || |  }| | | | d || ||    S r   r+   )r(   r   r'   r   r   r   rn   ro   )r   r+   r,   variance  s
   $z:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variancer   r   g?c                    sH   | |\}}fdd  fdd}|S )Nc                    sH         }d| |    d| d|      }|S r   r+   )tDres)r   r   r'   r   r[   r+   r,   	integrand  s   ,zHTestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.integrandc                    s:   t | }t |  }t ddddd}|| |d  S )Nr   r5   gؗҜ<)epsrelepsabs)r   r   )r[   r   r   the_integral)r   r   r   r'   r+   r,   r     s   
z@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.fr+   )r[   r(   r   r'   r   r   r   r   r   )r   r   r   r'   r   r[   r,   rD     s
   z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf)r   r   r{   )rN   r_   r`   r   rY   rZ   r   r   r}   r   r   filterRuntimeWarningr   r   r   r   rD   absr   prodziprO   )r   rZ   max_mr   r   r(   r'   r   r   r[   r   supr   rD   pmf0pmf1r   r"   ir+   )r   rP   r,    test_nchypergeom_wallenius_naive  s`   		 2 z(TestNCH.test_nchypergeom_wallenius_naivec           	      C   s   d}d}d}d}t d}t g d}d}d}tt||||||d	d	d
 tt|||||d	d tt|||||dd d S )Nr2   r   rk   g      @r   )g9T;gr<gD,P=g4 V=g'	,=gCG>gyztj>gt>g+k?g MeGD?gqNZVɒo?gc2n?g~ZN?gE}?Y?g?g·aQ?g]??gr)?gp{?g39	y?g m>?gJ򕴝-@gih@rK   )r"   r   r!   gdy=)rN   rO   arrayr   r   rD   r   r   )	r   r&   r'   r(   r   r   rD   r   r   r+   r+   r,   test_wallenius_against_mpmath  s"   

z%TestNCH.test_wallenius_against_mpmathc                 C   sD   t td}|| }|jdddgdggg ddd}|jdks J d S )	Nr   r2   r   r   rk   )r{   rM   g       @rV   rW   )r   r   rY   rZ   )r   r   r   r   r[   r+   r+   r,   test_rvs_shape  s    zTestNCH.test_rvs_shapeN)r   r   r   rN   r_   r`   rZ   r   r   r   r   r(   rY   r'   r   r   r   r   r[   r}   r   r   r   r   r   r   r   r   r   r+   r+   r+   r,   r   Q  s.    

"\*r   zmu, q, expected)r   x   g@	#)i  r   g"qVUc                 C   s.   d}||||   }}t t|||| d S )Nrk   )r   r   logcdf)r   qr)   rX   r'   r*   r+   r+   r,   test_nbinom_11465   s   r  c                  C   s`   t ddd} d}t|| }| d dk}t|d | t|d d|  t||  d d S )Nr   r5   r]   g?r|   )rN   r   r   rD   r   r   )r[   r*   rD   r   r+   r+   r,   test_gh_17146-  s   r  )9r   scipy.statsr   r   r   r   r   r   r   r	   r
   r   r   r   r   numpyrN   numpy.testingr   r   r   r   scipy.specialr   scipy.optimizer   scipy.integrater   r   r   r-   r1   r?   rH   rQ   rS   r\   rd   rj   rm   rp   rx   rz   r~   r   r   r   r   r   r   r   filterwarningsr   r   r   r  r  r+   r+   r+   r,   <module>   sb    <

		

	


V P

