
    _Mh                        d dl Z d dlmZ d dlmZmZ d dlZd dlZd dl	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 d d	lmZmZmZmZmZmZmZmZ  G d
 d          Z G d d          Z G d dej                  Z d Z!d Z"d Z#d Z$ G d d          Z% G d de%          Z& G d de%          Z' G d de%          Z( G d de%          Z) G d d          Z* G d  d!          Z+ G d" d#          Z, G d$ d%          Z-d& Z.ej/        0                    d'ej1        ej2        ej3        ej4        g          d(             Z5dS ))    N)Counter)combinationsproduct)assert_allcloseassert_equalassert_array_equalassert_array_less)distance)shapiro)_test_find_index)qmc)van_der_corputn_primesprimes_from_2_toupdate_discrepancy	QMCEngine_l1_norm_perturb_discrepancy&_lloyd_centroidal_voronoi_tessellationc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                            d	d
          d             Zd Zd Zd Zd Zd ZdS )	TestUtilsc                 (   dgdgdgg}dgdgdgg}t          j        |dd          }t          ||           ddgddgddgg}t          j        ddgddgg          }ddgddgdd	gg}t          j        ||d         |d                   }t          ||           t          j        ||d         |d         d
          }t          ||           g dg dg dg}dg d}}g dg dg dg}t          j        |||          }t          ||           d S )Nr            ?      l_boundsu_bounds         @Tr   r    reverser   r   r   )r   r   r   )r   r   r   )r   r!      )r&   r"         ?)r   scaler   nparray)selfspaceoutscaled_spaceboundsscaled_back_spacer   r    s           Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/stats/tests/test_qmc.py
test_scalezTestUtils.test_scale   so   qcC5!taS1#ya@@@c*** Q!Q#s,B7QF+,,AwAC)yVAYOOOc***IlVAY/5ay$H H H)5111 III7			(yy)))]]]3yHMMMc*****    c                 P   t           j                            d          }|                    d          }|                    d           dz  }|                    d          dz  }t          j        |||d          }t          j        |||d          }t          ||           d S )Nl	   EaT4G*wv    
   r7   F)r$   T)r)   randomdefault_rngr   r(   r   )r+   rngsampleabscaledunscaleds          r1   test_scale_randomzTestUtils.test_scale_random4   s    i##$KLLH%%ZZ^^Ob JJrNNR61a7779VQ4888&)))))r3   c                 8   t          j        t          d          5  g d}t          j        |dd           d d d            n# 1 swxY w Y   t          j        t          d          5  ddgd	d	gd
d
gg}t          j        ddgddgg          }t          j        ||d         |d	                    d d d            n# 1 swxY w Y   t          j        t          d          5  ddgd	d	gd
d
gg}g dddg}}t          j        |||           d d d            n# 1 swxY w Y   t          j        t          d          5  ddgd	d	gd
d
gg}t          j        g dg dg          }t          j        ||d         |d	                    d d d            n# 1 swxY w Y   t          j        t          d          5  ddgd	dgd
d
gg}t          j        ddgddgg          }t          j        ||d         |d	                    d d d            n# 1 swxY w Y   t          j        t          d          5  ddgddgddgg}t          j        ddgddgg          }t          j        ||d         |d	         d           d d d            d S # 1 swxY w Y   d S )NSample is not a 2D arraymatchr   r   r   r   r   r   zBounds are not consistentr   r   r   r!   z/'l_bounds' and 'u_bounds' must be broadcastable)r   r   r   )r   r!   r!   Sample is not in unit hypercuber'   zSample is out of bounds   r"   Tr#   )pytestraises
ValueErrorr   r(   r)   r*   )r+   r,   r/   r   r    r-   s         r1   test_scale_errorszTestUtils.test_scale_errors=   s   ]:-HIII 	6 	6KKEIeb15555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ]:-IJJJ 	E 	EVaVc3Z0EXAwA/00FIefQi&)DDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E
 ]: .G H H H 	C 	CVaVc3Z0E!+aVhHIehBBBB		C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C ]: .G H H H 	E 	EVaVc3Z0EXzzz999566FIefQi&)DDDD		E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E ]: .: ; ; ; 	E 	EVaXSz2EXAwA/00FIefQi&)DDDD		E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E ]:-GHHH 	$ 	$7QFQH-CXAwA/00FIcF1Iq	"$ $ $ $	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$so   AAA*A	B??CC%+DD #D A	FFF=A	HHH8A
JJJc           
      V   t          j        ddgddgddgddgddgddgg          }d|z  dz
  d	z  }t          j        ddgddgddgddgddgddgg          }d|z  dz
  d	z  }t          t          j        |          d
d           t          t          j        |          dd           t          j        g dg dg dg dg dg dg dg          }d|z  dz
  dz  }t          t          j        |d          dd           t          t          j        |d          dd           t          t          j        |d          dd           dD ]U}t          j        d| z            }t          t          j        t          j        dg|z  g          d          |           Vd S )Nr   r&   r   r      r!          @      ?      (@ǘ?-C6?atolg/$?r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r         @MDmethodr"   WDS?CD:M?r   rM   rG          @   L2-star)r)   r*   r   r   discrepancysqrt)r+   space_1space_2r;   dimrefs         r1   test_discrepancyzTestUtils.test_discrepancy_   s?   (QFQFQFQFQFQFKLL=3&95(QFQFQFQFQFQFKLL=3&95 	00&tDDDD00&tDDDD
 ---------------------/ 0 0 ,$3t<<<f!	# 	# 	# 	#t<<<f!	# 	# 	# 	#t<<<f!	# 	# 	# 	# ) 	D 	DC'!sd)$$CCOBHqc#gY,?,?3<> > >?BD D D D	D 	Dr3   c           	         t          j        ddgddgddgddgddgddgg          }t          j        t          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j        t          d	          5  t          j        ddg           d d d            n# 1 swxY w Y   d
d
gddgddgg}t          j        t          d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr   r&   r   r   rM   r!   rF   rC   rB   r   r   'toto' is not a valid ...totor^   )r)   r*   rH   rI   rJ   r   ri   r+   r;   s     r1   test_discrepancy_errorsz!TestUtils.test_discrepancy_errors   s   Aq6Aq6Aq6Aq6Aq6Aq6JKK]@
 
 
 	$ 	$ OF###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$
 ]:-HIII 	$ 	$OQF###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ a&1a&3*-]:-IJJJ 	3 	3OF62222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s6   A##A'*A'	B,,B03B0DDDc           
      j   t          j        g dg dg dg dg dg dg dg          }d|z  d	z
  d
z  }t          t          j        |dd          dd           t          t          j        |dd          dd           t          t          j        |dd          dd           dD ]V}t          j        d| z            }t          t          j        t          j        dg|z  g          dd          |           W|                    t          dd            t          j	        t          d          5  t          j        |d           d d d            n# 1 swxY w Y   t          j	        t          d          5  t          j        |d            d d d            d S # 1 swxY w Y   d S )!NrU   rV   rW   rX   rY   rZ   r[   rN   rO   r\   r]   rG   )r_   workersr"   rR   rS   r`   ra   rb   rc   rd   r&   r   rh   	cpu_countc                      d S N r{   r3   r1   <lambda>z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    T r3   zCannot determine therC   rv   zInvalid number of workers...r   )r)   r*   r   r   ri   rj   setattrosrH   rI   NotImplementedErrorrJ   )r+   monkeypatchr;   rm   rn   s        r1   test_discrepancy_parallelz#TestUtils.test_discrepancy_parallel   s   ---------------------/ 0 0 ,$3tQGGG!	# 	# 	# 	# 	tQGGG!	# 	# 	# 	# 	tQGGG!	# 	# 	# 	# ) 	P 	PC'!+&&CCOBHqcCi[,A,A3<bJ J JKNP P P P 	B\\:::].6LMMM 	0 	0OFB////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 ]:-KLLL 	0 	0OFB////	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s$   ;EE"%E"F((F,/F,c           	         t          j        ddgddgddgddgddgddgg          }t          j        t          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j        t          d	          5  t          j        ddg           d d d            n# 1 swxY w Y   d
d
gddgddgg}t          j        t          d          5  t          j        |d           d d d            n# 1 swxY w Y   t          j        d
d
gd
d
gd
dgg          }t          j        t          d          5  t          j        |           d d d            n# 1 swxY w Y   t          j        ddgg          }t          j        t          d          5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   r&   r   r   rM   r!   rF   rC   rB   r   r   rq   rr   r^   z!Sample contains duplicate points.z'Sample must contain at least two points)	r)   r*   rH   rI   rJ   r   geometric_discrepancywarnsUserWarningrs   s     r1   !test_geometric_discrepancy_errorsz+TestUtils.test_geometric_discrepancy_errors   s   Aq6Aq6Aq6Aq6Aq6Aq6JKK]:-OPPP 	. 	.%f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. ]:-HIII 	. 	.%q!f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. a&1a&3*-]:-IJJJ 	= 	=%fV<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= Aq6Aq6Aq6233\+-PQQQ 	. 	.%f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. C:,'']:-VWWW 	. 	.%f---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.sZ   A##A'*A'	B,,B03B0D  DDE$$E(+E(!GG
Gc                    t          j        ddgddgg          }t          t          j        |          t          j        d                     t          t          j        |d          t          j        d                     t          j        ddgddgddgg          }t          t          j        |          d           t          t          j        |d          d           t          j        ddgddgddgg          }t          t          j        |          t          j        d          d	z             t          t          j        |d          t          j        d          dz             t          t          j        |d
          d           t          t          j        |dd
          d           t           j                            d          }t          j        d|                              d          }t          t          j        |          d           t          t          j        |d          d           d S )Nr   r   r   mstr^   r         ?      ?rM   	chebyshev)metric)r_   r   l	   s;80riR$ r&   dr:   2   gY$?guڗ8?)	r)   r*   r   r   r   rj   r8   r9   LatinHypercube)r+   r;   r:   s      r1   test_geometric_discrepancyz$TestUtils.test_geometric_discrepancy   s   Aq6Aq6*++1&99271::FFF1&GGGQRTTTAq6Aq6C84551&993???1&GGGNNNAq6D$<!Q8991&99271::>JJJ1&GGGQRVWXXX1&MMMtTTT%fU;OOOQT	
 	
 	
 i##$KLL#aS11188<<1&99;NOOO%fU;;;=P	
 	
 	
 	
 	
r3   z5minimum_spanning_tree ignores zero distances (#18892)T)reasonstrictc                     t          j        ddgddgddgg          }t          t          j        |d          d           d S )Nr   r   r   r^   r   )r)   r*   r   r   r   rs   s     r1   2test_geometric_discrepancy_mst_with_zero_distancesz<TestUtils.test_geometric_discrepancy_mst_with_zero_distances   sL    
 Aq6Aq6Aq62331&GGGMMMMMr3   c           	      b   t          j        ddgddgddgddgddgddgg          }d|z  dz
  d	z  }t          j        |d d
         d          }t	          |d
         |d d
         |          }t          |dd           t           j                            d          }|                    d          }t          j        |          }t          j        |d d
         d          }t	          |d
         |d d
         |          }t          ||d           t          j	        t          d          5  t	          |d
         |d d
         dz   |           d d d            n# 1 swxY w Y   t          j	        t          d          5  t	          |d
         |d         |           d d d            n# 1 swxY w Y   ddg}t          j	        t          d          5  t	          ||d d
         |           d d d            n# 1 swxY w Y   ddgg}t          j	        t          d          5  t	          ||d d
         |           d d d            n# 1 swxY w Y   g d}t          j	        t          d          5  t	          ||d d
         |           d d d            d S # 1 swxY w Y   d S )Nr   r&   r   r   rM   r!   rN   rO   rP   rw   T)	iterativerQ   rR   rS   l	   gy,!uUxFYo9"] )rM   r7   rF   rC   rB   r   zx_new is not in unit hypercuber   zx_new is not a 1D array)g333333?皙?r   z&x_new and sample must be broadcastable)r)   r*   r   ri   r   r   r8   r9   rH   rI   rJ   )r+   rk   	disc_init	disc_iterr:   disc_refx_news          r1   test_update_discrepancyz!TestUtils.test_update_discrepancy   s/   (QFQFQFQFQFQFKLL=3&95OGCRCLDAAA	&wr{GCRCL)LL		65555 i##$KLL**W%%?7++OGCRCLDAAA	&wr{GCRCL)LL		8$7777 ]: .: ; ; ; 	I 	Iwr{GCRCL1,<iHHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I ]:-HIII 	C 	Cwr{GAJ	BBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C A]: .: ; ; ; 	? 	?ugcrclI>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? s]:-GHHH 	? 	?ugcrclI>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? ]: .> ? ? ? 	? 	?ugcrclI>>>	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	?sZ   3#E""E&)E&F22F69F6HH	H-III=J$$J(+J(c                    t           j                            d          }t          j        d|          }|                    d          }t          j        |          }t          d          D ]}|                    d          }|                    d          }|                    d          }t          |||||          }|||f         |||f         c|||f<   |||f<   t          j        |          }	t          ||	           d S )Nl	   PvWuW=lWx" r!   r:   r7   d   )
r)   r8   r9   r   r   ri   rangeintegersr   r   )
r+   r:   qmc_genr;   discirow_1row_2coldisc_references
             r1   test_perm_discrepancyzTestUtils.test_perm_discrepancy  s   i##$JKK$QC000##v&&s 		2 		2ALL$$ELL$$E,,q//C'uc4HHDucz"F5#:$6 3F5#:ucz 2 _V44ND.1111		2 		2r3   c                    d }d }d }d }t           j                            d          }|                    d          }t          j        |d          } ||          }t          ||           t          j        |d	          } ||          }t          ||           t          j        |d
          } ||          }t          ||           t          j        |d          } ||          }t          ||           dS )z,Alternative definitions from Matt Haberland.c                 f   | j         \  }}| }t          j        t          j        ddt          j        |dz
            z  z   dt          j        |dz
            dz  z  z
  d                    }| d d d d d f         }| d d d d d f         }t          j        t          j        t          j        ddt          j        |dz
            z  z   dt          j        |dz
            z  z   dt          j        ||z
            z  z
  d          d                    }d|z  d|z  |z  z
  d|dz  z  |z  z   S )Nr   r   r   axisr   gUUUUUU?shaper)   sumprodabsxnsxijdisc1xkjdisc2s          r1   disc_c2zFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_c2)  so   7DAqCF27A&)"&S//&9%:&)"&S//1*<&<%=DEG G G H HE D!!!QQQJ-CAAAtQQQJ-CF26"'!,/sSy0A0A,A+B,/sSy0A0A,A+B -0sSy0A0A,A+B IJ#K #K #K ()	* * * + +E
 A:!e+a1fUl::r3   c                 T   | j         \  }}| d d d d d f         }| d d d d d f         }t          j        t          j        t          j        dt          j        ||z
            z
  t          j        ||z
            dz  z   d          d                    }d|z   d|dz  z  |z  z   S )Nr'   r   r   r   gUUUUUU?r   r   )r   r   r   r   r   r   s         r1   disc_wdzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wd8  s    7DAqD!!!QQQJ-CAAAtQQQJ-C6"&+-6#)+<+<*=+-6#)+<+<a+?*@FG"I "I "I '() ) ) * *D 1H9qAv},,r3   c                    | j         \  }}| }t          j        t          j        ddt          j        |dz
            z  z
  dt          j        |dz
            dz  z  z
  d                    }| d d d d d f         }| d d d d d f         }t          j        t          j        t          j        ddt          j        |dz
            z  z
  dt          j        |dz
            z  z
  dt          j        ||z
            z  z
  dt          j        ||z
            dz  z  z   d          d	                    }d
|z  d|z  |z  z
  d|dz  z  |z  z   S )Ng?r   r   r   r   r   g      ?r   r   gUUUUUU?r   r   s          r1   disc_mdzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdB  s   7DAqCF27C&)"&S//&9%:&)"&S//1*<&<%=DEG G G H HE D!!!QQQJ-CAAAtQQQJ-CF26"'$,/sSy0A0A,A+B,/sSy0A0A,A+B -0sSy0A0A,A+B -0sSy0A0A10D,D	+E
 01#2 #2 #2
 9:; ; ; < <E A:!e+a1fUl::r3   c                 *     j         \  }t          j        d| z  dd|z
  z  z  t          j        t          j        d dz  z
  d                    z  z
  t          j         fdt                    D                       dz  z  z             S )Nr&   r   r   r   c                     g | ]R}t                    D ]@}t          j        d t          j        |ddf         |ddf                   z
            ASS )r   N)r   r)   r   maximum).0kjr   r   s      r1   
<listcomp>z_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>W  sv       uQxx *+ GA
1QT7AadG < <<==   r3   )r   r)   rj   r   r   r   )r   r   r   s   ` @r1   disc_star_l2zKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2R  s    7DAq7qb	A!a%L1,&Q!V!444556 6&     "1XX     !V  r3   l	   j;<Q`siyX r5   rb   r^   r`   r]   rh   N)r)   r8   r9   r   ri   r   )	r+   r   r   r   r   r:   r;   	disc_currdisc_alts	            r1   +test_discrepancy_alternative_implementationz5TestUtils.test_discrepancy_alternative_implementation&  s3   	; 	; 	;	- 	- 	-	; 	; 	; 		 		 		 i##$KLLH%%OF4888	76??	8,,,OF4888	76??	8,,,OF4888	76??	8,,,OF9===	<''	8,,,,,r3   c                     t          d          }|d         dk    sJ t          d          }|d         dk    sJ t          d          }|d         dk    sJ d S )Nr7   rw         i  i^  i5	  )r   )r+   primess     r1   test_n_primeszTestUtils.test_n_primesp  sh    "bzR#bzS    #bzT!!!!!!r3   c                 L    t          d          }g d}t          ||           d S )Nr   )r   r&   r!                     r      %   )   +   /   )r   r   )r+   r   r-   s      r1   test_primeszTestUtils.test_primesz  s0    !"%%FFF$$$$$r3   N)__name__
__module____qualname__r2   r@   rK   ro   rt   r   r   r   rH   markxfailr   r   r   r   r   r   r{   r3   r1   r   r      s        + + +<* * * $  $  $D#D #D #DJ3 3 3!0 !0 !0F. . .*
 
 
0 [J   N N	 N(? (? (?T2 2 2"H- H- H-T" " "% % % % %r3   r   c                        e Zd Zd Zd Zd ZdS )TestVDCc                 "   t          d          }g d}t          ||           t          dd          }t          ||           t          dd          }t          ||           t          dd          }t          ||dd                     d S )	Nr7   )
        r   r   r         ?      ?      ?      ?g      ?g      ?rM   r}   rG   r   r&   )start_indexr   r   )r+   r;   r-   s      r1   test_van_der_corputzTestVDC.test_van_der_corput  s    ##- - -$$$A...$$$A...$$$q111ABB(((((r3   c                 4   d}t          dd|          }t          ddd|          }t          ||dd                     t          ddd|d	          }t          ||dd                     t          ddd|d
	          }t          ||dd                     d S )Nl	   	XCf
Kl<{O8 r7   Tscrambler:   r   r&   )r   r   r:   rM   )r   r   r:   rv   rG   r   )r+   r:   r-   r;   s       r1   test_van_der_corput_scramblez$TestVDC.test_van_der_corput_scramble  s    5R$C888q4SIIIABB(((1ta
 
 
 	ABB(((1ta
 
 
 	ABB(((((r3   c                     t          j        t          d          5  t          dd           d d d            d S # 1 swxY w Y   d S )Nz'base' must be at least 2rC   r7   r   )base)rH   rI   rJ   r   r+   s    r1   test_invalid_base_errorzTestVDC.test_invalid_base_error  s    ]:-IJJJ 	' 	'2A&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   ;??N)r   r   r   r   r   r   r{   r3   r1   r   r     sA        ) ) )) ) )"' ' ' ' 'r3   r   c                   .     e Zd Zd fd	ZddddZ xZS )RandomEngineNc                 P    t                                          |||           d S )N)r   optimizationr:   )super__init__)r+   r   r   r:   	__class__s       r1   r   zRandomEngine.__init__  s(    1<SAAAAAr3   r   r}   c                H    | j                             || j        f          }|S rz   )r:   r8   r   )r+   r   rv   r;   s       r1   _randomzRandomEngine._random  s     !TV--r3   )NN)r   )r   r   r   r   r   __classcell__)r   s   @r1   r   r     sc        B B B B B Ba         r3   r   c                     t          dd          } |                     d          }|                     d          }| j        dk    sJ |                                  | j        dk    sJ |                     d          }t	          ||           |                                  |                     d           |                     d          }t	          ||           | j        dk    sJ d S )	Nr   l	   F,@IY^+Ge r   r!   r   r      r   )r   r8   num_generatedresetr   fast_forward)enginesample_1sample_2sample_1_testsample_2_tests        r1   test_subclassing_QMCEnginer    s    !!HIIIF}}q}!!H}}q}!!H2%%%% LLNNN1$$$$MMAM&&M=))) LLNNN
!MMAM&&M=)))2%%%%%%r3   c                     t          j        t          d          5  t          d           d d d            n# 1 swxY w Y   t          j        t          d          5  t          d           d d d            n# 1 swxY w Y   d} t          j        t          |           5  t          d          }|                    dd           d d d            d S # 1 swxY w Y   d S )	Nz d must be a non-negative integerrC   )r   rw   z*'u_bounds' and 'l_bounds' must be integersr   g?r   )rH   rI   rJ   r   r   )msgr  s     r1   test_raisesr    s   	z)L	M	M	M  T               
z)L	M	M	M  R               8C	z	-	-	- 2 2aS1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s0   8<<A::A>A>"'CCCc                     t          dd          } |                     dd          }t          t          j        |          dg           |j        t          j        d          k    sJ |                     ddd	          }t          t          j        |          ddg           d
}d}|                                  |                     d          }|||z
  z  |z   }t          j        |          	                    t          j
                  }|                                  |                     ||dd          }t          ||           |                     ||dd          }t          |                                |                                f||dz
  f           |                     ||dd          }t          |                                |                                f||f           d S )Nr   l	   llG[/Ww r   r7   r  r   int64T)r   endpointr      Fr    r   r  r   )r   r   r   r)   uniquedtyper  r8   floorastyper  minmax)r  r;   lowhigh
ref_samples        r1   test_integersr    s   !!HIIIF __Q"_%%F6""QC(((<28G,,,,,,__Q"t_44F6""QF+++
CD LLNNNr""Jtcz*S0J*%%,,RX66J
LLNNN__S42_FFF$$$ __S43_GGF&**,,

-T!V}===__S43_FFF&**,,

-T{;;;;;r3   c                  V   d} t           j                            d          }|                    dd|           }|                    dd| d	          }t	          | |
          }|                    ||dd          }t          |                    d          |           t          |                    d          |dz
             |                    ||dd          }t          |                    d          |           t          |                    d          |           d S )Nr7   l	   G]	#0m$ave r  rw   )r  r  sizer   r!   T)r  r  r!  r  r   r   Fr  r   r   )r)   r8   r9   r   r   r   r  r  )r   r:   r  r  r  r;   s         r1   test_integers_ndr"    s   
A
)

 E
F
FC
,,2BQ,
/
/C<<AAA<==D!%%%F__S43_GGF##S)))##T!V,,,__S43_FFF##S)))##T*****r3   c                      e Zd ZdZeZeZeZeZddgZ	ddgZ
	 ddedefd	Zdedej        fd
Zej                            de	e
          d             Zej                            de	e
          d             Zej                            de	e
          d             Zej                            de	e
          d             Zej                            de	e
          d             Zej                            de	e
          d             Zej                            de	e
          ej                            ddej                            d          df          d                         Zej                            de	e
          d             Zej                            ddg          d             Zd Zej                            dde j!        fdd fg          d             Z"d Z#dS )QMCEngineTestszGeneric tests for QMC engines.TF	ScrambledUnscrambled	   \v$PdvuL2+C r   returnc                 |    | j         r | j        d||d|S |rt          j                     d S  | j        dd|i|S )N)r   seedr*  r{   )can_scrambleqmcerH   skip)r+   r   r:   kwargss       r1   r  zQMCEngineTests.engine  sb      	549ChSCCFCCC 5 ty44c4V444r3   c                 "    |r| j         n| j        S rz   )scramble_ndunscramble_nd)r+   r   s     r1   	referencezQMCEngineTests.reference   s    #+Ct1CCr3   )idsc                     |                      d|          }|                    d          }t          t          j        d          |           d S )Nr   r   r   rM   )rM   r   r  r8   r   r)   emptyr+   r   r  r;   s       r1   	test_0dimzQMCEngineTests.test_0dim#  H    q844q!!28F++V44444r3   c                     |                      d|          }|                    d          }t          t          j        d          |           d S )Nr   r5  r   r   r   r6  r8  s       r1   test_0samplezQMCEngineTests.test_0sample)  r:  r3   c                 x    |                      d|          }|                    d          }d|j        k    sJ d S )Nr   r5  r   r   r   )r  r8   r   r8  s       r1   test_1samplezQMCEngineTests.test_1sample/  sA    q844q!!%%%%%%r3   c                     |                      d|          }|                    d          }t          j        |dk              sJ t          j        |dk              sJ d S )Nr   r5     r   r   )r  r8   r)   allr8  s       r1   test_boundszQMCEngineTests.test_bounds5  sb    sX66s##vfk"""""vfk"""""""r3   c                     |                      |          }|                     d|          }|                    t          |                    }t	          ||d           |j        t          |          k    sJ d S )Nr   r   r5  r  r   rS   )r2  r  r8   lenr   r  )r+   r   r  r  r;   s        r1   test_samplezQMCEngineTests.test_sample<  sx    ^^X^66
q844Z11
6666#s:666666r3   c                 >   |                      d|          }|                    d          }|                      d|          }t          |          dz  }|                    |          }|                    |          }t          |||d          d           d S )Nr   r5  rG   r  r   rS   )r  r8   rG  r   )r+   r   r  r  n_half_r;   s          r1   test_continuingzQMCEngineTests.test_continuingE  s    q844]]Q]''
q844ZA%MMFM##((
677 3$??????r3   r:   Nc                     |                      d||          }|                    d          }|                                 |j        dk    sJ |                    d          }t	          ||           d S )Nr   r   r   r:   rG   r  r   )r  r8   r  r  r   )r+   r   r:   r  r  r;   s         r1   
test_resetzQMCEngineTests.test_resetR  sx     q8==]]Q]''
#q((((##
+++++r3   c                 v   |                      d|          }|                    d          }|                      d|          }|                    d           |                    d          }t          ||dd          d           |                                 g }t          d          D ]H}|dz  dk    r(|                    |                                           3|                    d	           It          |d
 t          d          D                      t          j        |          d           d S )Nr   r5  rG   r  rM   r   rS   r   r   c                 $    g | ]}|d z  dk    |S )r   r   r{   )r   r   s     r1   r   z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>z  s!    :::aq1uzzzzzr3   h㈵>)	r  r8   r  r   r  r   appendr)   concatenate)r+   r   r  r  r;   
even_drawsr   s          r1   test_fast_forwardz QMCEngineTests.test_fast_forwarde  s=   q844]]Q]''
q844A##
122T:::: 	
q 	' 	'A1uzz!!&--//2222##A&&&&::588:::;N:&&	
 	
 	
 	
 	
 	
r3   c                    d}|                      ||          }|                    d          }t          t          j        |d          t          j        d|          d           t          t          j        |d	d          t          j        d
|          d           t          t          j        |dd          t          j        d|          d           d S )Nr   r5  i   r   r   r   {Gz?rS      r   K   r   )r  r8   r   r)   meanrepeat
percentile)r+   r   r   r  r;   s        r1   test_distributionz QMCEngineTests.test_distribution  s    q844t$$GF###RYsA%6%6T	
 	
 	
 	
 	M&"1---ryq/A/A	
 	
 	
 	
 	M&"1---ryq/A/A	
 	
 	
 	
 	
 	
r3   c                     d}t          j        t          |          5  |                     ddd           d d d            d S # 1 swxY w Y   d S )Nz)'toto' is not a valid optimization methodrC   r   Frr   r   r   r   )rH   rI   rJ   r  r+   messages     r1   test_raises_optimizerz$QMCEngineTests.test_raises_optimizer  s    >]:W555 	B 	BKK!e&KAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   AAAzoptimization,metric	random-CDlloydc                 "    t          |            S rz   )r   r;   s    r1   r|   zQMCEngineTests.<lambda>  s    hv&6&6%6 r3   c                     |                      dd          }|                    d          } ||          }|                      dd|          }|                    d          } ||          }||k     sJ d S )Nr   Fr5  rg   r  r`  )r  r8   )	r+   r   r   r  
sample_ref
metric_refoptimal_sample_metric_s	            r1   test_optimizerszQMCEngineTests.test_optimizers  s     q511]]R]((
VJ''
;;U;NN//B/''&//######r3   c                 *   t           j                            d          }g }t          d          D ]B}|                     dd|          }|                    |                    d                     Ct          j        t          d          5  t          |d	         |d
                    d d d            n# 1 swxY w Y   t          j        t          d          5  t          |d	         |d                    d d d            d S # 1 swxY w Y   d S )Nl	   B"V6DGlUN r&   r   TrN  rM   zArrays are not equalrC   r   r   )
r)   r8   r9   r   r  rS  rH   rI   AssertionErrorr   )r+   r:   r;   r   r  s        r1   test_consume_prng_statez&QMCEngineTests.test_consume_prng_state  s   i##$FGGq 	, 	,A[[1t[==FMM&--**++++]>1GHHH 	/ 	/F1I...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/]>1GHHH 	/ 	/F1I...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s$   B88B<?B<DDD)r'  )$r   r   r   __doc__NotImplementedr,  r+  r1  r0  r   r3  boolr   r  r)   ndarrayr2  rH   r   parametrizer9  r=  r@  rD  rH  rL  r8   r9   rO  rV  r^  rc  r   ri   rn  rq  r{   r3   r1   r$  r$    s       ((D!L"M Ke}H
&C 45 55 
	5 5 5 5 D$ D2: D D D D [Zs;;5 5 <;5
 [Zs;;5 5 <;5
 [Zs;;& & <;&
 [Zs;;# # <;# [Zs;;7 7 <;7 [Zs;;
@ 
@ <;
@ [Zs;;[3I!!"IJJ	
 , ,  <;, [Zs;;
 
 <;
2 [Z$00
 
 10
B B B
 [#/*667	9 	$ 	$ 	$
/ 
/ 
/ 
/ 
/r3   r$  c                       e Zd Zej        ZdZ ej        ddgddgddgddgd	d
gddgddgddgg          Z	 ej        ddgddgddgddgddgddgddgdd gg          Z
d! Zd"S )#
TestHaltonTr   r   gUUUUUU?r   gUUUUUU?r   gqq?r   gqq?r   g98?r   gqq?r   grq?g{'?gؖd?gz'd?gG?g{'?gk97?g oO(?goS?g{'?ggrY?gAP?gR?g{'?gyr?g oO(?g͟E?c                    |                      d          }|                     dd          }|                    t          |          d          }t	          ||d           |                                 |                    d	          }|                                 |                    d	d
          }t          ||           d S )NTrF  r   r5  rG   )r   rv   gMbP?rS   r7   r}   )r2  r  r8   rG  r   r  r   r   )r+   r  r  r;   s       r1   test_workerszTestHalton.test_workers  s    ^^T^22
q400Z!<<
6666 	__R((
Q//VZ(((((r3   N)r   r   r   r   Haltonr,  r+  r)   r*   r1  r0  rz  r{   r3   r1   rx  rx    s        :DLBHq!fuen$enuen$enuen$enuen> ? ?M
 "(Z4'4'4'4'4'4'4'46 7 7K) ) ) ) )r3   rx  c                      e Zd Zej        ZdZd Zd Zd Z	e
j                            dddg          e
j                            dd	dg          e
j                            d
ddg          d                                     Zd Zd ZdS )TestLHSTc                 .    t          j        d           d S NzNot applicable: not a sequence.rH   r-  r+   argss     r1   rL  zTestLHS.test_continuing      566666r3   c                 .    t          j        d           d S r  r  r  s     r1   rV  zTestLHS.test_fast_forward  r  r3   c                 .    t          j        d           d S NzJNot applicable: the value of reference sample is implementation dependent.r  r  s     r1   rH  zTestLHS.test_sample  %     1 	2 	2 	2 	2 	2r3   strengthr   r   r   Fr   Nrd  c                    t           j                            d          }d}|dz  }d}t          j        |||||          }|                    |          }	|	j        ||fk    sJ |j        |k    sJ t          j        |          dz   |z  }
t          j        |
||f          j	        }t          j
        |	|k              sJ t          j        |	d	          }|rd|z  nd}t          |||
           t          j
        |	|z
  |k              sJ |dk    r|t          j        |          }t          t          ||                    }t          t!          |j                  d          D ]P\  }}|	d d ||gf         }||z                      t&                    }d |D             }t)          ||           Md S d S d S )Nl	   pIrtS"Md@B r!   r   r   )r   r   r  r   r:   r  r   r   r   rS   c                 ,    h | ]}t          |          S r{   )tuple)r   rows     r1   	<setcomp>z1TestLHS.test_sample_stratified.<locals>.<setcomp>  s    555#5::555r3   )r)   r8   r9   r   r   r   r  arangebroadcast_toTanysortr   setr   r   r   r   r  intr   )r+   r   r   r  r:   pr   r   r  r;   
expected1dexpectedsorted_sampletolunique_elementsdesiredr   r   
samples_2dresres_sets                        r1   test_sample_stratifiedzTestLHS.test_sample_stratified  s    i##$JKKqD#a(-51=(+- - - ##|1v%%%%#q((((
 illS(A-
?:1v668vf()))))Q///!(cAggqxc::::vfx'#-.....q==\1 illO'/?CCDDG$U68__a88 / /1#AAA1vI.
!A~--c2255555Wg.... =11/ /r3   c                     |                      dd          }|                    d          }|                      ddd          }|                    d          }t          ||           d S )Nr   Fr5  rg   r  rd  r`  )r  r8   r   )r+   r  ri  rk  rl  s        r1   test_optimizer_1dzTestLHS.test_optimizer_1d  sj    q511]]R]((
;;U;MM//B/'':w/////r3   c                    d}t          j        t          |          5  t          j        dd           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        dd          }|                    d	           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        dd          }|                    d
           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        d
d          }|                    d           d d d            d S # 1 swxY w Y   d S )Nznot a valid strengthrC   r   r&   )r  z%n is not the square of a prime numberr   )r   r  re   r!   zn is too small for d	   )rH   rI   rJ   r   r   r8   )r+   rb  r  s      r1   r  zTestLHS.test_raises  s^   )]:W555 	. 	.q1----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. ;]:W555 	 	'!a888FMM"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ;]:W555 	 	'!a888FMM!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 *]:W555 	 	'!a888FMM!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sG   AAA),B!!B%(B%	,DDD),E""E&)E&)r   r   r   r   r   r,  r+  rL  rV  rH  rH   r   rv  r  r  r  r{   r3   r1   r}  r}    s        DL7 7 77 7 72 2 2 [Z!Q00[Z%77[^dK-@AA#/ #/ BA 87 10#/J0 0 0    r3   r}  c                   *   e Zd Zej        ZdZ ej        ddgddgddgddgddgddgdd	gd	dgg          Z	 ej        d
dgddgddgddgddgddgddgddgg          Z
d Zd Zd Zd Zej                            ddd g          d!             Zd" Zd#S )$	TestSobolTr   r   r   r   r   r   r   r   ga6?gtAAz?g`?g_k m?gsAdn?grIâ?gqL?g|?g+&C?g#*H;?g&fb_?g]bnQ?gvD2(?gt|!?g$\?g4>z@?c                     t          j        t          d          5  t          j        d          }|                    d           d d d            d S # 1 swxY w Y   d S )N'The balance properties of Sobol' pointsrC   r   r7   )rH   r   r   r   Sobolr8   r+   r  s     r1   test_warningzTestSobol.test_warning>  s    \+ .> ? ? ? 	 	Yq\\FMM"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   *AAAc                    t          j        dd          }|                    d          }t          | j        d d         |           |                    d          }t          | j        dd         |           t          j        t          d          5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr   FrF  rM   rG   r  rC   )r   r  random_base2r   r1  rH   rI   rJ   r+   r  r;   s      r1   test_random_base2zTestSobol.test_random_base2D  s   1u---$$Q''4-bqb16::: $$Q''4-ac2F;;; ]: .> ? ? ? 	# 	#"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   B99B= B=c                 L   t          j        t          d          5  t          j        t          j        j        dz              d d d            n# 1 swxY w Y   t          j        t          d          5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nz Maximum supported dimensionalityrC   r   zMaximum supported 'bits' is 64A   )bits)rH   rI   rJ   r   r  MAXDIMr   s    r1   
test_raisezTestSobol.test_raiseR  s+   ]: .? @ @ @ 	, 	,Ici&*+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, ]: .= > > > 	" 	"Iab!!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s#   'AAA5BB Bc                    t          j        dd          }t          |                                                                                                          }t          |                                                                                                          }t          |t          ddi                     t          |t          ddi                     d S )NiW  FrF  r   r   )r   r  r   r8   flattentolistr   )r+   r  count1count2s       r1   test_high_dimzTestSobol.test_high_dim[  s    4%000002299;;<<002299;;<<VWc4[11222VWc4[1122222r3   r  r   r&   c                 2   t          j        dd|          }d|z  }|                    |          }t          | j        d |         |           t          j        t          d          5  |                                 d d d            d S # 1 swxY w Y   d S )Nr   Fr   r  zincreasing `bits`rC   )r   r  r8   r   r1  rH   rI   rJ   )r+   r  r  nsr;   s        r1   	test_bitszTestSobol.test_bitsb  s    1u4888Wr""4-crc2F;;;]:-@AAA 	 	MMOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   *BBBc                     t          j        ddd          }|                    d          }t          | j        |           d S )Nr   Frg   r  rG   )r   r  r8   r   r1  r  s      r1   test_64bitszTestSobol.test_64bitsl  sB    1u2666q!!4-v66666r3   N)r   r   r   r   r  r,  r+  r)   r*   r1  r0  r  r  r  r  rH   r   rv  r  r  r{   r3   r1   r  r  '  sE       9DLBHr2h"Cj#Tl#Tl$en$en$en$en. / /M "(Z4&	2'4'4'4'4'4'46 7 7K  # # #" " "3 3 3 [VaV,,  -,7 7 7 7 7r3   r  c                      e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zej                            dg d	g d
g          d             Zej                            dg d	g d
g          d             Zd Zej                            dg d	ddgg          ej                            dddgg          d                         Zd ZdS )TestPoissonFc                 .    t          j        d           d S )NzToo costly in memory.r  r  s     r1   rD  zTestPoisson.test_boundsv  s    +,,,,,r3   c                 .    t          j        d           d S )Nz"Not applicable: recursive process.r  r  s     r1   rV  zTestPoisson.test_fast_forwardy  s    899999r3   c                 .    t          j        d           d S r  r  r  s     r1   rH  zTestPoisson.test_sample|  r  r3   c                    d}d}|                      d|d          }|                    |          }t          |          |k    sJ t          |          |k    sJ |                    |          }t          |          |k    sJ t          |          |k    sJ t	          j        ||gd          }t          |          |dz  k    sJ t          |          |k    sJ d S )	N皙?r   r   F)r   radiusr   r  r   r   )r  r8   rG  l2_normr)   rT  )r+   r  r  r  r  sample_initsample_continuedr;   s           r1   rL  zTestPoisson.test_continuing  s    q%@@mmbm));2%%%%{##v----!==2=..#$$****'((F2222.> ?aHHH6{{b1f$$$$v&((((((r3   c                    t           j                            d          }d}d\  }}||z
  |                    d          z  |z   }g d}ddg}t          |||          }|D ]^\  }	}
}|                     |	|
||          }|                    |          }t          |          |k    sJ t          |          |
k    sJ _d S )	Nl	   x_4vZ.c r   )g{Gz?皙?r!   )r   r&   rM   volumesurface)r   r  hyperspherer:   )r)   r8   r9   r   r,  rG  r  )r+   r:   r  r  r  radii
dimensionshypersphere_methodsgenr   r  r  r  r;   s                 r1   test_mindistzTestPoisson.test_mindist  s    i##$KLL	Tszz!}},s2YY
'3j%)<==&) 	- 	-"Av{YYF   F ]]2&&Fv;;"$$$$6??f,,,,,	- 	-r3   c                     d}|                      d|          }|                                }t          |          |k    sJ d S )Nr  r   )r   r  )r,  
fill_spacer  )r+   r  r  r;   s       r1   test_fill_spacezTestPoisson.test_fill_space  sJ    Qv..""$$v&((((((r3   r   rw   r   rw   )r   r   r   c                     d}g d}|                      d|||          }|                    d          }|D ]"}t          ||           t          ||           #d S )Nr  )r&   r&   r   r&   r   r  r   r    r6   r,  r8   r	   )r+   r   r  r    r  r;   points          r1   test_sample_inside_lower_boundsz+TestPoisson.test_sample_inside_lower_bounds  s    H  
 
 r"" 	/ 	/EeX...h....	/ 	/r3   r    c                     d}g d}|                      d|||          }|                    d          }|D ]"}t          ||           t          ||           #d S )Nr  )r  r   r&   r  r6   r  )r+   r    r  r   r  r;   r  s          r1   test_sample_inside_upper_boundsz+TestPoisson.test_sample_inside_upper_bounds  s    H  
 
 r"" 	/ 	/EeX...h....	/ 	/r3   c                     d}g d}g d}t          j        t          d          5  |                     d|||           d d d            d S # 1 swxY w Y   d S )Nr  )r&   r   r   r  z1Bounds are not consistent 'l_bounds' < 'u_bounds'rC   r&   r  rH   rI   rJ   r,  )r+   r  r   r    s       r1   test_inconsistent_bound_valuez)TestPoisson.test_inconsistent_bound_value  s    ]EG G G 	P 	P II&8hIOOO	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	P 	Ps   AAArw   r   r&   r   c                     d}t          j        t          d          5  |                     d|||           d d d            d S # 1 swxY w Y   d S )Nr  zP'l_bounds' and 'u_bounds' must be broadcastable and respect the sample dimensionrC   r&   r  r  )r+   r    r   r  s       r1   test_inconsistent_boundsz$TestPoisson.test_inconsistent_bounds  s     ]$% % % 	 	 IIF!H    		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AA	A	c                     d}t          j        t          |          5  t          j        dd           d d d            d S # 1 swxY w Y   d S )Nz*'toto' is not a valid hypersphere samplingrC   r   rr   )r  )rH   rI   rJ   r   PoissonDiskra  s     r1   r  zTestPoisson.test_raises  s    ?]:W555 	3 	3OA6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N)r   r   r   r   r  r,  r+  rD  rV  rH  rL  r  r  rH   r   rv  r  r  r  r  r  r{   r3   r1   r  r  r  sr       ?DL- - -: : :2 2 2) ) )&- - -*) ) ) [Z,,,			)BCC
/ 
/ DC
/ [Z,,,			)BCC
/ 
/ DC
/P P P [Z,,,R)ABB[Z1a&22	 	 32 CB	3 3 3 3 3r3   r  c                       e Zd Zd Zej                            d          d             Zd Zd Z	ej                            d          d             Z
dS )TestMultinomialQMCc                 B   t          j        g d          }t          j        t          d          5  t          j        |d           d d d            n# 1 swxY w Y   t          j        g d          }d}t          j        t          |          5  t          j        |d           d d d            n# 1 swxY w Y   t          j        g d          }d	}t          j        t          |          5  t          j        |dt          j        d
                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        |dt           j        	                                           d d d            d S # 1 swxY w Y   d S )N)Q?p=
ף?gffffff?)\(?z'Elements of pvals must be non-negative.rC   r7   )n_trials)r  r  r   r  r  z Elements of pvals must sum to 1.r  r  r  r  r  z Dimension of `engine` must be 1.r   r   )r  r  "`engine` must be an instance of...)
r)   r*   rH   rI   rJ   r   MultinomialQMCr  r8   r9   )r+   r  rb  s      r1   test_validationsz#TestMultinomialQMC.test_validations  s   H44455]: .A B B B 	/ 	/q2....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/
 H222335]:W555 	/ 	/q2....	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ H333445]:W555 	F 	Fq2ci!nnnEEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 8]:W555 	O 	Oq2bi6K6K6M6MNNNN	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	OsG   AAAB66B:=B:4+D++D/2D/4FFFzignore::UserWarningc                 J   t           j                            d          }t          j        g d          }d}t          j        ||z                                t                    }t          j        |||          }t          |                    d          |d           d S )Nl	   (u@gP{- r  r   )r  r*  r   rS   )
r)   r8   r9   r*   
atleast_2dr  r  r   r  r   )r+   r:   r  r  r  r  s         r1   test_MultinomialBasicDrawz,TestMultinomialQMC.test_MultinomialBasicDraw  s    i##$IJJH33344=A..55c::#AsCCCa(((;;;;;;r3   c                 :   t           j                            d          }t          j        g d          }t	          j        |d|          }|                    d          }t          |t          j        |          z  t          j        |          d           d S )Nl	   8X7:ct]+C: r  i    )r  r:   r   rR   rS   )	r)   r8   r9   r*   r   r  r   r   r  )r+   r:   r  r  drawss        r1   test_MultinomialDistributionz/TestMultinomialQMC.test_MultinomialDistribution  s    i##$JKKH33344#A#>>>a  u-r}Q/?/?dKKKKKKr3   c                    t          j        g d          }t          |          }t          t	          ||d          d           t          t	          ||d          d           t          t	          ||d          d           t          t	          ||d          d           t          t	          ||d	          |d
z
             d S )N)r   皙?g?g333333?r   ?gGz?rO   r   r   r  r   gaۢ?g7?r&   rO   r   )r)   r*   rG  r   r   )r+   p_cumulativer!  s      r1   test_FindIndexz!TestMultinomialQMC.test_FindIndex  s    x K K KLL<  %lD#>>BBB%lD#>>BBB%lD'BBAFFF%lD'BBAFFF%lD#>>qIIIIIr3   c                 z   t           j                            d          }t          j        g d          }d}t          j        ||z                                t                    }t          j        dd|          }t          j	        ||||          }t          |                    d          |d           d S )	Nl	   aFkq|'x< r  r   r   Tr   )r  r  r:   rS   )r)   r8   r9   r*   r  r  r  r   r  r  r   )r+   r:   r  r  r  base_enginer  s          r1   test_other_enginez$TestMultinomialQMC.test_other_engine  s     i##$KLLH33344=A..55c::iDc:::#A(+- - -a(((;;;;;;r3   N)r   r   r   r  rH   r   filterwarningsr  r  r  r  r{   r3   r1   r  r    s        O O O. [ 566< < 76<L L LJ J J [ 566	< 	< 76	< 	< 	<r3   r  c                   8    e Zd Zd Zd Zd Zd Zd Zd Zd Z	dS )	TestNormalQMCc                    t          j        t          j        d                    }|                                }t          |j        d           |                    d          }t          |j        d           t          j        t          j        d                    }|                                }t          |j        d           |                    d          }t          |j        d	           d S )
Nr   )r[  r   r   r!   r  r!   r   r   r?  r!   r   r   MultivariateNormalQMCr)   zerosr8   r   r   r+   r  sampless      r1   test_NormalQMCzTestNormalQMC.test_NormalQMC&  s    *<<<--//W]F+++--!-$$W]F+++*<<<--//W]F+++--!-$$W]F+++++r3   c                    t          j        t          j        d          d          }|                                }t          |j        d           |                    d          }t          |j        d           t          j        t          j        d          d          }|                                }t          |j        d	           |                    d          }t          |j        d
           d S )Nr   T)r[  inv_transformr  r!   r  r  r   r?  r	  r
  r  s      r1   test_NormalQMCInvTransformz(TestNormalQMC.test_NormalQMCInvTransform4  s    *!D2 2 2--//W]F+++--!-$$W]F+++*!D2 2 2--//W]F+++--!-$$W]F+++++r3   c                 r   t           j                            d          }t          j        t          j        d          d|          }|                    d          }t          j        ddgdd	gg          }t          ||d
           t           j                            d          }t          j        t          j        d          d|          }|                    d          }t          j        g dg dg          }t          ||d
           t           j                            d          }t          j        dd|          }t          j        t          j        d          d||          }|                    d          }t          j        g dg dg          }t          ||d
           d S )Nl	   q)*syRM@
K r   F)r[  r  r*  r  LpɻgUygxDg?rR   rS   r&   r[  r  r:   )r  r  gZ?)g#ڎrgΌ~42?gԻx?nrM   Tr   )r[  r  r  r:   )	r)   r8   r9   r   r  r  r*   r   r  )r+   r:   r  r  samples_expectedr  s         r1   test_NormalQMCSeededz"TestNormalQMC.test_NormalQMCSeededD  s   i##$KLL*!E= = =--!-$$8i%;&/%:%< = =!1==== i##$KLL*!Es< < <--!-$$8%E%E%E%E%E%E%G H H!1==== i##$KLLiDc:::*!EC
 
 
 --!-$$8%E%E%E%E%E%E%G H H!1======r3   c                 .   t           j                            d          }t          j        t          j        d          |d          }|                    d          }t          j        ddgdd	gg          }t          ||d
           t           j                            d          }t          j        t          j        d          |d          }|                    d          }t          j        g dg dg          }t          ||d
           d S )Nl	   9e)-%5Z%_6 r   T)r[  r:   r  r  <9\Mg+`?g]@"i?rR   rS   r&   )r  r  g,D?)g˚X`?g7@gaTR')r)   r8   r9   r   r  r  r*   r   )r+   r:   r  r  r  s        r1    test_NormalQMCSeededInvTransformz.TestNormalQMC.test_NormalQMCSeededInvTransformd  s&   i##$KLL*!#T; ; ;--!-$$8i%;&.%9%; < <!1==== i##$KLL*!#T; ; ;--!-$$8%E%E%E%B%B%B%D E E!1======r3   c                     dD ]l}t          j        |d          }t          j        t          j        |          |d          }|                                }t          |j        d|f           md S )Nr   r   r   Fr5  T)r[  r  r  r   )r   r  r  r)   r  r8   r   r   )r+   r   r  r  r  s        r1   r  zTestNormalQMC.test_other_enginew  s     	0 	0A)a%888K.BHQKK6A=AC C CF mmooGA////	0 	0r3   c                    t           j                            d          }t          j        t          j        d          |          }|                    d          }t          t          j        |                    d                    dk               sJ t          t          j        |	                    d          d	z
            dk               sJ d
D ]&}t          |d d |f                   \  }}|dk    sJ 't          j        |                                          }t          j        |d
                   dk     sJ d S )Ni3  r   )r[  r:      r  r   r   rX  r   r   r   r  r)   r8   r9   r   r  r  rC  r   r[  stdr   cov	transposer+   r:   r  r  r   rK  pvalr$  s           r1   test_NormalQMCShapiroz#TestNormalQMC.test_NormalQMCShapiro  s)   i##E***EEE--#-&&26',,A,..//$67777726'++1+--122T9::::: 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4''''''r3   c                    t           j                            d          }t          j        t          j        d          d|          }|                    d          }t          t          j        |                    d                    d	k               sJ t          t          j        |	                    d          d
z
            d	k               sJ dD ]&}t          |d d |f                   \  }}|dk    sJ 't          j        |                                          }t          j        |d                   d	k     sJ d S )Nir   Tr  r   r  r   r   rX  r   r!  r  r"  r&  s           r1   !test_NormalQMCShapiroInvTransformz/TestNormalQMC.test_NormalQMCShapiroInvTransform  s2   i##H--*!Dc; ; ;--#-&&26',,A,..//$67777726'++1+--122T9::::: 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4''''''r3   N)
r   r   r   r  r  r  r  r  r(  r*  r{   r3   r1   r  r  %  s~        , , ,, , , > > >@> > >&0 0 0( ( (( ( ( ( (r3   r  c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )TestMultivariateNormalQMCc                 B   d}t          j        t          |          5  t          j        dgt          j        d                     d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        g dt          j        d                     d d d            n# 1 swxY w Y   d	}t          j        t          |          5  t          j        ddgt          j                                                   d d d            n# 1 swxY w Y   d
}t          j        t          |          5  t          j        ddgddgddgg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        ddgddgddgg           d d d            n# 1 swxY w Y   d}t          j        t          |          5  t          j        dgddgddgg           d d d            d S # 1 swxY w Y   d S )Nz(Dimension of `engine` must be consistentrC   r   r   r  )r  r%   rM   r  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	rH   rI   rJ   r   r  r  r)   r8   r9   ra  s     r1   r  z*TestMultivariateNormalQMC.test_validations  s   =]:W555 	B 	B%qc#)a...AAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B >]:W555 	H 	H%iii	AGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 8]:W555 	N 	N%q!fRY5J5J5L5LMMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 0]:W555 	@ 	@%q!f1v1v.>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 9]:W555 	@ 	@%q!f1v1v.>???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ E]:W555 	= 	=%qcQFQF+;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=sk   +AAA=,B55B9<B95DD"%D"E00E47E4GG	G*HHHc                 X    t          j        g dg dg dg dg          }|j        J d S )Nr%   )r   r   r   )r   r   r   )r   r   r   )r   r  _corr_matrixr  s     r1   test_MultivariateNormalQMCNonPDz9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  sG    *II			999iii8
 
 ".....r3   c                    t          j        dd          }|                                }t          |j        d           |                    d          }t          |j        d           t          j        ddgddgddgg          }|                                }t          |j        d           |                    d          }t          |j        d	           t          j        g d
          }t          j        g dg dg dg          }t          j        ||          }|                                }t          |j        d           |                    d          }t          |j        d           d S )Nr   r!   )r[  r$  r  r  r  r   r?  r	  r  r   r   r   r   r   r   r   r   r   r   r&   r!   r&   r   r  r8   r   r   r)   r*   r+   r  r  r[  r$  s        r1   test_MultivariateNormalQMCz4TestMultivariateNormalQMC.test_MultivariateNormalQMC  sZ   *q999--//W]F+++--!-$$W]F+++ *AaVaV<LMMM--//W]F+++--!-$$W]F+++ x			""h			999iii899*455--//W]F+++--!-$$W]F+++++r3   c                    t          j        ddd          }|                                }t          |j        d           |                    d          }t          |j        d           t          j        ddgddgddggd          }|                                }t          |j        d	           |                    d          }t          |j        d
           t          j        g d          }t          j        g dg dg dg          }t          j        ||d          }|                                }t          |j        d           |                    d          }t          |j        d           d S )Nr   r!   T)r[  r$  r  r  r  r  r   r?  r	  r  r2  r3  r4  )r  r5  r6  r7  r8  s        r1   &test_MultivariateNormalQMCInvTransformz@TestMultivariateNormalQMC.test_MultivariateNormalQMCInvTransform  sl   *qMMM--//W]F+++--!-$$W]F+++ *Qq!fq!f-T
 
 
 --//W]F+++--!-$$W]F+++ x			""h			999iii899*4DIII--//W]F+++--!-$$W]F+++++r3   c                    t           j                            d          }|                    d          }||                                z  t          j        |                    d                    z   }t          j        t          j        ddg          |d|          }|                    d          }t          j        dd	gd
dgg          }t          ||d           t           j                            d          }|                    d          }||                                z  t          j        |                    d                    z   }t          j        t          j        g d          |d|          }|                    d          }t          j        g dg dg          }t          ||d           d S )Nl	   b{1/YK $`F r   r   r   r   F)r  r:   r  g X4g0<gΧU?gK\ @rR   rS   r&   r&   r&   r%   )gZh44gA->gZC)g~T~O?g*ʥo@gc}E?
r)   r8   r9   standard_normalr%  diagr   r  r*   r   r+   r:   r<   Ar  r  r  s          r1    test_MultivariateNormalQMCSeededz:TestMultivariateNormalQMC.test_MultivariateNormalQMCSeeded  s   i##$KLL''

1 6 66*28QF+;+;Q9>CI I I--!-$$8h	%:&.%9%; < <!1==== i##$KLL''

1 6 66*28III+>+>9>CI I I--!-$$8%F%F%F%C%C%C%E F F!1======r3   c                    t           j                            d          }|                    d          }||                                z  t          j        |                    d                    z   }t          j        t          j        ddg          ||d          }|                    d          }t          j        dd	gd
dgg          }t          ||d           t           j                            d          }|                    d          }||                                z  t          j        |                    d                    z   }t          j        t          j        g d          ||d          }|                    d          }t          j        g dg dg          }t          ||d           d S )Nl	   A^}KT0zubN r=  r   r   T)r:   r  r  gFX?ggR4gO=`?rR   rS   r>  r&   r%   )go.2?gikD0NgPN)g4YgҫJC?g-v2 @r?  rB  s          r1   ,test_MultivariateNormalQMCSeededInvTransformzFTestMultivariateNormalQMC.test_MultivariateNormalQMCSeededInvTransform
  s   i##$KLL''

1 6 66*HaVaS
 
 
 --!-$$8h	%:&/%:%< = =!1==== i##$KLL''

1 6 66*HYYY4
 
 
 --!-$$8%E%E%E%D%D%D%F G G!1======r3   c                    t           j                            d          }t          j        ddgddgddgg|          }|                    d          }t          t          j        |                    d                    dk               sJ t          t          j        |                    d          dz
            dk               sJ d	D ]&}t          |d d |f                   \  }}|d
k    sJ 't          j
        |                                          }t          j        |d	                   dk     sJ t          j        ddgddgddgg|          }|                    d          }t          t          j        |                    d          ddgz
            dk               sJ t          t          j        |                    d          t          j        d          z
            dk               sJ d	D ]&}t          |d d |f                   \  }}|d
k    sJ 't          j
        |                                          }t          j        |d	         dz
            dk     sJ d S )Nl   V^Am%2r   r   r[  r$  r:   r   r  r   rX  r!  r  rO   rN   r'   r   r   r)   r8   r9   r   r  rC  r   r[  r#  r   r$  r%  rj   r&  s           r1   !test_MultivariateNormalQMCShapiroz;TestMultivariateNormalQMC.test_MultivariateNormalQMCShapiro#  su   i##$HII*Qq!fq!f-3
 
 
 --#-&&26',,A,..//$67777726'++1+--122T9::::: 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4'''' *s3*sCj!9s
 
 
 --#-&&26',,A,..!Q7884?@@@@@26'++1+--<==DEEEEE 	 	Agaaadm,,GAt#:::::fW&&(())vc$i#o&&------r3   c                    t           j                            d          }t          j        ddgddgddgg|d          }|                    d          }t          t          j        |                    d                    d	k               sJ t          t          j        |                    d          dz
            d	k               sJ d
D ]&}t          |d d |f                   \  }}|dk    sJ 't          j
        |                                          }t          j        |d
                   d	k     sJ t          j        ddgddgddgg|d          }|                    d          }t          t          j        |                    d          ddgz
            d	k               sJ t          t          j        |                    d          t          j        d          z
            d	k               sJ d
D ]&}t          |d d |f                   \  }}|dk    sJ 't          j
        |                                          }t          j        |d
         dz
            d	k     sJ d S )Nl	   A"l7D#maxbwcuC r   r   T)r[  r$  r:   r  r   r  r   rX  r!  r  rO   rN   r'   r   r   rI  r&  s           r1   -test_MultivariateNormalQMCShapiroInvTransformzGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformC  s|   i##$KLL*Qq!fq!f-3d
 
 
 --#-&&26',,A,..//$67777726'++1+--122T9::::: 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4'''' *ssc3Z(	
 
 
 --#-&&26',,A,..!Q7884?@@@@@26'++1+--<==DEEEEE 	 	Agaaadm,,GAt#:::::fW&&(())vc$i#o&&------r3   c                 ^   t           j                            d          }t          j        g dg dg dg dg|          }|                    d          }t          t          j        |                    d	
                    dk               sJ t          j        t          j        |d d d	f                   dz
            dk     sJ t          j        t          j        |d d df                   dz
            dk     sJ t          j        t          j        |d d df                   t          j	        d          z
            dk     sJ dD ]&}t          |d d |f                   \  }}|dk    sJ 't          j        |                                          }t          j        |d                   dk     sJ t          j        |d         dz
            dk     sJ t          t          j        |d d d	f         |d d df         z   |d d df         z
            dk               sJ d S )Nl	   @jSm-\1:c# )r   r   r   )rO   r   rO   )r   rO   rO   )rO   rO   rN   rH  rB  r  r   r   rX  r   r   r  g?r!  r<  rR  )r)   r8   r9   r   r  rC  r   r[  r#  rj   r   r$  r%  r&  s           r1   $test_MultivariateNormalQMCDegeneratez>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegeneratef  s?   i##$JKK*  ///???C
 
 

 --#-&&26',,A,..//$677777vbfWQQQT]++a/0047777vbfWQQQT]++a/0047777vbfWQQQT]++bgajj899D@@@@ 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4''''vc$i!m$$t++++26'!!!Q$-'!!!Q$-7'!!!Q$-GHH   	 	 	 	 	r3   N)r   r   r   r  r0  r9  r;  rD  rF  rJ  rL  rN  r{   r3   r1   r,  r,    s        = = =4/ / /, , ,0, , ,4> > >.> > >2. . .@!. !. !.F    r3   r,  c                        e Zd Zd Zd Zd ZdS )	TestLloydc                 ^   t           j                            d          }|                    ddd          }t	          |          }t          |          }t          d          D ]G}t          |d          }t	          |          }t          |          }||k     sJ ||k     sJ |}|}|}Hd S )Ni r   r   )   r   )r!  rM   )maxiter)r)   r8   RandomStateuniformr   r  r   r   )	r+   r:   r;   base_l1base_l2rK  sample_lloydcurr_l1curr_l2s	            r1   
test_lloydzTestLloyd.test_lloyd  s    i##G,,Q116""&//q 	" 	"AAA  L |,,Gl++G W$$$$W$$$$GG!FF	" 	"r3   c                     t          j        ddgddgddgddgg          }|                                }t          |          }t	          ||           t          j        ||          rJ dS )z
        Verify that the input samples are not mutated in place and that they do
        not share memory with the output.
        r   r  rg  N)r)   r*   copyr   r   may_share_memory)r+   sample_origsample_copy
new_samples       r1   test_lloyd_non_mutatingz!TestLloyd.test_lloyd_non_mutating  s    
 hc
!$c
!$c
!$c
 , - - "&&((;
 
 

 	[111&{J???????r3   c                    t          j        t          d          5  g d}t          |           d d d            n# 1 swxY w Y   d}t          j        t          |          5  dgdgdgg}t          |           d d d            n# 1 swxY w Y   d}t          j        t          |          5  d	dgd
dgddgg}t          |           d d d            d S # 1 swxY w Y   d S )Nz`sample` is not a 2D arrayrC   rE   z`sample` dimension is not >= 2r   r  r   z!`sample` is not in unit hypercubegr   r   )rH   rI   rJ   r   )r+   r;   r  s      r1   test_lloyd_errorszTestLloyd.test_lloyd_errors  s   ]:-JKKK 	; 	; [[F26:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 0]:S111 	; 	;cC51#&F26:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 3]:S111 	; 	;Qi#saV4F26:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s3   <A A $BBB0CCCN)r   r   r   r[  rb  rd  r{   r3   r1   rP  rP  ~  sD        " " ".@ @ @ ; ; ; ; ;r3   rP  c                 N    t          j        |                                           S rz   )r
   pdistr  rg  s    r1   r  r    s    >&!!%%'''r3   r  c                 J   d}t           j                            |          } | d|                              d          }t           j                            |          } | d|                              d          }t          ||           t           j                            |          } | d|                              d          } | d|                              d          }t          ||           t           j                            |          } | d|                              d          }t          ||           t          ||           d}t          j        t          |          5   | d||           d d d            d S # 1 swxY w Y   d S )	Nl   7P r   )r   r*  rM   r   z3got multiple values for argument now known as `rng`rC   )r   r:   r*  )r)   r8   rT  r   r9   rH   rI   	TypeError)r  seed_numberr:   res1res2res3rb  s          r1   test_deterministicrm    s    K
)


,
,C6AC   ''**D
)


,
,C6AC   ''**Dt
)


,
,C6AC   ''**D6A;'''..q11Dt
)


,
,C6A3&&q))DttCG	y	0	0	0 7 7+66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   <FFF)6r   collectionsr   	itertoolsr   r   rH   numpyr)   numpy.testingr   r   r   r	   scipy.spatialr
   scipy.statsr   scipy.stats._sobolr   r   scipy.stats._qmcr   r   r   r   r   r   r   r   r   r   r   r  r  r  r"  r$  rx  r}  r  r  r  r  r,  rP  r  r   rv  r{  r  r   r  rm  r{   r3   r1   <module>rv     s
   				       + + + + + + + +                 # " " " " "       / / / / / /                         h% h% h% h% h% h% h% h%V#' #' #' #' #' #' #' #'L    3=   & & &.2 2 2< < <D+ + + h/ h/ h/ h/ h/ h/ h/ h/V) ) ) ) ) ) ) )BR R R R Rn R R RjH7 H7 H7 H7 H7 H7 H7 H7Vq3 q3 q3 q3 q3. q3 q3 q3h<< << << << << << << <<~v( v( v( v( v( v( v( v(r] ] ] ] ] ] ] ]@5; 5; 5; 5; 5; 5; 5; 5;r( ( ( CJ	$'$6$I J J7 7J J7 7 7r3   