
    Ugu                        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 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-dS )'    N)Counter)combinationsproduct)assert_allcloseassert_equalassert_array_equal)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           Y/var/www/surfInsights/venv3-11/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    
   r6   F)r#   T)r(   randomdefault_rngr   r'   r   )r*   rngsampleabscaledunscaleds          r0   test_scale_randomzTestUtils.test_scale_random3   s    i##$KLLH%%ZZ^^Ob JJrNNR61a7779VQ4888&)))))r2   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         r0   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   rL   rF          @   L2-star)r(   r)   r   r   discrepancysqrt)r*   space_1space_2r:   dimrefs         r0   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r2   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   rL   r    rE   rB   rA   r   r   'toto' is not a valid ...totor]   )r(   r)   rG   rH   rI   r   rh   r*   r:   s     r0   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 )!NrT   rU   rV   rW   rX   rY   rZ   rM   rN   r[   r\   rF   )r^   workersr!   rQ   rR   r_   r`   ra   rb   rc   r%   r   rg   	cpu_countc                      d S N rz   r2   r0   <lambda>z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    T r2   zCannot determine therB   ru   zInvalid number of workers...r   )r(   r)   r   r   rh   ri   setattrosrG   rH   NotImplementedErrorrI   )r*   monkeypatchr:   rl   rm   s        r0   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   rL   r    rE   rB   rA   r   r   rp   rq   r]   z!Sample contains duplicate points.z'Sample must contain at least two points)	r(   r)   rG   rH   rI   r   geometric_discrepancywarnsUserWarningrr   s     r0   !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         ?      ?rL   	chebyshev)metric)r^   r   l	   s;80riR$ r%   )dseed2   gY$?guڗ8?)	r(   r)   r   r   r   ri   r7   r8   LatinHypercube)r*   r:   r9   s      r0   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#ac22299"==1&99;NOOO%fU;;;=P	
 	
 	
 	
 	
r2   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   rr   s     r0   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Mr2   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   rL   r    rM   rN   rO   rv   T)	iterativerP   rQ   rR   l	   gy,!uUxFYo9"] )rL   r6   rE   rB   rA   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   rh   r   r   r7   r8   rG   rH   rI   )r*   rj   	disc_init	disc_iterr9   disc_refx_news          r0   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   r6   d   )
r(   r7   r8   r   r   rh   rangeintegersr   r   )
r*   r9   qmc_genr:   discirow_1row_2coldisc_references
             r0   test_perm_discrepancyzTestUtils.test_perm_discrepancy  s   i##$JKK$QS111##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 		2r2   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          r0   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::r2   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         r0   disc_wdzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wd7  s    7DAqD!!!QQQJ-CAAAtQQQJ-C6"&+-6#)+<+<*=+-6#)+<+<a+?*@FG"I "I "I '() ) ) * *D 1H9qAv},,r2   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          r0   disc_mdzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdA  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::r2   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      r0   
<listcomp>z_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>V  sv       uQxx *+ GA
1QT7AadG < <<==   r2   )r   r(   ri   r   r   r   )r   r   r   s   ` @r0   disc_star_l2zKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2Q  s    7DAq7qb	A!a%L1,&Q!V!444556 6&     "1XX     !V  r2   l	   j;<Q`siyX r4   ra   r]   r_   r\   rg   N)r(   r7   r8   r   rh   r   )	r*   r   r   r   r   r9   r:   	disc_currdisc_alts	            r0   +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,,,,,r2   c                     t          d          }|d         dk    sJ t          d          }|d         dk    sJ t          d          }|d         dk    sJ d S )Nr6   rv         i  i^  i5	  )r   )r*   primess     r0   test_n_primeszTestUtils.test_n_primeso  sh    "bzR#bzS    #bzT!!!!!!r2   c                 L    t          d          }g d}t          ||           d S )Nr   )r   r%   r                      r      %   )   +   /   )r   r   )r*   r   r,   s      r0   test_primeszTestUtils.test_primesy  s0    !"%%FFF$$$$$r2   N)__name__
__module____qualname__r1   r?   rJ   rn   rs   r   r   r   rG   markxfailr   r   r   r   r   r   rz   r2   r0   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" " "% % % % %r2   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 )	Nr6   )
        r   r   r         ?      ?      ?      ?g      ?g      ?rL   r|   rF   r   r%   )start_indexr   r   )r*   r:   r,   s      r0   test_van_der_corputzTestVDC.test_van_der_corput  s    ##- - -$$$A...$$$A...$$$q111ABB(((((r2   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 r6   Tscrambler   r   r%   )r   r   r   rL   )r   r   r   ru   rF   r   )r*   r   r,   r:   s       r0   test_van_der_corput_scramblez$TestVDC.test_van_der_corput_scramble  s    6R$T:::q4dKKKABB(((1t$
 
 
 	ABB(((1t$
 
 
 	ABB(((((r2   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 2rB   r6   r   )base)rG   rH   rI   r   r*   s    r0   test_invalid_base_errorzTestVDC.test_invalid_base_error  s    ]:-IJJJ 	' 	'2A&&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	's   ;??N)r   r   r   r   r   r   rz   r2   r0   r   r     sA        ) ) )) ) )"' ' ' ' 'r2   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       r0   r   zRandomEngine.__init__  s(    1<dCCCCCr2   r   r|   c                H    | j                             || j        f          }|S ry   )r9   r7   r   )r*   r   ru   r:   s       r0   _randomzRandomEngine._random  s     !TV--r2   )NN)r   )r   r   r   r   r   __classcell__)r   s   @r0   r   r     sc        D D D D D Da         r2   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   r7   num_generatedresetr   fast_forward)enginesample_1sample_2sample_1_testsample_2_tests        r0   test_subclassing_QMCEnginer    s    !"IJJJF}}q}!!H}}q}!!H2%%%% LLNNN1$$$$MMAM&&M=))) LLNNN
!MMAM&&M=)))2%%%%%%r2   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 integerrB   )r   rv   z*'u_bounds' and 'l_bounds' must be integersr   g?r   )rG   rH   rI   r   r   )msgr  s     r0   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   r6   r  r   int64T)r   endpointr      Fr   r   r  r   )r   r   r   r(   uniquedtyper  r7   floorastyper  minmax)r  r:   lowhigh
ref_samples        r0   test_integersr    s   !"IJJJF __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{;;;;;r2   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 )Nr6   l	   G]	#0m$ave r  rv   )r  r  sizer   r    T)r  r  r   r  r   r   Fr  r   r   )r(   r7   r8   r   r   r   r  r  )r   r9   r  r  r  r:   s         r0   test_integers_ndr!    s   
A
)

 E
F
FC
,,2BQ,
/
/C<<AAA<==D!#&&&F__S43_GGF##S)))##T!V,,,__S43_FFF##S)))##T*****r2   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 )Nr   r   rz   )can_scrambleqmcerG   skip)r*   r   r   kwargss       r0   r  zQMCEngineTests.engine  sb    
  	649DhTDDVDDD 6 ty55d5f555r2   c                 "    |r| j         n| j        S ry   )scramble_ndunscramble_nd)r*   r   s     r0   	referencezQMCEngineTests.reference  s    #+Ct1CCr2   )idsc                     |                      d|          }|                    d          }t          t          j        d          |           d S )Nr   r   r   rL   )rL   r   r  r7   r   r(   emptyr*   r   r  r:   s       r0   	test_0dimzQMCEngineTests.test_0dim  H    q844q!!28F++V44444r2   c                     |                      d|          }|                    d          }t          t          j        d          |           d S )Nr   r3  r   r   r   r4  r6  s       r0   test_0samplezQMCEngineTests.test_0sample%  r8  r2   c                 x    |                      d|          }|                    d          }d|j        k    sJ d S )Nr   r3  r   r   r   )r  r7   r   r6  s       r0   test_1samplezQMCEngineTests.test_1sample+  sA    q844q!!%%%%%%r2   c                     |                      d|          }|                    d          }t          j        |dk              sJ t          j        |dk              sJ d S )Nr   r3     r   r   )r  r7   r(   allr6  s       r0   test_boundszQMCEngineTests.test_bounds1  sb    sX66s##vfk"""""vfk"""""""r2   c                     |                      |          }|                     d|          }|                    t          |                    }t	          ||d           |j        t          |          k    sJ d S )Nr   r   r3  r  r   rR   )r0  r  r7   lenr   r  )r*   r   r  r  r:   s        r0   test_samplezQMCEngineTests.test_sample8  sx    ^^X^66
q844Z11
6666#s:666666r2   c                 >   |                      d|          }|                    d          }|                      d|          }t          |          dz  }|                    |          }|                    |          }t          |||d          d           d S )Nr   r3  rF   r  r   rR   )r  r7   rE  r   )r*   r   r  r  n_half_r:   s          r0   test_continuingzQMCEngineTests.test_continuingA  s    q844]]Q]''
q844ZA%MMFM##((
677 3$??????r2   r   Nc                     |                      d||          }|                    d          }|                                 |j        dk    sJ |                    d          }t	          ||           d S )Nr   r   r   r   rF   r  r   )r  r7   r  r  r   )r*   r   r   r  r  r:   s         r0   
test_resetzQMCEngineTests.test_resetN  sx     q8$??]]Q]''
#q((((##
+++++r2   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   r3  rF   r  rL   r   rR   r   r   c                 $    g | ]}|d z  dk    |S )r   r   rz   )r   r   s     r0   r   z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>v  s!    :::aq1uzzzzzr2   h㈵>)	r  r7   r  r   r  r   appendr(   concatenate)r*   r   r  r  r:   
even_drawsr   s          r0   test_fast_forwardz QMCEngineTests.test_fast_forwarda  s=   q844]]Q]''
q844A##
122T:::: 	
q 	' 	'A1uzz!!&--//2222##A&&&&::588:::;N:&&	
 	
 	
 	
 	
 	
r2   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   r3  i   r   r   r   {Gz?rR      r   K   r   )r  r7   r   r(   meanrepeat
percentile)r*   r   r   r  r:   s        r0   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	
 	
 	
 	
 	
 	
r2   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 methodrB   r   Frq   r   r   r   )rG   rH   rI   r  r*   messages     r0   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 ry   )r   r:   s    r0   r{   zQMCEngineTests.<lambda>  s    hv&6&6%6 r2   c                     |                      dd          }|                    d          } ||          }|                      dd|          }|                    d          } ||          }||k     sJ d S )Nr   Fr3  rf   r  r^  )r  r7   )	r*   r   r   r  
sample_ref
metric_refoptimal_sample_metric_s	            r0   test_optimizerszQMCEngineTests.test_optimizers  s     q511]]R]((
VJ''
;;U;NN//B/''&//######r2   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   TrL  rL   zArrays are not equalrB   r   r   )
r(   r7   r8   r   r  rQ  rG   rH   AssertionErrorr   )r*   r9   r:   r   r  s        r0   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)  r/  r.  r   r1  boolr   r  r(   ndarrayr0  rG   r   parametrizer7  r;  r>  rB  rF  rJ  r7   r8   rM  rT  r\  ra  r   rh   rl  ro  rz   r2   r0   r#  r#    s       ((D!L"M Ke}H
&C 56 66 
	6 6 6 6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 	$ 	$ 	$
/ 
/ 
/ 
/ 
/r2   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 )NTrD  r   r3  rF   )r   ru   gMbP?rR   r6   r|   )r0  r  r7   rE  r   r  r   r   )r*   r  r  r:   s       r0   test_workerszTestHalton.test_workers  s    ^^T^22
q400Z!<<
6666 	__R((
Q//VZ(((((r2   N)r   r   r   r   Haltonr*  r)  r(   r)   r/  r.  rx  rz   r2   r0   rv  rv    s        :DLBHq!fuen$enuen$enuen$enuen> ? ?M
 "(Z4'4'4'4'4'4'4'46 7 7K) ) ) ) )r2   rv  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.rG   r+  r*   argss     r0   rJ  zTestLHS.test_continuing      566666r2   c                 .    t          j        d           d S r}  r~  r  s     r0   rT  zTestLHS.test_fast_forward  r  r2   c                 .    t          j        d           d S NzJNot applicable: the value of reference sample is implementation dependent.r~  r  s     r0   rF  zTestLHS.test_sample  %     1 	2 	2 	2 	2 	2r2   strengthr   r   r   Fr   Nrb  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   rR   c                 ,    h | ]}t          |          S rz   )tuple)r   rows     r0   	<setcomp>z1TestLHS.test_sample_stratified.<locals>.<setcomp>  s    555#5::555r2   )r(   r7   r8   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                        r0   test_sample_stratifiedzTestLHS.test_sample_stratified  s    y$$%KLL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/ /r2   c                     |                      dd          }|                    d          }|                      ddd          }|                    d          }t          ||           d S )Nr   Fr3  rf   r  rb  r^  )r  r7   r   )r*   r  rg  ri  rj  s        r0   test_optimizer_1dzTestLHS.test_optimizer_1d  sj    q511]]R]((
;;U;MM//B/'':w/////r2   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 strengthrB   r   r%   )r  z%n is not the square of a prime numberr   )r   r  rd   r    zn is too small for d	   )rG   rH   rI   r   r   r7   )r*   r`  r  s      r0   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)  rJ  rT  rF  rG   r   rt  r  r  r  rz   r2   r0   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    r2   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' pointsrB   r   r6   )rG   r   r   r   Sobolr7   r*   r  s     r0   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   FrD  rL   rF   r  rB   )r   r  random_base2r   r/  rG   rH   rI   r*   r  r:   s      r0   test_random_base2zTestSobol.test_random_base2@  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 dimensionalityrB   r   zMaximum supported 'bits' is 64A   )bits)rG   rH   rI   r   r  MAXDIMr   s    r0   
test_raisezTestSobol.test_raiseN  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  FrD  r   r   )r   r  r   r7   flattentolistr   )r*   r  count1count2s       r0   test_high_dimzTestSobol.test_high_dimW  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2r2   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`rB   )r   r  r7   r   r/  rG   rH   rI   )r*   r  r  nsr:   s        r0   	test_bitszTestSobol.test_bits^  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   Frf   r  rF   )r   r  r7   r   r/  r  s      r0   test_64bitszTestSobol.test_64bitsh  sB    1u2666q!!4-v66666r2   N)r   r   r   r   r  r*  r)  r(   r)   r/  r.  r  r  r  r  rG   r   rt  r  r  rz   r2   r0   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 7r2   r  c                   J    e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zd Zd	S )
TestPoissonFc                 .    t          j        d           d S )NzToo costly in memory.r~  r  s     r0   rB  zTestPoisson.test_boundsr  s    +,,,,,r2   c                 .    t          j        d           d S )Nz"Not applicable: recursive process.r~  r  s     r0   rT  zTestPoisson.test_fast_forwardu  s    899999r2   c                 .    t          j        d           d S r  r~  r  s     r0   rF  zTestPoisson.test_samplex  r  r2   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  r7   rE  l2_normr(   rR  )r*   r  r  r  r  sample_initsample_continuedr:   s           r0   rJ  zTestPoisson.test_continuing|  s    q%@@mmbm));2%%%%{##v----!==2=..#$$****'((F2222.> ?aHHH6{{b1f$$$$v&((((((r2   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%   rL   volumesurface)r   r  hyperspherer   )r(   r7   r8   r   r*  rE  r  )r*   r9   r  r  r  radii
dimensionshypersphere_methodsgenr   r  r  r  r:   s                 r0   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,,,,,	- 	-r2   c                     d}|                      d|          }|                                }t          |          |k    sJ d S )Nr  r   )r   r  )r*  
fill_spacer  )r*   r  r  r:   s       r0   test_fill_spacezTestPoisson.test_fill_space  sJ    Qv..""$$v&((((((r2   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 samplingrB   r   rq   )r  )rG   rH   rI   r   PoissonDiskr_  s     r0   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)  rB  rT  rF  rJ  r  r  r  rz   r2   r0   r  r  n  s        ?DL- - -: : :2 2 2) ) )&- - -*) ) )3 3 3 3 3r2   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.rB   r6   )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)   rG   rH   rI   r   MultinomialQMCr  r7   r8   )r*   r  r`  s      r0   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   rR   )
r(   r7   r8   r)   
atleast_2dr  r  r   r  r   )r*   r   r  r  r  r  s         r0   test_MultinomialBasicDrawz,TestMultinomialQMC.test_MultinomialBasicDraw  s    y$$%JKKH33344=A..55c::#AtDDDa(((;;;;;;r2   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   rQ   rR   )	r(   r7   r8   r)   r   r  r   r   r  )r*   r   r  r  drawss        r0   test_MultinomialDistributionz/TestMultinomialQMC.test_MultinomialDistribution  s    y$$%KLLH33344#A4@@@a  u-r}Q/?/?dKKKKKKr2   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?rN   r   r   r  r   gaۢ?g7?r%   rN   r   )r(   r)   rE  r   r   )r*   p_cumulativer   s      r0   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Ir2   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   rR   )r(   r7   r8   r)   r  r  r  r   r  r  r   )r*   r   r  r  r  base_enginer  s          r0   test_other_enginez$TestMultinomialQMC.test_other_engine  s     y$$%LMMH33344=A..55c::iDt<<<#A)-/ / /a(((;;;;;;r2   N)r   r   r   r  rG   r   filterwarningsr  r  r  r  rz   r2   r0   r  r    s        O O O. [ 566< < 76<L L LJ J J [ 566	< 	< 76	< 	< 	<r2   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   )rY  r   r   r    r  r    r   r   r=  r    r   r   MultivariateNormalQMCr(   zerosr7   r   r   r*   r  sampless      r0   test_NormalQMCzTestNormalQMC.test_NormalQMC  s    *<<<--//W]F+++--!-$$W]F+++*<<<--//W]F+++--!-$$W]F+++++r2   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)rY  inv_transformr  r    r  r  r   r=  r  r  r  s      r0   test_NormalQMCInvTransformz(TestNormalQMC.test_NormalQMCInvTransform  s    *!D2 2 2--//W]F+++--!-$$W]F+++*!D2 2 2--//W]F+++--!-$$W]F+++++r2   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rY  r  r   r  LpɻgUygxDg?rQ   rR   r%   )r  r  gZ?)g#ڎrgΌ~42?gԻx?nrL   Tr   )rY  r  r  r   )	r(   r7   r8   r   r  r  r)   r   r  )r*   r   r  r  samples_expectedr  s         r0   test_NormalQMCSeededz"TestNormalQMC.test_NormalQMCSeeded  s   y$$%LMM*!E> > >--!-$$8i%;&/%:%< = =!1==== y$$%LMM*!E> > >--!-$$8%E%E%E%E%E%E%G H H!1==== y$$%LMMiDt<<<*!ET
 
 
 --!-$$8%E%E%E%E%E%E%G H H!1======r2   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)rY  r   r  r  <9\Mg+`?g]@"i?rQ   rR   r%   )r  r  g,D?)g˚X`?g7@gaTR')r(   r7   r8   r   r  r  r)   r   )r*   r   r  r  r  s        r0    test_NormalQMCSeededInvTransformz.TestNormalQMC.test_NormalQMCSeededInvTransform.  s&   y$$%LMM*!4t= = =--!-$$8i%;&.%9%; < <!1==== y$$%LMM*!4t= = =--!-$$8%E%E%E%B%B%B%D E E!1======r2   c                     dD ]l}t          j        |d          }t          j        t          j        |          |d          }|                                }t          |j        d|f           md S )Nr   r   r   Fr3  T)rY  r  r  r   )r   r  r  r(   r  r7   r   r   )r*   r   r  r  r  s        r0   r  zTestNormalQMC.test_other_engineA  s     	0 	0A)a%888K.BHQKK6A=AC C CF mmooGA////	0 	0r2   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   )rY  r      r  r   r   rV  r   r   r   r  r(   r7   r8   r   r  r  rA  r   rY  stdr
   cov	transposer*   r9   r  r  r   rI  pvalr  s           r0   test_NormalQMCShapiroz#TestNormalQMC.test_NormalQMCShapiroJ  s)   i##E***#FFF--#-&&26',,A,..//$67777726'++1+--122T9::::: 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4''''''r2   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   rV  r   r  r  r  r  s           r0   !test_NormalQMCShapiroInvTransformz/TestNormalQMC.test_NormalQMCShapiroInvTransformX  s2   i##H--*!Ds< < <--#-&&26',,A,..//$67777726'++1+--122T9::::: 	 	Agaaadm,,GAt#:::::fW&&(())vc$i  4''''''r2   N)
r   r   r   r   r  r	  r  r  r  r  rz   r2   r0   r  r    s}        , , ,, , , > > >>> > >&0 0 0( ( (( ( ( ( (r2   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 consistentrB   r   r   r  )r  r$   rL   r  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	rG   rH   rI   r   r  r  r(   r7   r8   r_  s     r0   r  z*TestMultivariateNormalQMC.test_validationsj  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     r0   test_MultivariateNormalQMCNonPDz9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  sG    *II			999iii8
 
 ".....r2   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    )rY  r  r  r  r  r   r=  r  r  r   r   r   r   r   r   r   r   r   r   r%   r    r%   r   r  r7   r   r   r(   r)   r*   r  r  rY  r  s        r0   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+++++r2   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)rY  r  r  r  r  r  r   r=  r  r  r#  r$  r%  )r  r&  r'  r(  r)  s        r0   &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+++++r2   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\ @rQ   rR   r%   r%   r%   r$   )gZh44gA->gZC)g~T~O?g*ʥo@gc}E?
r(   r7   r8   standard_normalr  diagr   r  r)   r   r*   r9   r;   Ar  r  r  s          r0    test_MultivariateNormalQMCSeededz:TestMultivariateNormalQMC.test_MultivariateNormalQMCSeeded  s   i##$KLL''

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

1 6 66*28III+>+>9>SJ J J--!-$$8%F%F%F%C%C%C%E F F!1======r2   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=`?rQ   rR   r/  r%   r$   )go.2?gikD0NgPN)g4YgҫJC?g-v2 @r0  r3  s          r0   ,test_MultivariateNormalQMCSeededInvTransformzFTestMultivariateNormalQMC.test_MultivariateNormalQMCSeededInvTransform  s   i##$KLL''

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

1 6 66*HYYYD
 
 
 --!-$$8%E%E%E%D%D%D%F G G!1======r2   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   rY  r  r   r  r  r   rV  r  r  rN   rM   r&   r   r   r(   r7   r8   r   r  rA  r   rY  r  r
   r  r  ri   r*   r   r  r  r   rI  r  r  s           r0   !test_MultivariateNormalQMCShapiroz;TestMultivariateNormalQMC.test_MultivariateNormalQMCShapiro  su   y$$%IJJ*Qq!fq!f-D
 
 
 --#-&&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!9
 
 
 --#-&&26',,A,..!Q7884?@@@@@26'++1+--<==DEEEEE 	 	Agaaadm,,GAt#:::::fW&&(())vc$i#o&&------r2   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)rY  r  r   r  r  r  r   rV  r  r  rN   rM   r&   r   r   r:  r;  s           r0   -test_MultivariateNormalQMCShapiroInvTransformzGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransform  s|   y$$%LMM*Qq!fq!f-D
 
 
 --#-&&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&&------r2   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   )rN   r   rN   )r   rN   rN   )rN   rN   rM   r9  r@  r  r   r   rV  r   r   r  g?r  r:  rP  )r(   r7   r8   r   r  rA  r   rY  r  ri   r
   r  r  r;  s           r0   $test_MultivariateNormalQMCDegeneratez>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerate0  s?   y$$%KLL*  ///???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   	 	 	 	 	r2   N)r   r   r   r  r!  r*  r,  r5  r7  r<  r>  r@  rz   r2   r0   r  r  h  s        = = =4/ / /, , ,0, , ,4> > >.> > >2. . .@!. !. !.F    r2   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   rL   )maxiter)r(   r7   RandomStateuniformr   r  r   r   )	r*   r9   r:   base_l1base_l2rI  sample_lloydcurr_l1curr_l2s	            r0   
test_lloydzTestLloyd.test_lloydI  s    i##G,,Q116""&//q 	" 	"AAA  L |,,Gl++G W$$$$W$$$$GG!FF	" 	"r2   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  re  N)r(   r)   copyr   r   may_share_memory)r*   sample_origsample_copy
new_samples       r0   test_lloyd_non_mutatingz!TestLloyd.test_lloyd_non_mutating`  s    
 hc
!$c
!$c
!$c
 , - - "&&((;
 
 

 	[111&{J???????r2   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 arrayrB   rD   z`sample` dimension is not >= 2r   r  r   z!`sample` is not in unit hypercubegr   r   )rG   rH   rI   r   )r*   r:   r  s      r0   test_lloyd_errorszTestLloyd.test_lloyd_errorsp  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   rM  rT  rV  rz   r2   r0   rB  rB  H  sD        " " ".@ @ @ ; ; ; ; ;r2   rB  c                 N    t          j        |                                           S ry   )r	   pdistr  re  s    r0   r  r    s    >&!!%%'''r2   ).r~   collectionsr   	itertoolsr   r   rG   numpyr(   numpy.testingr   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#  rv  r{  r  r  r  r  r  rB  r  rz   r2   r0   <module>ra     s   				       + + + + + + + +      K K K K K K K K K K " " " " " "       / / / / / /                         h% h% h% h% h% h% h% h%V#' #' #' #' #' #' #' #'L    3=   & & &.2 2 2< < <D+ + + e/ e/ e/ e/ e/ e/ e/ e/P) ) ) ) ) ) ) )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A3 A3 A3 A3 A3. A3 A3 A3H;< ;< ;< ;< ;< ;< ;< ;<|u( u( u( u( u( u( u( u(p] ] ] ] ] ] ] ]@5; 5; 5; 5; 5; 5; 5; 5;r( ( ( ( (r2   