
    biZ              	       $   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	Z
d dlmZmZ d dlmZ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 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jL                  jN                  dk(  rejL                  jP                  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d0fd1d2e
j^                  d3gd4fd1d2e
j`                  d3gd4fd/d/gd5fgZ1d6e2d7fd8e2d7fgZ3d9ed:fd;ed:fgZ4d<ed:fe
j`                  e
j`                  fed:fe
j`                   e
j`                   fed:fe
j`                  e
j`                   fed:fe
j`                   e
j^                  fe2d=fe
j^                  e
j`                  fe2d=fgZ5d e
j^                  fe2d=fe
j^                  e
j^                  fe2d=fgZ6ejn                  jq                  d>e4e3z   e6z         ejn                  jq                  d?e%      d@               Z9ejn                  jq                  d?e%      dA        Z:dB Z;dC Z<ejn                  jq                  d?e%      dD        Z=ejn                  jq                  dEg dF      dG        Z>dH Z?d_dIZ@d`dJZAdK ZBejn                  jq                  dLg dM      dN        ZCejn                  jq                  dLddg       G dO dP             ZD G dQ dR      ZE G dS dT      ZF G dU dV      ZG G dW dX      ZH G dY dZ      ZI G d[ d\      ZJ G d] d^      ZKy)a    N)deepcopy)assert_allcloseassert_equal)TransformedDensityRejectionDiscreteAliasUrnDiscreteGuideTableNumericalInversePolynomialNumericalInverseHermiteRatioUniformsSimpleRatioUniformsUNURANError)raises)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     Z/home/cdr/jupyterlab/.venv/lib/python3.12/site-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   )r3   modepypy)      
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                     |  S r+   r2   r$   s    r%   <lambda>r>   B   s    r r'   z...c                     g S r+   r2   r=   s    r%   r>   r>   D       r r'   c                     t         S r+   foor=   s    r%   r>   r>   F       s r'   name 'foo' is not definedc                 "    t         j                  S r+   r   infr=   s    r%   r>   r>   H   
    rvv r'   c                 "    t         j                  S r+   r   nanr=   s    r%   r>   r>   J   rI   r'   c                       yNr   r2   r2   r'   r%   r>   r>   L       r'   ,takes 0 positional arguments but 1 was givenc                 "    t         j                  S r+   rG   r=   s    r%   r>   r>   S   rI   r'   c                 "    t         j                  S r+   rK   r=   s    r%   r>   r>   U   rI   r'   c                     g S r+   r2   r=   s    r%   r>   r>   W   r@   r'   c                     t         S r+   rB   r=   s    r%   r>   r>   Y   rD   r'   c                       yrN   r2   r2   r'   r%   r>   r>   [   rO   r'   c                     g S r+   r2   r=   s    r%   r>   r>   b   r@   r'   c                     t         S r+   rB   r=   s    r%   r>   r>   d   rD   r'   c                 "    t         j                  S r+   rG   r=   s    r%   r>   r>   f   rI   r'   c                 "    t         j                  S r+   rK   r=   s    r%   r>   r>   h   rI   r'   c                       yrN   r2   r2   r'   r%   r>   r>   j   rO   r'   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r6   )must contain only finite / non-nan values(must contain at least one non-zero value)      r:   zmust be a length 2 tupler2   )ra   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domainr2   )getattrr   samplingpytestr   )rf   errmsgmethodkwargsMethods         r%   test_bad_domainro      sG    
 U^^V,F	s#	& ('''( ( (s   AAc                 8   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   rr   r2   )rg   r   rh   r   rvsr   randomRandomStateseedMT19937	Generator)rl   rm   rn   rx   rng1rng2rngrvs1rvs2seed1seed2s              r%   test_random_stater      sK   U^^V,F D.F..D.F..D#. ))


$CFD88Cc8*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   rt   rs   )r   r   set_random_stater   ru   )r{   r|   r}   r~   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`   r2   r"   s     r%   r)   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    r'   N)r/   r0   r1   r   r&   r)   r2   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)NrC   r;   rs      rf   rr   順 r   r   r   ru   r   argsr3   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   ra   r   r   r   r   r   r   s      r%   func2z'test_threading_behaviour.<locals>.func2   sO    E")$y78:	'GGFO 	'VVAYF6N	'r   )targetr   rC   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   r2   )rg   r   rh   pickledumpsloadsr   ru   )rl   rm   rn   r{   objr|   s         r%   test_pickler      sZ    U^^V,F-F--D
,,t
C<<D#.r'   size)Nr   )r   r`   )r;   r:   )ra   r:         )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   isscalarru   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   rt   r`   rs   num      $@      @)locscaler;   r\   )r   normr   rv   default_rngr
   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r3   urngr}   urf   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  皙?)
ru   meanvarr   isfiniter   	vectorizer-   r   pvalue)r}   r3   mv_exr   r   ru   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   )ru   r   r   r   sumr   
zeros_likeuniquer   r   r   )r}   r   r   r   r   ru   r   	obs_freqs_freqsr   s              r%   r   r   8  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 distributionrd   r   r:   r   )centerrf   rf   )ri   warnsRuntimeWarningr	   r   )rk   s    r%   !test_warning_center_not_in_domainr   H  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 domainrd   r   r   )r7   rf   )rg   r   rh   ri   r   r   r   )rl   rn   rk   s      r%   test_error_mode_not_in_domainr   R  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      ej                  j                  d      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...rd   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r:   ra   dr   )
ri   r   r   rg   r   rh   r   qrvsqmcHalton)r#   rl   re   rn   gens        r%   test_input_validationzTestQRVS.test_input_validationc  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   rx   r:   )r`   r`   )r   r   )r   r   )ra   r   r   )r:   r:   qrngsize_in, size_outzd_in, d_outzfails in parallelreasonc                 "   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   rd   r   r`   r   r   r   -q=r   )sysplatformarchitectureri   xfailr   rg   r   rh   r   r   r   r   r   r   rv   r   prodr   r   reshaper   )r#   r   size_insize_outd_ind_outrl   w32r3   rn   r   re   shape_expectedqrng2r   uniformqrvs2s                    r%   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistencyy  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)r:   r   r   r   r   r  .r  r  )r   rg   r   rh   r   r   rv   r   r	  r   r   r   ranger
  r   )r#   rl   r3   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/   r0   r1   r   r   r   Sobolr   qrngstuplesizesdsri   markparametrizethread_unsafer  r  r2   r'   r%   r   r   `  s    : 599??11?-uyy/?/?/?/JKEEG_i+-E /Auw<	3B[[VU+[[0%8[[]B/[[&9: 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            ej                  j%                  d      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`   r2   r"   s     r%   r&   z)TestTransformedDensityRejection.dist0.pdf      !AaC%= r'   c                     dd|z  z  S )Nr)  r2   r"   s     r%   r)   z*TestTransformedDensityRejection.dist0.dpdf  s    "Q$<r'   c                 $    d||dz  dz  z
  dz   z  S Nr)  r:   gUUUUUU?r2   r"   s     r%   r-   z)TestTransformedDensityRejection.dist0.cdf      !ad1f*s*++r'   c                      yN)r`   r2   r#   s    r%   r   z-TestTransformedDensityRejection.dist0.support      r'   Nr/   r0   r1   r&   r)   r-   r   r2   r'   r%   dist0r&    s    	!	 	,	r'   r6  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   r;  r"   s     r%   r)   z*TestTransformedDensityRejection.dist1.dpdf  s$    29uzzq3w777r'   c                 F    t         j                  j                  |dz        S r:  r   r   _cdfr"   s     r%   r-   z)TestTransformedDensityRejection.dist1.cdf  r=  r'   Nr.   r2   r'   r%   dist1r8    s    	,	8	,r'   rC  c                   $    e Zd Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist2c                     || _         y r+   shiftr#   rH  s     r%   r   z.TestTransformedDensityRejection.dist2.__init__  s	    DJr'   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S Nr         ?rH  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   r[   rM  rO  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 Nr[   rL  r   rG  r"   s     r%   r-   z)TestTransformedDensityRejection.dist2.cdf  7    OABwb1f~%C26N**r'   N)r/   r0   r1   r   r&   r)   r-   r2   r'   r%   dist2rE    s    		
	)	+r'   rV  r[        @?r?  dist, mv_exdeadlocks for unknown reasonsr   c                     t        j                         5  t        j                  dt               t	        |d      }d d d        t        ||       y # 1 sw Y   xY w)Nignore*   rt   )warningscatch_warningssimplefilterr   r   r   r#   r3   r   r}   s       r%   
test_basicz*TestTransformedDensityRejection.test_basic  sS     $$& 	E!!(N;-dDC	E 	3e,		E 	Es   (AAc                      y)Nr   r2   r=   s    r%   r>   z(TestTransformedDensityRejection.<lambda>  rO   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/   r0   r1   r2   r'   r%   r3   rh  
      r'   r3   c                      yr   r2   r=   s    r%   r>   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  rO   r'   rd   r&   r)   ri   r   r   r#   r&   rj   rk   r3   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>.distNri  r2   r'   r%   r3   rq    rj  r'   r3   c                     | S r+   r2   r=   s    r%   r>   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r'   rd   r`   r;   r   rl  )r#   r)   rj   rk   r3   s        r%   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  sG    	 		]]3c* 	>'W=	> 	> 	>s   AArb   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wNrd   r   )ri   r   r   r   r#   rf   rj   rk   s       r%   test_inf_nan_domainsz4TestTransformedDensityRejection.test_inf_nan_domains  s6    ]]3c* 	I'(8H	I 	I 	I	   7A construction_points)r2  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.rd   rz  ri   r   r   r   r   r#   rz  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.rd   r|  )r`   r`   r`   r`   r`   r`   z:33 : starting points not strictly monotonically increasingrd  r;   z!50 : starting point out of domain)r:   )rf   rz  )
ri   r   r   r   r   r   r   r   rL   r   r~  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.rd   r  )r  r}  )r#   r  rk   s      r%   
test_bad_cz*TestTransformedDensityRejection.test_bad_cM  s;    .]]:S1 	A'(8C@	A 	A 	A	   =Ar   r`     r   rL  r\   r]   r,  r:   r   r   c                 (   t        t               d      }t        j                         5  d}t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               |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 r\  greatergreater_equalless
less_equalMbP?h㈵>r   )r   r   r^  r_  filterwarningsr   ppf_hatr   r   r   r   r   )r#   r   r}   rk   resexpecteds         r%   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hatW  s     *.*:@FH $$& 	)1C##HcIo~N##HcO.C^T##HcFlNK##HcL.@.Q++a.Czz~~a(H	) 	XDt<yyHNN***	) 	)s   B+DD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>.distNri  r2   r'   r%   r3   r  l  s    r'   r3   z`pdf` required but not found.rd   c                       e Zd Zd Zy)r  c                     d| | z  z
  S r   r2   r=   s    r%   r>   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>u  s    AacE r'   Nr/   r0   r1   r&   r2   r'   r%   r3   z;TestTransformedDensityRejection.test_bad_dist.<locals>.distt  s    !Cr'   z`dpdf` required but not found.)ri   r   r   r   )r#   r3   rk   s      r%   test_bad_distz-TestTransformedDensityRejection.test_bad_distj  s    	 	 /]]:S1 	.'-	.	" 	" 0]]:S1 	.'-	. 	.	. 	.	. 	.s   A8#B8BBN)$r/   r0   r1   r6  rC  rV  distsmv0mv1r   rH   mv2mv3mvsri   r   r!  zipr"  rb  r   bad_pdfsbad_pdfs_commonrn  bad_dpdf_commonrt  inf_nan_domainsrx  r  r  rL   r  r   r   r  r  r2   r'   r%   r$  r$    sE    , ,+ +, WeguRy%-8E v,Ct*Crvv,C266
CS#
C[[] _.[[&EF- G.- 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   r]  rt   )basic_fail_distsri   skip
isinstancestrrg   r   r   r   r   r   r   r   r   
r#   distnameparamsrk   r3   rf   kr   r   r}   s
             r%   rb  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+   rG   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  
    266 r'   r^   c                 "    t         j                  S r+   rK   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  r  r'   c                      y)Nr[   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  rO   r'   r_   c                     t         S r+   rB   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    3 r'   rE   c                     g S r+   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    2 r'   z)setting an array element with a sequence.c                     |  S r+   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    A2 r'   z50 : probability < 0c                       yrN   r2   r2   r'   r%   r>   zTestDiscreteAliasUrn.<lambda>  rO   r'   rP   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>.distNri  r2   r'   r%   r3   r    rj  r'   r3   rd   rs  r   )r   ri   r   r   )r#   r   rj   rk   r3   s        r%   test_bad_pmfz!TestDiscreteAliasUrn.test_bad_pmf  s@    	 	]]3c* 	3T'2	3 	3 	3s   A  A	r   )r5   r4   r6   )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   rt   r   r   )weightsra   )
r   asarrayfloat64r   ru   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Nrd   ri   r   r   r   r#   r   rk   s      r%   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s-    ]]:S1 	!R 	! 	! 	!   1:r   rf   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 finiterd   r;   r\   r   )ri   r   r   r   r   r   r#   rf   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.rd   rL  r2  )
urn_factor)ri   r   r   r   r3  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+   r2   r"   s     r%   r   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmf  s    r'   N)r/   r0   r1   r   r2   r'   r%   r3   r    s    r'   r3   rd   r  )r#   rk   r3   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  r]  rt   )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/   r0   r1   r  ri   r   r!  r   rb  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rH   
inf_domainr  r  r  r  r2   r'   r%   r  r  |  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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$ej                   jJ                  d.        Z&dd/d0e
j@                  e
j>                  gZ'd1d"e
j@                  e
j>                  gZ(ej                   j%                  d2e'      d3        Z)ej                   j%                  d4e(      d5        Z*d6 Z+d7 Z,y8)9TestNumericalInversePolynomialc                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist0c                     dd||z  z
  z  S r(  r2   r"   s     r%   r&   z(TestNumericalInversePolynomial.dist0.pdf  r*  r'   c                 $    d||dz  dz  z
  dz   z  S r.  r2   r"   s     r%   r-   z(TestNumericalInversePolynomial.dist0.cdf  r/  r'   c                      yr1  r2   r3  s    r%   r   z,TestNumericalInversePolynomial.dist0.support  r4  r'   Nr/   r0   r1   r&   r-   r   r2   r'   r%   r6  r    s    	!	,	r'   r6  c                       e Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist1c                 F    t         j                  j                  |dz        S r:  r;  r"   s     r%   r&   z(TestNumericalInversePolynomial.dist1.pdf  r=  r'   c                 F    t         j                  j                  |dz        S r:  rA  r"   s     r%   r-   z(TestNumericalInversePolynomial.dist1.cdf  r=  r'   N)r/   r0   r1   r&   r-   r2   r'   r%   rC  r    s    	,	,r'   rC  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`   ra   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r1  r2   r3  s    r%   r   z,TestNumericalInversePolynomial.dist2.support  r4  r'   Nr  r2   r'   r%   rV  r  
  s    	9	 
	r'   rV  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`   ra   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   rL  g
ףp=
?ra   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   r2   r3  s    r%   r   z,TestNumericalInversePolynomial.dist3.support#  r4  r'   Nr  r2   r'   r%   dist3r    s    	A	F	r'   r  r[   rX  r?  gܿUUUUUU?gQ?ra   g @rZ  r   rY  c                 8    t        |d      }t        |||       y )Nr]  rt   )r	   r   ra  s       r%   rb  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        j                         5  t        j                  d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 r\  r]  rt   )ri   r  r  r  rg   r   r^  r_  r`  r   r	   r   r   r   )r#   r  r  very_slow_dists
fail_distsskip_sample_moment_checkr3   r}   s           r%   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists6  s    >-
 %6#6 &KK,XJ78z!KK/(45h, x( 	 V}$$& 	D!!(N;,TCC	D //3tyy{DHHJ&?@	D 	Ds   ?(C  C)re  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>.distNri  r2   r'   r%   r3   r,  Z  rj  r'   r3   rd   r   r   r   )r&   ri   r   r	   rm  s        r%   rn  z+TestNumericalInversePolynomial.test_bad_pdfX  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>.distNri  r2   r'   r%   r3   r0  b  rj  r'   r3   rd   r   r   r   )logpdfri   r   r	   )r#   r1  rj   rk   r3   s        r%   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdf`  sD    	 	]]3c* 	<&tQF;	< 	< 	<r-  rb   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrv  )ri   r   r	   r   rw  s       r%   rx  z3TestNumericalInversePolynomial.test_inf_nan_domainsj  s6    ]]3c* 	H&~'7G	H 	H 	Hry  r   r`   '  r   rL  r   r\   r]   r  r   c                 ,   t               }t        |d      }t        j                         5  d}t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               |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  r  r  gdy=r   )r   r	   r^  r_  r  r   r   r   r   r   r   r#   r   r3   r}   rk   r  r  s          r%   test_ppfz'TestNumericalInversePolynomial.test_ppf~      (EB $$& 	)1C##HcIo~N##HcO.C^T##HcFlNK##HcL.@.Q''!*Czz~~a(H	) 	XE>yyHNN***	) 	)   B+D

Dr  r;   r:   r   r$   c                 ,   t               }t        |d      }t        j                         5  d}t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               |j                  |      }t        j                  j                  |      }d d d        t        d	d	
       |j                  |j                  k(  sJ y # 1 sw Y   4xY wr6  )r   r	   r^  r_  r  r   r-   r   r   r   r   )r#   r$   r3   r}   rk   r  r  s          r%   test_cdfz'TestNumericalInversePolynomial.test_cdf  r<  r=  c                     t               }t        |d      }|j                         \  }}|dk  sJ ||k  sJ t        |d      }|j                         \  }}|dk  sJ ||k  sJ y )N绽|=r8  r7  )r   r	   u_errorr#   r3   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\].rd   rH  )r   ri   r   r   r	   )r#   rH  r3   rk   s       r%   test_bad_ordersz.TestNumericalInversePolynomial.test_bad_orders  s<    C]]:S1 	:&t59	: 	: 	:s	   ?Ar9  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.rd   r8  )ri   r   r   r	   r   )r#   r9  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+   rA  r"   s     r%   r-   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zzq))r'   N)r/   r0   r1   r-   r2   r'   r%   BadDistrP        *r'   rR  z9Either of the methods `pdf` or `logpdf` must be specifiedrd   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  r2   r'   r%   r   rU    rS  r'   r   z!Exact CDF required but not found.)ri   r   r   r	   r   rB  )r#   rR  r3   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>.MyDistNri  r2   r'   r%   MyDistrZ    rj  r'   r[  c                 :    t        j                  |  | z  dz        S Nra   )mathr!   r=   s    r%   r>   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1 r'   c                     |  | z  dz  S r]  r2   r=   s    r%   r>   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    r!tAv r'   r  gwJ?rs   r   )r&   r	   r1  r   r   r   r   )r#   r[  dist_pdfr{   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/   r0   r1   r6  rC  rV  r  r  r  r  r   r    r  r  r  ri   r   r"  r!  r  rb  xslowr   r)  r  rn  bad_logpdfs_commonr2  r  rx  r   rL   rH   r   r;  r$   r?  slowrF  
bad_ordersbad_u_resolutionrK  rM  r  rc  r2   r'   r%   r  r    sk    , ,
 
"	 	 Weguw0E v,Ct*C;'"%%("22
3C;)GBEE1H,<<
=CS#
C[[&EF[[] _.-. G- [[[[/: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            
       F   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      ej                  j                  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                  j1                  d      ej                  j)                  d      ej                  j3                  d	      d                      Zd Zddej8                  j;                  d      gZej?                  ej8                  jA                  d             d e!       fddgZ"ej                  j                  de      ej                  j                  de"      ej                  j                  d                       Z#d! Z$d" Z% ejL                  d#d$d%&      g g gejN                  gejP                   ejN                  ejP                  gdejN                  d'd(gd)d*ejP                  gg d+ggZ)ej                  j                  d,e)      d-        Z*ej                  jV                  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 )NrL  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r1  r2   r3  s    r%   r   z)TestNumericalInverseHermite.dist0.support  r4  r'   Nr5  r2   r'   r%   r6  rl    s    	1	,	M	r'   r6  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   rL  r[   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   r[   rL  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         ?r`   r   r[   rL  r)  ru  r"   s     r%   r-   z%TestNumericalInverseHermite.dist1.cdf  sk    T	q2662:*:#;;<<BSdRVVR"%%Z1,<%==== r'   c                      y)N)r2  rL  r2   r3  s    r%   r   z)TestNumericalInverseHermite.dist1.support!  s    r'   Nr5  r2   r'   r%   rC  rr    s    	>	@	>	r'   rC  r2  ra   r  r`   r   g      пg      ?g      ?rY  rH  r:   r   c                 :    t        ||d      }t        |||       y )Nr]  )rH  rr   )r
   r   )r#   r3   r   rH  r}   s        r%   rb  z&TestNumericalInverseHermite.test_basic+  s    
 &d%bI3e,r'   rb   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrv  )ri   r   r
   r   rw  s       r%   rx  z0TestNumericalInverseHermite.test_inf_nan_domains5  s6    ]]3c* 	E#N$4VD	E 	E 	Ery  c           	         h d}h d}||v rt        j                  d       ||v rt        j                  d       t        j                  j                  d      } t        t        |      | }t        |      }|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  )ri   r  r  r   rv   r   rg   r   r
   maxrN  r   r-   )r#   r  shapes
slow_distsr'  r}   r3   fnir$   p_tolu_tols              r%   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_dists:  s   B
@
 z!KK23z! LLDEii##A&'wuh'0%d+JJrNrvvdhhqk#''!*45bffTXXa[6IIJrvvdhhswwqz2Q678t||u}}r'   zignore::RuntimeWarning)r  r  c                 (    | j                  ||       y r+   r  )r#   r  r  s      r%   r)  z6TestNumericalInverseHermite.test_basic_all_scipy_distsS  s     	''&9r'   c                 (    | j                  dd       y )N	truncnorm)r   ra   r  r3  s    r%   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155[  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.rd   ra   rJ  z`cdf` required but not foundr   z!could not convert string to floatekkir8  )ri   r   r   r
   r   )r#   re   s     r%   r   z1TestNumericalInverseHermite.test_input_validationa  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   ru   r   r   r  r   r   r   r   )
r#   r}   r  r  r3   r  r|   ru   r  r   s
             r%   test_RVSz$TestNumericalInverseHermite.test_RVSs  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 tailrd   r  r8  )ri   r   r   r
   r   r~  )r#   r  re   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   rt   )r   r
   r   r   r   ru   )r#   rC  fni1rV  fni2s        r%   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sI     &u-

&u-a0$(((2JKr'   r[   r   r4  r   rL  r   r\   r]   r  r   c                 ,   t               }t        |d      }t        j                         5  d}t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               t        j                  d|dz   t
               |j                  |      }t        j                  j                  |      }d d d        t        d	d
       |j                  |j                  k(  sJ y # 1 sw Y   4xY w)Nr  r8  r  r\  r  r  r  r  g&.>gLa㧝=r   )r   r
   r^  r_  r  r   r   r   r   r   r   r:  s          r%   r;  z$TestNumericalInverseHermite.test_ppf  s    %d? $$& 	)1C##HcIo~N##HcO.C^T##HcFlNK##HcL.@.Q''!*Czz~~a(H	) 	XDu=yyHNN***	) 	)r=  c                 V   t               }t        |d      }|j                         \  }}|dk  sJ ||k  sJ t        j                         5  t        j
                  dt               t        |d      }d d d        |j                         \  }}|dk  sJ ||k  sJ y # 1 sw Y   +xY w)NrA  r8  r\  r7  )r   r
   rB  r^  r_  r`  r   rC  s        r%   rF  z(TestNumericalInverseHermite.test_u_error  s    %d?	35   i$$& 	D!!(N;)$UCC	D 	35   i	D 	Ds   (BB()-r/   r0   r1   r6  rC  r  r   r    r  r  r  ri   r   r!  r  r"  rb  r  rx  r  r  rd  r   r)  	fail_slowparallel_threads_limitr  r   rv   rw   rngsappendr   r  r  r  r  r  r   rL   rH   r   r;  rf  rF  r2   r'   r%   rj  rj    s
   
 " 8 WegE qw<q!BEE'"%%-00
1CQ"%%&&-
.C*C[[] _.[[Wq!f-[[-  ..- [[/AE BE2 [[ 89[[[[3X>: ?  ::
 [[1[[ 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'   rj  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?r9   rr   guide_factorr   rv   r   ri   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  r2  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   r]  rt   )r  ri   r  r  r  rg   r   r   r   r   r   r   r   r   r  s
             r%   rb  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`   r4  r   rL  r   r\   r]   r  r   c                 V   d\  }}t        j                  ||      }t        |d      }t        j                         5  d}t        j
                  d|dz   t               t        j
                  d|dz   t               t        j
                  d|dz   t               t        j
                  d|d	z   t               |j                  |      }t         j                  j                  |||      }d d d        t        j                  j                         t        ||       y # 1 sw Y   6xY w)
N)r   r   r]  rt   r  r\  r  r  r  r  )
r   r   r   r^  r_  r  r   r   r   r   )	r#   r   npr3   r}   rk   r  r  s	            r%   r;  zTestDiscreteGuideTable.test_ppf  s    1{{1a  B7 $$& 	01C##HcIo~N##HcO.C^T##HcFlNK##HcL.@.Q''!*C{{q!Q/H	0 	SYY/S(#	0 	0s   B-DD(r  c                 z    t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY wr  )ri   r   r   r   r  s      r%   r  z"TestDiscreteGuideTable.test_bad_pv#  s-    ]]:S1 	#r"	# 	# 	#r  rf   c                     t        j                  t        d      5  t        t	        j
                  dd      |       d d d        y # 1 sw Y   y xY wr  )ri   r   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/   r0   r1   r  r  r  r  ri   r   r!  r   rb  r   r   rL   rH   r   r;  r  r  r  r  r2   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                   N   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	            e
j                  j                  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+   )rH  r7   rI  s     r%   r   z%TestSimpleRatioUniforms.dist.__init__8  s    DJDIr'   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S rK  rM  rO  s      r%   r&   z TestSimpleRatioUniforms.dist.pdf<  rQ  r'   c                 P    || j                   z  }|dk  rdd|z
  z  S ddd|z   z  z
  S rT  rG  r"   s     r%   r-   z TestSimpleRatioUniforms.dist.cdfA  rU  r'   N)r/   r0   r1   r   r&   r-   r2   r'   r%   r3   r  7  s    		
	+r'   r3   r[   rW  rY  c                     t        ||j                  d      }t        |||       t        ||j                  |j                  |j                        d      }t        |||       y )Nr]  )r7   rr   )r7   cdf_at_moderr   )r   r7   r   r-   ra  s       r%   rb  z"TestSimpleRatioUniforms.test_basicO  sU     "$TYYRH3e,!$TYY.2hhtyy.A/13 	3e,r'   rb   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrv  )ri   r   r   r   rw  s       r%   rx  z,TestSimpleRatioUniforms.test_inf_nan_domains\  s6    ]]3c* 	A 0@	A 	A 	Ary  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 > 0rd   r   r2  )r7   pdf_area)ri   r   r   r   r   r3  s    r%   r  z%TestSimpleRatioUniforms.test_bad_argsa  s9    ]]:-FG 	G 0q2F	G 	G 	Gs	   <AN)r/   r0   r1   r3   r  r   rH   r  r  r  ri   r   r!  r  r"  rb  r  rx  r  r2   r'   r%   r  r  3  s    + +" "XtF|$E rvv,C266
C*C[[] _.[[- .- [[/AA BAGr'   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestRatioUniformsc           	      :   t         j                  j                  }t        j                   |t        j                  d                  t        j                  d      z  }t        j                   |d            }t        ||| |d      }t        t        j                  |j                  d      d      d   dkD  d	       t        d
 dddt        j                  d      z  d      }t        t        j                  |j                  d      d      d   dkD  d	       y )Nra   r   i90  umaxvminvmaxrr   i	  r   r`   rw  Tc                 .    t        j                  |        S r+   rW  r=   s    r%   r>   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>r  s    bffaRj r'   r2  r  expon)
r   r   r&   r   r   r   r   kstestru   r!   )r#   fvr   r   s        r%   test_rv_generationz$TestRatioUniforms.test_rv_generationh  s     JJNNGGAbggajM"RWWQZ/GGAaDMAAQBQUKU\\#''$-8;dBDI 0q!"266":EKU\\#''$-9!<tCTJr'   c                 L   t         j                  j                  }t        j                   |t        j                  d                  t        j                  d      z  }t        j                   |d            }t        ||| |d      }t        ||| |d      }t        ||| |d      }|j                  d      |j                  d      |j                  d      }	}}t        ||       t        ||	j                                t        |j                  d       t        |	j                  d       t        ||| |d      }
t        ||| |d      }|
j                  d	
      |j                  d
      }}t        |j                         |       t        |j                  d	       t        ||| |d      }t        ||| |d      }t        ||| |d      }|j                         |j                  d      |j                  d      }}}t        ||       t        ||       y )Nra   r     r  r:   r   )r:   r`   r   )r:   r:   r:   r     r`   r   )
r   r   r&   r   r   r   ru   r   flattenr   )r#   r  r  r   gen1gen2gen3r1r2r3gen4gen5r4r5gen6gen7gen8r6r7r8s                       r%   
test_shapezTestRatioUniforms.test_shapev  s   JJNNGGAbggajM"RWWQZ/GGAaDMQQaRadKQQaRadKQQaRadKXXa[$((4.$((62BBRR&RXXt$RXXv&QQaRabIQQaRabIy)4888+<BRZZ\2&RXXy)QQaRadKQQaRadKQQaRadKXXZ!dhhtnBRRr'   c                    t         j                  j                  }t        j                   |t        j                  d                  t        j                  d      z  }t        j                   |d            }t        ||| |d      }|j                  d      }t        j                  j                  d      }t        ||| ||      }|j                  d      }t        ||       y )Nra   r   r  r  r;   )
r   r   r&   r   r   r   ru   rv   rw   r   )	r#   r  r  r  r  r  r}   r  r  s	            r%   r   z#TestRatioUniforms.test_random_state  s    JJNNGGAbggajM"RWWQZ/wwqt}QTNXXb\ii##D)QTMXXb\Rr'   c                    t         j                  j                  }t        t        d      5  t        |ddd       d d d        t        t        d      5  t        |ddd       d d d        t        t        d      5  t        |ddd       d d d        t        t        d      5  t        |ddd       d d d        y # 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   KxY w# 1 sw Y   y xY w)	Nzvmin must be smaller than vmaxrd   r`   r:   )r&   r  r  r  zumax must be positiver2  r   )r   r   r&   assert_raisesr   r   )r#   r  s     r%   test_exceptionsz!TestRatioUniforms.test_exceptions  s    JJNN:-MN 	9aaaa8	9:-MN 	9aaaa8	9 :-DE 	:abqq9	::-DE 	9aaaa8	9 	9	9 	9	9 	9	: 	:	9 	9s/   C C>C'C$ C	CC!$C-N)r/   r0   r1   r  r  r   r  r2   r'   r%   r  r  g  s    K8	9r'   r  )gHz>r   )r  r   )Lr   r   ri   copyr   r  r  r^  r^  numpyr   numpy.testingr   r   scipy.stats.samplingr   r   r   r	   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  re  rL   rH   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  rj  r  r  r  r2   r'   r%   <module>r     s        
    7	 	 	 +   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Y9 Y9CY9x{. {.|r' r'j~2 ~2BW  W tdD dDN1G 1GhA9 A9r'   