
    _Mh              	          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     _/var/www/html/test/jupyter/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   r3   )rh   r   ri   r   rvsr   randomseedRandomStateMT19937	Generator)
rm   rn   ro   rw   rng1rng2rvs1rvs2seed1seed2s
             r&   test_random_stater      s   U^V,,F D6..F.....D6..F.....D#... INN36FD88C==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   rs   rt   )r   r   set_random_stater   ru   )r{   r|   rngr}   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   ru   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   ru   )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   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   r   ra   rt   num      $@      @)locscaler<   r]   )r   normr   rv   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   )
ru   meanvarr   isfiniter   	vectorizer.   r   pvalue)r   r4   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   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          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   rw   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   rv   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   rv   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parametrizer  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                    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(   r6  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&   dist1r8    sA        	, 	, 	,	8 	8 	8	, 	, 	, 	, 	,r(   rC  c                   &    e Zd Zd Zd Zd Zd ZdS )%TestTransformedDensityRejection.dist2c                     || _         d S r,   shiftr$   rH  s     r&   r   z.TestTransformedDensityRejection.dist2.__init__  s    DJJJr(   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S Nr         ?rH  absr$   r%   ys      r&   r'   z)TestTransformedDensityRejection.dist2.pdf  /    OAc!ffrk"A7Q;r(   c                 f    || j         z  }dt          |          dz   z  }||z  |z  }|dk     r|n| S )Nr   r\   rM  rO  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\   rL  r   rG  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&   dist2rE    sP        	 	 		 	 	
	) 	) 	)	+ 	+ 	+ 	+ 	+r(   rV  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*   r   )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   re            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>.distNrf  r3   r(   r&   r4   rn    rg  r(   r4   c                     | S r,   r3   r>   s    r&   r?   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r(   re   ra   r<   r   ri  )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)r2  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   rw  rj   r   r   r   r   r$   rw  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   ry  )ra   ra   ra   ra   ra   ra   z:33 : starting points not strictly monotonically increasingra  r<   z!50 : starting point out of domain)r;   )rg   rw  )
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  rz  )r$   r  rl   s      r&   
test_bad_cz*TestTransformedDensityRejection.test_bad_cI  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   rL  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_hatS  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>.distNrf  r3   r(   r&   r4   r  i  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>r  s    AacE r(   Nr0   r1   r2   r'   r3   r(   r&   r4   z;TestTransformedDensityRejection.test_bad_dist.<locals>.distq  s        !/CCCr(   z`dpdf` required but not found.)rj   r   r   r   )r$   r4   rl   s      r&   test_bad_distz-TestTransformedDensityRejection.test_bad_distg  s_   	 	 	 	 	 	 	 	 /]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	" 	" 	" 	" 	" 	" 	" 	" 0]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   AAA<BB BN)#r0   r1   r2   r6  rC  rV  distsmv0mv1r   rI   mv2mv3mvsrj   r!  r"  zipr_  r   bad_pdfsbad_pdfs_commonrk  bad_dpdf_commonrq  inf_nan_domainsru  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\  r   )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>.distNrf  r3   r(   r&   r4   r    rg  r(   r4   re   rp  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   r   r   r   )weightsrb   )
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 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   rL  r2  )
urn_factor)rj   r   r   r   r3  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\  r   )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  y  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  r/  r(   c                     dS r1  r3   r3  s    r&   r   z,TestNumericalInversePolynomial.dist0.support  r4  r(   Nr0   r1   r2   r'   r.   r   r3   r(   r&   r6  r    sA        	! 	! 	!	, 	, 	,	 	 	 	 	r(   r6  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:  rA  r#   s     r&   r.   z(TestNumericalInversePolynomial.dist1.cdf  r=  r(   N)r0   r1   r2   r'   r.   r3   r(   r&   rC  r    s2        	, 	, 	,	, 	, 	, 	, 	,r(   rC  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 r1  r3   r3  s    r&   r   z,TestNumericalInversePolynomial.dist2.support  r4  r(   Nr  r3   r(   r&   rV  r    sA        	9 	9 	9	  	  	 
	 	 	 	 	r(   rV  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   rL  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   r3  s    r&   r   z,TestNumericalInversePolynomial.dist3.support   r4  r(   Nr  r3   r(   r&   dist3r    sG        	A 	A 	A	F 	F 	F	 	 	 	 	r(   r  r\   rX  r?  gܿUUUUUU?gQ?rb   g @rY  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\  r   )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_dists2  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=rb  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>.distNrf  r3   r(   r&   r4   r'  V  rg  r(   r4   re   r   r   r   )r'   rj   r   r
   rj  s        r&   rk  z+TestNumericalInversePolynomial.test_bad_pdfT  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>.distNrf  r3   r(   r&   r4   r+  ^  rg  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 rs  )rj   r   r
   r   rt  s       r&   ru  z3TestNumericalInversePolynomial.test_inf_nan_domainsf  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rv  r   ra   '  r   rL  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_ppfz  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 r1  )
r   r
   r   r]  r   r.   r   r   r   r   )r$   r%   r4   r   r^  r  r  s          r&   test_cdfz'TestNumericalInversePolynomial.test_cdf  r7  r8  c                    t                      }t          |d          }|                                \  }}|dk     sJ ||k    sJ t          |d          }|                                \  }}|dk     sJ ||k    sJ d S Ng|=r3  r2  )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   rB  )r   rj   r   r   r
   )r$   rB  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r4  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   r3  )rj   r   r   r
   r   )r$   r4  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,   rA  r#   s     r&   r.   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zq)))r(   N)r0   r1   r2   r.   r3   r(   r&   BadDistrJ    #        * * * * *r(   rL  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   rO    rM  r(   r   z!Exact CDF required but not found.)rj   r   r   r
   r   r=  )r$   rL  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>.MyDistNrf  r3   r(   r&   MyDistrT    rg  r(   rU  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 rW  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$   rU  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   r6  rC  rV  r  r  r  r  r   r!   r  r  r  rj   r!  r"  r  r_  xslowr   r$  r  rk  bad_logpdfs_commonr-  r  ru  r   rM   rI   r   r6  r%   r:  slowr@  
bad_ordersbad_u_resolutionrE  rG  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            
       j   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          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           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 )NrL  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 r1  r3   r3  s    r&   r   z)TestNumericalInverseHermite.dist0.support  r4  r(   Nr5  r3   r(   r&   r6  rf    sS        	1 	1 	1	, 	, 	,	M 	M 	M	 	 	 	 	r(   r6  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   rL  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\   rL  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\   rL  r)  ro  r#   s     r&   r.   z%TestNumericalInverseHermite.dist1.cdf  ss    T		q262:*:#;#;;<<BsSdRVR"%Z1,<%=%==== r(   c                     dS )N)r2  rL  r3   r3  s    r&   r   z)TestNumericalInverseHermite.dist1.support  s    7r(   Nr5  r3   r(   r&   rC  rl    sS        	> 	> 	>	@ 	@ 	@	> 	> 	>	 	 	 	 	r(   rC  r2  rb   r  ra   r   g      пg      ?g      ?rY  rB  r;   r   c                 L    t          ||d          }t          |||           d S )Nr\  )rB  rs   )r   r   )r$   r4   r   rB  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 rs  )rj   r   r   r   rt  s       r&   ru  z0TestNumericalInverseHermite.test_inf_nan_domains2  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rv  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   rv   rw   rh   r   r   randmaxrN  r   r.   )
r$   r  shapes
slow_distsr"  r4   fnir%   p_tolu_tols
             r&   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_dists7  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_distsP  s      	''&99999r(   c                 2    |                      dd           d S )N	truncnorm)r   rb   r  r3  s    r&   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155X  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   rD  z`cdf` required but not foundr   z!could not convert string to floatekkir3  )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   ru   r   r   r  r   r   r   r   )
r$   r   r  r  r4   r  r|   ru   r  r~   s
             r&   test_RVSz$TestNumericalInverseHermite.test_RVSo  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~  r3  )rj   r   r   r   r   rx  )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   r   )r   r   r   r   r   ru   )r$   rC  fni1rV  fni2s        r&   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sd      &u--
&u--a00$(((2J2JKKKKKr(   r\   r   r/  r   rL  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  r3  r  r  r  r  g&.>gLa㧝=r   )
r   r   r   r]  r   r   r   r   r   r   r5  s          r&   r6  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******r8  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&   r@  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   r6  rC  r  r   r!   r  r  r  rj   r!  r"  r  r_  r  ru  r  filterwarningsr^  r   r$  	fail_slowr  r   rv   rx   rngsappendr   r  r  r  r  r  r   rM   rI   r   r6  r`  r@  r3   r(   r&   rd  rd    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(   rd  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   rv   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  r2  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\  r   )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   r/  r   rL  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\  r   r  r  r  r  )	r   r   r	   r   r]  r   r   r   r   )	r$   r   npr4   r   r^  r  r  s	            r&   r6  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   r6  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                   *   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	                    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,   )rH  r8   rI  s     r&   r   z%TestSimpleRatioUniforms.dist.__init__6  s    DJDIIIr(   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S rK  rM  rO  s      r&   r'   z TestSimpleRatioUniforms.dist.pdf:  rQ  r(   c                 H    || j         z  }|dk    rdd|z
  z  S ddd|z   z  z
  S rT  rG  r#   s     r&   r.   z TestSimpleRatioUniforms.dist.cdf?  rU  r(   N)r0   r1   r2   r   r'   r.   r3   r(   r&   r4   r  5  sA        	 	 		 	 	
	+ 	+ 	+ 	+ 	+r(   r4   r\   rW  rY  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_basicM  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 rs  )rj   r   r   r   rt  s       r&   ru  z,TestSimpleRatioUniforms.test_inf_nan_domainsY  s    ]3c*** 	A 	A 0 0@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Arv  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   r2  )r8   pdf_area)rj   r   r   r   r   r3  s    r&   r  z%TestSimpleRatioUniforms.test_bad_args^  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  ru  r  r3   r(   r&   r  r  1  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   rq  Tc                 ,    t          j        |            S r,   rQ  r>   s    r&   r?   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>o  s    bfaRjj r(   r2  r  expon)
r   r   r'   r   r    r   r   kstestru   r"   )r$   fvr   r   s        r&   test_rv_generationz$TestRatioUniforms.test_rv_generatione  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   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_shapes  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'   r   r    r   ru   rv   rw   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\\
	tQT;;;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 positiver2  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  d  sS        K K K  8	 	 	9 9 9 9 9r(   r  )r   r   )r   r   )Lr   r   rj   copyr   r  r  rX  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  rd  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X9 X9 X9 X9 X9 X9 X9C CX9v{. {. {. {. {. {. {. {.|r' r' r' r' r' r' r' r'j2 2 2 2 2 2 2 2DU  U  U  U  U  U  U  U pfD fD fD fD fD fD fD fDR0G 0G 0G 0G 0G 0G 0G 0GfA9 A9 A9 A9 A9 A9 A9 A9 A9 A9r(   