
    doiy                        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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\R6                  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& S'5      r/S( r0\Rb                  Re                  S)\Rf                  \Rh                  \Rj                  \Rl                  /5      S* 5       r7g)+    N)Counter)combinationsproduct)assert_allcloseassert_equalassert_array_equalassert_array_less)distance)shapiro)_test_find_index_test_low_0_bit)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\R                  R                  S 5       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           V/var/www/html/land-ocr/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    
   r:   F)r&   T)r+   randomdefault_rngr   r*   r   )r-   rngsampleabscaledunscaleds          r3   test_scale_randomTestUtils.test_scale_random4   sw    ii##$KLH%ZZ^Ob JJrNR6a799V48)r6   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.   r1   r!   r"   r/   s         r3   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   rR   rK          @   L2-star)r+   r,   r   r   discrepancysqrt)r-   space_1space_2r>   dimrefs         r3   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 )r6   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   rR   r#   rJ   rG   rF   r   r   'toto' is not a valid ...totorc   )r+   r,   rL   rM   rN   r   rn   r-   r>   s     r3   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)!NrZ   r[   r\   r]   r^   r_   r`   rS   rT   ra   rb   rK   )rd   workersr$   rW   rX   re   rf   rg   rh   ri   r(   r   rm   	cpu_countc                      g N r   r6   r3   <lambda>5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    Tr6   zCannot determine therG   r}   zInvalid number of workers...r   )r+   r,   r   r   rn   ro   setattrosrL   rM   NotImplementedErrorrN   )r-   monkeypatchr>   rr   rs   s        r3   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   rR   r#   rJ   rG   rF   r   r   rw   rx   rc   z!Sample contains duplicate points.z'Sample must contain at least two points)	r+   r,   rL   rM   rN   r   geometric_discrepancywarnsUserWarningry   s     r3   !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   mstrc   r         ?      ?rR   	chebyshev)metric)rd   r   l	   s;80riR$ r(   dr=   2   gY$?guڗ8?)	r+   r,   r   r   r   ro   r;   r<   LatinHypercube)r-   r>   r=   s      r3   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	
r6   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   rc   r   )r+   r,   r   r   r   ry   s     r3   2test_geometric_discrepancy_mst_with_zero_distances<TestUtils.test_geometric_discrepancy_mst_with_zero_distances   s<     Aq6Aq6Aq62311&GMr6   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   rR   r#   rS   rT   rU   r~   T)	iterativerV   rW   rX   l	   gy,!uUxFYo9"] )rR   r:   rJ   rG   rF   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   rn   r   r   r;   r<   rL   rM   rN   )r-   rp   	disc_init	disc_iterr=   disc_refx_news          r3   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=   r:   d   )
r+   r;   r<   r   r   rn   rangeintegersr   r   )
r-   r=   qmc_genr>   discirow_1row_2coldisc_references
             r3   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 r6   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          r3   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::r6   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         r3   disc_wdFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wd9  s    77DAD!QJ-CAtQJ-C66"&&+-66#)+<*=+-66#)+<a+?*@FG"I '() *D 1H9qAv},,r6   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          r3   disc_mdFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdC  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::r6   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+   ro   r   r   r   maximum)r   r   r   kjs        r3   disc_star_l2KTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2S  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 r8   rg   rc   re   rb   rm   N)r+   r;   r<   r   rn   r   )	r-   r   r   r   r   r=   r>   	disc_currdisc_alts	            r3   +test_discrepancy_alternative_implementation5TestUtils.test_discrepancy_alternative_implementation'  s    	;	-	; 		 ii##$KLH%OOF48	6?	,OOF48	6?	,OOF48	6?	,OOF9=	'	,r6   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 )Nr:   r~         i  i^  i5	  )r   )r-   primess     r3   test_n_primesTestUtils.test_n_primesq  sS    "bzR#bzS   #bzT!!!r6   c                 8    [        S5      n/ SQn[        X5        g )Nr   )r   r(   r#                     r      %   )   +   /   )r   r   )r-   r   r/   s      r3   test_primesTestUtils.test_primes{  s    !"%F$r6   r   N)__name__
__module____qualname____firstlineno__r4   rC   rO   rt   rz   r   r   r   rL   markxfailthread_unsafer   r   r   r   r   r   __static_attributes__r   r6   r3   r   r      s    +<* $D#DJ3!0F.*
0 [[J   [[N 	
N(?T2"H-T"%r6   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 )	Nr:   )
        r   r   r         ?      ?      ?      ?g      ?g      ?rR   r   rK   r   r(   )start_indexr   r   )r-   r>   r/   s      r3   test_van_der_corputTestVDC.test_van_der_corput  s]    #-$A.$A.$q1AB(r6   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 r:   Tscrambler=   r   r(   )r  r  r=   rR   )r  r  r=   r}   rK   r  )r-   r=   r/   r>   s       r3   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(r6   c                 ~    [         R                  " [        SS9   [        SSS9  S S S 5        g ! , (       d  f       g = f)Nz'base' must be at least 2rG   r:   r   )base)rL   rM   rN   r   r-   s    r3   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   r6   r3   r   r     s    ))"'r6   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       r3   r  RandomEngine.__init__  s    1SAr6   r   r   c                R    U R                   R                  XR                  45      nU$ r   )r=   r;   r   )r-   r   r}   r>   s       r3   _randomRandomEngine._random  s    !VV-r6   r   )NN)r   )r   r   r   r   r  r  r   __classcell__)r  s   @r3   r  r    s    Ba  r6   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        r3   test_subclassing_QMCEnginer&    s    !!HIF}}q}!H}}q}!H2%%% LLN1$$$MMAM&M) LLN
!MMAM&M)2%%%r6   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 integerrG   )r   r~   z*'u_bounds' and 'l_bounds' must be integersr   g?r    )rL   rM   rN   r  r   )msgr!  s     r3   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   r:   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        r3   test_integersr9    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&**,

-{;r6   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 )Nr:   l	   G]	#0m$ave r-  r~   )r6  r7  sizer   r#   T)r6  r7  r;  r,  r   r   Fr/  r   r   )r+   r;   r<   r   r  r   r4  r5  )r   r=   r6  r7  r!  r>   s         r3   test_integers_ndr<    s    
A
))

 E
FC
,,2BQ,
/C<<AAA<=D!%F__S3_GF#S)#T!V,__S3_FF#S)#T*r6   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S \R6                  " S\R&                  R8                  S9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  seedrD  r   )can_scrambleqmcerL   skip)r-   r  r=   kwargss       r3   r!  QMCEngineTests.engine  sG     99ChCFCCyy4c4V44r6   c                 @    U(       a  U R                   $ U R                  $ r   )scramble_ndunscramble_nd)r-   r  s     r3   	referenceQMCEngineTests.reference!  s    #+tC1C1CCr6   )idsc                     U R                  SUS9nUR                  S5      n[        [        R                  " S5      U5        g )Nr   r   r  rR   )rR   r   r!  r;   r   r+   emptyr-   r  r!  r>   s       r3   	test_0dimQMCEngineTests.test_0dim$  5    q84q!288F+V4r6   c                     U R                  SUS9nUR                  S5      n[        [        R                  " S5      U5        g )Nr   rQ  r   r   r   rR  rT  s       r3   test_0sampleQMCEngineTests.test_0sample*  rW  r6   c                 j    U R                  SUS9nUR                  S5      nSUR                  :X  d   eg )Nr   rQ  r   r   r   )r!  r;   r   rT  s       r3   test_1sampleQMCEngineTests.test_1sample0  s4    q84q!%%%r6   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   rQ     r   r   )r!  r;   r+   allrT  s       r3   test_boundsQMCEngineTests.test_bounds6  sT    sX6s#vvfk""""vvfk""""r6   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   rQ  r  r   rX   )rM  r!  r;   lenr   r  )r-   r  r8  r!  r>   s        r3   test_sampleQMCEngineTests.test_sample=  sZ    ^^X^6
q84Z16##s:666r6   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   rQ  rK   r  r   rX   )r!  r;   rg  r   )r-   r  r!  r8  n_half_r>   s          r3   test_continuingQMCEngineTests.test_continuingF  su    q84]]Q]'
q84ZA%MMFM#(67 3$?r6   r=   c                  @    [         R                  R                  S5      $ )NrA  )r+   r;   r<   r   r6   r3   r   QMCEngineTests.<lambda>X  s    BII))*QRr6   N)marksc                     [        U5      (       a  U" 5       n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=   rK   r  r   )callabler!  r;   r  r  r   )r-   r  r=   r!  r8  r>   s         r3   
test_resetQMCEngineTests.test_resetS  sk     C==%Cq8=]]Q]'
##q(((#+r6   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   rQ  rK   r  rR   r   rX   r   r   h㈵>)	r!  r;   r   r   r  r   appendr+   concatenate)r-   r  r!  r8  r>   
even_drawsr   s          r3   test_fast_forward QMCEngineTests.test_fast_forwardi  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   rQ  i   r   r   r   {Gz?rX      r   K   r   )r!  r;   r   r+   meanrepeat
percentile)r-   r  r   r!  r>   s        r3   test_distribution QMCEngineTests.test_distribution  s    q4t$GGF#RYYsA%6T	
 	MM&"1-ryyq/A	
 	MM&"1-ryyq/A	
r6   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 methodrG   r   Frx   r   r  r  )rL   rM   rN   r!  r-   messages     r3   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    r3   r   rp    s    hv&6%6r6   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   FrQ  rl   r  r  )r!  r;   )	r-   r  r   r!  
sample_ref
metric_refoptimal_sample_metric_s	            r3   test_optimizersQMCEngineTests.test_optimizers  si     q51]]R](
J'
;;U;N//B/'/###r6   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   Trs  rR   zArrays are not equalrG   r   r   )
r+   r;   r<   r   r!  ry  rL   rM   AssertionErrorr   )r-   r=   r>   r   r!  s        r3   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   )rA  )&r   r   r   r   __doc__NotImplementedrF  rE  rL  rK  r  rO  boolr   r!  r+   ndarrayrM  rL   r   parametrizerU  rZ  r^  rc  rh  rm  paramr   ru  r|  r  r  r   rn   r  r  r   r   r6   r3   r>  r>    sc   (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RLLV[[%>%>?	
, <, [[Zs;
 <
2 [[Z$0
 1
B
 [[#//*67	9	$	$
/r6   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 )NTrf  r   rQ  rK   )r   r}   gMbP?rX   r:   r   )rM  r!  r;   rg  r   r  r   r   )r-   r8  r!  r>   s       r3   test_workersTestHalton.test_workers  s    ^^T^2
q40Z!<6 	__R(
Q/V(r6   r   N)r   r   r   r   r   HaltonrF  rE  r+   r,   rL  rK  r  r   r   r6   r3   r  r    s    ::DLHHq!fuen$enuen$enuen$enuen> ?M
 ((Z4'4'4'4'4'4'4'46 7K)r6   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.rL   rG  r-   argss     r3   rm  TestLHS.test_continuing      56r6   c                 0    [         R                  " S5        g r  r  r  s     r3   r|  TestLHS.test_fast_forward  r  r6   c                 0    [         R                  " S5        g NzJNot applicable: the value of reference sample is implementation dependent.r  r  s     r3   rh  TestLHS.test_sample       1 	2r6   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   rX   )r+   r;   r<   r   r   r   r  arangebroadcast_toTanysortr   setr   r   r   r   r3  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                         r3   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   FrQ  rl   r  r  r  )r!  r;   r   )r-   r!  r  r  r  s        r3   test_optimizer_1dTestLHS.test_optimizer_1d  sP    q51]]R](
;;U;M//B/':/r6   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 strengthrG   r   r(   )r  z%n is not the square of a prime numberr   )r   r  rj   r#   zn is too small for d	   )rL   rM   rN   r   r   r;   )r-   r  r!  s      r3   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   rF  rE  rm  r|  rh  rL   r   r  r  r  r)  r   r   r6   r3   r  r    s    DL772 [[Z!Q0[[Z%7[[^dK-@A#/ B 8 1#/J0r6   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' pointsrG   r   r:   )rL   r   r   r   Sobolr;   r-   r!  s     r3   test_warningTestSobol.test_warningB  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   Frf  rR   rK   r  rG   )r   r  random_base2r   rL  rL   rM   rN   r-   r!  r>   s      r3   test_random_base2TestSobol.test_random_base2H  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 dimensionalityrG   r   zMaximum supported 'bits' is 64A   )bits)rL   rM   rN   r   r  MAXDIMr  s    r3   
test_raiseTestSobol.test_raiseV  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  Frf  r   r   )r   r  r   r;   flattentolistr   )r-   r!  count1count2s       r3   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2r6   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`rG   )r   r  r;   r   rL  rL   rM   rN   )r-   r  r!  nsr>   s        r3   	test_bitsTestSobol.test_bitsf  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   Frl   r  rK   )r   r  r;   r   rL  r  s      r3   test_64bitsTestSobol.test_64bitsp  s2    1u26q!4--v6r6   r   N)r   r   r   r   r   r  rF  rE  r+   r,   rL  rK  r  r  r  r  rL   r   r  r  r  r   r   r6   r3   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, -7r6   r  c                       \ rS rSrS rSrg)TestLow0Bitiv  c                 L    / SQnU H  u  p#[        [        U5      U5        M     g )N)	r   r   r]  )r   r   r#   r   )r   rR   )l    !   )l        r   )l    "   )l    r  )r   r   )r-   test_vectorin_r/   s       r3   test_examplesTestLow0Bit.test_examplesw  s&    
 $HC-s3 $r6   r   N)r   r   r   r   r  r   r   r6   r3   r  r  v  s    4r6   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)TestPoissoni  Fc                 0    [         R                  " S5        g )NzToo costly in memory.r  r  s     r3   rc  TestPoisson.test_bounds  s    +,r6   c                 0    [         R                  " S5        g )Nz"Not applicable: recursive process.r  r  s     r3   r|  TestPoisson.test_fast_forward  s    89r6   c                 0    [         R                  " S5        g r  r  r  s     r3   rh  TestPoisson.test_sample  r  r6   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;   rg  l2_normr+   rz  )r-   r  r  r  r!  sample_initsample_continuedr>   s           r3   rm  TestPoisson.test_continuing  s     q%@mmbm);2%%%{#v---!==2=.#$***'(F222 ?aH6{b1f$$$v&(((r6   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(   rR   volumesurface)r   r  hyperspherer=   )r+   r;   r<   r   rF  rg  r  )r-   r=   r  r6  r7  radii
dimensionshypersphere_methodsgenr   r  r  r!  r>   s                 r3   test_mindistTestPoisson.test_mindist  s    ii##$KL	szz!},s2
'3j)<=&)"A{YY  F ]]2&Fv;"$$$6?f,,, '*r6   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  )rF  
fill_spacer  )r-   r  r!  r>   s       r3   test_fill_spaceTestPoisson.test_fill_space  s9    Qv.""$v&(((r6   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"   r9   rF  r;   r	   )r-   r!   r  r"   r!  r>   points          r3   test_sample_inside_lower_bounds+TestPoisson.test_sample_inside_lower_bounds  sP    H  
 r"Ee.h. r6   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#  r9   r$  )r-   r"   r  r!   r!  r>   r%  s          r3   test_sample_inside_upper_bounds+TestPoisson.test_sample_inside_upper_bounds  sP    H  
 r"Ee.h. r6   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'rG   r(   r#  rL   rM   rN   rF  )r-   r  r!   r"   s       r3   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 dimensionrG   r(   r#  r-  )r-   r"   r!   r  s       r3   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 samplingrG   r   rx   )r  )rL   rM   rN   r   PoissonDiskr  s     r3   r)  TestPoisson.test_raises  s/    ?]]:W5OOA62 655s	   ;
A	r   N)r   r   r   r   r   r4  rF  rE  rc  r|  rh  rm  r  r  rL   r   r  r&  r*  r.  r1  r)  r   r   r6   r3   r  r    s    ??DL-:2)&-*) [[Z,	)BC
/ D
/ [[Z,	)BC
/ D
/P [[Z,R)AB[[Z1a&2	 3 C	3r6   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.rG   r:   )n_trials)r9  r:  r   r;  r<  z Elements of pvals must sum to 1.r9  r:  r  r;  r<  z Dimension of `engine` must be 1.r   r   )r=  r!  "`engine` must be an instance of...)
r+   r,   rL   rM   rN   r   MultinomialQMCr  r;   r<   )r-   r  r  s      r3   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=  rD  r   rX   )
r+   r;   r<   r,   
atleast_2dr3  r  r   rA  r   )r-   r=   r  r=  r  r!  s         r3   test_MultinomialBasicDraw,TestMultinomialQMC.test_MultinomialBasicDraw  sm    ii##$IJHH34==.55c:##AsCa((;r6   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   rW   rX   )	r+   r;   r<   r,   r   rA  r   r   rE  )r-   r=   r  r!  drawss        r3   test_MultinomialDistribution/TestMultinomialQMC.test_MultinomialDistribution  sj    ii##$JKHH34##A#>a u-r}}Q/?dKr6   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?rT   r   r   rM  r   gaۢ?g7?r(   rT   r   )r+   r,   rg  r   r   )r-   p_cumulativer;  s      r3   test_FindIndex!TestMultinomialQMC.test_FindIndex&  sy    xx KL< %l#>B%l#>B%l'BAF%l'BAF%l#>qIr6   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=   rX   )r+   r;   r<   r,   rE  r3  r  r   r  rA  r   )r-   r=   r  r=  r  base_enginer!  s          r3   test_other_engine$TestMultinomialQMC.test_other_engine/  s     ii##$KLHH34==.55c:iiDc:##A(+-a((;r6   r   N)r   r   r   r   rB  rL   r   filterwarningsrF  rJ  rP  rT  r   r   r6   r3   r7  r7    s\    O. [[ 56< 7<LJ [[ 56	< 7	<r6   r7  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   MultivariateNormalQMCr+   zerosr;   r   r   r-   r!  sampless      r3   test_NormalQMCTestNormalQMC.test_NormalQMC=  s    **<--/W]]F+--!-$W]]F+**<--/W]]F+--!-$W]]F+r6   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_transformrZ  r#   r  r[  r   r]  r  r\  r_  s      r3   test_NormalQMCInvTransform(TestNormalQMC.test_NormalQMCInvTransformK  s    **!D2--/W]]F+--!-$W]]F+**!D2--/W]]F+--!-$W]]F+r6   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  rd  rD  r  LpɻgUygxDg?rW   rX   r(   r  rd  r=   )rh  ri  gZ?)g#ڎrgΌ~42?gԻx?nrR   Tr  )r  rd  r!  r=   )	r+   r;   r<   r   r]  r^  r,   r   r  )r-   r=   r!  r`  samples_expectedrS  s         r3   test_NormalQMCSeeded"TestNormalQMC.test_NormalQMCSeeded[  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=r6   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=   rd  r  <9\Mg+`?g]@"i?rW   rX   r(   )ro  rp  g,D?)g˚X`?g7@gaTR')r+   r;   r<   r   r]  r^  r,   r   )r-   r=   r!  r`  rk  s        r3    test_NormalQMCSeededInvTransform.TestNormalQMC.test_NormalQMCSeededInvTransform{  s    ii##$KL**!#T;--!-$88i%;&.%9%; <= ii##$KL**!#T;--!-$88%E%B%D E=r6   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   FrQ  T)r  r!  rd  r   )r   r  r]  r+   r^  r;   r   r   )r-   r   rS  r!  r`  s        r3   rT  TestNormalQMC.test_other_engine  s\    A))a%8K..BHHQK6A=ACF mmoGA/ r6   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   r  r   r  rN  r+   r;   r<   r   r]  r^  rb  r   r  stdr   cov	transposer-   r=   r!  r`  r   rl  pvalrz  s           r3   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'''r6   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   Trj  rw  r  r   r   r  r   r  rN  rx  r|  s           r3   !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'''r6   r   N)r   r   r   r   ra  re  rl  rq  rT  r~  r  r   r   r6   r3   rX  rX  <  s&    ,, >@>&0((r6   rX  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 consistentrG   r   r   r?  )r!  r'   rR   r@  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	rL   rM   rN   r   r]  r  r+   r;   r<   r  s     r3   rB  *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   r]  _corr_matrixr  s     r3   test_MultivariateNormalQMCNonPD9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  s2    **	9i8
 ""...r6   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  rz  rZ  r  r[  r   r]  r  rt  r   r   r   r   r   r   r   r   r   r   r(   r#   r(   r   r]  r;   r   r   r+   r,   r-   r!  r`  r  rz  s        r3   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+r6   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  rz  rd  rZ  r  r[  r   r]  r  rt  r  r  r  )rd  r  r  r  r  s        r3   &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+r6   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)rd  r=   r  g X4g0<gΧU?gK\ @rW   rX   r(   r(   r(   r'   )gZh44gA->gZC)g~T~O?g*ʥo@gc}E?
r+   r;   r<   standard_normalr{  diagr   r]  r,   r   r-   r=   r?   Ar!  r`  rk  s          r3    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=r6   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=   rd  r  gFX?ggR4gO=`?rW   rX   r  r(   r'   )go.2?gikD0NgPN)g4YgҫJC?g-v2 @r  r  s          r3   ,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=r6   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  rz  r=   rw  r  r   r  r  rN  rT   rS   r)   r   r   r+   r;   r<   r   r]  rb  r   r  ry  r   rz  r{  ro   r|  s           r3   !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&---r6   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  rz  r=   rd  rw  r  r   r  r  rN  rT   rS   r)   r   r   r  r|  s           r3   -test_MultivariateNormalQMCShapiroInvTransformGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformZ  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&---r6   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   )rT   r   rT   )r   rT   rT   )rT   rT   rS   r  ra  r  r   r   r  r   r   rt  g?r  rY  rx  )r+   r;   r<   r   r]  rb  r   r  ry  ro   r   rz  r{  r|  s           r3   $test_MultivariateNormalQMCDegenerate>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerate}  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   	 r6   r   N)r   r   r   r   rB  r  r  r  r  r  r  r  r  r   r   r6   r3   r  r    s1    =4/,0,4>.>2.@!.Fr6   r  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   )r;  rR   )maxiter)r+   r;   RandomStateuniformr   r  r   r   )	r-   r=   r>   base_l1base_l2rl  sample_lloydcurr_l1curr_l2s	            r3   
test_lloydTestLloyd.test_lloyd  s    ii##G,Q16"&/qAAAL |,Gl+G $$$$$$GG!F r6   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       r3   test_lloyd_non_mutating!TestLloyd.test_lloyd_non_mutating  ss    
 hhc
!$c
!$c
!$c
 , - "&&(;

 	1&&{?????r6   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 arrayrG   rI   z`sample` dimension is not >= 2r   rM  r   z!`sample` is not in unit hypercubegr   r   )rL   rM   rN   r   )r-   r>   r(  s      r3   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   r6   r3   r  r    s    ".@ ;r6   r  c                 J    [         R                  " U 5      R                  5       $ r   )r
   pdistr4  r  s    r3   r  r    s    >>&!%%''r6   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   rD  rR   r   z3got multiple values for argument now known as `rng`rG   )r   r=   rD  )r+   r;   r  r   r<   rL   rM   	TypeError)r!  seed_numberr=   res1res2res3r  s          r3   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)8r   collectionsr   	itertoolsr   r   rL   numpyr+   numpy.testingr   r   r   r	   scipy.spatialr
   scipy.statsr   scipy.stats._sobolr   r   r   scipy.stats._qmcr   r   r   r   r   r   r   r   r   r   r  r&  r)  r9  r<  r>  r  r  r  r  r  r7  rX  r  r  r  r   r  r  r  r   r4  r  r   r6   r3   <module>r     sF   	  +    #  @   i% i%X#' #'L3== &.2<D+ k/ k/\) )BRn RjH7 H7V4 4&q3. q3h<< <<~v( v(r] ]@5; 5;r( CJJ		$'$6$6$I J7J7r6   