+
    ,i                     r   ^ RI t ^ RIHt ^ RIHtHt ^ RIt^ RIt^ RI	H
t
HtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHtHtHtHtHtHtHt  ! R
 R4      t ! R R4      t ! R R]P4                  4      t R t!R t"R t#R t$ ! R R4      t% ! R R]%4      t& ! R R]%4      t' ! R R]%4      t( ! R R]%4      t) ! R R4      t* ! R  R!4      t+ ! R" R#4      t, ! R$ R%4      t-R& t.]P^                  Pa                  R']Pb                  ]Pd                  ]Pf                  ]Ph                  .4      R( 4       t5R# ))    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                     a  ] tR t^t o R tR tR tR tR t]	P                  P                  R 4       tR tR t]	P                  P                  R	R
R7      ]	P                  P                  R 4       4       tR tR tR tR tR tRtV tR# )	TestUtilsc                   ^ .^.R..pR.^.^..p\         P                  ! VR^R7      p\        W24       ^ ^ .^^.RR..p\        P                  ! R^ .^^..4      pR^ .^^.^R..p\         P                  ! W^ ,          V^,          R7      p\        W24       \         P                  ! W4^ ,          V^,          RR7      p\        WQ4       . RO. R	O. R
O.p^ . ROrv. RO. RO. RO.p\         P                  ! WVR7      p\        W24       R# )r         ?l_boundsu_bounds      @Tr   r   reverseN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   &       </usr/lib/python3/dist-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                B   \         P                  P                  R 4      pVP                  R4      pVP                  ^
4      ) ^
,          pVP                  ^
4      ^
,          p\        P                  ! W#VRR7      p\        P                  ! WSVRR7      p\        Wb4       R# )l	   EaT4G*wv F)r   TN   
   )r(   randomdefault_rngr   r'   r   )r*   rngsampleabscaledunscaleds   &      r0   test_scale_randomTestUtils.test_scale_random4   sw    ii##$KLH%ZZ^Ob JJrNR6a799V48)r3   c           	        \         P                  ! \        R R7      ;_uu_ 4        . ROp\        P                  ! VR^R7       RRR4       \         P                  ! \        RR7      ;_uu_ 4        ^ ^ .^^.RR..p\
        P                  ! R^.^^..4      p\        P                  ! W^ ,          V^,          R7       RRR4       \         P                  ! \        RR7      ;_uu_ 4        ^ ^ .^^.RR..p. RO^^.rC\        P                  ! WVR7       RRR4       \         P                  ! \        RR7      ;_uu_ 4        ^ ^ .^^.RR..p\
        P                  ! . RO. RO.4      p\        P                  ! W^ ,          V^,          R7       RRR4       \         P                  ! \        RR7      ;_uu_ 4        ^ ^ .^R.RR..p\
        P                  ! R^ .^^..4      p\        P                  ! W^ ,          V^,          R7       RRR4       \         P                  ! \        R	R7      ;_uu_ 4        R^ .^^.^R
..p\
        P                  ! R^ .^^..4      p\        P                  ! WR^ ,          V^,          RR7       RRR4       R#   + '       g   i     ELS; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     ELD; i  + '       g   i     L; i  + '       g   i     R# ; i)Sample is not a 2D arraymatchr   r   NzBounds are not consistentz/'l_bounds' and 'u_bounds' must be broadcastableSample is not in unit hypercuber&   zSample is out of boundsr   Tr   r   r"   r   r    )r    r      )r#   r$   r$   )pytestraises
ValueErrorr   r'   r(   r)   )r*   r+   r.   r   r   r,   s   &     r0   test_scale_errorsTestUtils.test_scale_errors=   su   ]]:-HIIEIIeb15 J ]]:-IJJVaVc3Z0EXXAwA/0FIIeQi&)D K
 ]]: .G H HVaVc3Z0E!+aVhIIeB	H ]]: .G H HVaVc3Z0EXXz956FIIeQi&)D	H ]]: .: ; ;VaXSz2EXXAwA/0FIIeQi&)D	; ]]:-GHH7QFQH-CXXAwA/0FIIc1Iq	"$ IH7 JII KJJ
H H HH H H; ; IHHsK   J/AJ!)+J5 AK	:AK4AK0J	!J2	5K		K	K-	0L	c           
        \         P                  ! ^^.^^.^^.^^.^^.^^..4      pRV,          R,
          R,          p\         P                  ! ^^.^^.^^.^^.^^.^^..4      pRV,          R,
          R,          p\        \        P                  ! V4      RRR7       \        \        P                  ! V4      RRR7       \         P                  ! . RO. RO. RO. RO. RO. RO. RO.4      pRV,          R,
          R,          p\        \        P                  ! VRR7      R	RR7       \        \        P                  ! VR
R7      RRR7       \        \        P                  ! VRR7      RRR7       R F`  p\         P
                  ! ^V) ,          4      p\        \        P                  ! \         P                  ! ^.V,          .4      RR7      V4       Kb  	  R# )r"          @      ?ǘ?-C6?atolg/$?MDmethodr   WDS?CD:M?L2-starN      (@rH   r"   r"   rH   rH   rH   r"   rH   rH   rH   rH   rH   rH   r"   r"   r"   r"   r"   r"   r"   r"   r"   rH   rH   r"   rH   rH   rH   r"   r"   rH   rH   rH   rH   r"   r"   rH   rH   rH   r"   rH   rH         @rH                @   )r(   r)   r   r   discrepancysqrt)r*   space_1space_2r;   dimrefs   &     r0   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 )r3   c           	     z   \         P                  ! ^^.^^.^^.^^.^^.^^..4      p\        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! V4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! ^^.4       RRR4       ^ ^ .^^.RR..p\        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! VRR7       RRR4       R#   + '       g   i     L; i  + '       g   i     Lu; i  + '       g   i     R# ; i)	r"   rF   rD   NrC   r   'toto' is not a valid ...totorV   )r(   r)   rI   rJ   rK   r   rl   r*   r;   s   & r0   test_discrepancy_errors!TestUtils.test_discrepancy_errors   s    Aq6Aq6Aq6Aq6Aq6Aq6JK]]@
 
 OOF#

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

 JI KJJs$   DD D)D	D&	)D:	c           
        \         P                  ! . RO. RO. RO. RO. RO. RO. RO.4      pRV,          R,
          R,          p\        \        P                  ! VR^R7      RRR7       \        \        P                  ! VR^R7      R	RR7       \        \        P                  ! VR
^R7      RRR7       R Fa  p\         P
                  ! ^V) ,          4      p\        \        P                  ! \         P                  ! ^.V,          .4      RRR7      V4       Kc  	  VP                  \        RR 4       \        P                  ! \        RR7      ;_uu_ 4        \        P                  ! VRR7       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \        P                  ! VRR7       RRR4       R#   + '       g   i     LW; i  + '       g   i     R# ; i)rH   rO   rP   rU   )rW   workersr   rR   rS   rX   rY   rZ   r[   r\   	cpu_countc                      R # N r   r3   r0   <lambda>5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    Tr3   zCannot determine therD   r{   NzInvalid number of workers...r^   r_   r`   ra   rb   rc   rd   re   rf   r    )r(   r)   r   r   rl   rm   setattrosrI   rJ   NotImplementedErrorrK   )r*   monkeypatchr;   rp   rq   s   &&   r0   test_discrepancy_parallel#TestUtils.test_discrepancy_parallel   sg   -------/ 0 ,$3tQG!	# 	tQG!	# 	tQG!	# )C''!+&CCOOBHHqcCi[,A3<bJKNP )
 	B\:]].6LMMOOFB/ N ]]:-KLLOOFB/ ML NM MLLs   F=G=G	G!	c           	     F   \         P                  ! ^^.^^.^^.^^.^^.^^..4      p\        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! V4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! ^^.4       RRR4       ^ ^ .^^.RR..p\        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! VRR7       RRR4       \         P                  ! ^ ^ .^ ^ .^ ^..4      p\        P                  ! \        R	R7      ;_uu_ 4        \
        P                  ! V4       RRR4       \         P                  ! RR..4      p\        P                  ! \        R
R7      ;_uu_ 4        \
        P                  ! V4       RRR4       R#   + '       g   i     ELf; i  + '       g   i     EL5; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)r"   rF   rD   NrC   r   ru   rv   rV   z!Sample contains duplicate points.z'Sample must contain at least two points)	r(   r)   rI   rJ   rK   r   geometric_discrepancywarnsUserWarningrw   s   & r0   !test_geometric_discrepancy_errors+TestUtils.test_geometric_discrepancy_errors   s   Aq6Aq6Aq6Aq6Aq6Aq6JK]]:-OPP%%f- Q ]]:-HII%%q!f- J a&1a&3*-]]:-IJJ%%fV< K Aq6Aq6Aq623\\+-PQQ%%f- R C:,']]:-VWW%%f- XW QPP JII KJ RQ XWWs<   GG G)G< HG	G&	)G9	<H	H 	c                   \         P                  ! ^ ^ .^^..4      p\        \        P                  ! V4      \         P
                  ! ^4      4       \        \        P                  ! VRR7      \         P
                  ! ^4      4       \         P                  ! ^ ^ .^ ^.R^..4      p\        \        P                  ! V4      R4       \        \        P                  ! VRR7      R4       \         P                  ! ^ ^ .RR.^^..4      p\        \        P                  ! V4      \         P
                  ! ^4      ^,          4       \        \        P                  ! VRR7      \         P
                  ! ^4      ^,          4       \        \        P                  ! VRR7      R4       \        \        P                  ! VRRR7      R4       \         P                  P                  R	4      p\        P                  ! ^VR
7      P                  ^24      p\        \        P                  ! V4      R4       \        \        P                  ! VRR7      R4       R# )r   mstrV   r         ?      ?	chebyshev)metric)rW   r   l	   s;80riR$ dr:   gY$?guڗ8?N)	r(   r)   r   r   r   rm   r8   r9   LatinHypercube)r*   r;   r:   s   &  r0   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	
r3   z5minimum_spanning_tree ignores zero distances (#18892)T)reasonstrictc                    \         P                  ! ^ ^ .^ ^ .^ ^..4      p\        \        P                  ! VRR7      R4       R# )r   r   rV   r   N)r(   r)   r   r   r   rw   s   & r0   2test_geometric_discrepancy_mst_with_zero_distances<TestUtils.test_geometric_discrepancy_mst_with_zero_distances   s<     Aq6Aq6Aq62311&GMr3   c           	     x   \         P                  ! ^^.^^.^^.^^.^^.^^..4      pRV,          R,
          R,          p\        P                  ! VRR RR7      p\	        VR,          VRR V4      p\        VRRR7       \         P                  P                  R	4      pVP                  R4      p\        P                  ! V4      p\        P                  ! VRR RR7      p\	        VR,          VRR V4      p\        W5RR7       \        P                  ! \        R
R7      ;_uu_ 4        \	        VR,          VRR ^,           V4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \	        VR,          V^ ,          V4       RRR4       ^^.p\        P                  ! \        RR7      ;_uu_ 4        \	        WaRR V4       RRR4       RR..p\        P                  ! \        RR7      ;_uu_ 4        \	        WaRR V4       RRR4       . ROp\        P                  ! \        RR7      ;_uu_ 4        \	        WaRR V4       RRR4       R#   + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)r"   rO   rP   NT)	iterativerQ   rR   rS   l	   gy,!uUxFYo9"] rF   rD   rC   zx_new is not in unit hypercuber   zx_new is not a 1D arrayz&x_new and sample must be broadcastabler]   r   )rg   r7   )g333333?皙?r   )r(   r)   r   rl   r   r   r8   r9   rI   rJ   rK   )r*   rn   	disc_init	disc_iterr:   disc_refx_news   &      r0   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Iwr{GAJ	B J A]]: .: ; ;ucrlI>; s]]:-GHHucrlI> I ]]: .> ? ?ucrlI>? ?#; ; ; JI; ;
 IH? ? ?s<   )I4I/ JJJ(I,	/I?	J	J%	(J9	c                   \         P                  P                  R 4      p\        P                  ! ^VR7      pVP                  ^
4      p\        P
                  ! V4      p\        ^d4       F  pVP                  ^
4      pVP                  ^
4      pVP                  ^4      p\        W6WxV4      pW7V3,          W6V3,          uW6V3&   W7V3&   \        P
                  ! V4      p	\        WI4       K  	  R# )l	   PvWuW=lWx" r:   N)
r(   r8   r9   r   r   rl   rangeintegersr   r   )
r*   r:   qmc_genr;   discirow_1row_2coldisc_references
   &         r0   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 r3   c                   R pR pR pR p\         P                  P                  R4      pVP                  R4      p\        P                  ! VRR7      pV! V4      p\        Wx4       \        P                  ! VRR7      pV! V4      p\        Wx4       \        P                  ! VR	R7      pV! V4      p\        Wx4       \        P                  ! VR
R7      pV! V4      p\        Wx4       R# )z,Alternative definitions from Matt Haberland.c                 <   V P                   w  rT p\        P                  ! \        P                  ! ^R\        P                  ! VR,
          4      ,          ,           R\        P                  ! VR,
          4      ^,          ,          ,
          ^R7      4      pV R,          pV R,          p\        P                  ! \        P                  ! \        P                  ! ^R\        P                  ! VR,
          4      ,          ,           R\        P                  ! VR,
          4      ,          ,           R\        P                  ! W5,
          4      ,          ,
          ^R7      ^ R7      4      pRV,          ^V,          V,          ,
          ^V^,          ,          V,          ,           # )r"   r   axisNNNNr   r   Nr   gUUUUUU?shaper(   sumprodabsxnsxijdisc1xkjdisc2s   &      r0   disc_c2FTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_c2+  s+   77DACFF277A&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE J-CJ-CFF266"''!,/sSy0A,A+B,/sSy0A,A+B -0sy0A,A+B IJ#K ()	* +E
 A:!e+a1fUl::r3   c                    V P                   w  rV R,          pV R,          p\        P                  ! \        P                  ! \        P                  ! R\        P                  ! W4,
          4      ,
          \        P                  ! W4,
          4      ^,          ,           ^R7      ^ R7      4      pRV,          ) ^V^,          ,          V,          ,           # )Nr   r   r   r&   gUUUUUU?r   )r   r   r   r   r   r   s   &     r0   disc_wdFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wd:  s    77DAJ-CJ-C66"&&+-66#)+<*=+-66#)+<a+?*@FG"I '() *D 1H9qAv},,r3   c                    V P                   w  rT p\        P                  ! \        P                  ! RR\        P                  ! VR,
          4      ,          ,
          R\        P                  ! VR,
          4      ^,          ,          ,
          ^R7      4      pV R,          pV R,          p\        P                  ! \        P                  ! \        P                  ! RR\        P                  ! VR,
          4      ,          ,
          R\        P                  ! VR,
          4      ,          ,
          R\        P                  ! W5,
          4      ,          ,
          R\        P                  ! W5,
          4      ^,          ,          ,           ^R7      ^ R7      4      pR	V,          ^V,          V,          ,
          ^V^,          ,          V,          ,           # )
r$   r   r   g?r   r   r   g      ?r   gUUUUUU?r   r   s   &      r0   disc_mdFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdD  sH   77DACFF277C&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE J-CJ-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::r3   c                 H   V P                   w  r\        P                  ! ^V) ,          ^^V,
          ,          V,          \        P                  ! \        P                  ! ^V ^,          ,
          ^R7      4      ,          ,
          \        P                  ! \        V4       UUu. uFW  p\        V4       FE  p\        P                  ! ^\        P                  ! WR3,          WR3,          4      ,
          4      NKG  	  KY  	  upp4      V^,          ,          ,           4      # u uppi )r%   r   r   )r   r(   rm   r   r   r   maximum)r   r   r   kjs   &    r0   disc_star_l2KTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2T  s    77DA77qb	A!a%L1,&&Q!V!456 6&&"1X%uQx! GGA

1T7AdG <<=/7 >%  !V s   !ADl	   j;<Q`siyX rZ   rV   rX   rU   r\   Nr5   )r(   r8   r9   r   rl   r   )	r*   r   r   r   r   r:   r;   	disc_currdisc_alts	   &        r0   +test_discrepancy_alternative_implementation5TestUtils.test_discrepancy_alternative_implementation(  s    	;	-	; 		 ii##$KLH%OOF48	6?	,OOF48	6?	,OOF48	6?	,OOF9=	'	,r3   c                    \        ^
4      pVR,          ^8X  g   Q h\        ^4      pVR,          R8X  g   Q h\        R4      pVR,          R8X  g   Q hR# )r7   i  i^  i5	  Nr   )r   )r*   primess   & r0   test_n_primesTestUtils.test_n_primesr  sS    "bzR#bzS   #bzT!!!r3   c                :    \        ^24      p. ROp\        W4       R# )2   N)rH   r%   r$                           %   )   +   /   )r   r   )r*   r   r,   s   &  r0   test_primesTestUtils.test_primes|  s    !"%F$r3   r   N)__name__
__module____qualname____firstlineno__r1   r@   rL   rr   rx   rI   markthread_unsafer   r   r   xfailr   r   r   r   r   r   __static_attributes____classdictcell____classdict__s   @r0   r   r      s     +<* $D#DJ3 [[!0 !0F.*
0 [[J   [[N 	
N(?T2"H-T"% %r3   r   c                   2   a  ] tR tRt o R tR tR tRtV tR# )TestVDCi  c                    \        ^
4      p. ROp\        W4       \        ^
^R7      p\        W4       \        ^
^R7      p\        W4       \        ^^R7      p\        WR,          4       R# )r7   r   )start_indexr%   NNN)
        r   r   r         ?      ?      ?      ?g      ?g      ?r   r   )r*   r;   r,   s   &  r0   test_van_der_corputTestVDC.test_van_der_corput  s[    #-$A.$A.$q1B(r3   c                    R p\        ^
RVR7      p\        ^^RVR7      p\        W2R,          4       \        ^^RV^R7      p\        W2R,          4       \        ^^RV^R7      p\        W2R,          4       R# )l	   	XCf
Kl<{O8 Tscrambler:   )r   r
  r:   r   )r   r
  r:   r{   Nr  )r*   r:   r,   r;   s   &   r0   test_van_der_corput_scramble$TestVDC.test_van_der_corput_scramble  sw    5R$C8q4SIB(1ta
 	B(1ta
 	B(r3   c                    \         P                  ! \        R R7      ;_uu_ 4        \        ^
^R7       RRR4       R#   + '       g   i     R# ; i)z'base' must be at least 2rD   )baseN)rI   rJ   rK   r   r*   s   &r0   test_invalid_base_errorTestVDC.test_invalid_base_error  s.    ]]:-IJJ2A& KJJJs	   =A	r   N)	r   r   r   r   r  r  r  r   r   r   s   @r0   r   r     s     ))"' 'r3   r   c                   H   a a ] tR tRt oRV 3R lltRR^/R lltRtVtV ;t# )RandomEnginei  c                *   < \         SV `  WVR 7       R# ))r   optimizationr:   N)super__init__)r*   r   r  r:   	__class__s   &&&&r0   r  RandomEngine.__init__  s    1SAr3   r{   c               R    V P                   P                  WP                  34      pV# r~   )r:   r8   r   )r*   r   r{   r;   s   &&$ r0   _randomRandomEngine._random  s    !VV-r3   r   )NN)r"   )	r   r   r   r   r  r  r   r   __classcell__)r  r   s   @@r0   r  r    s     Ba  r3   r  c                     \        ^RR7      p V P                  ^R7      pV P                  ^R7      pV P                  ^8X  g   Q hV P                  4        V P                  ^ 8X  g   Q hV P                  ^R7      p\	        W4       V P                  4        V P                  ^R7       V P                  ^R7      p\	        W$4       V P                  ^8X  g   Q hR# )rH   l	   F,@IY^+Ge r   r   N)r  r8   num_generatedresetr   fast_forward)enginesample_1sample_2sample_1_testsample_2_tests        r0   test_subclassing_QMCEnginer(    s    !!HIF}}q}!H}}q}!H2%%% LLN1$$$MMAM&M) LLN
!MMAM&M)2%%%r3   c                     \         P                  ! \        R R7      ;_uu_ 4        \        R4       RRR4       \         P                  ! \        R R7      ;_uu_ 4        \        R4       RRR4       Rp \         P                  ! \        V R7      ;_uu_ 4        \        ^4      pVP	                  ^RR7       RRR4       R#   + '       g   i     L; i  + '       g   i     Lr; i  + '       g   i     R# ; i)z d must be a non-negative integerrD   Nz*'u_bounds' and 'l_bounds' must be integersg?r   )rH   r   )rI   rJ   rK   r  r   )msgr#  s     r0   test_raisesr+    s    	z)L	M	MT 
N 
z)L	M	MR 
N 8C	z	-	-aS1 
.	- 
N	M 
N	M 
.	-	-s#   C CC& C	C#	&C7	c                     \        ^RR7      p V P                  ^^
R7      p\        \        P                  ! V4      ^ .4       VP
                  \        P
                  ! R4      8X  g   Q hV P                  ^^
RR7      p\        \        P                  ! V4      ^ ^.4       R
p^pV P                  4        V P                  ^4      pWCV,
          ,          V,           p\        P                  ! V4      P                  \        P                  4      pV P                  4        V P                  W#^RR7      p\        W4       V P                  W#^dRR7      p\        VP                  4       VP                  4       3W#^,
          34       V P                  W#^dRR7      p\        VP                  4       VP                  4       3W#34       R	# )r"   l	   llG[/Ww r   r  int64T)r   endpointFr   r   r.  N)r  r   r   r(   uniquedtyper!  r8   floorastyper-  minmax)r#  r;   lowhigh
ref_samples        r0   test_integersr:    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&**,

-{;r3   c                     ^
p \         P                  P                  R4      pVP                  R
RV R7      pVP                  ^^V RR7      p\	        WR7      pVP                  W#^dRR7      p\        VP                  ^ R7      V4       \        VP                  ^ R7      V^,
          4       VP                  W#^dRR7      p\        VP                  ^ R7      V4       \        VP                  ^ R7      V4       R	# )r7   l	   G]	#0m$ave )r7  r8  sizeT)r7  r8  r<  r.  r   Fr/  r   Nr0  r   )r(   r8   r9   r   r  r   r5  r6  )r   r:   r7  r8  r#  r;   s         r0   test_integers_ndr=    s    
A
))

 E
FC
,,2BQ,
/C<<AAA<=D!%F__S3_GF#S)#T!V,__S3_FF#S)#T*r3   c                     a  ] tR tRt o Rt]t]t]t]t	RR.t
RR.tR!V 3R lR	 lltV 3R
 lR lt]P                  P!                  R]
]R7      R 4       t]P                  P!                  R]
]R7      R 4       t]P                  P!                  R]
]R7      R 4       t]P                  P!                  R]
]R7      R 4       t]P                  P!                  R]
]R7      R 4       t]P                  P!                  R]
]R7      R 4       t]P                  P!                  R]
]R7      ]P                  P!                  RR]P0                  P3                  R4      R34      ]P                  P4                  R 4       4       4       t]P                  P!                  R]
]R7      R 4       t]P                  P!                  RR.4      R 4       tR t]P                  P!                  RR]P@                  3RR 3.4      R 4       t!R t"R t#V t$R# )"QMCEngineTestsi  zGeneric tests for QMC engines.TF	ScrambledUnscrambled	   \v$PdvuL2+C c                &   < V ^8  d   QhRS[ RS[/# rH   r
  return)boolr   )formatr   s   "r0   __annotate__QMCEngineTests.__annotate__  s     5 55 
	5r3   c                    V P                   '       d   V P                  ! RR VRV/VB # V'       d   \        P                  ! 4        R# V P                  ! RRV/VB # )r
  seedNr   )can_scrambleqmcerI   skip)r*   r
  r:   kwargss   &&&,r0   r#  QMCEngineTests.engine  sO     99ChCSCFCCyy4c4V44r3   c                :   < V ^8  d   QhRS[ RS[P                  /# rD  )rF  r(   ndarray)rG  r   s   "r0   rH  rI  "  s#     D D$ D2:: Dr3   c                B    V'       d   V P                   # V P                  # r~   )scramble_ndunscramble_nd)r*   r
  s   &&r0   	referenceQMCEngineTests.reference"  s    #+tC1C1CCr3   r
  )idsc                    V P                  ^ VR7      pVP                  ^4      p\        \        P                  ! R4      V4       R# )r   r   r
  N)rg   r   r#  r8   r   r(   emptyr*   r
  r#  r;   s   &&  r0   	test_0dimQMCEngineTests.test_0dim%  5    q84q!288F+V4r3   c                    V P                  ^VR7      pVP                  ^ 4      p\        \        P                  ! R4      V4       R# )rH   rZ  Nr   rH   r[  r]  s   &&  r0   test_0sampleQMCEngineTests.test_0sample+  r`  r3   c                t    V P                  ^VR7      pVP                  ^4      pRVP                  8X  g   Q hR# )rH   rZ  Nr"   rH   )r#  r8   r   r]  s   &&  r0   test_1sampleQMCEngineTests.test_1sample1  s4    q84q!%%%r3   c                    V P                  ^dVR7      pVP                  R4      p\        P                  ! V^ 8  4      '       g   Q h\        P                  ! V^8*  4      '       g   Q hR# )d   rZ     N)r#  r8   r(   allr]  s   &&  r0   test_boundsQMCEngineTests.test_bounds7  sT    sX6s#vvfk""""vvfk""""r3   c                    V P                  VR 7      pV P                  ^VR7      pVP                  \        V4      R7      p\	        WBRR7       VP
                  \        V4      8X  g   Q hR# )r
  rZ  r  r   rS   N)rV  r#  r8   lenr   r   )r*   r
  r9  r#  r;   s   &&   r0   test_sampleQMCEngineTests.test_sample>  sZ    ^^X^6
q84Z16##s:666r3   c                   V P                  ^VR7      pVP                  ^R7      pV P                  ^VR7      p\        V4      ^,          pVP                  VR7      pVP                  VR7      p\        WcVR RR7       R# )rH   rZ  r  Nr   rS   )r#  r8   rq  r   )r*   r
  r#  r9  n_half_r;   s   &&     r0   test_continuingQMCEngineTests.test_continuingG  su    q84]]Q]'
q84ZA%MMFM#(67 3$?r3   r:   Nc                    V P                  ^WR7      pVP                  ^R7      pVP                  4        VP                  ^ 8X  g   Q hVP                  ^R7      p\	        WT4       R# )rH   r   r
  r:   r  N)r#  r8   r!  r   r   )r*   r
  r:   r#  r9  r;   s   &&&   r0   
test_resetQMCEngineTests.test_resetT  s[     q8=]]Q]'
##q(((#+r3   c                X   V P                  ^VR7      pVP                  ^R7      pV P                  ^VR7      pVP                  ^4       VP                  ^R7      p\        WCR,          RR7       VP	                  4        . p\        ^4       FC  pV^,          ^ 8X  d"   VP                  VP                  4       4       K2  VP                  ^4       KE  	  \        T\        ^4       Uu. uF  qf^,          ^ 8X  g   K  VNK  	  up,          \        P                  ! V4      RR7       R# u upi )rH   rZ  r  :rg   NNr   rS   h㈵>N)	r#  r8   r"  r   r!  r   appendr(   concatenate)r*   r
  r#  r9  r;   
even_drawsr   s   &&     r0   test_fast_forward QMCEngineTests.test_fast_forwardh  s    q84]]Q]'
q84A#2T: 	
qA1uz!!&--/2##A&	 
 	58:8a1uz8:;NN:&	
:s   'D'
;D'
c                   ^2pV P                  W!R7      pVP                  R4      p\        \        P                  ! V^ R7      \        P
                  ! RV4      RR7       \        \        P                  ! V^^ R7      \        P
                  ! RV4      RR7       \        \        P                  ! V^K^ R7      \        P
                  ! RV4      RR7       R	# )
r   rZ  i   r   r   {Gz?rS   r   r   N)r#  r8   r   r(   meanrepeat
percentile)r*   r
  r   r#  r;   s   &&   r0   test_distribution QMCEngineTests.test_distribution  s    q4t$GGF#RYYsA%6T	
 	MM&"1-ryyq/A	
 	MM&"1-ryyq/A	
r3   c                    R p\         P                  ! \        VR7      ;_uu_ 4        V P                  ^RRR7       RRR4       R#   + '       g   i     R# ; i)z)'toto' is not a valid optimization methodrD   Frv   r   r
  r  N)rI   rJ   rK   r#  r*   messages   & r0   test_raises_optimizer$QMCEngineTests.test_raises_optimizer  s9    >]]:W55KK!e&KA 6555   AA	zoptimization,metric	random-CDlloydc                    \        V 4      ) # r~   )r   r;   s   &r0   r   QMCEngineTests.<lambda>  s    hv&6%6r3   c                    V P                  ^RR7      pVP                  ^@R7      pV! V4      pV P                  ^RVR7      pVP                  ^@R7      pV! V4      pW8  g   Q hR# )rH   FrZ  r  r  N)r#  r8   )	r*   r  r   r#  
sample_ref
metric_refoptimal_sample_metric_s	   &&&      r0   test_optimizersQMCEngineTests.test_optimizers  si     q51]]R](
J'
;;U;N//B/'/###r3   c                >   \         P                  P                  R 4      p. p\        ^4       F7  pV P	                  ^RVR7      pVP                  VP                  ^4      4       K9  	  \        P                  ! \        RR7      ;_uu_ 4        \        V^ ,          V^,          4       RRR4       \        P                  ! \        RR7      ;_uu_ 4        \        V^ ,          V^,          4       RRR4       R#   + '       g   i     LY; i  + '       g   i     R# ; i)l	   B"V6DGlUN Trz  zArrays are not equalrD   N)
r(   r8   r9   r   r#  r  rI   rJ   AssertionErrorr   )r*   r:   r;   r   r#  s   &    r0   test_consume_prng_state&QMCEngineTests.test_consume_prng_state  s    ii##$FGqA[[1t[=FMM&--*+  ]]>1GHHF1I. I]]>1GHHF1I. IH IHHHHs   C8D8D	D	r   )rB  )%r   r   r   r   __doc__NotImplementedrM  rL  rU  rT  r
  rX  r#  rV  rI   r   parametrizer^  rc  rg  rm  rr  rw  r(   r8   r9   r   r{  r  r  r  r   rl   r  r  r   r   r   s   @r0   r?  r?    sZ    (D!L"M Ke}H
&C5 5 D D [[Zs;5 <5
 [[Zs;5 <5
 [[Zs;& <&
 [[Zs;# <# [[Zs;7 <7 [[Zs;
@ <
@ [[Zs;[[3II!!"IJ	
 [[,  <, [[Zs;
 <
2 [[Z$0
 1
B
 [[#//*67	9	$	$
/ 
/r3   r?  c                      a  ] tR tRt o ]P
                  tRt]P                  ! ^ ^ .RR.RR.RR.RR.RR.R R!.R"R#..4      t
]P                  ! RR.RR.RR.R	R
.RR.RR.RR.RR..4      tR tRtV tR# )$
TestHaltoni  Tg{'?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                @   V P                  R R7      pV P                  ^R R7      pVP                  \        V4      ^R7      p\	        W1RR7       VP                  4        VP                  ^
4      pVP                  4        VP                  ^
^R7      p\        W14       R# )Trp  rZ  )r   r{   gMbP?rS   r   N)rV  r#  r8   rq  r   r!  r   r   )r*   r9  r#  r;   s   &   r0   test_workersTestHalton.test_workers  s    ^^T^2
q40Z!<6 	__R(
Q/V(r3   r   Nr   gUUUUUU?r   gUUUUUU?r   gqq?r  gqq?r  g98?r  gqq?r  grq?)r   r   r   r   r   HaltonrM  rL  r(   r)   rU  rT  r  r   r   r   s   @r0   r  r    s     ::DLHHq!fuen$enuen$enuen$enuen> ?M
 ((Z4'4'4'4'4'4'4'46 7K) )r3   r  c                   &  a  ] tR tRt o ]P
                  tRtR tR t	R t
]P                  P                  R^^.4      ]P                  P                  RRR.4      ]P                  P                  R	R
R.4      R 4       4       4       tR tR tRtV tR
# )TestLHSi  Tc                2    \         P                  ! R 4       R# zNot applicable: not a sequence.NrI   rN  r*   argss   &*r0   rw  TestLHS.test_continuing      56r3   c                2    \         P                  ! R 4       R# r  r  r  s   &*r0   r  TestLHS.test_fast_forward  r  r3   c                2    \         P                  ! R 4       R# zJNot applicable: the value of reference sample is implementation dependent.Nr  r  s   &*r0   rr  TestLHS.test_sample       1 	2r3   strengthr
  Fr  Nr  c                   \         P                  P                  R 4      p^pV^,          p^p\        P                  ! WrVVVR7      pVP                  VR7      p	V	P
                  Wg38X  g   Q hVP                  V8X  g   Q h\         P                  ! V4      R,           V,          p
\         P                  ! WV34      P                  p\         P                  ! W8g  4      '       g   Q h\         P                  ! V	^ R7      pV'       d
   RV,          M^ p\        WVR7       \         P                  ! W,
          V8  4      '       g   Q hV^8X  d   Vf   \         P                  ! V4      p\        \        W4      4      p\        \!        VP"                  4      ^4       FU  w  ppV	RVV.3,          pVV,          P%                  \&        4      pV Uu0 uF  p\)        V4      kK  	  pp\+        VV4       KW  	  R# R# R# u upi )l	   pIrtS"Md@B )r   r
  r  r  r:   r  r   r   rS   Nr   )r(   r8   r9   r   r   r   r   arangebroadcast_toTanysortr   setr   r   r   r   r4  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   &&&&                  r0   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   G8c                    V P                  ^RR7      pVP                  ^@R7      pV P                  ^RRR7      pVP                  ^@R7      p\        W$4       R# )r"   FrZ  r  r  r  N)r#  r8   r   )r*   r#  r  r  r  s   &    r0   test_optimizer_1dTestLHS.test_optimizer_1d  sP    q51]]R](
;;U;M//B/':/r3   c                @   R p\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^^R7       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^^R7      pVP                  ^4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^^R7      pVP                  ^4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^^R7      pVP                  ^	4       RRR4       R#   + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)znot a valid strengthrD   )r  Nz%n is not the square of a prime number)r   r  zn is too small for d)rI   rJ   rK   r   r   r8   )r*   r  r#  s   &  r0   r+  TestLHS.test_raises  s   )]]:W55q1- 6 ;]]:W55''!a8FMM" 6 ;]]:W55''!a8FMM! 6 *]]:W55''!a8FMM! 65 655 65
 65
 655s/   E.*E&*E9*FE#	&E6	9F		F	r   )r   r   r   r   r   r   rM  rL  rw  r  rr  rI   r   r  r  r  r+  r   r   r   s   @r0   r  r    s     DL772 [[Z!Q0[[Z%7[[^dK-@A#/ B 8 1#/J0 r3   r  c                   J  a  ] tR tRt o ]P
                  tRt]P                  ! RR.RR.RR.RR.RR.RR.R	R
.R
R	..4      t
]P                  ! RR.RR.RR.RR.RR.RR.RR.RR..4      tR tR tR tR t]P"                  P%                  R^^.4      R  4       tR! tR"tV tR## )$	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                    \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! ^4      pVP                  ^
4       RRR4       R#   + '       g   i     R# ; i)'The balance properties of Sobol' pointsrD   N)rI   r   r   r   Sobolr8   r*   r#  s   & r0   test_warningTestSobol.test_warningA  sH    \\+ .> ? ?YYq\FMM"? ? ? ?s   (AA(	c                   \         P                  ! ^RR7      pVP                  ^4      p\        V P                  R,          V4       VP                  ^4      p\        V P                  R,          V4       \
        P                  ! \        RR7      ;_uu_ 4        VP                  ^4       RRR4       R#   + '       g   i     R# ; i)rH   Frp  :Nrg   N:rg   rh   Nr  rD   N)r   r  random_base2r   rU  rI   rJ   rK   r*   r#  r;   s   &  r0   test_random_base2TestSobol.test_random_base2G  s    1u-$$Q'4--b16: $$Q'4--c2F; ]]: .> ? ?"? ? ? ?s   B55C	c                   \         P                  ! \        R R7      ;_uu_ 4        \        P                  ! \        P                  P
                  ^,           4       RRR4       \         P                  ! \        RR7      ;_uu_ 4        \        P                  ! ^^AR7       RRR4       R#   + '       g   i     LW; i  + '       g   i     R# ; i)z Maximum supported dimensionalityrD   NzMaximum supported 'bits' is 64)bits)rI   rJ   rK   r   r  MAXDIMr  s   &r0   
test_raiseTestSobol.test_raiseU  s    ]]: .? @ @IIcii&&*+@ ]]: .= > >IIab!> >	@ @> > >s   6B*B=*B:	=C	c                f   \         P                  ! R RR7      p\        VP                  4       P	                  4       P                  4       4      p\        VP                  4       P	                  4       P                  4       4      p\        V\        RR /4      4       \        V\        RR /4      4       R# )iW  Frp  r   r   N)r   r  r   r8   flattentolistr   )r*   r#  count1count2s   &   r0   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2r3   r  c                @   \         P                  ! ^RVR7      p^V,          pVP                  V4      p\        V P                  RV V4       \
        P                  ! \        RR7      ;_uu_ 4        VP                  4        RRR4       R#   + '       g   i     R# ; i)rH   Fr
  r  Nzincreasing `bits`rD   )r   r  r8   r   rU  rI   rJ   rK   )r*   r  r#  nsr;   s   &&   r0   	test_bitsTestSobol.test_bitse  sm    1u48Wr"4--cr2F;]]:-@AAMMO BAAAs   1BB	c                    \         P                  ! ^R^@R7      pVP                  ^4      p\        V P                  V4       R# )rH   Fr  N)r   r  r8   r   rU  r  s   &  r0   test_64bitsTestSobol.test_64bitso  s2    1u26q!4--v6r3   r   N)r   r   r   r   r   r  rM  rL  r(   r)   rU  rT  r  r  r  r  rI   r   r  r  r  r   r   r   s   @r0   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, -7 7r3   r  c                     a  ] tR tRt o ]P
                  tRtR tR t	R t
R tR tR t]P                  P!                  R	. RO. RO.4      R
 4       t]P                  P!                  R. RO. RO.4      R 4       tR t]P                  P!                  R. RORR..4      ]P                  P!                  R	^^..4      R 4       4       tR tRtV tR# )TestPoissoniu  Fc                2    \         P                  ! R 4       R# )zToo costly in memory.Nr  r  s   &*r0   rm  TestPoisson.test_boundsy  s    +,r3   c                2    \         P                  ! R 4       R# )z"Not applicable: recursive process.Nr  r  s   &*r0   r  TestPoisson.test_fast_forward|  s    89r3   c                2    \         P                  ! R 4       R# r  r  r  s   &*r0   rr  TestPoisson.test_sample  r  r3   c                   R p^pV P                  ^VRR7      pVP                  VR7      p\        V4      V8:  g   Q h\        V4      V8  g   Q hVP                  VR7      p\        V4      V8:  g   Q h\        V4      V8  g   Q h\        P
                  ! WV.^ R7      p\        V4      V^,          8:  g   Q h\        V4      V8  g   Q hR# )皙?F)r   radiusr
  r  r   N)r#  r8   rq  l2_normr(   r  )r*   r  r  r  r#  sample_initsample_continuedr;   s   &*      r0   rw  TestPoisson.test_continuing  s     q%@mmbm);2%%%{#v---!==2=.#$***'(F222 ?aH6{b1f$$$v&(((r3   c                h   \         P                  P                  R 4      p^2pRRrCWC,
          VP                  ^4      ,          V,           p. ROpRR.p\        WeV4      pV FN  w  rpV P	                  WWR7      pVP                  V4      p\        V4      V8:  g   Q h\        V4      V
8  d   KN  Q h	  R# )l	   x_4vZ.c g{Gz?皙?volumesurface)r   r  hyperspherer:   N)r"   r%   rg   )r(   r8   r9   r   rM  rq  r  )r*   r:   r  r7  r8  radii
dimensionshypersphere_methodsgenr   r  r  r#  r;   s   &             r0   test_mindistTestPoisson.test_mindist  s    ii##$KL#Tszz!},s2
'3j)<=&)"A{YY  F ]]2&Fv;"$$$6?f,,, '*r3   c                t    R pV P                  ^VR7      pVP                  4       p\        V4      V8  g   Q hR# )r  )r   r  N)rM  
fill_spacer  )r*   r  r#  r;   s   &   r0   test_fill_spaceTestPoisson.test_fill_space  s9    Qv.""$v&(((r3   r   c                    R p. ROpV P                  ^W!VR7      pVP                  ^4      pV F  p\        Wc4       \        W4       K  	  R# )r  r   r  r   r   N)r%   r%   rH   rM  r8   r	   )r*   r   r  r   r#  r;   points   &&     r0   test_sample_inside_lower_bounds+TestPoisson.test_sample_inside_lower_bounds  sP    H  
 r"Ee.h. r3   r   c                    R p. ROpV P                  ^W#VR7      pVP                  ^4      pV F  p\        Wa4       \        W64       K  	  R# )r  r  N)r  r    r  )r*   r   r  r   r#  r;   r  s   &&     r0   test_sample_inside_upper_bounds+TestPoisson.test_sample_inside_upper_bounds  sP    H  
 r"Ee.h. r3   c           	         R p. ROp. ROp\         P                  ! \        RR7      ;_uu_ 4        V P                  ^WVR7       RRR4       R#   + '       g   i     R# ; i)r  z1Bounds are not consistent 'l_bounds' < 'u_bounds'rD   r  N)r%   rH   r"   r   r    r   rI   rJ   rK   rM  )r*   r  r   r   s   &   r0   test_inconsistent_bound_value)TestPoisson.test_inconsistent_bound_value  sW    ]]EG G II&hIOG G G Gs   AA	c           	         R p\         P                  ! \        RR7      ;_uu_ 4        V P                  ^VW!R7       RRR4       R#   + '       g   i     R# ; i)r  zP'l_bounds' and 'u_bounds' must be broadcastable and respect the sample dimensionrD   r  Nr"  )r*   r   r   r  s   &&& r0   test_inconsistent_bounds$TestPoisson.test_inconsistent_bounds  sR     ]]$% % IIF!  	% % % %r  c                    R p\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^RR7       RRR4       R#   + '       g   i     R# ; i)z*'toto' is not a valid hypersphere samplingrD   rv   )r  N)rI   rJ   rK   r   PoissonDiskr  s   & r0   r+  TestPoisson.test_raises  s5    ?]]:W55OOA62 6555s   A

A	r   Nr   r    r!  )r"   rH   r"   )r   r   r   r   r   r)  rM  rL  rm  r  rr  rw  r  r  rI   r   r  r  r  r#  r&  r+  r   r   r   s   @r0   r  r  u  s     ??DL-:2)&-*) [[Z,	)BC
/ D
/ [[Z,	)BC
/ D
/P [[Z,R)AB[[Z1a&2	 3 C	3 3r3   r  c                      a  ] tR tRt o R t]P                  P                  R4      R 4       tR t	R t
]P                  P                  R4      R 4       tRtV tR	# )
TestMultinomialQMCi  c           
        \         P                  ! . R
O4      p\        P                  ! \        RR7      ;_uu_ 4        \
        P                  ! V^
R7       RRR4       \         P                  ! . RO4      pRp\        P                  ! \        VR7      ;_uu_ 4        \
        P                  ! V^
R7       RRR4       \         P                  ! . RO4      pRp\        P                  ! \        VR7      ;_uu_ 4        \
        P                  ! V^
\
        P                  ! ^R7      R7       RRR4       R	p\        P                  ! \        VR7      ;_uu_ 4        \
        P                  ! V^
\         P                  P                  4       R7       RRR4       R#   + '       g   i     ELK; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)Q?z'Elements of pvals must be non-negative.rD   )n_trialsNz Elements of pvals must sum to 1.z Dimension of `engine` must be 1.r   )r/  r#  "`engine` must be an instance of...)r.  p=
ף?gffffff?)\(?)r.  r2  r   r3  r4  r.  r2  r  r3  r4  )
r(   r)   rI   rJ   rK   r   MultinomialQMCr  r8   r9   )r*   r  r  s   &  r0   test_validations#TestMultinomialQMC.test_validations  s4   HH45]]: .A B Bq2.B
 HH235]]:W55q2. 6 HH345]]:W55q2cii!nE 6 8]]:W55q2bii6K6K6MN 65#B B B 65 65 655s/   FF,;/F?6GF)	,F<	?G	G#	zignore::UserWarningc                @   \         P                  P                  R 4      p\         P                  ! . RO4      p^dp\         P                  ! W2,          4      P                  \        4      p\        P                  ! W#VR7      p\        VP                  ^4      V^R7       R# )l	   (u@gP{- )r/  rK  rS   Nr5  )
r(   r8   r9   r)   
atleast_2dr4  r  r   r6  r   )r*   r:   r  r/  r  r#  s   &     r0   test_MultinomialBasicDraw,TestMultinomialQMC.test_MultinomialBasicDraw  sm    ii##$IJHH34==.55c:##AsCa((;r3   c                B   \         P                  P                  R 4      p\         P                  ! . RO4      p\        P
                  ! VRVR7      pVP                  ^4      p\        V\         P                  ! V4      ,          \         P                  ! V4      RR7       R# )l	   8X7:ct]+C: i    )r/  r:   rR   rS   Nr5  )	r(   r8   r9   r)   r   r6  r   r   r:  )r*   r:   r  r#  drawss   &    r0   test_MultinomialDistribution/TestMultinomialQMC.test_MultinomialDistribution  sj    ii##$JKHH34##A#>a u-r}}Q/?dKr3   c                6   \         P                  ! . RO4      p\        V4      p\        \	        WR4      ^ 4       \        \	        WR4      ^4       \        \	        WR4      ^4       \        \	        WR4      ^4       \        \	        WR4      V^,
          4       R# )r   皙?rP   r   gaۢ?g7?N)r   rB  g?g333333?r   ?gGz?rP   )r(   r)   rq  r   r   )r*   p_cumulativer<  s   &  r0   test_FindIndex!TestMultinomialQMC.test_FindIndex  sy    xx KL< %l#>B%l#>B%l'BAF%l'BAF%l#>qIr3   c                t   \         P                  P                  R 4      p\         P                  ! . RO4      p^dp\         P                  ! W2,          4      P                  \        4      p\        P                  ! ^RVR7      p\        P                  ! W#VVR7      p\        VP                  ^4      V^R7       R# )l	   aFkq|'x< Tr	  )r/  r#  r:   rS   Nr5  )r(   r8   r9   r)   r:  r4  r  r   r  r6  r   )r*   r:   r  r/  r  base_enginer#  s   &      r0   test_other_engine$TestMultinomialQMC.test_other_engine  s     ii##$KLHH34==.55c:iiDc:##A(+-a((;r3   r   N)r   r   r   r   r7  rI   r   filterwarningsr;  r?  rE  rI  r   r   r   s   @r0   r,  r,    s_     O. [[ 56< 7<LJ [[ 56	< 7	<r3   r,  c                   J   a  ] tR tRt o R tR tR tR tR tR t	R t
R	tV tR
# )TestNormalQMCi(  c                   \         P                  ! \        P                  ! ^4      R7      pVP	                  4       p\        VP                  R4       VP	                  ^R7      p\        VP                  R4       \         P                  ! \        P                  ! ^4      R7      pVP	                  4       p\        VP                  R4       VP	                  ^R7      p\        VP                  R4       R# )r"   )r  r  Nr"   r"   r$   r"   rf  r$   rH   r   MultivariateNormalQMCr(   zerosr8   r   r   r*   r#  sampless   &  r0   test_NormalQMCTestNormalQMC.test_NormalQMC)  s    **<--/W]]F+--!-$W]]F+**<--/W]]F+--!-$W]]F+r3   c                   \         P                  ! \        P                  ! ^4      RR7      pVP	                  4       p\        VP                  R4       VP	                  ^R7      p\        VP                  R4       \         P                  ! \        P                  ! ^4      RR7      pVP	                  4       p\        VP                  R4       VP	                  ^R7      p\        VP                  R4       R# )	r"   T)r  inv_transformr  NrO  rP  rf  rQ  rR  rU  s   &  r0   test_NormalQMCInvTransform(TestNormalQMC.test_NormalQMCInvTransform7  s    **!D2--/W]]F+--!-$W]]F+**!D2--/W]]F+--!-$W]]F+r3   c                b   \         P                  P                  R 4      p\        P                  ! \         P
                  ! ^4      RVR7      pVP                  ^R7      p\         P                  ! RR.RR..4      p\        W4RR7       \         P                  P                  R 4      p\        P                  ! \         P
                  ! ^4      RVR7      pVP                  ^R7      p\         P                  ! . RO. RO.4      p\        W4RR7       \         P                  P                  R 4      p\        P                  ! ^RVR	7      p\        P                  ! \         P
                  ! ^4      RWQR
7      pVP                  ^R7      p\         P                  ! . RO. RO.4      p\        W4RR7       R# )l	   q)*syRM@
K F)r  rZ  rK  r  gxDg?rR   rS   r  rZ  r:   Tr	  )r  rZ  r#  r:   NLpɻgUy)r_  r`  gZ?)g#ڎrgΌ~42?gԻx?n)	r(   r8   r9   r   rS  rT  r)   r   r  )r*   r:   r#  rV  samples_expectedrH  s   &     r0   test_NormalQMCSeeded"TestNormalQMC.test_NormalQMCSeededG  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=r3   c                "   \         P                  P                  R 4      p\        P                  ! \         P
                  ! ^4      VRR7      pVP                  ^R7      p\         P                  ! R	R
.RR..4      p\        W4RR7       \         P                  P                  R 4      p\        P                  ! \         P
                  ! ^4      VRR7      pVP                  ^R7      p\         P                  ! . RO. RO.4      p\        W4RR7       R# )l	   9e)-%5Z%_6 T)r  r:   rZ  r  g+`?g]@"i?rR   rS   N<9\M)re  rf  g,D?)g˚X`?g7@gaTR')r(   r8   r9   r   rS  rT  r)   r   )r*   r:   r#  rV  ra  s   &    r0    test_NormalQMCSeededInvTransform.TestNormalQMC.test_NormalQMCSeededInvTransformg  s    ii##$KL**!#T;--!-$88i%;&.%9%; <= ii##$KL**!#T;--!-$88%E%B%D E=r3   c                    R Fp  p\         P                  ! VRR7      p\         P                  ! \        P                  ! V4      VRR7      pVP                  4       p\        VP                  ^V34       Kr  	  R# )r   FrZ  T)r  r#  rZ  Nr   r"   rH   )r   r  rS  r(   rT  r8   r   r   )r*   r   rH  r#  rV  s   &    r0   rI  TestNormalQMC.test_other_enginez  s\    A))a%8K..BHHQK6A=ACF mmoGA/ r3   c                   \         P                  P                  R 4      p\        P                  ! \         P
                  ! ^4      VR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      4      R8  4      '       g   Q h\        \         P                  ! VP                  ^ R7      ^,
          4      R8  4      '       g   Q hR	 F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR	,          4      R8  g   Q hR# )
i3  )r  r:      r  r   r  r   rC  Nr   r"   r(   r8   r9   r   rS  rT  rl  r   r  stdr   cov	transposer*   r:   r#  rV  r   rv  pvalrq  s   &       r0   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'''r3   c                   \         P                  P                  R 4      p\        P                  ! \         P
                  ! ^4      RVR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      4      R8  4      '       g   Q h\        \         P                  ! VP                  ^ R7      ^,
          4      R8  4      '       g   Q hR
 F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR
,          4      R8  g   Q hR	# )iTr^  rm  r  r   r  r   rC  Nrn  ro  rs  s   &       r0   !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'''r3   r   N)r   r   r   r   rW  r[  rb  rg  rI  ru  rx  r   r   r   s   @r0   rM  rM  (  s.     ,, >@>&0(( (r3   rM  c                   V   a  ] tR tRt o R tR tR tR tR tR t	R t
R	 tR
 tRtV tR# )TestMultivariateNormalQMCi  c           	        R p\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^ .\        P
                  ! ^R7      R7       RRR4       R p\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! . R	O\        P
                  ! ^R7      R7       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^ ^ .\        P                  P                  4       R7       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^ ^ .^^.^^..4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^ ^ .^^ .^^..4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        \        P                  ! ^ .^^ .^ ^..4       RRR4       R#   + '       g   i     EL; i  + '       g   i     ELu; i  + '       g   i     EL$; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)
z(Dimension of `engine` must be consistentrD   r0  )r#  Nr1  zCovariance matrix not PSD.z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.r!   )	rI   rJ   rK   r   rS  r  r(   r8   r9   r  s   & r0   r7  *TestMultivariateNormalQMC.test_validations  s   =]]:W55%%qc#))a.A 6 >]]:W55%%i		AG 6 8]]:W55%%q!fRYY5J5J5LM 6 0]]:W55%%q!f1v1v.>? 6 9]]:W55%%q!f1v1v.>? 6 E]]:W55%%qcQFQF+;< 65) 655 655 655 65 65 655sG   /H0H "7H4 I I#I.H	 H1	4I	I	I+	.I?	c                j    \         P                  ! . RO. RO. RO. RO.4      pVP                  f   Q hR# )r   Nr!   )r"   r   r"   )r   r"   r"   )r"   r"   rH   )r   rS  _corr_matrixr  s   & r0   test_MultivariateNormalQMCNonPD9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  s2    **	9i8
 ""...r3   c                   \         P                  ! ^ ^R7      pVP                  4       p\        VP                  R4       VP                  ^R7      p\        VP                  R4       \         P                  ! ^ ^.^^ .^ ^..R7      pVP                  4       p\        VP                  R4       VP                  ^R7      p\        VP                  R4       \
        P                  ! . RO4      p\
        P                  ! . R	O. R
O. RO.4      p\         P                  ! W44      pVP                  4       p\        VP                  R4       VP                  ^R7      p\        VP                  R4       R# )r   )r  rq  r  NrO  rP  rf  rQ  rj  r"   r   r   r   r"   r   r   r   r"   r"   r%   r$   r%   r   rS  r8   r   r   r(   r)   r*   r#  rV  r  rq  s   &    r0   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+r3   c                   \         P                  ! ^ ^RR7      pVP                  4       p\        VP                  R4       VP                  ^R7      p\        VP                  R4       \         P                  ! ^ ^.^^ .^ ^..RR7      pVP                  4       p\        VP                  R4       VP                  ^R7      p\        VP                  R	4       \
        P                  ! . R
O4      p\
        P                  ! . RO. RO. RO.4      p\         P                  ! W4RR7      pVP                  4       p\        VP                  R4       VP                  ^R7      p\        VP                  R4       R# )r   T)r  rq  rZ  r  )rZ  NrO  rP  rf  rQ  rj  r  r  r  r  r  r  r  s   &    r0   &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+r3   c                r   \         P                  P                  R 4      pVP                  R	4      pW"P	                  4       ,          \         P
                  ! VP                  ^4      4      ,           p\        P                  ! \         P                  ! ^ ^ .4      VRVR7      pVP                  ^R7      p\         P                  ! R
R.RR..4      p\        WVRR7       \         P                  P                  R 4      pVP                  R4      pW"P	                  4       ,          \         P
                  ! VP                  ^4      4      ,           p\        P                  ! \         P                  ! . RO4      VRVR7      pVP                  ^R7      p\         P                  ! . RO. RO.4      p\        WVRR7       R# )l	   b{1/YK $`F F)rZ  r:   r  gΧU?gK\ @rR   rS   NrH   rH   g X4g0<쿩r%   r%   r!   )gZh44gA->gZC)g~T~O?g*ʥo@gc}E?
r(   r8   r9   standard_normalrr  diagr   rS  r)   r   r*   r:   r<   Ar#  rV  ra  s   &      r0    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=r3   c                n   \         P                  P                  R 4      pVP                  R	4      pW"P	                  4       ,          \         P
                  ! VP                  ^4      4      ,           p\        P                  ! \         P                  ! ^ ^ .4      W1RR7      pVP                  ^R7      p\         P                  ! RR
.RR..4      p\        WVRR7       \         P                  P                  R 4      pVP                  R4      pW"P	                  4       ,          \         P
                  ! VP                  ^4      4      ,           p\        P                  ! \         P                  ! . RO4      W1RR7      pVP                  ^R7      p\         P                  ! . RO. RO.4      p\        WVRR7       R# )l	   A^}KT0zubN T)r:   rZ  r  gFX?gO=`?rR   rS   Nr  ggR4r  r!   )go.2?gikD0NgPN)g4YgҫJC?g-v2 @r  r  s   &      r0   ,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=r3   c                   \         P                  P                  R 4      p\        P                  ! ^ ^ .^^ .^ ^..VR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      4      R8  4      '       g   Q h\        \         P                  ! VP                  ^ R7      ^,
          4      R8  4      '       g   Q hR F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR,          4      R8  g   Q h\        P                  ! RR	.R
R.RR
..VR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      ^^.,
          4      R8  4      '       g   Q h\        \         P                  ! VP                  ^ R7      \         P                  ! R
4      ,
          4      R8  4      '       g   Q hR F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR,          R,
          4      R8  g   Q hR# )l   V^Am%2r  rq  r:   rm  r  r   r  r   rC  rP   rO   r&   r   Nrn  r(   r8   r9   r   rS  rl  r   r  rp  r   rq  rr  rm   rs  s   &       r0   !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&---r3   c                   \         P                  P                  R 4      p\        P                  ! ^ ^ .^^ .^ ^..VRR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      4      R8  4      '       g   Q h\        \         P                  ! VP                  ^ R7      ^,
          4      R8  4      '       g   Q hR F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR,          4      R8  g   Q h\        P                  ! R	R
.RR.RR..VRR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      ^^.,
          4      R8  4      '       g   Q h\        \         P                  ! VP                  ^ R7      \         P                  ! R4      ,
          4      R8  4      '       g   Q hR F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR,          R,
          4      R8  g   Q hR# )l	   A"l7D#maxbwcuC T)r  rq  r:   rZ  rm  r  r   r  r   rC  rP   rO   r&   r   Nrn  r  rs  s   &       r0   -test_MultivariateNormalQMCShapiroInvTransformGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformF  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&---r3   c                   \         P                  P                  R 4      p\        P                  ! . R
O. RO. RO. RO.VR7      pVP                  RR7      p\        \         P                  ! VP                  ^ R7      4      R8  4      '       g   Q h\         P                  ! \         P                  ! VR,          4      ^,
          4      R8  g   Q h\         P                  ! \         P                  ! VR,          4      ^,
          4      R8  g   Q h\         P                  ! \         P                  ! VR,          4      \         P                  ! ^4      ,
          4      R8  g   Q hR F"  p\        VRV3,          4      w  rVVR8  d   K"  Q h	  \         P                  ! VP                  4       4      p\         P                  ! VR,          4      R8  g   Q h\         P                  ! VR,          ^,
          4      R8  g   Q h\        \         P                  ! VR,          VR,          ,           VR,          ,
          4      R8  4      '       g   Q hR	# )l	   @jSm-\1:c# r  rk  r  r   r  r   g?r~  N)r   r   r   )rP   r   rP   )r   rP   rP   )rP   rP   rO   )r   r   )r   r"   )r   rH   rj  rn  rb  )r(   r8   r9   r   rS  rl  r   r  rp  rm   r   rq  rr  rs  s   &       r0   $test_MultivariateNormalQMCDegenerate>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegeneratei  s   ii##$JK**  /?C

 --#-&266',,A,./$67777vvbffWT]+a/04777vvbffWT]+a/04777vvbffWT]+bggaj89D@@@Agadm,GA#::  ffW&&()vvc$i 4'''vvc$i!m$t+++266'$-'$-7'$-GH   	 r3   r   N)r   r   r   r   r7  r  r  r  r  r  r  r  r  r   r   r   s   @r0   r{  r{    s9     =4/,0,4>.>2.@!.F r3   r{  c                   2   a  ] tR tRt o R tR tR tRtV tR# )	TestLloydi  c                .   \         P                  P                  R 4      pVP                  ^ ^RR7      p\	        V4      p\        V4      p\        ^4       F<  p\        V^R7      p\	        V4      p\        V4      pW78  g   Q hWH8  g   Q hTpTpTpK>  	  R# )i )r<  )maxiterN)   rH   )r(   r8   RandomStateuniformr   r  r   r   )	r*   r:   r;   base_l1base_l2rv  sample_lloydcurr_l1curr_l2s	   &        r0   
test_lloydTestLloyd.test_lloyd  s    ii##G,Q16"&/qAAAL |,Gl+G $$$$$$GG!F r3   c                    \         P                  ! RR.RR.RR.RR..4      pVP                  4       p\        VR7      p\	        W4       \         P
                  ! W4      '       d   Q hR# )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   &   r0   test_lloyd_non_mutating!TestLloyd.test_lloyd_non_mutating  ss    
 hhc
!$c
!$c
!$c
 , - "&&(;

 	1&&{?????r3   c                    \         P                  ! \        R R7      ;_uu_ 4        . ROp\        V4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        ^ .R.^..p\        V4       RRR4       Rp\         P                  ! \        VR7      ;_uu_ 4        R^ .RR.^^..p\        V4       RRR4       R#   + '       g   i     L; i  + '       g   i     Lj; i  + '       g   i     R# ; i)	z`sample` is not a 2D arrayrD   Nz`sample` dimension is not >= 2rB  z!`sample` is not in unit hypercuber   rG   g)rI   rJ   rK   r   )r*   r;   r*  s   &  r0   test_lloyd_errorsTestLloyd.test_lloyd_errors  s    ]]:-JKK F26: L 0]]:S11cC51#&F26: 2 3]]:S11Qi#saV4F26: 21 LK
 21
 211s#   C#C%C,C	C)	,C=	r   N)	r   r   r   r   r  r  r  r   r   r   s   @r0   r  r    s     ".@ ; ;r3   r  c                 J    \         P                  ! V 4      P                  4       # r~   )r
   pdistr5  r  s   &r0   r  r    s    >>&!%%''r3   r#  c                    R p\         P                  P                  V4      pV ! ^VR7      P                  ^4      p\         P                  P                  V4      pV ! ^VR7      P                  ^4      p\        W44       \         P                  P	                  V4      pV ! ^VR7      P                  ^4      pV ! ^VR7      P                  ^4      p\        W44       \         P                  P	                  V4      pV ! ^VR7      P                  ^4      p\        WC4       \        WS4       Rp\
        P                  ! \        VR7      ;_uu_ 4        V ! ^WR7       RRR4       R#   + '       g   i     R# ; i)l   7P )r   rK  r   z3got multiple values for argument now known as `rng`rD   )r   r:   rK  N)r(   r8   r  r   r9   rI   rJ   	TypeError)r#  seed_numberr:   res1res2res3r  s   &      r0   test_deterministicr    s    K
))


,CAC ''*D
))


,CAC ''*D
))


,CAC ''*DA;'..q1D
))


,CA3&&q)DCG	y	0	06 
1	0	0	0s   E##E4	)6r   collectionsr   	itertoolsr   r   rI   numpyr(   numpy.testingr   r   r   r	   scipy.spatialr
   scipy.statsr   scipy.stats._sobolr   r   scipy.stats._qmcr   r   r   r   r   r   r   r   r   r   r  r(  r+  r:  r=  r?  r  r  r  r  r,  rM  r{  r  r  r   r  r  r  r   r)  r  r   r3   r0   <module>r     s<   	  +    #  /   j% j%Z#' #'L3== &.2<D+ i/ i/X) )BRn RjH7 H7Vq3. q3h<< <<~v( v(r] ]@5; 5;r( CJJ		$'$6$6$I J7J7r3   