
    e!h                     p   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j4                        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^                  ja                  d'ejb                  ejd                  ejf                  ejh                  g      d(        Z5y))    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                  j                  d	d
      d        Zd Zd Zd Zd Zd Zy)	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        ||       y )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           b/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/stats/tests/test_qmc.py
test_scalezTestUtils.test_scale   s   qcC5!taS1#yya@c* Q!Q#s,B7QF+,AwAC)yyVAYOc*IIlVAY/5ay$H)51 I7	()]3yyHMc*    c                 2   t         j                  j                  d      }|j                  d      }|j                  d       dz  }|j                  d      dz  }t        j                  |||d      }t        j                  |||d      }t        ||       y )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}    ii##$KLH%ZZ^Ob JJrNR61a799VQ48&)r3   c                    t        j                  t        d      5  g d}t        j                  |dd       d d d        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        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        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        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        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        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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 	6EIIeb15	6 ]]:-IJ 	EVaVc3Z0EXXAwA/0FIIefQi&)D	E
 ]]: .G H 	CVaVc3Z0E!+aVhHIIehB		C ]]: .G H 	EVaVc3Z0EXXz956FIIefQi&)D		E ]]: .: ; 	EVaXSz2EXXAwA/0FIIefQi&)D		E ]]:-GH 	$7QFQH-CXXAwA/0FIIcF1Iq	"$	$ 	$7	6 	6	E 	E
	C 	C	E 	E	E 	E	$ 	$sK   H2AH?,IAI;AI&#AI22H<?I	II#&I/2I;c           
      >   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 ]T  }t        j
                  d| z        }t        t        j                  t        j                  dg|z  g      d      |       V y )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=3&95((QFQFQFQFQFQFKL=3&95 	0&tD0&tD
 -------/ 0 ,$3t<f!	#t<f!	#t<f!	# ) 	DC''!sd)$CCOOBHHqc#gY,?3<>?B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        t        j                  t        d	      5  t        j                  ddg       d d d        d
d
gddgddgg}t        j                  t        d      5  t        j                  |d       d d d        y # 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   y xY w)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]]@
 	$ OOF#	$
 ]]:-HI 	$OOQF#	$ a&1a&3*-]]:-IJ 	3OOF62	3 	3	$ 	$
	$ 	$	3 	3s$   C#<C/C;#C,/C8;Dc           
      F   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 ]U  }t        j
                  d| z        }t        t        j                  t        j                  dg|z  g      dd      |       W |j                  t        dd        t        j                  t        d      5  t        j                  |d       d d d        t        j                  t        d      5  t        j                  |d        d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)!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                       y N r{   r3   r1   <lambda>z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    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   sq   -------/ 0 ,$3tQG!	# 	tQG!	# 	tQG!	# ) 	PC''!+&CCOOBHHqcCi[,A3<bJKNP	P
 	B\:]].6LM 	0OOFB/	0 ]]:-KL 	0OOFB/	0 	0	0 	0	0 	0s   /F*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        t        j                  t        d	      5  t        j                  ddg       d d d        d
d
gddgddgg}t        j                  t        d      5  t        j                  |d       d d d        t        j                  d
d
gd
d
gd
dgg      }t        j                  t        d      5  t        j                  |       d d d        t        j                  ddgg      }t        j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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]]:-OP 	.%%f-	. ]]:-HI 	.%%q!f-	. a&1a&3*-]]:-IJ 	=%%fV<	= Aq6Aq6Aq623\\+-PQ 	.%%f-	. C:,']]:-VW 	.%%f-	. 	.	. 	.	. 	.	= 	=	. 	.	. 	.s<   F<FF%F1,F=FF"%F.1F:=Gc                 f   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                  j                  d      }t        j                  d|      j                  d      }t        t        j                  |      d       t        t        j                  |d      d       y )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1&92771:F11&GQRTAq6Aq6C84511&93?11&GNAq6D$<!Q8911&92771:>J11&GQRVWX11&MtT%%fU;OQT	
 ii##$KL##aS188<11&9;N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       y )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   s<    
 Aq6Aq6Aq62311&GMr3   c           	         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                  j                  d      }|j                  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        t        j                  t        d      5  t	        |d
   |d   |       d d d        ddg}t        j                  t        d      5  t	        ||d d
 |       d d d        ddgg}t        j                  t        d      5  t	        ||d d
 |       d d d        g d}t        j                  t        d      5  t	        ||d d
 |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   y xY w)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   sD   ((QFQFQFQFQFQFKL=3&95OOGCRLDA	&wr{GCRL)L		65 ii##$KL**W%??7+OOGCRLDA	&wr{GCRL)L		8$7 ]]: .: ; 	Iwr{GCRL1,<iH	I ]]:-HI 	Cwr{GAJ	B	C A]]: .: ; 	?ugcrlI>	? s]]:-GH 	?ugcrlI>	? ]]: .> ? 	?ugcrlI>	? 	?#	I 	I	C 	C	? 	?
	? 	?	? 	?s<   	H	H>H!7H-/H9	HH!H*-H69Ic                    t         j                  j                  d      }t        j                  d|      }|j                  d      }t        j
                  |      }t        d      D ]~  }|j                  d      }|j                  d      }|j                  d      }t        |||||      }|||f   |||f   c|||f<   |||f<   t        j
                  |      }	t        ||	        y )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    ii##$JK$$QC0#v&s 		2ALL$ELL$E,,q/C'uc4HDucz"F5#:$6 3F5#:ucz 2 __V4ND.1		2r3   c                    d }d }d }d }t         j                  j                  d      }|j                  d      }t        j                  |d      } ||      }t        ||       t        j                  |d	      } ||      }t        ||       t        j                  |d
      } ||      }t        ||       t        j                  |d      } ||      }t        ||       y)z,Alternative definitions from Matt Haberland.c                 x   | 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)  s;   77DAqCFF277A&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE D!QJ-CAtQJ-CFF266"''!,/sSy0A,A+B,/sSy0A,A+B -0sSy0A,A+B IJ#K ()	* +E
 A:!e+a1fUl::r3   c                 \   | 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    77DAqD!QJ-CAtQJ-C66"&&+-66#)+<*=+-66#)+<a+?*@FG"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  sZ   77DAqCFF277C&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE D!QJ-CAtQJ-CFF266"''$,/sSy0A,A+B,/sSy0A,A+B -0sSy0A,A+B -0sSy0A10D,D	+E
 01#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                  t        |      D cg c]L  }t        |      D ]<  }t        j                  dt        j                  | |d d f   | |d d f         z
        > N c}}      |dz  z  z         S c c}}w )Nr&   r   r   r   )r   r)   rj   r   r   r   maximum)r   r   r   kjs        r1   disc_star_l2zKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2R  s    77DAq77qb	A!a%L1,&&Q!V!456 6&&"1XuQx*+ GGA

1QT7AadG <<==  !V s   >AC#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&  s    	;	-	; 		 ii##$KLH%OOF48	6?	8,OOF48	6?	8,OOF48	6?	8,OOF9=	'	8,r3   c                     t        d      }|d   dk(  sJ t        d      }|d   dk(  sJ t        d      }|d   dk(  sJ y )Nr7   rw         i  i^  i5	  )r   )r+   primess     r1   test_n_primeszTestUtils.test_n_primesp  sS    "bzR#bzS   #bzT!!!r3   c                 :    t        d      }g d}t        ||       y )Nr   )r   r&   r!                     r      %   )   +   /   )r   r   )r+   r   r-   s      r1   test_primeszTestUtils.test_primesz  s    !"%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      sz    +<* $D#DJ3!0F.*
0 [[J  N	N(?T2"H-T"%r3   r   c                       e Zd Zd Zd Zd Zy)TestVDCc                     t        d      }g d}t        ||       t        dd      }t        ||       t        dd      }t        ||       t        dd      }t        ||dd         y )	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  se    #-$A.$A.$q1AB(r3   c                     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         y )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q4SIAB(1ta
 	AB(1ta
 	AB(r3   c                 ~    t        j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)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  s0    ]]:-IJ 	'2A&	' 	' 	's   3<N)r   r   r   r   r   r   r{   r3   r1   r   r     s    ))"'r3   r   c                   .     e Zd Zd fd	ZddddZ xZS )RandomEnginec                 *    t         |   |||       y )N)r   optimizationr:   )super__init__)r+   r   r   r:   	__class__s       r1   r   zRandomEngine.__init__  s    1<SAr3   r   r}   c                T    | j                   j                  || j                  f      }|S rz   )r:   r8   r   )r+   r   rv   r;   s       r1   _randomzRandomEngine._random  s!    !TVV-r3   )NN)r   )r   r   r   r   r   __classcell__)r   s   @r1   r   r     s    Ba  r3   r   c                     t        dd      } | j                  d      }| j                  d      }| j                  dk(  sJ | j                          | j                  dk(  sJ | j                  d      }t	        ||       | j                          | j                  d       | j                  d      }t	        ||       | j                  dk(  sJ y )	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IF}}q}!H}}q}!H2%%% LLN1$$$MMAM&M=) LLN
!MMAM&M=)2%%%r3   c                     t        j                  t        d      5  t        d       d d d        t        j                  t        d      5  t        d       d d d        d} t        j                  t        |       5  t        d      }|j	                  dd       d d d        y # 1 sw Y   }xY w# 1 sw Y   ZxY w# 1 sw Y   y xY w)	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 T 
z)L	M R 8C	z	- 2aS12 2  2 2s#   B$B0<B<$B-0B9<Cc                  f   t        dd      } | j                  dd      }t        t        j                  |      dg       |j
                  t        j
                  d      k(  sJ | j                  ddd	      }t        t        j                  |      ddg       d
}d}| j                          | j                  d      }|||z
  z  |z   }t        j                  |      j                  t        j                        }| j                          | j                  ||dd      }t        ||       | j                  ||dd      }t        |j                         |j                         f||dz
  f       | j                  ||dd      }t        |j                         |j                         f||f       y )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    sj   !!HIF __Q"_%F6"QC(<<288G,,,,__Q"t_4F6"QF+
CD LLNr"Jtcz*S0J*%,,RXX6J
LLN__S42_FF$ __S43_GF&**,

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

-T{;r3   c                     d} t         j                  j                  d      }|j                  dd|       }|j                  dd| d	      }t	        | |
      }|j                  ||dd      }t        |j                  d      |       t        |j                  d      |dz
         |j                  ||dd      }t        |j                  d      |       t        |j                  d      |       y )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
FC
,,2BQ,
/C<<AAA<=D!%F__S43_GF#S)#T!V,__S43_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$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      ej$                  j'                  ddej4                  j7                  d      df      d               Zej$                  j'                  de	e
      d        Zej$                  j'                  ddg      d        Zd Zej$                  j'                  dde jB                  fdd fg      d        Z"d Z#y)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                          y  | j                  dd|i|S )N)r   seedr'  r{   )can_scrambleqmcerH   skip)r+   r   r:   kwargss       r1   r  zQMCEngineTests.engine  sM     499ChSCFCC tyy4c4V44r3   c                 6    |r| j                   S | j                  S rz   )scramble_ndunscramble_nd)r+   r   s     r1   	referencezQMCEngineTests.reference   s    #+tC1C1CCr3   )idsc                     | j                  d|      }|j                  d      }t        t        j                  d      |       y )Nr   r   r   rM   )rM   r   r  r8   r   r)   emptyr+   r   r  r;   s       r1   	test_0dimzQMCEngineTests.test_0dim#  5    q84q!288F+V4r3   c                     | j                  d|      }|j                  d      }t        t        j                  d      |       y )Nr   r2  r   r   r   r3  r5  s       r1   test_0samplezQMCEngineTests.test_0sample)  r7  r3   c                 n    | j                  d|      }|j                  d      }d|j                  k(  sJ y )Nr   r2  r   r   r   )r  r8   r   r5  s       r1   test_1samplezQMCEngineTests.test_1sample/  s4    q84q!%%%r3   c                     | j                  d|      }|j                  d      }t        j                  |dk\        sJ t        j                  |dk        sJ y )Nr   r2     r   r   )r  r8   r)   allr5  s       r1   test_boundszQMCEngineTests.test_bounds5  sN    sX6s#vvfk"""vvfk"""r3   c                     | j                  |      }| j                  d|      }|j                  t        |            }t	        ||d       |j
                  t        |      k(  sJ y )Nr   r   r2  r   r   rS   )r/  r  r8   lenr   r  )r+   r   r  r  r;   s        r1   test_samplezQMCEngineTests.test_sample<  s\    ^^X^6
q84Z1
6##s:666r3   c                     | j                  d|      }|j                  d      }| j                  d|      }t        |      dz  }|j                  |      }|j                  |      }t        |||d  d       y )Nr   r2  rG   r   r   rS   )r  r8   rD  r   )r+   r   r  r  n_half_r;   s          r1   test_continuingzQMCEngineTests.test_continuingE  sw    q84]]Q]'
q84ZA%MMFM#(
67 3$?r3   r:   Nc                     | j                  d||      }|j                  d      }|j                          |j                  dk(  sJ |j                  d      }t	        ||       y )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  s_     q8=]]Q]'
##q(((#
+r3   c                 $   | j                  d|      }|j                  d      }| j                  d|      }|j                  d       |j                  d      }t        ||dd  d       |j	                          g }t        d      D ];  }|dz  dk(  r |j                  |j                                +|j                  d	       = t        |t        d      D cg c]  }|dz  dk(  s| c}   t        j                  |      d
       y c c}w )Nr   r2  rG   r   rM   r   rS   r   r   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]]Q]'
q84A#
12T: 	
q 	'A1uz!!&--/2##A&		'
 	58:aq1uz:;NN:&	
:s   D
)D
c                    d}| j                  ||      }|j                  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       y )Nr   r2  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t$GGF#RYYsA%6T	
 	MM&"1-ryyq/A	
 	MM&"1-ryyq/A	
r3   c                     d}t        j                  t        |      5  | j                  ddd       d d d        y # 1 sw Y   y xY w)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 	BKK!e&KA	B 	B 	Bs	   <Azoptimization,metric	random-CDlloydc                     t        |        S rz   )r   r;   s    r1   r|   zQMCEngineTests.<lambda>  s    hv&6%6 r3   c                     | j                  dd      }|j                  d      } ||      }| j                  dd|      }|j                  d      } ||      }||k  sJ y )Nr   Fr2  rg   r   r\  )r  r8   )	r+   r   r   r  
sample_ref
metric_refoptimal_sample_metric_s	            r1   test_optimizerszQMCEngineTests.test_optimizers  sk     q51]]R](
J'
;;U;N//B/'/###r3   c                    t         j                  j                  d      }g }t        d      D ]6  }| j	                  dd|      }|j                  |j                  d             8 t        j                  t        d      5  t        |d	   |d
          d d d        t        j                  t        d      5  t        |d	   |d          d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nl	   B"V6DGlUN r&   r   TrK  rM   zArrays are not equalrC   r   r   )
r)   r8   r9   r   r  rO  rH   rI   AssertionErrorr   )r+   r:   r;   r   r  s        r1   test_consume_prng_statez&QMCEngineTests.test_consume_prng_state  s    ii##$FGq 	,A[[1t[=FMM&--*+	, ]]>1GH 	/F1I.	/]]>1GH 	/F1I.	/ 	/	/ 	/	/ 	/s   C7CCC()r$  )$r   r   r   __doc__NotImplementedr)  r(  r.  r-  r   r0  boolr   r  r)   ndarrayr/  rH   r   parametrizer6  r:  r=  rA  rE  rI  r8   r9   rL  rR  rZ  r_  r   ri   rj  rm  r{   r3   r1   r!  r!    s^   (D!L"M Ke}H
&C 455 
	5 D$ D2:: D [[Zs;5 <5
 [[Zs;5 <5
 [[Zs;& <&
 [[Zs;# <# [[Zs;7 <7 [[Zs;
@ <
@ [[Zs;[[3II!!"IJ	
, <, [[Zs;
 <
2 [[Z$0
 1
B
 [[#//*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y")#
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                 B   | j                  d      }| j                  dd      }|j                  t        |      d      }t	        ||d       |j                          |j                  d	      }|j                          |j                  d	d
      }t        ||       y )NTrC  r   r2  rG   )r   rv   gMbP?rS   r7   r}   )r/  r  r8   rD  r   r  r   r   )r+   r  r  r;   s       r1   test_workerszTestHalton.test_workers  s    ^^T^2
q40Z!<
6 	__R(
Q/VZ(r3   N)r   r   r   r   Haltonr)  r(  r)   r*   r.  r-  rv  r{   r3   r1   rt  rt    s    ::DLBHHq!fuen$enuen$enuen$enuen> ?M
 "((Z4'4'4'4'4'4'4'46 7K)r3   rt  c                      e Zd Zej                  ZdZd Zd Zd Z	e
j                  j                  dddg      e
j                  j                  dd	dg      e
j                  j                  d
ddg      d                      Zd Zd Zy)TestLHSTc                 .    t        j                  d       y NzNot applicable: not a sequence.rH   r*  r+   argss     r1   rI  zTestLHS.test_continuing      56r3   c                 .    t        j                  d       y r{  r|  r}  s     r1   rR  zTestLHS.test_fast_forward  r  r3   c                 .    t        j                  d       y NzJNot applicable: the value of reference sample is implementation dependent.r|  r}  s     r1   rE  zTestLHS.test_sample       1 	2r3   strengthr   r   r   Fr   Nr`  c                    t         j                  j                  d      }d}|dz  }d}t        j                  |||||      }|j                  |      }	|	j
                  ||fk(  sJ |j                  |k(  sJ t        j                  |      dz   |z  }
t        j                  |
||f      j                  }t        j                  |	|k7        sJ t        j                  |	d	      }|rd|z  nd}t        |||
       t        j                  |	|z
  |kD        sJ |dk(  r|t        j                  |      }t        t        ||            }t        t!        |j"                        d      D ]L  \  }}|	d d ||gf   }||z  j%                  t&              }|D ch c]  }t)        |       }}t+        ||       N y y y c c}w )Nl	   pIrtS"Md@B r!   r   r   )r   r   r  r   r:   r   r   r   r   rS   )r)   r8   r9   r   r   r   r  arangebroadcast_toTanysortr   setr   r   r   r   r  inttupler   )r+   r   r   r  r:   pr   r   r  r;   
expected1dexpectedsorted_sampletolunique_elementsdesiredr   r   
samples_2dresrowres_sets                         r1   test_sample_stratifiedzTestLHS.test_sample_stratified  s    ii##$JKqD##a(-51=(+- #||1v%%%##q(((
 iilS(A-
??:1v688vvf()))Q/!cAgqxc:vvfx'#-...q=\1 iilO'/?CDG$U688_a8 /1#A1vI.
!A~--c2145#5:55Wg.	/	 2= 6s   F=c                     | j                  dd      }|j                  d      }| j                  ddd      }|j                  d      }t        ||       y )Nr   Fr2  rg   r   r`  r\  )r  r8   r   )r+   r  re  rg  rh  s        r1   test_optimizer_1dzTestLHS.test_optimizer_1d  sR    q51]]R](
;;U;M//B/':w/r3   c                    d}t        j                  t        |      5  t        j                  dd       d d d        d}t        j                  t        |      5  t        j                  dd      }|j                  d	       d d d        d}t        j                  t        |      5  t        j                  dd      }|j                  d
       d d d        d}t        j                  t        |      5  t        j                  d
d      }|j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)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+   r^  r  s      r1   r  zTestLHS.test_raises  s   )]]:W5 	.q1-	. ;]]:W5 	''!a8FMM"	 ;]]:W5 	''!a8FMM!	 *]]:W5 	''!a8FMM!	 		. 	.	 	
	 	
	 	s/   D))D5))E7)E)D25D>E
E)r   r   r   r   r   r)  r(  rI  rR  rE  rH   r   rr  r  r  r  r{   r3   r1   ry  ry    s    DL772 [[Z!Q0[[Z%7[[^dK-@A#/ B 8 1#/J0r3   ry  c                   6   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                   j#                  ddd g      d!        Zd" Zy#)$	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      }|j                  d       d d d        y # 1 sw Y   y xY w)N'The balance properties of Sobol' pointsrC   r   r7   )rH   r   r   r   Sobolr8   r+   r  s     r1   test_warningzTestSobol.test_warning>  sC    \\+ .> ? 	YYq\FMM"	 	 	s   'AAc                 \   t        j                  dd      }|j                  d      }t        | j                  d d |       |j                  d      }t        | j                  dd |       t        j                  t        d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   FrC  rM   rG   r  rC   )r   r  random_base2r   r.  rH   rI   rJ   r+   r  r;   s      r1   test_random_base2zTestSobol.test_random_base2D  s    1u-$$Q'4--bq16: $$Q'4--a2F; ]]: .> ? 	#"	# 	# 	#s   B""B+c                 R   t        j                  t        d      5  t        j                  t        j                  j
                  dz          d d d        t        j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)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    ]]: .? @ 	,IIcii&&*+	, ]]: .= > 	"IIab!	" 	"		, 	,	" 	"s   1B0BBB&c                 b   t        j                  dd      }t        |j                         j	                         j                               }t        |j                         j	                         j                               }t        |t        ddi             t        |t        ddi             y )NiW  FrC  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299;<00299;<VWc4[12VWc4[12r3   r  r   r&   c                    t        j                  dd|      }d|z  }|j                  |      }t        | j                  d | |       t        j                  t        d      5  |j                          d d d        y # 1 sw Y   y xY w)Nr   Fr   r  zincreasing `bits`rC   )r   r  r8   r   r.  rH   rI   rJ   )r+   r  r  nsr;   s        r1   	test_bitszTestSobol.test_bitsb  so    1u48Wr"4--cr2F;]]:-@A 	MMO	 	 	s   #A==Bc                     t        j                  ddd      }|j                  d      }t        | j                  |       y )Nr   Frg   r  rG   )r   r  r8   r   r.  r  s      r1   test_64bitszTestSobol.test_64bitsl  s2    1u26q!4--v6r3   N)r   r   r   r   r  r)  r(  r)   r*   r.  r-  r  r  r  r  rH   r   rr  r  r  r{   r3   r1   r  r  '  s    99DLBHHr2h"Cj#Tl#Tl$en$en$en$en. /M "((Z4&	2'4'4'4'4'4'46 7K#"3 [[VaV, -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                  j                  dg d	g d
g      d        Zej                  j                  dg d	g d
g      d        Zd Zej                  j                  dg d	ddgg      ej                  j                  dddgg      d               Zd Zy)TestPoissonFc                 .    t        j                  d       y )NzToo costly in memory.r|  r}  s     r1   rA  zTestPoisson.test_boundsv  s    +,r3   c                 .    t        j                  d       y )Nz"Not applicable: recursive process.r|  r}  s     r1   rR  zTestPoisson.test_fast_forwardy  s    89r3   c                 .    t        j                  d       y r  r|  r}  s     r1   rE  zTestPoisson.test_sample|  r  r3   c                 t   d}d}| j                  d|d      }|j                  |      }t        |      |k  sJ t        |      |k\  sJ |j                  |      }t        |      |k  sJ t        |      |k\  sJ t	        j
                  ||gd      }t        |      |dz  k  sJ t        |      |k\  sJ y )	N皙?r   r   F)r   radiusr   r   r   r   )r  r8   rD  l2_normr)   rP  )r+   r~  r  r  r  sample_initsample_continuedr;   s           r1   rI  zTestPoisson.test_continuing  s     q%@mmbm);2%%%{#v---!==2=.#$***'(F222.> ?aH6{b1f$$$v&(((r3   c                 P   t         j                  j                  d      }d}d\  }}||z
  |j                  d      z  |z   }g d}ddg}t        |||      }|D ]L  \  }	}
}| j	                  |	|
||      }|j                  |      }t        |      |k  sJ t        |      |
k\  rLJ  y )	Nl	   x_4vZ.c r   )g{Gz?皙?r!   )r   r&   rM   volumesurface)r   r  hyperspherer:   )r)   r8   r9   r   r)  rD  r  )r+   r:   r  r  r  radii
dimensionshypersphere_methodsgenr   r  r  r  r;   s                 r1   test_mindistzTestPoisson.test_mindist  s    ii##$KL	Tszz!},s2
'3j%)<=&) 	-"Av{YYF  F ]]2&Fv;"$$$6?f,,,	-r3   c                 n    d}| j                  d|      }|j                         }t        |      |k\  sJ y )Nr  r   )r   r  )r)  
fill_spacer  )r+   r  r  r;   s       r1   test_fill_spacezTestPoisson.test_fill_space  s9    Qv.""$v&(((r3   r   rw   r   rw   )r   r   r   c                     d}g d}| j                  d|||      }|j                  d      }|D ]  }t        ||       t        ||        y )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}| j                  d|||      }|j                  d      }|D ]  }t        ||       t        ||        y )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  | j                  d|||       d d d        y # 1 sw Y   y xY w)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  sS    ]]EG 	P II&8hIO	P 	P 	Ps   AArw   r   r&   r   c                     d}t        j                  t        d      5  | j                  d|||       d d d        y # 1 sw Y   y xY w)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  sO     ]]$% 	 IIF!H  		 	 	s	   =Ac                     d}t        j                  t        |      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nz*'toto' is not a valid hypersphere samplingrC   r   rr   )r  )rH   rI   rJ   r   PoissonDiskr]  s     r1   r  zTestPoisson.test_raises  s8    ?]]:W5 	3OOA62	3 	3 	3s	   ?AN)r   r   r   r   r  r)  r(  rA  rR  rE  rI  r  r  rH   r   rr  r  r  r  r  r  r{   r3   r1   r  r  r  s    ??DL-:2)&-*) [[Z,	)BC
/ D
/ [[Z,	)BC
/ D
/P [[Z,R)AB[[Z1a&2	 3 C	3r3   r  c                       e Zd Zd Zej
                  j                  d      d        Zd Zd Z	ej
                  j                  d      d        Z
y)TestMultinomialQMCc                 8   t        j                  g d      }t        j                  t        d      5  t        j                  |d       d d d        t        j                  g d      }d}t        j                  t        |      5  t        j                  |d       d d d        t        j                  g d      }d	}t        j                  t        |      5  t        j                  |dt        j                  d
             d d d        d}t        j                  t        |      5  t        j                  |dt         j                  j                                d d d        y # 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   y xY w)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  r^  s      r1   test_validationsz#TestMultinomialQMC.test_validations  s>   HH45]]: .A B 	/q2.	/
 HH235]]:W5 	/q2.	/ HH345]]:W5 	Fq2cii!nE	F 8]]:W5 	Oq2bii6K6K6MN	O 	O#	/ 	/	/ 	/	F 	F	O 	Os/   E+E8-F-5F+E58FFFzignore::UserWarningc                 4   t         j                  j                  d      }t        j                  g d      }d}t        j                  ||z        j                  t              }t        j                  |||      }t        |j                  d      |d       y )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  sq    ii##$IJHH34==A.55c:##AsCa((;r3   c                 0   t         j                  j                  d      }t        j                  g d      }t	        j
                  |d|      }|j                  d      }t        |t        j                  |      z  t        j                  |      d       y )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  sj    ii##$JKHH34##A#>a u-r}}Q/?dKr3   c                 4   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
         y )N)r   皙?g?g333333?r   ?gGz?rO   r   r   r  r   gaۢ?g7?r&   rO   r   )r)   r*   rD  r   r   )r+   p_cumulativer  s      r1   test_FindIndexz!TestMultinomialQMC.test_FindIndex  s    xx KL< %lD#>B%lD#>B%lD'BAF%lD'BAF%lD#>qIr3   c                 f   t         j                  j                  d      }t        j                  g d      }d}t        j                  ||z        j                  t              }t        j                  dd|      }t        j                  ||||      }t        |j                  d      |d       y )	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     ii##$KLHH34==A.55c:iiDc:##A(+-a((;r3   N)r   r   r   r  rH   r   filterwarningsr  r  r  r  r{   r3   r1   r  r    s\    O. [[ 56< 7<LJ [[ 56	< 7	<r3   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestNormalQMCc                    t        j                  t        j                  d            }|j	                         }t        |j                  d       |j	                  d      }t        |j                  d       t        j                  t        j                  d            }|j	                         }t        |j                  d       |j	                  d      }t        |j                  d	       y )
Nr   )rW  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      }|j	                         }t        |j                  d       |j	                  d      }t        |j                  d       t        j                  t        j                  d      d      }|j	                         }t        |j                  d	       |j	                  d      }t        |j                  d
       y )Nr   T)rW  inv_transformr  r!   r   r  r   r<  r  r  r  s      r1   test_NormalQMCInvTransformz(TestNormalQMC.test_NormalQMCInvTransform4  s    **!D2--/W]]F+--!-$W]]F+**!D2--/W]]F+--!-$W]]F+r3   c                 T   t         j                  j                  d      }t        j                  t        j
                  d      d|      }|j                  d      }t        j                  ddgdd	gg      }t        ||d
       t         j                  j                  d      }t        j                  t        j
                  d      d|      }|j                  d      }t        j                  g dg dg      }t        ||d
       t         j                  j                  d      }t        j                  dd|      }t        j                  t        j
                  d      d||      }|j                  d      }t        j                  g dg dg      }t        ||d
       y )Nl	   q)*syRM@
K r   F)rW  r  r'  r   LpɻgUygxDg?rR   rS   r&   rW  r  r:   )r  r  gZ?)g#ڎrgΌ~42?gԻx?nrM   Tr   )rW  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  sk   ii##$KL**!E=--!-$88i%;&/%:%< =!1= ii##$KL**!Es<--!-$88%E%E%G H!1= ii##$KLiiDc:**!EC
 --!-$88%E%E%G H!1=r3   c                    t         j                  j                  d      }t        j                  t        j
                  d      |d      }|j                  d      }t        j                  ddgdd	gg      }t        ||d
       t         j                  j                  d      }t        j                  t        j
                  d      |d      }|j                  d      }t        j                  g dg dg      }t        ||d
       y )Nl	   9e)-%5Z%_6 r   T)rW  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    ii##$KL**!#T;--!-$88i%;&.%9%; <!1= ii##$KL**!#T;--!-$88%E%B%D E!1=r3   c                     dD ]l  }t        j                  |d      }t        j                  t        j                  |      |d      }|j                         }t        |j                  d|f       n y )Nr   r   r   Fr2  T)rW  r  r  r   )r   r  r  r)   r  r8   r   r   )r+   r   r  r  r  s        r1   r  zTestNormalQMC.test_other_enginew  sa     	0A))a%8K..BHHQK6A=ACF mmoGA/	0r3   c                 R   t         j                  j                  d      }t        j                  t        j
                  d      |      }|j                  d      }t        t        j                  |j                  d            dk        sJ t        t        j                  |j                  d      d	z
        dk        sJ d
D ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d
         dk  sJ y )Ni3  r   )rW  r:      r   r   r   rT  r   r   r   r  r)   r8   r9   r   r  r  r@  r   rW  stdr   cov	transposer+   r:   r  r  r   rH  pvalr  s           r1   test_NormalQMCShapiroz#TestNormalQMC.test_NormalQMCShapiro  s    ii##E***E--#-&266',,A,./$6777266'++1+-12T9::: 	Agadm,GAt#::	 ffW&&()vvc$i 4'''r3   c                 T   t         j                  j                  d      }t        j                  t        j
                  d      d|      }|j                  d      }t        t        j                  |j                  d            d	k        sJ t        t        j                  |j                  d      d
z
        d	k        sJ dD ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d         d	k  sJ y )Nir   Tr  r  r   r   r   rT  r   r  r  r  r   s           r1   !test_NormalQMCShapiroInvTransformz/TestNormalQMC.test_NormalQMCShapiroInvTransform  s    ii##H-**!Dc;--#-&266',,A,./$6777266'++1+-12T9::: 	Agadm,GAt#::	 ffW&&()vvc$i 4'''r3   N)
r   r   r   r	  r  r  r  r  r"  r$  r{   r3   r1   r  r  %  s&    ,, >@>&0((r3   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestMultivariateNormalQMCc                 .   d}t        j                  t        |      5  t        j                  dgt        j
                  d             d d d        d}t        j                  t        |      5  t        j                  g dt        j
                  d             d d d        d	}t        j                  t        |      5  t        j                  ddgt        j                  j                                d d d        d
}t        j                  t        |      5  t        j                  ddgddgddgg       d d d        d}t        j                  t        |      5  t        j                  ddgddgddgg       d d d        d}t        j                  t        |      5  t        j                  dgddgddgg       d d d        y # 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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   r]  s     r1   r  z*TestMultivariateNormalQMC.test_validations  s   =]]:W5 	B%%qc#))a.A	B >]]:W5 	H%%i		AG	H 8]]:W5 	N%%q!fRYY5J5J5LM	N 0]]:W5 	@%%q!f1v1v.>?	@ 9]]:W5 	@%%q!f1v1v.>?	@ E]]:W5 	=%%qcQFQF+;<	= 	=)	B 	B	H 	H	N 	N	@ 	@	@ 	@	= 	=sG   -G0.G6G'G3"G?&HGG$'G03G<?HHc                 b    t        j                  g dg dg dg dg      }|j                  J y )Nr%   )r   r   r   )r   r   r   )r   r   r   )r   r  _corr_matrixr  s     r1   test_MultivariateNormalQMCNonPDz9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  s2    **	9i8
 ""...r3   c                    t        j                  dd      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       t        j                  ddgddgddgg      }|j                         }t        |j                  d       |j                  d      }t        |j                  d	       t        j                  g d
      }t        j                  g dg dg dg      }t        j                  ||      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       y )Nr   r!   )rW  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  rW  r  s        r1   test_MultivariateNormalQMCz4TestMultivariateNormalQMC.test_MultivariateNormalQMC  s   **q9--/W]]F+--!-$W]]F+ **AaVaV<LM--/W]]F+--!-$W]]F+ xx	"hh	9i89**45--/W]]F+--!-$W]]F+r3   c                    t        j                  ddd      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       t        j                  ddgddgddggd      }|j                         }t        |j                  d	       |j                  d      }t        |j                  d
       t        j                  g d      }t        j                  g dg dg dg      }t        j                  ||d      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       y )Nr   r!   T)rW  r  r  r  r   r  r   r<  r  r  r,  r-  r.  )r  r/  r0  r1  r2  s        r1   &test_MultivariateNormalQMCInvTransformz@TestMultivariateNormalQMC.test_MultivariateNormalQMCInvTransform  s    **qM--/W]]F+--!-$W]]F+ **Qq!fq!f-T
 --/W]]F+--!-$W]]F+ xx	"hh	9i89**4DI--/W]]F+--!-$W]]F+r3   c                 H   t         j                  j                  d      }|j                  d      }||j	                         z  t        j
                  |j                  d            z   }t        j                  t        j                  ddg      |d|      }|j                  d      }t        j                  dd	gd
dgg      }t        ||d       t         j                  j                  d      }|j                  d      }||j	                         z  t        j
                  |j                  d            z   }t        j                  t        j                  g d      |d|      }|j                  d      }t        j                  g dg dg      }t        ||d       y )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]   ii##$KL'

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

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

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

1 66**HHY4
 --!-$88%E%D%F G!1=r3   c                 p   t         j                  j                  d      }t        j                  ddgddgddgg|      }|j                  d      }t        t        j                  |j                  d            dk        sJ t        t        j                  |j                  d      dz
        dk        sJ d	D ]  }t        |d d |f         \  }}|d
kD  rJ  t        j                  |j                               }t        j                  |d	         dk  sJ t        j                  ddgddgddgg|      }|j                  d      }t        t        j                  |j                  d      ddgz
        dk        sJ t        t        j                  |j                  d      t        j                  d      z
        dk        sJ d	D ]  }t        |d d |f         \  }}|d
kD  rJ  t        j                  |j                               }t        j                  |d	   dz
        dk  sJ y )Nl   V^Am%2r   r   rW  r  r:   r  r   r   rT  r  r  rO   rN   r'   r   r   r)   r8   r9   r   r  r@  r   rW  r  r   r  r  rj   r   s           r1   !test_MultivariateNormalQMCShapiroz;TestMultivariateNormalQMC.test_MultivariateNormalQMCShapiro#  s   ii##$HI**Qq!fq!f-3
 --#-&266',,A,./$6777266'++1+-12T9::: 	Agadm,GAt#::	 ffW&&()vvc$i 4''' **s3*sCj!9s
 --#-&266',,A,.!Q784?@@@266'++1+-<=DEEE 	Agadm,GAt#::	 ffW&&()vvc$i#o&---r3   c                 t   t         j                  j                  d      }t        j                  ddgddgddgg|d      }|j                  d      }t        t        j                  |j                  d            d	k        sJ t        t        j                  |j                  d      dz
        d	k        sJ d
D ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d
         d	k  sJ t        j                  ddgddgddgg|d      }|j                  d      }t        t        j                  |j                  d      ddgz
        d	k        sJ t        t        j                  |j                  d      t        j                  d      z
        d	k        sJ d
D ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d
   dz
        d	k  sJ y )Nl	   A"l7D#maxbwcuC r   r   T)rW  r  r:   r  r  r   r   rT  r  r  rO   rN   r'   r   r   rC  r   s           r1   -test_MultivariateNormalQMCShapiroInvTransformzGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformC  s   ii##$KL**Qq!fq!f-3d
 --#-&266',,A,./$6777266'++1+-12T9::: 	Agadm,GAt#::	 ffW&&()vvc$i 4''' **ssc3Z(	
 --#-&266',,A,.!Q784?@@@266'++1+-<=DEEE 	Agadm,GAt#::	 ffW&&()vvc$i#o&---r3   c                    t         j                  j                  d      }t        j                  g dg dg dg dg|      }|j                  d      }t        t        j                  |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kD  rJ  t        j                  |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 y )Nl	   @jSm-\1:c# )r   r   r   )rO   r   rO   )r   rO   rO   )rO   rO   rN   rB  r?  r   r   r   rT  r   r   r  g?r  r9  rN  )r)   r8   r9   r   r  r@  r   rW  r  rj   r   r  r  r   s           r1   $test_MultivariateNormalQMCDegeneratez>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegeneratef  s   ii##$JK**  /?C

 --#-&266',,A,./$6777vvbffWQT]+a/04777vvbffWQT]+a/04777vvbffWQT]+bggaj89D@@@ 	Agadm,GAt#::	 ffW&&()vvc$i 4'''vvc$i!m$t+++266'!Q$-'!Q$-7'!Q$-GH  	 r3   N)r   r   r   r  r*  r3  r5  r>  r@  rD  rF  rH  r{   r3   r1   r&  r&    s1    =4/,0,4>.>2.@!.Fr3   r&  c                       e Zd Zd Zd Zd Zy)	TestLloydc                 $   t         j                  j                  d      }|j                  ddd      }t	        |      }t        |      }t        d      D ]9  }t        |d      }t	        |      }t        |      }||k  sJ ||k  sJ |}|}|}; y )Ni r   r   )   r   )r  rM   )maxiter)r)   r8   RandomStateuniformr   r  r   r   )	r+   r:   r;   base_l1base_l2rH  sample_lloydcurr_l1curr_l2s	            r1   
test_lloydzTestLloyd.test_lloyd  s    ii##G,Q16"&/q 	"AAAL |,Gl+G W$$$W$$$GG!F	"r3   c                     t        j                  ddgddgddgddgg      }|j                         }t        |      }t	        ||       t        j
                  ||      rJ y)z
        Verify that the input samples are not mutated in place and that they do
        not share memory with the output.
        r   r  rc  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  st    
 hhc
!$c
!$c
!$c
 , - "&&(;

 	[1&&{J????r3   c                    t        j                  t        d      5  g d}t        |       d d d        d}t        j                  t        |      5  dgdgdgg}t        |       d d d        d}t        j                  t        |      5  d	dgd
dgddgg}t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   y xY w)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 	; F26:	; 0]]:S1 	;cC51#&F26:	; 3]]:S1 	;Qi#saV4F26:	; 	;	; 	;
	; 	;
	; 	;s#   B*B6
C*B36B?CN)r   r   r   rU  r\  r^  r{   r3   r1   rJ  rJ  ~  s    ".@ ;r3   rJ  c                 H    t        j                  |       j                         S rz   )r
   pdistr  rc  s    r1   r  r    s    >>&!%%''r3   r  c                    d}t         j                  j                  |      } | d|      j                  d      }t         j                  j                  |      } | d|      j                  d      }t        ||       t         j                  j	                  |      } | d|      j                  d      } | d|      j                  d      }t        ||       t         j                  j	                  |      } | d|      j                  d      }t        ||       t        ||       d}t        j                  t        |      5   | d||       d d d        y # 1 sw Y   y xY w)	Nl   7P r   )r   r'  rM   r   z3got multiple values for argument now known as `rng`rC   )r   r:   r'  )r)   r8   rN  r   r9   rH   rI   	TypeError)r  seed_numberr:   res1res2res3r^  s          r1   test_deterministicrg    s(    K
))


,CAC ''*D
))


,CAC ''*Dt
))


,CAC ''*DA;'..q1Dt
))


,CA3&&q)DttCG	y	0 7+67 7 7s   	EE')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!  rt  ry  r  r  r  r  r&  rJ  r  r   rr  rw  r  r   r  rg  r{   r3   r1   <module>rp     s<   	  +    #  /   h% h%V#' #'L3== &.2<D+ h/ h/V) )BRn RjH7 H7Vq3. q3h<< <<~v( v(r] ]@5; 5;r( CJJ		$'$6$6$I J7J7r3   