B
    0dF                 @   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 d dlm
Z d dl Z d dlmZ d dlm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%d&d'd(d)d*d+d,d-d.g	d/d0 Z,d1d2 Z-d3d4 Z.d5d6 Z/G d7d8 d8Z0G d9d: d:Z1e j*+d;d<d=d>gd?d d@ggdAdB Z2dS )C    N)	betabinom	hypergeom
nhypergeom	bernoulli	boltzmannskellamzipfzipfianbinomnbinomnchypergeom_fishernchypergeom_walleniusrandint)assert_almost_equalassert_equalassert_allclose)r
   )root_scalar)quadc        
      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 )N   2   
      )decimal      )r   Zlogpmfr   r   )
kNKnZlogpmf1Zlogpmf2Zlogpmf3Zlogpmf4Zhypergeom_logpmfZbernoulli_logpmf r   X/var/www/html/venv/lib/python3.7/site-packages/scipy/stats/tests/test_discrete_distns.pytest_hypergeom_logpmf   s$    r!   c              C   sh   d\} }}d}t || ||}t|| ||| d | | |d   | || d   }t||dd d S )N)-            r   g|=)rtol)r   pmfr   r   )Mr   rr   ZNHGZHGr   r   r    test_nhypergeom_pmf(   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   g$I$I?g۶m۶m?gm۶m?gvIh%<=)r&   g$I$I?g%I$I?g      ?)nparanger   r'   cdfr   )r(   r   r)   supportr'   r/   r   r   r    test_nhypergeom_pmfcdf1   s    r1   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   r      gvIh%<=)r&   )r   r'   r   )r(   r   r)   r'   r   r   r    test_nhypergeom_r0=   s
    $r3   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   r   r$   	   r   r#   )r   r   r2   r+   )size)r   rvsshapeAssertionError)xr   r   r    test_nhypergeom_rvs_shapeF   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   r4   r      d   )r6   )r-   randomseedr   r7   uniformppfr   )r:   pyr   r   r    test_nhypergeom_accuracyN   s    rD   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   r   grh|?r   r2   r+   g$I$I?g$I$I?g$I$I?gvIh%<=)r&   g۶m۶m?)r-   r.   r   r'   r   logr   r/   )r   r   rB   expectedZlamcr   r   r    test_boltzmann_upper_boundY   s    

rI   c              C   sJ   d} t | d }t| dd|}t d| d  | d }t|| d S )N   r   )r-   r.   r   r'   repeatr   )r   r   rB   rG   r   r   r    test_betabinom_a_and_b_unityl   s
    rL   c              C   sH   d} d}t d}td| ||}t| | |  |}t|| d S )Ngffffff@g)\(?r2   r   )r-   r.   r   r'   r   r   )abr   rB   rG   r   r   r    test_betabinom_bernoulliv   s    
rO   c              C   s$   d\} }}t tj| ||dd d S )N)g?r   r   )alphar   rB   )r   r   )r   r   interval)rP   r   rB   r   r   r    test_issue_10317   s    
rR   c              C   s$   d\} }}t tj| ||dd d S )N)gffffff?r   r   )rP   r   rB   )r   r   )r   r
   rQ   )rP   r   rB   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   g      ?r   )r-   r>   r?   r   r
   rA   randr   r   r   r    test_issue_7406   s    rV   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   )r6   rT   g{Gz?gGz?r   )r-   r>   r   r
   rA   r   Zlinspace)rB   r   r:   rA   r   r   r    test_issue_5122   s    

rW   c               C   s"   t tdtdddd d S )Ni  rE   ig{Gz?r   )r   r
   r-   logspacerA   r   r   r   r    test_issue_1603   s    rY   c              C   s2   d} t ddd}tt|d| | ddd d S )Ng      ?r+      r   r2   g{Gz?)atol)r-   rX   r   r
   r/   )rB   r:   r   r   r    test_issue_5503   s    r\   zx, n, p, cdf_desired)i,  i  g333333?g24?)i  i'  g333333?gU7i(?)i0u  i g333333?gέ̑?)i i@B g333333?g8@
?)i- i g333333?gf(G?)ii g333333?gwtg ?)ii g333333?gV}ֈ?)ipi g333333?gz̍?)i0 i g333333?gnC:c             C   s   t t| ||| d S )N)r   r
   r/   )r:   r   rB   Zcdf_desiredr   r   r    test_issue_5503pt2   s    r]   c               C   s   t tdddd d S )Nr2   l    J)g-q=gB.+n?)r   r
   r/   r   r   r   r    test_issue_5503pt3   s    r^   c               C   s   t tdddd d S )N   r   gAA?g_[Cˮi8)r   r   sfr   r   r   r    test_issue_6682   s    ra   c           	   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 )Nr   r   r=   i  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    
rc   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      @i r      msvk)moments)	r-   r.   r   r	   r'   r   r/   r`   stats)selfrM   r   r   r   r   r    test_zipfian_asymptotic   s    z#TestZipfian.test_zipfian_asymptoticc             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d d S )N)gG?g1  ?   r   rf   )rg   gH׊>)r&   )r-   r.   r   r	   r'   r/   r`   rh   )ri   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   r   rJ   r   )r6   r=   gĹԨ?gءk>g	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?gaj?gZk=?g?g90?gɸU?g      ?gJ_9?g2h2-?gB0?gư>)r&   g-C6
?)	r-   r>   r?   r   rU   r   r	   r'   r/   )ri   r   rM   r   r'   r/   r   r   r    test_zipfian_R   s    
(zTestZipfian.test_zipfian_Rr   r   r   r2   (   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 sumr   )r-   r.   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 pmfr   g        Nr   )r   rM   r   )rr   r   r    pzip  s    z,TestZipfian.test_zipfian_naive.<locals>.pzipr   )weightsr2   g      ?r+   r,   Zmvsk)rg   )
r-   	vectorizer.   ZcumsumZaverager   r	   r'   r/   rh   )ri   rM   r   rs   r   r'   r/   meanvarZstdZskewZkurtosisr   )rr   r    test_zipfian_naive  s    
zTestZipfian.test_zipfian_naiveN)__name__
__module____qualname__rj   rl   rm   r-   r>   r?   ZvstackrX   r   TZnaive_testspytestmarkparametrizerx   r   r   r   r    rd      s   rd   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 )TestNCHr2   )r2   r,   r+   r=   r   )r6   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   r   )odds)	r   r   r:   r   m1r   r   r'   r   )ri   r   distsdistr:   r   r   r   r   r   r    test_nch_hypergeom9  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 )N)special_binom)r:   t1t2)r   m2r   wr   r    fP  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 )Nr   ).0rC   )r   r   r   r    	<genexpr>V  s    zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>r   )rp   range)r   )r   xlxu)r   r    PU  s    zFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.Pr   r2   )r-   maximumminimum)r:   r   r   r   r   r   ZP0ZP1ZP2r'   rv   rw   r   )r   r   r   r   r   r   r   r    pmf_mean_varI  s    z;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_varm)rg   v)r:   r   r   r   r   r-   ru   r   r   r'   rh   )
ri   r:   r   r   r   r   r   r'   rv   rw   r   r   r    test_nchypergeom_fisher_naiveE  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
t||||
 ||||
dd t j	 fdd}t
tj||||
dd|||||
dd t j	fdd}||	||||
}t|	||||
}d\}}t || ||t |  k }| t |d kstxt||  ||  ||  |
|  D ]r\}}}}
|| }||||
\}}t ||d }	||	||||
 dk stt
t|	||||
 d qW d S )Nr2   )r2   r,   r+   r=   r   )r6   r   c             S   s,   | | }t d|| }t ||}||fS )Nr   )r-   r   r   )r   r   r   r   r   r   r   r   r   r    r0   v  s    z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.supportc                s>   |   |  \}} fdd}t |||fdjS )Nc                s    |   d|      d S )Nr   r   )u)r   r   r   r   r   r    fun  s    zCTestNCH.test_nchypergeom_wallenius_naive.<locals>.mean.<locals>.fun)Zbracket)r   root)r   r   r   r   r   r   r   )r0   )r   r   r   r   r    rv   |  s    z6TestNCH.test_nchypergeom_wallenius_naive.<locals>.meang{Gz?)r&   c                sZ   | | } | |||}|||  }|| || |  }| | | | d || ||    S )Nr   r   )r   r   r   r   r   r   rM   rN   )rv   r   r    variance  s
    z:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variancer   )rg   g?c                sH   | |\}}fdd  fdd}|S )Nc                sH         }d| |    d| d|      }|S )Nr   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   r   gؗҜ<)ZepsrelZepsabs)r   r   )r:   r   r   Z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   )r0   )r   r   r   r   r   r:   r    r'     s
    z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf)gư>gư>g      ?)r-   r>   r?   r   r7   r8   r   r   rU   ru   r   r   rv   rh   r'   absrp   prodr9   zipr.   )ri   r8   max_mr   r   r   r   r   r   r:   r   r   r'   Zpmf0Zpmf1r[   r&   ir   )rv   r0   r     test_nchypergeom_wallenius_naiveg  s<    
 4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 )!Nr   rk   rJ   g      @re   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@gvIh%<=)r&   r[   )r&   gdy=)r-   r.   arrayr   r   r'   rv   rw   )	ri   r(   r   r   r   supr'   rv   rw   r   r   r    test_wallenius_against_mpmath  sD    


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 )N)r   r   r   rk   r   rJ   g      ?g      ?g       @)r   r   r2   r+   )r6   )r   r   r7   r8   r9   )ri   r   r   r   r:   r   r   r    test_rvs_shape  s
    "zTestNCH.test_rvs_shapeN)ry   rz   r{   r-   r>   r?   r8   r   r   r   r   r   r7   r   r   r   r   r   r:   rU   r   r}   r~   r   r   r   r   r   r   r   r   r   r    r   +  s$   "S*r   zmu, q, expectedr   x   g@	#i  g"qVUc             C   s.   d}||||    }}t t|||| d S )NrJ   )r   r   Zlogcdf)rb   qrG   r6   r   rB   r   r   r    test_nbinom_11465  s    r   )3r}   Zscipy.statsr   r   r   r   r   r   r   r	   r
   r   r   r   r   numpyr-   Znumpy.testingr   r   r   Zscipy.specialr   Zscipy.optimizer   Zscipy.integrater   r!   r*   r1   r3   r;   rD   rI   rL   rO   rR   rS   rV   rW   rY   r\   r~   r   r]   r^   ra   rc   rd   r   r   r   r   r   r    <module>   sR   <		

	S G