
    xfO                        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:                  j=                  dg d      d	        Ze j:                  j=                  dd
dg      d        Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(e j:                  j=                  d ejR                  e*e+fgdz         d        Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3e j:                  j=                  dg d       d!        Z4d" Z5d# Z6d$ Z7d% Z8 G d& d'      Z9 G d( d)      Z:e j:                  j=                  d*g d+g d,g      d-        Z;d. Z<y)/    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                 P    t        j                  | |||      }t        |||       y Nrtol)r   cdfr   kMnNexpectedr#   ps          H/usr/lib/python3/dist-packages/scipy/stats/tests/test_discrete_distns.pytest_hypergeom_cdfr-      s$     	aAq!AAxd+    )   r   r   r   g?r   )}   r   r   r   g!:<r   c                 P    t        j                  | |||      }t        |||       y r!   )r   sfr   r%   s          r,   test_hypergeom_sfr3   !   s$     	Q1a AAxd+r.   c                     d} d}d}d}t        j                  | |||      }t        j                  || z
  |||z
  |      }t        j                  || z
  ||||z
        }t        j                  | |||      }t        ||d       t        ||d       t        ||d       d} d}d}d}t        j                  | |||      }t        j                  | ||z        }	t        ||	d       y )Nr   2   r      )decimal      )r   logpmfr   r   )
r&   r)   Kr(   logpmf1logpmf2logpmf3logpmf4hypergeom_logpmfbernoulli_logpmfs
             r,   test_hypergeom_logpmfrB   +   s     	
A
A
A	Aq!Q*Gq1uaQ2Gq1uaAE2Gq!Q*G"5"5"5 	
A
A	A	A ''1a3 ''1Q3/(*:BGr.   c                      d\  } }}d}t        j                  || ||      }t        j                  || |||z   dz
        | |z
  |dz
  z
  z  | ||z   dz
  z
  z  }t        ||d       y )N)-            r8   g|=r"   )r   pmfr   r   )r'   r(   rr&   NHGHGs         r,   test_nhypergeom_pmfrL   E   sp    GAq!	A
..Aq!
$C	q!Q!A	&!a%1Q3-	8A1QK	HBB%(r.   c                      d} d}d}t        j                  |dz         }t        j                  || ||      }t        j                  || ||      }t        |g dd       t        |g dd       y )	NrF   r   r   r8   )$I$I?g۶m۶m?m۶m?rO   vIh%<=r"   )rN   $I$I?g%I$I?      ?)nparanger   rH   r$   r   )r'   r(   rI   supportrH   r$   s         r,   test_nhypergeom_pmfcdfrV   N   sd    	A	A	Aii!nG
..!Q
*C
..!Q
*CC1>C0u=r.   c                  t    d} d}d}t        j                  g dg dg| ||      }t        |g dg dgd	       y )
Nr   r   r   )r   r8      r   )r8   rX   r   r   )r8   r   r   r8   )r   r   r8   r   rP   r"   )r   rH   r   )r'   r(   rI   rH   s       r,   test_nhypergeom_r0rY   Z   s;    
A	A	A
..,5q!Q
?CC,5EBr.   c                  d    t        j                  dg ddgdggd      } | j                  dk(  sJ y )N   )r9   rF   	   r6   rE   r   r8   rX   r   size)r   rvsshape)xs    r,   test_nhypergeom_rvs_shaperc   c   s2     	r9tbTlFA77l"""r.   c                  :   t         j                  j                  d       t        j                  dddd      } t         j                  j                  d       t         j                  j                  d      }t        j                  |ddd      }t        | |       y )Nr   r[   r9      d   r^   )rS   randomseedr   r`   uniformppfr   )rb   r+   ys      r,   test_nhypergeom_accuracyrl   k   sm     IINN1r1bs+AIINN1
		s#Aq"a$AAr.   c                  V   t        j                  dd      } d}t        j                  | d|      }| dk(  }t	        ||       t        j
                  d      }d}t        j                  | ||      }g d}t        ||d	
       t        j                  | ||      }g d}t        ||d	
       y )Nr   r8   grh|?r   rX   r   )r   r   r   $I$I?rQ   g$I$I?r   r   rP   r"   )r   r   r   ro   g۶m۶m?r8   r8   r8   )rS   rT   r   rH   r   logr   r$   )r&   r)   r+   r*   lamcs         r,   test_boltzmann_upper_boundrs   v   s    
		"aA	Aa"AAvHH
&&)C	Aaa A-HAxe,aa A+HAxe,r.   c                      d} t        j                  | dz         }t        | dd      j                  |      }t        j                  d| dz   z  | dz         }t        ||       y )N   r8   )rS   rT   r   rH   repeatr   )r(   r&   r+   r*   s       r,   test_betabinom_a_and_b_unityrw      sZ     	A
		!a%A!Qq!Ayya!ea!e,H8$r.   dtypesr   c                     | \  }}} |d       |d       |d      }}}t        t        j                  |||d      d       y )Nr   rX   r   r&   momentsgaa)r   r   stats)rx   n_typea_typeb_typer(   abs          r,   -test_betabinom_stats_a_and_b_integers_gh18026r      sC     $FFFRj&)VAY!qAIOOAq!S9;NOr.   c                      d} d}t        j                  d      }t        d| |      j                  |      }t	        | | |z   z        j                  |      }t        ||       y )Ngffffff@g)\(?rX   r8   )rS   rT   r   rH   r   r   )r   r   r&   r+   r*   s        r,   test_betabinom_bernoullir      sY    AA
		!A!Qq!Aa!e%))!,H8$r.   c                  T    d\  } }}t        t        j                  | ||      d       y )N)g?r   r8   
confidencer(   r+   r   r   )r   r   intervalalphar(   r+   s      r,   test_issue_10317r      s$    KE1aEQ!<fEr.   c                  T    d\  } }}t        t        j                  | ||      d       y )N)gffffff?r   r   r   r   )r   r   r   r   s      r,   test_issue_11134r      s$    KE1a5A;VDr.   c                  B   t         j                  j                  d       t        t	        j
                  t         j                  j                  d      dd      d       t        t	        j
                  ddd      d       t        t	        j
                  ddd      d       y )Nr   r         ?r8   )rS   rg   rh   r   r   rj   rand r.   r,   test_issue_7406r      sf    IINN1299>>"-q#6: 1a%r*1a%q)r.   c                  R   d} t         j                  j                  dd      }d}t        j                  |||       }t        |d       t        j                  ddd      }t        j                  |||       }t        |d       d}t        j                  |||       }t        ||       y )	Nr   rf   r   r^   r   {Gz?gGz?r8   )rS   rg   r   r   rj   r   linspace)r+   r(   rb   rj   s       r,   test_issue_5122r      s    	A
		#B'A	A
))Aq!
Cb
D$#A
))Aq!
Ca	A
))Aq!
Car.   c            	      v    t        t        dt        j                  dd            j	                  d      d       y )N  rn   ir   r   )r   r   rS   logspacerj   r   r.   r,   test_issue_1603r      s)    tR[[T2377=qAr.   c                      d} t        j                  ddd      }t        t        j                  |d|z  |       dd       y )Nr   r      r6   rX   r   )atol)rS   r   r   r   r$   )r+   rb   s     r,   test_issue_5503r      s6    A
Ar2AEIIa1a(#D9r.   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                 F    t        t        j                  | ||      |       y Nr   r   r$   )rb   r(   r+   cdf_desireds       r,   test_issue_5503pt2r      s     EIIaA&4r.   c                  F    t        t        j                  ddd      d       y )NrX   l    J)g-q=gB.+n?r   r   r.   r,   test_issue_5503pt3r      s    EIIa13IJr.   c                  F    t        t        j                  ddd      d       y )N   r5   gAA?g_[Cˮi8)r   r   r2   r   r.   r,   test_issue_6682r      s     FIIc2w/1FGr.   c                  R    d} d}d}t        t        j                  || |      d       y )Nr   r   i          )r   r   rH   )r(   r+   r&   s      r,   %test_boost_divide_by_zero_issue_15101r      s(    AAAEIIaA&,r.   c                  Z    g d} t        j                  d| |       }g d}t        ||       y )N)	r8   r   rf   r   i  i  i  i  ip  r   )	g>l?gzo?gVrRs?g$?gVWCW?g4yB?g4.?g.Lr?gD?)r   r$   r   )mur$   cdf_expecteds      r,   test_skellam_gh11474r      s-    	9B
++aR
 CPL C&r.   c                   .   e Zd Zd Zd Zd Zej                  j                  d        ej                   ej                  ddd      ej                  j                  dd	d      f      j                  Zej                  j!                  d
e      d        Zy)TestZipfianc                    d}d}t        j                  dd      }t        t        j                  |||      t        j                  ||             t        t        j                  |||      t        j                  ||             t        t        j                  |||      t        j                  ||             t        t        j                  ||d      t        j                  |d             y )Ng      @r   r8      msvkrz   )	rS   rT   r   r
   rH   r	   r$   r2   r|   )selfr   r)   r&   s       r,   test_zipfian_asymptoticz#TestZipfian.test_zipfian_asymptotic  s    IIaAq!,dhhq!n=Aq!,dhhq!n=

1a+TWWQ];aF;

1f5	7r.   c                    d\  }}d}t        j                  d|dz         }t        t        j                  |||      t        j                  |||      d       t        t        j
                  |||      t        j
                  |||      d       t        t        j                  |||      t        j                  |||      d       t        t        j                  ||d      t        j                  ||d      d       y )N)gG?g1  ?   r8   gƠ>r"   r   rz   )rS   rT   r   r
   rH   r$   r2   r|   )r   alt1agt1r)   r&   s        r,   test_zipfian_continuityz#TestZipfian.test_zipfian_continuity  s     ,
dIIaQAtQ/Qa1H!	#AtQ/Qa1H!	#

1dA.

1dA0F!	#dAv>dAv>T	Kr.   c                    t         j                  j                  d       t         j                  j                  ddd      }t         j                  j	                  d      dz  dz   }t         j                  j                  ddd      }g d}g d}t        t        j                  |||      dd  |dd  d	
       t        t        j                  |||      dd  |dd  d
       y )Nr   r8   ru   r   r^   rf   )
gĹԨ?gءk>	]x[?g>g	W4?g
-?g$fhn=g9[.>g`֔>gnm?)
gaj?gZk=?r   g?g90?gɸU?rR   gJ_9?g2h2-?gB0?ư>r"   g-C6
?)	rS   rg   rh   r   r   r   r
   rH   r$   )r   r&   r   r(   rH   r$   s         r,   test_zipfian_RzTestZipfian.test_zipfian_R   s     			qIIa"-IINN2r!A%IIa2.+F 	Aq!,QR0#ab'EAq!,QR0#ab'Er.   r   r8   r   rX   (   za, nc                    t         j                  d        t         j                  fd       }t        j                  |dz         } ||||      }t        j                  |      }t        j                  ||      }t        j                  ||z
  dz  |      }|dz  }	t        j                  ||z
  |	z  dz  |      }
t        j                  ||z
  |	z  dz  |      dz
  }t        t        j                  |||      |       t        t        j                  |||      |       t        t        j                  ||d	
      |||
|g       y )Nc                 \    dt        j                  d| dz         |z  z  j                         S )z$Naive implementation of harmonic sumr8   )rS   rT   sum)r(   ss     r,   Hnsz+TestZipfian.test_zipfian_naive.<locals>.Hns@  s,     bii1Q3'**//11r.   c                 >    | dk  s| |kD  ryd| |z  z   ||      z  S )z#Naive implementation of zipfian pmfr8   r   r   )r&   r   r(   r   s      r,   pzipz,TestZipfian.test_zipfian_naive.<locals>.pzipE  s.     1uA1a4x#a)++r.   r8   )weightsrX   r   r   r   mvskrz   )
rS   	vectorizerT   cumsumaverager   r
   rH   r$   r|   )r   r   r(   r   r&   rH   r$   meanvarstdskewkurtosisr   s               @r,   test_zipfian_naivezTestZipfian.test_zipfian_naive<  s!    
	2 
	2 
	, 
	, IIacN1amiinzz!S)jj!d(Q43hzzAdFC<!+S9::$|a/=AAq!,c2Aq!,c2aF;sD(3	5r.   N)__name__
__module____qualname__r   r   r   rS   rg   rh   vstackr   r   Tnaive_testspytestmarkparametrizer   r   r.   r,   r   r     s    	7KF0 IINN1"))[R[[Q3YY..q"b9; <<=A  [[V[15 25r.   r   c                      e Zd Zej                  j                  d       dZdZej                  j                  dee      Z	ej                  j                  dee      Z
e	e
z   Z ej                  deej                        Z ej                  dee
z
        Z ej                   ee	      Z ej                  eeej                        Z ej                  j&                  ej                   dz  Zej,                  j/                  ddd	g      d
        Zd Zd Zd Zej,                  j/                  ddd	g      d        Zy)TestNCHrX   rX   r   r   rf   r8   r^   r   	dist_namer   r   c           	          t         t        d}||   }| j                  | j                  | j                  | j
                  f\  }}}}t        |j                  ||||d      t        j                  ||||             y )Nr   r   r8   )odds)	r   r   rb   r)   m1r(   r   rH   r   )r   r   distsdistrb   r)   r   r(   s           r,   test_nch_hypergeomzTestNCH.test_nch_hypergeomi  sq    
 (:*?AYffdffdggtvv51b!Ar115!aB2	4r.   c           	         | j                   | j                  | j                  | j                  | j                  f\  }}}}}t
        j                  d        } ||||||      \  }}}	t        t        j                  |||||      |       t        t        j                  ||||d      |       t        t        j                  ||||d      |	       y )Nc                    |z
  t        j                  dz
        t        j                        fdfd} |d      } |d      } |d      } |       |z  }	||z  }
||z  ||z  dz  z
  }|	|
|fS )Nr   c                 P    t        |       }t        | z
        }||z  | z  z  S r   )special_binom)rb   t1t2r   m2r(   ws      r,   fzFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.f  s1    "2q)"2q1u-BwA~%r.   c                 J     t         fdt        dz         D              S )Nc              3   :   K   | ]  } |      |z  z    y wr   r   ).0rk   r   r&   s     r,   	<genexpr>zYTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P.<locals>.<genexpr>  s     @1Q419@s   r8   )r   range)r&   r   xlxus   `r,   PzFTestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_var.<locals>.P  s    @eBQ.?@@@r.   r8   rX   rS   maximumminimum)rb   r)   r   r(   r   r   P0P1P2rH   r   r   r   r   r   r   s     ```       @@@@r,   pmf_mean_varz;TestNCH.test_nchypergeom_fisher_naive.<locals>.pmf_mean_vary  s     RBAqt$BAr"B&
A 1B1B1BA$)C7Dr'R"WqL(Cc>!r.   mrz   v)rb   r)   r   r(   r   rS   r   r   r   rH   r|   )
r   rb   r)   r   r(   r   r  rH   r   r   s
             r,   test_nchypergeom_fisher_naivez%TestNCH.test_nchypergeom_fisher_naiveu  s     FFDFFDGGTVVTYYF1b!T		" 
	", &aB48T3*..q!RDA3G*00B4M	*00B4M	r.   c           
         t         j                  j                  d       d}d}t         j                  j                  d||      }t         j                  j                  d||      }||z   }t        j                  d||j
                        }t        j                  d||z
        }t        j                  ||      }t        j                  |||j
                        }	t        j                  j                  |	j
                   dz  }
d t         j                  fd       t               5 }|j                  t        d	
       t        t        j                  ||||
       ||||
      d       d d d        t         j                  fd       }t               5 }|j                  t        d	
       t        t        j                   ||||
d       |||||
      d       d d d        t         j                  fd       } ||	||||
      }t        j"                  |	||||
      }d\  }}t        j$                  ||z
        ||t        j$                  |      z  z   k  }|j'                         t        j(                  |      dz  kD  sJ t+        ||    ||    ||    |
|          D ]  \  }}}}
||z
  } ||||
      \  }}t        j,                  ||dz         }	 ||	||||
      j'                         dk  sJ t        t        j"                  |	||||
      j'                         d        y # 1 sw Y   xY w# 1 sw Y   ]xY w)NrX   r   rf   r8   r^   r   c                 r    | |z
  }t        j                  d||z
        }t        j                  ||      }||fS )Nr   r   )r)   r   r(   r   r   r   r   s          r,   rU   z9TestNCH.test_nchypergeom_wallenius_naive.<locals>.support  s8    RBAqt$BAr"Br6Mr.   c                 t    | z
   |       \  }}fd}t        |||f      j                  S )Nc                 2    | z  d| z
  z  z
  z  z   dz
  S Nr8   r   )ur   r   r(   r   s    r,   funzCTestNCH.test_nchypergeom_wallenius_naive.<locals>.mean.<locals>.fun  s(    tqAaC8|a//!33r.   )bracket)r   root)	r)   r   r(   r   r   r   r  r   rU   s	    ```   @r,   r   z6TestNCH.test_nchypergeom_wallenius_naive.<locals>.mean  s>    RBQAq)FB4 sRH5:::r.   z!invalid value encountered in mean)messageg{Gz?r"   c                     | |z
  } | |||      }|||z
  z  }||z
  ||z   |z
  z  }| |z  |z  | dz
  ||z  ||z  z   z  z  S r  r   )	r)   r   r(   r   r   r  r   r   r   s	           r,   variancez:TestNCH.test_nchypergeom_wallenius_naive.<locals>.variance  sg    RBQAq!AR!VA1q2vz"AQ3q5QqSRTBqD[122r.   r  rz   g?c                 h    	 |z
  	 
|      \  }}	 fd	fd} |       S )Nc                 j    z
  z  z
  z
  z   }d| |z  z  z
  z  d| d|z  z  z
  z
  z  z  }|S r  r   )tDresr   r   r(   r   rb   s      r,   	integrandzHTestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.integrand  sQ    rAvJ"!*-QqSzAo1qs8qs(;;
r.   c                 p    t        |       }t        | z
        }t        dddd      }||z  |d   z  S )Nr   r8   gؗҜ<)epsrelepsabs)r   r   )rb   r   r   the_integralr  r   r   r(   s       r,   r   z@TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf.<locals>.f  sH    "2q)"2q1u-#Iq!+0 @Bwa00r.   r   )rb   r)   r   r(   r   r   r   r   r  r   rU   s   ` ```   @@r,   rH   z5TestNCH.test_nchypergeom_wallenius_naive.<locals>.pmf  s:    RBQAq)FB 
1 Q4Kr.   )r   r   r   )rS   rg   rh   r   r`   ra   r   r   r   r   r   filterRuntimeWarningr   r   r   r|   rH   absr   prodziprT   )r   ra   max_mr   r   r)   r(   r   r   rb   r   supr  rH   pmf0pmf1r   r#   ir   rU   s                      @@r,    test_nchypergeom_wallenius_naivez(TestNCH.test_nchypergeom_wallenius_naive  s    			qYYq%e4YYq%e4GKK1177+ZZ1R4 ZZ2KKBRXX.IINNAGG$Q&	 
	; 
	;   	:CJJ~B  D166q"aC B1-D:	: 
	3 
	3   	CJJ~B  D%++Ar1aEB1%	 
	 
	$ 1aQ"$((Ar1a8
dFF4$;$bffTl):"::uuw!++++ q!ub!faeQrU; 		PKAr1aRBQAq)FB		"b1f%A q!RA&**,r111155aB1EIIKQO		Pe	: 	:	 	s   0AL4AM4L>Mc           	      P   d}d}d}d}t        j                  d      }t        j                  g d      }d}d}t        t	        j
                  |||||      |d	d	
       t        t	        j                  ||||      |d	       t        t	        j                  ||||      |d       y )Nr5   r   ru   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@rP   )r#   r   r"   gdy=)rS   rT   arrayr   r   rH   r   r   )	r   r'   r(   r)   r   r$  rH   r   r   s	            r,   test_wallenius_against_mpmathz%TestNCH.test_wallenius_against_mpmath  s     iimhh / 0* "  	-11#q!QEs"	0-221aDA5	*-11!Q4@%	)r.   c                     t         t        d}||   }|j                  dddgdggg dd      }|j                  dk(  sJ y )	Nr   r5   r   r   ru   )r   rR   g       @r]   r^   )r   r   r`   ra   )r   r   r   r   rb   s        r,   test_rvs_shapezTestNCH.test_rvs_shape  sN     (:*?AYHHRrdRD\?HNww,&&&r.   N)r   r   r   rS   rg   rh   ra   r#  r   r   r   r)   r`   r(   r   r   r   r   rb   r   r   r   r   r   r   r  r(  r+  r-  r   r.   r,   r   r   [  sD   IINN1EE			1e%		0B			1e%		0B
RAAqqww'A	Aqt	B	Ar	BB*A299>>177#A%D [[[24KLN4N4 DZPx()T [[[24KLN'N'r.   r   zmu, q, expected)r   x   g@	#)i  r   g"qVUc                 ^    d}|||| z   z  }}t        t        j                  |||      |       y )Nru   )r   r   logcdf)r   qr*   r_   r(   r+   s         r,   test_nbinom_11465r2  *  s3    
 DtBwqA FMM!Q*H5r.   c                      t        j                  ddd      } d}t        |      j                  |       }| dz  dk(  }t	        |d   |       t	        |d   d|z
         t        ||    d       y )Nr   r8   re   g?r   )rS   r   r   rH   r   r   )rb   r+   rH   r'  s       r,   test_gh_17146r4  7  sl     	Aq"AA
A,

1
C	
Q!ACGQCFAaC aR!r.   )=r   	itertoolsscipy.statsr   r   r   r   r   r   r	   r
   r   r   r   r   r   numpyrS   numpy.testingr   r   r   r   scipy.specialr   scipy.optimizer   scipy.integrater   r   r   r-   r3   rB   rL   rV   rY   rc   rl   rs   rw   productintfloatr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r4  r   r.   r,   <module>r?     s    M M M M   1 &  
 5:;,;, 56:;<
,<
,
H4)	>C#-&% #49#4#4U|nQ6F#GHP IP%F
E
*"B: / 
2 
5
5K
H-'S5 S5lL' L'^ *;79:6:6	r.   