
    -iiZ              	          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j&        j'        dk    rej&        j(        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
j0        d3gd4fd/d/gd5fgZ1d6e2d7fd8e2d7fgZ3d9ed:fd;ed:fgZ4d<ed:fe
j0        e
j0        fed:fe
j0         e
j0         fed:fe
j0        e
j0         fed:fe
j0         e
j/        fe2d=fe
j/        e
j0        fe2d=fgZ5d e
j/        fe2d=fe
j/        e
j/        fe2d=fgZ6ej7        8                    d>e4e3z   e6z             ej7        8                    d?e%          d@                         Z9ej7        8                    d?e%          dA             Z:dB Z;dC Z<ej7        8                    d?e%          dD             Z=ej7        8                    dEg dF          dG             Z>dH Z?dbdKZ@dcdMZAdN ZBej7        8                    dOg dP          dQ             ZCej7        8                    dOddg           G dR dS                      ZD G dT dU          ZE G dV dW          ZF G dX dY          ZG G dZ d[          ZH G d\ d]          ZI G d^ d_          ZJ G d` da          ZKdS )d    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dS )StandardNormalc                     dt          j        dt           j        z            z  t          j        d|z  |z            z  S N      ?       @      ࿩npsqrtpiexpselfxs     e/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/stats/tests/test_sampling.pypdfzStandardNormal.pdf#   s4    "'"RU(###bfTAXaZ&8&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;    "'"RU(###qb(26$(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   "   sA        9 9 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       rv r'   c                     t           j        S r+   r   nanr=   s    r%   r>   r>   J   rI   r'   c                      dS Nr   r2   r2   r'   r%   r>   r>   L       S 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                      dS 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                      dS 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            d S # 1 swxY w Y   d S )Nmatchdomainr2   )getattrr   samplingpytestr   )rf   errmsgmethodkwargsMethods         r%   test_bad_domainro      s    
 U^V,,F	s#	&	&	& ( (''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AAAc                    t          t          j        |           }d} |di |d|i} |di |d|i}t          |                    d          |                    d                     t
          j                            d          } |di |}|                    d|          }t
          j                            d             |di |ddi}|                    d          }t          ||           t
          j                            t
          j        	                    d                    }	t
          j        
                    t
          j        	                    d                    }
 |di |d|	i} |di |d|
i}t          |                    d          |                    d                     d S )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      s   U^V,,F D6..F.....D6..F.....D#... )


$
$C6FD88Cc8**DINN46--F-----D88C==Dt
 I!!")"3"3C"8"899EI	 1 1# 6 677E6//F/////D6//F/////D#.....r'   c                     t          t                      d          } t          t                                }|                    d           t          |                     d          |                    d                     t          t                      d          }|                    d          }|                    d           |                    d          }t          ||           d S )Nrq   rt   rs   )r   r   set_random_stater   ru   )r{   r|   r}   r~   r   s        r%   test_set_random_stater      s    &~'7'7cJJJD&~'7'788D##...
%n&6&6S
I
I
IC773<<D773<<Dtr'   c                  r   d d d G d d          fd} fd}t          j        |           }t          j        |          }|                                 |                                 |                                 |                                 d         dk    sJ d	         d
k    sJ d S )N)err1err2c                        e Zd Zd Zd Zd ZdS ).test_threading_behaviour.<locals>.Distributionc                     || _         d S r+   )pdf_msg)r#   r   s     r%   __init__z7test_threading_behaviour.<locals>.Distribution.__init__   s    "DLLLr'   c                 N    d|cxk     rdk     rn nt          | j                  |S )Ng33333H@g      I@)
ValueErrorr   r"   s     r%   r&   z2test_threading_behaviour.<locals>.Distribution.pdf   s0    a$ ...Hr'   c                     dS Nr`   r2   r"   s     r%   r)   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    1r'   N)r/   r0   r1   r   r&   r)   r2   r'   r%   Distributionr      sA        	# 	# 	#	 	 	
	 	 	 	 	r'   r   c                       d          } t          | dd          }	 |                    d           d S # t          $ r}|j        d         d<   Y d }~d S 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   s    |E"")$y79; ; ;	'GGFOOOOO 	' 	' 	'VAYF6NNNNNNN	'   7 
AAAc                       d          } t          | dd          }	 |                    d           d S # t          $ r}|j        d         d<   Y d }~d S d }~ww xY w)Nbarr   ra   r   r   r   r   r   r   s      r%   func2z'test_threading_behaviour.<locals>.func2   s    |E"")$y78: : :	'GGFOOOOO 	' 	' 	'VAYF6NNNNNNN	'r   )targetr   rC   r   r   )	threadingThreadstartjoin)r   r   t1t2r   r   s       @@r%   test_threading_behaviourr      s    D))F
 
 
 
 
 
 
 
' ' ' ' ' '' ' ' ' ' ' 
		'	'	'B			'	'	'BHHJJJHHJJJGGIIIGGIII&>U""""&>U""""""r'   c                    t          t          j        |           } |di |ddi}t          j        |          }t          j        |          }t          |                    d          |                    d                     d S )Nrr   rq   rs   r2   )rg   r   rh   pickledumpsloadsr   ru   )rl   rm   rn   r{   objr|   s         r%   test_pickler      s{    U^V,,F6--F-----D
,t

C<D#.....r'   size)Nr   )r   r`   )r;   r:   )ra   r:         )r   r   )r   r`   c                    t          t                                }| +t          j        |                    |                     sJ d S t          j        |           r| f} |                    |           j        | k    sJ d S r+   )r   r   r   isscalarru   shape)r   r}   s     r%   test_rvs_sizer     s    
 &n&6&6
7
7C|{3774==)))))));t 	8Dwwt}}"d******r'   c                     t          j                    } t          j                            d          }t          | |          }t          j        ddd          }t          || |                                             t          | 	                    |          |	                    |                     t          j        dd          } t          | |          }t          || |                                             t          | 	                    |          |	                    |                     t          j
        d	d
          } t          | |          }|                                 }|                     t          j        |d         |d         dz                       }t          |||                                             d S )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     se   :<<D9  ##D
!$T
:
:
:C
Aqc"""AsD$**,,///DHHQKK,,,:#R(((D
!$T
:
:
:CsD$**,,///DHHQKK,,,;r3D
4d
3
3
3C\\^^F	")F1Ivay{33	4	4BR.....r'   Hz>皙?c                    |                      d          }|                                |                                f}t          j        |d                   rt          ||||           |                      d          }t          j        |j                  |_        t          ||j                  j	        }|dk    sJ d S )Nr   r`   rtolatoli  r   )
ru   meanvarr   isfiniter   	vectorizer-   r   pvalue)r}   r3   mv_exr   r   ru   mvpvals           r%   r   r   +  s    
''&//C	SWWYY	B	{58 9E48888
''#,,C|DH%%DH#tx((/D#::::::r'   MbP?c                    |                      d          }|                                |                                f}t          ||||           ||                                z  }t          j        |          }t          j        |d          \  }}	|	|	                                z  }	|	|d |	j        <   t          ||          j
        }
|
dk    sJ d S )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	SWWYY	BBDt4444	bffhhBb!!IyD111HAuEIIKKE"IkuzkY##*D#::::::r'   c                  N   d} t          j        t          |           5  t          t	                      dd           d d d            n# 1 swxY w Y   t          j        t          |           5  t          t	                      d           d d d            d S # 1 swxY w Y   d S )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  sE    ;C	nC	0	0	0 N N">#3#3AfMMMMN N N N N N N N N N N N N N N	nC	0	0	0 D D">#3#3FCCCCD D D D D D D D D D D D D D D D D Ds#   A		AA/BB!Brl   )r   r	   r   c                     t          t          j        |           }d}t          j        t
          |          5   |t                      dd           d d d            d S # 1 swxY w Y   d S )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  s     U^V,,F
#C	{#	.	.	. 8 8~a77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s   A  A$'A$c                      e Zd Zd Zdej                            dd          e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                            de          ej                            de
          ej                            de          ej                            d          d                                                 Zd ZdS )TestQRVSc                 4   d}t          j        t          |          5  t          t          j        |          } |t                                }|                    d           d d d            n# 1 swxY w Y   t          t          j        |          } |t                                }d}t          j        t          |          5  |                    dt          j        	                    d                     d d d            d S # 1 swxY w Y   d S )	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  sw   8]:U333 	# 	#U^V44F&))**CHHH"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 00f^%%&&H]:U333 	: 	:HHqUY%5%5a%8%8H999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   AA22A69A65DDD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    ot          j                    d         dk    }|r|dk    rt          j        d           t                      }t          t          j        |          }	 |	|          }
|\|Z|j	        |k    rOd}t          j
        t          |          5  |
                    |||           d d d            n# 1 swxY w Y   d S |||j	        d	k    r|j	        f}||z   }t          |          }|
                    |||
          }||j        |k    sJ |o|                    t!          j        |          pd	          }t          j                            |                              |          }t+          ||d           d S d S )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  s    lg%O(*?*A*A!*D*O 	#6999L " # # # 00fTll  0TVt^^LEz777 ; ;DT:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;F <D,1VIE!E)xxWx>>:////ll277#3#3#8q99GJNN7++33NCCED%e444444 s   )CCCc                 N   t                      }t          t          j        |          } ||          }d}d}t          j                            |d          }t          j                            |d          }|                    t          j        |                    }	|	                    |||          }
t          j
                            |	          }t          |          D ]=}|
d|f         }|d d |f                             |          }t          ||d           >d S )	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0fTlly**	   ++,,rwt}}--xxTQ4x88
w''q 	9 	9A#q&\FAAAqDk))$//GFG%88888	9 	9r'   )r/   r0   r1   r   r   r   Sobolr   qrngstuplesizesdsri   markparametrizethread_unsafer  r  r2   r'   r%   r   r   `  s.       : : : 59??11?--uy/?/?/?/J/JKEEEGG_i+-E /Auuww<	3B[VU++[0%88[]B//[&9:: 5  5 ;: 0/ 98 ,+ 5D9 9 9 9 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                            d eee                    ej                            d          d                         Zd edfgZeez  Zej                            de          d             Zej                            de          d             Zej                            de          d             Zej                            dg d          d             Zd Ze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                            d(e!          d)             Z"d* Z#d+S ),TestTransformedDensityRejectionc                   &    e Zd Zd Zd Zd Zd ZdS )%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                     dS N)r`   r2   r#   s    r%   r   z-TestTransformedDensityRejection.dist0.support      5r'   Nr/   r0   r1   r&   r)   r-   r   r2   r'   r%   dist0r(    sP        	! 	! 	!	  	  	 	, 	, 	,	 	 	 	 	r'   r8  c                        e Zd Zd Zd Zd ZdS )%TestTransformedDensityRejection.dist1c                 F    t           j                            |dz            S Nr   r   r   _pdfr"   s     r%   r&   z)TestTransformedDensityRejection.dist1.pdf      :??1s7+++r'   c                 T    | dz  t           j                            |dz            z  S )N{Gz?r   r=  r"   s     r%   r)   z*TestTransformedDensityRejection.dist1.dpdf  s%    29uzq3w7777r'   c                 F    t           j                            |dz            S r<  r   r   _cdfr"   s     r%   r-   z)TestTransformedDensityRejection.dist1.cdf  r?  r'   Nr.   r2   r'   r%   dist1r:    sA        	, 	, 	,	8 	8 	8	, 	, 	, 	, 	,r'   rE  c                   &    e Zd Zd Zd Zd Zd ZdS )%TestTransformedDensityRejection.dist2c                     || _         d S r+   shiftr#   rJ  s     r%   r   z.TestTransformedDensityRejection.dist2.__init__  s    DJJJr'   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S Nr         ?rJ  absr#   r$   ys      r%   r&   z)TestTransformedDensityRejection.dist2.pdf  /    OAc!ffrk"A7Q;r'   c                 f    || j         z  }dt          |          dz   z  }||z  |z  }|dk     r|n| S )Nr   r[   rO  rQ  s      r%   r)   z*TestTransformedDensityRejection.dist2.dpdf  sB    OAc!ffrk"AA	AR11qb(r'   c                 H    || j         z  }|dk    rdd|z
  z  S ddd|z   z  z
  S Nr[   rN  r   rI  r"   s     r%   r-   z)TestTransformedDensityRejection.dist2.cdf  7    OABwwb1f~%C26N**r'   N)r/   r0   r1   r   r&   r)   r-   r2   r'   r%   dist2rG    sP        	 	 		 	 	
	) 	) 	)	+ 	+ 	+ 	+ 	+r'   rX  r[        @?rA  dist, mv_exdeadlocks for unknown reasonsr   c                     t          j                    5  t          j        dt                     t	          |d          }d d d            n# 1 swxY w Y   t          |||           d S )Nignore*   rt   )warningscatch_warningssimplefilterr   r   r   r#   r3   r   r}   s       r%   
test_basicz*TestTransformedDensityRejection.test_basic  s     $&& 	E 	E!(N;;;-dDDDC	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	3e,,,,,s   ,AAAc                     dS )Nr   r2   r=   s    r%   r>   z(TestTransformedDensityRejection.<lambda>  s    1 r'   50 : bad construction points.pdf, err, msgc                      G d d          }||_         d |_        t          j        ||          5  t	          |           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS ):TestTransformedDensityRejection.test_bad_pdf.<locals>.distNr/   r0   r1   r2   r'   r%   r3   rj  
          Dr'   r3   c                     dS r   r2   r=   s    r%   r>   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  s    a r'   rd   r&   r)   ri   r   r   r#   r&   rj   rk   r3   s        r%   test_bad_pdfz,TestTransformedDensityRejection.test_bad_pdf  s    	 	 	 	 	 	 	 	K	]3c*** 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAzdpdf, err, msgc                      G d d          }d |_         ||_        t          j        ||          5  t	          |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS );TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNrk  r2   r'   r%   r3   rs    rl  r'   r3   c                     | S r+   r2   r=   s    r%   r>   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r'   rd   r`   r;   r   rn  )r#   r)   rj   rk   r3   s        r%   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  s    	 	 	 	 	 	 	 	;	]3c*** 	> 	>'W====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   AAArb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S Nrd   r   )ri   r   r   r   r#   rf   rj   rk   s       r%   test_inf_nan_domainsz4TestTransformedDensityRejection.test_inf_nan_domains  s    ]3c*** 	I 	I'(8(8HHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I   AA	Aconstruction_points)r4  r   r   c                     t          j        t          d          5  t          t	                      |           d d d            d S # 1 swxY w Y   d S )Nz1`construction_points` must be a positive integer.rd   r|  ri   r   r   r   r   r#   r|  s     r%   #test_bad_construction_points_scalarzCTestTransformedDensityRejection.test_bad_construction_points_scalar!  s    ]: .D E E E 	 	'  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                    g }t          j        t          d          5  t          t	                      |           d d d            n# 1 swxY w Y   g d}t          j        t          d          5  t          t	                      |           d d d            n# 1 swxY w Y   t          j        t          j        t          j        g}t          j        t          d          5  t          t	                      |           d d d            n# 1 swxY w Y   ddg}t          j        t          d	          5  t          t	                      d
|           d d d            d S # 1 swxY w Y   d S )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 increasingrf  r;   z!50 : starting point out of domain)r:   )rf   r|  )
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 N N 	 	 (  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 100\. 1> ? ? ? 	 	 (  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  "vrvrv6]; /9 : : : 	 	'  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  #Bi\. 1: ; ; ; 	 	'  $7   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sG   AAA2BB #B %DDD9E%%E),E)c      r   r   c                     d}t          j        t          |          5  t          t	                      d           d d d            d S # 1 swxY w Y   d S )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11 	A 	A'(8(8C@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A   A		AAr   r`     r   rN  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
                     |                    |          }t          j        	                    |          }d d d            n# 1 swxY w Y   t          ||d	d
           |j        |j        k    sJ d S )NgH.?)max_squeeze_hat_ratioinvalid value encountered in r^  greatergreater_equalless
less_equalr   h㈵>r   )r   r   r`  ra  filterwarningsr   ppf_hatr   r   r   r   r   )r#   r   r}   rk   resexpecteds         r%   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hatW  sM    *.*:*:@FH H H $&& 	) 	)1C#HcIo~NNN#HcO.C^TTT#HcFlNKKK#HcL.@.QQQ++a..Cz~~a((H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	XDt<<<<yHN******s   B/C,,C03C0c                 L    G d d          }d}t          j        t          |          5  t          |           d d d            n# 1 swxY w Y    G d d          }d}t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS );TestTransformedDensityRejection.test_bad_dist.<locals>.distNrk  r2   r'   r%   r3   r  l  s        Cr'   r3   z`pdf` required but not found.rd   c                       e Zd Zd ZdS )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        !/CCCr'   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11 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	" 	" 	" 	" 	" 	" 	" 	" 0]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   AAA<BB BN)$r/   r0   r1   r8  rE  rX  distsmv0mv1r   rH   mv2mv3mvsri   r"  r#  zipr$  rd  r   bad_pdfsbad_pdfs_commonrp  bad_dpdf_commonrv  inf_nan_domainsrz  r  r  rL   r  r   r   r  r  r2   r'   r%   r&  r&    s              , , , , , , , ,+ + + + + + + +, UWWeegguuRyy%%--8E v,Ct*Crv,C26
CS#
C[] S__. .[&EFF- - GF. .- k+KLMHH[_h77. . 87. [-??> > @?> [/AAI I BAI [2LLLAA  BA" " "H [S3R"@AAA A BAA
 
Qt	$	$	$b2$6'2626	"A63
sC0***	=	?A [S!$$+ + %$+$. . . . .r'   r&  c            	       `   e Zd Zh dZe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                            de          d             Zej                            dg dg dg          d             Ze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                            de          d             Zd Zd Zd ZdS ) TestDiscreteAliasUrn>   randintnchypergeom_fishernchypergeom_walleniusdistname, paramsc                    || j         v rd}t          j        |           t          |t                    s|}nt          t          |          } || }|                                }t          j	        |d         |d         z
            st          j        d           t          j
        |d         |d         dz             }|                    |          }|                    d          }t          |d          }	t          |	||           d S )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%   rd  zTestDiscreteAliasUrn.test_basic  s   t,,,:CK(C(( 	,DD5(++DtV}{6!9vay011 	@ K>???IfQi1--XXa[[

4  t"555CU+++++r'   c                     t           j        S r+   rG   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>      26 r'   r^   c                     t           j        S r+   rK   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  r  r'   c                     dS )Nr[   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    3 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                      dS rN   r2   r2   r'   r%   r>   zTestDiscreteAliasUrn.<lambda>  s     r'   rP   zpmf, err, msgc                      G d d          }||_         t          j        ||          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNrk  r2   r'   r%   r3   r    rl  r'   r3   rd   ru  r   )r   ri   r   r   )r#   r   rj   rk   r3   s        r%   test_bad_pmfz!TestDiscreteAliasUrn.test_bad_pmf  s    	 	 	 	 	 	 	 	]3c*** 	3 	3T'2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   A

AAr   )r5   r4   r6   )r   r   g      @      @r   g      @c                    t          j        |t           j                  }t          |d          }|                    d           ||                                z  }t          j        dt          |                    }t          j        ||          }t          j        ||z
  dz  |          }||f}t          |||           d S )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     Z"*---r444"&&((]9QB((Z"555
ZJ!61 <bIII
 *,C[11111r'   pv, msgc                     t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S Nrd   ri   r   r   r   r#   r   rk   s      r%   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s    ]:S111 	! 	!R   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   9= =r   rf   c                     t          j        t          d          5  t          t	          j        dd          |           d d d            d S # 1 swxY w Y   d S 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 	BU[S11&AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B   %AAAc                     t          j        t          d          5  t          ddgd           d d d            d S # 1 swxY w Y   d S )Nzrelative urn size < 1.rd   rN  r4  )
urn_factor)ri   r   r   r   r5  s    r%   test_bad_urn_factorz(TestDiscreteAliasUrn.test_bad_urn_factor  s    \.0IJJJ 	8 	8c3ZB7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   =AAc                     d} G d d          }t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S )NzG`domain` must be provided when the probability vector is not available.c                       e Zd Zd ZdS )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11 	# 	#T"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   AAAc                     t          j        t          j        d                    }t	          |d          }t          ||dd           d S )N)i  r_  rt   )g     @g    
Ag{Gzt?)r   )r   softmaxr   onesr   r   )r#   r   r}   s      r%   test_gh19359z!TestDiscreteAliasUrn.test_gh19359  sX    _RWW--..r333C%C!%	' 	' 	' 	' 	' 	'r'   N)r/   r0   r1   r  ri   r"  r#  r   rd  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63 3 763 [T$5$5$5$B$B$B$D E E
2 
2E E
2 [Y66! ! 76! F7BF#bfbf%5"&7Ibf+|-J [Xz22B B 32B8 8 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                            d          ej                            d eee                    d                         Zej        j        ej                            de          d                         Zej                            de          d             Zej                            de          d             Ze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                            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                            d,e#          d-             Z$ej        j%        d.             Z&dd/d0e
j         e
j        gZ'd1d"e
j         e
j        gZ(ej                            d2e'          d3             Z)ej                            d4e(          d5             Z*d6 Z+d7 Z,d8S )9TestNumericalInversePolynomialc                        e Zd Zd Zd Zd ZdS )$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 r0  r2   r"   s     r%   r-   z(TestNumericalInversePolynomial.dist0.cdf  r1  r'   c                     dS r3  r2   r5  s    r%   r   z,TestNumericalInversePolynomial.dist0.support  r6  r'   Nr/   r0   r1   r&   r-   r   r2   r'   r%   r8  r    sA        	! 	! 	!	, 	, 	,	 	 	 	 	r'   r8  c                       e Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist1c                 F    t           j                            |dz            S r<  r=  r"   s     r%   r&   z(TestNumericalInversePolynomial.dist1.pdf  r?  r'   c                 F    t           j                            |dz            S r<  rC  r"   s     r%   r-   z(TestNumericalInversePolynomial.dist1.cdf  r?  r'   N)r/   r0   r1   r&   r-   r2   r'   r%   rE  r    s2        	, 	, 	,	, 	, 	, 	, 	,r'   rE  c                        e Zd Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist2c                 \    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+    $!bfQruWQY&7&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  sZ    !a%LbhA..25
1C1CCDX  r'   c                     dS r3  r2   r5  s    r%   r   z,TestNumericalInversePolynomial.dist2.support  r6  r'   Nr  r2   r'   r%   rX  r  
  sA        	9 	9 	9	  	  	 
	 	 	 	 	r'   rX  c                        e Zd Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist3c                 b    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  s0    $RVAbeGAI->->)>!??@@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   rN  g
ףp=
?ra   r;   r  r"   s     r%   r-   z(TestNumericalInversePolynomial.dist3.cdf  sZ    S53;qw26"RU(3C3C356!BE'!)3D3D4E "F F Fr'   c                     dS )N)r   r2   r5  s    r%   r   z,TestNumericalInversePolynomial.dist3.support#  r6  r'   Nr  r2   r'   r%   dist3r	    sG        	A 	A 	A	F 	F 	F	 	 	 	 	r'   r  r[   rZ  rA  gܿUUUUUU?gQ?ra   g @r\  r   r[  c                 J    t          |d          }t          |||           d S )Nr_  rt   )r	   r   rc  s       r%   rd  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            n# 1 swxY w Y   ||v rd S t          |||                                |                                g           d S )	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`  ra  rb  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 &&K7X77888z!!K4(44555h,,x((( 	 tV}$&& 	D 	D!(N;;;,TCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D ///F3tyy{{DHHJJ&?@@@@@s   ,B>>CCrg  c                      G d d          }||_         t          j        ||          5  t          |ddg           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNrk  r2   r'   r%   r3   r-  Z  rl  r'   r3   rd   r   r   r   )r&   ri   r   r	   ro  s        r%   rp  z+TestNumericalInversePolynomial.test_bad_pdfX  s    	 	 	 	 	 	 	 	]3c*** 	< 	<&tQF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<   AAAzlogpdf, err, msgc                      G d d          }||_         t          j        ||          5  t          |ddg           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNrk  r2   r'   r%   r3   r1  b  rl  r'   r3   rd   r   r   r   )logpdfri   r   r	   )r#   r2  rj   rk   r3   s        r%   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdf`  s    	 	 	 	 	 	 	 	]3c*** 	< 	<&tQF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r.  rb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rx  )ri   r   r	   r   ry  s       r%   rz  z3TestNumericalInversePolynomial.test_inf_nan_domainsj  s    ]3c*** 	H 	H&~'7'7GGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hr{  r   r`   '  r   rN  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
                     |                    |          }t          j                            |          }d d d            n# 1 swxY w Y   t          ||d	d	
           |j
        |j
        k    sJ d S N+=u_resolutionr  r^  r  r  r  r  gdy=r   )r   r	   r`  ra  r  r   r   r   r   r   r   r#   r   r3   r}   rk   r  r  s          r%   test_ppfz'TestNumericalInversePolynomial.test_ppf~  F   (EBBB $&& 	) 	)1C#HcIo~NNN#HcO.C^TTT#HcFlNKKK#HcL.@.QQQ''!**Cz~~a((H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	XE>>>>yHN******   B/C..C25C2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
                     |                    |          }t          j                            |          }d d d            n# 1 swxY w Y   t          ||d	d	
           |j
        |j
        k    sJ d S r7  )r   r	   r`  ra  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          }|                                \  }}|dk     sJ ||k    sJ t          |d          }|                                \  }}|dk     sJ ||k    sJ d S )N绽|=r9  r8  )r   r	   u_errorr#   r3   r}   	max_errormaes        r%   test_u_errorz+TestNumericalInversePolynomial.test_u_error  s    (EBBB	35    i(EBBB	35    ir'   g      @   g#B;orderc                     t                      }d}t          j        t          |          5  t	          ||           d d d            d S # 1 swxY w Y   d S )Nz2`order` must be an integer in the range \[3, 17\].rd   rI  )r   ri   r   r   r	   )r#   rI  r3   rk   s       r%   test_bad_ordersz.TestNumericalInversePolynomial.test_bad_orders  s    C]:S111 	: 	:&t59999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   AAAr:  c                     d}t          j        t          |          5  t          t	                      |           d d d            d S # 1 swxY w Y   d S )Nz.`u_resolution` must be between 1e-15 and 1e-5.rd   r9  )ri   r   r   r	   r   )r#   r:  rk   s      r%   test_bad_u_resolutionz4TestNumericalInversePolynomial.test_bad_u_resolution  s    ?]:S111 	B 	B&~'7'74@B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Br  c                 j    G d d          } |            }d}t          j        t          |          5  t          |          }d d d            n# 1 swxY w Y   t	                      }t          |          }d}t          j        t          |          5  |                    d           d d d            n# 1 swxY w Y    G d d          } |            }t          |          }d	}t          j        t          |          5  |                                 d d d            d S # 1 swxY w Y   d S )
Nc                       e Zd Zd ZdS )=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 @    t           j                            |          S r+   rC  r"   s     r%   r-   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zq)))r'   N)r/   r0   r1   r-   r2   r'   r%   BadDistrQ    #        * * * * *r'   rS  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dS )BTestNumericalInversePolynomial.test_bad_args.<locals>.Distributionc                 6    t          j        d|z  |z            S )Nr   r   r!   r"   s     r%   r&   zFTestNumericalInversePolynomial.test_bad_args.<locals>.Distribution.pdf  s    vdQhqj)))r'   Nr  r2   r'   r%   r   rV    rT  r'   r   z!Exact CDF required but not found.)ri   r   r   r	   r   rC  )r#   rS  r3   rk   r}   r   s         r%   r  z,TestNumericalInversePolynomial.test_bad_args  s   	* 	* 	* 	* 	* 	* 	* 	* wyyJ]:S111 	3 	3,T22C	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 (..E]:S111 	 	KKOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 		* 	* 	* 	* 	* 	* 	* 	* |~~(..2]:S111 	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   AAAB88B<?B<D((D,/D,c                 >    G d d          } |            }d |_         t          |          } |            }d |_        t          |          }t          j        ddd          }t          |                    |          |                    |                     d S )	Nc                       e Zd ZdS )JTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNrk  r2   r'   r%   MyDistr[    rl  r'   r\  c                 8    t          j        |  | z  dz            S Nra   )mathr!   r=   s    r%   r>   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1!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	   r2  r   r   r   r   )r#   r\  dist_pdfr{   dist_logpdfr|   qs          r%   test_logpdf_pdf_consistencyz:TestNumericalInversePolynomial.test_logpdf_pdf_consistency  s    	 	 	 	 	 	 	 	 68811)(33 fhh--)+66Kf#...TXXa[[11111r'   N)-r/   r0   r1   r8  rE  rX  r  r  r  r  r   r    r  r  r  ri   r"  r$  r#  r  rd  xslowr   r*  r  rp  bad_logpdfs_commonr3  r  rz  r   rL   rH   r   r<  r$   r@  slowrG  
bad_ordersbad_u_resolutionrL  rN  r  rd  r2   r'   r%   r  r    s\              , , , , , , , ,
 
 
 
 
 
 
 
"	 	 	 	 	 	 	 	 UWWeegguuww0E v,Ct*C;'"%("22
3C;)GBE1H,<<
=CS#
C[&EFF[] S__. .- -. . GF- [[/::A A ;: A@ [_o>>< < ?>< [/1CDD< < ED< [/AAH H BAH 	Aqe$$$
RD	BF7BFBF+	 &#s	c3/<	A [S!$$+ + %$+  
S"%	(	(	("rdRVH6'2626	"A63
sC0BF7Aq/	B	DA [S!$$+ + %$+  [	  	  	  S"bfbf-JtRVRV4[Wj11: : 21: [^-=>>B B ?>B  62 2 2 2 2r'   r  c            
          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                            d eee
                    ej                            dddg          ej        j        d                                     Zej                            de          d             Zd Zej                            d          ej        j        ej                            de          d                                     Zej                            d          ej                            d          ej                            d	          d                                     Zd Zddej                            d          gZe                    ej                             d                     d e!            fddgZ"ej                            de          ej                            de"          ej        j        d                                      Z#d! Z$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                            d,e)          d-             Z*ej        j+        d.             Z,dS )/TestNumericalInverseHermitec                   &    e Zd Zd Zd Zd Zd ZdS )!TestNumericalInverseHermite.dist0c                 V    ddt          j        dt           j        z  |z            z   z  S )NrN  r   r   r  r"   s     r%   r&   z%TestNumericalInverseHermite.dist0.pdf  s&    RVBruHQJ///00r'   c                 d    t           j        t          j        dt           j        z  |z            z  S )Nr   r  r"   s     r%   r)   z&TestNumericalInverseHermite.dist0.dpdf  s#    525
++++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  s@    BE1q5))BF2be8A:,>,>>2be8LLr'   c                     dS r3  r2   r5  s    r%   r   z)TestNumericalInverseHermite.dist0.support  r6  r'   Nr7  r2   r'   r%   r8  rm    sS        	1 	1 	1	, 	, 	,	M 	M 	M	 	 	 	 	r'   r8  c                   &    e Zd Zd Zd Zd Zd ZdS )!TestNumericalInverseHermite.dist1c                     |dk    r4t          j        dt           j        z  |z            dz  t           j        z  S |dk     rdS |dk    r4t          j        dt           j        z  |z            dz  t           j        z  S d S )Nr   r   rN  r[   r  r"   s     r%   r&   z%TestNumericalInverseHermite.dist1.pdf	  sw    T		vrBEzQ.//#5==BrSvrBEzQ.//#5== r'   c                 &   |dk    r>t          j        dt           j        z  |z            t           j        z  t           j        z  S |dk     rdS |dk    r>t          j        dt           j        z  |z            t           j        z  t           j        z  S d S )Nr   r   r[   rN  r   r  r    r"   s     r%   r)   z&TestNumericalInverseHermite.dist1.dpdf  s{    T		vrBEzQ.//"%7"%??BrSvrBEzQ.//"%7"%?? r'   c                     |dk    r*ddt          j        dt           j        z  |z            z
  z  S |dk     rdS |dk    r*ddt          j        dt           j        z  |z            z  z
  S d S )Nr         ?r`   r   r[   rN  r+  rv  r"   s     r%   r-   z%TestNumericalInverseHermite.dist1.cdf  ss    T		q262:*:#;#;;<<BsSdRVR"%Z1,<%=%==== r'   c                     dS )N)r4  rN  r2   r5  s    r%   r   z)TestNumericalInverseHermite.dist1.support!  s    7r'   Nr7  r2   r'   r%   rE  rs    sS        	> 	> 	>	@ 	@ 	@	> 	> 	>	 	 	 	 	r'   rE  r4  ra   r  r`   r   g      пg      ?g      ?r[  rI  r:   r   c                 L    t          ||d          }t          |||           d S )Nr_  )rI  rr   )r
   r   )r#   r3   r   rI  r}   s        r%   rd  z&TestNumericalInverseHermite.test_basic+  s0    
 &d%bIII3e,,,,,r'   rb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rx  )ri   r   r
   r   ry  s       r%   rz  z0TestNumericalInverseHermite.test_inf_nan_domains5  s    ]3c*** 	E 	E#N$4$4VDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Er{  c           	         h d}h d}||v rt          j        d           ||v rt          j        d           t          j                            d          } t          t          |          | }t          |          }|                    d          }t          j	        t          j
        |                    |          |                    |          z
            t          j
        |                    |                    z            }	t          j	        t          j
        |                    |                    |                    |z
                      }
|	dk     sJ |
dk     sJ d S )	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
   maxrP  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:  sA   BBB
@ @ @
 z!!K2333z!! LDEEEi##A&&'wuh''0%d++JJrNNrvdhhqkk#''!**455bfTXXa[[6I6IIJJrvdhhswwqzz22Q67788t||||u}}}}}}r'   zignore::RuntimeWarning)r  r  c                 2    |                      ||           d S r+   r  )r#   r  r  s      r%   r*  z6TestNumericalInverseHermite.test_basic_all_scipy_distsS  s      	''&99999r'   c                 2    |                      dd           d S )N	truncnorm)r   ra   r  r5  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            n# 1 swxY w Y   d}t          j        t          |          5  t          d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          t	                      d	           d d d            d S # 1 swxY w Y   d S )
Nz"`order` must be either 1, 3, or 5.rd   ra   rK  z`cdf` required but not foundr   z!could not convert string to floatekkir9  )ri   r   r   r
   r   )r#   re   s     r%   r   z1TestNumericalInverseHermite.test_input_validationa  s   5]:U333 	? 	?#N$4$4A>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? /]:U333 	, 	,#F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 4]:U333 	9 	9#N$4$4179 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s5   AAA0BBB4CC#&C#Nr   )   )r  )r   r      r  r}   r   c                 Z   t                      }t          |          }t          |          }|                    ||          }||j        |k    sJ |Vt          |          }|                    |          }t          j        	                    |          }	t          ||	           d S d S )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59((((%d++Dlll00G:>>'**DC&&&&&	 r'   c                     d}d}t          j        t          |          5  t          t	          j        |            d d d            n# 1 swxY w Y   t          t	          j        | d           d S )N)gdsz@g@e?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailrd   r  r9  )ri   r   r   r
   r   r  )r#   r  re   s      r%   test_inaccurate_CDFz/TestNumericalInverseHermite.test_inaccurate_CDF  s     :D \.666 	9 	9#EJ$7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	 
F 3$GGGGGGs   AAAc                     t                      }t          |          }t          j                    }t          |          }t	          |                    d          |                    d                     d S )Nr   rt   )r   r
   r   r   r   ru   )r#   rE  fni1rX  fni2s        r%   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sd      &u--
&u--a00$(((2J2JKKKKKr'   r[   r   r5  r   rN  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
                     |                    |          }t          j                            |          }d d d            n# 1 swxY w Y   t          ||d	d
           |j
        |j
        k    sJ d S )Nr  r9  r  r^  r  r  r  r  g&.>gLa㧝=r   )r   r
   r`  ra  r  r   r   r   r   r   r   r;  s          r%   r<  z$TestNumericalInverseHermite.test_ppf  sF   %d??? $&& 	) 	)1C#HcIo~NNN#HcO.C^TTT#HcFlNKKK#HcL.@.QQQ''!**Cz~~a((H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	XDu====yHN******r>  c                    t                      }t          |d          }|                                \  }}|dk     sJ ||k    sJ t          j                    5  t          j        dt                     t          |d          }d d d            n# 1 swxY w Y   |                                \  }}|dk     sJ ||k    sJ d S )NrB  r9  r^  r8  )r   r
   rC  r`  ra  rb  r   rD  s        r%   rG  z(TestNumericalInverseHermite.test_u_error  s'   %d???	35    i$&& 	D 	D!(N;;;)$UCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	35    is   ,BBB)-r/   r0   r1   r8  rE  r  r   r    r  r  r  ri   r"  r#  r  r$  rd  r  rz  r  r  re  r   r*  	fail_slowparallel_threads_limitr  r   rv   rw   rngsappendr   r  r   r  r  r  r   rL   rH   r   r<  rg  rG  r2   r'   r%   rk  rk    s       
       "       8 UWWeeggE qw<q!BE'"%-00
1CQ"%&&-
.C*C[] S__. .[Wq!f--[- -  .-. .- [/AAE E BAE  2 [ 899[[3X>>: : ?>  :9:
 [1[ 899[''**? ? +* :9 ?9 9 9 !RY**1--.DKK	%%a(()))EEGG_i)?@E[UD))[0%88[' '  98 *)'H H HL L L 	B&&&
RD	BF7BFBF+	 &#s	c3/<	A [S!$$+ + %$+  [         r'   rk  c            
       T   e Zd Zh dZd Zd Zd Ze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        	                    de          d             Ze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        	                    de          d             ZdS )TestDiscreteGuideTable>   r  r  r  c                     g d}t           j                                        }t          j        t
                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )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      __y$$&&\.)) 	F 	Fr1EEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F   AA #A c                     g d}t           j                                        }t          j        t
                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )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                                        }t          j        t
                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )Nr  r4  r  r  r  s      r%   )test_negative_guide_factor_raises_warningz@TestDiscreteGuideTable.test_negative_guide_factor_raises_warning  s     __y$$&&\.)) 	G 	Gr2FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gr  r  c                    || j         v rd}t          j        |           t          |t                    s|}nt          t          |          } || }|                                }t          j	        |d         |d         z
            st          j        d           t          j
        |d         |d         dz             }|                    |          }|                    d          }t          |d          }	t          |	||           d S )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%   rd  z!TestDiscreteGuideTable.test_basic  s   t,,,:CK(C(( 	,DD5(++DtV}{6!9vay011 	@ K>???IfQi1--XXa[[

4   B777CU+++++r'   r   r`   r5  r   rN  r   r\   r]   r  r   c                 f   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                     |                    |          }t           j                            |||          }d d d            n# 1 swxY w Y   t          |j	        |j	                   t          ||           d S )
N)r   r   r_  rt   r  r^  r  r  r  r  )
r   r   r   r`  ra  r  r   r   r   r   )	r#   r   npr3   r}   rk   r  r  s	            r%   r<  zTestDiscreteGuideTable.test_ppf  sQ   1{1a   B777 $&& 	0 	01C#HcIo~NNN#HcO.C^TTT#HcFlNKKK#HcL.@.QQQ''!**C{q!Q//H	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	SY///S(#####s   B1C<<D D r  c                     t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S r  )ri   r   r   r   r  s      r%   r  z"TestDiscreteGuideTable.test_bad_pv#  s    ]:S111 	# 	#r"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  rf   c                     t          j        t          d          5  t          t	          j        dd          |           d d d            d S # 1 swxY w Y   d S r  )ri   r   r   r   r   r   r  s     r%   r  z&TestDiscreteGuideTable.test_inf_domain-  s    ]:->??? 	D 	Du{2s33FCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dr  N)r/   r0   r1   r  r  r  r  ri   r"  r#  r   rd  r   r   rL   rH   r   r<  r  r  r  r  r2   r'   r%   r  r    s         F F FF F FG G G [/>>, , ?>,6 	Aqe$$$
RD	BF7BFBF+	 &#s	c3/<	A [S!$$$ $ %$$$ [Y66# # 76# F7BF#bfbf%5"&7Ibf+|-J [Xz22D D 32D D 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                            d eee	                    e
j        j        d                         Ze
j                            de          d             Zd	 Zd
S )TestSimpleRatioUniformsc                        e Zd Zd Zd Zd ZdS )TestSimpleRatioUniforms.distc                 "    || _         || _        d S r+   )rJ  r7   rK  s     r%   r   z%TestSimpleRatioUniforms.dist.__init__8  s    DJDIIIr'   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S rM  rO  rQ  s      r%   r&   z TestSimpleRatioUniforms.dist.pdf<  rS  r'   c                 H    || j         z  }|dk    rdd|z
  z  S ddd|z   z  z
  S rV  rI  r"   s     r%   r-   z TestSimpleRatioUniforms.dist.cdfA  rW  r'   N)r/   r0   r1   r   r&   r-   r2   r'   r%   r3   r  7  sA        	 	 		 	 	
	+ 	+ 	+ 	+ 	+r'   r3   r[   rY  r[  c                     t          ||j        d          }t          |||           t          ||j        |                    |j                  d          }t          |||           d S )Nr_  )r7   rr   )r7   cdf_at_moderr   )r   r7   r   r-   rc  s       r%   rd  z"TestSimpleRatioUniforms.test_basicO  st     "$TYRHHH3e,,,!$TY.2hhty.A.A/13 3 3 	3e,,,,,r'   rb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rx  )ri   r   r   r   ry  s       r%   rz  z,TestSimpleRatioUniforms.test_inf_nan_domains\  s    ]3c*** 	A 	A 0 0@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ar{  c                     t          j        t          d          5  t          t	                      dd           d d d            d S # 1 swxY w Y   d S )Nz`pdf_area` must be > 0rd   r   r4  )r7   pdf_area)ri   r   r   r   r   r5  s    r%   r  z%TestSimpleRatioUniforms.test_bad_argsa  s    ]:-FGGG 	G 	G 0 0q2FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   AAAN)r/   r0   r1   r3   r  r   rH   r  r  r  ri   r"  r#  r  r$  rd  r  rz  r  r2   r'   r%   r  r  3  s       + + + + + + + +" T"XXttF||$E rv,C26
C*C[] S__. .[- - . .- [/AAA A BAAG G G G Gr'   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestRatioUniformsc           	      h   t           j        j        }t          j         |t          j        d                              t          j        d          z  }t          j         |d                    }t          ||| |d          }t          t          j        |                    d          d          d         dk    d	           t          d
 dddt          j	        d          z  d          }t          t          j        |                    d          d          d         dk    d	           d S )Nra   r   i90  umaxvminvmaxrr   i	  r   r`   rx  Tc                 ,    t          j        |            S r+   rX  r=   s    r%   r>   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>r  s    bfaRjj r'   r4  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    JNGAAbgajjMM""RWQZZ/GAAaDDMMAAQBQUKKKU\#''$--88;dBDIII 00q!"26"::EK K KU\#''$--99!<tCTJJJJJr'   c                    t           j        j        }t          j         |t          j        d                              t          j        d          z  }t          j         |d                    }t          ||| |d          }t          ||| |d          }t          ||| |d          }|                    d          |                    d          |                    d          }	}}t          ||           t          ||	                                           t          |j	        d           t          |	j	        d           t          ||| |d          }
t          ||| |d          }|
                    d	
          |                    d
          }}t          |                                |           t          |j	        d	           t          ||| |d          }t          ||| |d          }t          ||| |d          }|                                |                    d          |                    d          }}}t          ||           t          ||           d S )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  s3   JNGAAbgajjMM""RWQZZ/GAAaDDMMQQaRadKKKQQaRadKKKQQaRadKKKXXa[[$((4..$((62B2BBRR&&&RXt$$$RXv&&&QQaRabIIIQQaRabIIIy))4888+<+<BRZZ\\2&&&RXy)))QQaRadKKKQQaRadKKKQQaRadKKKXXZZ!dhhtnnBRRr'   c                    t           j        j        }t          j         |t          j        d                              t          j        d          z  }t          j         |d                    }t          ||| |d          }|                    d          }t          j                            d          }t          ||| ||          }|                    d          }t          ||           d S )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    JNGAAbgajjMM""RWQZZ/wqqtt}}QTNNNXXb\\i##D))QTMMMXXb\\Rr'   c                 2   t           j        j        }t          t          d          5  t          |ddd           d d d            n# 1 swxY w Y   t          t          d          5  t          |ddd           d d d            n# 1 swxY w Y   t          t          d          5  t          |ddd           d d d            n# 1 swxY w Y   t          t          d          5  t          |ddd           d d d            d S # 1 swxY w Y   d S )	Nzvmin must be smaller than vmaxrd   r`   r:   )r&   r  r  r  zumax must be positiver4  r   )r   r   r&   assert_raisesr   r   )r#   r  s     r%   test_exceptionsz!TestRatioUniforms.test_exceptions  s   JN:-MNNN 	9 	9aaaa8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9:-MNNN 	9 	9aaaa8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 :-DEEE 	: 	:abqq9999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	::-DEEE 	9 	9aaaa8888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9sG   AAA)B		BB*C

CC+DDDN)r/   r0   r1   r  r  r   r  r2   r'   r%   r  r  g  sS        K K K  8	 	 	9 9 9 9 9r'   r  )r   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  rf  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  rk  r  r  r  r2   r'   r%   <module>r     s                



       7 7 7 7 7 7 7 7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 + * * * * *             1 1 1 1 1 1 1 1 < < < < < < < < / / / / / /	 	 	 	 	 	 	 	 #V^^-=-=$>?&"3"3"345F$5$5$567!FNN,<,<#=>)9)9 :;^^%5%5qAAB v%%&33@HH/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	  [*+[*+ {,-fbf{$45	vgw&67frvg%56	vgrv
$:;fbfz#9:	 [*45fbfz#9: +$'88$%& & );77( ( 87& &( );77/ / 87/8	 	 	.# .# .#b );77/ / 87/  "2 "2 "2 3 3	+ 	+3 3	+/ / /*
 
 
 
    D D D  $C $C $C D D8 8D D8 $=$@$B C CY9 Y9 Y9 Y9 Y9 Y9 Y9C CY9x{. {. {. {. {. {. {. {.|r' r' r' r' r' r' r' r'j~2 ~2 ~2 ~2 ~2 ~2 ~2 ~2BW  W  W  W  W  W  W  W tdD dD dD dD dD dD dD dDN1G 1G 1G 1G 1G 1G 1G 1GhA9 A9 A9 A9 A9 A9 A9 A9 A9 A9r'   