
    Yh              	          d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlZ	d dl
mZmZmZ d dlmZmZmZmZmZmZmZ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suppress_warnings)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     q/var/www/tools.fuzzalab.pt/emblema-extractor/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   )r4   modepypy)      
   z.unsupported operand type for float\(\): 'list'z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?   B       r r(   c                     t           S r,   foor>   s    r&   r?   r?   D       s r(   name 'foo' is not definedc                     t           j        S r,   r   infr>   s    r&   r?   r?   F       rv r(   c                     t           j        S r,   r   nanr>   s    r&   r?   r?   H   rJ   r(   c                      dS Nr   r3   r3   r(   r&   r?   r?   J       S r(   ,takes 0 positional arguments but 1 was givenc                     t           j        S r,   rH   r>   s    r&   r?   r?   Q   rJ   r(   c                     t           j        S r,   rL   r>   s    r&   r?   r?   S   rJ   r(   c                     g S r,   r3   r>   s    r&   r?   r?   U   rA   r(   c                     t           S r,   rC   r>   s    r&   r?   r?   W   rE   r(   c                      dS rO   r3   r3   r(   r&   r?   r?   Y   rP   r(   c                     g S r,   r3   r>   s    r&   r?   r?   `   rA   r(   c                     t           S r,   rC   r>   s    r&   r?   r?   b   rE   r(   c                     t           j        S r,   rH   r>   s    r&   r?   r?   d   rJ   r(   c                     t           j        S r,   rL   r>   s    r&   r?   r?   f   rJ   r(   c                      dS rO   r3   r3   r(   r&   r?   r?   h   rP   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)      r;   zmust be a length 2 tupler3   )rb   ra   zleft >= right)ra   ra   )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domainr3   )getattrr   samplingpytestr   )rg   errmsgmethodkwargsMethods         r&   test_bad_domainrp      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   rs   r3   )rh   r   ri   r   rvsr   randomRandomStateseedMT19937	Generator)rm   rn   ro   ry   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 )Nrr   ru   rt   )r   r   set_random_stater   rv   )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 Nra   r3   r#   s     r&   r*   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    1r(   N)r0   r1   r2   r   r'   r*   r3   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)NrD   r<   rt      rg   rs   順 r   r   r   rv   r   argsr4   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   rb   r   r   r   r   r   r   s      r&   func2z'test_threading_behaviour.<locals>.func2   s    |E"")$y78: : :	'GGFOOOOO 	' 	' 	'VAYF6NNNNNNN	'r   )targetr   rD   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 )Nrs   rr   rt   r3   )rh   r   ri   pickledumpsloadsr   rv   )rm   rn   ro   r|   objr}   s         r&   test_pickler      s{    U^V,,F6--F-----D
,t

C<D#.....r(   size)Nr   )r   ra   )r<   r;   )rb   r;         )r   r   )r   ra   c                    t          t                                }| +t          j        |                    |                     sJ d S t          j        |           r| f} |                    |           j        | k    sJ d S r,   )r   r   r   isscalarrv   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   ru   ra   rt   num      $@      @)locscaler<   r]   )r   normr   rw   default_rngr   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r4   urngr~   urg   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   ra   rtolatoli  r   )
rv   meanvarr   isfiniter   	vectorizer.   r   pvalue)r~   r4   mv_exr   r   rv   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   )rv   r   r   r   sumr   
zeros_likeuniquer   r   r   )r~   r   r   r   r   rv   r   	obs_freqs_freqsr   s              r&   r   r   6  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 distributionre   r   r;   r   )centerrg   rg   )rj   warnsRuntimeWarningr
   r   )rl   s    r&   !test_warning_center_not_in_domainr   F  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rm   )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 domainre   r   r   )r8   rg   )rh   r   ri   rj   r   r   r   )rm   ro   rl   s      r&   test_error_mode_not_in_domainr   P  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        j        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...re   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r;   rb   dr   )
rj   r   r   rh   r   ri   r   qrvsqmcHalton)r$   rm   rf   ro   gens        r&   test_input_validationzTestQRVS.test_input_validationa  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Nra   r   ry   r;   )ra   ra   )r   r   )r   r   )rb   r   r   )r;   r;   qrngsize_in, size_outzd_in, d_outc                 @   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   re   r   ra   r   r   r   -q=r   )sysplatformarchitecturerj   xfailr   rh   r   ri   r   r   r   r   r   r   rw   r   prodr   r   reshaper   )r$   r   size_insize_outd_ind_outrm   w32r4   ro   r   rf   shape_expectedqrng2r   uniformqrvs2s                    r&   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistencyw  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   rh   r   ri   r   r   rw   r   r
  r   r   r   ranger  r   )r$   rm   r4   ro   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(   )r0   r1   r2   r   r   r   Sobolr   qrngstuplesizesdsrj   markparametrizethread_unsafer  r  r3   r(   r&   r   r   ^  s       : : : 59??11?--uy/?/?/?/J/JKEEEGG_i+-E /Auuww<	3B[VU++[0%88[]B//[ 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        j        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      ?ra   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                     dS N)ra   r3   r$   s    r&   r   z-TestTransformedDensityRejection.dist0.support      5r(   Nr0   r1   r2   r'   r*   r.   r   r3   r(   r&   dist0r'    sP        	! 	! 	!	  	  	 	, 	, 	,	 	 	 	 	r(   r7  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/   r3   r(   r&   dist1r9    sA        	, 	, 	,	8 	8 	8	, 	, 	, 	, 	,r(   rD  c                   &    e Zd Zd Zd Zd Zd ZdS )%TestTransformedDensityRejection.dist2c                     || _         d S r,   shiftr$   rI  s     r&   r   z.TestTransformedDensityRejection.dist2.__init__  s    DJJJr(   c                 P    || 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!ffrk"A7Q;r(   c                 f    || j         z  }dt          |          dz   z  }||z  |z  }|dk     r|n| S )Nr   r\   rN  rP  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\   rM  r   rH  r#   s     r&   r.   z)TestTransformedDensityRejection.dist2.cdf  7    OABwwb1f~%C26N**r(   N)r0   r1   r2   r   r'   r*   r.   r3   r(   r&   dist2rF    sP        	 	 		 	 	
	) 	) 	)	+ 	+ 	+ 	+ 	+r(   rW  r\        @?r@  dist, mv_exc                     t                      5 }|                    t                     t          |d          }d d d            n# 1 swxY w Y   t	          |||           d S N*   ru   )r   filterr   r   r   )r$   r4   r   supr~   s        r&   
test_basicz*TestTransformedDensityRejection.test_basic  s        	ECJJ~&&&-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   r3   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r0   r1   r2   r3   r(   r&   r4   rf            Dr(   r4   c                     dS r   r3   r>   s    r&   r?   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  s    a r(   re   r'   r*   rj   r   r   r$   r'   rk   rl   r4   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>.distNrg  r3   r(   r&   r4   ro    rh  r(   r4   c                     | S r,   r3   r>   s    r&   r?   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r(   re   ra   r<   r   rj  )r$   r*   rk   rl   r4   s        r&   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  s    	 	 	 	 	 	 	 	;	]3c*** 	> 	>'W====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   AAArc   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S Nre   r   )rj   r   r   r   r$   rg   rk   rl   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)r3  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.re   rx  rj   r   r   r   r   r$   rx  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.re   rz  )ra   ra   ra   ra   ra   ra   z:33 : starting points not strictly monotonically increasingrb  r<   z!50 : starting point out of domain)r;   )rg   rx  )
rj   r   r   r   r   r   r   r   rM   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.re   r  )r  r{  )r$   r  rl   s      r&   
test_bad_cz*TestTransformedDensityRejection.test_bad_cK  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   ra     r   rM  r]   r^   r-  r;   r   r   c                    t          t                      d          }t                      5 }|                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    |          }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 greater*invalid value encountered in greater_equal!invalid value encountered in less'invalid value encountered in less_equalr   h㈵>r   )r   r   r   r^  r   ppf_hatr   r   r   r   r   )r$   r   r~   r_  resexpecteds         r&   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hatU  s@    *.*:*:@FH H H    	)CJJ~'MNNNJJ~ (7 8 8 8JJ~'JKKKJJ~ (4 5 5 5++a..Cz~~a((H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	XDt<<<<yHN******s   B!CC C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>.distNrg  r3   r(   r&   r4   r  k  s        Cr(   r4   z`pdf` required but not found.re   c                       e Zd Zd ZdS )r  c                     d| | z  z
  S r   r3   r>   s    r&   r?   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>t  s    AacE r(   Nr0   r1   r2   r'   r3   r(   r&   r4   z;TestTransformedDensityRejection.test_bad_dist.<locals>.dists  s        !/CCCr(   z`dpdf` required but not found.)rj   r   r   r   )r$   r4   rl   s      r&   test_bad_distz-TestTransformedDensityRejection.test_bad_disti  s_   	 	 	 	 	 	 	 	 /]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	" 	" 	" 	" 	" 	" 	" 	" 0]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   AAA<BB BN)$r0   r1   r2   r7  rD  rW  distsmv0mv1r   rI   mv2mv3mvsrj   r!  r"  zipr#  r`  r   bad_pdfsbad_pdfs_commonrl  bad_dpdf_commonrr  inf_nan_domainsrv  r}  r  rM   r  r   r   r  r  r3   r(   r&   r%  r%    s              , , , , , , , ,+ + + + + + + +, UWWeegguuRyy%%--8E v,Ct*Crv,C26
CS#
C[] S__. .[- - . .- 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.ra   r   z$DAU only works with a finite domain.r   r]  ru   )basic_fail_distsrj   skip
isinstancestrrh   r   r   r   r   r   r   r   r   
r$   distnameparamsrl   r4   rg   kr   r   r~   s
             r&   r`  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,   rH   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>      26 r(   r_   c                     t           j        S r,   rL   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  r  r(   c                     dS )Nr\   r3   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  s    3 r(   r`   c                     t           S r,   rC   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  s    3 r(   rF   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                      dS rO   r3   r3   r(   r&   r?   zTestDiscreteAliasUrn.<lambda>  s     r(   rQ   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>.distNrg  r3   r(   r&   r4   r    rh  r(   r4   re   rq  r   )r   rj   r   r   )r$   r   rk   rl   r4   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   )r6   r5   r7   )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)dtyperr   ru   r   r   )weightsrb   )
r   asarrayfloat64r   rv   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 Nre   rj   r   r   r   r$   r   rl   s      r&   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s    ]:S111 	! 	!R   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   9= =r   rg   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 finitere   r<   r]   r   )rj   r   r   r   r   r   r$   rg   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.re   rM  r3  )
urn_factor)rj   r   r   r   r4  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,   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   re   r  )r$   rl   r4   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]  ru   )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)r0   r1   r2   r  rj   r!  r"  r   r`  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rI   
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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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-d.e
j        e
j        gZ&d/d e
j        e
j        gZ'ej                            d0e&          d1             Z(ej                            d2e'          d3             Z)d4 Z*d5 Z+d6S )7TestNumericalInversePolynomialc                        e Zd Zd Zd Zd ZdS )$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                     dS r2  r3   r4  s    r&   r   z,TestNumericalInversePolynomial.dist0.support  r5  r(   Nr0   r1   r2   r'   r.   r   r3   r(   r&   r7  r    sA        	! 	! 	!	, 	, 	,	 	 	 	 	r(   r7  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;  rB  r#   s     r&   r.   z(TestNumericalInversePolynomial.dist1.cdf  r>  r(   N)r0   r1   r2   r'   r.   r3   r(   r&   rD  r    s2        	, 	, 	,	, 	, 	, 	, 	,r(   rD  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皙??ra   rb   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  ra   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 r2  r3   r4  s    r&   r   z,TestNumericalInversePolynomial.dist2.support  r5  r(   Nr  r3   r(   r&   rW  r  	  sA        	9 	9 	9	  	  	 
	 	 	 	 	r(   rW  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  ra   rb   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   rM  g
ףp=
?rb   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   r3   r4  s    r&   r   z,TestNumericalInversePolynomial.dist3.support"  r5  r(   Nr  r3   r(   r&   dist3r    sG        	A 	A 	A	F 	F 	F	 	 	 	 	r(   r  r\   rY  r@  gܿUUUUUU?gQ?rb   g @rZ  c                 J    t          |d          }t          |||           d S r\  )r
   r   r$   r4   r   r~   s       r&   r`  z)TestNumericalInversePolynomial.test_basic.  s.     )B???3e,,,,,r(   r  c                    g d}g d}dg}||v rt          j        d|            ||v rt          j        d|            t          |t                    rt	          t
          |          n|} || }t                      5 }|                    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]  ru   )rj   r  r  r  rh   r   r   r^  r   r
   r   r   r   )	r$   r  r  very_slow_dists
fail_distsskip_sample_moment_checkr4   r_  r~   s	            r&   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists4  s   > > >- - -
 %6#6 &&K7X77888z!!K4(44555h,,x((( 	 tV}   	DCJJ~&&&,TCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D ///F3tyy{{DHHJJ&?@@@@@s   ,B99B= B=rc  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>.distNrg  r3   r(   r&   r4   r(  X  rh  r(   r4   re   r   r   r   )r'   rj   r   r
   rk  s        r&   rl  z+TestNumericalInversePolynomial.test_bad_pdfV  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>.distNrg  r3   r(   r&   r4   r,  `  rh  r(   r4   re   r   r   r   )logpdfrj   r   r
   )r$   r-  rk   rl   r4   s        r&   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdf^  s    	 	 	 	 	 	 	 	]3c*** 	< 	<&tQF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r)  rc   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rt  )rj   r   r
   r   ru  s       r&   rv  z3TestNumericalInversePolynomial.test_inf_nan_domainsh  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rw  r   ra   '  r   rM  r   r]   r^   r  r   c                    t                      }t          |d          }t                      5 }|                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    |          }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  gdy=r   )
r   r
   r   r^  r   r   r   r   r   r   r$   r   r4   r~   r_  r  r  s          r&   test_ppfz'TestNumericalInversePolynomial.test_ppf|  9   (EBBB    	)CJJ~'MNNNJJ~ (7 8 8 8JJ~'JKKKJJ~ (4 5 5 5''!**Cz~~a((H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	XE>>>>yHN******   B!CC"Cr  r<   r;   r   r%   c                    t                      }t          |d          }t                      5 }|                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    |          }t          j                            |          }d d d            n# 1 swxY w Y   t          ||dd           |j	        |j	        k    sJ d S r2  )
r   r
   r   r^  r   r.   r   r   r   r   )r$   r%   r4   r~   r_  r  r  s          r&   test_cdfz'TestNumericalInversePolynomial.test_cdf  r8  r9  c                    t                      }t          |d          }|                                \  }}|dk     sJ ||k    sJ t          |d          }|                                \  }}|dk     sJ ||k    sJ d S Ng|=r4  r3  )r   r
   u_error)r$   r4   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\].re   rC  )r   rj   r   r   r
   )r$   rC  r4   rl   s       r&   test_bad_ordersz.TestNumericalInversePolynomial.test_bad_orders  s    C]:S111 	: 	:&t59999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   AAAr5  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.re   r4  )rj   r   r   r
   r   )r$   r5  rl   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,   rB  r#   s     r&   r.   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zq)))r(   N)r0   r1   r2   r.   r3   r(   r&   BadDistrK    #        * * * * *r(   rM  z9Either of the methods `pdf` or `logpdf` must be specifiedre   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  r3   r(   r&   r   rP    rN  r(   r   z!Exact CDF required but not found.)rj   r   r   r
   r   r>  )r$   rM  r4   rl   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>.MyDistNrg  r3   r(   r&   MyDistrU    rh  r(   rV  c                 8    t          j        |  | z  dz            S Nrb   )mathr"   r>   s    r&   r?   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1!1 r(   c                     |  | z  dz  S rX  r3   r>   s    r&   r?   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    r!tAv r(   r  gwJ?rt   r   )r'   r
   r-  r   r   r   r   )r$   rV  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),r0   r1   r2   r7  rD  rW  r  r  r  r  r   r!   r  r  r  rj   r!  r"  r  r`  xslowr   r%  r  rl  bad_logpdfs_commonr.  r  rv  r   rM   rI   r   r7  r%   r;  slowrA  
bad_ordersbad_u_resolutionrF  rH  r  r^  r3   r(   r&   r  r    s<              , , , , , , , ,
 
 
 
 
 
 
 
"	 	 	 	 	 	 	 	 UWWeegguuww0E v,Ct*C;'"%("22
3C;)GBE1H,<<
=CS#
C[] S__. .- -. .- [[/::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          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 )NrM  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   ra   r  r  r#   s     r&   r.   z%TestNumericalInverseHermite.dist0.cdf  s@    BE1q5))BF2be8A:,>,>>2be8LLr(   c                     dS r2  r3   r4  s    r&   r   z)TestNumericalInverseHermite.dist0.support  r5  r(   Nr6  r3   r(   r&   r7  rg    sS        	1 	1 	1	, 	, 	,	M 	M 	M	 	 	 	 	r(   r7  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   rM  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\   rM  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         ?ra   r   r\   rM  r*  rp  r#   s     r&   r.   z%TestNumericalInverseHermite.dist1.cdf  ss    T		q262:*:#;#;;<<BsSdRVR"%Z1,<%=%==== r(   c                     dS )N)r3  rM  r3   r4  s    r&   r   z)TestNumericalInverseHermite.dist1.support!  s    7r(   Nr6  r3   r(   r&   rD  rm    sS        	> 	> 	>	@ 	@ 	@	> 	> 	>	 	 	 	 	r(   rD  r3  rb   r	  ra   r   g      пg      ?g      ?rZ  rC  r;   r   c                 L    t          ||d          }t          |||           d S )Nr]  )rC  rs   )r   r   )r$   r4   r   rC  r~   s        r&   r`  z&TestNumericalInverseHermite.test_basic+  s0    
 &d%bIII3e,,,,,r(   rc   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rt  )rj   r   r   r   ru  s       r&   rv  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rw  c           	         h d}h d}||v rt          j        d           ||v rt          j        d           t          j                            d            t          t          |          | }t          |          }t          j        	                    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  )rj   r  r	  r   rw   ry   rh   r   r   randmaxrO  r   r.   )
r$   r  shapes
slow_distsr#  r4   fnir%   p_tolu_tols
             r&   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_dists:  sD   BBB
@ @ @
 z!!K2333z!! LDEEE
	q'wuh''0%d++INN2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   rb   r  r4  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.re   rb   rE  z`cdf` required but not foundr   z!could not convert string to floatekkir4  )rj   r   r   r   r   )r$   rf   s     r&   r   z1TestNumericalInverseHermite.test_input_validation`  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   rs   r   )r   r   r   rv   r   r   r  r   r   r   r   )
r$   r~   r  r  r4   r  r}   rv   r  r   s
             r&   test_RVSz$TestNumericalInverseHermite.test_RVSr  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 tailre   r  r4  )rj   r   r   r   r   ry  )r$   r  rf   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   ru   )r   r   r   r   r   rv   )r$   rD  fni1rW  fni2s        r&   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sd      &u--
&u--a00$(((2J2JKKKKKr(   r\   r   r0  r   rM  r   r]   r^   r  r   c                    t                      }t          |d          }t                      5 }|                    t          d           |                    t          d           |                    t          d           |                    t          d           |                    |          }t          j                            |          }d d d            n# 1 swxY w Y   t          ||dd	           |j	        |j	        k    sJ d S )
Nr  r4  r  r  r  r  g&.>gLa㧝=r   )
r   r   r   r^  r   r   r   r   r   r   r6  s          r&   r7  z$TestNumericalInverseHermite.test_ppf  s9   %d???    	)CJJ~'MNNNJJ~ (7 8 8 8JJ~'JKKKJJ~ (4 5 5 5''!**Cz~~a((H	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	XDu====yHN******r9  c                    t                      }t          |d          }|                                \  }}|dk     sJ ||k    sJ t                      5 }|                    t
                     t          |d          }d d d            n# 1 swxY w Y   |                                \  }}|dk     sJ ||k    sJ d S r=  )r   r   r>  r   r^  r   )r$   r4   r~   r?  r@  r_  s         r&   rA  z(TestNumericalInverseHermite.test_u_error  s   %d???	35    i   	DCJJ~&&&)$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),r0   r1   r2   r7  rD  r  r   r!   r  r  r  rj   r!  r"  r  r#  r`  r  rv  r  filterwarningsr_  r   r%  	fail_slowr  r   rw   rx   rngsappendr   r  r  r  r  r  r   rM   rI   r   r7  ra  rA  r3   r(   r&   re  re    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(   re  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?r:   rs   guide_factorr   rw   r   rj   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  r3  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.ra   r   z$DGT only works with a finite domain.r   r]  ru   )r  rj   r  r  r  rh   r   r   r   r   r   r   r	   r   r  s
             r&   r`  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   ra   r0  r   rM  r   r]   r^   r  r   c                 @   d\  }}t          j        ||          }t          |d          }t                      5 }|                    t
          d           |                    t
          d           |                    t
          d           |                    t
          d           |                    |          }t           j                            |||          }d d d            n# 1 swxY w Y   t          |j        |j                   t          ||           d S )N)r   r   r]  ru   r  r  r  r  )	r   r   r	   r   r^  r   r   r   r   )	r$   r   npr4   r~   r_  r  r  s	            r&   r7  zTestDiscreteGuideTable.test_ppf  sF   1{1a   B777    		0CJJ~'MNNNJJ~ (7 8 8 8JJ~'JKKKJJ~ (4 5 5 5 ''!**C{q!Q//H		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 		0 	SY///S(#####s   B#C))C-0C-r  c                     t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S r  )rj   r   r   r	   r  s      r&   r  z"TestDiscreteGuideTable.test_bad_pv%  s    ]:S111 	# 	#r"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  rg   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  )rj   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)r0   r1   r2   r  r  r  r  rj   r!  r"  r   r`  r   r   rM   rI   r   r7  r  r  r  r  r3   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,   )rI  r8   rJ  s     r&   r   z%TestSimpleRatioUniforms.dist.__init__:  s    DJDIIIr(   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S rL  rN  rP  s      r&   r'   z TestSimpleRatioUniforms.dist.pdf>  rR  r(   c                 H    || 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.cdfC  rV  r(   N)r0   r1   r2   r   r'   r.   r3   r(   r&   r4   r  9  sA        	 	 		 	 	
	+ 	+ 	+ 	+ 	+r(   r4   r\   rX  rZ  c                     t          ||j        d          }t          |||           t          ||j        |                    |j                  d          }t          |||           d S )Nr]  )r8   rs   )r8   cdf_at_moders   )r   r8   r   r.   r  s       r&   r`  z"TestSimpleRatioUniforms.test_basicQ  st     "$TYRHHH3e,,,!$TY.2hhty.A.A/13 3 3 	3e,,,,,r(   rc   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rt  )rj   r   r   r   ru  s       r&   rv  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rw  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 > 0re   r   r3  )r8   pdf_area)rj   r   r   r   r   r4  s    r&   r  z%TestSimpleRatioUniforms.test_bad_argsc  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)r0   r1   r2   r4   r  r   rI   r  r  r  rj   r!  r"  r  r#  r`  r  rv  r  r3   r(   r&   r  r  5  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 )Nrb   r   i90  umaxvminvmaxrs   i	  r   ra   rr  Tc                 ,    t          j        |            S r,   rR  r>   s    r&   r?   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>t  s    bfaRjj r(   r3  r  expon)
r   r   r'   r   r    r   r   kstestrv   r"   )r$   fvr   r   s        r&   test_rv_generationz$TestRatioUniforms.test_rv_generationj  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 )Nrb   r     r  r;   r   )r;   ra   r   )r;   r;   r;   r     ra   r   )
r   r   r'   r   r    r   rv   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_shapex  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 )Nrb   r   r  r  r<   )
r   r   r'   r   r    r   rv   rw   rx   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 vmaxre   ra   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   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)r0   r1   r2   r  r  r   r  r3   r(   r&   r  r  i  sS        K K K  8	 	 	9 9 9 9 9r(   r  )r   r   )r   r   )Lr   r   rj   copyr   r  r  rY  numpyr   numpy.testingr   r   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  r`  rM   rI   r  r   bad_sized_domainsbad_domainsr  nan_domainsr!  r"  rp   r   r   r   r   r   r   r   r   r   r   r   r%  r  r  re  r  r  r  r3   r(   r&   <module>r     s                



      J J J J J J J J J J	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 + * * * * *             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 2DW  W  W  W  W  W  W  W tfD fD fD fD fD fD fD fDR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(   