
    ge              	          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 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d/fd0d1e	j,        d2gd3fd0d1e	j-        d2gd3fd.d.gd4fgZ.d5e/d6fd7e/d6fgZ0d8ed9fd:ed9fgZ1d;ed9fe	j-        e	j-        fed9fe	j-         e	j-         fed9fe	j-        e	j-         fed9fe	j-         e	j,        fe/d<fe	j,        e	j-        fe/d<fgZ2d e	j,        fe/d<fe	j,        e	j,        fe/d<fgZ3ej4        5                    d=e1e0z   e3z             ej4        5                    d>e"          d?                         Z6ej4        5                    d>e"          d@             Z7dA Z8dB Z9ej4        5                    d>e"          dC             Z:ej4        5                    dDg dE          dF             Z;dG Z<d_dJZ=d`dLZ>dM Z?ej4        5                    dNg dO          dP             Z@ej4        5                    dNddg           G dQ dR                      ZA G dS dT          ZB G dU dV          ZC G dW dX          ZD G dY dZ          ZE G d[ d\          ZF G d] d^          ZGdS )a    N)deepcopy)assert_allcloseassert_equalsuppress_warnings)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     ?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   )r2   modepypy)      
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                     |  S r*   r1   r#   s    r$   <lambda>r=   >   s    r r&   z...c                     g S r*   r1   r<   s    r$   r=   r=   @       r r&   c                     t           S r*   foor<   s    r$   r=   r=   B       s r&   name 'foo' is not definedc                     t           j        S r*   r   infr<   s    r$   r=   r=   D       rv r&   c                     t           j        S r*   r   nanr<   s    r$   r=   r=   F   rH   r&   c                      dS Nr   r1   r1   r&   r$   r=   r=   H       S r&   ,takes 0 positional arguments but 1 was givenc                     t           j        S r*   rF   r<   s    r$   r=   r=   O   rH   r&   c                     t           j        S r*   rJ   r<   s    r$   r=   r=   Q   rH   r&   c                     g S r*   r1   r<   s    r$   r=   r=   S   r?   r&   c                     t           S r*   rA   r<   s    r$   r=   r=   U   rC   r&   c                      dS rM   r1   r1   r&   r$   r=   r=   W   rN   r&   c                     g S r*   r1   r<   s    r$   r=   r=   ^   r?   r&   c                     t           S r*   rA   r<   s    r$   r=   r=   `   rC   r&   c                     t           j        S r*   rF   r<   s    r$   r=   r=   b   rH   r&   c                     t           j        S r*   rJ   r<   s    r$   r=   r=   d   rH   r&   c                      dS rM   r1   r1   r&   r$   r=   r=   f   rN   r&   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r5   )must contain only finite / non-nan values(must contain at least one non-zero value)      r9   zmust be a length 2 tupler1   )r`   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domainr1   )getattrr   samplingpytestraises)re   errmsgmethodkwargsMethods         r$   test_bad_domainro      s    
 U^V,,F	s#	&	&	& ( (''''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AAAc                 ~   t          t          j        |           }d} |di |d|i} |di |d|i}t          |                    d          |                    d                     t
          j                            d            |di |}|                    d          }t
          j                            d             |di |ddi}|                    d          }t          ||           t
          j                            t
          j        	                    d                    }t
          j        
                    t
          j        	                    d                    }	 |di |d|i} |di |d|	i}t          |                    d          |                    d                     d S )N{   random_stated   r1   )rf   r   rg   r   rvsr   randomseedRandomStateMT19937	Generator)
rl   rm   rn   rv   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 )Nrq   rr   rs   )r   r   set_random_stater   rt   )rz   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_   r1   r!   s     r$   r(   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    1r&   N)r.   r/   r0   r   r%   r(   r1   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)NrB   r:   rs      re   rr   順 r   r   r   rt   r   argsr2   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   r`   r   r   r   r   r   r   s      r$   func2z'test_threading_behaviour.<locals>.func2   s    |E"")$y78: : :	'GGFOOOOO 	' 	' 	'VAYF6NNNNNNN	'r   )targetr   rB   r   r   )	threadingThreadstartjoin)r   r   t1t2r   r   s       @@r$   test_threading_behaviourr      s    D))F
 
 
 
 
 
 
 
' ' ' ' ' '' ' ' ' ' ' 
		'	'	'B			'	'	'BHHJJJHHJJJGGIIIGGIII&>U""""&>U""""""r&   c                    t          t          j        |           } |di |ddi}t          j        |          }t          j        |          }t          |                    d          |                    d                     d S )Nrr   rq   rs   r1   )rf   r   rg   pickledumpsloadsr   rt   )rl   rm   rn   rz   objr{   s         r$   test_pickler      s{    U^V,,F6--F-----D
,t

C<D#.....r&   size)Nr   )r   r_   )r:   r9   )r`   r9         )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   isscalarrt   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_   rs   num      $@      @)locscaler:   r[   )r   normr   ru   default_rngr   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r2   urngr   ure   pvs         r$   test_with_scipy_distributionr     se   :<<D9  ##D
!$T
:
:
:C
Aqc"""AsD$**,,///DHHQKK,,,:#R(((D
!$T
:
:
:CsD$**,,///DHHQKK,,,;r3D
4d
3
3
3C\\^^F	")F1Ivay{33	4	4BR.....r&   Hz>皙?c                    |                      d          }|                                |                                f}t          j        |d                   rt          ||||           |                      d          }t          j        |j                  |_        t          ||j                  j	        }|dk    sJ d S )Nr   r_   rtolatoli  r   )
rt   meanvarr   isfiniter   	vectorizer,   r   pvalue)r   r2   mv_exr   r   rt   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   )rt   r   r   r   sumr   
zeros_likeuniquer   r   r   )r   r   r   r   r   rt   r   	obs_freqs_freqsr   s              r$   r   r   4  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 distributionrc   r   r9   r   )centerre   re   )rh   warnsRuntimeWarningr
   r   )rk   s    r$   !test_warning_center_not_in_domainr   D  sE    ;C	nC	0	0	0 N N">#3#3AfMMMMN N N N N N N N N N N N N N N	nC	0	0	0 D D">#3#3FCCCCD D D D D D D D D D D D D D D D D Ds#   A		AA/BB!Brl   )r   r
   r   c                     t          t          j        |           }d}t          j        t
          |          5   |t                      dd           d d d            d S # 1 swxY w Y   d S )Nz17 : mode not in domainrc   r   r   )r6   re   )rf   r   rg   rh   ri   r   r   )rl   rn   rk   s      r$   test_error_mode_not_in_domainr   N  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...rc   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r9   r`   dr   )
rh   ri   r   rf   r   rg   r   qrvsqmcHalton)r"   rl   rd   rn   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   rv   r9   )r_   )r_   )r   r   )r   r   )r`   r   r   )r9   )r9   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   rc   r   r_   r   r   r   -q=r   )sysplatformarchitecturerh   xfailr   rf   r   rg   r   ri   r   r   r   r   ru   r   prodr   r   reshaper   )r"   r   size_insize_outd_ind_outrl   w32r2   rn   r   rd   shape_expectedqrng2r   uniformqrvs2s                    r$   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistencyu  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)r9   r   r   r   r   r   .r  r  )r   rf   r   rg   r   r   ru   r   r  r   r   r   ranger  r   )r"   rl   r2   rn   r   r   r   r   r  r  r   r  isamplesample2s                  r$   test_QRVS_size_tuplezTestQRVS.test_QRVS_size_tuple  s    00fTlly**	   ++,,rwt}}--xxTQ4x88
w''q 	9 	9A#q&\FAAAqDk))$//GFG%88888	9 	9r&   )r.   r/   r0   r   r   r   Sobolr   qrngstuplesizesdsrh   markparametrizer  r  r1   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_   r1   r!   s     r$   r%   z)TestTransformedDensityRejection.dist0.pdf      !AaC%= r&   c                     dd|z  z  S )Nr&  r1   r!   s     r$   r(   z*TestTransformedDensityRejection.dist0.dpdf  s    "Q$<r&   c                 $    d||dz  dz  z
  dz   z  S Nr&  r9   gUUUUUU?r1   r!   s     r$   r,   z)TestTransformedDensityRejection.dist0.cdf      !ad1f*s*++r&   c                     dS N)r_   r1   r"   s    r$   r   z-TestTransformedDensityRejection.dist0.support      5r&   Nr.   r/   r0   r%   r(   r,   r   r1   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-   r1   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   rZ   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 NrZ   rI  r   rD  r!   s     r$   r,   z)TestTransformedDensityRejection.dist2.cdf  7    OABwwb1f~%C26N**r&   N)r.   r/   r0   r   r%   r(   r,   r1   r&   r$   dist2rB    sP        	 	 		 	 	
	) 	) 	)	+ 	+ 	+ 	+ 	+r&   rS  rZ        @?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"   r2   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   r1   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.   r/   r0   r1   r&   r$   r2   rb            Dr&   r2   c                     dS r   r1   r<   s    r$   r=   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>  s    a r&   rc   r%   r(   rh   ri   r   r"   r%   rj   rk   r2   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  r1   r&   r$   r2   rk    rd  r&   r2   c                     | S r*   r1   r<   s    r$   r=   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Q r&   rc   r_   r:   r   rf  )r"   r(   rj   rk   r2   s        r$   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  s    	 	 	 	 	 	 	 	;	]3c*** 	> 	>'W====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s   AAAra   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S Nrc   r   )rh   ri   r   r   r"   re   rj   rk   s       r$   test_inf_nan_domainsz4TestTransformedDensityRejection.test_inf_nan_domains  s    ]3c*** 	I 	I'(8(8HHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I   AA	Aconstruction_points)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.rc   rt  rh   ri   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.rc   rv  )r_   r_   r_   r_   r_   r_   z:33 : starting points not strictly monotonically increasingr^  r:   z!50 : starting point out of domain)r9   )re   rt  )
rh   ri   r   r   r   r   r   r   rK   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.rc   r  )r~  rw  )r"   r~  rk   s      r$   
test_bad_cz*TestTransformedDensityRejection.test_bad_cG  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)  r9   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_hatQ  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  r1   r&   r$   r2   r  g  s        Cr&   r2   z`pdf` required but not found.rc   c                       e Zd Zd ZdS )r  c                     d| | z  z
  S r   r1   r<   s    r$   r=   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>p  s    AacE r&   Nr.   r/   r0   r%   r1   r&   r$   r2   z;TestTransformedDensityRejection.test_bad_dist.<locals>.disto  s        !/CCCr&   z`dpdf` required but not found.)rh   ri   r   r   )r"   r2   rk   s      r$   test_bad_distz-TestTransformedDensityRejection.test_bad_diste  s_   	 	 	 	 	 	 	 	 /]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	" 	" 	" 	" 	" 	" 	" 	" 0]:S111 	. 	.'---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s#   AAA<BB BN)#r.   r/   r0   r3  r@  rS  distsmv0mv1r   rG   mv2mv3mvsrh   r  r  zipr\  r   bad_pdfsbad_pdfs_commonrh  bad_dpdf_commonrn  inf_nan_domainsrr  ry  r}  rK   r  r   r   r  r  r1   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.r_   r   z$DAU only works with a finite domain.r   rY  r   )basic_fail_distsrh   skip
isinstancestrrf   r   r   r   r   r   r   r   r   
r"   distnameparamsrk   r2   re   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*   rF   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>      26 r&   r]   c                     t           j        S r*   rJ   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  r  r&   c                     dS )NrZ   r1   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    3 r&   r^   c                     t           S r*   rA   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    3 r&   rD   c                     g S r*   r1   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    2 r&   z)setting an array element with a sequence.c                     |  S r*   r1   r<   s    r$   r=   zTestDiscreteAliasUrn.<lambda>  s    A2 r&   z50 : probability < 0c                      dS rM   r1   r1   r&   r$   r=   zTestDiscreteAliasUrn.<lambda>  s     r&   rO   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  r1   r&   r$   r2   r    rd  r&   r2   rc   rm  r   )r   rh   ri   r   )r"   r   rj   rk   r2   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   )r4   r3   r5   )r   r   g      @      @r   g      @c                    t          j        |t           j                  }t          |d          }|                    d           ||                                z  }t          j        dt          |                    }t          j        ||          }t          j        ||z
  dz  |          }||f}t          |||           d S )N)dtyperq   r   r   r   )weightsr`   )
r   asarrayfloat64r   rt   r   r   lenaverager   )r"   r   r   variates
m_expected
v_expectedmv_expecteds          r$   test_sampling_with_pvz*TestDiscreteAliasUrn.test_sampling_with_pv  s     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 Nrc   rh   ri   r   r   r"   r   rk   s      r$   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s    ]:S111 	! 	!R   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!   9= =r   re   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 finiterc   r:   r[   r   )rh   ri   r   r   r   r   r"   re   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.rc   rI  r/  )
urn_factor)rh   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*   r1   r!   s     r$   r   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmf  s    r&   N)r.   r/   r0   r   r1   r&   r$   r2   r    s#            r&   r2   rc   r  )r"   rk   r2   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  rY  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)r.   r/   r0   r  rh   r  r  r   r\  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rG   
inf_domainr  r  r  r  r1   r&   r$   r  r  w  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#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%  r1   r!   s     r$   r%   z(TestNumericalInversePolynomial.dist0.pdf  r'  r&   c                 $    d||dz  dz  z
  dz   z  S r+  r1   r!   s     r$   r,   z(TestNumericalInversePolynomial.dist0.cdf  r,  r&   c                     dS r.  r1   r0  s    r$   r   z,TestNumericalInversePolynomial.dist0.support  r1  r&   Nr.   r/   r0   r%   r,   r   r1   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.   r/   r0   r%   r,   r1   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_   r`   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.  r1   r0  s    r$   r   z,TestNumericalInversePolynomial.dist2.support  r1  r&   Nr  r1   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_   r`   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=
?r`   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   r1   r0  s    r$   r   z,TestNumericalInversePolynomial.dist3.support  r1  r&   Nr  r1   r&   r$   dist3r    sG        	A 	A 	A	F 	F 	F	 	 	 	 	r&   r  rZ   rU  r<  gܿUUUUUU?gQ?r`   g @rV  c                 J    t          |d          }t          |||           d S rX  )r
   r   r"   r2   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 rY  r   )rh   r  r  r  rf   r   r   rZ  r   r
   r   r   r   )	r"   r  r  very_slow_dists
fail_distsskip_sample_moment_checkr2   r[  r   s	            r$   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists0  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=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  r1   r&   r$   r2   r$  T  rd  r&   r2   rc   r   r   r   )r%   rh   ri   r
   rg  s        r$   rh  z+TestNumericalInversePolynomial.test_bad_pdfR  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  r1   r&   r$   r2   r(  \  rd  r&   r2   rc   r   r   r   )logpdfrh   ri   r
   )r"   r)  rj   rk   r2   s        r$   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdfZ  s    	 	 	 	 	 	 	 	]3c*** 	< 	<&tQF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r%  ra   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rp  )rh   ri   r
   r   rq  s       r$   rr  z3TestNumericalInversePolynomial.test_inf_nan_domainsd  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   r2   r   r[  r  r  s          r$   test_ppfz'TestNumericalInversePolynomial.test_ppfx  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:   r9   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#   r2   r   r[  r  r  s          r$   test_cdfz'TestNumericalInversePolynomial.test_cdf  r4  r5  c                    t                      }t          |d          }|                                \  }}|dk     sJ ||k    sJ t          |d          }|                                \  }}|dk     sJ ||k    sJ d S Ng|=r0  r/  )r   r
   u_error)r"   r2   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\].rc   r?  )r   rh   ri   r   r
   )r"   r?  r2   rk   s       r$   test_bad_ordersz.TestNumericalInversePolynomial.test_bad_orders  s    C]:S111 	: 	:&t59999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   AAAr1  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.rc   r0  )rh   ri   r   r
   r   )r"   r1  rk   s      r$   test_bad_u_resolutionz4TestNumericalInversePolynomial.test_bad_u_resolution  s    ?]:S111 	B 	B&~'7'74@B B B B	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Br  c                 j    G d d          } |            }d}t          j        t          |          5  t          |          }d d d            n# 1 swxY w Y   t	                      }t          |          }d}t          j        t          |          5  |                    d           d d d            n# 1 swxY w Y    G d d          } |            }t          |          }d	}t          j        t          |          5  |                                 d d d            d S # 1 swxY w Y   d S )
Nc                       e Zd Zd ZdS )=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 @    t           j                            |          S r*   r>  r!   s     r$   r,   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zq)))r&   N)r.   r/   r0   r,   r1   r&   r$   BadDistrG    #        * * * * *r&   rI  z9Either of the methods `pdf` or `logpdf` must be specifiedrc   z4`sample_size` must be greater than or equal to 1000.r:   c                       e Zd Zd Z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  r1   r&   r$   r   rL    rJ  r&   r   z!Exact CDF required but not found.)rh   ri   r   r
   r   r:  )r"   rI  r2   rk   r   r   s         r$   r  z,TestNumericalInversePolynomial.test_bad_args  s   	* 	* 	* 	* 	* 	* 	* 	* wyyJ]:S111 	3 	3,T22C	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 (..E]:S111 	 	KKOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 		* 	* 	* 	* 	* 	* 	* 	* |~~(..2]:S111 	 	KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s5   AAAB88B<?B<D((D,/D,c                 >    G d d          } |            }d |_         t          |          } |            }d |_        t          |          }t          j        ddd          }t          |                    |          |                    |                     d S )	Nc                       e Zd ZdS )JTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNrc  r1   r&   r$   MyDistrP    rd  r&   rQ  c                 8    t          j        |  | z  dz            S Nr`   )mathr    r<   s    r$   r=   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1!1 r&   c                     |  | z  dz  S rS  r1   r<   s    r$   r=   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    r!tAv r&   r  gwJ?rs   r   )r%   r
   r)  r   r   r   r   )r"   rQ  dist_pdfrz   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.   r/   r0   r3  r@  rS  r  r  r  r  r   r   r  r  r  rh   r  r  r  r\  xslowr   r!  r  rh  bad_logpdfs_commonr*  r  rr  r   rK   rG   r   r3  r#   r7  r=  
bad_ordersbad_u_resolutionrB  rD  r  rY  r1   r&   r$   r  r    s*              , , , , , , , ,
 
 
 
 
 
 
 
"	 	 	 	 	 	 	 	 UWWeegguuww0E v,Ct*C;'"%("22
3C;)GBE1H,<<
=CS#
C[] S__. .- -. .- [[/::A A ;: A@ [_o>>< < ?>< [/1CDD< < ED< [/AAH H BAH 	Aqe$$$
RD	BF7BFBF+	 &#s	c3/<	A [S!$$+ + %$+" 
S"%	(	(	("rdRVH6'2626	"A63
sC0BF7Aq/	B	DA [S!$$+ + %$+"	  	  	  S"bfbf-JtRVRV4[Wj11: : 21: [^-=>>B B ?>B  62 2 2 2 2r&   r  c            
          e Zd Z G d d          Z G d d          Z e             e            gZddej        z  z  ddd	ej        z  ej        z  z  z
  gZd
dddej        z  ej        z  z  z
  dz
  gZ	ee	gZ
ej                            d eee
                    ej                            dddg          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.  r1   r0  s    r$   r   z)TestNumericalInverseHermite.dist0.support  r1  r&   Nr2  r1   r&   r$   r3  ra    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  rZ   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   rZ   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   rZ   rI  r&  rj  r!   s     r$   r,   z%TestNumericalInverseHermite.dist1.cdf  ss    T		q262:*:#;#;;<<BsSdRVR"%Z1,<%=%==== r&   c                     dS )N)r/  rI  r1   r0  s    r$   r   z)TestNumericalInverseHermite.dist1.support  s    7r&   Nr2  r1   r&   r$   r@  rg    sS        	> 	> 	>	@ 	@ 	@	> 	> 	>	 	 	 	 	r&   r@  r/  r`   r  r_   r   g      пg      ?g      ?rV  r?  r9   r   c                 L    t          ||d          }t          |||           d S )NrY  )r?  rr   )r   r   )r"   r2   r   r?  r   s        r$   r\  z&TestNumericalInverseHermite.test_basic&  s0     &d%bIII3e,,,,,r&   ra   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rp  )rh   ri   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  )rh   r  r  r   ru   rv   rf   r   r   randmaxrK  r   r,   )
r"   r  shapes
slow_distsr  r2   fnir#   p_tolu_tols
             r$   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_dists4  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_distsM  s      	''&99999r&   c                 2    |                      dd           d S )N	truncnorm)r   r`   r  r0  s    r$   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155U  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.rc   r`   rA  z`cdf` required but not foundr   z!could not convert string to floatekkir0  )rh   ri   r   r   r   )r"   rd   s     r$   r   z1TestNumericalInverseHermite.test_input_validationY  s   5]:U333 	? 	?#N$4$4A>>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? /]:U333 	, 	,#F+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 4]:U333 	9 	9#N$4$4179 9 9 9	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9s5   AAA0BBB4CC#&C#Nr   )   )r  )r   r      r  r   r   c                 Z   t                      }t          |          }t          |          }|                    ||          }||j        |k    sJ |Vt          |          }|                    |          }t          j        	                    |          }	t          ||	           d S d S )N)r   rr   )r   )r   r   r   rt   r   r   r  r   r   r   r   )
r"   r   r	  r
  r2   r}  r{   rt   r  r}   s
             r$   test_RVSz$TestNumericalInverseHermite.test_RVSk  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 tailrc   rx  r0  )rh   r   r   r   r   rr  )r"   r{  rd   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   rt   )r"   r@  fni1rS  fni2s        r$   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sd      &u--
&u--a00$(((2J2JKKKKKr&   rZ   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  r0  r  r  r  r  g&.>gLa㧝=r   )
r   r   r   rZ  r   r   r   r   r   r   r2  s          r$   r3  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******r5  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 r9  )r   r   r:  r   rZ  r   )r"   r2   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))r.   r/   r0   r3  r@  r  r   r   r  r  r  rh   r  r  r  r\  r  rr  r  filterwarningsrZ  r   r!  r  r   ru   rw   rngsappendr   r  r  r  r  r  r   rK   rG   r   r3  r=  r1   r&   r$   r_  r_    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&   r_  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 )TestDiscreteGuideTabler  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?r8   rr   guide_factorr   ru   r   rh   r   r   r	   r"   r   r   s      r$   $test_guide_factor_gt3_raises_warningz;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warning      __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  rh   r  r  r  rf   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pr2   r   r[  r  r  s	            r$   r3  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  )rh   ri   r   r	   r  s      r$   r  z"TestDiscreteGuideTable.test_bad_pv  s    ]:S111 	# 	#r"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#r  re   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  )rh   ri   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.   r/   r0   r  r  r  r  rh   r  r  r   r\  r   r   rK   rG   r   r3  r  r  r  r  r1   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  r6   rF  s     r$   r   z%TestSimpleRatioUniforms.dist.__init__1  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.pdf5  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.   r/   r0   r   r%   r,   r1   r&   r$   r2   r  0  sA        	 	 		 	 	
	+ 	+ 	+ 	+ 	+r&   r2   rZ   rT  rV  c                     t          ||j        d          }t          |||           t          ||j        |                    |j                  d          }t          |||           d S )NrY  )r6   rr   )r6   cdf_at_moderr   )r   r6   r   r,   r  s       r$   r\  z"TestSimpleRatioUniforms.test_basicH  st     "$TYRHHH3e,,,!$TY.2hhty.A.A/13 3 3 	3e,,,,,r&   ra   c                     t          j        ||          5  t          t                      |           d d d            d S # 1 swxY w Y   d S rp  )rh   ri   r   r   rq  s       r$   rr  z,TestSimpleRatioUniforms.test_inf_nan_domainsT  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 > 0rc   r   r/  )r6   pdf_area)rh   ri   r   r   r   r0  s    r$   r  z%TestSimpleRatioUniforms.test_bad_argsY  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.   r/   r0   r2   r  r   rG   r  r  r  rh   r  r  r  r\  r  rr  r  r1   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  )r   r   )r   r   )Hr   r   rh   copyr   r  r  rT  numpyr   numpy.testingr   r   r   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  r[  rK   rG   r  r   bad_sized_domainsbad_domainsr  nan_domainsr  r  ro   r   r   r   r   r   r   r   r   r   r   r   r!  r  r  r_  r  r  r1   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 ~2B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&   