
    (ph                     p   S SK r S SKJr  S SKJrJr  S SKrS SKrS SK	J
r
JrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJrJrJrJrJrJrJrJr   " S
 S5      r " S S5      r " S S\R4                  5      r S r!S r"S r#S r$ " S S5      r% " S S\%5      r& " S S\%5      r' " S S\%5      r( " S S\%5      r) " S S5      r* " S  S!5      r+ " S" S#5      r, " S$ S%5      r-S& r.\R^                  Ra                  S'\Rb                  \Rd                  \Rf                  \Rh                  /5      S( 5       r5g))    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                       \ rS rSrS rS rS rS rS rS r	S r
S	 r\R                  R                  S
SS9S 5       rS rS rS rS rS rSrg)	TestUtils   c                    S/S/S//nS/S/S//n[         R                  " USSS9n[        X25        SS/SS/SS//n[        R                  " SS/SS//5      nSS/SS/SS	//n[         R                  " XS   US   S9n[        X25        [         R                  " X4S   US   S
S9n[        XQ5        / SQ/ SQ/ SQ/nS/ SQpv/ SQ/ SQ/ SQ/n[         R                  " XUS9n[        X25        g )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           M/var/www/html/venv/lib/python3.13/site-packages/scipy/stats/tests/test_qmc.py
test_scaleTestUtils.test_scale   s   qcC5!taS1#yya@* Q!Q#s,B7QF+,AwAC)yyVAYO*IIlAY/5ay$H)1 I7	()]3yyHM*    c                 $   [         R                  R                  S5      nUR                  S5      nUR                  S5      * S-  nUR                  S5      S-  n[        R                  " X#USS9n[        R                  " XSUSS9n[        Xb5        g )Nl	   EaT4G*wv    
   r9   F)r%   T)r*   randomdefault_rngr   r)   r   )r,   rngsampleabscaledunscaleds          r2   test_scale_randomTestUtils.test_scale_random4   sw    ii##$KLH%ZZ^Ob JJrNR6a799V48)r5   c                    [         R                  " [        SS9   / SQn[        R                  " USSS9  S S S 5        [         R                  " [        SS9   SS/S	S	/S
S
//n[
        R                  " SS/SS//5      n[        R                  " XS   US	   S9  S S S 5        [         R                  " [        SS9   SS/S	S	/S
S
//n/ SQSS/pC[        R                  " XUS9  S S S 5        [         R                  " [        SS9   SS/S	S	/S
S
//n[
        R                  " / SQ/ SQ/5      n[        R                  " XS   US	   S9  S S S 5        [         R                  " [        SS9   SS/S	S/S
S
//n[
        R                  " SS/SS//5      n[        R                  " XS   US	   S9  S S S 5        [         R                  " [        SS9   SS/SS/SS//n[
        R                  " SS/SS//5      n[        R                  " XRS   US	   SS9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNa= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g = f)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-   r0   r    r!   r.   s         r2   test_scale_errorsTestUtils.test_scale_errors=   sF   ]]:-HIEIIeb15 J ]]:-IJVaVc3Z0EXXAwA/0FIIeQi&)D K
 ]]: .G HVaVc3Z0E!+aVhIIeB	H ]]: .G HVaVc3Z0EXXz956FIIeQi&)D	H ]]: .: ;VaXSz2EXXAwA/0FIIeQi&)D	; ]]:-GH7QFQH-CXXAwA/0FIIc1Iq	"$ IH7 JI KJ
H HH H; ; IHsK   HAH*:(H<AI'AI AI1
H'*
H9<
I
I 
I.1
I?c           
      "   [         R                  " SS/SS/SS/SS/SS/SS//5      nSU-  S-
  S	-  n[         R                  " SS/SS/SS/SS/SS/SS//5      nSU-  S-
  S	-  n[        [        R                  " U5      S
SS9  [        [        R                  " U5      SSS9  [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nSU-  S-
  S-  n[        [        R                  " USS9SSS9  [        [        R                  " USS9SSS9  [        [        R                  " USS9SSS9  S HU  n[         R
                  " SU* -  5      n[        [        R                  " [         R                  " S/U-  /5      SS9U5        MW     g )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   rQ   rJ          @   L2-star)r*   r+   r   r   discrepancysqrt)r,   space_1space_2r=   dimrefs         r2   test_discrepancy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!	# )C''!sd)$CCOOBHHqc#gY,?3<>?BD )r5   c           	      "   [         R                  " SS/SS/SS/SS/SS/SS//5      n[        R                  " [        SS9   [
        R                  " U5        S S S 5        [        R                  " [        S	S9   [
        R                  " SS/5        S S S 5        S
S
/SS/SS//n[        R                  " [        SS9   [
        R                  " USS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       Nb= f! , (       d  f       g = f)Nr   r'   r   r   rQ   r"   rI   rF   rE   r   r   'toto' is not a valid ...totorb   )r*   r+   rK   rL   rM   r   rm   r,   r=   s     r2   test_discrepancy_errors!TestUtils.test_discrepancy_errors   s    Aq6Aq6Aq6Aq6Aq6Aq6JK]]@
 OOF#

 ]]:-HIOOQF# J a&1a&3*-]]:-IJOOF62 KJ
 

 JI KJs$   C:C/?D 
C,/
C= 
Dc           
      2   [         R                  " / SQ/ SQ/ SQ/ SQ/ SQ/ SQ/ SQ/5      nSU-  S	-
  S
-  n[        [        R                  " USSS9SSS9  [        [        R                  " USSS9SSS9  [        [        R                  " USSS9SSS9  S HV  n[         R
                  " SU* -  5      n[        [        R                  " [         R                  " S/U-  /5      SSS9U5        MX     UR                  [        SS 5        [        R                  " [        SS9   [        R                  " USS9  S S S 5        [        R                  " [        SS9   [        R                  " US S9  S S S 5        g ! , (       d  f       NF= f! , (       d  f       g = f)!NrY   rZ   r[   r\   r]   r^   r_   rR   rS   r`   ra   rJ   )rc   workersr#   rV   rW   rd   re   rf   rg   rh   r'   r   rl   	cpu_countc                      g N r   r5   r2   <lambda>5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    Tr5   zCannot determine therF   r|   zInvalid number of workers...r   )r*   r+   r   r   rm   rn   setattrosrK   rL   NotImplementedErrorrM   )r,   monkeypatchr=   rq   rr   s        r2   test_discrepancy_parallel#TestUtils.test_discrepancy_parallel   s^   -------/ 0 ,$3tQG!	# 	tQG!	# 	tQG!	# )C''!+&CCOOBHHqcCi[,A3<bJKNP )
 	B\:]].6LMOOFB/ N ]]:-KLOOFB/ ML NM MLs   !E7F7
F
Fc           	         [         R                  " SS/SS/SS/SS/SS/SS//5      n[        R                  " [        SS9   [
        R                  " U5        S S S 5        [        R                  " [        S	S9   [
        R                  " SS/5        S S S 5        S
S
/SS/SS//n[        R                  " [        SS9   [
        R                  " USS9  S S S 5        [         R                  " S
S
/S
S
/S
S//5      n[        R                  " [        SS9   [
        R                  " U5        S S S 5        [         R                  " SS//5      n[        R                  " [        SS9   [
        R                  " U5        S S S 5        g ! , (       d  f       GN4= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r'   r   r   rQ   r"   rI   rF   rE   r   r   rv   rw   rb   z!Sample contains duplicate points.z'Sample must contain at least two points)	r*   r+   rK   rL   rM   r   geometric_discrepancywarnsUserWarningrx   s     r2   !test_geometric_discrepancy_errors+TestUtils.test_geometric_discrepancy_errors   st   Aq6Aq6Aq6Aq6Aq6Aq6JK]]:-OP%%f- Q ]]:-HI%%q!f- J a&1a&3*-]]:-IJ%%fV< K Aq6Aq6Aq623\\+-PQ%%f- R C:,']]:-VW%%f- XW QP JI KJ RQ XWs<   F:F?F*F;&G
F
F'*
F8;
G	
Gc                 `   [         R                  " SS/SS//5      n[        [        R                  " U5      [         R
                  " S5      5        [        [        R                  " USS9[         R
                  " S5      5        [         R                  " SS/SS/SS//5      n[        [        R                  " U5      S5        [        [        R                  " USS9S5        [         R                  " SS/SS/SS//5      n[        [        R                  " U5      [         R
                  " S5      S	-  5        [        [        R                  " USS9[         R
                  " S5      S-  5        [        [        R                  " US
S9S5        [        [        R                  " USS
S9S5        [         R                  R                  S5      n[        R                  " SUS9R                  S5      n[        [        R                  " U5      S5        [        [        R                  " USS9S5        g )Nr   r   r   mstrb   r         ?      ?rQ   	chebyshev)metric)rc   r   l	   s;80riR$ r'   dr<   2   gY$?guڗ8?)	r*   r+   r   r   r   rn   r:   r;   LatinHypercube)r,   r=   r<   s      r2   test_geometric_discrepancy$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	
r5   z5minimum_spanning_tree ignores zero distances (#18892)T)reasonstrictc                     [         R                  " SS/SS/SS//5      n[        [        R                  " USS9S5        g )Nr   r   r   rb   r   )r*   r+   r   r   r   rx   s     r2   2test_geometric_discrepancy_mst_with_zero_distances<TestUtils.test_geometric_discrepancy_mst_with_zero_distances   s<    
 Aq6Aq6Aq62311&GMr5   c           	         [         R                  " SS/SS/SS/SS/SS/SS//5      nSU-  S-
  S	-  n[        R                  " US S
 SS9n[	        US
   US S
 U5      n[        USSS9  [         R                  R                  S5      nUR                  S5      n[        R                  " U5      n[        R                  " US S
 SS9n[	        US
   US S
 U5      n[        X5SS9  [        R                  " [        SS9   [	        US
   US S
 S-   U5        S S S 5        [        R                  " [        SS9   [	        US
   US   U5        S S S 5        SS/n[        R                  " [        SS9   [	        XaS S
 U5        S S S 5        SS//n[        R                  " [        SS9   [	        XaS S
 U5        S S S 5        / SQn[        R                  " [        SS9   [	        XaS S
 U5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nw= f! , (       d  f       g = f)Nr   r'   r   r   rQ   r"   rR   rS   rT   r}   T)	iterativerU   rV   rW   l	   gy,!uUxFYo9"] )rQ   r9   rI   rF   rE   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   rm   r   r   r:   r;   rK   rL   rM   )r,   ro   	disc_init	disc_iterr<   disc_refx_news          r2   test_update_discrepancy!TestUtils.test_update_discrepancy   s   ((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		$7 ]]: .: ;wr{GCRL1,<iH; ]]:-HIwr{GAJ	B J A]]: .: ;ucrlI>; s]]:-GHucrlI> I ]]: .> ?ucrlI>? ?#; ; JI; ;
 IH? ?s<   >G36H/H%H&H73
H
H
H#&
H47
Ic                    [         R                  R                  S5      n[        R                  " SUS9nUR                  S5      n[        R
                  " U5      n[        S5       Hy  nUR                  S5      nUR                  S5      nUR                  S5      n[        X6XxU5      nX7U4   X6U4   sX6U4'   X7U4'   [        R
                  " U5      n	[        XI5        M{     g )Nl	   PvWuW=lWx" r"   r<   r9   d   )
r*   r:   r;   r   r   rm   rangeintegersr   r   )
r,   r<   qmc_genr=   discirow_1row_2coldisc_references
             r2   test_perm_discrepancyTestUtils.test_perm_discrepancy  s    ii##$JK$$QC0#v&sALL$ELL$E,,q/C'u4HDcz"F#:$6 3F#:cz 2 __V4ND1 r5   c                    S nS nS nS n[         R                  R                  S5      nUR                  S5      n[        R                  " USS9nU" U5      n[        Xx5        [        R                  " US	S9nU" U5      n[        Xx5        [        R                  " US
S9nU" U5      n[        Xx5        [        R                  " USS9nU" U5      n[        Xx5        g)z,Alternative definitions from Matt Haberland.c                 v   U R                   u  pU n[        R                  " [        R                  " SS[        R                  " US-
  5      -  -   S[        R                  " US-
  5      S-  -  -
  SS95      nU S S S 2S S 24   nU S S 2S S S 24   n[        R                  " [        R                  " [        R                  " SS[        R                  " US-
  5      -  -   S[        R                  " US-
  5      -  -   S[        R                  " X5-
  5      -  -
  SS9SS95      nSU-  SU-  U-  -
  SUS-  -  U-  -   $ )Nr   r   r   axisr   gUUUUUU?shaper*   sumprodabsxnsxijdisc1xkjdisc2s          r2   disc_c2FTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_c2)  s7   77DACFF277A&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE D!QJ-CAtQJ-CFF266"''!,/sSy0A,A+B,/sSy0A,A+B -0sy0A,A+B IJ#K ()	* +E
 A:!e+a1fUl::r5   c                 T   U R                   u  pU S S S 2S S 24   nU S S 2S S S 24   n[        R                  " [        R                  " [        R                  " S[        R                  " X4-
  5      -
  [        R                  " X4-
  5      S-  -   SS9SS95      nSU-  * SUS-  -  U-  -   $ )Nr(   r   r   r   gUUUUUU?r   r   )r   r   r   r   r   r   s         r2   disc_wdFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wd8  s    77DAD!QJ-CAtQJ-C66"&&+-66#)+<*=+-66#)+<a+?*@FG"I '() *D 1H9qAv},,r5   c                    U R                   u  pU n[        R                  " [        R                  " SS[        R                  " US-
  5      -  -
  S[        R                  " US-
  5      S-  -  -
  SS95      nU S S S 2S S 24   nU S S 2S S S 24   n[        R                  " [        R                  " [        R                  " SS[        R                  " US-
  5      -  -
  S[        R                  " US-
  5      -  -
  S[        R                  " X5-
  5      -  -
  S[        R                  " X5-
  5      S-  -  -   SS9S	S95      nS
U-  SU-  U-  -
  SUS-  -  U-  -   $ )Ng?r   r   r   r   r   g      ?r   r   gUUUUUU?r   r   s          r2   disc_mdFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdB  sT   77DACFF277C&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE D!QJ-CAtQJ-CFF266"''$,/sSy0A,A+B,/sSy0A,A+B -0sy0A,A+B -0sy0A10D,D	+E
 01#2
 9:; <E A:!e+a1fUl::r5   c                    U R                   u  p[        R                  " SU* -  SSU-
  -  U-  [        R                  " [        R                  " SU S-  -
  SS95      -  -
  [        R                  " [        U5       VVs/ s HP  n[        U5        H=  n[        R                  " S[        R                  " XS S 24   XS S 24   5      -
  5      PM?     MR     snn5      US-  -  -   5      $ s  snnf )Nr'   r   r   r   )r   r*   rn   r   r   r   maximum)r   r   r   kjs        r2   disc_star_l2KTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2R  s    77DA77qb	A!a%L1,&&Q!V!456 6&&"1X%uQx! GGA

1T7AdG <<=/7 >%  !V s   >AC)l	   j;<Q`siyX r7   rf   rb   rd   ra   rl   N)r*   r:   r;   r   rm   r   )	r,   r   r   r   r   r<   r=   	disc_currdisc_alts	            r2   +test_discrepancy_alternative_implementation5TestUtils.test_discrepancy_alternative_implementation&  s    	;	-	; 		 ii##$KLH%OOF48	6?	,OOF48	6?	,OOF48	6?	,OOF9=	'	,r5   c                     [        S5      nUS   S:X  d   e[        S5      nUS   S:X  d   e[        S5      nUS   S:X  d   eg )Nr9   r}         i  i^  i5	  )r   )r,   primess     r2   test_n_primesTestUtils.test_n_primesp  sS    "bzR#bzS   #bzT!!!r5   c                 8    [        S5      n/ SQn[        X5        g )Nr   )r   r'   r"                     r      %   )   +   /   )r   r   )r,   r   r.   s      r2   test_primesTestUtils.test_primesz  s    !"%F$r5   r   N)__name__
__module____qualname____firstlineno__r3   rB   rN   rs   ry   r   r   r   rK   markxfailr   r   r   r   r   r   __static_attributes__r   r5   r2   r   r      sz    +<* $D#DJ3!0F.*
0 [[J  N	N(?T2"H-T"%r5   r   c                   &    \ rS rSrS rS rS rSrg)TestVDCi  c                     [        S5      n/ SQn[        X5        [        SSS9n[        X5        [        SSS9n[        X5        [        SSS9n[        XSS  5        g )	Nr9   )
        r   r   r         ?      ?      ?      ?g      ?g      ?rQ   r   rJ   r   r'   )start_indexr   r   )r,   r=   r.   s      r2   test_van_der_corputTestVDC.test_van_der_corput  s]    #-$A.$A.$q1AB(r5   c                     Sn[        SSUS9n[        SSSUS9n[        X2SS  5        [        SSSUSS	9n[        X2SS  5        [        SSSUS
S	9n[        X2SS  5        g )Nl	   	XCf
Kl<{O8 r9   Tscrambler<   r   r'   )r   r  r<   rQ   )r   r  r<   r|   rJ   r   )r,   r<   r.   r=   s       r2   test_van_der_corput_scramble$TestVDC.test_van_der_corput_scramble  s}    5R$C8q4SIAB(1ta
 	AB(1ta
 	AB(r5   c                 ~    [         R                  " [        SS9   [        SSS9  S S S 5        g ! , (       d  f       g = f)Nz'base' must be at least 2rF   r9   r   )base)rK   rL   rM   r   r,   s    r2   test_invalid_base_errorTestVDC.test_invalid_base_error  s(    ]]:-IJ2A& KJJs   .
<r   N)r   r   r   r   r  r  r  r   r   r5   r2   r   r     s    ))"'r5   r   c                   >   ^  \ rS rSrSU 4S jjrSSS.S jjrSrU =r$ )	RandomEnginei  c                 "   > [         TU ]  XUS9  g )N)r   optimizationr<   )super__init__)r,   r   r  r<   	__class__s       r2   r  RandomEngine.__init__  s    1SAr5   r   r   c                R    U R                   R                  XR                  45      nU$ r   )r<   r:   r   )r,   r   r|   r=   s       r2   _randomRandomEngine._random  s    !VV-r5   r   )NN)r   )r   r   r   r   r  r  r   __classcell__)r  s   @r2   r  r    s    Ba  r5   r  c                     [        SSS9n U R                  SS9nU R                  SS9nU R                  S:X  d   eU R                  5         U R                  S:X  d   eU R                  SS9n[	        X5        U R                  5         U R                  SS9  U R                  SS9n[	        X$5        U R                  S:X  d   eg )	Nr   l	   F,@IY^+Ge r   r"   r   r      r   )r  r:   num_generatedresetr   fast_forward)enginesample_1sample_2sample_1_testsample_2_tests        r2   test_subclassing_QMCEnginer$    s    !!HIF}}q}!H}}q}!H2%%% LLN1$$$MMAM&M) LLN
!MMAM&M)2%%%r5   c                     [         R                  " [        SS9   [        S5        S S S 5        [         R                  " [        SS9   [        S5        S S S 5        Sn [         R                  " [        U S9   [        S5      nUR	                  SSS9  S S S 5        g ! , (       d  f       N{= f! , (       d  f       N_= f! , (       d  f       g = f)	Nz d must be a non-negative integerrF   )r   r}   z*'u_bounds' and 'l_bounds' must be integersr   g?r   )rK   rL   rM   r  r   )msgr  s     r2   test_raisesr'    s    	z)L	MT 
N 
z)L	MR 
N 8C	z	-aS1 
.	- 
N	M 
N	M 
.	-s#   BB,6B=
B),
B:=
Cc                  >   [        SSS9n U R                  SSS9n[        [        R                  " U5      S/5        UR
                  [        R
                  " S5      :X  d   eU R                  SSSS	9n[        [        R                  " U5      SS/5        S
nSnU R                  5         U R                  S5      nXCU-
  -  U-   n[        R                  " U5      R                  [        R                  5      nU R                  5         U R                  X#SSS9n[        X5        U R                  X#SSS9n[        UR                  5       UR                  5       4X#S-
  45        U R                  X#SSS9n[        UR                  5       UR                  5       4X#45        g )Nr   l	   llG[/Ww r   r9   r  r   int64T)r   endpointr      Fr!   r   r*  r   )r  r   r   r*   uniquedtyper  r:   floorastyper)  minmax)r  r=   lowhigh
ref_samples        r2   test_integersr7    s\   !!HIF __Q"_%F6"QC(<<288G,,,,__Q"t_4F6"QF+
CD LLNr"Jcz*S0J*%,,RXX6J
LLN__S2_FF$ __S3_GF&**,

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

-{;r5   c                     Sn [         R                  R                  S5      nUR                  SSU S9nUR                  SSU SS	9n[	        XS
9nUR                  X#SSS9n[        UR                  SS9U5        [        UR                  SS9US-
  5        UR                  X#SSS9n[        UR                  SS9U5        [        UR                  SS9U5        g )Nr9   l	   G]	#0m$ave r+  r}   )r4  r5  sizer   r"   T)r4  r5  r9  r*  r   r   Fr-  r   r   )r*   r:   r;   r   r  r   r2  r3  )r   r<   r4  r5  r  r=   s         r2   test_integers_ndr:    s    
A
))

 E
FC
,,2BQ,
/C<<AAA<=D!%F__S3_GF#S)#T!V,__S3_FF#S)#T*r5   c                      \ rS rSrSr\r\r\r\r	SS/r
SS/r S S\S	\4S
 jjrS\S	\R                   4S jr\R&                  R)                  S\
\S9S 5       r\R&                  R)                  S\
\S9S 5       r\R&                  R)                  S\
\S9S 5       r\R&                  R)                  S\
\S9S 5       r\R&                  R)                  S\
\S9S 5       r\R&                  R)                  S\
\S9S 5       r\R&                  R)                  S\
\S9\R&                  R)                  SS\R6                  R9                  S5      S45      S 5       5       r\R&                  R)                  S\
\S9S 5       r\R&                  R)                  SS/5      S 5       rS r \R&                  R)                  SS\!RD                  4SS 4/5      S 5       r#S r$Sr%g)!QMCEngineTestsi  zGeneric tests for QMC engines.TF	ScrambledUnscrambled	   \v$PdvuL2+C r  returnc                     U R                   (       a  U R                  " SXS.UD6$ U(       a  [        R                  " 5         g U R                  " SSU0UD6$ )N)r  seedrB  r   )can_scrambleqmcerK   skip)r,   r  r<   kwargss       r2   r  QMCEngineTests.engine  sG     99ChCFCCyy4c4V44r5   c                 @    U(       a  U R                   $ U R                  $ r   )scramble_ndunscramble_nd)r,   r  s     r2   	referenceQMCEngineTests.reference   s    #+tC1C1CCr5   )idsc                     U R                  SUS9nUR                  S5      n[        [        R                  " S5      U5        g )Nr   r   r  rQ   )rQ   r   r  r:   r   r*   emptyr,   r  r  r=   s       r2   	test_0dimQMCEngineTests.test_0dim#  5    q84q!288F+V4r5   c                     U R                  SUS9nUR                  S5      n[        [        R                  " S5      U5        g )Nr   rO  r   r   r   rP  rR  s       r2   test_0sampleQMCEngineTests.test_0sample)  rU  r5   c                 j    U R                  SUS9nUR                  S5      nSUR                  :X  d   eg )Nr   rO  r   r   r   )r  r:   r   rR  s       r2   test_1sampleQMCEngineTests.test_1sample/  s4    q84q!%%%r5   c                     U R                  SUS9nUR                  S5      n[        R                  " US:  5      (       d   e[        R                  " US:*  5      (       d   eg )Nr   rO     r   r   )r  r:   r*   allrR  s       r2   test_boundsQMCEngineTests.test_bounds5  sT    sX6s#vvfk""""vvfk""""r5   c                     U R                  US9nU R                  SUS9nUR                  [        U5      S9n[	        XBSS9  UR
                  [        U5      :X  d   eg )Nr  r   rO  r  r   rW   )rK  r  r:   lenr   r  )r,   r  r6  r  r=   s        r2   test_sampleQMCEngineTests.test_sample<  sZ    ^^X^6
q84Z16##s:666r5   c                     U R                  SUS9nUR                  SS9nU R                  SUS9n[        U5      S-  nUR                  US9nUR                  US9n[        XcUS  SS9  g )Nr   rO  rJ   r  r   rW   )r  r:   re  r   )r,   r  r  r6  n_half_r=   s          r2   test_continuingQMCEngineTests.test_continuingE  su    q84]]Q]'
q84ZA%MMFM#(67 3$?r5   r<   Nc                     U R                  SXS9nUR                  SS9nUR                  5         UR                  S:X  d   eUR                  SS9n[	        XT5        g )Nr   r   r  r<   rJ   r  r   )r  r:   r  r  r   )r,   r  r<   r  r6  r=   s         r2   
test_resetQMCEngineTests.test_resetR  s[     q8=]]Q]'
##q(((#+r5   c                    U R                  SUS9nUR                  SS9nU R                  SUS9nUR                  S5        UR                  SS9n[        XCSS  SS9  UR	                  5         / n[        S5       H>  nUS-  S:X  a!  UR                  UR                  5       5        M-  UR                  S	5        M@     [        U[        S5       Vs/ s H  ofS-  S:X  d  M  UPM     sn   [        R                  " U5      S
S9  g s  snf )Nr   rO  rJ   r  rQ   r   rW   r   r   h㈵>)	r  r:   r  r   r  r   appendr*   concatenate)r,   r  r  r6  r=   
even_drawsr   s          r2   test_fast_forward QMCEngineTests.test_fast_forwarde  s    q84]]Q]'
q84A#12T: 	
qA1uz!!&--/2##A&	 
 	58:8a1uz8:;NN:&	
:s   D
D
c                 ~   SnU R                  X!S9nUR                  S5      n[        [        R                  " USS9[        R
                  " SU5      SS9  [        [        R                  " US	SS9[        R
                  " S
U5      SS9  [        [        R                  " USSS9[        R
                  " SU5      SS9  g )Nr   rO  i   r   r   r   {Gz?rW      r   K   r   )r  r:   r   r*   meanrepeat
percentile)r,   r  r   r  r=   s        r2   test_distribution QMCEngineTests.test_distribution  s    q4t$GGF#RYYsA%6T	
 	MM&"1-ryyq/A	
 	MM&"1-ryyq/A	
r5   c                     Sn[         R                  " [        US9   U R                  SSSS9  S S S 5        g ! , (       d  f       g = f)Nz)'toto' is not a valid optimization methodrF   r   Frw   r   r  r  )rK   rL   rM   r  r,   messages     r2   test_raises_optimizer$QMCEngineTests.test_raises_optimizer  s3    >]]:W5KK!e&KA 655	   7
Azoptimization,metric	random-CDlloydc                     [        U 5      * $ r   )r   r=   s    r2   r   QMCEngineTests.<lambda>  s    hv&6%6r5   c                     U R                  SSS9nUR                  SS9nU" U5      nU R                  SSUS9nUR                  SS9nU" U5      nX:  d   eg )Nr   FrO  rk   r  r  )r  r:   )	r,   r  r   r  
sample_ref
metric_refoptimal_sample_metric_s	            r2   test_optimizersQMCEngineTests.test_optimizers  si     q51]]R](
J'
;;U;N//B/'/###r5   c                    [         R                  R                  S5      n/ n[        S5       H4  nU R	                  SSUS9nUR                  UR                  S5      5        M6     [        R                  " [        SS9   [        US	   US
   5        S S S 5        [        R                  " [        SS9   [        US	   US   5        S S S 5        g ! , (       d  f       NC= f! , (       d  f       g = f)Nl	   B"V6DGlUN r'   r   Trn  rQ   zArrays are not equalrF   r   r   )
r*   r:   r;   r   r  rs  rK   rL   AssertionErrorr   )r,   r<   r=   r   r  s        r2   test_consume_prng_state&QMCEngineTests.test_consume_prng_state  s    ii##$FGqA[[1t[=FMM&--*+  ]]>1GHF1I. I]]>1GHF1I. IH IHHHs   >C2C
C
C-r   )r?  )&r   r   r   r   __doc__NotImplementedrD  rC  rJ  rI  r  rM  boolr   r  r*   ndarrayrK  rK   r   parametrizerS  rX  r\  ra  rf  rk  r:   r;   ro  rv  r  r  r   rm   r  r  r   r   r5   r2   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	$	$
/r5   r<  c                       \ rS rSr\R
                  rSr\R                  " SS/SS/SS/SS	/S
S/SS/SS/SS//5      r
\R                  " SS/SS/SS/SS/SS/SS/SS/S S!//5      rS" rS#rg$)%
TestHaltoni  Tr   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                     U R                  SS9nU R                  SSS9nUR                  [        U5      SS9n[	        X1SS9  UR                  5         UR                  S	5      nUR                  5         UR                  S	SS
9n[        X15        g )NTrd  r   rO  rJ   )r   r|   gMbP?rW   r9   r   )rK  r  r:   re  r   r  r   r   )r,   r6  r  r=   s       r2   test_workersTestHalton.test_workers  s    ^^T^2
q40Z!<6 	__R(
Q/V(r5   r   N)r   r   r   r   r   HaltonrD  rC  r*   r+   rJ  rI  r  r   r   r5   r2   r  r    s    ::DLHHq!fuen$enuen$enuen$enuen> ?M
 ((Z4'4'4'4'4'4'4'46 7K)r5   r  c                      \ rS rSr\R
                  rSrS rS r	S r
\R                  R                  SSS/5      \R                  R                  S	S
S/5      \R                  R                  SSS/5      S 5       5       5       rS rS rSrg)TestLHSi  Tc                 0    [         R                  " S5        g NzNot applicable: not a sequence.rK   rE  r,   argss     r2   rk  TestLHS.test_continuing      56r5   c                 0    [         R                  " S5        g r  r  r  s     r2   rv  TestLHS.test_fast_forward  r  r5   c                 0    [         R                  " S5        g NzJNot applicable: the value of reference sample is implementation dependent.r  r  s     r2   rf  TestLHS.test_sample       1 	2r5   strengthr   r   r  Fr  Nr  c                    [         R                  R                  S5      nSnUS-  nSn[        R                  " XrUUUS9nUR                  US9n	U	R
                  Xg4:X  d   eUR                  U:X  d   e[         R                  " U5      S-   U-  n
[         R                  " XU45      R                  n[         R                  " X:g  5      (       d   e[         R                  " U	SS	9nU(       a  SU-  OSn[        XUS
9  [         R                  " X-
  U:  5      (       d   eUS:X  a  Uc  [         R                  " U5      n[        [        X5      5      n[        [!        UR"                  5      S5       HP  u  nnU	S S 2UU/4   nUU-  R%                  [&        5      nU Vs1 s H  n[)        U5      iM     nn[+        UU5        MR     g g g s  snf )Nl	   pIrtS"Md@B r"   r   r   )r   r  r  r  r<   r  r   r   r   rW   )r*   r:   r;   r   r   r   r  arangebroadcast_toTanysortr   setr   r   r   r   r1  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                         r2   test_sample_stratifiedTestLHS.test_sample_stratified  s    ii##$JKqD##a-51=(+- #||v%%%##q(((
 iilS(A-
??:1v688vvf())))Q/!cAgqc:vvf'#-....q=\1 iilO'/CDG$U688_a81#A1vI.
!A~--c2145#5:5Wg.	 9	 2= 6s   G	c                     U R                  SSS9nUR                  SS9nU R                  SSSS9nUR                  SS9n[        X$5        g )Nr   FrO  rk   r  r  r  )r  r:   r   )r,   r  r  r  r  s        r2   test_optimizer_1dTestLHS.test_optimizer_1d  sP    q51]]R](
;;U;M//B/':/r5   c                    Sn[         R                  " [        US9   [        R                  " SSS9  S S S 5        Sn[         R                  " [        US9   [        R                  " SSS9nUR                  S	5        S S S 5        Sn[         R                  " [        US9   [        R                  " SSS9nUR                  S
5        S S S 5        Sn[         R                  " [        US9   [        R                  " S
SS9nUR                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N{= f! , (       d  f       g = f)Nznot a valid strengthrF   r   r'   )r  z%n is not the square of a prime numberr   )r   r  ri   r"   zn is too small for d	   )rK   rL   rM   r   r   r:   )r,   r  r  s      r2   r'  TestLHS.test_raises  s    )]]:W5q1- 6 ;]]:W5''!a8FMM" 6 ;]]:W5''!a8FMM! 6 *]]:W5''!a8FMM! 65 65 65
 65
 65s/   D'D*'D;)'E
D'*
D8;
E	
Er   )r   r   r   r   r   r   rD  rC  rk  rv  rf  rK   r   r  r  r  r'  r   r   r5   r2   r  r    s    DL772 [[Z!Q0[[Z%7[[^dK-@A#/ B 8 1#/J0r5   r  c                   >   \ rS rSr\R
                  rSr\R                  " SS/SS/SS/SS/SS/SS/S	S
/S
S	//5      r
\R                  " SS/SS/SS/SS/SS/SS/SS/SS//5      rS rS rS rS r\R"                  R%                  SS S!/5      S" 5       rS# rS$rg%)&	TestSoboli'  Tr   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                     [         R                  " [        SS9   [        R                  " S5      nUR                  S5        S S S 5        g ! , (       d  f       g = f)N'The balance properties of Sobol' pointsrF   r   r9   )rK   r   r   r   Sobolr:   r,   r  s     r2   test_warningTestSobol.test_warning>  s>    \\+ .> ?YYq\FMM"? ? ?s   (A
Ac                 ^   [         R                  " SSS9nUR                  S5      n[        U R                  S S U5        UR                  S5      n[        U R                  SS U5        [
        R                  " [        SS9   UR                  S5        S S S 5        g ! , (       d  f       g = f)Nr   Frd  rQ   rJ   r  rF   )r   r  random_base2r   rJ  rK   rL   rM   r,   r  r=   s      r2   test_random_base2TestSobol.test_random_base2D  s    1u-$$Q'4--bq16: $$Q'4--a2F; ]]: .> ?"? ? ?s   B
B,c                 \   [         R                  " [        SS9   [        R                  " [        R                  R
                  S-   5        S S S 5        [         R                  " [        SS9   [        R                  " SSS9  S S S 5        g ! , (       d  f       NF= f! , (       d  f       g = f)Nz Maximum supported dimensionalityrF   r   zMaximum supported 'bits' is 64A   )bits)rK   rL   rM   r   r  MAXDIMr
  s    r2   
test_raiseTestSobol.test_raiseR  s|    ]]: .? @IIcii&&*+@ ]]: .= >IIab!> >	@ @> >s   2B-B
B
B+c                 ^   [         R                  " SSS9n[        UR                  5       R	                  5       R                  5       5      n[        UR                  5       R	                  5       R                  5       5      n[        U[        SS05      5        [        U[        SS05      5        g )NiW  Frd  r   r   )r   r  r   r:   flattentolistr   )r,   r  count1count2s       r2   test_high_dimTestSobol.test_high_dim[  s|    4%000299;<00299;<VWc4[12VWc4[12r5   r  r   r'   c                    [         R                  " SSUS9nSU-  nUR                  U5      n[        U R                  S U U5        [
        R                  " [        SS9   UR                  5         S S S 5        g ! , (       d  f       g = f)Nr   Fr  r  zincreasing `bits`rF   )r   r  r:   r   rJ  rK   rL   rM   )r,   r  r  nsr=   s        r2   	test_bitsTestSobol.test_bitsb  sg    1u48Wr"4--cr2F;]]:-@AMMO BAAs   A99
Bc                 ~    [         R                  " SSSS9nUR                  S5      n[        U R                  U5        g )Nr   Frk   r  rJ   )r   r  r:   r   rJ  r  s      r2   test_64bitsTestSobol.test_64bitsl  s2    1u26q!4--v6r5   r   N)r   r   r   r   r   r  rD  rC  r*   r+   rJ  rI  r  r  r  r  rK   r   r  r  r  r   r   r5   r2   r  r  '  s    99DLHHr2h"Cj#Tl#Tl$en$en$en$en. /M ((Z4&	2'4'4'4'4'4'46 7K#"3 [[VaV, -7r5   r  c                      \ rS rSr\R
                  rSrS rS r	S r
S rS rS r\R                  R!                  S	/ S
Q/ SQ/5      S 5       r\R                  R!                  S/ S
Q/ SQ/5      S 5       rS r\R                  R!                  S/ S
QSS//5      \R                  R!                  S	SS//5      S 5       5       rS rSrg)TestPoissonir  Fc                 0    [         R                  " S5        g )NzToo costly in memory.r  r  s     r2   ra  TestPoisson.test_boundsv  s    +,r5   c                 0    [         R                  " S5        g )Nz"Not applicable: recursive process.r  r  s     r2   rv  TestPoisson.test_fast_forwardy  s    89r5   c                 0    [         R                  " S5        g r  r  r  s     r2   rf  TestPoisson.test_sample|  r  r5   c                 h   SnSnU R                  SUSS9nUR                  US9n[        U5      U::  d   e[        U5      U:  d   eUR                  US9n[        U5      U::  d   e[        U5      U:  d   e[        R
                  " XV/SS9n[        U5      US-  ::  d   e[        U5      U:  d   eg )	N皙?r   r   F)r   radiusr  r  r   r   )r  r:   re  l2_normr*   rt  )r,   r  r  r  r  sample_initsample_continuedr=   s           r2   rk  TestPoisson.test_continuing  s     q%@mmbm);2%%%{#v---!==2=.#$***'(F222 ?aH6{b1f$$$v&(((r5   c                 F   [         R                  R                  S5      nSnSu  p4XC-
  UR                  S5      -  U-   n/ SQnSS/n[        XeU5      nU HI  u  pnU R	                  XXS9nUR                  U5      n[        U5      U::  d   e[        U5      U
:  a  MI   e   g )	Nl	   x_4vZ.c r   )g{Gz?皙?r"   )r   r'   rQ   volumesurface)r   r  hyperspherer<   )r*   r:   r;   r   rD  re  r  )r,   r<   r  r4  r5  radii
dimensionshypersphere_methodsgenr   r  r  r  r=   s                 r2   test_mindistTestPoisson.test_mindist  s    ii##$KL	szz!},s2
'3j)<=&)"A{YY  F ]]2&Fv;"$$$6?f,,, '*r5   c                 j    SnU R                  SUS9nUR                  5       n[        U5      U:  d   eg )Nr  r   )r   r  )rD  
fill_spacer  )r,   r  r  r=   s       r2   test_fill_spaceTestPoisson.test_fill_space  s9    Qv.""$v&(((r5   r    r}   r   r}   )r   r   r   c                     Sn/ SQnU R                  SX!US9nUR                  S5      nU H  n[        Xc5        [        X5        M     g )Nr  )r'   r'   r   r'   r   r  r    r!   r8   rD  r:   r	   )r,   r    r  r!   r  r=   points          r2   test_sample_inside_lower_bounds+TestPoisson.test_sample_inside_lower_bounds  sP    H  
 r"Ee.h. r5   r!   c                     Sn/ SQnU R                  SX#US9nUR                  S5      nU H  n[        Xa5        [        X65        M     g )Nr  )r  r   r'   r  r8   r  )r,   r!   r  r    r  r=   r  s          r2   test_sample_inside_upper_bounds+TestPoisson.test_sample_inside_upper_bounds  sP    H  
 r"Ee.h. r5   c                     Sn/ SQn/ SQn[         R                  " [        SS9   U R                  SXUS9  S S S 5        g ! , (       d  f       g = f)Nr  )r'   r   r   r  z1Bounds are not consistent 'l_bounds' < 'u_bounds'rF   r'   r  rK   rL   rM   rD  )r,   r  r    r!   s       r2   test_inconsistent_bound_value)TestPoisson.test_inconsistent_bound_value  sK    ]]EG II&hIOG G Gs	   ?
Ar}   r   r'   r   c                     Sn[         R                  " [        SS9   U R                  SUX!S9  S S S 5        g ! , (       d  f       g = f)Nr  zP'l_bounds' and 'u_bounds' must be broadcastable and respect the sample dimensionrF   r'   r  r  )r,   r!   r    r  s       r2   test_inconsistent_bounds$TestPoisson.test_inconsistent_bounds  sH     ]]$% IIF!  	% % %r  c                     Sn[         R                  " [        US9   [        R                  " SSS9  S S S 5        g ! , (       d  f       g = f)Nz*'toto' is not a valid hypersphere samplingrF   r   rw   )r  )rK   rL   rM   r   PoissonDiskr  s     r2   r'  TestPoisson.test_raises  s/    ?]]:W5OOA62 655s	   ;
A	r   N)r   r   r   r   r   r#  rD  rC  ra  rv  rf  rk  r
  r  rK   r   r  r  r  r  r   r'  r   r   r5   r2   r  r  r  s    ??DL-:2)&-*) [[Z,	)BC
/ D
/ [[Z,	)BC
/ D
/P [[Z,R)AB[[Z1a&2	 3 C	3r5   r  c                       \ rS rSrS r\R                  R                  S5      S 5       rS r	S r
\R                  R                  S5      S 5       rSrg	)
TestMultinomialQMCi  c           	      B   [         R                  " / SQ5      n[        R                  " [        SS9   [
        R                  " USS9  S S S 5        [         R                  " / SQ5      nSn[        R                  " [        US9   [
        R                  " USS9  S S S 5        [         R                  " / SQ5      nS	n[        R                  " [        US9   [
        R                  " US[
        R                  " S
S9S9  S S S 5        Sn[        R                  " [        US9   [
        R                  " US[         R                  R                  5       S9  S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)N)Q?p=
ף?gffffff?)\(?z'Elements of pvals must be non-negative.rF   r9   )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+   rK   rL   rM   r   MultinomialQMCr  r:   r;   )r,   r  r  s      r2   test_validations#TestMultinomialQMC.test_validations  s   HH45]]: .A Bq2.B
 HH235]]:W5q2. 6 HH345]]:W5q2cii!nE 6 8]]:W5q2bii6K6K6MN 65#B B 65 65 65s/   EE.)E? 3F
E+.
E<?
F
Fzignore::UserWarningc                 *   [         R                  R                  S5      n[         R                  " / SQ5      nSn[         R                  " X2-  5      R                  [        5      n[        R                  " X#US9n[        UR                  S5      USS9  g )Nl	   (u@gP{- r-  r   )r,  rB  r   rW   )
r*   r:   r;   r+   
atleast_2dr1  r  r   r0  r   )r,   r<   r  r,  r  r  s         r2   test_MultinomialBasicDraw,TestMultinomialQMC.test_MultinomialBasicDraw  sm    ii##$IJHH34==.55c:##AsCa((;r5   c                 ,   [         R                  R                  S5      n[         R                  " / SQ5      n[        R
                  " USUS9nUR                  S5      n[        U[         R                  " U5      -  [         R                  " U5      SS9  g )Nl	   8X7:ct]+C: r-  i    )r,  r<   r   rV   rW   )	r*   r:   r;   r+   r   r0  r   r   r4  )r,   r<   r  r  drawss        r2   test_MultinomialDistribution/TestMultinomialQMC.test_MultinomialDistribution  sj    ii##$JKHH34##A#>a u-r}}Q/?dKr5   c                 ,   [         R                  " / SQ5      n[        U5      n[        [	        XS5      S5        [        [	        XS5      S5        [        [	        XS5      S5        [        [	        XS5      S5        [        [	        XS	5      US
-
  5        g )N)r   皙?g?g333333?r   ?gGz?rS   r   r   r<  r   gaۢ?g7?r'   rS   r   )r*   r+   re  r   r   )r,   p_cumulativer9  s      r2   test_FindIndex!TestMultinomialQMC.test_FindIndex  sy    xx KL< %l#>B%l#>B%l'BAF%l'BAF%l#>qIr5   c                 X   [         R                  R                  S5      n[         R                  " / SQ5      nSn[         R                  " X2-  5      R                  [        5      n[        R                  " SSUS9n[        R                  " X#UUS9n[        UR                  S5      USS9  g )	Nl	   aFkq|'x< r-  r   r   Tr  )r,  r  r<   rW   )r*   r:   r;   r+   r4  r1  r  r   r  r0  r   )r,   r<   r  r,  r  base_enginer  s          r2   test_other_engine$TestMultinomialQMC.test_other_engine  s     ii##$KLHH34==.55c:iiDc:##A(+-a((;r5   r   N)r   r   r   r   r1  rK   r   filterwarningsr5  r9  r?  rC  r   r   r5   r2   r&  r&    s\    O. [[ 56< 7<LJ [[ 56	< 7	<r5   r&  c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)TestNormalQMCi%  c                    [         R                  " [        R                  " S5      S9nUR	                  5       n[        UR                  S5        UR	                  SS9n[        UR                  S5        [         R                  " [        R                  " S5      S9nUR	                  5       n[        UR                  S5        UR	                  SS9n[        UR                  S	5        g )
Nr   )r|  r   r   r"   r  r"   r   r   r[  r"   r   r   MultivariateNormalQMCr*   zerosr:   r   r   r,   r  sampless      r2   test_NormalQMCTestNormalQMC.test_NormalQMC&  s    **<--/W]]F+--!-$W]]F+**<--/W]]F+--!-$W]]F+r5   c                    [         R                  " [        R                  " S5      SS9nUR	                  5       n[        UR                  S5        UR	                  SS9n[        UR                  S5        [         R                  " [        R                  " S5      SS9nUR	                  5       n[        UR                  S	5        UR	                  SS9n[        UR                  S
5        g )Nr   T)r|  inv_transformrI  r"   r  rJ  r   r[  rK  rL  rO  s      r2   test_NormalQMCInvTransform(TestNormalQMC.test_NormalQMCInvTransform4  s    **!D2--/W]]F+--!-$W]]F+**!D2--/W]]F+--!-$W]]F+r5   c                 $   [         R                  R                  S5      n[        R                  " [         R
                  " S5      SUS9nUR                  SS9n[         R                  " SS/SS	//5      n[        X4S
S9  [         R                  R                  S5      n[        R                  " [         R
                  " S5      SUS9nUR                  SS9n[         R                  " / SQ/ SQ/5      n[        X4S
S9  [         R                  R                  S5      n[        R                  " SSUS9n[        R                  " [         R
                  " S5      SXQS9nUR                  SS9n[         R                  " / SQ/ SQ/5      n[        X4S
S9  g )Nl	   q)*syRM@
K r   F)r|  rT  rB  r  LpɻgUygxDg?rV   rW   r'   r|  rT  r<   )rX  rY  gZ?)g#ڎrgΌ~42?gԻx?nrQ   Tr  )r|  rT  r  r<   )	r*   r:   r;   r   rM  rN  r+   r   r  )r,   r<   r  rP  samples_expectedrB  s         r2   test_NormalQMCSeeded"TestNormalQMC.test_NormalQMCSeededD  s`   ii##$KL**!E=--!-$88i%;&/%:%< == ii##$KL**!Es<--!-$88%E%E%G H= ii##$KLiiDc:**!E
 --!-$88%E%E%G H=r5   c                    [         R                  R                  S5      n[        R                  " [         R
                  " S5      USS9nUR                  SS9n[         R                  " SS/SS	//5      n[        X4S
S9  [         R                  R                  S5      n[        R                  " [         R
                  " S5      USS9nUR                  SS9n[         R                  " / SQ/ SQ/5      n[        X4S
S9  g )Nl	   9e)-%5Z%_6 r   T)r|  r<   rT  r  <9\Mg+`?g]@"i?rV   rW   r'   )r_  r`  g,D?)g˚X`?g7@gaTR')r*   r:   r;   r   rM  rN  r+   r   )r,   r<   r  rP  r[  s        r2    test_NormalQMCSeededInvTransform.TestNormalQMC.test_NormalQMCSeededInvTransformd  s    ii##$KL**!#T;--!-$88i%;&.%9%; <= ii##$KL**!#T;--!-$88%E%B%D E=r5   c                     S Hj  n[         R                  " USS9n[         R                  " [        R                  " U5      USS9nUR                  5       n[        UR                  SU45        Ml     g )Nr   r   r   FrO  T)r|  r  rT  r   )r   r  rM  r*   rN  r:   r   r   )r,   r   rB  r  rP  s        r2   rC  TestNormalQMC.test_other_enginew  s\    A))a%8K..BHHQK6A=ACF mmoGA/ r5   c                 `   [         R                  R                  S5      n[        R                  " [         R
                  " S5      US9nUR                  SS9n[        [         R                  " UR                  SS95      S:  5      (       d   e[        [         R                  " UR                  SS9S	-
  5      S:  5      (       d   eS
 H  n[        US S 2U4   5      u  pVUS:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US
   5      S:  d   eg )Ni3  r   )r|  r<      r  r   r   ry  r   r   r   r=  r*   r:   r;   r   rM  rN  r`  r   r|  stdr   cov	transposer,   r<   r  rP  r   rj  pvalrk  s           r2   test_NormalQMCShapiro#TestNormalQMC.test_NormalQMCShapiro  s    ii##E***E--#-&266',,A,./$67777266'++1+-12T9::::Agadm,GA#::  ffW&&()vvc$i 4'''r5   c                 b   [         R                  R                  S5      n[        R                  " [         R
                  " S5      SUS9nUR                  SS9n[        [         R                  " UR                  SS95      S	:  5      (       d   e[        [         R                  " UR                  SS9S
-
  5      S	:  5      (       d   eS H  n[        US S 2U4   5      u  pVUS:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US   5      S	:  d   eg )Nir   TrZ  rg  r  r   r   ry  r   rh  r=  ri  rm  s           r2   !test_NormalQMCShapiroInvTransform/TestNormalQMC.test_NormalQMCShapiroInvTransform  s    ii##H-**!Dc;--#-&266',,A,./$67777266'++1+-12T9::::Agadm,GA#::  ffW&&()vvc$i 4'''r5   r   N)r   r   r   r   rQ  rU  r\  ra  rC  ro  rr  r   r   r5   r2   rG  rG  %  s&    ,, >@>&0((r5   rG  c                   J    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rSrg)TestMultivariateNormalQMCi  c                 D   Sn[         R                  " [        US9   [        R                  " S/[        R
                  " SS9S9  S S S 5        Sn[         R                  " [        US9   [        R                  " / SQ[        R
                  " SS9S9  S S S 5        S	n[         R                  " [        US9   [        R                  " SS/[        R                  R                  5       S9  S S S 5        S
n[         R                  " [        US9   [        R                  " SS/SS/SS//5        S S S 5        Sn[         R                  " [        US9   [        R                  " SS/SS/SS//5        S S S 5        Sn[         R                  " [        US9   [        R                  " S/SS/SS//5        S S S 5        g ! , (       d  f       GN|= f! , (       d  f       GNA= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nz(Dimension of `engine` must be consistentrF   r   r   r.  )r  r&   rQ   r/  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	rK   rL   rM   r   rM  r  r*   r:   r;   r  s     r2   r1  *TestMultivariateNormalQMC.test_validations  s   =]]:W5%%qc#))a.A 6 >]]:W5%%i		AG 6 8]]:W5%%q!fRYY5J5J5LM 6 0]]:W5%%q!f1v1v.>? 6 9]]:W5%%q!f1v1v.>? 6 E]]:W5%%qcQFQF+;< 65) 65 65 65 65 65 65sG   )F:(*G54G G/ H H:
G	
G
G,/
G= 
H
Hc                 f    [         R                  " / SQ/ SQ/ SQ/ SQ/5      nUR                  c   eg )Nr&   )r   r   r   )r   r   r   )r   r   r   )r   rM  _corr_matrixr  s     r2   test_MultivariateNormalQMCNonPD9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  s2    **	9i8
 ""...r5   c                    [         R                  " SSS9nUR                  5       n[        UR                  S5        UR                  SS9n[        UR                  S5        [         R                  " SS/SS/SS//S9nUR                  5       n[        UR                  S5        UR                  SS9n[        UR                  S	5        [
        R                  " / S
Q5      n[
        R                  " / SQ/ SQ/ SQ/5      n[         R                  " X45      nUR                  5       n[        UR                  S5        UR                  SS9n[        UR                  S5        g )Nr   r"   )r|  rk  rI  r  rJ  r   r[  rK  rd  r   r   r   r   r   r   r   r   r   r   r'   r"   r'   r   rM  r:   r   r   r*   r+   r,   r  rP  r|  rk  s        r2   test_MultivariateNormalQMC4TestMultivariateNormalQMC.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+r5   c                    [         R                  " SSSS9nUR                  5       n[        UR                  S5        UR                  SS9n[        UR                  S5        [         R                  " SS/SS/SS//SS9nUR                  5       n[        UR                  S	5        UR                  SS9n[        UR                  S
5        [
        R                  " / SQ5      n[
        R                  " / SQ/ SQ/ SQ/5      n[         R                  " X4SS9nUR                  5       n[        UR                  S5        UR                  SS9n[        UR                  S5        g )Nr   r"   T)r|  rk  rT  rI  r  rJ  r   r[  rK  rd  r}  r~  r  )rT  r  r  r  r  s        r2   &test_MultivariateNormalQMCInvTransform@TestMultivariateNormalQMC.test_MultivariateNormalQMCInvTransform  s   **qM--/W]]F+--!-$W]]F+ **Qq!fq!f-T
 --/W]]F+--!-$W]]F+ xx	"hh	9i89**4DI--/W]]F+--!-$W]]F+r5   c                 ,   [         R                  R                  S5      nUR                  S5      nX"R	                  5       -  [         R
                  " UR                  S5      5      -   n[        R                  " [         R                  " SS/5      USUS9nUR                  SS9n[         R                  " SS	/S
S//5      n[        XVSS9  [         R                  R                  S5      nUR                  S5      nX"R	                  5       -  [         R
                  " UR                  S5      5      -   n[        R                  " [         R                  " / SQ5      USUS9nUR                  SS9n[         R                  " / SQ/ SQ/5      n[        XVSS9  g )Nl	   b{1/YK $`F r   r   r   r   F)rT  r<   r  g X4g0<gΧU?gK\ @rV   rW   r'   r'   r'   r&   )gZh44gA->gZC)g~T~O?g*ʥo@gc}E?
r*   r:   r;   standard_normalrl  diagr   rM  r+   r   r,   r<   r>   Ar  rP  r[  s          r2    test_MultivariateNormalQMCSeeded:TestMultivariateNormalQMC.test_MultivariateNormalQMCSeeded  sS   ii##$KL'

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

1 66**288I+>9>CI--!-$88%F%C%E F=r5   c                 (   [         R                  R                  S5      nUR                  S5      nX"R	                  5       -  [         R
                  " UR                  S5      5      -   n[        R                  " [         R                  " SS/5      X1SS9nUR                  SS9n[         R                  " SS	/S
S//5      n[        XVSS9  [         R                  R                  S5      nUR                  S5      nX"R	                  5       -  [         R
                  " UR                  S5      5      -   n[        R                  " [         R                  " / SQ5      X1SS9nUR                  SS9n[         R                  " / SQ/ SQ/5      n[        XVSS9  g )Nl	   A^}KT0zubN r  r   r   T)r<   rT  r  gFX?ggR4gO=`?rV   rW   r  r'   r&   )go.2?gikD0NgPN)g4YgҫJC?g-v2 @r  r  s          r2   ,test_MultivariateNormalQMCSeededInvTransformFTestMultivariateNormalQMC.test_MultivariateNormalQMCSeededInvTransform
  sQ   ii##$KL'

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

1 66**HHY4
 --!-$88%E%D%F G=r5   c                    [         R                  R                  S5      n[        R                  " SS/SS/SS//US9nUR                  SS9n[        [         R                  " UR                  SS95      S:  5      (       d   e[        [         R                  " UR                  SS9S-
  5      S:  5      (       d   eS	 H  n[        US S 2U4   5      u  pVUS
:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US	   5      S:  d   e[        R                  " SS/SS/SS//US9nUR                  SS9n[        [         R                  " UR                  SS9SS/-
  5      S:  5      (       d   e[        [         R                  " UR                  SS9[         R                  " S5      -
  5      S:  5      (       d   eS	 H  n[        US S 2U4   5      u  pVUS
:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US	   S-
  5      S:  d   eg )Nl   V^Am%2r   r   r|  rk  r<   rg  r  r   ry  rh  r=  rS   rR   r(   r   r   r*   r:   r;   r   rM  r`  r   r|  rj  r   rk  rl  rn   rm  s           r2   !test_MultivariateNormalQMCShapiro;TestMultivariateNormalQMC.test_MultivariateNormalQMCShapiro#  s   ii##$HI**Qq!fq!f-3
 --#-&266',,A,./$67777266'++1+-12T9::::Agadm,GA#::  ffW&&()vvc$i 4''' **s3*sCj!9s
 --#-&266',,A,.!Q784?@@@@266'++1+-<=DEEEEAgadm,GA#::  ffW&&()vvc$i#o&---r5   c                    [         R                  R                  S5      n[        R                  " SS/SS/SS//USS9nUR                  SS9n[        [         R                  " UR                  SS95      S	:  5      (       d   e[        [         R                  " UR                  SS9S-
  5      S	:  5      (       d   eS
 H  n[        US S 2U4   5      u  pVUS:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US
   5      S	:  d   e[        R                  " SS/SS/SS//USS9nUR                  SS9n[        [         R                  " UR                  SS9SS/-
  5      S	:  5      (       d   e[        [         R                  " UR                  SS9[         R                  " S5      -
  5      S	:  5      (       d   eS
 H  n[        US S 2U4   5      u  pVUS:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US
   S-
  5      S	:  d   eg )Nl	   A"l7D#maxbwcuC r   r   T)r|  rk  r<   rT  rg  r  r   ry  rh  r=  rS   rR   r(   r   r   r  rm  s           r2   -test_MultivariateNormalQMCShapiroInvTransformGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformC  s   ii##$KL**Qq!fq!f-3d
 --#-&266',,A,./$67777266'++1+-12T9::::Agadm,GA#::  ffW&&()vvc$i 4''' **ssc3Z(	
 --#-&266',,A,.!Q784?@@@@266'++1+-<=DEEEEAgadm,GA#::  ffW&&()vvc$i#o&---r5   c                 .   [         R                  R                  S5      n[        R                  " / SQ/ SQ/ SQ/ SQ/US9nUR                  SS9n[        [         R                  " UR                  S	S
95      S:  5      (       d   e[         R                  " [         R                  " US S 2S	4   5      S-
  5      S:  d   e[         R                  " [         R                  " US S 2S4   5      S-
  5      S:  d   e[         R                  " [         R                  " US S 2S4   5      [         R                  " S5      -
  5      S:  d   eS H  n[        US S 2U4   5      u  pVUS:  a  M   e   [         R                  " UR                  5       5      n[         R                  " US   5      S:  d   e[         R                  " US   S-
  5      S:  d   e[        [         R                  " US S 2S	4   US S 2S4   -   US S 2S4   -
  5      S:  5      (       d   eg )Nl	   @jSm-\1:c# )r   r   r   )rS   r   rS   )r   rS   rS   )rS   rS   rR   r  r_  r  r   r   ry  r   r   rd  g?rh  rW  rr  )r*   r:   r;   r   rM  r`  r   r|  rj  rn   r   rk  rl  rm  s           r2   $test_MultivariateNormalQMCDegenerate>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegeneratef  s   ii##$JK**  /?C

 --#-&266',,A,./$67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,GA#::  ffW&&()vvc$i 4'''vvc$i!m$t+++266'!Q$-'!Q$-7'!Q$-GH   	 r5   r   N)r   r   r   r   r1  rz  r  r  r  r  r  r  r  r   r   r5   r2   ru  ru    s1    =4/,0,4>.>2.@!.Fr5   ru  c                   &    \ rS rSrS rS rS rSrg)	TestLloydi~  c                    [         R                  R                  S5      nUR                  SSSS9n[	        U5      n[        U5      n[        S5       H7  n[        USS9n[	        U5      n[        U5      nX7:  d   eXH:  d   eUnUnUnM9     g )Ni r   r   )   r   )r9  rQ   )maxiter)r*   r:   RandomStateuniformr   r  r   r   )	r,   r<   r=   base_l1base_l2rj  sample_lloydcurr_l1curr_l2s	            r2   
test_lloydTestLloyd.test_lloyd  s    ii##G,Q16"&/qAAAL |,Gl+G $$$$$$GG!F r5   c                     [         R                  " SS/SS/SS/SS//5      nUR                  5       n[        US9n[	        X5        [         R
                  " X5      (       a   eg)zk
Verify that the input samples are not mutated in place and that they do
not share memory with the output.
r   r  r  N)r*   r+   copyr   r   may_share_memory)r,   sample_origsample_copy
new_samples       r2   test_lloyd_non_mutating!TestLloyd.test_lloyd_non_mutating  ss    
 hhc
!$c
!$c
!$c
 , - "&&(;

 	1&&{?????r5   c                    [         R                  " [        SS9   / SQn[        U5        S S S 5        Sn[         R                  " [        US9   S/S/S//n[        U5        S S S 5        Sn[         R                  " [        US9   S	S/S
S/SS//n[        U5        S S S 5        g ! , (       d  f       N= f! , (       d  f       NZ= f! , (       d  f       g = f)Nz`sample` is not a 2D arrayrF   rH   z`sample` dimension is not >= 2r   r<  r   z!`sample` is not in unit hypercubegr   r   )rK   rL   rM   r   )r,   r=   r&  s      r2   test_lloyd_errorsTestLloyd.test_lloyd_errors  s    ]]:-JK F26: L 0]]:S1cC51#&F26: 2 3]]:S1Qi#saV4F26: 21 LK
 21
 21s#   B$B5C$
B25
C
Cr   N)r   r   r   r   r  r  r  r   r   r5   r2   r  r  ~  s    ".@ ;r5   r  c                 J    [         R                  " U 5      R                  5       $ r   )r
   pdistr2  r  s    r2   r  r    s    >>&!%%''r5   r  c                    Sn[         R                  R                  U5      nU " SUS9R                  S5      n[         R                  R                  U5      nU " SUS9R                  S5      n[        X45        [         R                  R	                  U5      nU " SUS9R                  S5      nU " SUS9R                  S5      n[        X45        [         R                  R	                  U5      nU " SUS9R                  S5      n[        XC5        [        XS5        Sn[
        R                  " [        US9   U " SXS9  S S S 5        g ! , (       d  f       g = f)	Nl   7P r   )r   rB  rQ   r   z3got multiple values for argument now known as `rng`rF   )r   r<   rB  )r*   r:   r  r   r;   rK   rL   	TypeError)r  seed_numberr<   res1res2res3r  s          r2   test_deterministicr    s    K
))


,CAC ''*D
))


,CAC ''*D
))


,CAC ''*DA;'..q1D
))


,CA3&&q)DCG	y	06 
1	0	0s   4E
E)6r   collectionsr   	itertoolsr   r   rK   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'  r7  r:  r<  r  r  r  r  r&  rG  ru  r  r  r   r  r  r  r   r#  r  r   r5   r2   <module>r     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7r5   