o
    ib                     @   sB  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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# Z0d$d% Z1d&d' Z2d(d) Z3d*d+ Z4d,d- Z5d.d/ Z6d0d1 Z7e j!"d2g d3d4d5 Z8d6d7 Z9d8d9 Z:d:d; Z;d<d= Z<d>d? Z=G d@dA dAZ>G dBdC dCZ?e j!"dDg dEg dFgdGdH Z@dIdJ ZAG dKdL dLZBG dMdN dNZCdOdP ZDG dQdR dRZEG dSdT dTZFdS )U    N)stats)	betabinom
betanbinom	hypergeom
nhypergeom	bernoulli	boltzmannskellamzipfzipfianbinomnbinomnchypergeom_fishernchypergeom_walleniusrandintpoisson_binom)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.   `/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/stats/tests/test_discrete_distns.pytest_hypergeom_cdf   s   r0   )   r   r   r    g?r   )}   r   r   r    g!:<r!   c                 C   r"   r#   )r   sfr   r'   r.   r.   r/   test_hypergeom_sf#   s   r4   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$   r;   c                  C   sh   d\} }}d}t || ||}t|| ||| d | | |d   | || d   }t||dd d S )N)-            r8   绽|=r$   )r   pmfr   r   )r)   r*   rr(   ZNHGZHGr.   r.   r/   test_nhypergeom_pmfG   s
   
8rC   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   r8   )$I$I?g۶m۶m?m۶m?rE   vIh%<=r$   )rD   $I$I?g%I$I?      ?)nparanger   rA   r&   r   )r)   r*   rB   supportrA   r&   r.   r.   r/   test_nhypergeom_pmfcdfP   s   rL   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   r8      r   )r8   rM   r   r   )r8   r   r   r8   )r   r   r8   r   rF   r$   )r   rA   r   )r)   r*   rB   rA   r.   r.   r/   test_nhypergeom_r0\   s
   rN   c                  C   s0   t jdg ddgdggdd} | jdksJ d S )N   )r9   r>   	   r6   r=   r   r8   rM   r   size)r   rvsshape)xr.   r.   r/   test_nhypergeom_rvs_shapee   s   rW   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   rO   r9      d   rR   )rI   randomseedr   rT   uniformppfr   )rV   r-   yr.   r.   r/   test_nhypergeom_accuracym   s   r_   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   r8   grh|?r   rM   r   )r   r   r   $I$I?rG   g$I$I?r   r   rF   r$   )r   r   r   ra   g۶m۶m?r8   r8   r8   )rI   rJ   r   rA   r   logr   r&   )r(   r+   r-   r,   Zlamcr.   r.   r/   test_boltzmann_upper_boundx   s   

rd   c                  C   sJ   d} t | d }t| dd|}t d| d  | d }t|| d S )N   r8   )rI   rJ   r   rA   repeatr   )r*   r(   r-   r,   r.   r.   r/   test_betabinom_a_and_b_unity   s
   rg   dtypesr   c                 C   sB   | \}}}|d|d|d}}}t tj|||ddd d S )Nr   rM   r   r(   Zmomentsgaa)r   r   r   )rh   Zn_typea_typeb_typer*   abr.   r.   r/   -test_betabinom_stats_a_and_b_integers_gh18026   s   
rn   c                  C   sH   d} d}t d}td| ||}t| | |  |}t|| d S )Ngffffff@g)\(?rM   r8   )rI   rJ   r   rA   r   r   )rl   rm   r(   r-   r,   r.   r.   r/   test_betabinom_bernoulli   s   
ro   c                  C   $   d\} }}t tj| ||dd d S )N)g?r   r8   Z
confidencer*   r-   r   r   )r   r   intervalalphar*   r-   r.   r.   r/   test_issue_10317      
rv   c                  C   rp   )N)gffffff?r   r   rq   rr   )r   r   rs   rt   r.   r.   r/   test_issue_11134   rw   rx   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         ?r8   )rI   rZ   r[   r   r   r]   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   rY   r   rR   rz   {Gz?Gz?r8   )rI   rZ   r   r   r]   r   linspace)r-   r*   rV   r]   r.   r.   r/   test_issue_5122   s   

r   c                   C   s"   t tdtdddd d S )N  r`   ir}   r   )r   r   rI   logspacer]   r.   r.   r.   r/   test_issue_1603      "r   c                  C   s2   d} t ddd}tt|d| | ddd d S )Nry   r      r6   rM   r}   )atol)rI   r   r   r   r&   )r-   rV   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&   )rV   r*   r-   Zcdf_desiredr.   r.   r/   test_issue_5503pt2   s   r   c                   C      t tdddd d S )NrM   l    J)g-q=gB.+n?r   r.   r.   r.   r/   test_issue_5503pt3   s   r   c                   C   r   )N   r5   gAA?g_[Cˮi8)r   r   r3   r.   r.   r.   r/   test_issue_6682   s   r   c                  C   s.   t g ddd} dtj dg}t| | d S )N)r   rz   r8   r   ry   gG޿g1D&+)r   logcdfrI   infr   )result	referencer.   r.   r/   test_issue_19747   s   r   c                  C   s$   d} d}d}t t|| |d d S )Nr   r}   i          )r   r   rA   )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)	r8   r   rY   r     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                   @   st   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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   r8      msvkri   )	rI   rJ   r   r   rA   r
   r&   r3   r   )selfrl   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  ?   r8   gƠ>r$   r   ri   )rI   rJ   r   r   rA   r&   r3   r   )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   r8   re   r   rR   rY   )
gĹԨ?gءk>	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?)
gaj?gZk=?r   g?g90?gɸU?rH   gJ_9?g2h2-?gB0?ư>r$   g-C6
?)	rI   rZ   r[   r   r{   r   r   rA   r&   )r   r(   rl   r*   rA   r&   r.   r.   r/   test_zipfian_R)  s   (,zTestZipfian.test_zipfian_Rr   r8   r   rM   (   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 sumr8   )rI   rJ   sum)r*   sr.   r.   r/   HnsI  s   z+TestZipfian.test_zipfian_naive.<locals>.Hnsc                    s*   | dk s| |kr
dS d| |   || S )z#Naive implementation of zipfian pmfr8   r   r.   )r(   rl   r*   r   r.   r/   pzipN  s   z,TestZipfian.test_zipfian_naive.<locals>.pzipr8   )weightsrM   ry   r   r   Zmvskri   )
rI   	vectorizerJ   ZcumsumZaverager   r   rA   r&   r   )r   rl   r*   r   r(   rA   r&   meanvarZstdZskewZkurtosisr.   r   r/   test_zipfian_naiveE  s"   


zTestZipfian.test_zipfian_naivec                 C   sD   t dd}|t j}tdd}||}||}t|| d S )Nr   r   o   rO   )rI   rJ   astypeint32r   rA   r   r   r(   Zk_int32distrA   Zpmf_k_int32r.   r.   r/   test_pmf_integer_kc  s   


zTestZipfian.test_pmf_integer_kN)__name__
__module____qualname__r   r   r   rI   rZ   r[   Zvstackr   r   TZnaive_testspytestmarkparametrizer   r   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 )TestNCHrM   rM   r   r   rY   r8   rR   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   r8   )odds)	r   r   rV   r+   m1r*   r   rA   r   )r   r   distsr   rV   r+   r   r*   r.   r.   r/   test_nch_hypergeomz  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)rV   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.   ).0r^   )r   r(   r.   r/   	<genexpr>  s    zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>r8   )r   ranger(   )r   xlxur   r/   P  r   zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.Pr8   rM   rI   maximumminimum)rV   r+   r   r*   r   r   ZP0ZP1ZP2rA   r   r   r.   )r   r   r   r*   r   r   r   r/   pmf_mean_var  s   
z;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_varmri   v)rV   r+   r   r*   r   rI   r   r   r   rA   r   )
r   rV   r+   r   r*   r   r   rA   r   r   r.   r.   r/   test_nchypergeom_fisher_naive  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 )NrM   r   rY   r8   rR   r   c                 S   s,   | | }t d|| }t ||}||fS )Nr   r   )r+   r   r*   r   r   r   r   r.   r.   r/   rK     s   z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.supportc                    s>   |   |  \}} fdd}t |||fdjS )Nc                    s    |   d|      d S Nr8   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   rK   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   rl   rm   )r   r.   r/   variance  s
   $z:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variancer   ri   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   rV   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   r8   gؗҜ<)ZepsrelZepsabs)r   r   )rV   r   r   Zthe_integral)r   r   r   r*   r.   r/   r     s   
z@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.fr.   )rV   r+   r   r*   r   r   r   r   r   )r   r   r   r*   r   rV   r/   rA     s
   z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf)r   r   ry   )rI   rZ   r[   r   rT   rU   r   r   r{   r   r   filterRuntimeWarningr   r   r   r   rA   absr   prodziprJ   )r   rU   max_mr   r   r+   r*   r   r   rV   r   supr   rA   Zpmf0Zpmf1r   r%   ir.   )r   rK   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 )Nr5   r   re   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@rF   )r%   r   r$   gdy=)rI   rJ   arrayr   r   rA   r   r   )	r   r)   r*   r+   r   r   rA   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   r5   r   r   re   )ry   rH   g       @rQ   rR   )r   r   rT   rU   )r   r   r   r   rV   r.   r.   r/   test_rvs_shape.  s    zTestNCH.test_rvs_shapeN)r   r   r   rI   rZ   r[   rU   r   r   r   r   r+   rT   r*   r   r   r   r   rV   r{   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r   l  s.    

"\*r   zmu, q, expected)r   x   g@	#)i  r   g"qVUc                 C   s.   d}||||   }}t t|||| d S )Nre   )r   r   r   )r   qr,   rS   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   r8   rX   g?rz   )rI   r   r   rA   r   r   )rV   r-   rA   r   r.   r.   r/   test_gh_17146H  s   r   c                   @   s\   e Zd Zejdg dg dg dgdd Zejdg dg d	g d
gdd ZdS )TestBetaNBinomzx, n, a, b, ref)r   g    SAr   re   g:[Y))rY   r5   r   re   g dg?)r   r   r   re   gL&[>c                 C   s   t t|||||dd d S )Nr@   r$   )r   r   rA   )r   rV   r*   rl   rm   refr.   r.   r/   test_betanbinom_pmfU  s   z"TestBetaNBinom.test_betanbinom_pmfzn, a, b, ref)r   r   r5   g:o?)r   rP   rP   g>["@)rY   r   r   g >[?c                 C   s    t tj|||dd|dd d S )Nr(   ri   g [n<r$   )r   r   r   )r   r*   rl   rm   r   r.   r.   r/   test_betanbinom_kurtosish  s   
z'TestBetaNBinom.test_betanbinom_kurtosisN)r   r   r   r   r   r   r   r   r.   r.   r.   r/   r   T  s    
r   c                   @      e Zd Zdd ZdS )TestZipfc                 C   sB   t dd}|t j}td}||}||}t|| d S )Nr   r   rP   )rI   rJ   r   r   r
   rA   r   r   r.   r.   r/   test_gh20692  s   

zTestZipf.test_gh20692N)r   r   r   r   r.   r.   r.   r/   r         r   c                  C   s`   G dd dt j} | tjd}d}tjt|d |d W d    d S 1 s)w   Y  d S )Nc                   @   r   )z#test_gh20048.<locals>.test_dist_genc                 S   s   t |d dS )NrY   r~   )min)r   r(   r.   r.   r/   _cdf  s   z(test_gh20048.<locals>.test_dist_gen._cdfN)r   r   r   r   r.   r.   r.   r/   test_dist_gen  r   r  )rm   zArguments that bracket...)matchg+?)r   Zrv_discreterI   r   r   ZraisesRuntimeErrorr]   )r  Z	test_distr   r.   r.   r/   test_gh20048  s   "r  c                   @   r   )TestPoissonBinomialc                 C   sP   t jd}|d}t |d }||}t||}g d}t|| d S )Nl   zb} r   r8   )gcƙ?g!)@*?g/_?g?TxY^?gg	SUH?)rI   rZ   Zdefault_rngZintegersrJ   r   rA   r   )r   rngr*   r(   r-   r   r   r.   r.   r/   test_pmf  s   

zTestPoissonBinomial.test_pmfN)r   r   r   r  r.   r.   r.   r/   r    r   r  c                   @   r   )TestRandIntc                    sf   d t  } fddt|D }td |}|dk s J dtj|tjd   }t|| d S )Nic                    s   g | ]} d  | qS )l        r.   )r   r   rl   r.   r/   
<listcomp>  s    z,TestRandInt.test_gh19759.<locals>.<listcomp>iE  r   r8   )Zdtype)	r   r   r   rA   allrI   ZasarrayZfloat64r   )r   Z	max_rangeZall_b_1r   r   r.   r	  r/   test_gh19759  s   zTestRandInt.test_gh19759N)r   r   r   r  r.   r.   r.   r/   r    r   r  )Gr   	itertoolsZscipyr   Zscipy.statsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   numpyrI   Znumpy.testingr   r   r   r   Zscipy.specialr   Zscipy.optimizer   Zscipy.integrater   r   r   r0   r4   r;   rC   rL   rN   rW   r_   rd   rg   productintfloatrn   ro   rv   rx   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r.   r.   r.   r/   <module>   st    D

		


	
^ P

-