
    xf              	          d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlZ	d dl
mZmZmZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d d	lm Z   G d
 d      Z!dd e!       ifddg difddg difdd e!       ifdd e!       ifd e!       d dfgZ"ejF                  jH                  dk(  rejF                  jJ                  dk  rdZ&ndZ&d edfd e'e&fd e(dfd edfd edfd  e'd!fgZ)d" edfd# edfd$ e'e&fd% e(dfd& e'd!fgZ*d' e'e&fd( e(dfd) edfd* edfd+ e'd!fgZ+g d,fd-d.ggd/fd0d1e	jX                  d2gd3fd0d1e	jZ                  d2gd3fd.d.gd4fgZ.d5e/d6fd7e/d6fgZ0d8ed9fd:ed9fgZ1d;ed9fe	jZ                  e	jZ                  fed9fe	jZ                   e	jZ                   fed9fe	jZ                  e	jZ                   fed9fe	jZ                   e	jX                  fe/d<fe	jX                  e	jZ                  fe/d<fgZ2d e	jX                  fe/d<fe	jX                  e	jX                  fe/d<fgZ3ejh                  jk                  d=e1e0z   e3z         ejh                  jk                  d>e"      d?               Z6ejh                  jk                  d>e"      d@        Z7dA Z8dB Z9ejh                  jk                  d>e"      dC        Z:ejh                  jk                  dDg dE      dF        Z;dG Z<d\dHZ=d]dIZ>dJ Z?ejh                  jk                  dKg dL      dM        Z@ejh                  jk                  dKddg       G dN dO             ZA G dP dQ      ZB G dR dS      ZC G dT dU      ZD G dV dW      ZE G dX dY      ZF G dZ d[      ZGy)^    N)deepcopy)assert_allcloseassert_equalsuppress_warnings)TransformedDensityRejectionDiscreteAliasUrnDiscreteGuideTableNumericalInversePolynomialNumericalInverseHermiteSimpleRatioUniformsUNURANError)stats)special)	chisquarecramervonmises)distdiscretedistcont)check_random_statec                       e Zd Zd Zd Zd Zy)StandardNormalc                     dt        j                  dt         j                  z        z  t        j                  d|z  |z        z  S N      ?       @      ࿩npsqrtpiexpselfxs     A/usr/lib/python3/dist-packages/scipy/stats/tests/test_sampling.pypdfzStandardNormal.pdf   s4    "''"RUU(##bffTAXaZ&888    c                     dt        j                  dt         j                  z        z  | z  t        j                  d|z  |z        z  S r   r   r!   s     r$   dpdfzStandardNormal.dpdf#   s;    "''"RUU(##qb(266$(1*+===r&   c                 ,    t        j                  |      S N)r   ndtrr!   s     r$   cdfzStandardNormal.cdf&   s    ||Ar&   N__name__
__module____qualname__r%   r(   r,    r&   r$   r   r      s    9>r&   r   r   distr   ){Gz?
ףp=
?皙?r	   r
   r   r   )r2   modepypy)      
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                     |  S r*   r1   r#   s    r$   <lambda>r=   >   s    r r&   z...c                     g S r*   r1   r<   s    r$   r=   r=   @       r r&   c                     t         S r*   foor<   s    r$   r=   r=   B       s r&   name 'foo' is not definedc                 "    t         j                  S r*   r   infr<   s    r$   r=   r=   D   
    rvv r&   c                 "    t         j                  S r*   r   nanr<   s    r$   r=   r=   F   rH   r&   c                       yNr   r1   r1   r&   r$   r=   r=   H       r&   ,takes 0 positional arguments but 1 was givenc                 "    t         j                  S r*   rF   r<   s    r$   r=   r=   O   rH   r&   c                 "    t         j                  S r*   rJ   r<   s    r$   r=   r=   Q   rH   r&   c                     g S r*   r1   r<   s    r$   r=   r=   S   r?   r&   c                     t         S r*   rA   r<   s    r$   r=   r=   U   rC   r&   c                       yrM   r1   r1   r&   r$   r=   r=   W   rN   r&   c                     g S r*   r1   r<   s    r$   r=   r=   ^   r?   r&   c                     t         S r*   rA   r<   s    r$   r=   r=   `   rC   r&   c                 "    t         j                  S r*   rF   r<   s    r$   r=   r=   b   rH   r&   c                 "    t         j                  S r*   rJ   r<   s    r$   r=   r=   d   rH   r&   c                       yrM   r1   r1   r&   r$   r=   r=   f   rN   r&   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r5   )must contain only finite / non-nan values(must contain at least one non-zero value)      r9   zmust be a length 2 tupler1   )r`   r_   zleft >= right)r_   r_   )r:   r:   zonly non-nan valuesdomain, err, msgzmethod, kwargsc                     t        t        j                  |      }t        j                  ||      5   |di |d| i d d d        y # 1 sw Y   y xY w)Nmatchdomainr1   )getattrr   samplingpytestraises)re   errmsgmethodkwargsMethods         r$   test_bad_domainro      sG    
 U^^V,F	s#	& ('''( ( (s   AAc                 4   t        t        j                  |       }d} |di |d|i} |di |d|i}t        |j	                  d      |j	                  d             t
        j                  j                  d        |di |}|j	                  d      }t
        j                  j                  d         |di |ddi}|j	                  d      }t        ||       t
        j                  j                  t
        j                  j                  d            }t
        j                  j                  t
        j                  j                  d            }	 |di |d|i} |di |d|	i}t        |j	                  d      |j	                  d             y )N{   random_stated   r1   )rf   r   rg   r   rvsr   randomseedRandomStateMT19937	Generator)
rl   rm   rn   rv   rng1rng2rvs1rvs2seed1seed2s
             r$   test_random_stater      sB   U^^V,F D.F..D.F..D#. IINN3FD88C=DIINN4-F--D88C=Dt
 II!!"))"3"3C"89EII		 1 1# 67E/F//D/F//D#.r&   c                  r   t        t               d      } t        t                     }|j                  d       t        | j	                  d      |j	                  d             t        t               d      }|j	                  d      }|j                  d       |j	                  d      }t        ||       y )Nrq   rr   rs   )r   r   set_random_stater   rt   )rz   r{   rngr|   r}   s        r$   test_set_random_stater      s    &~'7cJD&~'78D##.
%n&6S
IC773<D773<Dtr&   c                  >   d d d G d d      fd} fd}t        j                  |       }t        j                  |      }|j                          |j                          |j                          |j                          d   dk(  sJ d	   d
k(  sJ y )N)err1err2c                       e Zd Zd Zd Zd Zy).test_threading_behaviour.<locals>.Distributionc                     || _         y r*   )pdf_msg)r"   r   s     r$   __init__z7test_threading_behaviour.<locals>.Distribution.__init__   s	    "DLr&   c                 N    d|cxk  rdk  rn |S t        | j                        |S )Ng33333H@g      I@)
ValueErrorr   r!   s     r$   r%   z2test_threading_behaviour.<locals>.Distribution.pdf   s(    a$H !..Hr&   c                      yNr_   r1   r!   s     r$   r(   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    r&   N)r.   r/   r0   r   r%   r(   r1   r&   r$   Distributionr      s    	#	
	r&   r   c                       d      } t        | dd      }	 |j                  d       y # t        $ r}|j                  d   d<   Y d }~y d }~ww xY w)NrB   r:   rs      re   rr   順 r   r   r   rt   r   argsr2   r   er   errorss      r$   func1z'test_threading_behaviour.<locals>.func1   sO    E")$y79;	'GGFO 	'VVAYF6N	'   + 	AAAc                       d      } t        | dd      }	 |j                  d       y # t        $ r}|j                  d   d<   Y d }~y d }~ww xY w)Nbarr   r`   r   r   r   r   r   r   s      r$   func2z'test_threading_behaviour.<locals>.func2   sO    E")$y78:	'GGFO 	'VVAYF6N	'r   )targetr   rB   r   r   )	threadingThreadstartjoin)r   r   t1t2r   r   s       @@r$   test_threading_behaviourr      s     D)F
 
'' 
			'B				'BHHJHHJGGIGGI&>U"""&>U"""r&   c                     t        t        j                  |       } |di |ddi}t        j                  |      }t        j
                  |      }t        |j                  d      |j                  d             y )Nrr   rq   rs   r1   )rf   r   rg   pickledumpsloadsr   rt   )rl   rm   rn   rz   objr{   s         r$   test_pickler      sZ    U^^V,F-F--D
,,t
C<<D#.r&   size)Nr   )r   r_   )r:   r9   )r`   r9         )r   r   )r   r_   c                     t        t                     }| 't        j                  |j	                  |             sJ y t        j                  |       r| f} |j	                  |       j
                  | k(  sJ y r*   )r   r   r   isscalarrt   shape)r   r   s     r$   test_rvs_sizer     s_    
 &n&6
7C|{{3774=)));;t8Dwwt}""d***r&   c                     t        j                         } t        j                  j	                  d      }t        | |      }t        j                  ddd      }t        || | j                                t        | j                  |      |j                  |             t        j                  dd      } t        | |      }t        || | j                                t        | j                  |      |j                  |             t        j                  d	d
      } t        | |      }| j                         }| j                  t        j                  |d   |d   dz               }t        ||| j                                y )Nr   r   r_   rs   num      $@      @)locscaler:   r[   )r   normr   ru   default_rngr   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r2   urngr   ure   pvs         r$   test_with_scipy_distributionr     s   ::<D99  #D
!$T
:C
Aqc"AsD$**,/DHHQK,::#R(D
!$T
:CsD$**,/DHHQK,;;r3D
4d
3C\\^F	"))F1Ivay{3	4BR.r&   c                 l   | j                  d      }|j                         |j                         f}t        j                  |d         rt        ||||       | j                  d      }t        j                  |j                        |_        t        ||j                        j                  }|dkD  sJ y )Nr   r_   rtolatoli  皙?)
rt   meanvarr   isfiniter   	vectorizer,   r   pvalue)r   r2   mv_exr   r   rt   mvpvals           r$   r   r   '  s    
''&/C	SWWY	B	{{58E48
''#,C||DHH%DH#txx(//D#::r&   c                    | j                  d      }|j                         |j                         f}t        ||||       ||j	                         z  }t        j                  |      }t        j                  |d      \  }}	|	|	j	                         z  }	|	|d |	j                   t        ||      j                  }
|
dkD  sJ y )Nr   r   T)return_countsr   )rt   r   r   r   sumr   
zeros_likeuniquer   r   r   )r   r   r   r   r   rt   r   	obs_freqs_freqsr   s              r$   r   r   4  s    
''&/C	SWWY	BBDt4	bffhBb!IyyD1HAuEIIKE"IkuzzY#**D#::r&   c                     d} t        j                  t        |       5  t        t	               dd       d d d        t        j                  t        |       5  t        t	               d       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nz.102 : center moved into domain of distributionrc   r   r9   r   )centerre   re   )rh   warnsRuntimeWarningr
   r   )rk   s    r$   !test_warning_center_not_in_domainr   D  sy     ;C	nC	0 N">#3AfMN	nC	0 D">#3FCD DN ND Ds   A7B7B Brl   )r   r
   r   c                     t        t        j                  |       }d}t        j                  t
        |      5   |t               dd       d d d        y # 1 sw Y   y xY w)Nz17 : mode not in domainrc   r   r   )r6   re   )rf   r   rg   rh   ri   r   r   )rl   rn   rk   s      r$   test_error_mode_not_in_domainr   N  sK     U^^V,F
#C	{#	. 8~a78 8 8s   AAc                      e Zd Zd Zdej
                  j                  dd      ej
                  j                  dd      gZd e	       fddd	d
gZ
d e	       fd e	       fdgZej                  j                  de      ej                  j                  de
      ej                  j                  de      d                      Zd Zy)TestQRVSc                    d}t        j                  t        |      5  t        t        j
                  |      } |t                     }|j                  d       d d d        t        t        j
                  |      } |t                     }d}t        j                  t        |      5  |j                  dt        j                  j                  d             d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nz&`qmc_engine` must be an instance of...rc   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r9   r`   dr   )
rh   ri   r   rf   r   rg   r   qrvsqmcHalton)r"   rl   rd   rn   gens        r$   test_input_validationzTestQRVS.test_input_validation_  s    8]]:U3 	#U^^V4F)*CHHH"	# 0^%&H]]:U3 	:HHqUYY%5%5a%8H9	: 	:	# 	#	: 	:s   =C$*1C0$C-0C9Nr_   r   rv   r9   )r_   )r_   )r   r   )r   r   )r`   r   r   )r9   )r9   qrngsize_in, size_outzd_in, d_outc                 "   t         j                  dk(  xr t        j                         d   dk(  }|r|dk(  rt        j                  d       t               }t        t        j                  |      }	 |	|      }
|L|J|j                  |k7  r;d}t        j                  t        |      5  |
j                  |||       d d d        y |||j                  d	k7  r|j                  f}||z   }t        |      }|
j                  |||
      }||j                  |k(  sJ |e|j                  t!        j"                  |      xs d	      }t        j$                  j'                  |      j)                  |      }t+        ||d       y y # 1 sw Y   y xY w)Nwin32r   32bitr
   z4NumericalInversePolynomial.qrvs fails for Win 32-bitr   rc   r   r_   r   r   r   -q=r   )sysplatformarchitecturerh   xfailr   rf   r   rg   r   ri   r   r   r   r   ru   r   prodr   r   reshaper   )r"   r   size_insize_outd_ind_outrl   w32r2   rn   r   rd   shape_expectedqrng2r   uniformqrvs2s                    r$   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistencyu  sk   
 llg%O(*?*?*A!*D*O699LL " # 0Tl  0TVVt^LEz7 ;DT:; <D,1VVIE!E)xxWx>::///ll2777#3#8q9GJJNN7+33NCED%e4 ;s   (FFc                    t               }t        t        j                  |      } ||      }d}d}t        j                  j                  |d      }t        j                  j                  |d      }|j                  t        j                  |            }	|j                  |||      }
t        j                  j                  |	      }t        |      D ]/  }|
d|f   }|d d |f   j                  |      }t        ||d       1 y )	N)r9   r   r   r   r   r   .r   r   )r   rf   r   rg   r   r   ru   r   r  r   r   r   ranger  r   )r"   rl   r2   rn   r   r   r   r   r  r  r   r  isamplesample2s                  r$   test_QRVS_size_tuplezTestQRVS.test_QRVS_size_tuple  s     0Tlyy*		   +,,rwwt}-xxTQ4x8

w'q 	9A#q&\FAqDk))$/GFG%8	9r&   )r.   r/   r0   r   r   r   Sobolr   qrngstuplesizesdsrh   markparametrizer  r  r1   r&   r$   r   r   \  s    : 599??11?-uyy/?/?/?/JKEEG_i+-E /Auw<	3B[[VU+[[0%8[[]B/ 5 0 9 , 5D9r&   r   c            
          e Zd Z G d d      Z G d d      Z G d d      Z e        e        ed       ed      gZdd	gZdd
gZde	j                  gZde	j                  gZeeeegZej                  j!                  d eee            d        Zd edfgZeez  Zej                  j!                  de      d        Zej                  j!                  de      d        Zej                  j!                  de      d        Zej                  j!                  dg d      d        Zd Zej                  j!                  dde	j:                  e	j                  ddg      d        Z e	j>                  ddd !      g g ge	j:                  ge	j                   e	j:                  e	j                  gde	j:                  d"dgd#d$e	j                  gg d%ggZ ej                  j!                  d&e       d'        Z!d( Z"y))*TestTransformedDensityRejectionc                   $    e Zd Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist0c                     dd||z  z
  z  S N      ?r_   r1   r!   s     r$   r%   z)TestTransformedDensityRejection.dist0.pdf      !AaC%= r&   c                     dd|z  z  S )Nr$  r1   r!   s     r$   r(   z*TestTransformedDensityRejection.dist0.dpdf  s    "Q$<r&   c                 $    d||dz  dz  z
  dz   z  S Nr$  r9   gUUUUUU?r1   r!   s     r$   r,   z)TestTransformedDensityRejection.dist0.cdf      !ad1f*s*++r&   c                      yN)r_   r1   r"   s    r$   r   z-TestTransformedDensityRejection.dist0.support      r&   Nr.   r/   r0   r%   r(   r,   r   r1   r&   r$   dist0r!    s    	!	 	,	r&   r1  c                       e Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist1c                 F    t         j                  j                  |dz        S Nr   r   r   _pdfr!   s     r$   r%   z)TestTransformedDensityRejection.dist1.pdf      ::??1s7++r&   c                 T    | dz  t         j                  j                  |dz        z  S )N{Gz?r   r6  r!   s     r$   r(   z*TestTransformedDensityRejection.dist1.dpdf  s$    29uzzq3w777r&   c                 F    t         j                  j                  |dz        S r5  r   r   _cdfr!   s     r$   r,   z)TestTransformedDensityRejection.dist1.cdf  r8  r&   Nr-   r1   r&   r$   dist1r3    s    	,	8	,r&   r>  c                   $    e Zd Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist2c                     || _         y r*   shiftr"   rC  s     r$   r   z.TestTransformedDensityRejection.dist2.__init__  s	    DJr&   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S Nr         ?rC  absr"   r#   ys      r$   r%   z)TestTransformedDensityRejection.dist2.pdf  /    OAc!frk"A7Q;r&   c                 f    || j                   z  }dt        |      dz   z  }||z  |z  }|dk  r|S | S )Nr   rZ   rH  rJ  s      r$   r(   z*TestTransformedDensityRejection.dist2.dpdf  sA    OAc!frk"AA	AR1(qb(r&   c                 P    || j                   z  }|dk  rdd|z
  z  S ddd|z   z  z
  S NrZ   rG  r   rB  r!   s     r$   r,   z)TestTransformedDensityRejection.dist2.cdf  7    OABwb1f~%C26N**r&   N)r.   r/   r0   r   r%   r(   r,   r1   r&   r$   dist2r@    s    		
	)	+r&   rQ  rZ        @?r:  dist, mv_exc                     t               5 }|j                  t               t        |d      }d d d        t	        ||       y # 1 sw Y   xY wN*   r   )r   filterr   r   r   )r"   r2   r   supr   s        r$   
test_basicz*TestTransformedDensityRejection.test_basic  sK       	ECJJ~&-dDC	E 	3e,		E 	Es   #AAc                      y)Nr   r1   r<   s    r$   r=   z(TestTransformedDensityRejection.<lambda>  rN   r&   50 : bad construction points.pdf, err, msgc                      G d d      }||_         d |_        t        j                  ||      5  t	        |       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy):TestTransformedDensityRejection.test_bad_pdf.<locals>.distNr.   r/   r0   r1   r&   r$   r2   r`        r&   r2   c                      yr   r1   r<   s    r$   r=   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  rN   r&   rc   r%   r(   rh   ri   r   r"   r%   rj   rk   r2   s        r$   test_bad_pdfz,TestTransformedDensityRejection.test_bad_pdf  sE    	 		]]3c* 	.'-	. 	. 	.s   AAzdpdf, err, msgc                      G d d      }d |_         ||_        t        j                  ||      5  t	        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy);TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNra  r1   r&   r$   r2   ri    rb  r&   r2   c                     | S r*   r1   r<   s    r$   r=   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r&   rc   r_   r:   r   rd  )r"   r(   rj   rk   r2   s        r$   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  sG    	 		]]3c* 	>'W=	> 	> 	>s   AAra   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wNrc   r   )rh   ri   r   r   r"   re   rj   rk   s       r$   test_inf_nan_domainsz4TestTransformedDensityRejection.test_inf_nan_domains  s6    ]]3c* 	I'(8H	I 	I 	I	   7A construction_points)r-  r   r   c                     t        j                  t        d      5  t        t	               |       d d d        y # 1 sw Y   y xY w)Nz1`construction_points` must be a positive integer.rc   rr  rh   ri   r   r   r   r"   rr  s     r$   #test_bad_construction_points_scalarzCTestTransformedDensityRejection.test_bad_construction_points_scalar  s=    ]]: .D E 	' 6I	 	 	s	   ;Ac                    g }t        j                  t        d      5  t        t	               |       d d d        g d}t        j
                  t        d      5  t        t	               |       d d d        t        j                  t        j                  t        j                  g}t        j                  t        d      5  t        t	               |       d d d        ddg}t        j
                  t        d	      5  t        t	               d
|       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   y xY w)NzC`construction_points` must either be a scalar or a non-empty array.rc   rt  )r_   r_   r_   r_   r_   r_   z:33 : starting points not strictly monotonically increasingr\  r:   z!50 : starting point out of domain)r9   )re   rr  )
rh   ri   r   r   r   r   r   r   rK   r   rv  s     r$   "test_bad_construction_points_arrayzBTestTransformedDensityRejection.test_bad_construction_points_array#  s(    ]]: .M N 	 ( 6I	 1\\. 1> ? 	 ( 6I	  "vvrvvrvv6]]; /9 : 	' 6I	  #Bi\\. 1: ; 	' $7	 	5	 		 		 		 	s/   D D,D8 E D),D58EEc      r   r   c                     d}t        j                  t        |      5  t        t	               d       d d d        y # 1 sw Y   y xY w)Nz`c` must either be -0.5 or 0.rc   r}  )r|  ru  )r"   r|  rk   s      r$   
test_bad_cz*TestTransformedDensityRejection.test_bad_cG  s;    .]]:S1 	A'(8C@	A 	A 	A	   =Ar   r_   i  r   rG  r[   r\   r'  r9   r   r   c                    t        t               d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd	       |j                  |j                  k(  sJ y # 1 sw Y   4xY w)
NgH.?)max_squeeze_hat_ratio$invalid value encountered in greater*invalid value encountered in greater_equal!invalid value encountered in less'invalid value encountered in less_equalMbP?h㈵>r   )r   r   r   rX  r   ppf_hatr   r   r   r   r   )r"   r   r   rY  resexpecteds         r$   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hatQ  s     *.*:@FH   	)CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5++a.Czz~~a(H	) 	XDt<yyHNN***	) 	)s   B	CC%c                      G d d      }d}t        j                  t        |      5  t        |       d d d         G d d      }d}t        j                  t        |      5  t        |       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)Nc                       e Zd Zy);TestTransformedDensityRejection.test_bad_dist.<locals>.distNra  r1   r&   r$   r2   r  g  s    r&   r2   z`pdf` required but not found.rc   c                       e Zd Zd Zy)r  c                     d| | z  z
  S r   r1   r<   s    r$   r=   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>p  s    AacE r&   Nr.   r/   r0   r%   r1   r&   r$   r2   z;TestTransformedDensityRejection.test_bad_dist.<locals>.disto  s    !Cr&   z`dpdf` required but not found.)rh   ri   r   r   )r"   r2   rk   s      r$   test_bad_distz-TestTransformedDensityRejection.test_bad_diste  s    	 	 /]]:S1 	.'-	.	" 	" 0]]:S1 	.'-	. 	.	. 	.	. 	.s   A8#B8BBN)#r.   r/   r0   r1  r>  rQ  distsmv0mv1r   rG   mv2mv3mvsrh   r  r  ziprZ  r   bad_pdfsbad_pdfs_commonrf  bad_dpdf_commonrl  inf_nan_domainsrp  rw  r{  rK   r  r   r   r  r  r1   r&   r$   r  r    s)    , ,+ +, WeguRy%-8E v,Ct*Crvv,C266
CS#
C[[] _.-.- k+KLMHH[[_h7. 8. [[-?> @> [[/AI BI [[2LA B"H [[S3R"@AA BA
 
Qt	$b2$66'266266	"A663
sC0*	=	?A [[S!$+ %+&.r&   r  c            	          e Zd Zh dZej
                  j                  de      d        Zd e	dfd e	dfd e	dfd	 e
d
fd e	dfd edfd edfgZej
                  j                  de      d        Zej
                  j                  dg dg dg      d        Zej
                  j                  de      d        Zej&                   ej&                  fej&                  ej&                  fej&                   ej&                   fdej&                  fej&                   dfgZej
                  j                  de      d        Zd Zd Zd Zy) TestDiscreteAliasUrn>   randintnchypergeom_fishernchypergeom_walleniusdistname, paramsc                    || j                   v rd}t        j                  |       t        |t              s|}nt        t        |      } || }|j                         }t        j                  |d   |d   z
        st        j                  d       t        j                  |d   |d   dz         }|j                  |      }|j                  d      }t        |d      }	t        |	||       y )NzYDAU fails on these probably because of large domains and small computation errors in PMF.r_   r   z$DAU only works with a finite domain.r   rW  r   )basic_fail_distsrh   skip
isinstancestrrf   r   r   r   r   r   r   r   r   
r"   distnameparamsrk   r2   re   kr   r   r   s
             r$   rZ  zTestDiscreteAliasUrn.test_basic  s    t,,,:CKK(C(D5(+DV}{{6!9vay01 KK>?IIfQi1-XXa[

4 t"5CU+r&   c                 "    t         j                  S r*   rF   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  
    266 r&   r]   c                 "    t         j                  S r*   rJ   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  r  r&   c                      y)NrZ   r1   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  rN   r&   r^   c                     t         S r*   rA   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    3 r&   rD   c                     g S r*   r1   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    2 r&   z)setting an array element with a sequence.c                     |  S r*   r1   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    A2 r&   z50 : probability < 0c                       yrM   r1   r1   r&   r$   r=   zTestDiscreteAliasUrn.<lambda>  rN   r&   rO   zpmf, err, msgc                      G d d      }||_         t        j                  ||      5  t        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNra  r1   r&   r$   r2   r    rb  r&   r2   rc   rk  r   )r   rh   ri   r   )r"   r   rj   rk   r2   s        r$   test_bad_pmfz!TestDiscreteAliasUrn.test_bad_pmf  s@    	 	]]3c* 	3T'2	3 	3 	3s   A  A	r   )r4   r3   r5   )r   r   g      @      @r   g      @c                 x   t        j                  |t         j                        }t        |d      }|j	                  d       ||j                         z  }t        j                  dt        |            }t        j                  ||      }t        j                  ||z
  dz  |      }||f}t        |||       y )N)dtyperq   r   r   r   )weightsr`   )
r   asarrayfloat64r   rt   r   r   lenaverager   )r"   r   r   variates
m_expected
v_expectedmv_expecteds          r$   test_sampling_with_pvz*TestDiscreteAliasUrn.test_sampling_with_pv  s     ZZ"**-r4"&&(]99QB(ZZ"5
ZZJ!61 <bI
 *,C[1r&   pv, msgc                 z    t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY wNrc   rh   ri   r   r   r"   r   rk   s      r$   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s-    ]]:S1 	!R 	! 	! 	!   1:r   re   c                     t        j                  t        d      5  t        t	        j
                  dd      |       d d d        y # 1 sw Y   y xY wNzmust be finiterc   r:   r[   r   )rh   ri   r   r   r   r   r"   re   s     r$   test_inf_domainz$TestDiscreteAliasUrn.test_inf_domain  s?    ]]:->? 	BU[[S1&A	B 	B 	B   "AAc                     t        j                  t        d      5  t        ddgd       d d d        y # 1 sw Y   y xY w)Nzrelative urn size < 1.rc   rG  r-  )
urn_factor)rh   r   r   r   r.  s    r$   test_bad_urn_factorz(TestDiscreteAliasUrn.test_bad_urn_factor  s4    \\.0IJ 	8c3ZB7	8 	8 	8s   5>c                     d} G d d      }t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY w)NzG`domain` must be provided when the probability vector is not available.c                       e Zd Zd Zy)0TestDiscreteAliasUrn.test_bad_args.<locals>.distc                     |S r*   r1   r!   s     r$   r   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmf  s    r&   N)r.   r/   r0   r   r1   r&   r$   r2   r    s    r&   r2   rc   r  )r"   rk   r2   s      r$   test_bad_argsz"TestDiscreteAliasUrn.test_bad_args  s@    7	 	 ]]:S1 	#T"	# 	# 	#s	   =Ac                     t        j                  t        j                  d            }t	        |d      }t        ||dd       y )N)i  rW  r   )g     @g    
Ag{Gzt?)r   )r   softmaxr   onesr   r   )r"   r   r   s      r$   test_gh19359z!TestDiscreteAliasUrn.test_gh19359  s7    __RWWW-.r3C%C!%	'r&   N)r.   r/   r0   r  rh   r  r  r   rZ  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rG   
inf_domainr  r  r  r  r1   r&   r$   r  r  w  s    [[/>, ?,2 
:	5	7 
:	5	7 

	4	6 
		%	' 
z	5	7 
{	 	" 
i	8	:)G0 [[_g63 73 [[T$5$B$D E
2E
2 [[Y6! 7! FF7BFF#bffbff%5"&&7Ibff+|-J [[Xz2B 3B8	#'r&   r  c                      e Zd Z G d d      Z G d d      Z G d d      Z G d d      Z e        e        e        e       gZd	d
gZd	dgZ	de
j                  z  dde
j                  dz  z  z
  gZde
j                  z  dde
j                  dz  z  z
  gZee	eegZej                   j#                  d eee            d        Zej                   j(                  ej                   j#                  de      d               Zej                   j#                  de      d        Zej                   j#                  de      d        Zej                   j#                  de      d        Z e
j:                  ddd      g g ge
j<                  ge
j>                   e
j<                  e
j>                  gde
j<                  dd gd!d"e
j>                  gg d#ggZ ej                   j#                  d$e       d%        Z! e
j:                  d&d'd      g g ge
j<                  ge
j>                   e
j<                  e
j>                  gde
j<                  dd gd!d"e
j>                  ge
j>                   d(d)gggZ"ej                   j#                  d*e"      d+        Z#d, Z$dd-d.e
j>                  e
j<                  gZ%d/d e
j>                  e
j<                  gZ&ej                   j#                  d0e%      d1        Z'ej                   j#                  d2e&      d3        Z(d4 Z)d5 Z*y6)7TestNumericalInversePolynomialc                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist0c                     dd||z  z
  z  S r#  r1   r!   s     r$   r%   z(TestNumericalInversePolynomial.dist0.pdf  r%  r&   c                 $    d||dz  dz  z
  dz   z  S r)  r1   r!   s     r$   r,   z(TestNumericalInversePolynomial.dist0.cdf  r*  r&   c                      yr,  r1   r.  s    r$   r   z,TestNumericalInversePolynomial.dist0.support  r/  r&   Nr.   r/   r0   r%   r,   r   r1   r&   r$   r1  r    s    	!	,	r&   r1  c                       e Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist1c                 F    t         j                  j                  |dz        S r5  r6  r!   s     r$   r%   z(TestNumericalInversePolynomial.dist1.pdf  r8  r&   c                 F    t         j                  j                  |dz        S r5  r<  r!   s     r$   r,   z(TestNumericalInversePolynomial.dist1.cdf  r8  r&   N)r.   r/   r0   r%   r,   r1   r&   r$   r>  r    s    	,	,r&   r>  c                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist2c                 f    dddt        j                  dt         j                  z  |z        z   z  z   S )N皙??r_   r`   r   sinr   r!   s     r$   r%   z(TestNumericalInversePolynomial.dist2.pdf  s,    $!bffQruuWQY&7"7888r&   c                     d|dz   z  dddt         j                  z  d|z   z  z   t        j                  dt         j                  z  |z        z
  z  dt         j                  z  z  z   S )Nr  r_   g?r   r   r  r   r   cosr!   s     r$   r,   z(TestNumericalInversePolynomial.dist2.cdf	  s_    !a%LbhA..255
1CCDX  r&   c                      yr,  r1   r.  s    r$   r   z,TestNumericalInversePolynomial.dist2.support  r/  r&   Nr  r1   r&   r$   rQ  r    s    	9	 
	r&   rQ  c                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist3c                 l    ddddt        j                  dt         j                  z  |z        z   z  z   z  S )Nr[   r  r  r_   r`   r  r!   s     r$   r%   z(TestNumericalInversePolynomial.dist3.pdf  s1    $RVVAbeeGAI->)>!??@@r&   c                     |dz  dz   ddt         j                  z  z  t        j                  dt         j                  z        t        j                  dt         j                  z  |z        z
  z  z   S )Nr   rG  g
ףp=
?r`   r:   r  r!   s     r$   r,   z(TestNumericalInversePolynomial.dist3.cdf  s^    S53;qw266"RUU(3C3566!BEE'!)3D4E "F F Fr&   c                      y)N)r   r1   r.  s    r$   r   z,TestNumericalInversePolynomial.dist3.support  r/  r&   Nr  r1   r&   r$   dist3r    s    	A	F	r&   r  rZ   rS  r:  gܿUUUUUU?gQ?r`   g @rT  c                 8    t        |d      }t        |||       y rV  )r
   r   r"   r2   r   r   s       r$   rZ  z)TestNumericalInversePolynomial.test_basic*  s     )B?3e,r&   r  c                    g d}g d}dg}||v rt        j                  d|        ||v rt        j                  d|        t        |t              rt	        t
        |      n|} || }t               5 }|j                  t               t        |d      }d d d        ||v ry t        ||j                         |j                         g       y # 1 sw Y   :xY w)N)anglit
gausshyperkappa4ksonekstwolevy_llevy_stablestudentized_range	trapezoidtriangvonmises)	chi2fatiguelifegibrathalfgennormlognormncfncx2paretotrel_breitwignerzPINV too slow for zPINV fails for rW  r   )rh   r  r  r  rf   r   r   rX  r   r
   r   r   r   )	r"   r  r  very_slow_dists
fail_distsskip_sample_moment_checkr2   rY  r   s	            r$   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists0  s    >-
 %6#6 &KK,XJ78z!KK/(45h, x( 	 V}  	DCJJ~&,TCC	D //3tyy{DHHJ&?@	D 	Ds   5#CCr]  c                      G d d      }||_         t        j                  ||      5  t        |ddg       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNra  r1   r&   r$   r2   r"  T  rb  r&   r2   rc   r   r   r   )r%   rh   ri   r
   re  s        r$   rf  z+TestNumericalInversePolynomial.test_bad_pdfR  sD    	 	]]3c* 	<&tQF;	< 	< 	<   AAzlogpdf, err, msgc                      G d d      }||_         t        j                  ||      5  t        |ddg       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNra  r1   r&   r$   r2   r&  \  rb  r&   r2   rc   r   r   r   )logpdfrh   ri   r
   )r"   r'  rj   rk   r2   s        r$   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdfZ  sD    	 	]]3c* 	<&tQF;	< 	< 	<r#  ra   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrn  )rh   ri   r
   r   ro  s       r$   rp  z3TestNumericalInversePolynomial.test_inf_nan_domainsd  s6    ]]3c* 	H&~'7G	H 	H 	Hrq  r   r_   '  r   rG  r   r[   r\   r  r   c                    t               }t        |d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd       |j                  |j                  k(  sJ y # 1 sw Y   4xY w	N+=u_resolutionr  r  r  r  gdy=r   )
r   r
   r   rX  r   r   r   r   r   r   r"   r   r2   r   rY  r  r  s          r$   test_ppfz'TestNumericalInversePolynomial.test_ppfx      (EB   	)CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5''!*Czz~~a(H	) 	XE>yyHNN***	) 	)   B	CC'ry  r:   r9   r   r#   c                    t               }t        |d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd       |j                  |j                  k(  sJ y # 1 sw Y   4xY wr,  )
r   r
   r   rX  r   r,   r   r   r   r   )r"   r#   r2   r   rY  r  r  s          r$   test_cdfz'TestNumericalInversePolynomial.test_cdf  r2  r3  c                     t               }t        |d      }|j                         \  }}|dk  sJ ||k  sJ t        |d      }|j                         \  }}|dk  sJ ||k  sJ y Ng|=r.  r-  )r   r
   u_error)r"   r2   r   	max_errormaes        r$   test_u_errorz+TestNumericalInversePolynomial.test_u_error  sx    (EB	35   i(EB	35   ir&   g      @   g#B;orderc                     t               }d}t        j                  t        |      5  t	        ||       d d d        y # 1 sw Y   y xY w)Nz2`order` must be an integer in the range \[3, 17\].rc   r=  )r   rh   ri   r   r
   )r"   r=  r2   rk   s       r$   test_bad_ordersz.TestNumericalInversePolynomial.test_bad_orders  s<    C]]:S1 	:&t59	: 	: 	:s	   ?Ar/  c                     d}t        j                  t        |      5  t        t	               |       d d d        y # 1 sw Y   y xY w)Nz.`u_resolution` must be between 1e-15 and 1e-5.rc   r.  )rh   ri   r   r
   r   )r"   r/  rk   s      r$   test_bad_u_resolutionz4TestNumericalInversePolynomial.test_bad_u_resolution  s?    ?]]:S1 	B&~'74@B	B 	B 	Br  c                     G d d      } |       }d}t        j                  t        |      5  t        |      }d d d        t	               }t        |      }d}t        j                  t        |      5  |j                  d       d d d         G d d      } |       }t        |      }d	}t        j                  t        |      5  |j                          d d d        y # 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y xY w)
Nc                       e Zd Zd Zy)=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 @    t         j                  j                  |      S r*   r<  r!   s     r$   r,   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zzq))r&   N)r.   r/   r0   r,   r1   r&   r$   BadDistrE        *r&   rG  z9Either of the methods `pdf` or `logpdf` must be specifiedrc   z4`sample_size` must be greater than or equal to 1000.r:   c                       e Zd Zd Zy)BTestNumericalInversePolynomial.test_bad_args.<locals>.Distributionc                 8    t        j                  d|z  |z        S )Nr   )r   r    r!   s     r$   r%   zFTestNumericalInversePolynomial.test_bad_args.<locals>.Distribution.pdf  s    vvdQhqj))r&   Nr  r1   r&   r$   r   rJ    rH  r&   r   z!Exact CDF required but not found.)rh   ri   r   r
   r   r8  )r"   rG  r2   rk   r   r   s         r$   r  z,TestNumericalInversePolynomial.test_bad_args  s    	* 	* yJ]]:S1 	3,T2C	3 (.E]]:S1 	KKO		* 	* ~(.2]]:S1 	KKM	 	!	3 	3	 		 	s#   C"5C.C:"C+.C7:Dc                     G d d      } |       }d |_         t        |      } |       }d |_        t        |      }t        j                  ddd      }t        |j                  |      |j                  |             y )	Nc                       e Zd Zy)JTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNra  r1   r&   r$   MyDistrN    rb  r&   rO  c                 :    t        j                  |  | z  dz        S Nr`   )mathr    r<   s    r$   r=   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1 r&   c                     |  | z  dz  S rQ  r1   r<   s    r$   r=   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    r!tAv r&   r  gwJ?rs   r   )r%   r
   r'  r   r   r   r   )r"   rO  dist_pdfrz   dist_logpdfr{   qs          r$   test_logpdf_pdf_consistencyz:TestNumericalInversePolynomial.test_logpdf_pdf_consistency  sm    	 	 81)(3 h-)+6KKf#.TXXa[1r&   N)+r.   r/   r0   r1  r>  rQ  r  r  r  r  r   r   r  r  r  rh   r  r  r  rZ  xslowr   r  r  rf  bad_logpdfs_commonr(  r  rp  r   rK   rG   r   r1  r#   r5  r;  
bad_ordersbad_u_resolutionr@  rB  r  rW  r1   r&   r$   r  r    s6    , ,
 
"	 	 Weguw0E v,Ct*C;'"%%("22
3C;)GBEE1H,<<
=CS#
C[[] _.-.- [[[[/:A ; A@ [[_o>< ?< [[/1CD< E< [[/AH BH 	Aqe$
RD	BFF7BFFBFF+	 &&#s	c3/<	A [[S!$+ %+" 
S"%	("rdRVVH66'266266	"A663
sC0BFF7Aq/	B	DA [[S!$+ %+"	  S"bffbff-JtRVVRVV4[[Wj1: 2: [[^-=>B ?B62r&   r  c            
       8   e Zd Z G d d      Z G d d      Z e        e       gZddej                  z  z  ddd	ej                  z  ej                  z  z  z
  gZd
dddej                  z  ej                  z  z  z
  dz
  gZ	ee	gZ
ej                  j                  d eee
            ej                  j                  dddg      d               Zej                  j                  de      d        Zd Zej                  j'                  d      ej                  j(                  ej                  j                  de      d                      Zej                  j'                  d      d        Zd Zddej2                  j5                  d      gZej9                  ej2                  j;                  d             d e       fddgZej                  j                  de      ej                  j                  de      d                Z d! Z!d" Z" ejF                  d#d$d%&      g g gejH                  gejJ                   ejH                  ejJ                  gdejH                  d'd(gd)d*ejJ                  gg d+ggZ&ej                  j                  d,e&      d-        Z'd. Z(y)/TestNumericalInverseHermitec                   $    e Zd Zd Zd Zd Zd Zy)!TestNumericalInverseHermite.dist0c                 `    ddt        j                  dt         j                  z  |z        z   z  S )NrG  r   r   r  r!   s     r$   r%   z%TestNumericalInverseHermite.dist0.pdf  s'    RVVBruuHQJ//00r&   c                 v    t         j                  t        j                  dt         j                  z  |z        z  S )Nr   r  r!   s     r$   r(   z&TestNumericalInverseHermite.dist0.dpdf  s&    55255
+++r&   c                     ddt         j                  z  d|z   z  z   t        j                  dt         j                  z  |z        z
  dt         j                  z  z  S )Nr   r   r_   r  r  r!   s     r$   r,   z%TestNumericalInverseHermite.dist0.cdf  sE    BEE1q5))BFF2bee8A:,>>2bee8LLr&   c                      yr,  r1   r.  s    r$   r   z)TestNumericalInverseHermite.dist0.support  r/  r&   Nr0  r1   r&   r$   r1  r_    s    	1	,	M	r&   r1  c                   $    e Zd Zd Zd Zd Zd Zy)!TestNumericalInverseHermite.dist1c                    |dk  r=t        j                  dt         j                  z  |z        dz  t         j                  z  S |dk  ry|dk  r=t        j                  dt         j                  z  |z        dz  t         j                  z  S y )Nr   r   rG  rZ   r  r!   s     r$   r%   z%TestNumericalInverseHermite.dist1.pdf  ss    T	vvrBEEzQ./#5==BSvvrBEEzQ./#5== r&   c                 P   |dk  rKt        j                  dt         j                  z  |z        t         j                  z  t         j                  z  S |dk  ry|dk  rKt        j                  dt         j                  z  |z        t         j                  z  t         j                  z  S y )Nr   r   rZ   rG  r   r  r   r!   s     r$   r(   z&TestNumericalInverseHermite.dist1.dpdf  s{    T	vvrBEEzQ./"%%7"%%??BSvvrBEEzQ./"%%7"%%?? r&   c                     |dk  r/ddt        j                  dt         j                  z  |z        z
  z  S |dk  ry|dk  r/ddt        j                  dt         j                  z  |z        z  z
  S y )Nr   g      ?r_   r   rZ   rG  r$  rh  r!   s     r$   r,   z%TestNumericalInverseHermite.dist1.cdf  sk    T	q2662:*:#;;<<BSdRVVR"%%Z1,<%==== r&   c                      y)N)r-  rG  r1   r.  s    r$   r   z)TestNumericalInverseHermite.dist1.support  s    r&   Nr0  r1   r&   r$   r>  re    s    	>	@	>	r&   r>  r-  r`   r  r_   r   g      пg      ?g      ?rT  r=  r9   r   c                 :    t        ||d      }t        |||       y )NrW  )r=  rr   )r   r   )r"   r2   r   r=  r   s        r$   rZ  z&TestNumericalInverseHermite.test_basic&  s     &d%bI3e,r&   ra   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrn  )rh   ri   r   r   ro  s       r$   rp  z0TestNumericalInverseHermite.test_inf_nan_domains/  s6    ]]3c* 	E#N$4VD	E 	E 	Erq  c           	         h d}h d}||v rt        j                  d       ||v rt        j                  d       t        j                  j                  d        t        t        |      | }t        |      }t        j                  j                  d      }t        j                  t        j                  |j                  |      |j                  |      z
        t        j                  |j                  |            z        }t        j                  t        j                  |j                  |j                  |            |z
              }	|dk  sJ |	dk  sJ y )	N>   r
  r  skewnormr  >   r  nctbetawaldr	  invgaussr  r  geninvgaussnorminvgaussgenhyperbolicr  zDistribution is too slowz)Fails - usually due to inaccurate CDF/PDFr   r:   :0yE>r   )rh   r  r  r   ru   rv   rf   r   r   randmaxrI  r   r,   )
r"   r  shapes
slow_distsr  r2   fnir#   p_tolu_tols
             r$   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_dists4  s   B
@
 z!KK23z! LLDE
		q'wuh'0%d+IINN2rvvdhhqk#''!*45bffTXXa[6IIJrvvdhhswwqz2Q678t||u}}r&   zignore::RuntimeWarning)r  ry  c                 (    | j                  ||       y r*   r~  )r"   r  ry  s      r$   r  z6TestNumericalInverseHermite.test_basic_all_scipy_distsM  s     	''&9r&   c                 (    | j                  dd       y )N	truncnorm)r   r`   r  r.  s    r$   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155U  s    ''X>r&   c                    d}t        j                  t        |      5  t        t	               d       d d d        d}t        j                  t        |      5  t        d       d d d        d}t        j                  t        |      5  t        t	               d	       d d d        y # 1 sw Y   vxY w# 1 sw Y   QxY w# 1 sw Y   y xY w)
Nz"`order` must be either 1, 3, or 5.rc   r`   r?  z`cdf` required but not foundr   z!could not convert string to floatekkir.  )rh   ri   r   r   r   )r"   rd   s     r$   r   z1TestNumericalInverseHermite.test_input_validationY  s    5]]:U3 	?#N$4A>	? /]]:U3 	,#F+	, 4]]:U3 	9#N$4179	9 	9	? 	?	, 	,	9 	9s#   B)B5
C)B25B>C
Nr   )   )r  )r   r      r  r   r   c                 &   t               }t        |      }t        |      }|j                  ||      }||j                  |k(  sJ |It        |      }|j                  |      }t        j                  j                  |      }	t        ||	       y y )N)r   rr   )r   )r   r   r   rt   r   r   r  r   r   r   r   )
r"   r   r  r  r2   r{  r{   rt   r  r}   s
             r$   test_RVSz$TestNumericalInverseHermite.test_RVSk  s     %d+}gg7g599(((%d+Dlll0G::>>'*DC&	 r&   c                     d}d}t        j                  t        |      5  t        t	        j
                  |        d d d        t        t	        j
                  | d       y # 1 sw Y   'xY w)N)gdsz@g@e?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailrc   rv  r.  )rh   r   r   r   r   rp  )r"   ry  rd   s      r$   test_inaccurate_CDFz/TestNumericalInverseHermite.test_inaccurate_CDF|  s\     :D \\.6 	9#EJJ$78	9 	 

F 3$G		9 	9s   A""A+c                     t               }t        |      }t        j                         }t        |      }t	        |j                  d      |j                  d             y )Nr   r   )r   r   r   r   r   rt   )r"   r>  fni1rQ  fni2s        r$   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sI     &u-

&u-a0$(((2JKr&   rZ   r   r*  r   rG  r   r[   r\   r  r   c                    t               }t        |d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd	       |j                  |j                  k(  sJ y # 1 sw Y   4xY w)
Nr   r.  r  r  r  r  g&.>gLa㧝=r   )
r   r   r   rX  r   r   r   r   r   r   r0  s          r$   r1  z$TestNumericalInverseHermite.test_ppf  s    %d?   	)CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5''!*Czz~~a(H	) 	XDu=yyHNN***	) 	)r3  c                 8   t               }t        |d      }|j                         \  }}|dk  sJ ||k  sJ t               5 }|j	                  t
               t        |d      }d d d        |j                         \  }}|dk  sJ ||k  sJ y # 1 sw Y   +xY wr7  )r   r   r8  r   rX  r   )r"   r2   r   r9  r:  rY  s         r$   r;  z(TestNumericalInverseHermite.test_u_error  s    %d?	35   i  	DCJJ~&)$UCC	D 	35   i	D 	Ds   #BB))r.   r/   r0   r1  r>  r  r   r   r  r  r  rh   r  r  r  rZ  r  rp  r~  filterwarningsrX  r   r  r  r   ru   rw   rngsappendr   r  r  r  r  r  r   rK   rG   r   r1  r;  r1   r&   r$   r]  r]    s   
 " 8 WegE qw<q!BEE'"%%-00
1CQ"%%&&-
.C*C[[] _.[[Wq!f-- ..- [[/AE BE2 [[ 89[[[[3X>: ?  ::
 [[ 89? :?9 !RYY**1-.DKK		%%a()EG_i)?@E[[UD)[[0%8' 9 *'HL 	B&
RD	BFF7BFFBFF+	 &&#s	c3/<	A [[S!$+ %+" r&   r]  c            
          e Zd Zh dZd Zd Zd Zej                  j                  de
      d        Z ej                  ddd	
      g g gej                  gej                   ej                  ej                  gdej                  ddgddej                  gg dggZej                  j                  de      d        Zej                  j                  de      d        Zej                   ej                  fej                  ej                  fej                   ej                   fdej                  fej                   dfgZej                  j                  de      d        Zy)TestDiscreteGuideTable>   r  r  r  c                     g d}t         j                  j                         }t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)Nr   g333333?g333333?r8   rr   guide_factorr   ru   r   rh   r   r   r	   r"   r   r   s      r$   $test_guide_factor_gt3_raises_warningz;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warning  J    yy$$&\\.) 	Fr1E	F 	F 	F   AAc                     g d}t         j                  j                         }t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)Nr  r   r  r  r  s      r$   %test_guide_factor_zero_raises_warningz<TestDiscreteGuideTable.test_guide_factor_zero_raises_warning  r  r  c                     g d}t         j                  j                         }t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)Nr  r-  r  r  r  s      r$   )test_negative_guide_factor_raises_warningz@TestDiscreteGuideTable.test_negative_guide_factor_raises_warning  sL     yy$$&\\.) 	Gr2F	G 	G 	Gr  r  c                    || j                   v rd}t        j                  |       t        |t              s|}nt        t        |      } || }|j                         }t        j                  |d   |d   z
        st        j                  d       t        j                  |d   |d   dz         }|j                  |      }|j                  d      }t        |d      }	t        |	||       y )NzYDGT fails on these probably because of large domains and small computation errors in PMF.r_   r   z$DGT only works with a finite domain.r   rW  r   )r  rh   r  r  r  rf   r   r   r   r   r   r   r	   r   r  s
             r$   rZ  z!TestDiscreteGuideTable.test_basic  s    t,,,:CKK(C(D5(+DV}{{6!9vay01 KK>?IIfQi1-XXa[

4  B7CU+r&   r   r_   r*  r   rG  r   r[   r\   r  r   c                    d\  }}t        j                  ||      }t        |d      }t               5 }|j	                  t
        d       |j	                  t
        d       |j	                  t
        d       |j	                  t
        d       |j                  |      }t         j                  j                  |||      }d d d        t        j                  j                         t        ||       y # 1 sw Y   6xY w)N)r   r   rW  r   r  r  r  r  )	r   r   r	   r   rX  r   r   r   r   )	r"   r   npr2   r   rY  r  r  s	            r$   r1  zTestDiscreteGuideTable.test_ppf  s    1{{1a  B7   		0CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5 ''!*C{{q!Q/H		0 	SYY/S(#		0 		0s   BC33C<r  c                 z    t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY wr  )rh   ri   r   r	   r  s      r$   r  z"TestDiscreteGuideTable.test_bad_pv  s-    ]]:S1 	#r"	# 	# 	#r  re   c                     t        j                  t        d      5  t        t	        j
                  dd      |       d d d        y # 1 sw Y   y xY wr  )rh   ri   r   r	   r   r   r  s     r$   r  z&TestDiscreteGuideTable.test_inf_domain&  s?    ]]:->? 	Du{{2s3FC	D 	D 	Dr  N)r.   r/   r0   r  r  r  r  rh   r  r  r   rZ  r   r   rK   rG   r   r1  r  r  r  r  r1   r&   r$   r  r    sn   FFG [[/>, ?,6 	Aqe$
RD	BFF7BFFBFF+	 &&#s	c3/<	A [[S!$$ %$( [[Y6# 7# FF7BFF#bffbff%5"&&7Ibff+|-J [[Xz2D 3Dr&   r  c                      e Zd Z G d d      Z ed       ed      gZdej                  gZdej                  gZeegZ	e
j                  j                  d eee	            d        Ze
j                  j                  de      d        Zd	 Zy
)TestSimpleRatioUniformsc                       e Zd Zd Zd Zd Zy)TestSimpleRatioUniforms.distc                      || _         || _        y r*   )rC  r6   rD  s     r$   r   z%TestSimpleRatioUniforms.dist.__init__1  s    DJDIr&   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S rF  rH  rJ  s      r$   r%   z TestSimpleRatioUniforms.dist.pdf5  rL  r&   c                 P    || j                   z  }|dk  rdd|z
  z  S ddd|z   z  z
  S rO  rB  r!   s     r$   r,   z TestSimpleRatioUniforms.dist.cdf:  rP  r&   N)r.   r/   r0   r   r%   r,   r1   r&   r$   r2   r  0  s    		
	+r&   r2   rZ   rR  rT  c                     t        ||j                  d      }t        |||       t        ||j                  |j                  |j                        d      }t        |||       y )NrW  )r6   rr   )r6   cdf_at_moderr   )r   r6   r   r,   r  s       r$   rZ  z"TestSimpleRatioUniforms.test_basicH  sU     "$TYYRH3e,!$TYY.2hhtyy.A/13 	3e,r&   ra   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrn  )rh   ri   r   r   ro  s       r$   rp  z,TestSimpleRatioUniforms.test_inf_nan_domainsT  s6    ]]3c* 	A 0@	A 	A 	Arq  c                     t        j                  t        d      5  t        t	               dd       d d d        y # 1 sw Y   y xY w)Nz`pdf_area` must be > 0rc   r   r-  )r6   pdf_area)rh   ri   r   r   r   r.  s    r$   r  z%TestSimpleRatioUniforms.test_bad_argsY  s9    ]]:-FG 	G 0q2F	G 	G 	Gs	   <AN)r.   r/   r0   r2   r  r   rG   r  r  r  rh   r  r  r  rZ  r  rp  r  r1   r&   r$   r  r  ,  s    + +" "XtF|$E rvv,C266
C*C[[] _.-.- [[/AA BAGr&   r  )gHz>r   )r  r   )Hr   r   rh   copyr   r  r  rR  numpyr   numpy.testingr   r   r   scipy.stats.samplingr   r   r	   r
   r   r   r   scipyr   r   scipy.statsr   r   scipy.stats._distr_paramsr   r   scipy._lib._utilr   r   all_methodsimplementationnameversionfloaterrr  r  r  r  rY  rK   rG   r  r   bad_sized_domainsbad_domainsr  nan_domainsr  r  ro   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r]  r  r  r1   r&   r$   <module>r     s        
   J J     1 < /	 	 #V^-=$>?&"345F$567!FN,<#=>)9 :;^%5qAB v%&&3@H/H ;'9h'I;<{F+{F+)LM& {F+{F+9h'I;<)LM" 9h'I;<{F+{F+)LM  	-.
Cj\FG	3JK	3JK	3Z<= 
7801	  [*+[*+ {,-ffbff{$45	vvgw&67ffrvvg%56	vvgrvv
$:;ffbffz#9:	 [*45ffbffz#9: +$'88$%& );7( 8&( );7/ 8/8	.#b );7/ 8/  "2 3	+3	+/*
 D  $C D8D8 $=$@$B CX9 X9CX9v{. {.|r' r'j~2 ~2BS  S lfD fDR0G 0Gr&   