
     hE              	          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 d dl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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	j/        d3gd4fd/d/gd5fgZ0d6e1d7fd8e1d7fgZ2d9ed:fd;ed:fgZ3d<ed:fe	j/        e	j/        fed:fe	j/         e	j/         fed:fe	j/        e	j/         fed:fe	j/         e	j.        fe1d=fe	j.        e	j/        fe1d=fgZ4d e	j.        fe1d=fe	j.        e	j.        fe1d=fgZ5ej6        7                    d>e3e2z   e5z             ej6        7                    d?e$          d@                         Z8ej6        7                    d?e$          dA             Z9dB Z:dC Z;ej6        7                    d?e$          dD             Z<ej6        7                    dEg dF          dG             Z=dH Z>dI Z?dJ Z@dK ZAej6        7                    dLg dM          dN             ZBej6        7                    dLddg           G dO dP                      ZC G dQ dR          ZD G dS dT          ZE G dU dV          ZF G dW dX          ZG G dY dZ          ZH G d[ d\          ZIdS )]    N)deepcopy)assert_allcloseassert_equalsuppress_warnings)NumpyVersion)TransformedDensityRejectionDiscreteAliasUrnDiscreteGuideTableNumericalInversePolynomialNumericalInverseHermiteSimpleRatioUniformsUNURANError)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/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/stats/tests/test_sampling.pypdfzStandardNormal.pdf    s4    "'"RU(###bfTAXaZ&8&888    c                     dt          j        dt           j        z            z  | z  t          j        d|z  |z            z  S r   r   r"   s     r%   dpdfzStandardNormal.dpdf$   s;    "'"RU(###qb(26$(1*+=+===r'   c                 *    t          j        |          S N)r   ndtrr"   s     r%   cdfzStandardNormal.cdf'   s    |Ar'   N__name__
__module____qualname__r&   r)   r-    r'   r%   r   r      sA        9 9 9> > >    r'   r   r   distr	   ){Gz?
ףp=
?皙?r
   r   r   r   )r3   modepypy)      
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                     |  S r+   r2   r$   s    r%   <lambda>r>   ?   s    r r'   z...c                     g S r+   r2   r=   s    r%   r>   r>   A       r r'   c                     t           S r+   foor=   s    r%   r>   r>   C       s r'   name 'foo' is not definedc                     t           j        S r+   r   infr=   s    r%   r>   r>   E       rv r'   c                     t           j        S r+   r   nanr=   s    r%   r>   r>   G   rI   r'   c                      dS Nr   r2   r2   r'   r%   r>   r>   I       S r'   ,takes 0 positional arguments but 1 was givenc                     t           j        S r+   rG   r=   s    r%   r>   r>   P   rI   r'   c                     t           j        S r+   rK   r=   s    r%   r>   r>   R   rI   r'   c                     g S r+   r2   r=   s    r%   r>   r>   T   r@   r'   c                     t           S r+   rB   r=   s    r%   r>   r>   V   rD   r'   c                      dS rN   r2   r2   r'   r%   r>   r>   X   rO   r'   c                     g S r+   r2   r=   s    r%   r>   r>   _   r@   r'   c                     t           S r+   rB   r=   s    r%   r>   r>   a   rD   r'   c                     t           j        S r+   rG   r=   s    r%   r>   r>   c   rI   r'   c                     t           j        S r+   rK   r=   s    r%   r>   r>   e   rI   r'   c                      dS rN   r2   r2   r'   r%   r>   r>   g   rO   r'   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r6   )must contain only finite / non-nan values(must contain at least one non-zero value)      r:   zmust be a length 2 tupler2   )ra   r`   zleft >= right)r`   r`   )r;   r;   zonly non-nan valuesdomain, err, msgzmethod, kwargsc                     t          t          j        |          }t          j        ||          5   |di |d| i d d d            d S # 1 swxY w Y   d S )Nmatchdomainr2   )getattrr   samplingpytestraises)rf   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   r2   )rg   r   rh   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 Nr`   r2   r"   s     r%   r)   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    1r'   N)r/   r0   r1   r   r&   r)   r2   r'   r%   Distributionr      sA        	# 	# 	#	 	 	
	 	 	 	 	r'   r   c                       d          } t          | dd          }	 |                    d           d S # t          $ r}|j        d         d<   Y d }~d S d }~ww xY w)NrC   r;   rt      rf   rs   順 r   r   r   ru   r   argsr3   r   er   errorss      r%   func1z'test_threading_behaviour.<locals>.func1   s    |E"")$y79; ; ;	'GGFOOOOO 	' 	' 	'VAYF6NNNNNNN	'   7 
AAAc                       d          } t          | dd          }	 |                    d           d S # t          $ r}|j        d         d<   Y d }~d S d }~ww xY w)Nbarr   ra   r   r   r   r   r   r   s      r%   func2z'test_threading_behaviour.<locals>.func2   s    |E"")$y78: : :	'GGFOOOOO 	' 	' 	'VAYF6NNNNNNN	'r   )targetr   rC   r   r   )	threadingThreadstartjoin)r   r   t1t2r   r   s       @@r%   test_threading_behaviourr      s    D))F
 
 
 
 
 
 
 
' ' ' ' ' '' ' ' ' ' ' 
		'	'	'B			'	'	'BHHJJJHHJJJGGIIIGGIII&>U""""&>U""""""r'   c                    t          t          j        |           } |di |ddi}t          j        |          }t          j        |          }t          |                    d          |                    d                     d S )Nrs   rr   rt   r2   )rg   r   rh   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   r`   )r;   r:   )ra   r:         )r   r   )r   r`   c                    t          t                                }| +t          j        |                    |                     sJ d S t          j        |           r| f} |                    |           j        | k    sJ d S r+   )r   r   r   isscalarru   shape)r   r   s     r%   test_rvs_sizer     s    
 &n&6&6
7
7C|{3774==)))))));t 	8Dwwt}}"d******r'   c                     t          j                    } t          j                            d          }t          | |          }t          j        ddd          }t          || |                                             t          | 	                    |          |	                    |                     t          j        dd          } t          | |          }t          || |                                             t          | 	                    |          |	                    |                     t          j
        d	d
          } t          | |          }|                                 }|                     t          j        |d         |d         dz                       }t          |||                                             d S )Nr   r   r`   rt   num      $@      @)locscaler;   r\   )r   normr   rv   default_rngr   linspacecheck_cont_samplesr   ppfbinomr	   supportpmfarangecheck_discr_samples)r3   urngr   urf   pvs         r%   test_with_scipy_distributionr     se   :<<D9  ##D
!$T
:
:
:C
Aqc"""AsD$**,,///DHHQKK,,,:#R(((D
!$T
:
:
:CsD$**,,///DHHQKK,,,;r3D
4d
3
3
3C\\^^F	")F1Ivay{33	4	4BR.....r'   c                    |                      d          }|                                |                                f}t          j        |d                   rt          ||dd           |                      d          }t          j        |j                  |_        t          ||j                  j	        }|dk    sJ d S )Nr   r`   gHz>皙?rtolatoli  )
ru   meanvarr   isfiniter   	vectorizer-   r   pvalue)r   r3   mv_exru   mvpvals         r%   r   r   (  s    
''&//C	SWWYY	B	{58 9E48888
''#,,C|DH%%DH#tx((/D#::::::r'   c                    |                      d          }|                                |                                f}t          ||dd           ||                                z  }t          j        |          }t          j        |d          \  }}||                                z  }||d |j        <   t          ||          j
        }|dk    sJ d S )Nr   MbP?r   r   T)return_counts)ru   r   r   r   sumr   
zeros_likeuniquer   r   r   )	r   r   r   ru   r   	obs_freqs_freqsr   s	            r%   r   r   5  s    
''&//C	SWWYY	BBDt4444	bffhhBb!!IyD111HAuEIIKKE"IkuzkY##*D#::::::r'   c                  N   d} t          j        t          |           5  t          t	                      dd           d d d            n# 1 swxY w Y   t          j        t          |           5  t          t	                      d           d d d            d S # 1 swxY w Y   d S )Nz.102 : center moved into domain of distributionrd   r   r:   r   )centerrf   rf   )ri   warnsRuntimeWarningr   r   )rl   s    r%   !test_warning_center_not_in_domainr   E  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 domainrd   r   r   )r7   rf   )rg   r   rh   ri   rj   r   r   )rm   ro   rl   s      r%   test_error_mode_not_in_domainr   O  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...rd   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r:   ra   dr   )
ri   rj   r   rg   r   rh   r   qrvsqmcHalton)r#   rm   re   ro   gens        r%   test_input_validationzTestQRVS.test_input_validation`  sw   8]:U333 	# 	#U^V44F&))**CHHH"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 00f^%%&&H]:U333 	: 	:HHqUY%5%5a%8%8H999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s$   AA22A69A65DDDNr`   r   rw   r:   )r`   )r`   )r   r   )r   r   )ra   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   rd   r   r`   r   r   r   -q=r   )sysplatformarchitectureri   xfailr   rg   r   rh   r   rj   r   r   r   r   rv   r   prodr   r   reshaper   )r#   r   size_insize_outd_ind_outrm   w32r3   ro   r   re   shape_expectedqrng2r   uniformqrvs2s                    r%   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistencyv  s   
 lg%O(*?*A*A!*D*O 	#6999L " # # # 00fTll  0TVt^^LEz777 ; ;DT:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;F <D,1VIE!E)xxWx>>:////ll277#3#3#8q99GJNN7++33NCCED%e444444 s   )CCCc                 N   t                      }t          t          j        |          } ||          }d}d}t          j                            |d          }t          j                            |d          }|                    t          j        |                    }	|	                    |||          }
t          j
                            |	          }t          |          D ]=}|
d|f         }|d d |f                             |          }t          ||d           >d S )	N)r:   r   r   r   r   r   .r  r  )r   rg   r   rh   r   r   rv   r   r  r   r   r   ranger  r   )r#   rm   r3   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'   )r/   r0   r1   r   r   r   Sobolr   qrngstuplesizesdsri   markparametrizer  r  r2   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      ?r`   r2   r"   s     r%   r&   z)TestTransformedDensityRejection.dist0.pdf      !AaC%= r'   c                     dd|z  z  S )Nr&  r2   r"   s     r%   r)   z*TestTransformedDensityRejection.dist0.dpdf  s    "Q$<r'   c                 $    d||dz  dz  z
  dz   z  S Nr&  r:   gUUUUUU?r2   r"   s     r%   r-   z)TestTransformedDensityRejection.dist0.cdf      !ad1f*s*++r'   c                     dS N)r`   r2   r#   s    r%   r   z-TestTransformedDensityRejection.dist0.support      5r'   Nr/   r0   r1   r&   r)   r-   r   r2   r'   r%   dist0r#    sP        	! 	! 	!	  	  	 	, 	, 	,	 	 	 	 	r'   r3  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   r8  r"   s     r%   r)   z*TestTransformedDensityRejection.dist1.dpdf  s%    29uzq3w7777r'   c                 F    t           j                            |dz            S r7  r   r   _cdfr"   s     r%   r-   z)TestTransformedDensityRejection.dist1.cdf  r:  r'   Nr.   r2   r'   r%   dist1r5    sA        	, 	, 	,	8 	8 	8	, 	, 	, 	, 	,r'   r@  c                   &    e Zd Zd Zd Zd Zd ZdS )%TestTransformedDensityRejection.dist2c                     || _         d S r+   shiftr#   rE  s     r%   r   z.TestTransformedDensityRejection.dist2.__init__  s    DJJJr'   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S Nr         ?rE  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[   rJ  rL  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[   rI  r   rD  r"   s     r%   r-   z)TestTransformedDensityRejection.dist2.cdf  7    OABwwb1f~%C26N**r'   N)r/   r0   r1   r   r&   r)   r-   r2   r'   r%   dist2rB    sP        	 	 		 	 	
	) 	) 	)	+ 	+ 	+ 	+ 	+r'   rS  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#   r3   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   r2   r=   s    r%   r>   z(TestTransformedDensityRejection.<lambda>   s    1 r'   50 : bad construction points.pdf, err, msgc                      G d d          }||_         d |_        t          j        ||          5  t	          |           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS ):TestTransformedDensityRejection.test_bad_pdf.<locals>.distNr/   r0   r1   r2   r'   r%   r3   rb            Dr'   r3   c                     dS r   r2   r=   s    r%   r>   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  s    a r'   rd   r&   r)   ri   rj   r   r#   r&   rk   rl   r3   s        r%   test_bad_pdfz,TestTransformedDensityRejection.test_bad_pdf  s    	 	 	 	 	 	 	 	K	]3c*** 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAzdpdf, err, msgc                      G d d          }d |_         ||_        t          j        ||          5  t	          |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS );TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNrc  r2   r'   r%   r3   rk    rd  r'   r3   c                     | S r+   r2   r=   s    r%   r>   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r'   rd   r`   r;   r   rf  )r#   r)   rk   rl   r3   s        r%   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  s    	 	 	 	 	 	 	 	;	]3c*** 	> 	>'W====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   AAArb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S Nrd   r   )ri   rj   r   r   r#   rf   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)r/  r   r   c                     t          j        t          d          5  t          t	                      |           d d d            d S # 1 swxY w Y   d S )Nz1`construction_points` must be a positive integer.rd   rt  ri   rj   r   r   r   r#   rt  s     r%   #test_bad_construction_points_scalarzCTestTransformedDensityRejection.test_bad_construction_points_scalar  s    ]: .D E E E 	 	'  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                    g }t          j        t          d          5  t          t	                      |           d d d            n# 1 swxY w Y   g d}t          j        t          d          5  t          t	                      |           d d d            n# 1 swxY w Y   t          j        t          j        t          j        g}t          j        t          d          5  t          t	                      |           d d d            n# 1 swxY w Y   ddg}t          j        t          d	          5  t          t	                      d
|           d d d            d S # 1 swxY w Y   d S )NzC`construction_points` must either be a scalar or a non-empty array.rd   rv  )r`   r`   r`   r`   r`   r`   z:33 : starting points not strictly monotonically increasingr^  r;   z!50 : starting point out of domain)r:   )rf   rt  )
ri   rj   r   r   r   r   r   r   rL   r   rx  s     r%   "test_bad_construction_points_arrayzBTestTransformedDensityRejection.test_bad_construction_points_array$  s    ]: .M N N N 	 	 (  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 100\. 1> ? ? ? 	 	 (  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  "vrvrv6]; /9 : : : 	 	'  6I   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  #Bi\. 1: ; ; ; 	 	'  $7   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sG   AAA2BB #B %DDD9E%%E),E)c      r   r   c                     d}t          j        t          |          5  t          t	                      d           d d d            d S # 1 swxY w Y   d S )Nz`c` must either be -0.5 or 0.rd   r  )r~  rw  )r#   r~  rl   s      r%   
test_bad_cz*TestTransformedDensityRejection.test_bad_cH  s    .]:S111 	A 	A'(8(8C@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A   A		AAr   r`   i  r   rI  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   rZ  r   ppf_hatr   r   r   r   r   )r#   r   r   r[  resexpecteds         r%   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hatR  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>.distNrc  r2   r'   r%   r3   r  h  s        Cr'   r3   z`pdf` required but not found.rd   c                       e Zd Zd ZdS )r  c                     d| | z  z
  S r   r2   r=   s    r%   r>   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>q  s    AacE r'   Nr/   r0   r1   r&   r2   r'   r%   r3   z;TestTransformedDensityRejection.test_bad_dist.<locals>.distp  s        !/CCCr'   z`dpdf` required but not found.)ri   rj   r   r   )r#   r3   rl   s      r%   test_bad_distz-TestTransformedDensityRejection.test_bad_distf  s_   	 	 	 	 	 	 	 	 /]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	" 	" 	" 	" 	" 	" 	" 	" 0]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   AAA<BB BN)#r/   r0   r1   r3  r@  rS  distsmv0mv1r   rH   mv2mv3mvsri   r  r  zipr\  r   bad_pdfsbad_pdfs_commonrh  bad_dpdf_commonrn  inf_nan_domainsrr  ry  r}  rL   r  r   r   r  r  r2   r'   r%   r!  r!    s              , , , , , , , ,+ + + + + + + +, UWWeegguuRyy%%--8E v,Ct*Crv,C26
CS#
C[] S__. .- -. .- 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            	       Z   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S )TestDiscreteAliasUrn>   randintnchypergeom_fishernchypergeom_walleniusdistname, paramsc                    || j         v rd}t          j        |           t          |t                    s|}nt          t          |          } || }|                                }t          j	        |d         |d         z
            st          j        d           t          j
        |d         |d         dz             }|                    |          }|                    d          }t          |d          }	t          |	||           d S )NzYDAU fails on these probably because of large domains and small computation errors in PMF.r`   r   z$DAU only works with a finite domain.r   rY  r   )basic_fail_distsri   skip
isinstancestrrg   r   r   r   r   r   r   r	   r   
r#   distnameparamsrl   r3   rf   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+   rG   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>      26 r'   r^   c                     t           j        S r+   rK   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  r  r'   c                     dS )Nr[   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    3 r'   r_   c                     t           S r+   rB   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    3 r'   rE   c                     g S r+   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    2 r'   z)setting an array element with a sequence.c                     |  S r+   r2   r=   s    r%   r>   zTestDiscreteAliasUrn.<lambda>  s    A2 r'   z50 : probability < 0c                      dS rN   r2   r2   r'   r%   r>   zTestDiscreteAliasUrn.<lambda>  s     r'   rP   zpmf, err, msgc                      G d d          }||_         t          j        ||          5  t          |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd ZdS )/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNrc  r2   r'   r%   r3   r    rd  r'   r3   rd   rm  r   )r   ri   rj   r	   )r#   r   rk   rl   r3   s        r%   test_bad_pmfz!TestDiscreteAliasUrn.test_bad_pmf  s    	 	 	 	 	 	 	 	]3c*** 	3 	3T'2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   A

AAr   )r5   r4   r6   )r   r   g      @      @r   g      @c                    t          j        |t           j                  }t          |d          }|                    d          }||                                z  }t          j        dt          |                    }t          j        ||          }t          j        ||z
  dz  |          }||f}t          |||           d S )N)dtyperr   r   r   r   )weightsra   )
r   asarrayfloat64r	   ru   r   r   lenaverager   )r#   r   r   ru   variates
m_expected
v_expectedmv_expecteds           r%   test_sampling_with_pvz*TestDiscreteAliasUrn.test_sampling_with_pv  s     Z"*---r444ggg"&&((]9QB((Z"555
ZJ!61 <bIII
 *,C[11111r'   pv, msgc                     t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S Nrd   ri   rj   r   r	   r#   r   rl   s      r%   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s    ]:S111 	! 	!R   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   9= =r   rf   c                     t          j        t          d          5  t          t	          j        dd          |           d d d            d S # 1 swxY w Y   d S Nzmust be finiterd   r;   r\   r   )ri   rj   r   r	   r   r   r#   rf   s     r%   test_inf_domainz$TestDiscreteAliasUrn.test_inf_domain  s    ]:->??? 	B 	BU[S11&AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B   %AAAc                     t          j        t          d          5  t          ddgd           d d d            d S # 1 swxY w Y   d S )Nzrelative urn size < 1.rd   rI  r/  )
urn_factor)ri   r   r   r	   r0  s    r%   test_bad_urn_factorz(TestDiscreteAliasUrn.test_bad_urn_factor  s    \.0IJJJ 	8 	8c3ZB7777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   =AAc                     d} G d d          }t          j        t          |          5  t          |           d d d            d S # 1 swxY w Y   d S )NzG`domain` must be provided when the probability vector is not available.c                       e Zd Zd ZdS )0TestDiscreteAliasUrn.test_bad_args.<locals>.distc                     |S r+   r2   r"   s     r%   r   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmf  s    r'   N)r/   r0   r1   r   r2   r'   r%   r3   r    s#            r'   r3   rd   r  )r#   rl   r3   s      r%   test_bad_argsz"TestDiscreteAliasUrn.test_bad_args  s    7	 	 	 	 	 	 	 	 ]:S111 	# 	#T"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   AAAN)r/   r0   r1   r  ri   r  r  r   r\  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rH   
inf_domainr  r  r  r2   r'   r%   r  r  x  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g dZg 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%d. Z&dd/d0e
j!        e
j         gZ'd1d"e
j!        e
j         gZ(ej                            d2e'          d3             Z)ej                            d4e(          d5             Z*d6 Z+d7 Z,d8S )9TestNumericalInversePolynomialc                        e Zd Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist0c                     dd||z  z
  z  S r%  r2   r"   s     r%   r&   z(TestNumericalInversePolynomial.dist0.pdf  r'  r'   c                 $    d||dz  dz  z
  dz   z  S r+  r2   r"   s     r%   r-   z(TestNumericalInversePolynomial.dist0.cdf  r,  r'   c                     dS r.  r2   r0  s    r%   r   z,TestNumericalInversePolynomial.dist0.support  r1  r'   Nr/   r0   r1   r&   r-   r   r2   r'   r%   r3  r    sA        	! 	! 	!	, 	, 	,	 	 	 	 	r'   r3  c                       e Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist1c                 F    t           j                            |dz            S r7  r8  r"   s     r%   r&   z(TestNumericalInversePolynomial.dist1.pdf  r:  r'   c                 F    t           j                            |dz            S r7  r>  r"   s     r%   r-   z(TestNumericalInversePolynomial.dist1.cdf  r:  r'   N)r/   r0   r1   r&   r-   r2   r'   r%   r@  r    s2        	, 	, 	,	, 	, 	, 	, 	,r'   r@  c                        e Zd Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist2c                 \    dddt          j        dt           j        z  |z            z   z  z   S )N皙??r`   ra   r   sinr    r"   s     r%   r&   z(TestNumericalInversePolynomial.dist2.pdf   s+    $!bfQruWQY&7&7"7888r'   c                     d|dz   z  dddt           j        z  d|z   z  z   t          j        dt           j        z  |z            z
  z  dt           j        z  z  z   S )Nr  r`   g?r   r   r  r   r    cosr"   s     r%   r-   z(TestNumericalInversePolynomial.dist2.cdf  sZ    !a%LbhA..25
1C1CCDX  r'   c                     dS r.  r2   r0  s    r%   r   z,TestNumericalInversePolynomial.dist2.support  r1  r'   Nr  r2   r'   r%   rS  r    sA        	9 	9 	9	  	  	 
	 	 	 	 	r'   rS  c                        e Zd Zd Zd Zd ZdS )$TestNumericalInversePolynomial.dist3c                 b    ddddt          j        dt           j        z  |z            z   z  z   z  S )Nr\   r  r  r`   ra   r  r"   s     r%   r&   z(TestNumericalInversePolynomial.dist3.pdf  s0    $RVAbeGAI->->)>!??@@r'   c                     |dz  dz   ddt           j        z  z  t          j        dt           j        z            t          j        dt           j        z  |z            z
  z  z   S )Nr   rI  g
ףp=
?ra   r;   r  r"   s     r%   r-   z(TestNumericalInversePolynomial.dist3.cdf  sZ    S53;qw26"RU(3C3C356!BE'!)3D3D4E "F F Fr'   c                     dS )N)r   r2   r0  s    r%   r   z,TestNumericalInversePolynomial.dist3.support  r1  r'   Nr  r2   r'   r%   dist3r    sG        	A 	A 	A	F 	F 	F	 	 	 	 	r'   r  r[   rU  r<  gܿUUUUUU?gQ?ra   g @rV  c                 J    t          |d          }t          |||           d S rX  )r   r   r#   r3   r   r   s       r%   r\  z)TestNumericalInversePolynomial.test_basic$  s.     )B???3e,,,,,r'   )studentized_range	trapezoidtriangvonmiseslevy_stablekappa4ksonekstwolevy_l
gausshyperanglit)	ncfparetochi2fatiguelifehalfgennormgibratlognormncx2tr  c                    || j         v rt          j        d|            || j        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   t          |||                                |                                g           d S )NzPINV too slow for zPINV fails for rY  r   )very_slow_distsri   r  
fail_distsr  r  rg   r   r   rZ  r   r   r   r   r   )r#   r  r  r3   r[  r   s         r%   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists3  sH    t+++K7X77888t&&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 	3tyy{{DHHJJ&?@@@@@s    ,B88B<?B<r_  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>.distNrc  r2   r'   r%   r3   r  E  rd  r'   r3   rd   r   r   r   )r&   ri   rj   r   rg  s        r%   rh  z+TestNumericalInversePolynomial.test_bad_pdfC  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>.distNrc  r2   r'   r%   r3   r!  M  rd  r'   r3   rd   r   r   r   )logpdfri   rj   r   )r#   r"  rk   rl   r3   s        r%   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdfK  s    	 	 	 	 	 	 	 	]3c*** 	< 	<&tQF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r  rb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rp  )ri   rj   r   r   rq  s       r%   rr  z3TestNumericalInversePolynomial.test_inf_nan_domainsU  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rs  r   r`   '  r   rI  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   rZ  r   r   r   r   r   r   r#   r   r3   r   r[  r  r  s          r%   test_ppfz'TestNumericalInversePolynomial.test_ppfi  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 r'  )
r   r   r   rZ  r   r-   r   r   r   r   )r#   r$   r3   r   r[  r  r  s          r%   test_cdfz'TestNumericalInversePolynomial.test_cdf  r-  r.  c                    t                      }t          |d          }|                                \  }}|dk     sJ ||k    sJ t          |d          }|                                \  }}|dk     sJ ||k    sJ d S Ng|=r)  r(  )r   r   u_error)r#   r3   r   	max_errormaes        r%   test_u_errorz+TestNumericalInversePolynomial.test_u_error  s    (EBBB	35    i(EBBB	35    ir'   g      @   g#B;orderc                     t                      }d}t          j        t          |          5  t	          ||           d d d            d S # 1 swxY w Y   d S )Nz2`order` must be an integer in the range \[3, 17\].rd   r8  )r   ri   rj   r   r   )r#   r8  r3   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r*  c                     d}t          j        t          |          5  t          t	                      |           d d d            d S # 1 swxY w Y   d S )Nz.`u_resolution` must be between 1e-15 and 1e-5.rd   r)  )ri   rj   r   r   r   )r#   r*  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+   r>  r"   s     r%   r-   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zq)))r'   N)r/   r0   r1   r-   r2   r'   r%   BadDistr@    #        * * * * *r'   rB  z9Either of the methods `pdf` or `logpdf` must be specifiedrd   z4`sample_size` must be greater than or equal to 1000.r;   c                       e Zd Zd ZdS )BTestNumericalInversePolynomial.test_bad_args.<locals>.Distributionc                 6    t          j        d|z  |z            S )Nr   )r   r!   r"   s     r%   r&   zFTestNumericalInversePolynomial.test_bad_args.<locals>.Distribution.pdf  s    vdQhqj)))r'   Nr  r2   r'   r%   r   rE    rC  r'   r   z!Exact CDF required but not found.)ri   rj   r   r   r   r3  )r#   rB  r3   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>.MyDistNrc  r2   r'   r%   MyDistrI    rd  r'   rJ  c                 8    t          j        |  | z  dz            S Nra   )mathr!   r=   s    r%   r>   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1!1 r'   c                     |  | z  dz  S rL  r2   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#   rJ  dist_pdfr{   dist_logpdfr|   qs          r%   test_logpdf_pdf_consistencyz:TestNumericalInversePolynomial.test_logpdf_pdf_consistency  s    	 	 	 	 	 	 	 	 68811)(33 fhh--)+66Kf#...TXXa[[11111r'   N)-r/   r0   r1   r3  r@  rS  r  r  r  r  r   r    r  r  r  ri   r  r  r  r\  r  r  xslowr   r  r  rh  bad_logpdfs_commonr#  r  rr  r   rL   rH   r   r,  r$   r0  r6  
bad_ordersbad_u_resolutionr;  r=  r  rR  r2   r'   r%   r  r    sK              , , , , , , , ,
 
 
 
 
 
 
 
"	 	 	 	 	 	 	 	 UWWeegguuww0E v,Ct*C;'"%("22
3C;)GBE1H,<<
=CS#
C[] S__. .- -. .-/ / /O4 4 4J [[/::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          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          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'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 )NrI  r   r   r  r"   s     r%   r&   z%TestNumericalInverseHermite.dist0.pdf  s&    RVBruHQJ///00r'   c                 d    t           j        t          j        dt           j        z  |z            z  S )Nr   r  r"   s     r%   r)   z&TestNumericalInverseHermite.dist0.dpdf  s#    525
++++r'   c                     ddt           j        z  d|z   z  z   t          j        dt           j        z  |z            z
  dt           j        z  z  S )Nr   r   r`   r  r  r"   s     r%   r-   z%TestNumericalInverseHermite.dist0.cdf  s@    BE1q5))BF2be8A:,>,>>2be8LLr'   c                     dS r.  r2   r0  s    r%   r   z)TestNumericalInverseHermite.dist0.support  r1  r'   Nr2  r2   r'   r%   r3  rZ    sS        	1 	1 	1	, 	, 	,	M 	M 	M	 	 	 	 	r'   r3  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   rI  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[   rI  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   g      ?r`   r   r[   rI  r&  rc  r"   s     r%   r-   z%TestNumericalInverseHermite.dist1.cdf  ss    T		q262:*:#;#;;<<BsSdRVR"%Z1,<%=%==== r'   c                     dS )N)r/  rI  r2   r0  s    r%   r   z)TestNumericalInverseHermite.dist1.support  s    7r'   Nr2  r2   r'   r%   r@  r`    sS        	> 	> 	>	@ 	@ 	@	> 	> 	>	 	 	 	 	r'   r@  r/  ra   r   r`   r   g      пg      ?g      ?rV  r8  r:   r   c                 L    t          ||d          }t          |||           d S )NrY  )r8  rs   )r   r   )r#   r3   r   r8  r   s        r%   r\  z&TestNumericalInverseHermite.test_basic  s0     &d%bIII3e,,,,,r'   rb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rp  )ri   rj   r   r   rq  s       r%   rr  z0TestNumericalInverseHermite.test_inf_nan_domains   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rs  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  )ri   r  r  r   rv   rw   rg   r   r   randmaxrK  r   r-   )
r#   r  shapes
slow_distsr  r3   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  rt  c                 2    |                      ||           d S r+   ry  )r#   r  rt  s      r%   r  z6TestNumericalInverseHermite.test_basic_all_scipy_dists>  s      	''&99999r'   c                 2    |                      dd           d S )N	truncnorm)r   ra   r{  r0  s    r%   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155F  s    ''X>>>>>r'   c                    d}t          j        t          |          5  t          t	                      d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          d           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          t	                      d	           d d d            d S # 1 swxY w Y   d S )
Nz"`order` must be either 1, 3, or 5.rd   ra   r:  z`cdf` required but not foundr   z!could not convert string to floatekkir)  )ri   rj   r   r   r   )r#   re   s     r%   r   z1TestNumericalInverseHermite.test_input_validationJ  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
  r3   rv  r|   ru   r  r~   s
             r%   test_RVSz$TestNumericalInverseHermite.test_RVS\  s     %d++}}gg7g559((((%d++Dlll00G:>>'**DC&&&&&	 r'   c                     d}d}t          j        t          |          5  t          t	          j        |            d d d            n# 1 swxY w Y   t          t	          j        | d           d S )N)gdsz@g@e?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailrd   rq  r)  )ri   r   r   r   r   rk  )r#   rt  re   s      r%   test_inaccurate_CDFz/TestNumericalInverseHermite.test_inaccurate_CDFm  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#   r@  fni1rS  fni2s        r%   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution{  sd      &u--
&u--a00$(((2J2JKKKKKr'   r[   r   r%  r   rI  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  r)  r  r  r  r  g&.>gLa㧝=r   )
r   r   r   rZ  r   r   r   r   r   r   r+  s          r%   r,  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******r.  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 r2  )r   r   r3  r   rZ  r   )r#   r3   r   r4  r5  r[  s         r%   r6  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))r/   r0   r1   r3  r@  r  r   r    r  r  r  ri   r  r  r  r\  r  rr  ry  filterwarningsrS  r   r  r~  r   rv   rx   rngsappendr   r  r  r  r  r  r   rL   rH   r   r,  r6  r2   r'   r%   rX  rX    sr       
       "       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:
 [ 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'   rX  c            
       T   e Zd Zh dZd Zd Zd Zej        	                    de
          d             Z ej        ddd	
          g g gej        gej         ej        ej        gdej        ddgddej        gg dggZej        	                    de          d             Zej        	                    de          d             Zej         ej        fej        ej        fej         ej         fdej        fej         dfgZej        	                    de          d             ZdS )TestDiscreteGuideTable>   r  r  r  c                     g d}t           j                                        }t          j        t
                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )Nr   g333333?g333333?r9   rs   guide_factorr   rv   r   ri   r   r   r
   r#   r   r   s      r%   $test_guide_factor_gt3_raises_warningz;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warning      __y$$&&\.)) 	F 	Fr1EEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F   AA #A c                     g d}t           j                                        }t          j        t
                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )Nr  r   r  r  r  s      r%   %test_guide_factor_zero_raises_warningz<TestDiscreteGuideTable.test_guide_factor_zero_raises_warning  r  r  c                     g d}t           j                                        }t          j        t
                    5  t          ||d           d d d            d S # 1 swxY w Y   d S )Nr  r/  r  r  r  s      r%   )test_negative_guide_factor_raises_warningz@TestDiscreteGuideTable.test_negative_guide_factor_raises_warning  s     __y$$&&\.)) 	G 	Gr2FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gr  r  c                    || j         v rd}t          j        |           t          |t                    s|}nt          t          |          } || }|                                }t          j	        |d         |d         z
            st          j        d           t          j
        |d         |d         dz             }|                    |          }|                    d          }t          |d          }	t          |	||           d S )NzYDGT fails on these probably because of large domains and small computation errors in PMF.r`   r   z$DGT only works with a finite domain.r   rY  r   )r  ri   r  r  r  rg   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   r`   r%  r   rI  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   rY  r   r  r  r  r  )	r   r   r
   r   rZ  r   r   r   r   )	r#   r   npr3   r   r[  r  r  s	            r%   r,  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  )ri   rj   r   r
   r  s      r%   r  z"TestDiscreteGuideTable.test_bad_pv  s    ]:S111 	# 	#r"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  rf   c                     t          j        t          d          5  t          t	          j        dd          |           d d d            d S # 1 swxY w Y   d S r  )ri   rj   r   r
   r   r   r  s     r%   r  z&TestDiscreteGuideTable.test_inf_domain  s    ]:->??? 	D 	Du{2s33FCCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	Dr  N)r/   r0   r1   r  r  r  r  ri   r  r  r   r\  r   r   rL   rH   r   r,  r  r  r  r  r2   r'   r%   r  r    s         F F FF F FG G G [/>>, , ?>,6 	Aqe$$$
RD	BF7BFBF+	 &#s	c3/<	A [S!$$$ $ %$$( [Y66# # 76# F7BF#bfbf%5"&7Ibf+|-J [Xz22D D 32D D Dr'   r  c                   *   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+   )rE  r7   rF  s     r%   r   z%TestSimpleRatioUniforms.dist.__init__"  s    DJDIIIr'   c                 P    || j         z  }dt          |          dz   z  }d|z  |z  S rH  rJ  rL  s      r%   r&   z TestSimpleRatioUniforms.dist.pdf&  rN  r'   c                 H    || j         z  }|dk    rdd|z
  z  S ddd|z   z  z
  S rQ  rD  r"   s     r%   r-   z TestSimpleRatioUniforms.dist.cdf+  rR  r'   N)r/   r0   r1   r   r&   r-   r2   r'   r%   r3   r  !  sA        	 	 		 	 	
	+ 	+ 	+ 	+ 	+r'   r3   r[   rT  rV  c                     t          ||j        d          }t          |||           t          ||j        |                    |j                  d          }t          |||           d S )NrY  )r7   rs   )r7   cdf_at_moders   )r   r7   r   r-   r  s       r%   r\  z"TestSimpleRatioUniforms.test_basic9  st     "$TYRHHH3e,,,!$TY.2hhty.A.A/13 3 3 	3e,,,,,r'   rb   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rp  )ri   rj   r   r   rq  s       r%   rr  z,TestSimpleRatioUniforms.test_inf_nan_domainsE  s    ]3c*** 	A 	A 0 0@@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	Ars  c                     t          j        t          d          5  t          t	                      dd           d d d            d S # 1 swxY w Y   d S )Nz`pdf_area` must be > 0rd   r   r/  )r7   pdf_area)ri   rj   r   r   r   r0  s    r%   r  z%TestSimpleRatioUniforms.test_bad_argsJ  s    ]:-FGGG 	G 	G 0 0q2FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   AAAN)r/   r0   r1   r3   r  r   rH   r  r  r  ri   r  r  r  r\  r  rr  r  r2   r'   r%   r  r    s        + + + + + + + +" T"XXttF||$E rv,C26
C*C[] S__. .- -. .- [/AAA A BAAG G G G Gr'   r  )Jr   r   ri   copyr   r  r  rM  numpyr   numpy.testingr   r   r   	numpy.libr   scipy.stats.samplingr   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  rT  rL   rH   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  rX  r  r  r2   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{. {. {. {. {. {. {. {.|k# k# k# k# k# k# k# k#\u2 u2 u2 u2 u2 u2 u2 u2pS  S  S  S  S  S  S  S l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 0G 0Gr'   