U
    GvfbN                     @   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dd	d
g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/d0d1d2d3d4d5d6d7d8g	d9d: Z/d;d< Z0d=d> Z1d?d@ Z2e j3dAdBdC Z4G dDdE dEZ5G dFdG dGZ6e jdHdIdJdKgdLd dMggdNdO Z7dPdQ Z8dS )R    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*   J/tmp/pip-unpacked-wheel-96ln3f52/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_pmfC   s
    
8r>   c                  C   sj   d} d}d}t |d }t|| ||}t|| ||}t|ddddgdd	 t|dd
ddgdd	 d S )Nr:   r   r   r4   g$I$I?g۶m۶m?gm۶m?vIh%<=r    $I$I?g%I$I?      ?)nparanger   r<   r"   r   )r%   r&   r=   supportr<   r"   r*   r*   r+   test_nhypergeom_pmfcdfL   s    rE   c                  C   sV   d} d}d}t ddddgddddgg| ||}t|ddddgddddggdd d S )Nr   r   r   r4      r?   r    )r   r<   r   )r%   r&   r=   r<   r*   r*   r+   test_nhypergeom_r0X   s
    $rG   c                  C   s2   t jddddgdgdggdd} | jdks.td S )	N   r5   r:   	   r2   r9   r   r4   rF   r   size)r   rvsshapeAssertionError)xr*   r*   r+   test_nhypergeom_rvs_shapea   s     rQ   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   rH   r5      d   rK   )rB   randomseedr   rM   uniformppfr   )rP   r)   yr*   r*   r+   test_nhypergeom_accuracyi   s    rY   c                  C   s   t dd} d}t| d|}| dk}t|| t d}d}t| ||}ddddd	d
ddg}t||dd t| ||}ddddddddg}t||dd d S )Nr   r4   grh|?r   rF   r   g$I$I?r@   g$I$I?r?   r    g۶m۶m?)rB   rC   r   r<   r   logr   r"   )r$   r'   r)   r(   Zlamcr*   r*   r+   test_boltzmann_upper_boundt   s    

r]   c                  C   sJ   d} t | d }t| dd|}t d| d  | d }t|| d S )N   r4   )rB   rC   r   r<   repeatr   )r&   r$   r)   r(   r*   r*   r+   test_betabinom_a_and_b_unity   s
    r`   c                  C   sH   d} d}t d}td| ||}t| | |  |}t|| d S )Ngffffff@g)\(?rF   r4   )rB   rC   r   r<   r   r   )abr$   r)   r(   r*   r*   r+   test_betabinom_bernoulli   s    
rc   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    
rj   c                  C   s$   d\} }}t tj| ||dd d S )N)gffffff?r   r   rd   rf   )r   r
   rg   rh   r*   r*   r+   test_issue_11134   s    
rk   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   )rB   rT   rU   r   r
   rW   randr*   r*   r*   r+   test_issue_7406   s    ro   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   rS   r   rK   rm   {Gz?gGz?r4   )rB   rT   r   r
   rW   r   linspace)r)   r&   rP   rW   r*   r*   r+   test_issue_5122   s    

rr   c                   C   s"   t tdtdddd d S )N  rZ   irp   r   )r   r
   rB   logspacerW   r*   r*   r*   r+   test_issue_1603   s    ru   c                  C   s2   d} t ddd}tt|d| | ddd d S )Nrl   r      r2   rF   rp   )atol)rB   rt   r   r
   r"   )r)   rP   r*   r*   r+   test_issue_5503   s    rx   zx, n, p, cdf_desired)i,  rs   333333?g24?)r   r   ry   gU7i(?)i0u  i ry   gέ̑?)i i@B ry   g8@
?)i- 逖 ry   gf(G?)i ry   gwtg ?)ir{   ry   gV}ֈ?)ipr{   ry   gz̍?)i0 r{   ry   gnC:c                 C   s   t t| ||| d S Nr   r
   r"   )rP   r&   r)   Zcdf_desiredr*   r*   r+   test_issue_5503pt2   s    r~   c                   C   s   t tdddd d S )NrF   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 )Nrs   rp   i          )r   r
   r<   )r&   r)   r$   r*   r*   r+   %test_boost_divide_by_zero_issue_15101   s    r   zignore::RuntimeWarningc               	   C   sH   ddddddddd	g	} t d
| | }dddddddddg	}t|| d S )Nr4   r   rS   rs   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      @rz   r4      msvkZmoments)	rB   rC   r   r	   r<   r   r"   r/   stats)selfra   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   r   )rB   rC   r   r	   r<   r"   r/   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}ddd	d
ddddddg
}ddd	dddddddg
}tt|||dd  |dd  dd tt|||dd  |dd  dd d S )Nr   r4   r^   r   rK   rS   gĹԨ?gءk>g	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?gaj?gZk=?g?g90?gɸU?rA   gJ_9?g2h2-?gB0?ư>r    g-C6
?)	rB   rT   rU   r   rn   r   r	   r<   r"   )r   r$   ra   r&   r<   r"   r*   r*   r+   test_zipfian_R  s*        
    (zTestZipfian.test_zipfian_Rr   r4   r   rF   (   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   )rB   rC   sum)r&   sr*   r*   r+   Hns6  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$   ra   r&   r   r*   r+   pzip;  s    z,TestZipfian.test_zipfian_naive.<locals>.pzipr4   )weightsrF   rl   r   r   Zmvskr   )
rB   	vectorizerC   ZcumsumZaverager   r	   r<   r"   r   )r   ra   r&   r   r$   r<   r"   meanvarZstdZskewZkurtosisr*   r   r+   test_zipfian_naive2  s"    


zTestZipfian.test_zipfian_naiveN)__name__
__module____qualname__r   r   r   rB   rT   rU   Zvstackrt   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 )TestNCHrF   rF   r   r   rS   r4   rK   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   rP   r'   m1r&   r   r<   r   )r   r   distsdistrP   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)rP   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*   ).0rX   )r   r$   r*   r+   	<genexpr>|  s     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   rF   rB   maximumminimum)rP   r'   r   r&   r   r   ZP0ZP1ZP2r<   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)rP   r'   r   r&   r   rB   r   r   r   r<   r   )
r   rP   r'   r   r&   r   r   r<   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
 8}|jtdd tt||||
 ||||
dd W 5 Q R X t j	 fdd}t
 <}|jtdd ttj||||
dd|||||
dd W 5 Q R X t j	fdd}||	||||
}t|	||||
}d\}}t || ||t |  k }| t |d kstt||  ||  ||  |
|  D ]r\}}}}
|| }||||
\}}t ||d }	||	||||
 dk s<ttt|	||||
 d qd S )NrF   r   rS   r4   rK   r   c                 S   s,   | | }t d|| }t ||}||fS )Nr   r   )r'   r   r&   r   r   r   r   r*   r*   r+   rD     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   rD   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   ra   rb   )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   rP   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   )rP   r   r   Zthe_integral)r   r   r   r&   r*   r+   r     s    
 z@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.fr*   )rP   r'   r   r&   r   r   r   r   r   )r   r   r   r&   r   rP   r+   r<     s
    z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf)r   r   rl   )rB   rT   rU   r   rM   rN   r   r   rn   r   r   filterRuntimeWarningr   r   r   r   r<   absr   prodrO   ziprC   )r   rN   max_mr   r   r'   r&   r   r   rP   r   supr   r<   Zpmf0Zpmf1rw   r!   ir*   )r   rD   r+    test_nchypergeom_wallenius_naive  s\    	  2z(TestNCH.test_nchypergeom_wallenius_naivec           	      C   s   d}d}d}d}t d}t dddd	d
ddddddddddddddddg}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@r?   )r!   rw   r    gdy=)rB   rC   arrayr   r   r<   r   r   )	r   r%   r&   r'   r   r   r<   r   r   r*   r*   r+   test_wallenius_against_mpmath  sR    
   z%TestNCH.test_wallenius_against_mpmathc                 C   sF   t td}|| }|jdddgdggdddgd	d
}|jd	ksBtd S )Nr   r1   r   r   r^   rl   rA   g       @rJ   rK   )r   r   rM   rN   rO   )r   r   r   r   rP   r*   r*   r+   test_rvs_shape  s    "zTestNCH.test_rvs_shapeN)r   r   r   rB   rT   rU   rN   r   r   r   r   r'   rM   r&   r   r   r   r   rP   rn   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   r   Q  s,   

"\*r   zmu, q, expectedr   x   g@	#i  g"qVUc                 C   s.   d}||||    }}t t|||| d S )Nr^   )r   r   Zlogcdf)r   qr(   rL   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   rR   g?rm   )rB   rq   r   r<   r   r   )rP   r)   r<   r   r*   r*   r+   test_gh_17146-  s    r   )9r   Zscipy.statsr   r   r   r   r   r   r   r	   r
   r   r   r   r   ZnumpyrB   Znumpy.testingr   r   r   r   Zscipy.specialr   Zscipy.optimizer   Zscipy.integrater   r   r   r,   r0   r7   r>   rE   rG   rQ   rY   r]   r`   rc   rj   rk   ro   rr   ru   rx   r~   r   r   r   filterwarningsr   r   r   r   r   r*   r*   r*   r+   <module>   sz   <

		

	


V P

