
    5[g              	           d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlZd dlZ	d dl
mZmZmZ d dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lm Z m!Z! d d
l"m#Z#  G d d      Z$dd e$       ifddg difddg difdd e$       ifdd e$       ifd e$       d dfgZ%ejL                  jN                  dk(  rejL                  jP                  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Z1d6e2d7fd8e2d7fgZ3d9ed:fd;ed:fgZ4d<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e2d=fe	j^                  e	j`                  fe2d=fgZ5d e	j^                  fe2d=fe	j^                  e	j^                  fe2d=fgZ6ejn                  jq                  d>e4e3z   e6z         ejn                  jq                  d?e%      d@               Z9ejn                  jq                  d?e%      dA        Z:dB Z;dC Z<ejn                  jq                  d?e%      dD        Z=ejn                  jq                  dEg dF      dG        Z>dH Z?d_dIZ@d`dJZAdK ZBejn                  jq                  dLg dM      dN        ZCejn                  jq                  dLddg       G dO dP             ZD G dQ dR      ZE G dS dT      ZF G dU dV      ZG G dW dX      ZH G dY dZ      ZI G d[ d\      ZJ G d] d^      ZKy)a    N)deepcopy)assert_allcloseassert_equalsuppress_warnings)TransformedDensityRejectionDiscreteAliasUrnDiscreteGuideTableNumericalInversePolynomialNumericalInverseHermiteRatioUniformsSimpleRatioUniformsUNURANError)raises)stats)special)	chisquarecramervonmises)distdiscretedistcont)check_random_statec                       e Zd Zd Zd Zd Zy)StandardNormalc                     dt        j                  dt         j                  z        z  t        j                  d|z  |z        z  S N      ?       @      ࿩npsqrtpiexpselfxs     Z/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/stats/tests/test_sampling.pypdfzStandardNormal.pdf!   s4    "''"RUU(##bffTAXaZ&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;    "''"RUU(##qb(266$(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       s    9>r(   r   r   distr   ){Gz?
ףp=
?皙?r	   r
   r   r   )r4   modepypy)      
   z.unsupported operand type for float\(\): 'list'zmust be real number, not listc                     |  S r,   r3   r%   s    r&   <lambda>r?   @   s    rr(   z...c                     g S r,   r3   r>   s    r&   r?   r?   B       rr(   c                     t         S r,   foor>   s    r&   r?   r?   D       sr(   name 'foo' is not definedc                 "    t         j                  S r,   r   infr>   s    r&   r?   r?   F       rvvr(   c                 "    t         j                  S r,   r   nanr>   s    r&   r?   r?   H   rJ   r(   c                       yNr   r3   r3   r(   r&   r?   r?   J       Sr(   ,takes 0 positional arguments but 1 was givenc                 "    t         j                  S r,   rH   r>   s    r&   r?   r?   Q   rJ   r(   c                 "    t         j                  S r,   rL   r>   s    r&   r?   r?   S   rJ   r(   c                     g S r,   r3   r>   s    r&   r?   r?   U   rA   r(   c                     t         S r,   rC   r>   s    r&   r?   r?   W   rE   r(   c                       yrO   r3   r3   r(   r&   r?   r?   Y   rP   r(   c                     g S r,   r3   r>   s    r&   r?   r?   `   rA   r(   c                     t         S r,   rC   r>   s    r&   r?   r?   b   rE   r(   c                 "    t         j                  S r,   rH   r>   s    r&   r?   r?   d   rJ   r(   c                 "    t         j                  S r,   rL   r>   s    r&   r?   r?   f   rJ   r(   c                       yrO   r3   r3   r(   r&   r?   r?   h   rP   r(   z!must contain at least one elementr           z0wrong number of dimensions \(expected 1, got 2\)皙?皙?r7   )must contain only finite / non-nan values(must contain at least one non-zero value)      r;   zmust be a length 2 tupler3   )rb   ra   zleft >= right)ra   ra   )r<   r<   zonly non-nan valuesdomain, err, msgzmethod, kwargsc                     t        t        j                  |      }t        j                  ||      5   |di |d| i d d d        y # 1 sw Y   y xY w)Nmatchdomainr3   )getattrr   samplingpytestr   )rg   errmsgmethodkwargsMethods         r&   test_bad_domainrp      s>    
 U^^V,F	s#	&''' 
'	&	&s   AAc                 4   t        t        j                  |       }d} |di |d|i} |di |d|i}t        |j	                  d      |j	                  d             t
        j                  j                  d        |di |}|j	                  d      }t
        j                  j                  d         |di |ddi}|j	                  d      }t        ||       t
        j                  j                  t
        j                  j                  d            }t
        j                  j                  t
        j                  j                  d            }	 |di |d|i} |di |d|	i}t        |j	                  d      |j	                  d             y )N{   random_stated   r3   )rh   r   ri   r   rvsr   randomseedRandomStateMT19937	Generator)
rm   rn   ro   rw   rng1rng2rvs1rvs2seed1seed2s
             r&   test_random_stater      sB   U^^V,F D.F..D.F..D#. IINN3FD88C=DIINN4-F--D88C=Dt
 II!!"))"3"3C"89EII		 1 1# 67E/F//D/F//D#.r(   c                  r   t        t               d      } t        t                     }|j                  d       t        | j	                  d      |j	                  d             t        t               d      }|j	                  d      }|j                  d       |j	                  d      }t        ||       y )Nrr   rs   rt   )r   r   set_random_stater   ru   )r{   r|   rngr}   r~   s        r&   test_set_random_stater      s    &~'7cJD&~'78D##.
%n&6S
IC773<D773<Dtr(   c                  >   d d d G d d      fd} fd}t        j                  |       }t        j                  |      }|j                          |j                          |j                          |j                          d   dk(  sJ d	   d
k(  sJ y )N)err1err2c                       e Zd Zd Zd Zd Zy).test_threading_behaviour.<locals>.Distributionc                     || _         y r,   )pdf_msg)r$   r   s     r&   __init__z7test_threading_behaviour.<locals>.Distribution.__init__   s	    "DLr(   c                 N    d|cxk  rdk  rn |S t        | j                        |S )Ng33333H@g      I@)
ValueErrorr   r#   s     r&   r'   z2test_threading_behaviour.<locals>.Distribution.pdf   s(    a$H !..Hr(   c                      yNra   r3   r#   s     r&   r*   z3test_threading_behaviour.<locals>.Distribution.dpdf   s    r(   N)r0   r1   r2   r   r'   r*   r3   r(   r&   Distributionr      s    	#	
	r(   r   c                       d      } t        | dd      }	 |j                  d       y # t        $ r}|j                  d   d<   Y d }~y d }~ww xY w)NrD   r<   rt      rg   rs   順 r   r   r   ru   r   argsr4   r   er   errorss      r&   func1z'test_threading_behaviour.<locals>.func1   sO    E")$y79;	'GGFO 	'VVAYF6N	'   + 	AAAc                       d      } t        | dd      }	 |j                  d       y # t        $ r}|j                  d   d<   Y d }~y d }~ww xY w)Nbarr   rb   r   r   r   r   r   r   s      r&   func2z'test_threading_behaviour.<locals>.func2   sO    E")$y78:	'GGFO 	'VVAYF6N	'r   )targetr   rD   r   r   )	threadingThreadstartjoin)r   r   t1t2r   r   s       @@r&   test_threading_behaviourr      s     D)F
 
'' 
			'B				'BHHJHHJGGIGGI&>U"""&>U"""r(   c                     t        t        j                  |       } |di |ddi}t        j                  |      }t        j
                  |      }t        |j                  d      |j                  d             y )Nrs   rr   rt   r3   )rh   r   ri   pickledumpsloadsr   ru   )rm   rn   ro   r{   objr|   s         r&   test_pickler      sZ    U^^V,F-F--D
,,t
C<<D#.r(   size)Nr   )r   ra   )r<   r;   )rb   r;         )r   r   )r   ra   c                     t        t                     }| 't        j                  |j	                  |             sJ y t        j                  |       r| f} |j	                  |       j
                  | k(  sJ y r,   )r   r   r   isscalarru   shape)r   r   s     r&   test_rvs_sizer     s_    
 &n&6
7C|{{3774=)));;t8Dwwt}""d***r(   c                     t        j                         } t        j                  j	                  d      }t        | |      }t        j                  ddd      }t        || | j                                t        | j                  |      |j                  |             t        j                  dd      } t        | |      }t        || | j                                t        | j                  |      |j                  |             t        j                  d	d
      } t        | |      }| j                         }| j                  t        j                  |d   |d   dz               }t        ||| j                                y )Nr   r   ra   rt   num      $@      @)locscaler<   r]   )r   normr   rv   default_rngr   linspacecheck_cont_samplesr   ppfbinomr   supportpmfarangecheck_discr_samples)r4   urngr   urg   pvs         r&   test_with_scipy_distributionr     s   ::<D99  #D
!$T
:C
Aqc"AsD$**,/DHHQK,::#R(D
!$T
:CsD$**,/DHHQK,;;r3D
4d
3C\\^F	"))F1Ivay{3	4BR.r(   c                 l   | j                  d      }|j                         |j                         f}t        j                  |d         rt        ||||       | j                  d      }t        j                  |j                        |_        t        ||j                        j                  }|dkD  sJ y )Nr   ra   rtolatoli  皙?)
ru   meanvarr   isfiniter   	vectorizer.   r   pvalue)r   r4   mv_exr   r   ru   mvpvals           r&   r   r   )  s    
''&/C	SWWY	B	{{58E48
''#,C||DHH%DH#txx(//D#::r(   c                    | j                  d      }|j                         |j                         f}t        ||||       ||j	                         z  }t        j                  |      }t        j                  |d      \  }}	|	|	j	                         z  }	|	|d |	j                   t        ||      j                  }
|
dkD  sJ y )Nr   r   T)return_countsr   )ru   r   r   r   sumr   
zeros_likeuniquer   r   r   )r   r   r   r   r   ru   r   	obs_freqs_freqsr   s              r&   r   r   6  s    
''&/C	SWWY	BBDt4	bffhBb!IyyD1HAuEIIKE"IkuzzY#**D#::r(   c                     d} t        j                  t        |       5  t        t	               dd       d d d        t        j                  t        |       5  t        t	               d       d d d        y # 1 sw Y   CxY w# 1 sw Y   y xY w)Nz.102 : center moved into domain of distributionre   r   r;   r   )centerrg   rg   )rj   warnsRuntimeWarningr
   r   )rl   s    r&   !test_warning_center_not_in_domainr   F  s^     ;C	nC	0">#3AfM 
1	nC	0">#3FC 
1	0 
1	0	0	0s   A7B7B Brm   )r   r
   r   c                     t        t        j                  |       }d}t        j                  t
        |      5   |t               dd       d d d        y # 1 sw Y   y xY w)Nz17 : mode not in domainre   r   r   )r8   rg   )rh   r   ri   rj   r   r   r   )rm   ro   rl   s      r&   test_error_mode_not_in_domainr   P  sB     U^^V,F
#C	{#	.~a7 
/	.	.s   AAc                      e Zd Zd Zdej
                  j                  dd      ej
                  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                  j                  de      ej                  j                  de
      ej                  j                  de      d                      Zd Zy)TestQRVSc                    d}t        j                  t        |      5  t        t        j
                  |      } |t                     }|j                  d       d d d        t        t        j
                  |      } |t                     }d}t        j                  t        |      5  |j                  dt        j                  j                  d             d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nz&`qmc_engine` must be an instance of...re   r   )
qmc_engine6`d` must be consistent with dimension of `qmc_engine`.r;   rb   dr   )
rj   r   r   rh   r   ri   r   qrvsqmcHalton)r$   rm   rf   ro   gens        r&   test_input_validationzTestQRVS.test_input_validationa  s    8]]:U3U^^V4F)*CHHH" 4 0^%&H]]:U3HHqUYY%5%5a%8H9 43 43 43s   =C$*1C0$C-0C9Nra   r   rw   r;   )ra   ra   )r   r   )r   r   )rb   r   r   )r;   r;   qrngsize_in, size_outzd_in, d_outc                 "   t         j                  dk(  xr t        j                         d   dk(  }|r|dk(  rt        j                  d       t               }t        t        j                  |      }	 |	|      }
|L|J|j                  |k7  r;d}t        j                  t        |      5  |
j                  |||       d d d        y |||j                  d	k7  r|j                  f}||z   }t        |      }|
j                  |||
      }||j                  |k(  sJ |e|j                  t!        j"                  |      xs d	      }t        j$                  j'                  |      j)                  |      }t+        ||d       y y # 1 sw Y   y xY w)Nwin32r   32bitr
   z4NumericalInversePolynomial.qrvs fails for Win 32-bitr   re   r   ra   r   r   r   -q=r   )sysplatformarchitecturerj   xfailr   rh   r   ri   r   r   r   r   r   r   rv   r   prodr   r   reshaper   )r$   r   size_insize_outd_ind_outrm   w32r4   ro   r   rf   shape_expectedqrng2r   uniformqrvs2s                    r&   test_QRVS_shape_consistencyz$TestQRVS.test_QRVS_shape_consistencyw  sf   
 llg%O(*?*?*A!*D*O699LL " # 0Tl  0TVVt^LEz7DT: 8 <D,1VVIE!E)xxWx>::///ll2777#3#8q9GJJNN7+33NCED%e4  8s   (FFc                    t               }t        t        j                  |      } ||      }d}d}t        j                  j                  |d      }t        j                  j                  |d      }|j                  t        j                  |            }	|j                  |||      }
t        j                  j                  |	      }t        |      D ]/  }|
d|f   }|d d |f   j                  |      }t        ||d       1 y )	N)r;   r   r   r   r   r  .r  r  )r   rh   r   ri   r   r   rv   r   r  r   r   r   ranger	  r   )r$   rm   r4   ro   r   r   r   r   r  r  r   r  isamplesample2s                  r&   test_QRVS_size_tuplezTestQRVS.test_QRVS_size_tuple  s     0Tlyy*		   +,,rwwt}-xxTQ4x8

w'qA#q&\FAqDk))$/GFG%8 r(   )r0   r1   r2   r   r   r   Sobolr   qrngstuplesizesdsrj   markparametrizer  r  r3   r(   r&   r   r   ^  s    : 599??11?-uyy/?/?/?/JKEEG_i+-E /Auw<	3B[[VU+[[0%8[[]B/ 5 0 9 , 5D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                  j!                  d eee            d        Zd edfgZeez  Zej                  j!                  de      d        Zej                  j!                  de      d        Zej                  j!                  de      d        Zej                  j!                  dg d      d        Zd Zej                  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                  j!                  d&e       d'        Z!d( Z"y))*TestTransformedDensityRejectionc                   $    e Zd Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist0c                     dd||z  z
  z  S N      ?ra   r3   r#   s     r&   r'   z)TestTransformedDensityRejection.dist0.pdf      !AaC%= r(   c                     dd|z  z  S )Nr'  r3   r#   s     r&   r*   z*TestTransformedDensityRejection.dist0.dpdf  s    "Q$<r(   c                 $    d||dz  dz  z
  dz   z  S Nr'  r;   gUUUUUU?r3   r#   s     r&   r.   z)TestTransformedDensityRejection.dist0.cdf      !ad1f*s*++r(   c                      yN)ra   r3   r$   s    r&   r   z-TestTransformedDensityRejection.dist0.support      r(   Nr0   r1   r2   r'   r*   r.   r   r3   r(   r&   dist0r$    s    	!	 	,	r(   r4  c                       e Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist1c                 F    t         j                  j                  |dz        S Nr   r   r   _pdfr#   s     r&   r'   z)TestTransformedDensityRejection.dist1.pdf      ::??1s7++r(   c                 T    | dz  t         j                  j                  |dz        z  S )N{Gz?r   r9  r#   s     r&   r*   z*TestTransformedDensityRejection.dist1.dpdf  s$    29uzzq3w777r(   c                 F    t         j                  j                  |dz        S r8  r   r   _cdfr#   s     r&   r.   z)TestTransformedDensityRejection.dist1.cdf  r;  r(   Nr/   r3   r(   r&   dist1r6    s    	,	8	,r(   rA  c                   $    e Zd Zd Zd Zd Zd Zy)%TestTransformedDensityRejection.dist2c                     || _         y r,   shiftr$   rF  s     r&   r   z.TestTransformedDensityRejection.dist2.__init__  s	    DJr(   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S Nr         ?rF  absr$   r%   ys      r&   r'   z)TestTransformedDensityRejection.dist2.pdf  /    OAc!frk"A7Q;r(   c                 f    || j                   z  }dt        |      dz   z  }||z  |z  }|dk  r|S | S )Nr   r\   rK  rM  s      r&   r*   z*TestTransformedDensityRejection.dist2.dpdf  sA    OAc!frk"AA	AR1(qb(r(   c                 P    || j                   z  }|dk  rdd|z
  z  S ddd|z   z  z
  S Nr\   rJ  r   rE  r#   s     r&   r.   z)TestTransformedDensityRejection.dist2.cdf  7    OABwb1f~%C26N**r(   N)r0   r1   r2   r   r'   r*   r.   r3   r(   r&   dist2rC    s    		
	)	+r(   rT  r\        @?r=  dist, mv_exc                     t               5 }|j                  t               t        |d      }d d d        t	        ||       y # 1 sw Y   xY wN*   r   )r   filterr   r   r   )r$   r4   r   supr   s        r&   
test_basicz*TestTransformedDensityRejection.test_basic  s@      CJJ~&-dDC ! 	3e,	 ! s   #AAc                      y)Nr   r3   r>   s    r&   r?   z(TestTransformedDensityRejection.<lambda>  s    1r(   50 : bad construction points.pdf, err, msgc                      G d d      }||_         d |_        t        j                  ||      5  t	        |       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy):TestTransformedDensityRejection.test_bad_pdf.<locals>.distNr0   r1   r2   r3   r(   r&   r4   rc        r(   r4   c                      yr   r3   r>   s    r&   r?   z>TestTransformedDensityRejection.test_bad_pdf.<locals>.<lambda>	  s    ar(   re   r'   r*   rj   r   r   r$   r'   rk   rl   r4   s        r&   test_bad_pdfz,TestTransformedDensityRejection.test_bad_pdf  s<    	 		]]3c*'- +**s   AAzdpdf, err, msgc                      G d d      }d |_         ||_        t        j                  ||      5  t	        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy);TestTransformedDensityRejection.test_bad_dpdf.<locals>.distNrd  r3   r(   r&   r4   rl    re  r(   r4   c                     | S r,   r3   r>   s    r&   r?   z?TestTransformedDensityRejection.test_bad_dpdf.<locals>.<lambda>  s    Qr(   re   ra   r<   r   rg  )r$   r*   rk   rl   r4   s        r&   test_bad_dpdfz-TestTransformedDensityRejection.test_bad_dpdf  s>    	 		]]3c*'W= +**s   AArc   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wNre   r   )rj   r   r   r   r$   rg   rk   rl   s       r&   test_inf_nan_domainsz4TestTransformedDensityRejection.test_inf_nan_domains  s)    ]]3c*'(8H +**	   7A construction_points)r0  r   r   c                     t        j                  t        d      5  t        t	               |       d d d        y # 1 sw Y   y xY w)Nz1`construction_points` must be a positive integer.re   ru  rj   r   r   r   r   r$   ru  s     r&   #test_bad_construction_points_scalarzCTestTransformedDensityRejection.test_bad_construction_points_scalar  s;    ]]: .D E' 6IE E Es	   ;Ac                    g }t        j                  t        d      5  t        t	               |       d d d        g d}t        j
                  t        d      5  t        t	               |       d d d        t        j                  t        j                  t        j                  g}t        j                  t        d      5  t        t	               |       d d d        ddg}t        j
                  t        d	      5  t        t	               d
|       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   `xY w# 1 sw Y   y xY w)NzC`construction_points` must either be a scalar or a non-empty array.re   rw  )ra   ra   ra   ra   ra   ra   z:33 : starting points not strictly monotonically increasingr_  r<   z!50 : starting point out of domain)r;   )rg   ru  )
rj   r   r   r   r   r   r   r   rM   r   ry  s     r&   "test_bad_construction_points_arrayzBTestTransformedDensityRejection.test_bad_construction_points_array%  s    ]]: .M N ( 6IN 1\\. 1> ? ( 6I?  "vvrvvrvv6]]; /9 :' 6I:  #Bi\\. 1: ;' $7; ;5N N? ?: :; ;s/   D D,D8 E D),D58EEc      r   r   c                     d}t        j                  t        |      5  t        t	               d       d d d        y # 1 sw Y   y xY w)Nz`c` must either be -0.5 or 0.re   r  )r  rx  )r$   r  rl   s      r&   
test_bad_cz*TestTransformedDensityRejection.test_bad_cI  s.    .]]:S1'(8C@ 211	   =Ar   ra     r   rJ  r]   r^   r*  r;   r   r   c                    t        t               d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd	       |j                  |j                  k(  sJ y # 1 sw Y   4xY w)
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_equalMbP?h㈵>r   )r   r   r   r[  r   ppf_hatr   r   r   r   r   )r$   r   r   r\  resexpecteds         r&   test_ppf_hatz,TestTransformedDensityRejection.test_ppf_hatS  s     *.*:@FH  CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5++a.Czz~~a(H ! 	XDt<yyHNN*** ! s   B	CC%c                      G d d      }d}t        j                  t        |      5  t        |       d d d         G d d      }d}t        j                  t        |      5  t        |       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)Nc                       e Zd Zy);TestTransformedDensityRejection.test_bad_dist.<locals>.distNrd  r3   r(   r&   r4   r  i  s    r(   r4   z`pdf` required but not found.re   c                       e Zd Zd Zy)r  c                     d| | z  z
  S r   r3   r>   s    r&   r?   zDTestTransformedDensityRejection.test_bad_dist.<locals>.dist.<lambda>r  s    AacEr(   Nr0   r1   r2   r'   r3   r(   r&   r4   z;TestTransformedDensityRejection.test_bad_dist.<locals>.distq  s    !Cr(   z`dpdf` required but not found.)rj   r   r   r   )r$   r4   rl   s      r&   test_bad_distz-TestTransformedDensityRejection.test_bad_distg  so    	 	 /]]:S1'- 2	" 	" 0]]:S1'- 21 21 21s   A8#B8BBN)#r0   r1   r2   r4  rA  rT  distsmv0mv1r   rI   mv2mv3mvsrj   r  r   zipr]  r   bad_pdfsbad_pdfs_commonri  bad_dpdf_commonro  inf_nan_domainsrs  rz  r~  rM   r  r   r   r  r  r3   r(   r&   r"  r"    s)    , ,+ +, WeguRy%-8E v,Ct*Crvv,C266
CS#
C[[] _.-.- k+KLMHH[[_h7. 8. [[-?> @> [[/AI BI [[2LA B"H [[S3R"@AA BA
 
Qt	$b2$66'266266	"A663
sC0*	=	?A [[S!$+ %+&.r(   r"  c            	          e Zd Zh dZej
                  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
                  j                  de      d        Zej
                  j                  dg dg dg      d        Zej
                  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
                  j                  de      d        Zd Zd Zd Zy) TestDiscreteAliasUrn>   randintnchypergeom_fishernchypergeom_walleniusdistname, paramsc                    || j                   v rd}t        j                  |       t        |t              s|}nt        t        |      } || }|j                         }t        j                  |d   |d   z
        st        j                  d       t        j                  |d   |d   dz         }|j                  |      }|j                  d      }t        |d      }	t        |	||       y )NzYDAU fails on these probably because of large domains and small computation errors in PMF.ra   r   z$DAU only works with a finite domain.r   rZ  r   )basic_fail_distsrj   skip
isinstancestrrh   r   r   r   r   r   r   r   r   
r$   distnameparamsrl   r4   rg   kr   r   r   s
             r&   r]  zTestDiscreteAliasUrn.test_basic  s    t,,,:CKK(C(D5(+DV}{{6!9vay01 KK>?IIfQi1-XXa[

4 t"5CU+r(   c                 "    t         j                  S r,   rH   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>      266r(   r_   c                 "    t         j                  S r,   rL   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  r  r(   c                      y)Nr\   r3   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  s    3r(   r`   c                     t         S r,   rC   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  s    3r(   rF   c                     g S r,   r3   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  s    2r(   z)setting an array element with a sequence.c                     |  S r,   r3   r>   s    r&   r?   zTestDiscreteAliasUrn.<lambda>  s    A2r(   z50 : probability < 0c                       yrO   r3   r3   r(   r&   r?   zTestDiscreteAliasUrn.<lambda>  s    r(   rQ   zpmf, err, msgc                      G d d      }||_         t        j                  ||      5  t        |d       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)/TestDiscreteAliasUrn.test_bad_pmf.<locals>.distNrd  r3   r(   r&   r4   r    re  r(   r4   re   rn  r   )r   rj   r   r   )r$   r   rk   rl   r4   s        r&   test_bad_pmfz!TestDiscreteAliasUrn.test_bad_pmf  s7    	 	]]3c*T'2 +**s   A  A	r   )r6   r5   r7   )r   r   g      @      @r   g      @c                 x   t        j                  |t         j                        }t        |d      }|j	                  d       ||j                         z  }t        j                  dt        |            }t        j                  ||      }t        j                  ||z
  dz  |      }||f}t        |||       y )N)dtyperr   r   r   r   )weightsrb   )
r   asarrayfloat64r   ru   r   r   lenaverager   )r$   r   r   variates
m_expected
v_expectedmv_expecteds          r&   test_sampling_with_pvz*TestDiscreteAliasUrn.test_sampling_with_pv  s     ZZ"**-r4"&&(]99QB(ZZ"5
ZZJ!61 <bI
 *,C[1r(   pv, msgc                 z    t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY wNre   rj   r   r   r   r$   r   rl   s      r&   test_bad_pvz TestDiscreteAliasUrn.test_bad_pv  s$    ]]:S1R  211   1:r   rg   c                     t        j                  t        d      5  t        t	        j
                  dd      |       d d d        y # 1 sw Y   y xY wNzmust be finitere   r<   r]   r   )rj   r   r   r   r   r   r$   rg   s     r&   test_inf_domainz$TestDiscreteAliasUrn.test_inf_domain  s3    ]]:->?U[[S1&A @??   "AAc                     t        j                  t        d      5  t        ddgd       d d d        y # 1 sw Y   y xY w)Nzrelative urn size < 1.re   rJ  r0  )
urn_factor)rj   r   r   r   r1  s    r&   test_bad_urn_factorz(TestDiscreteAliasUrn.test_bad_urn_factor  s,    \\.0IJc3ZB7 KJJs   5>c                     d} G d d      }t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY w)NzG`domain` must be provided when the probability vector is not available.c                       e Zd Zd Zy)0TestDiscreteAliasUrn.test_bad_args.<locals>.distc                     |S r,   r3   r#   s     r&   r   z4TestDiscreteAliasUrn.test_bad_args.<locals>.dist.pmf  s    r(   N)r0   r1   r2   r   r3   r(   r&   r4   r    s    r(   r4   re   r  )r$   rl   r4   s      r&   test_bad_argsz"TestDiscreteAliasUrn.test_bad_args  s7    7	 	 ]]:S1T" 211s	   =Ac                     t        j                  t        j                  d            }t	        |d      }t        ||dd       y )N)i  rZ  r   )g     @g    
Ag{Gzt?)r   )r   softmaxr   onesr   r   )r$   r   r   s      r&   test_gh19359z!TestDiscreteAliasUrn.test_gh19359  s7    __RWWW-.r3C%C!%	'r(   N)r0   r1   r2   r  rj   r  r   r   r]  r   	NameErrorr   	TypeErrorbad_pmfr  r  bad_pv_commonr  r   rI   
inf_domainr  r  r  r  r3   r(   r&   r  r  y  s    [[/>, ?,2 
:	5	7 
:	5	7 

	4	6 
		%	' 
z	5	7 
{	 	" 
i	8	:)G0 [[_g63 73 [[T$5$B$D E
2E
2 [[Y6! 7! FF7BFF#bffbff%5"&&7Ibff+|-J [[Xz2B 3B8	#'r(   r  c                   J   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                   j#                  d eee            d        Zej                   j(                  ej                   j#                  de      d               Zej                   j#                  de      d        Zej                   j#                  de      d        Zej                   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                   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                   j#                  d*e"      d+        Z#ej                   jH                  d,        Z%dd-d.e
j>                  e
j<                  gZ&d/d e
j>                  e
j<                  gZ'ej                   j#                  d0e&      d1        Z(ej                   j#                  d2e'      d3        Z)d4 Z*d5 Z+y6)7TestNumericalInversePolynomialc                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist0c                     dd||z  z
  z  S r&  r3   r#   s     r&   r'   z(TestNumericalInversePolynomial.dist0.pdf  r(  r(   c                 $    d||dz  dz  z
  dz   z  S r,  r3   r#   s     r&   r.   z(TestNumericalInversePolynomial.dist0.cdf  r-  r(   c                      yr/  r3   r1  s    r&   r   z,TestNumericalInversePolynomial.dist0.support  r2  r(   Nr0   r1   r2   r'   r.   r   r3   r(   r&   r4  r    s    	!	,	r(   r4  c                       e Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist1c                 F    t         j                  j                  |dz        S r8  r9  r#   s     r&   r'   z(TestNumericalInversePolynomial.dist1.pdf  r;  r(   c                 F    t         j                  j                  |dz        S r8  r?  r#   s     r&   r.   z(TestNumericalInversePolynomial.dist1.cdf  r;  r(   N)r0   r1   r2   r'   r.   r3   r(   r&   rA  r    s    	,	,r(   rA  c                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist2c                 f    dddt        j                  dt         j                  z  |z        z   z  z   S )N皙??ra   rb   r   sinr!   r#   s     r&   r'   z(TestNumericalInversePolynomial.dist2.pdf  s,    $!bffQruuWQY&7"7888r(   c                     d|dz   z  dddt         j                  z  d|z   z  z   t        j                  dt         j                  z  |z        z
  z  dt         j                  z  z  z   S )Nr  ra   g?r   r   r  r   r!   cosr#   s     r&   r.   z(TestNumericalInversePolynomial.dist2.cdf  s_    !a%LbhA..255
1CCDX  r(   c                      yr/  r3   r1  s    r&   r   z,TestNumericalInversePolynomial.dist2.support  r2  r(   Nr  r3   r(   r&   rT  r    s    	9	 
	r(   rT  c                       e Zd Zd Zd Zd Zy)$TestNumericalInversePolynomial.dist3c                 l    ddddt        j                  dt         j                  z  |z        z   z  z   z  S )Nr]   r  r  ra   rb   r  r#   s     r&   r'   z(TestNumericalInversePolynomial.dist3.pdf  s1    $RVVAbeeGAI->)>!??@@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   rJ  g
ףp=
?rb   r<   r  r#   s     r&   r.   z(TestNumericalInversePolynomial.dist3.cdf  s^    S53;qw266"RUU(3C3566!BEE'!)3D4E "F F Fr(   c                      y)N)r   r3   r1  s    r&   r   z,TestNumericalInversePolynomial.dist3.support   r2  r(   Nr  r3   r(   r&   dist3r    s    	A	F	r(   r  r\   rV  r=  gܿUUUUUU?gQ?rb   g @rW  c                 8    t        |d      }t        |||       y rY  )r
   r   r$   r4   r   r   s       r&   r]  z)TestNumericalInversePolynomial.test_basic,  s     )B?3e,r(   r  c                    g d}g d}dg}||v rt        j                  d|        ||v rt        j                  d|        t        |t              rt	        t
        |      n|} || }t               5 }|j                  t               t        |d      }d d d        ||v ry t        ||j                         |j                         g       y # 1 sw Y   :xY w)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 rZ  r   )rj   r  r  r  rh   r   r   r[  r   r
   r   r   r   )	r$   r  r  very_slow_dists
fail_distsskip_sample_moment_checkr4   r\  r   s	            r&   test_basic_all_scipy_distsz9TestNumericalInversePolynomial.test_basic_all_scipy_dists2  s    >-
 %6#6 &KK,XJ78z!KK/(45h, x( 	 V} CJJ~&,TCC ! //3tyy{DHHJ&?@ ! s   5#CCr`  c                      G d d      }||_         t        j                  ||      5  t        |ddg       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)9TestNumericalInversePolynomial.test_bad_pdf.<locals>.distNrd  r3   r(   r&   r4   r&  V  re  r(   r4   re   r   r   r   )r'   rj   r   r
   rh  s        r&   ri  z+TestNumericalInversePolynomial.test_bad_pdfT  s;    	 	]]3c*&tQF; +**   AAzlogpdf, err, msgc                      G d d      }||_         t        j                  ||      5  t        |ddg       d d d        y # 1 sw Y   y xY w)Nc                       e Zd Zy)<TestNumericalInversePolynomial.test_bad_logpdf.<locals>.distNrd  r3   r(   r&   r4   r*  ^  re  r(   r4   re   r   r   r   )logpdfrj   r   r
   )r$   r+  rk   rl   r4   s        r&   test_bad_logpdfz.TestNumericalInversePolynomial.test_bad_logpdf\  s;    	 	]]3c*&tQF; +**r'  rc   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrq  )rj   r   r
   r   rr  s       r&   rs  z3TestNumericalInversePolynomial.test_inf_nan_domainsf  s)    ]]3c*&~'7G +**rt  r   ra   '  r   rJ  r   r]   r^   r  r   c                    t               }t        |d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd       |j                  |j                  k(  sJ y # 1 sw Y   4xY w	N+=u_resolutionr  r  r  r  gdy=r   )
r   r
   r   r[  r   r   r   r   r   r   r$   r   r4   r   r\  r  r  s          r&   test_ppfz'TestNumericalInversePolynomial.test_ppfz      (EB  CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5''!*Czz~~a(H ! 	XE>yyHNN*** !    B	CC'r|  r<   r;   r   r%   c                    t               }t        |d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd       |j                  |j                  k(  sJ y # 1 sw Y   4xY wr0  )
r   r
   r   r[  r   r.   r   r   r   r   )r$   r%   r4   r   r\  r  r  s          r&   test_cdfz'TestNumericalInversePolynomial.test_cdf  r6  r7  c                     t               }t        |d      }|j                         \  }}|dk  sJ ||k  sJ t        |d      }|j                         \  }}|dk  sJ ||k  sJ y Ng|=r2  r1  )r   r
   u_error)r$   r4   r   	max_errormaes        r&   test_u_errorz+TestNumericalInversePolynomial.test_u_error  sx    (EB	35   i(EB	35   ir(   g      @   g#B;orderc                     t               }d}t        j                  t        |      5  t	        ||       d d d        y # 1 sw Y   y xY w)Nz2`order` must be an integer in the range \[3, 17\].re   rA  )r   rj   r   r   r
   )r$   rA  r4   rl   s       r&   test_bad_ordersz.TestNumericalInversePolynomial.test_bad_orders  s3    C]]:S1&t59 211s	   ?Ar3  c                     d}t        j                  t        |      5  t        t	               |       d d d        y # 1 sw Y   y xY w)Nz.`u_resolution` must be between 1e-15 and 1e-5.re   r2  )rj   r   r   r
   r   )r$   r3  rl   s      r&   test_bad_u_resolutionz4TestNumericalInversePolynomial.test_bad_u_resolution  s2    ?]]:S1&~'74@B 211r  c                     G d d      } |       }d}t        j                  t        |      5  t        |      }d d d        t	               }t        |      }d}t        j                  t        |      5  |j                  d       d d d         G d d      } |       }t        |      }d	}t        j                  t        |      5  |j                          d d d        y # 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   y xY w)
Nc                       e Zd Zd Zy)=TestNumericalInversePolynomial.test_bad_args.<locals>.BadDistc                 @    t         j                  j                  |      S r,   r?  r#   s     r&   r.   zATestNumericalInversePolynomial.test_bad_args.<locals>.BadDist.cdf  s    zzq))r(   N)r0   r1   r2   r.   r3   r(   r&   BadDistrI        *r(   rK  z9Either of the methods `pdf` or `logpdf` must be specifiedre   z4`sample_size` must be greater than or equal to 1000.r<   c                       e Zd Zd Zy)BTestNumericalInversePolynomial.test_bad_args.<locals>.Distributionc                 8    t        j                  d|z  |z        S )Nr   r   r"   r#   s     r&   r'   zFTestNumericalInversePolynomial.test_bad_args.<locals>.Distribution.pdf  s    vvdQhqj))r(   Nr  r3   r(   r&   r   rN    rL  r(   r   z!Exact CDF required but not found.)rj   r   r   r
   r   r<  )r$   rK  r4   rl   r   r   s         r&   r  z,TestNumericalInversePolynomial.test_bad_args  s    	* 	* yJ]]:S1,T2C 2 (.E]]:S1KKO 2	* 	* ~(.2]]:S1KKM 21! 21 21 21s#   C"5C.C:"C+.C7:Dc                     G d d      } |       }d |_         t        |      } |       }d |_        t        |      }t        j                  ddd      }t        |j                  |      |j                  |             y )	Nc                       e Zd Zy)JTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.MyDistNrd  r3   r(   r&   MyDistrS    re  r(   rT  c                 :    t        j                  |  | z  dz        S Nrb   )mathr"   r>   s    r&   r?   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    1"Q$q&!1r(   c                     |  | z  dz  S rV  r3   r>   s    r&   r?   zLTestNumericalInversePolynomial.test_logpdf_pdf_consistency.<locals>.<lambda>  s    r!tAvr(   r  gwJ?rt   r   )r'   r
   r+  r   r   r   r   )r$   rT  dist_pdfr{   dist_logpdfr|   qs          r&   test_logpdf_pdf_consistencyz:TestNumericalInversePolynomial.test_logpdf_pdf_consistency  sm    	 	 81)(3 h-)+6KKf#.TXXa[1r(   N),r0   r1   r2   r4  rA  rT  r  r  r  r  r   r!   r  r  r  rj   r  r   r  r]  xslowr   r#  r  ri  bad_logpdfs_commonr,  r  rs  r   rM   rI   r   r5  r%   r9  slowr?  
bad_ordersbad_u_resolutionrD  rF  r  r\  r3   r(   r&   r  r    sO    , ,
 
"	 	 Weguw0E v,Ct*C;'"%%("22
3C;)GBEE1H,<<
=CS#
C[[] _.-.- [[[[/:A ; A@ [[_o>< ?< [[/1CD< E< [[/AH BH 	Aqe$
RD	BFF7BFFBFF+	 &&#s	c3/<	A [[S!$+ %+" 
S"%	("rdRVVH66'266266	"A663
sC0BFF7Aq/	B	DA [[S!$+ %+" [[	  	  S"bffbff-JtRVVRVV4[[Wj1: 2: [[^-=>B ?B62r(   r  c            
       j   e Zd Z G d d      Z G d d      Z e        e       gZddej                  z  z  ddd	ej                  z  ej                  z  z  z
  gZd
dddej                  z  ej                  z  z  z
  dz
  gZ	ee	gZ
ej                  j                  d eee
            ej                  j                  dddg      d               Zej                  j                  de      d        Zd Zej                  j'                  d      ej                  j(                  ej                  j                  de      d                      Zej                  j'                  d      d        Zd Zddej2                  j5                  d      gZej9                  ej2                  j;                  d             d e       fddgZej                  j                  de      ej                  j                  de      d                Z d! Z!d" Z" ejF                  d#d$d%&      g g gejH                  gejJ                   ejH                  ejJ                  gdejH                  d'd(gd)d*ejJ                  gg d+ggZ&ej                  j                  d,e&      d-        Z'ej                  jP                  d.        Z)y)/TestNumericalInverseHermitec                   $    e Zd Zd Zd Zd Zd Zy)!TestNumericalInverseHermite.dist0c                 `    ddt        j                  dt         j                  z  |z        z   z  S )NrJ  r   r   r  r#   s     r&   r'   z%TestNumericalInverseHermite.dist0.pdf  s'    RVVBruuHQJ//00r(   c                 v    t         j                  t        j                  dt         j                  z  |z        z  S )Nr   r  r#   s     r&   r*   z&TestNumericalInverseHermite.dist0.dpdf  s&    55255
+++r(   c                     ddt         j                  z  d|z   z  z   t        j                  dt         j                  z  |z        z
  dt         j                  z  z  S )Nr   r   ra   r  r  r#   s     r&   r.   z%TestNumericalInverseHermite.dist0.cdf  sE    BEE1q5))BFF2bee8A:,>>2bee8LLr(   c                      yr/  r3   r1  s    r&   r   z)TestNumericalInverseHermite.dist0.support  r2  r(   Nr3  r3   r(   r&   r4  re    s    	1	,	M	r(   r4  c                   $    e Zd Zd Zd Zd Zd Zy)!TestNumericalInverseHermite.dist1c                    |dk  r=t        j                  dt         j                  z  |z        dz  t         j                  z  S |dk  ry|dk  r=t        j                  dt         j                  z  |z        dz  t         j                  z  S y )Nr   r   rJ  r\   r  r#   s     r&   r'   z%TestNumericalInverseHermite.dist1.pdf  ss    T	vvrBEEzQ./#5==BSvvrBEEzQ./#5== r(   c                 P   |dk  rKt        j                  dt         j                  z  |z        t         j                  z  t         j                  z  S |dk  ry|dk  rKt        j                  dt         j                  z  |z        t         j                  z  t         j                  z  S y )Nr   r   r\   rJ  r   r  r!   r#   s     r&   r*   z&TestNumericalInverseHermite.dist1.dpdf  s{    T	vvrBEEzQ./"%%7"%%??BSvvrBEEzQ./"%%7"%%?? r(   c                     |dk  r/ddt        j                  dt         j                  z  |z        z
  z  S |dk  ry|dk  r/ddt        j                  dt         j                  z  |z        z  z
  S y )Nr         ?ra   r   r\   rJ  r'  rn  r#   s     r&   r.   z%TestNumericalInverseHermite.dist1.cdf  sk    T	q2662:*:#;;<<BSdRVVR"%%Z1,<%==== r(   c                      y)N)r0  rJ  r3   r1  s    r&   r   z)TestNumericalInverseHermite.dist1.support  s    r(   Nr3  r3   r(   r&   rA  rk    s    	>	@	>	r(   rA  r0  rb   r  ra   r   g      пg      ?g      ?rW  rA  r;   r   c                 :    t        ||d      }t        |||       y )NrZ  )rA  rs   )r   r   )r$   r4   r   rA  r   s        r&   r]  z&TestNumericalInverseHermite.test_basic)  s     &d%bI3e,r(   rc   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrq  )rj   r   r   r   rr  s       r&   rs  z0TestNumericalInverseHermite.test_inf_nan_domains2  s)    ]]3c*#N$4VD +**rt  c           	         h d}h d}||v rt        j                  d       ||v rt        j                  d       t        j                  j                  d        t        t        |      | }t        |      }t        j                  j                  d      }t        j                  t        j                  |j                  |      |j                  |      z
        t        j                  |j                  |            z        }t        j                  t        j                  |j                  |j                  |            |z
              }	|dk  sJ |	dk  sJ y )	N>   r  r  skewnormr  >   r  nctbetawaldr  invgaussr  r  geninvgaussnorminvgaussgenhyperbolicr  zDistribution is too slowz)Fails - usually due to inaccurate CDF/PDFr   r<   :0yE>r  )rj   r  r  r   rv   rw   rh   r   r   randmaxrL  r   r.   )
r$   r  shapes
slow_distsr!  r4   fnir%   p_tolu_tols
             r&   basic_test_all_scipy_distsz6TestNumericalInverseHermite.basic_test_all_scipy_dists7  s   B
@
 z!KK23z! LLDE
		q'wuh'0%d+IINN2rvvdhhqk#''!*45bffTXXa[6IIJrvvdhhswwqz2Q678t||u}}r(   zignore::RuntimeWarning)r  r  c                 (    | j                  ||       y r,   r  )r$   r  r  s      r&   r#  z6TestNumericalInverseHermite.test_basic_all_scipy_distsP  s     	''&9r(   c                 (    | j                  dd       y )N	truncnorm)r   rb   r  r1  s    r&   test_basic_truncnorm_gh17155z8TestNumericalInverseHermite.test_basic_truncnorm_gh17155X  s    ''X>r(   c                    d}t        j                  t        |      5  t        t	               d       d d d        d}t        j                  t        |      5  t        d       d d d        d}t        j                  t        |      5  t        t	               d	       d d d        y # 1 sw Y   vxY w# 1 sw Y   QxY w# 1 sw Y   y xY w)
Nz"`order` must be either 1, 3, or 5.re   rb   rC  z`cdf` required but not foundr   z!could not convert string to floatekkir2  )rj   r   r   r   r   )r$   rf   s     r&   r   z1TestNumericalInverseHermite.test_input_validation\  s    5]]:U3#N$4A> 4 /]]:U3#F+ 4 4]]:U3#N$4179 43 43 43 43s#   B)B5
C)B25B>C
Nr   )   )r  )r   r      r  r   r   c                 &   t               }t        |      }t        |      }|j                  ||      }||j                  |k(  sJ |It        |      }|j                  |      }t        j                  j                  |      }	t        ||	       y y )N)r   rs   r   )r   r   r   ru   r   r   r  r   r   r   r   )
r$   r   r
  r  r4   r  r|   ru   r  r~   s
             r&   test_RVSz$TestNumericalInverseHermite.test_RVSn  s     %d+}gg7g599(((%d+Dlll0G::>>'*DC&	 r(   c                     d}d}t        j                  t        |      5  t        t	        j
                  |        d d d        t        t	        j
                  | d       y # 1 sw Y   'xY w)N)gdsz@g@e?zg98 : one or more intervals very short; possibly due to numerical problems with a pole or very flat tailre   r}  r2  )rj   r   r   r   r   rw  )r$   r  rf   s      r&   test_inaccurate_CDFz/TestNumericalInverseHermite.test_inaccurate_CDF  sU     :D \\.6#EJJ$78 7 	 

F 3$G	 76s   A""A+c                     t               }t        |      }t        j                         }t        |      }t	        |j                  d      |j                  d             y )Nr   r   )r   r   r   r   r   ru   )r$   rA  fni1rT  fni2s        r&   test_custom_distributionz4TestNumericalInverseHermite.test_custom_distribution  sI     &u-

&u-a0$(((2JKr(   r\   r   r.  r   rJ  r   r]   r^   r  r   c                    t               }t        |d      }t               5 }|j                  t        d       |j                  t        d       |j                  t        d       |j                  t        d       |j                  |      }t        j                  j                  |      }d d d        t        dd	       |j                  |j                  k(  sJ y # 1 sw Y   4xY w)
Nr  r2  r  r  r  r  g&.>gLa㧝=r   )
r   r   r   r[  r   r   r   r   r   r   r4  s          r&   r5  z$TestNumericalInverseHermite.test_ppf  s    %d?  CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5''!*Czz~~a(H ! 	XDu=yyHNN*** ! r7  c                 8   t               }t        |d      }|j                         \  }}|dk  sJ ||k  sJ t               5 }|j	                  t
               t        |d      }d d d        |j                         \  }}|dk  sJ ||k  sJ y # 1 sw Y   +xY wr;  )r   r   r<  r   r[  r   )r$   r4   r   r=  r>  r\  s         r&   r?  z(TestNumericalInverseHermite.test_u_error  s    %d?	35   i CJJ~&)$UCC ! 	35   i ! s   #BB)*r0   r1   r2   r4  rA  r  r   r!   r  r  r  rj   r  r   r  r]  r  rs  r  filterwarningsr]  r   r#  r  r   rv   rx   rngsappendr   r  r  r  r  r  r   rM   rI   r   r5  r_  r?  r3   r(   r&   rc  rc    s   
 " 8 WegE qw<q!BEE'"%%-00
1CQ"%%&&-
.C*C[[] _.[[Wq!f-- ..- [[/AE BE2 [[ 89[[[[3X>: ?  ::
 [[ 89? :?9 !RYY**1-.DKK		%%a()EG_i)?@E[[UD)[[0%8' 9 *'HL 	B&
RD	BFF7BFFBFF+	 &&#s	c3/<	A [[S!$+ %+" [[   r(   rc  c            
          e Zd Zh dZd Zd Zd Zej                  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                  j                  de      d        Zej                  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                  j                  de      d        Zy)TestDiscreteGuideTable>   r  r  r  c                     g d}t         j                  j                         }t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)Nr   g333333?g333333?r:   rs   guide_factorr   rv   r   rj   r   r   r	   r$   r   r   s      r&   $test_guide_factor_gt3_raises_warningz;TestDiscreteGuideTable.test_guide_factor_gt3_raises_warning  =    yy$$&\\.)r1E *))   AAc                     g d}t         j                  j                         }t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)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                  j                         }t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)Nr  r0  r  r  r  s      r&   )test_negative_guide_factor_raises_warningz@TestDiscreteGuideTable.test_negative_guide_factor_raises_warning  s?     yy$$&\\.)r2F *))r  r  c                    || j                   v rd}t        j                  |       t        |t              s|}nt        t        |      } || }|j                         }t        j                  |d   |d   z
        st        j                  d       t        j                  |d   |d   dz         }|j                  |      }|j                  d      }t        |d      }	t        |	||       y )NzYDGT fails on these probably because of large domains and small computation errors in PMF.ra   r   z$DGT only works with a finite domain.r   rZ  r   )r  rj   r  r  r  rh   r   r   r   r   r   r   r	   r   r  s
             r&   r]  z!TestDiscreteGuideTable.test_basic  s    t,,,:CKK(C(D5(+DV}{{6!9vay01 KK>?IIfQi1-XXa[

4  B7CU+r(   r   ra   r.  r   rJ  r   r]   r^   r  r   c                    d\  }}t        j                  ||      }t        |d      }t               5 }|j	                  t
        d       |j	                  t
        d       |j	                  t
        d       |j	                  t
        d       |j                  |      }t         j                  j                  |||      }d d d        t        j                  j                         t        ||       y # 1 sw Y   6xY w)N)r   r   rZ  r   r  r  r  r  )	r   r   r	   r   r[  r   r   r   r   )	r$   r   npr4   r   r\  r  r  s	            r&   r5  zTestDiscreteGuideTable.test_ppf  s    1{{1a  B7  CJJ~'MNJJ~ (7 8JJ~'JKJJ~ (4 5 ''!*C{{q!Q/H ! 	SYY/S(# ! s   BC33C<r  c                 z    t        j                  t        |      5  t        |       d d d        y # 1 sw Y   y xY wr  )rj   r   r   r	   r  s      r&   r  z"TestDiscreteGuideTable.test_bad_pv   s$    ]]:S1r" 211r  rg   c                     t        j                  t        d      5  t        t	        j
                  dd      |       d d d        y # 1 sw Y   y xY wr  )rj   r   r   r	   r   r   r  s     r&   r  z&TestDiscreteGuideTable.test_inf_domain*  s3    ]]:->?u{{2s3FC @??r  N)r0   r1   r2   r  r  r  r  rj   r  r   r   r]  r   r   rM   rI   r   r5  r  r  r  r  r3   r(   r&   r  r    sn   FFG [[/>, ?,6 	Aqe$
RD	BFF7BFFBFF+	 &&#s	c3/<	A [[S!$$ %$( [[Y6# 7# FF7BFF#bffbff%5"&&7Ibff+|-J [[Xz2D 3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                  j                  d eee	            d        Ze
j                  j                  de      d        Zd	 Zy
)TestSimpleRatioUniformsc                       e Zd Zd Zd Zd Zy)TestSimpleRatioUniforms.distc                      || _         || _        y r,   )rF  r8   rG  s     r&   r   z%TestSimpleRatioUniforms.dist.__init__5  s    DJDIr(   c                 R    || j                   z  }dt        |      dz   z  }d|z  |z  S rI  rK  rM  s      r&   r'   z TestSimpleRatioUniforms.dist.pdf9  rO  r(   c                 P    || j                   z  }|dk  rdd|z
  z  S ddd|z   z  z
  S rR  rE  r#   s     r&   r.   z TestSimpleRatioUniforms.dist.cdf>  rS  r(   N)r0   r1   r2   r   r'   r.   r3   r(   r&   r4   r  4  s    		
	+r(   r4   r\   rU  rW  c                     t        ||j                  d      }t        |||       t        ||j                  |j                  |j                        d      }t        |||       y )NrZ  )r8   rs   )r8   cdf_at_moders   )r   r8   r   r.   r	  s       r&   r]  z"TestSimpleRatioUniforms.test_basicL  sU     "$TYYRH3e,!$TYY.2hhtyy.A/13 	3e,r(   rc   c                     t        j                  ||      5  t        t               |       d d d        y # 1 sw Y   y xY wrq  )rj   r   r   r   rr  s       r&   rs  z,TestSimpleRatioUniforms.test_inf_nan_domainsX  s)    ]]3c* 0@ +**rt  c                     t        j                  t        d      5  t        t	               dd       d d d        y # 1 sw Y   y xY w)Nz`pdf_area` must be > 0re   r   r0  )r8   pdf_area)rj   r   r   r   r   r1  s    r&   r  z%TestSimpleRatioUniforms.test_bad_args]  s-    ]]:-FG 0q2F HGGs	   <AN)r0   r1   r2   r4   r  r   rI   r  r  r  rj   r  r   r  r]  r  rs  r  r3   r(   r&   r  r  0  s    + +" "XtF|$E rvv,C266
C*C[[] _.-.- [[/AA BAGr(   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)TestRatioUniformsz# Tests for rvs_ratio_uniforms.
    c           	      :   t         j                  j                  }t        j                   |t        j                  d                  t        j                  d      z  }t        j                   |d            }t        ||| |d      }t        t        j                  |j                  d      d      d   dkD  d	       t        d
 dddt        j                  d      z  d      }t        t        j                  |j                  d      d      d   dkD  d	       y )Nrb   r   i90  umaxvminvmaxrs   i	  r   ra   rp  Tc                 .    t        j                  |        S r,   rP  r>   s    r&   r?   z6TestRatioUniforms.test_rv_generation.<locals>.<lambda>q  s    bffaRjr(   r0  r  expon)
r   r   r'   r   r    r   r   kstestru   r"   )r$   fvr   r   s        r&   test_rv_generationz$TestRatioUniforms.test_rv_generationg  s     JJNNGGAbggajM"RWWQZ/GGAaDMAAQBQUKU\\#''$-8;dBDI 0q!"266":EKU\\#''$-9!<tCTJr(   c                 L   t         j                  j                  }t        j                   |t        j                  d                  t        j                  d      z  }t        j                   |d            }t        ||| |d      }t        ||| |d      }t        ||| |d      }|j                  d      |j                  d      |j                  d      }	}}t        ||       t        ||	j                                t        |j                  d       t        |	j                  d       t        ||| |d      }
t        ||| |d      }|
j                  d	
      |j                  d
      }}t        |j                         |       t        |j                  d	       t        ||| |d      }t        ||| |d      }t        ||| |d      }|j                         |j                  d      |j                  d      }}}t        ||       t        ||       y )Nrb   r     r  r;   r   )r;   ra   r   )r;   r;   r;   r     ra   r   )
r   r   r'   r   r    r   ru   r   flattenr   )r$   r  r  r   gen1gen2gen3r1r2r3gen4gen5r4r5gen6gen7gen8r6r7r8s                       r&   
test_shapezTestRatioUniforms.test_shapeu  s   JJNNGGAbggajM"RWWQZ/GGAaDMQQaRadKQQaRadKQQaRadKXXa[$((4.$((62BBRR&RXXt$RXXv&QQaRabIQQaRabIy)4888+<BRZZ\2&RXXy)QQaRadKQQaRadKQQaRadKXXZ!dhhtnBRRr(   c                    t         j                  j                  }t        j                   |t        j                  d                  t        j                  d      z  }t        j                   |d            }t        ||| |d      }|j                  d      }t        j                  j                  d       t        ||| |      }|j                  d      }t        ||       y )Nrb   r   r  r  r<   )r  r  r  )
r   r   r'   r   r    r   ru   rv   rw   r   )r$   r  r  r  r  r  r  r  s           r&   r   z#TestRatioUniforms.test_random_state  s    JJNNGGAbggajM"RWWQZ/wwqt}QTNXXb\
		tQT;XXb\Rr(   c                    t         j                  j                  }t        t        d      5  t        |ddd       d d d        t        t        d      5  t        |ddd       d d d        t        t        d      5  t        |ddd       d d d        t        t        d      5  t        |ddd       d d d        y # 1 sw Y   xY w# 1 sw Y   hxY w# 1 sw Y   KxY w# 1 sw Y   y xY w)	Nzvmin must be smaller than vmaxre   ra   r;   )r'   r  r  r  zumax must be positiver0  r   )r   r   r'   assert_raisesr   r   )r$   r  s     r&   test_exceptionsz!TestRatioUniforms.test_exceptions  s    JJNN:-MNaaaa8 O:-MNaaaa8 O :-DEabqq9 F:-DEaaaa8 FE ONNN FEEEs/   C C>C'C$ C	CC!$C-N)r0   r1   r2   __doc__r  r  r   r  r3   r(   r&   r  r  c  s    K8	9r(   r  )gHz>r   )r  r   )Lr   r   rj   copyr   r  r  rW  numpyr   numpy.testingr   r   r   scipy.stats.samplingr   r   r	   r
   r   r   r   r   r   r  scipyr   r   scipy.statsr   r   scipy.stats._distr_paramsr   r   scipy._lib._utilr   r   all_methodsimplementationnameversionfloaterrr  r  r  r  r^  rM   rI   r  r   bad_sized_domainsbad_domainsr  nan_domainsr  r   rp   r   r   r   r   r   r   r   r   r   r   r   r"  r  r  rc  r  r  r  r3   r(   r&   <module>r     s        
   J J	 	 	 +   1 < /	 	 #V^-=$>?&"345F$567!FN,<#=>)9 :;^%5qAB v%&&3@H/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	  [*+[*+ {,-ffbff{$45	vvgw&67ffrvvg%56	vvgrvv
$:;ffbffz#9:	 [*45ffbffz#9: +$'88$%& );7( 8&( );7/ 8/8	.#b );7/ 8/  "2 3	+3	+/*
 D  $C D8D8 $=$@$B CX9 X9CX9v{. {.|r' r'j2 2DT  T nfD fDR0G 0GfD9 D9r(   