
    >qjz              	          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# 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'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d/d0e
j\                  d1gd2fd/d0e
j^                  d1gd2fd-d-gd3fgZ0d4e1d5fd6e1d5fgZ2d7ed8fd9ed8fgZ3d:ed8fe
j^                  e
j^                  fed8fe
j^                   e
j^                   fed8fe
j^                  e
j^                   fed8fe
j^                   e
j\                  fe1d;fe
j\                  e
j^                  fe1d;fgZ4d e
j\                  fe1d;fe
j\                  e
j\                  fe1d;fgZ5ejl                  jo                  d<e3e2z   e5z         ejl                  jo                  d=e'      d>               Z8ejl                  jo                  d=e'      d?        Z9d@ Z:dA Z;ejl                  jo                  d=e'      dB        Z<ejl                  jo                  dCg dD      dE        Z=dF Z>dG Z?d^dHZ@d_dIZAdJ ZBejl                  jo                  dKg dL      dM        ZCejl                  jo                  dKddg       G dN dO             ZD G dP dQ      ZE G dR dS      ZF G dT dU      ZG G dV dW      ZH G dX dY      ZI G dZ d[      ZJ G d\ d]      ZKy)`    N)deepcopy)assert_allcloseassert_equal)TransformedDensityRejectionDiscreteAliasUrnDiscreteGuideTableNumericalInversePolynomialNumericalInverseHermiteRatioUniformsSimpleRatioUniformsUNURANError)raises)stats)special)	chisquarecramervonmises)distdiscretedistcont)check_random_state)assert_deallocatedc                       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     ^/opt/rentech/trading_bot/.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   )r4   modezmust be real number, not listc                     |  S r,   r3   r%   s    r&   <lambda>r;   >   s    r r(   z...c                     g S r,   r3   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   rF   r(   c                       yNr   r3   r3   r(   r&   r;   r;   H       r(   ,takes 0 positional arguments but 1 was givenc                 "    t         j                  S r,   rD   r:   s    r&   r;   r;   O   rF   r(   c                 "    t         j                  S r,   rH   r:   s    r&   r;   r;   Q   rF   r(   c                     g S r,   r3   r:   s    r&   r;   r;   S   r=   r(   c                     t         S r,   r?   r:   s    r&   r;   r;   U   rA   r(   c                       yrK   r3   r3   r(   r&   r;   r;   W   rL   r(   c                     g S r,   r3   r:   s    r&   r;   r;   ^   r=   r(   c                     t         S r,   r?   r:   s    r&   r;   r;   `   rA   r(   c                 "    t         j                  S r,   rD   r:   s    r&   r;   r;   b   rF   r(   c                 "    t         j                  S r,   rH   r:   s    r&   r;   r;   d   rF   r(   c                       yrK   r3   r3   r(   r&   r;   r;   f   rL   r(   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r7   )must contain only finite / non-nan values(must contain at least one non-zero value)         zmust be a length 2 tupler3   )r^   r]   zleft >= right)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domainr3   )getattrr   samplingpytestr   )re   errmsgmethodkwargsMethods         r&   test_bad_domainrn      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   rq   r3   )rf   r   rg   r   rvsr   randomRandomStateseedMT19937	Generator)rk   rl   rm   rw   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 )Nrp   rs   rr   )r   r   set_random_stater   rt   )rz   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]   r3   r#   s     r&   r*   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    r(   N)r0   r1   r2   r   r'   r*   r3   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)Nr@   r`   rr      re   rq   順 r   r   r   rt   r   argsr4   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   r@   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 )Nrq   rp   rr   r3   )rf   r   rg   pickledumpsloadsr   rt   )rk   rl   rm   rz   objr{   s         r&   test_pickler      sZ    U^^V,F-F--D
,,t
C<<D#.r(   size)Nr   )r   r]   )r`   r_   )r^   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   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   rs   r]   rr   num      $@      @)locscaler`   rY   )r   normr   ru   default_rngr
   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r4   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                  t   t        j                         } t        j                  j	                  d      }t        t        | |      5 }t        j                  ddd      }t        || | j                                t        | j                  |      |j                  |             ~d d d        y # 1 sw Y   y xY w)Nr   rs   r]   rr   r   )r   r   r   ru   r   r   r
   r   r   r   r   )r4   r   r|   r   s       r&   %test_NumericalInverseHermite_refcycler   '  s    ::<D99  #D	3T	M QTKK1#&3djjl3SWWQZ0	  s   AB..B7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|   r4   mv_exr   r   rt   mvpvals           r&   r   r   2  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   ?  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   r_   r   )centerre   re   )rh   warnsRuntimeWarningr	   r   )rj   s    r&   !test_warning_center_not_in_domainr   O  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rk   )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   )r8   re   )rf   r   rg   rh   r   r   r   )rk   rm   rj   s      r&   test_error_mode_not_in_domainr   Y  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...rc   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r_   r^   dr   )
rh   r   r   rf   r   rg   r   qrvsqmcHalton)r$   rk   rd   rm   gens        r&   test_input_validationzTestQRVS.test_input_validationj  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   rw   r_   )r]   r]   )r   r   )r   r   )r^   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   rc   r   r]   r   r   r   -q=r   )sysplatformarchitecturerh   xfailr   rf   r   rg   r   r   r   r   r   r   ru   r   prodr   r   reshaper   )r$   r   size_insize_outd_ind_outrk   w32r4   rm   r   rd   shape_expectedqrng2r   uniformqrvs2s                    r&   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistency  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   rf   r   rg   r   r   ru   r   r
  r   r   r   ranger  r   )r$   rk   r4   rm   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(   )r0   r1   r2   r   r   r   Sobolr   qrngstuplesizesdsrh   markparametrizethread_unsafer  r  r3   r(   r&   r   r   g  s    : 599??11?-uyy/?/?/?/JKEEG_i+-E /Auw<	3B[[VU+[[0%8[[]B/[[&9: 5 ; 0 9 , 5D9r(   r   c            
       4   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                  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	jB                  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]   r3   r#   s     r&   r'   z)TestTransformedDensityRejection.dist0.pdf      !AaC%= r(   c                     dd|z  z  S )Nr*  r3   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?r3   r#   s     r&   r.   z)TestTransformedDensityRejection.dist0.cdf      !ad1f*s*++r(   c                      yN)r]   r3   r$   s    r&   r   z-TestTransformedDensityRejection.dist0.support      r(   Nr0   r1   r2   r'   r*   r.   r   r3   r(   r&   dist0r'    s    	!	 	,	r(   r7  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/   r3   r(   r&   dist1r9    s    	,	8	,r(   rD  c                   $    e Zd Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist2c                     || _         y r,   shiftr$   rI  s     r&   r   z.TestTransformedDensityRejection.dist2.__init__  s	    DJr(   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S Nr         ?rI  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   rX   rN  rP  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 NrX   rM  r   rH  r#   s     r&   r.   z)TestTransformedDensityRejection.dist2.cdf  7    OABwb1f~%C26N**r(   N)r0   r1   r2   r   r'   r*   r.   r3   r(   r&   dist2rF    s    		
	)	+r(   rW  rX        @?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*   rs   )warningscatch_warningssimplefilterr   r   r   r$   r4   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   r3   r:   s    r&   r;   z(TestTransformedDensityRejection.<lambda>  rL   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r0   r1   r2   r3   r(   r&   r4   ri        r(   r4   c                      yr   r3   r:   s    r&   r;   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  rL   r(   rc   r'   r*   rh   r   r   r$   r'   ri   rj   r4   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>.distNrj  r3   r(   r&   r4   rr    rk  r(   r4   c                     | S r,   r3   r:   s    r&   r;   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r(   rc   r]   r`   r   rm  )r$   r*   ri   rj   r4   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   r   r   r   r$   re   ri   rj   s       r&   test_inf_nan_domainsz4TestTransformedDensityRejection.test_inf_nan_domains#  s6    ]]3c* 	I'(8H	I 	I 	I	   7A construction_points)r3  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   r{  rh   r   r   r   r   r$   r{  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   r}  )r]   r]   r]   r]   r]   r]   z:33 : starting points not strictly monotonically increasingre  r`   z!50 : starting point out of domain)r_   )re   r{  )
rh   r   r   r   r   r   r   r   rI   r   r  s     r&   "test_bad_construction_points_arrayzBTestTransformedDensityRejection.test_bad_construction_points_array0  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  r~  )r$   r  rj   s      r&   
test_bad_cz*TestTransformedDensityRejection.test_bad_cT  s;    .]]:S1 	A'(8C@	A 	A 	A	   =Ar   r]     r   rM  rY   rZ   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|   rj   resexpecteds         r&   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hat^  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>.distNrj  r3   r(   r&   r4   r  s  s    r(   r4   z`pdf` required but not found.rc   c                       e Zd Zd Zy)r  c                     d| | z  z
  S r   r3   r:   s    r&   r;   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>|  s    AacE r(   Nr0   r1   r2   r'   r3   r(   r&   r4   z;TestTransformedDensityRejection.test_bad_dist.<locals>.dist{  s    !Cr(   z`dpdf` required but not found.)rh   r   r   r   )r$   r4   rj   s      r&   test_bad_distz-TestTransformedDensityRejection.test_bad_distq  s    	 	 /]]:S1 	.'-	.	" 	" 0]]:S1 	.'-	. 	.	. 	.	. 	.s   A8#B8BBN)%r0   r1   r2   r7  rD  rW  distsmv0mv1r   rE   mv2mv3mvsrh   r!  r"  listzipr#  rc  r   bad_pdfsbad_pdfs_commonro  bad_dpdf_commonru  inf_nan_domainsry  r  r  rI   r  r   r   r  r  r3   r(   r&   r%  r%    sJ    , ,+ +, WeguRy%-8E v,Ct*Crvv,C266
CS#
C[[]!#eS/24[[&EF- G4- 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^  rs   )basic_fail_distsrh   skip
isinstancestrrf   r   r   r   r   r   r   r   r   
r$   distnameparamsrj   r4   re   kr   r   r|   s
             r&   rc  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,   rD   r:   s    r&   r;   zTestDiscreteAliasUrn.<lambda>  
    266 r(   r[   c                 "    t         j                  S r,   rH   r:   s    r&   r;   zTestDiscreteAliasUrn.<lambda>  r  r(   c                      y)NrX   r3   r:   s    r&   r;   zTestDiscreteAliasUrn.<lambda>  rL   r(   r\   c                     t         S r,   r?   r:   s    r&   r;   zTestDiscreteAliasUrn.<lambda>  s    3 r(   rB   c                     g S r,   r3   r:   s    r&   r;   zTestDiscreteAliasUrn.<lambda>  s    2 r(   z)setting an array element with a sequence.c                     |  S r,   r3   r:   s    r&   r;   zTestDiscreteAliasUrn.<lambda>  s    A2 r(   z50 : probability < 0c                       yrK   r3   r3   r(   r&   r;   zTestDiscreteAliasUrn.<lambda>  rL   r(   rM   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>.distNrj  r3   r(   r&   r4   r    rk  r(   r4   rc   rt  r   )r   rh   r   r   )r$   r   ri   rj   r4   s        r&   test_bad_pmfz!TestDiscreteAliasUrn.test_bad_pmf  s@    	 	]]3c* 	3T'2	3 	3 	3s   A  A	r   )r6   r5   r7   )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)dtyperp   rs   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   r   r   r   r$   r   rj   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`   rY   r   )rh   r   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   rM  r3  )
urn_factor)rh   r   r   r   r4  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,   r3   r#   s     r&   r   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmf  s    r(   N)r0   r1   r2   r   r3   r(   r&   r4   r    s    r(   r4   rc   r  )r$   rj   r4   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^  rs   )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)r0   r1   r2   r  rh   r!  r"  r   rc  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rE   
inf_domainr  r  r  r  r3   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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
jB                   e
j@                  e
jB                  gde
j@                  d!d"gd#d$e
jB                  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
jB                   e
j@                  e
jB                  gde
j@                  d!d"gd#d$e
jB                  ge
jB                   d*d+gggZ$ej                   j%                  d,e$      d-        Z%ej                   jL                  d.        Z'dd/d0e
jB                  e
j@                  gZ(d1d"e
jB                  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)  r3   r#   s     r&   r'   z(TestNumericalInversePolynomial.dist0.pdf  r+  r(   c                 $    d||dz  dz  z
  dz   z  S r/  r3   r#   s     r&   r.   z(TestNumericalInversePolynomial.dist0.cdf  r0  r(   c                      yr2  r3   r4  s    r&   r   z,TestNumericalInversePolynomial.dist0.support  r5  r(   Nr0   r1   r2   r'   r.   r   r3   r(   r&   r7  r    s    	!	,	r(   r7  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;  rB  r#   s     r&   r.   z(TestNumericalInversePolynomial.dist1.cdf	  r>  r(   N)r0   r1   r2   r'   r.   r3   r(   r&   rD  r    s    	,	,r(   rD  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r2  r3   r4  s    r&   r   z,TestNumericalInversePolynomial.dist2.support  r5  r(   Nr  r3   r(   r&   rW  r    s    	9	 
	r(   rW  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 )NrY   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   rM  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   r3   r4  s    r&   r   z,TestNumericalInversePolynomial.dist3.support*  r5  r(   Nr  r3   r(   r&   dist3r
  "  s    	A	F	r(   r  rX   rY  r@  gܿUUUUUU?gQ?r^   g @r[  r   rZ  c                 8    t        |d      }t        |||       y )Nr^  rs   )r	   r   rb  s       r&   rc  z)TestNumericalInversePolynomial.test_basic6  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^  rs   )rh   r  r  r  rf   r   r_  r`  ra  r   r	   r   r   r   )r$   r  r  very_slow_dists
fail_distsskip_sample_moment_checkr4   r|   s           r&   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists=  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)rf  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>.distNrj  r3   r(   r&   r4   r.  a  rk  r(   r4   rc   r   r   r   )r'   rh   r   r	   rn  s        r&   ro  z+TestNumericalInversePolynomial.test_bad_pdf_  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>.distNrj  r3   r(   r&   r4   r2  i  rk  r(   r4   rc   r   r   r   )logpdfrh   r   r	   )r$   r3  ri   rj   r4   s        r&   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdfg  sD    	 	]]3c* 	<&tQF;	< 	< 	<r/  ra   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrw  )rh   r   r	   r   rx  s       r&   ry  z3TestNumericalInversePolynomial.test_inf_nan_domainsq  s6    ]]3c* 	H&~'7G	H 	H 	Hrz  r   r]   '  r   rM  r   rY   rZ   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   r4   r|   rj   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r8  )r   r	   r_  r`  r  r   r.   r   r   r   r   )r$   r%   r4   r|   rj   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绽|=r:  r9  )r   r	   u_errorr$   r4   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   rJ  )r   rh   r   r   r	   )r$   rJ  r4   rj   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   r   r   r	   r   )r$   r;  rj   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,   rB  r#   s     r&   r.   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zzq))r(   N)r0   r1   r2   r.   r3   r(   r&   BadDistrR        *r(   rT  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  r3   r(   r&   r   rW    rU  r(   r   z!Exact CDF required but not found.)rh   r   r   r	   r   rD  )r$   rT  r4   rj   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>.MyDistNrj  r3   r(   r&   MyDistr\    rk  r(   r]  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 r_  r3   r:   s    r&   r;   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    r!tAv r(   r  gwJ?rr   r   )r'   r	   r3  r   r   r   r   )r$   r]  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).r0   r1   r2   r7  rD  rW  r  r  r  r  r   r!   r  r  r  rh   r!  r#  r"  r  r  rc  xslowr   r+  r  ro  bad_logpdfs_commonr4  r  ry  r   rI   rE   r   r=  r%   rA  slowrH  
bad_ordersbad_u_resolutionrM  rO  r  re  r3   r(   r&   r  r    sp    , ,
 
"	 	 Weguw0E v,Ct*C;'"%%("22
3C;)GBEE1H,<<
=CS#
C[[&EF[[]!#eS/24-4 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            
       R   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
                  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                  j3                  d      ej                  j+                  d      ej                  j5                  d	      d                      Zd Zddej:                  j=                  d      gZejA                  ej:                  jC                  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jN                  d#d$d%&      g g gejP                  gejR                   ejP                  ejR                  gdejP                  d'd(gd)d*ejR                  gg d+ggZ*ej                  j                  d,e*      d-        Z+ej                  jX                  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 )NrM  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r2  r3   r4  s    r&   r   z)TestNumericalInverseHermite.dist0.support  r5  r(   Nr6  r3   r(   r&   r7  rn    s    	1	,	M	r(   r7  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   rM  rX   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   rX   rM  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   rX   rM  r*  rw  r#   s     r&   r.   z%TestNumericalInverseHermite.dist1.cdf   sk    T	q2662:*:#;;<<BSdRVVR"%%Z1,<%==== r(   c                      y)N)r3  rM  r3   r4  s    r&   r   z)TestNumericalInverseHermite.dist1.support(  s    r(   Nr6  r3   r(   r&   rD  rt    s    	>	@	>	r(   rD  r3  r^   r  r]   r   g      пg      ?g      ?rZ  rJ  r_   r   c                 :    t        ||d      }t        |||       y )Nr^  )rJ  rq   )r
   r   )r$   r4   r   rJ  r|   s        r&   rc  z&TestNumericalInverseHermite.test_basic2  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rw  )rh   r   r
   r   rx  s       r&   ry  z0TestNumericalInverseHermite.test_inf_nan_domains<  s6    ]]3c* 	E#N$4VD	E 	E 	Erz  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  )rh   r  r	  r   ru   r   rf   r   r
   maxrO  r   r.   )r$   r  shapes
slow_distsr)  r|   r4   fnir%   p_tolu_tols              r&   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_distsA  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_distsZ  s     	''&9r(   c                 (    | j                  dd       y )N	truncnorm)r   r^   r  r4  s    r&   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155b  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^   rL  z`cdf` required but not foundr   z!could not convert string to floatekkir:  )rh   r   r   r
   r   )r$   rd   s     r&   r   z1TestNumericalInverseHermite.test_input_validationh  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   rq   r   )r   r
   r   rt   r   r   r  r   r   r   r   )
r$   r|   r  r  r4   r  r{   rt   r  r~   s
             r&   test_RVSz$TestNumericalInverseHermite.test_RVSz  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   r  r:  )rh   r   r   r
   r   r  )r$   r  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   rs   )r   r
   r   r   r   rt   )r$   rD  fni1rW  fni2s        r&   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sI     &u-

&u-a0$(((2JKr(   rX   r   r6  r   rM  r   rY   rZ   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  r:  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)NrC  r:  r]  r9  )r   r
   rD  r_  r`  ra  r   rE  s        r&   rH  z(TestNumericalInverseHermite.test_u_error  s    %d?	35   i$$& 	D!!(N;)$UCC	D 	35   i	D 	Ds   (BB().r0   r1   r2   r7  rD  r  r   r!   r  r  r  rh   r!  r"  r  r  r#  rc  r  ry  r  r  rf  r   r+  	fail_slowparallel_threads_limitr  r   ru   rv   rngsappendr   r  r  r  r  r  r   rI   rE   r   r=  rh  rH  r3   r(   r&   rl  rl    s   
 " 8 WegE qw<q!BEE'"%%-00
1CQ"%%&&-
.C*C[[]!#eS/24[[Wq!f-[[-  .4- [[/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(   rl  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?   rq   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  r3  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^  rs   )r  rh   r  r  r  rf   r   r   r   r   r   r   r   r   r  s
             r&   rc  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]   r6  r   rM  r   rY   rZ   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^  rs   r  r]  r  r  r  r  )
r   r   r   r_  r`  r  r   r   r   r   )	r$   r   npr4   r|   rj   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  )rh   r   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   r   r   r   r   r   r  s     r&   r  z&TestDiscreteGuideTable.test_inf_domain4  s?    ]]:->? 	Du{{2s3FC	D 	D 	Dr  N)r0   r1   r2   r  r  r  r  rh   r!  r"  r   rc  r   r   rI   rE   r   r=  r  r  r  r  r3   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            	       Z   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	                  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,   )rI  r8   rJ  s     r&   r   z%TestSimpleRatioUniforms.dist.__init__?  s    DJDIr(   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S rL  rN  rP  s      r&   r'   z TestSimpleRatioUniforms.dist.pdfC  rR  r(   c                 P    || j                   z  }|dk  rdd|z
  z  S ddd|z   z  z
  S rU  rH  r#   s     r&   r.   z TestSimpleRatioUniforms.dist.cdfH  rV  r(   N)r0   r1   r2   r   r'   r.   r3   r(   r&   r4   r  >  s    		
	+r(   r4   rX   rX  rZ  c                     t        ||j                  d      }t        |||       t        ||j                  |j                  |j                        d      }t        |||       y )Nr^  )r8   rq   )r8   cdf_at_moderq   )r   r8   r   r.   rb  s       r&   rc  z"TestSimpleRatioUniforms.test_basicV  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rw  )rh   r   r   r   rx  s       r&   ry  z,TestSimpleRatioUniforms.test_inf_nan_domainsc  s6    ]]3c* 	A 0@	A 	A 	Arz  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   r3  )r8   pdf_area)rh   r   r   r   r   r4  s    r&   r  z%TestSimpleRatioUniforms.test_bad_argsh  s9    ]]:-FG 	G 0q2F	G 	G 	Gs	   <AN)r0   r1   r2   r4   r  r   rE   r  r  r  rh   r!  r"  r  r  r#  rc  r  ry  r  r3   r(   r&   r  r  :  s    + +" "XtF|$E rvv,C266
C*C[[]!#eS/24[[- 4- [[/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 )Nr^   r   i90  umaxvminvmaxrq   i	  r   r]   ry  Tc                 .    t        j                  |        S r,   rY  r:   s    r&   r;   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>y  s    bffaRj r(   r3  r  expon)
r   r   r'   r   r    r   r   kstestrt   r"   )r$   fvr   r   s        r&   test_rv_generationz$TestRatioUniforms.test_rv_generationo  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 )Nr^   r     r  r_   r   )r_   r]   r   )r_   r_   r_   r     r]   r   )
r   r   r'   r   r    r   rt   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_shape}  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 )Nr^   r   r  r  r`   )
r   r   r'   r   r    r   rt   ru   rv   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 vmaxrc   r]   r_   )r'   r  r  r  zumax must be positiver3  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)r0   r1   r2   r  r  r   r  r3   r(   r&   r  r  n  s    K8	9r(   r  )gHz>r   )r  r   )Lr   r   rh   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   scipy._lib._gcutilsr   r   all_methodsfloaterrr  r  r  r  rg  rI   rE   r  r   bad_sized_domainsbad_domainsr  nan_domainsr!  r"  rn   r   r   r   r   r   r   r   r   r   r   r   r   r%  r  r  rl  r  r  r  r3   r(   r&   <module>r     s        
    7	 	 	 +   1 < / 2	 	 #V^-=$>?&"345F$567!FN,<#=>)9 :;^%5qAB , ;'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(   