a
    QeO                     @   s  d dl Z 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(e jdej)e*e+fgd   d!d" Z,d#d$ Z-d%d& Z.d'd( Z/d)d* Z0d+d, Z1d-d. Z2d/d0 Z3e jd1g d2d3d4 Z4d5d6 Z5d7d8 Z6d9d: Z7d;d< Z8G d=d> d>Z9G d?d@ d@Z:e jdAg dBg dCgdDdE Z;dFdG Z<dS )H    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   s"   t | |||}t|||d d S Nrtol)r   cdfr   kMnNexpectedr!   p r*   Z/var/www/sunrise/env/lib/python3.9/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   s"   t | |||}t|||d d S r   )r   sfr   r#   r*   r*   r+   test_hypergeom_sf!   s    r0   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   Zlogpmfr   r   )
r$   r'   Kr&   Zlogpmf1Zlogpmf2Zlogpmf3Zlogpmf4Zhypergeom_logpmfZbernoulli_logpmfr*   r*   r+   test_hypergeom_logpmf+   s$    r7   c                  C   sh   d\} }}d}t || ||}t|| ||| d | | |d   | || d   }t||dd d S )N)-            r4   g|=r    )r   pmfr   r   )r%   r&   rr$   ZNHGZHGr*   r*   r+   test_nhypergeom_pmfE   s
    
8r>   c                  C   sb   d} d}d}t |d }t|| ||}t|| ||}t|g ddd t|g ddd d S )	Nr:   r   r   r4   )$I$I?g۶m۶m?m۶m?r@   vIh%<=r    )r?   $I$I?g%I$I?      ?)nparanger   r<   r"   r   )r%   r&   r=   supportr<   r"   r*   r*   r+   test_nhypergeom_pmfcdfN   s    rG   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   r4      r   )r4   rH   r   r   )r4   r   r   r4   )r   r   r4   r   rA   r    )r   r<   r   )r%   r&   r=   r<   r*   r*   r+   test_nhypergeom_r0Z   s
    rI   c                  C   s0   t jdg ddgdggdd} | jdks,J d S )N   )r5   r:   	   r2   r9   r   r4   rH   r   size)r   rvsshape)xr*   r*   r+   test_nhypergeom_rvs_shapec   s    rR   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   rJ   r5      d   rM   )rD   randomseedr   rO   uniformppfr   )rQ   r)   yr*   r*   r+   test_nhypergeom_accuracyk   s    rZ   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   r4   grh|?r   rH   r   )r   r   r   $I$I?rB   g$I$I?r   r   rA   r    )r   r   r   r\   g۶m۶m?r4   r4   r4   )rD   rE   r   r<   r   logr   r"   )r$   r'   r)   r(   Zlamcr*   r*   r+   test_boltzmann_upper_boundv   s    

r_   c                  C   sJ   d} t | d }t| dd|}t d| d  | d }t|| d S )N   r4   )rD   rE   r   r<   repeatr   )r&   r$   r)   r(   r*   r*   r+   test_betabinom_a_and_b_unity   s
    rb   dtypesr   c                 C   sB   | \}}}|d|d|d  }}}t tj|||ddd d S )Nr   rH   r   r$   Zmomentsgaa)r   r   stats)rc   Zn_typea_typeb_typer&   abr*   r*   r+   -test_betabinom_stats_a_and_b_integers_gh18026   s    
rj   c                  C   sH   d} d}t d}td| ||}t| | |  |}t|| d S )Ngffffff@g)\(?rH   r4   )rD   rE   r   r<   r   r   )rh   ri   r$   r)   r(   r*   r*   r+   test_betabinom_bernoulli   s    
rk   c                  C   s$   d\} }}t tj| ||dd d S )N)g?r   r4   
confidencer&   r)   r   r   )r   r   intervalalphar&   r)   r*   r*   r+   test_issue_10317   s    
rr   c                  C   s$   d\} }}t tj| ||dd d S )N)gffffff?r   r   rl   rn   )r   r
   ro   rp   r*   r*   r+   test_issue_11134   s    
rs   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         ?r4   )rD   rU   rV   r   r
   rX   randr*   r*   r*   r+   test_issue_7406   s    rw   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   rT   r   rM   ru   {Gz?gGz?r4   )rD   rU   r   r
   rX   r   linspace)r)   r&   rQ   rX   r*   r*   r+   test_issue_5122   s    

rz   c                   C   s"   t tdtdddd d S )N  r[   irx   r   )r   r
   rD   logspacerX   r*   r*   r*   r+   test_issue_1603   s    r}   c                  C   s2   d} t ddd}tt|d| | ddd d S )Nrt   r      r2   rH   rx   )atol)rD   r|   r   r
   r"   )r)   rQ   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"   )rQ   r&   r)   Zcdf_desiredr*   r*   r+   test_issue_5503pt2   s    r   c                   C   s   t tdddd d S )NrH   l    J)g-q=gB.+n?r   r*   r*   r*   r+   test_issue_5503pt3   s    r   c                   C   s   t tdddd d S )N   r1   gAA?g_[Cˮi8)r   r   r/   r*   r*   r*   r+   test_issue_6682   s    r   c                  C   s$   d} d}d}t t|| |d d S )Nr{   rx   i          )r   r
   r<   )r&   r)   r$   r*   r*   r+   %test_boost_divide_by_zero_issue_15101   s    r   c                  C   s,   g d} t d| | }g d}t|| d S )N)	r4   r   rT   r{   i  i  i  i  ip  r   )	g>l?gzo?gVrRs?g$?gVWCW?g4yB?g4.?g.Lr?gD?)r   r"   r   )mur"   Z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   r4      msvkrd   )	rD   rE   r   r	   r<   r   r"   r/   re   )selfrh   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  ?   r4   gƠ>r    r   rd   )rD   rE   r   r	   r<   r"   r/   re   )r   Zalt1Z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   r4   r`   r   rM   rT   )
gĹԨ?gءk>	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?)
gaj?gZk=?r   g?g90?gɸU?rC   gJ_9?g2h2-?gB0?ư>r    g-C6
?)	rD   rU   rV   r   rv   r   r	   r<   r"   )r   r$   rh   r&   r<   r"   r*   r*   r+   test_zipfian_R   s    (zTestZipfian.test_zipfian_Rr   r4   r   rH   (   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 sumr4   )rD   rE   sum)r&   sr*   r*   r+   Hns@  s    z+TestZipfian.test_zipfian_naive.<locals>.Hnsc                    s.   | dk s| |krdS d| |   || S dS )z#Naive implementation of zipfian pmfr4   r   Nr*   )r$   rh   r&   r   r*   r+   pzipE  s    z,TestZipfian.test_zipfian_naive.<locals>.pzipr4   )weightsrH   rt   r   r   Zmvskrd   )
rD   	vectorizerE   ZcumsumZaverager   r	   r<   r"   re   )r   rh   r&   r   r$   r<   r"   meanvarZstdZskewZkurtosisr*   r   r+   test_zipfian_naive<  s"    


zTestZipfian.test_zipfian_naiveN)__name__
__module____qualname__r   r   r   rD   rU   rV   Zvstackr|   r   TZ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 )TestNCHrH   rH   r   r   rT   r4   rM   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   r4   )odds)	r   r   rQ   r'   m1r&   r   r<   r   )r   r   distsdistrQ   r'   r   r&   r*   r*   r+   test_nch_hypergeomi  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)rQ   t1t2r   m2r&   wr*   r+   f  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*   ).0rY   )r   r$   r*   r+   	<genexpr>      zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>r4   )r   ranger$   )r   xlxur   r+   P  s    zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.Pr4   rH   rD   maximumminimum)rQ   r'   r   r&   r   r   ZP0ZP1ZP2r<   r   r   r*   )r   r   r   r&   r   r   r   r+   pmf_mean_vary  s    z;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_varmrd   v)rQ   r'   r   r&   r   rD   r   r   r   r<   re   )
r   rQ   r'   r   r&   r   r   r<   r   r   r*   r*   r+   test_nchypergeom_fisher_naiveu  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
 B}|jtdd tt||||
 ||||
dd W d    n1 s0    Y  t j	 fdd}t
 F}|jtdd ttj||||
dd|||||
dd W d    n1 sj0    Y  t j	fdd}||	||||
}t|	||||
}d\}}t || ||t |  k }| t |d ksJ t||  ||  ||  |
|  D ]r\}}}}
|| }||||
\}}t ||d }	||	||||
 dk sfJ tt|	||||
 d qd S )NrH   r   rT   r4   rM   r   c                 S   s,   | | }t d|| }t ||}||fS )Nr   r   )r'   r   r&   r   r   r   r   r*   r*   r+   rF     s    z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.supportc                    s>   |   |  \}} fdd}t |||fdjS )Nc                    s    |   d|      d S Nr4   r*   )ur   r*   r+   fun  s    zCTestNCH.test_nchypergeom_wallenius_naive.<locals>.mean.<locals>.fun)Zbracket)r   root)r'   r   r&   r   r   r   r   rF   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   rh   ri   )r   r*   r+   variance  s
    z:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variancer   rd   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   rQ   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   r4   gؗҜ<)ZepsrelZepsabs)r   r   )rQ   r   r   Zthe_integral)r   r   r   r&   r*   r+   r     s    
z@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.fr*   )rQ   r'   r   r&   r   r   r   r   r   )r   r   r   r&   r   rQ   r+   r<     s
    z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf)r   r   rt   )rD   rU   rV   r   rO   rP   r   r   rv   r   r   filterRuntimeWarningr   r   r   re   r<   absr   prodziprE   )r   rP   max_mr   r   r'   r&   r   r   rQ   r   supr   r<   Zpmf0Zpmf1r   r!   ir*   )r   rF   r+    test_nchypergeom_wallenius_naive  sZ    	$& 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 )Nr1   r   r`   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@rA   )r!   r   r    gdy=)rD   rE   arrayr   r   r<   r   r   )	r   r%   r&   r'   r   r   r<   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   r1   r   r   r`   )rt   rC   g       @rL   rM   )r   r   rO   rP   )r   r   r   r   rQ   r*   r*   r+   test_rvs_shape  s     zTestNCH.test_rvs_shapeN)r   r   r   rD   rU   rV   rP   r   r   r   r   r'   rO   r&   r   r   r   r   rQ   rv   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r   [  s,   

"\*r   zmu, q, expected)r   x   g@	#)i  r   g"qVUc                 C   s.   d}||||    }}t t|||| d S )Nr`   )r   r   Zlogcdf)r   qr(   rN   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   r4   rS   g?ru   )rD   ry   r   r<   r   r   )rQ   r)   r<   r   r*   r*   r+   test_gh_171467  s    r   )=r   	itertoolsZscipy.statsr   r   r   r   r   r   r   r	   r
   r   r   r   r   numpyrD   Znumpy.testingr   r   r   r   Zscipy.specialr   Zscipy.optimizer   Zscipy.integrater   r   r   r,   r0   r7   r>   rG   rI   rR   rZ   r_   rb   productintfloatrj   rk   rr   rs   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   sd   <

		


	
V P

