
    5[gu                        d dl Z d dlmZ d dlmZmZ d dlZd dlZd dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZmZmZ  G d
 d      Z G d d      Z G d dej2                        Zd Z d Z!d Z"d Z# G d d      Z$ G d de$      Z% G d de$      Z& G d de$      Z' G d de$      Z( G d d      Z) G d  d!      Z* G d" d#      Z+ G d$ d%      Z,d& Z-y)'    N)Counter)combinationsproduct)assert_allcloseassert_equalassert_array_equal)distance)shapiro)_test_find_index)qmc)van_der_corputn_primesprimes_from_2_toupdate_discrepancy	QMCEngine_l1_norm_perturb_discrepancy&_lloyd_centroidal_voronoi_tessellationc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  d	d
      d        Zd Zd Zd Zd Zd Zy)	TestUtilsc                    dgdgdgg}dgdgdgg}t        j                  |dd      }t        ||       ddgddgddgg}t        j                  ddgddgg      }ddgddgdd	gg}t        j                  ||d   |d         }t        ||       t        j                  ||d   |d   d
      }t        ||       g dg dg dg}dg d}}g dg dg dg}t        j                  |||      }t        ||       y )Nr            ?      l_boundsu_bounds         @Tr   r   reverser   r   r   )r   r   r   )r   r   r   )r   r       )r%   r!         ?)r   scaler   nparray)selfspaceoutscaled_spaceboundsscaled_back_spacer   r   s           U/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/stats/tests/test_qmc.py
test_scalezTestUtils.test_scale   s   qcC5!taS1#yya@c* Q!Q#s,B7QF+,AwAC)yyVAYOc*IIlVAY/5ay$H)51 I7	()]3yyHMc*    c                 2   t         j                  j                  d      }|j                  d      }|j                  d       dz  }|j                  d      dz  }t        j                  |||d      }t        j                  |||d      }t        ||       y )Nl	   EaT4G*wv    
   r6   F)r#   T)r(   randomdefault_rngr   r'   r   )r*   rngsampleabscaledunscaleds          r0   test_scale_randomzTestUtils.test_scale_random3   s}    ii##$KLH%ZZ^Ob JJrNR61a799VQ48&)r2   c                    t        j                  t        d      5  g d}t        j                  |dd       d d d        t        j                  t        d      5  ddgd	d	gd
d
gg}t        j                  ddgddgg      }t        j                  ||d   |d	          d d d        t        j                  t        d      5  ddgd	d	gd
d
gg}g dddg}}t        j                  |||       d d d        t        j                  t        d      5  ddgd	d	gd
d
gg}t        j                  g dg dg      }t        j                  ||d   |d	          d d d        t        j                  t        d      5  ddgd	dgd
d
gg}t        j                  ddgddgg      }t        j                  ||d   |d	          d d d        t        j                  t        d      5  ddgddgddgg}t        j                  ddgddgg      }t        j                  ||d   |d	   d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)NSample is not a 2D arraymatchr   r   r   r   r   r   zBounds are not consistentr   r   r   r    z/'l_bounds' and 'u_bounds' must be broadcastable)r   r   r   )r   r    r    Sample is not in unit hypercuber&   zSample is out of bounds   r!   Tr"   )pytestraises
ValueErrorr   r'   r(   r)   )r*   r+   r.   r   r   r,   s         r0   test_scale_errorszTestUtils.test_scale_errors<   sR   ]]:-HIEIIeb15 J ]]:-IJVaVc3Z0EXXAwA/0FIIefQi&)D K
 ]]: .G HVaVc3Z0E!+aVhHIIehB	H ]]: .G HVaVc3Z0EXXz956FIIefQi&)D	H ]]: .: ;VaXSz2EXXAwA/0FIIefQi&)D	; ]]:-GH7QFQH-CXXAwA/0FIIcF1Iq	"$ IH7 JI KJ
H HH H; ; IHsK   H2AH?,IAI;AI&#AI22H<?I	II#&I/2I;c           
      >   t        j                  ddgddgddgddgddgddgg      }d|z  dz
  d	z  }t        j                  ddgddgddgddgddgddgg      }d|z  dz
  d	z  }t        t        j                  |      d
d       t        t        j                  |      dd       t        j                  g dg dg dg dg dg dg dg      }d|z  dz
  dz  }t        t        j                  |d      dd       t        t        j                  |d      dd       t        t        j                  |d      dd       dD ]T  }t        j
                  d| z        }t        t        j                  t        j                  dg|z  g      d      |       V y )Nr   r%   r   r      r           @      ?      (@ǘ?-C6?atolg/$?r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r         @MDmethodr!   WDS?CD:M?r   rL   rF          @   L2-star)r(   r)   r   r   discrepancysqrt)r*   space_1space_2r:   dimrefs         r0   test_discrepancyzTestUtils.test_discrepancy^   s   ((QFQFQFQFQFQFKL=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 )r2   c           	         t        j                  ddgddgddgddgddgddgg      }t        j                  t        d      5  t        j                  |       d d d        t        j                  t        d	      5  t        j                  ddg       d d d        d
d
gddgddgg}t        j                  t        d      5  t        j                  |d       d d d        y # 1 sw Y   xY w# 1 sw Y   \xY w# 1 sw Y   y xY w)Nr   r%   r   r   rL   r    rE   rB   rA   r   r   'toto' is not a valid ...totor]   )r(   r)   rG   rH   rI   r   rh   r*   r:   s     r0   test_discrepancy_errorsz!TestUtils.test_discrepancy_errors   s    Aq6Aq6Aq6Aq6Aq6Aq6JK]]@
 OOF#

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

 JI KJs$   C#<C/C;#C,/C8;Dc           
      F   t        j                  g dg dg dg dg dg dg dg      }d|z  d	z
  d
z  }t        t        j                  |dd      dd       t        t        j                  |dd      dd       t        t        j                  |dd      dd       dD ]U  }t        j
                  d| z        }t        t        j                  t        j                  dg|z  g      dd      |       W |j                  t        dd        t        j                  t        d      5  t        j                  |d       d d d        t        j                  t        d      5  t        j                  |d        d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)!NrT   rU   rV   rW   rX   rY   rZ   rM   rN   r[   r\   rF   )r^   workersr!   rQ   rR   r_   r`   ra   rb   rc   r%   r   rg   	cpu_countc                       y N rz   r2   r0   <lambda>z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>   s    Tr2   zCannot determine therB   ru   zInvalid number of workers...r   )r(   r)   r   r   rh   ri   setattrosrG   rH   NotImplementedErrorrI   )r*   monkeypatchr:   rl   rm   s        r0   test_discrepancy_parallelz#TestUtils.test_discrepancy_parallel   s^   -------/ 0 ,$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   /F*FFF c           	         t        j                  ddgddgddgddgddgddgg      }t        j                  t        d      5  t        j                  |       d d d        t        j                  t        d	      5  t        j                  ddg       d d d        d
d
gddgddgg}t        j                  t        d      5  t        j                  |d       d d d        t        j                  d
d
gd
d
gd
dgg      }t        j                  t        d      5  t        j                  |       d d d        t        j                  ddgg      }t        j                  t        d      5  t        j                  |       d d d        y # 1 sw Y   4xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r%   r   r   rL   r    rE   rB   rA   r   r   rp   rq   r]   z!Sample contains duplicate points.z'Sample must contain at least two points)	r(   r)   rG   rH   rI   r   geometric_discrepancywarnsUserWarningrr   s     r0   !test_geometric_discrepancy_errorsz+TestUtils.test_geometric_discrepancy_errors   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%F1,F=FF"%F.1F:=Gc                 f   t        j                  ddgddgg      }t        t        j                  |      t        j
                  d             t        t        j                  |d      t        j
                  d             t        j                  ddgddgddgg      }t        t        j                  |      d       t        t        j                  |d      d       t        j                  ddgddgddgg      }t        t        j                  |      t        j
                  d      d	z         t        t        j                  |d      t        j
                  d      dz         t        t        j                  |d
      d       t        t        j                  |dd
      d       t         j                  j                  d      }t        j                  d|      j                  d      }t        t        j                  |      d       t        t        j                  |d      d       y )Nr   r   r   mstr]   r         ?      ?rL   	chebyshev)metric)r^   r   l	   s;80riR$ r%   )dseed2   gY$?guڗ8?)	r(   r)   r   r   r   ri   r7   r8   LatinHypercube)r*   r:   r9   s      r0   test_geometric_discrepancyz$TestUtils.test_geometric_discrepancy   s   Aq6Aq6*+1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##ac299"=11&9;NO%%fU;=P	
r2   z5minimum_spanning_tree ignores zero distances (#18892)T)reasonstrictc                     t        j                  ddgddgddgg      }t        t        j                  |d      d       y )Nr   r   r   r]   r   )r(   r)   r   r   r   rr   s     r0   2test_geometric_discrepancy_mst_with_zero_distancesz<TestUtils.test_geometric_discrepancy_mst_with_zero_distances   s<    
 Aq6Aq6Aq62311&GMr2   c           	         t        j                  ddgddgddgddgddgddgg      }d|z  dz
  d	z  }t        j                  |d d
 d      }t	        |d
   |d d
 |      }t        |dd       t         j                  j                  d      }|j                  d      }t        j                  |      }t        j                  |d d
 d      }t	        |d
   |d d
 |      }t        ||d       t        j                  t        d      5  t	        |d
   |d d
 dz   |       d d d        t        j                  t        d      5  t	        |d
   |d   |       d d d        ddg}t        j                  t        d      5  t	        ||d d
 |       d d d        ddgg}t        j                  t        d      5  t	        ||d d
 |       d d d        g d}t        j                  t        d      5  t	        ||d d
 |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   y xY w)Nr   r%   r   r   rL   r    rM   rN   rO   rv   T)	iterativerP   rQ   rR   l	   gy,!uUxFYo9"] )rL   r6   rE   rB   rA   r   zx_new is not in unit hypercuber   zx_new is not a 1D array)g333333?皙?r   z&x_new and sample must be broadcastable)r(   r)   r   rh   r   r   r7   r8   rG   rH   rI   )r*   rj   	disc_init	disc_iterr9   disc_refx_news          r0   test_update_discrepancyz!TestUtils.test_update_discrepancy   s#   ((QFQFQFQFQFQFKL=3&95OOGCRLDA	&wr{GCRL)L		65 ii##$KL**W%??7+OOGCRLDA	&wr{GCRL)L		8$7 ]]: .: ;wr{GCRL1,<iH; ]]:-HIwr{GAJ	B J A]]: .: ;ugcrlI>; s]]:-GHugcrlI> I ]]: .> ?ugcrlI>? ?#; ; JI; ;
 IH? ?s<   	H	H>H!7H-/H9	HH!H*-H69Ic                    t         j                  j                  d      }t        j                  d|      }|j                  d      }t        j
                  |      }t        d      D ]~  }|j                  d      }|j                  d      }|j                  d      }t        |||||      }|||f   |||f   c|||f<   |||f<   t        j
                  |      }	t        ||	        y )Nl	   PvWuW=lWx" r    r   r6   d   )
r(   r7   r8   r   r   rh   rangeintegersr   r   )
r*   r9   qmc_genr:   discirow_1row_2coldisc_references
             r0   test_perm_discrepancyzTestUtils.test_perm_discrepancy  s    ii##$JK$$QS1#v&sALL$ELL$E,,q/C'uc4HDucz"F5#:$6 3F5#:ucz 2 __V4ND.1 r2   c                    d }d }d }d }t         j                  j                  d      }|j                  d      }t        j                  |d      } ||      }t        ||       t        j                  |d	      } ||      }t        ||       t        j                  |d
      } ||      }t        ||       t        j                  |d      } ||      }t        ||       y)z,Alternative definitions from Matt Haberland.c                 x   | j                   \  }}| }t        j                  t        j                  ddt        j                  |dz
        z  z   dt        j                  |dz
        dz  z  z
  d            }| d d d d d f   }| d d d d d f   }t        j                  t        j                  t        j                  ddt        j                  |dz
        z  z   dt        j                  |dz
        z  z   dt        j                  ||z
        z  z
  d      d            }d|z  d|z  |z  z
  d|dz  z  |z  z   S )Nr   r   r   axisr   gUUUUUU?shaper(   sumprodabsxnsxijdisc1xkjdisc2s          r0   disc_c2zFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_c2(  s;   77DAqCFF277A&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE D!QJ-CAtQJ-CFF266"''!,/sSy0A,A+B,/sSy0A,A+B -0sSy0A,A+B IJ#K ()	* +E
 A:!e+a1fUl::r2   c                 \   | j                   \  }}| d d d d d f   }| d d d d d f   }t        j                  t        j                  t        j                  dt        j                  ||z
        z
  t        j                  ||z
        dz  z   d      d            }d|z   d|dz  z  |z  z   S )Nr&   r   r   r   gUUUUUU?r   r   )r   r   r   r   r   r   s         r0   disc_wdzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wd7  s    77DAqD!QJ-CAtQJ-C66"&&+-66#)+<*=+-66#)+<a+?*@FG"I '() *D 1H9qAv},,r2   c                    | j                   \  }}| }t        j                  t        j                  ddt        j                  |dz
        z  z
  dt        j                  |dz
        dz  z  z
  d            }| d d d d d f   }| d d d d d f   }t        j                  t        j                  t        j                  ddt        j                  |dz
        z  z
  dt        j                  |dz
        z  z
  dt        j                  ||z
        z  z
  dt        j                  ||z
        dz  z  z   d      d	            }d
|z  d|z  |z  z
  d|dz  z  |z  z   S )Ng?r   r   r   r   r   g      ?r   r   gUUUUUU?r   r   s          r0   disc_mdzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdA  sZ   77DAqCFF277C&)"&&S/&9%:&)"&&S/1*<&<%=DEG HE D!QJ-CAtQJ-CFF266"''$,/sSy0A,A+B,/sSy0A,A+B -0sSy0A,A+B -0sSy0A10D,D	+E
 01#2
 9:; <E A:!e+a1fUl::r2   c                    | j                   \  }}t        j                  d| z  dd|z
  z  |z  t        j                  t        j                  d| dz  z
  d            z  z
  t        j                  t        |      D cg c]L  }t        |      D ]<  }t        j                  dt        j                  | |d d f   | |d d f         z
        > N c}}      |dz  z  z         S c c}}w )Nr%   r   r   r   )r   r(   ri   r   r   r   maximum)r   r   r   kjs        r0   disc_star_l2zKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2Q  s    77DAq77qb	A!a%L1,&&Q!V!456 6&&"1X%uQx! GGA

1QT7AadG <<=/7 >%  !V s   >AC#l	   j;<Q`siyX r4   ra   r]   r_   r\   rg   N)r(   r7   r8   r   rh   r   )	r*   r   r   r   r   r9   r:   	disc_currdisc_alts	            r0   +test_discrepancy_alternative_implementationz5TestUtils.test_discrepancy_alternative_implementation%  s    	;	-	; 		 ii##$KLH%OOF48	6?	8,OOF48	6?	8,OOF48	6?	8,OOF9=	'	8,r2   c                     t        d      }|d   dk(  sJ t        d      }|d   dk(  sJ t        d      }|d   dk(  sJ y )Nr6   rv         i  i^  i5	  )r   )r*   primess     r0   test_n_primeszTestUtils.test_n_primeso  sS    "bzR#bzS   #bzT!!!r2   c                 :    t        d      }g d}t        ||       y )Nr   )r   r%   r                      r      %   )   +   /   )r   r   )r*   r   r,   s      r0   test_primeszTestUtils.test_primesy  s    !"%F$r2   N)__name__
__module____qualname__r1   r?   rJ   rn   rs   r   r   r   rG   markxfailr   r   r   r   r   r   rz   r2   r0   r   r      sz    +<* $D#DJ3!0F.*
0 [[J  N	N(?T2"H-T"%r2   r   c                       e Zd Zd Zd Zd Zy)TestVDCc                     t        d      }g d}t        ||       t        dd      }t        ||       t        dd      }t        ||       t        dd      }t        ||dd         y )	Nr6   )
        r   r   r         ?      ?      ?      ?g      ?g      ?rL   r|   rF   r   r%   )start_indexr   r   )r*   r:   r,   s      r0   test_van_der_corputzTestVDC.test_van_der_corput  se    #-$A.$A.$q1AB(r2   c                     d}t        dd|      }t        ddd|      }t        ||dd         t        ddd|d	      }t        ||dd         t        ddd|d
	      }t        ||dd         y )Nl	   	XCf
Kl<{O8 r6   Tscrambler   r   r%   )r   r   r   rL   )r   r   r   ru   rF   r   )r*   r   r,   r:   s       r0   test_van_der_corput_scramblez$TestVDC.test_van_der_corput_scramble  s    6R$T:q4dKAB(1t$
 	AB(1t$
 	AB(r2   c                 ~    t        j                  t        d      5  t        dd       d d d        y # 1 sw Y   y xY w)Nz'base' must be at least 2rB   r6   r   )base)rG   rH   rI   r   r*   s    r0   test_invalid_base_errorzTestVDC.test_invalid_base_error  s(    ]]:-IJ2A& KJJs   3<N)r   r   r   r   r   r   rz   r2   r0   r   r     s    ))"'r2   r   c                   .     e Zd Zd fd	ZddddZ xZS )RandomEnginec                 *    t         |   |||       y )N)r   optimizationr   )super__init__)r*   r   r   r   	__class__s       r0   r   zRandomEngine.__init__  s    1<dCr2   r   r|   c                T    | j                   j                  || j                  f      }|S ry   )r9   r7   r   )r*   r   ru   r:   s       r0   _randomzRandomEngine._random  s!    !TVV-r2   )NN)r   )r   r   r   r   r   __classcell__)r   s   @r0   r   r     s    Da  r2   r   c                     t        dd      } | j                  d      }| j                  d      }| j                  dk(  sJ | j                          | j                  dk(  sJ | j                  d      }t	        ||       | j                          | j                  d       | j                  d      }t	        ||       | j                  dk(  sJ y )	Nr   l	   F,@IY^+Ge r   r    r   r      r   )r   r7   num_generatedresetr   fast_forward)enginesample_1sample_2sample_1_testsample_2_tests        r0   test_subclassing_QMCEnginer    s    !"IJF}}q}!H}}q}!H2%%% LLN1$$$MMAM&M=) LLN
!MMAM&M=)2%%%r2   c                     t        j                  t        d      5  t        d       d d d        t        j                  t        d      5  t        d       d d d        d} t        j                  t        |       5  t        d      }|j	                  dd       d d d        y # 1 sw Y   }xY w# 1 sw Y   ZxY w# 1 sw Y   y xY w)	Nz d must be a non-negative integerrB   )r   rv   z*'u_bounds' and 'l_bounds' must be integersr   g?r   )rG   rH   rI   r   r   )msgr  s     r0   test_raisesr    s    	z)L	MT 
N 
z)L	MR 
N 8C	z	-aS1 
.	- 
N	M 
N	M 
.	-s#   B$B0<B<$B-0B9<Cc                  f   t        dd      } | j                  dd      }t        t        j                  |      dg       |j
                  t        j
                  d      k(  sJ | j                  ddd	      }t        t        j                  |      ddg       d
}d}| j                          | j                  d      }|||z
  z  |z   }t        j                  |      j                  t        j                        }| j                          | j                  ||dd      }t        ||       | j                  ||dd      }t        |j                         |j                         f||dz
  f       | j                  ||dd      }t        |j                         |j                         f||f       y )Nr   l	   llG[/Ww r   r6   r   r   int64T)r   endpointr      Fr   r   r  r   )r   r   r   r(   uniquedtyper  r7   floorastyper  minmax)r  r:   lowhigh
ref_samples        r0   test_integersr    sj   !"IJF __Q"_%F6"QC(<<288G,,,,__Q"t_4F6"QF+
CD LLNr"Jtcz*S0J*%,,RXX6J
LLN__S42_FF$ __S43_GF&**,

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

-T{;r2   c                     d} t         j                  j                  d      }|j                  dd|       }|j                  dd| d	      }t	        | |
      }|j                  ||dd      }t        |j                  d      |       t        |j                  d      |dz
         |j                  ||dd      }t        |j                  d      |       t        |j                  d      |       y )Nr6   l	   G]	#0m$ave r  rv   )r  r  sizer   r    T)r  r  r  r  r   r   Fr  r   r   )r(   r7   r8   r   r   r   r  r  )r   r9   r  r  r  r:   s         r0   test_integers_ndr    s    
A
))

 E
FC
,,2BQ,
/C<<AAA<=D!#&F__S43_GF#S)#T!V,__S43_FF#S)#T*r2   c                      e Zd ZdZeZeZeZeZddgZ	ddgZ
	 ddedefd	Zdedej                  fd
Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      d        Zej$                  j'                  de	e
      ej$                  j'                  ddej4                  j7                  d      df      d               Zej$                  j'                  de	e
      d        Zej$                  j'                  ddg      d        Zd Zej$                  j'                  dde jB                  fdd fg      d        Z"d Z#y)QMCEngineTestszGeneric tests for QMC engines.TF	ScrambledUnscrambled	   \v$PdvuL2+C r   returnc                     | j                   r | j                  d||d|S |rt        j                          y  | j                  dd|i|S )Nr   r   rz   )can_scrambleqmcerG   skip)r*   r   r   kwargss       r0   r  zQMCEngineTests.engine  sM    
 499DhTDVDD tyy5d5f55r2   c                 6    |r| j                   S | j                  S ry   )scramble_ndunscramble_nd)r*   r   s     r0   	referencezQMCEngineTests.reference  s    #+tC1C1CCr2   )idsc                     | j                  d|      }|j                  d      }t        t        j                  d      |       y )Nr   r   r   rL   )rL   r   r  r7   r   r(   emptyr*   r   r  r:   s       r0   	test_0dimzQMCEngineTests.test_0dim  5    q84q!288F+V4r2   c                     | j                  d|      }|j                  d      }t        t        j                  d      |       y )Nr   r0  r   r   r   r1  r3  s       r0   test_0samplezQMCEngineTests.test_0sample%  r5  r2   c                 n    | j                  d|      }|j                  d      }d|j                  k(  sJ y )Nr   r0  r   r   r   )r  r7   r   r3  s       r0   test_1samplezQMCEngineTests.test_1sample+  s4    q84q!%%%r2   c                     | j                  d|      }|j                  d      }t        j                  |dk\        sJ t        j                  |dk        sJ y )Nr   r0     r   r   )r  r7   r(   allr3  s       r0   test_boundszQMCEngineTests.test_bounds1  sN    sX6s#vvfk"""vvfk"""r2   c                     | j                  |      }| j                  d|      }|j                  t        |            }t	        ||d       |j
                  t        |      k(  sJ y )Nr   r   r0  r   r   rR   )r-  r  r7   lenr   r   )r*   r   r  r  r:   s        r0   test_samplezQMCEngineTests.test_sample8  s\    ^^X^6
q84Z1
6##s:666r2   c                     | j                  d|      }|j                  d      }| j                  d|      }t        |      dz  }|j                  |      }|j                  |      }t        |||d  d       y )Nr   r0  rF   r   r   rR   )r  r7   rB  r   )r*   r   r  r  n_half_r:   s          r0   test_continuingzQMCEngineTests.test_continuingA  sw    q84]]Q]'
q84ZA%MMFM#(
67 3$?r2   r   Nc                     | j                  d||      }|j                  d      }|j                          |j                  dk(  sJ |j                  d      }t	        ||       y )Nr   r   r   r   rF   r   r   )r  r7   r  r   r   )r*   r   r   r  r  r:   s         r0   
test_resetzQMCEngineTests.test_resetN  s_     q8$?]]Q]'
##q(((#
+r2   c                 $   | j                  d|      }|j                  d      }| j                  d|      }|j                  d       |j                  d      }t        ||dd  d       |j	                          g }t        d      D ];  }|dz  dk(  r |j                  |j                                +|j                  d	       = t        |t        d      D cg c]  }|dz  dk(  s| c}   t        j                  |      d
       y c c}w )Nr   r0  rF   r   rL   r   rR   r   r   h㈵>)	r  r7   r  r   r  r   appendr(   concatenate)r*   r   r  r  r:   
even_drawsr   s          r0   test_fast_forwardz QMCEngineTests.test_fast_forwarda  s    q84]]Q]'
q84A#
12T: 	
qA1uz!!&--/2##A&	 
 	58:8aq1uz8:;NN:&	
:s   D
)D
c                    d}| j                  ||      }|j                  d      }t        t        j                  |d      t        j
                  d|      d       t        t        j                  |d	d      t        j
                  d
|      d       t        t        j                  |dd      t        j
                  d|      d       y )Nr   r0  i   r   r   r   {Gz?rR      r   K   r   )r  r7   r   r(   meanrepeat
percentile)r*   r   r   r  r:   s        r0   test_distributionz QMCEngineTests.test_distribution{  s    q84t$GGF#RYYsA%6T	
 	MM&"1-ryyq/A	
 	MM&"1-ryyq/A	
r2   c                     d}t        j                  t        |      5  | j                  ddd       d d d        y # 1 sw Y   y xY w)Nz)'toto' is not a valid optimization methodrB   r   Frq   r   r   r   )rG   rH   rI   r  r*   messages     r0   test_raises_optimizerz$QMCEngineTests.test_raises_optimizer  s3    >]]:W5KK!e&KA 655s	   <Azoptimization,metric	random-CDlloydc                     t        |        S ry   )r   r:   s    r0   r{   zQMCEngineTests.<lambda>  s    hv&6%6r2   c                     | j                  dd      }|j                  d      } ||      }| j                  dd|      }|j                  d      } ||      }||k  sJ y )Nr   Fr0  rf   r   rZ  )r  r7   )	r*   r   r   r  
sample_ref
metric_refoptimal_sample_metric_s	            r0   test_optimizerszQMCEngineTests.test_optimizers  sk     q51]]R](
J'
;;U;N//B/'/###r2   c                    t         j                  j                  d      }g }t        d      D ]6  }| j	                  dd|      }|j                  |j                  d             8 t        j                  t        d      5  t        |d	   |d
          d d d        t        j                  t        d      5  t        |d	   |d          d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nl	   B"V6DGlUN r%   r   TrI  rL   zArrays are not equalrB   r   r   )
r(   r7   r8   r   r  rM  rG   rH   AssertionErrorr   )r*   r9   r:   r   r  s        r0   test_consume_prng_statez&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7CCC()r#  )$r   r   r   __doc__NotImplementedr'  r&  r,  r+  r   r.  boolr   r  r(   ndarrayr-  rG   r   parametrizer4  r8  r;  r?  rC  rG  r7   r8   rJ  rP  rX  r]  r   rh   rh  rk  rz   r2   r0   r   r     s^   (D!L"M Ke}H
&C 566 
	6D$ D2:: D [[Zs;5 <5
 [[Zs;5 <5
 [[Zs;& <&
 [[Zs;# <# [[Zs;7 <7 [[Zs;
@ <
@ [[Zs;[[3II!!"IJ	
, <, [[Zs;
 <
2 [[Z$0
 1
B
 [[#//*67	9	$	$
/r2   r   c                       e Zd Zej                  ZdZ ej                  ddgddgddgddgd	d
gddgddgddgg      Z	 ej                  ddgddgddgddgddgddgddgdd gg      Z
d! Zy")#
TestHaltonTr   r   gUUUUUU?r   gUUUUUU?r   gqq?r   gqq?r   g98?r   gqq?r   grq?g{'?gؖd?gz'd?gG?g{'?gk97?g oO(?goS?g{'?ggrY?gAP?gR?g{'?gyr?g oO(?g͟E?c                 B   | j                  d      }| j                  dd      }|j                  t        |      d      }t	        ||d       |j                          |j                  d	      }|j                          |j                  d	d
      }t        ||       y )NTrA  r   r0  rF   )r   ru   gMbP?rR   r6   r|   )r-  r  r7   rB  r   r  r   r   )r*   r  r  r:   s       r0   test_workerszTestHalton.test_workers  s    ^^T^2
q40Z!<
6 	__R(
Q/VZ(r2   N)r   r   r   r   Haltonr'  r&  r(   r)   r,  r+  rt  rz   r2   r0   rr  rr    s    ::DLBHHq!fuen$enuen$enuen$enuen> ?M
 "((Z4'4'4'4'4'4'4'46 7K)r2   rr  c                      e Zd Zej                  ZdZd Zd Zd Z	e
j                  j                  dddg      e
j                  j                  dd	dg      e
j                  j                  d
ddg      d                      Zd Zd Zy)TestLHSTc                 .    t        j                  d       y NzNot applicable: not a sequence.rG   r(  r*   argss     r0   rG  zTestLHS.test_continuing      56r2   c                 .    t        j                  d       y ry  rz  r{  s     r0   rP  zTestLHS.test_fast_forward  r}  r2   c                 .    t        j                  d       y NzJNot applicable: the value of reference sample is implementation dependent.rz  r{  s     r0   rC  zTestLHS.test_sample       1 	2r2   strengthr   r   r   Fr   Nr^  c                    t         j                  j                  d      }d}|dz  }d}t        j                  |||||      }|j                  |      }	|	j
                  ||fk(  sJ |j                  |k(  sJ t        j                  |      dz   |z  }
t        j                  |
||f      j                  }t        j                  |	|k7        sJ t        j                  |	d	      }|rd|z  nd}t        |||
       t        j                  |	|z
  |kD        sJ |dk(  r|t        j                  |      }t        t        ||            }t        t!        |j"                        d      D ]L  \  }}|	d d ||gf   }||z  j%                  t&              }|D ch c]  }t)        |       }}t+        ||       N y y y c c}w )Nl	   pIrtS"Md@B r    r   r   )r   r   r  r   r   r   r   r   r   rR   )r(   r7   r8   r   r   r   r   arangebroadcast_toTanysortr   setr   r   r   r   r  inttupler   )r*   r   r   r  r   pr   r   r  r:   
expected1dexpectedsorted_sampletolunique_elementsdesiredr   r   
samples_2dresrowres_sets                         r0   test_sample_stratifiedzTestLHS.test_sample_stratified  s    yy$$%KLqD##a(-51=)-/ #||1v%%%##q(((
 iilS(A-
??:1v688vvf()))Q/!cAgqxc:vvfx'#-...q=\1 iilO'/?CDG$U688_a81#A1vI.
!A~--c2145#5:5Wg.	 9	 2= 6s   F=c                     | j                  dd      }|j                  d      }| j                  ddd      }|j                  d      }t        ||       y )Nr   Fr0  rf   r   r^  rZ  )r  r7   r   )r*   r  rc  re  rf  s        r0   test_optimizer_1dzTestLHS.test_optimizer_1d  sR    q51]]R](
;;U;M//B/':w/r2   c                    d}t        j                  t        |      5  t        j                  dd       d d d        d}t        j                  t        |      5  t        j                  dd      }|j                  d	       d d d        d}t        j                  t        |      5  t        j                  dd      }|j                  d
       d d d        d}t        j                  t        |      5  t        j                  d
d      }|j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   pxY w# 1 sw Y   y xY w)Nznot a valid strengthrB   r   r%   )r  z%n is not the square of a prime numberr   )r   r  rd   r    zn is too small for d	   )rG   rH   rI   r   r   r7   )r*   r\  r  s      r0   r  zTestLHS.test_raises  s    )]]:W5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))D5))E7)E)D25D>E
E)r   r   r   r   r   r'  r&  rG  rP  rC  rG   r   rp  r  r  r  rz   r2   r0   rw  rw    s    DL772 [[Z!Q0[[Z%7[[^dK-@A#/ B 8 1#/J0r2   rw  c                   6   e Zd Zej                  ZdZ ej                  ddgddgddgddgddgddgdd	gd	dgg      Z	 ej                  d
dgddgddgddgddgddgddgddgg      Z
d Zd Zd Zd Zej                   j#                  ddd g      d!        Zd" Zy#)$	TestSobolTr   r   r   r   r   r   r   r   ga6?gtAAz?g`?g_k m?gsAdn?grIâ?gqL?g|?g+&C?g#*H;?g&fb_?g]bnQ?gvD2(?gt|!?g$\?g4>z@?c                     t        j                  t        d      5  t        j                  d      }|j                  d       d d d        y # 1 sw Y   y xY w)N'The balance properties of Sobol' pointsrB   r   r6   )rG   r   r   r   Sobolr7   r*   r  s     r0   test_warningzTestSobol.test_warning:  s>    \\+ .> ?YYq\FMM"? ? ?s   'AAc                 \   t        j                  dd      }|j                  d      }t        | j                  d d |       |j                  d      }t        | j                  dd |       t        j                  t        d      5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   FrA  rL   rF   r  rB   )r   r  random_base2r   r,  rG   rH   rI   r*   r  r:   s      r0   test_random_base2zTestSobol.test_random_base2@  s    1u-$$Q'4--bq16: $$Q'4--a2F; ]]: .> ?"? ? ?s   B""B+c                 R   t        j                  t        d      5  t        j                  t        j                  j
                  dz          d d d        t        j                  t        d      5  t        j                  dd       d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)Nz Maximum supported dimensionalityrB   r   zMaximum supported 'bits' is 64A   )bits)rG   rH   rI   r   r  MAXDIMr   s    r0   
test_raisezTestSobol.test_raiseN  s|    ]]: .? @IIcii&&*+@ ]]: .= >IIab!> >	@ @> >s   1B0BBB&c                 b   t        j                  dd      }t        |j                         j	                         j                               }t        |j                         j	                         j                               }t        |t        ddi             t        |t        ddi             y )NiW  FrA  r   r   )r   r  r   r7   flattentolistr   )r*   r  count1count2s       r0   test_high_dimzTestSobol.test_high_dimW  s|    4%000299;<00299;<VWc4[12VWc4[12r2   r  r   r%   c                    t        j                  dd|      }d|z  }|j                  |      }t        | j                  d | |       t        j                  t        d      5  |j                          d d d        y # 1 sw Y   y xY w)Nr   Fr   r  zincreasing `bits`rB   )r   r  r7   r   r,  rG   rH   rI   )r*   r  r  nsr:   s        r0   	test_bitszTestSobol.test_bits^  sg    1u48Wr"4--cr2F;]]:-@AMMO BAAs   #A==Bc                     t        j                  ddd      }|j                  d      }t        | j                  |       y )Nr   Frf   r  rF   )r   r  r7   r   r,  r  s      r0   test_64bitszTestSobol.test_64bitsh  s2    1u26q!4--v6r2   N)r   r   r   r   r  r'  r&  r(   r)   r,  r+  r  r  r  r  rG   r   rp  r  r  rz   r2   r0   r  r  #  s    99DLBHHr2h"Cj#Tl#Tl$en$en$en$en. /M "((Z4&	2'4'4'4'4'4'46 7K#"3 [[VaV, -7r2   r  c                   R    e Zd Zej                  ZdZd Zd Zd Z	d Z
d Zd Zd Zy	)
TestPoissonFc                 .    t        j                  d       y )NzToo costly in memory.rz  r{  s     r0   r?  zTestPoisson.test_boundsr  s    +,r2   c                 .    t        j                  d       y )Nz"Not applicable: recursive process.rz  r{  s     r0   rP  zTestPoisson.test_fast_forwardu  s    89r2   c                 .    t        j                  d       y r  rz  r{  s     r0   rC  zTestPoisson.test_samplex  r  r2   c                 t   d}d}| j                  d|d      }|j                  |      }t        |      |k  sJ t        |      |k\  sJ |j                  |      }t        |      |k  sJ t        |      |k\  sJ t	        j
                  ||gd      }t        |      |dz  k  sJ t        |      |k\  sJ y )	N皙?r   r   F)r   radiusr   r   r   r   )r  r7   rB  l2_normr(   rN  )r*   r|  r  r  r  sample_initsample_continuedr:   s           r0   rG  zTestPoisson.test_continuing|  s     q%@mmbm);2%%%{#v---!==2=.#$***'(F222.> ?aH6{b1f$$$v&(((r2   c                 P   t         j                  j                  d      }d}d\  }}||z
  |j                  d      z  |z   }g d}ddg}t        |||      }|D ]L  \  }	}
}| j	                  |	|
||      }|j                  |      }t        |      |k  sJ t        |      |
k\  rLJ  y )	Nl	   x_4vZ.c r   )g{Gz?皙?r    )r   r%   rL   volumesurface)r   r  hyperspherer   )r(   r7   r8   r   r'  rB  r  )r*   r9   r  r  r  radii
dimensionshypersphere_methodsgenr   r  r  r  r:   s                 r0   test_mindistzTestPoisson.test_mindist  s    ii##$KL	Tszz!},s2
'3j%)<=&)"Av{YYF#  F ]]2&Fv;"$$$6?f,,, '*r2   c                 n    d}| j                  d|      }|j                         }t        |      |k\  sJ y )Nr  r   )r   r  )r'  
fill_spacer  )r*   r  r  r:   s       r0   test_fill_spacezTestPoisson.test_fill_space  s9    Qv.""$v&(((r2   c                     d}t        j                  t        |      5  t        j                  dd       d d d        y # 1 sw Y   y xY w)Nz*'toto' is not a valid hypersphere samplingrB   r   rq   )r  )rG   rH   rI   r   PoissonDiskr[  s     r0   r  zTestPoisson.test_raises  s/    ?]]:W5OOA62 655s	   ?AN)r   r   r   r   r  r'  r&  r?  rP  rC  rG  r  r  r  rz   r2   r0   r  r  n  s3    ??DL-:2)&-*)3r2   r  c                       e Zd Zd Zej
                  j                  d      d        Zd Zd Z	ej
                  j                  d      d        Z
y)TestMultinomialQMCc                 8   t        j                  g d      }t        j                  t        d      5  t        j                  |d       d d d        t        j                  g d      }d}t        j                  t        |      5  t        j                  |d       d d d        t        j                  g d      }d	}t        j                  t        |      5  t        j                  |dt        j                  d
             d d d        d}t        j                  t        |      5  t        j                  |dt         j                  j                                d d d        y # 1 sw Y   "xY w# 1 sw Y   xY w# 1 sw Y   }xY w# 1 sw Y   y xY w)N)Q?p=
ף?gffffff?)\(?z'Elements of pvals must be non-negative.rB   r6   )n_trials)r  r  r   r  r  z Elements of pvals must sum to 1.r  r  r  r  r  z Dimension of `engine` must be 1.r   r   )r  r  "`engine` must be an instance of...)
r(   r)   rG   rH   rI   r   MultinomialQMCr  r7   r8   )r*   r  r\  s      r0   test_validationsz#TestMultinomialQMC.test_validations  s   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+E8-F-5F+E58FFFzignore::UserWarningc                 4   t         j                  j                  d      }t        j                  g d      }d}t        j                  ||z        j                  t              }t        j                  |||      }t        |j                  d      |d       y )Nl	   (u@gP{- r  r   r  r   r   rR   )
r(   r7   r8   r)   
atleast_2dr  r  r   r  r   )r*   r   r  r  r  r  s         r0   test_MultinomialBasicDrawz,TestMultinomialQMC.test_MultinomialBasicDraw  sq    yy$$%JKHH34==A.55c:##AtDa((;r2   c                 0   t         j                  j                  d      }t        j                  g d      }t	        j
                  |d|      }|j                  d      }t        |t        j                  |      z  t        j                  |      d       y )Nl	   8X7:ct]+C: r  i    r  r   rQ   rR   )	r(   r7   r8   r)   r   r  r   r   r  )r*   r   r  r  drawss        r0   test_MultinomialDistributionz/TestMultinomialQMC.test_MultinomialDistribution  sj    yy$$%KLHH34##A4@a u-r}}Q/?dKr2   c                 4   t        j                  g d      }t        |      }t        t	        ||d      d       t        t	        ||d      d       t        t	        ||d      d       t        t	        ||d      d       t        t	        ||d	      |d
z
         y )N)r   皙?g?g333333?r   ?gGz?rN   r   r   r  r   gaۢ?g7?r%   rN   r   )r(   r)   rB  r   r   )r*   p_cumulativer  s      r0   test_FindIndexz!TestMultinomialQMC.test_FindIndex  s    xx KL< %lD#>B%lD#>B%lD'BAF%lD'BAF%lD#>qIr2   c                 f   t         j                  j                  d      }t        j                  g d      }d}t        j                  ||z        j                  t              }t        j                  dd|      }t        j                  ||||      }t        |j                  d      |d       y )	Nl	   aFkq|'x< r  r   r   Tr   )r  r  r   rR   )r(   r7   r8   r)   r  r  r  r   r  r  r   )r*   r   r  r  r  base_enginer  s          r0   test_other_enginez$TestMultinomialQMC.test_other_engine  s     yy$$%LMHH34==A.55c:iiDt<##A)-/a((;r2   N)r   r   r   r  rG   r   filterwarningsr  r  r  r  rz   r2   r0   r  r    s\    O. [[ 56< 7<LJ [[ 56	< 7	<r2   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestNormalQMCc                    t        j                  t        j                  d            }|j	                         }t        |j                  d       |j	                  d      }t        |j                  d       t        j                  t        j                  d            }|j	                         }t        |j                  d       |j	                  d      }t        |j                  d	       y )
Nr   )rU  r   r   r    r   r    r   r   r:  r    r   r   MultivariateNormalQMCr(   zerosr7   r   r   r*   r  sampless      r0   test_NormalQMCzTestNormalQMC.test_NormalQMC  s    **<--/W]]F+--!-$W]]F+**<--/W]]F+--!-$W]]F+r2   c                    t        j                  t        j                  d      d      }|j	                         }t        |j                  d       |j	                  d      }t        |j                  d       t        j                  t        j                  d      d      }|j	                         }t        |j                  d	       |j	                  d      }t        |j                  d
       y )Nr   T)rU  inv_transformr  r    r   r  r   r:  r  r  r  s      r0   test_NormalQMCInvTransformz(TestNormalQMC.test_NormalQMCInvTransform  s    **!D2--/W]]F+--!-$W]]F+**!D2--/W]]F+--!-$W]]F+r2   c                 T   t         j                  j                  d      }t        j                  t        j
                  d      d|      }|j                  d      }t        j                  ddgdd	gg      }t        ||d
       t         j                  j                  d      }t        j                  t        j
                  d      d|      }|j                  d      }t        j                  g dg dg      }t        ||d
       t         j                  j                  d      }t        j                  dd|      }t        j                  t        j
                  d      d||      }|j                  d      }t        j                  g dg dg      }t        ||d
       y )Nl	   q)*syRM@
K r   FrU  r  r   r   LpɻgUygxDg?rQ   rR   r%   )r   r  gZ?)g#ڎrgΌ~42?gԻx?nrL   Tr   )rU  r  r  r   )	r(   r7   r8   r   r  r  r)   r   r  )r*   r   r  r  samples_expectedr  s         r0   test_NormalQMCSeededz"TestNormalQMC.test_NormalQMCSeeded  sk   yy$$%LM**!E>--!-$88i%;&/%:%< =!1= yy$$%LM**!E>--!-$88%E%E%G H!1= yy$$%LMiiDt<**!ET
 --!-$88%E%E%G H!1=r2   c                    t         j                  j                  d      }t        j                  t        j
                  d      |d      }|j                  d      }t        j                  ddgdd	gg      }t        ||d
       t         j                  j                  d      }t        j                  t        j
                  d      |d      }|j                  d      }t        j                  g dg dg      }t        ||d
       y )Nl	   9e)-%5Z%_6 r   T)rU  r   r  r   <9\Mg+`?g]@"i?rQ   rR   r%   )r  r  g,D?)g˚X`?g7@gaTR')r(   r7   r8   r   r  r  r)   r   )r*   r   r  r  r  s        r0    test_NormalQMCSeededInvTransformz.TestNormalQMC.test_NormalQMCSeededInvTransform.  s    yy$$%LM**!4t=--!-$88i%;&.%9%; <!1= yy$$%LM**!4t=--!-$88%E%B%D E!1=r2   c                     dD ]l  }t        j                  |d      }t        j                  t        j                  |      |d      }|j                         }t        |j                  d|f       n y )Nr   r   r   Fr0  T)rU  r  r  r   )r   r  r  r(   r  r7   r   r   )r*   r   r  r  r  s        r0   r  zTestNormalQMC.test_other_engineA  s\    A))a%8K..BHHQK6A=ACF mmoGA/ r2   c                 R   t         j                  j                  d      }t        j                  t        j
                  d      |      }|j                  d      }t        t        j                  |j                  d            dk        sJ t        t        j                  |j                  d      d	z
        dk        sJ d
D ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d
         dk  sJ y )Ni3  r   )rU  r      r   r   r   rR  r   r   r   r  r(   r7   r8   r   r  r  r>  r   rU  stdr
   cov	transposer*   r9   r  r  r   rF  pvalr  s           r0   test_NormalQMCShapiroz#TestNormalQMC.test_NormalQMCShapiroJ  s    ii##E***#F--#-&266',,A,./$6777266'++1+-12T9:::Agadm,GAt#::  ffW&&()vvc$i 4'''r2   c                 T   t         j                  j                  d      }t        j                  t        j
                  d      d|      }|j                  d      }t        t        j                  |j                  d            d	k        sJ t        t        j                  |j                  d      d
z
        d	k        sJ dD ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d         d	k  sJ y )Nir   Tr  r  r   r   r   rR  r   r  r  r  r  s           r0   !test_NormalQMCShapiroInvTransformz/TestNormalQMC.test_NormalQMCShapiroInvTransformX  s    ii##H-**!Ds<--#-&266',,A,./$6777266'++1+-12T9:::Agadm,GAt#::  ffW&&()vvc$i 4'''r2   N)
r   r   r   r  r  r  r  r  r  r  rz   r2   r0   r  r    s%    ,, >>>&0((r2   r  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestMultivariateNormalQMCc                 .   d}t        j                  t        |      5  t        j                  dgt        j
                  d             d d d        d}t        j                  t        |      5  t        j                  g dt        j
                  d             d d d        d	}t        j                  t        |      5  t        j                  ddgt        j                  j                                d d d        d
}t        j                  t        |      5  t        j                  ddgddgddgg       d d d        d}t        j                  t        |      5  t        j                  ddgddgddgg       d d d        d}t        j                  t        |      5  t        j                  dgddgddgg       d d d        y # 1 sw Y   xY w# 1 sw Y   >xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz(Dimension of `engine` must be consistentrB   r   r   r  )r  r$   rL   r  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	rG   rH   rI   r   r  r  r(   r7   r8   r[  s     r0   r  z*TestMultivariateNormalQMC.test_validationsj  s   =]]:W5%%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   -G0.G6G'G3"G?&HGG$'G03G<?HHc                 b    t        j                  g dg dg dg dg      }|j                  J y )Nr$   )r   r   r   )r   r   r   )r   r   r   )r   r  _corr_matrixr  s     r0   test_MultivariateNormalQMCNonPDz9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPD  s2    **	9i8
 ""...r2   c                    t        j                  dd      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       t        j                  ddgddgddgg      }|j                         }t        |j                  d       |j                  d      }t        |j                  d	       t        j                  g d
      }t        j                  g dg dg dg      }t        j                  ||      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       y )Nr   r    )rU  r  r  r   r  r   r:  r  r	  r   r   r   r   r   r   r   r   r   r   r%   r    r%   r   r  r7   r   r   r(   r)   r*   r  r  rU  r  s        r0   test_MultivariateNormalQMCz4TestMultivariateNormalQMC.test_MultivariateNormalQMC  s   **q9--/W]]F+--!-$W]]F+ **AaVaV<LM--/W]]F+--!-$W]]F+ xx	"hh	9i89**45--/W]]F+--!-$W]]F+r2   c                    t        j                  ddd      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       t        j                  ddgddgddggd      }|j                         }t        |j                  d	       |j                  d      }t        |j                  d
       t        j                  g d      }t        j                  g dg dg dg      }t        j                  ||d      }|j                         }t        |j                  d       |j                  d      }t        |j                  d       y )Nr   r    T)rU  r  r  r  r   r  r   r:  r  r	  r  r  r  )r  r   r!  r"  r#  s        r0   &test_MultivariateNormalQMCInvTransformz@TestMultivariateNormalQMC.test_MultivariateNormalQMCInvTransform  s    **qM--/W]]F+--!-$W]]F+ **Qq!fq!f-T
 --/W]]F+--!-$W]]F+ xx	"hh	9i89**4DI--/W]]F+--!-$W]]F+r2   c                 H   t         j                  j                  d      }|j                  d      }||j	                         z  t        j
                  |j                  d            z   }t        j                  t        j                  ddg      |d|      }|j                  d      }t        j                  dd	gd
dgg      }t        ||d       t         j                  j                  d      }|j                  d      }||j	                         z  t        j
                  |j                  d            z   }t        j                  t        j                  g d      |d|      }|j                  d      }t        j                  g dg dg      }t        ||d       y )Nl	   b{1/YK $`F r   r   r   r   F)r  r   r   g X4g0<gΧU?gK\ @rQ   rR   r%   r%   r%   r$   )gZh44gA->gZC)g~T~O?g*ʥo@gc}E?
r(   r7   r8   standard_normalr  diagr   r  r)   r   r*   r9   r;   Ar  r  r  s          r0    test_MultivariateNormalQMCSeededz:TestMultivariateNormalQMC.test_MultivariateNormalQMCSeeded  s]   ii##$KL'

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

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

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

1 66**HHYD
 --!-$88%E%D%F G!1=r2   c                 p   t         j                  j                  d      }t        j                  ddgddgddgg|      }|j                  d      }t        t        j                  |j                  d            dk        sJ t        t        j                  |j                  d      dz
        dk        sJ d	D ]  }t        |d d |f         \  }}|d
kD  rJ  t        j                  |j                               }t        j                  |d	         dk  sJ t        j                  ddgddgddgg|      }|j                  d      }t        t        j                  |j                  d      ddgz
        dk        sJ t        t        j                  |j                  d      t        j                  d      z
        dk        sJ d	D ]  }t        |d d |f         \  }}|d
kD  rJ  t        j                  |j                               }t        j                  |d	   dz
        dk  sJ y )Nl   V^Am%2r   r   rU  r  r   r  r   r   rR  r  r  rN   rM   r&   r   r   r(   r7   r8   r   r  r>  r   rU  r  r
   r  r  ri   r*   r   r  r  r   rF  r  r  s           r0   !test_MultivariateNormalQMCShapiroz;TestMultivariateNormalQMC.test_MultivariateNormalQMCShapiro  s   yy$$%IJ**Qq!fq!f-D
 --#-&266',,A,./$6777266'++1+-12T9:::Agadm,GAt#::  ffW&&()vvc$i 4''' **s3*sCj!9
 --#-&266',,A,.!Q784?@@@266'++1+-<=DEEEAgadm,GAt#::  ffW&&()vvc$i#o&---r2   c                 t   t         j                  j                  d      }t        j                  ddgddgddgg|d      }|j                  d      }t        t        j                  |j                  d            d	k        sJ t        t        j                  |j                  d      dz
        d	k        sJ d
D ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d
         d	k  sJ t        j                  ddgddgddgg|d      }|j                  d      }t        t        j                  |j                  d      ddgz
        d	k        sJ t        t        j                  |j                  d      t        j                  d      z
        d	k        sJ d
D ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d
   dz
        d	k  sJ y )Nl	   A"l7D#maxbwcuC r   r   T)rU  r  r   r  r  r   r   rR  r  r  rN   rM   r&   r   r   r4  r5  s           r0   -test_MultivariateNormalQMCShapiroInvTransformzGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransform  s   yy$$%LM**Qq!fq!f-D
 --#-&266',,A,./$6777266'++1+-12T9:::Agadm,GAt#::  ffW&&()vvc$i 4''' **ssc3Z(	
 --#-&266',,A,.!Q784?@@@266'++1+-<=DEEEAgadm,GAt#::  ffW&&()vvc$i#o&---r2   c                    t         j                  j                  d      }t        j                  g dg dg dg dg|      }|j                  d      }t        t        j                  |j                  d	
            dk        sJ t        j                  t        j                  |d d d	f         dz
        dk  sJ t        j                  t        j                  |d d df         dz
        dk  sJ t        j                  t        j                  |d d df         t        j                  d      z
        dk  sJ dD ]  }t        |d d |f         \  }}|dkD  rJ  t        j                  |j                               }t        j                  |d         dk  sJ t        j                  |d   dz
        dk  sJ t        t        j                  |d d d	f   |d d df   z   |d d df   z
        dk        sJ y )Nl	   @jSm-\1:c# )r   r   r   )rN   r   rN   )r   rN   rN   )rN   rN   rM   r3  r=  r   r   r   rR  r   r   r	  g?r  r7  rL  )r(   r7   r8   r   r  r>  r   rU  r  ri   r
   r  r  r5  s           r0   $test_MultivariateNormalQMCDegeneratez>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerate0  s   yy$$%KL**  /?C

 --#-&266',,A,./$6777vvbffWQT]+a/04777vvbffWQT]+a/04777vvbffWQT]+bggaj89D@@@Agadm,GAt#::  ffW&&()vvc$i 4'''vvc$i!m$t+++266'!Q$-'!Q$-7'!Q$-GH  	 r2   N)r   r   r   r  r  r$  r&  r/  r1  r6  r8  r:  rz   r2   r0   r  r  h  s1    =4/,0,4>.>2.@!.Fr2   r  c                       e Zd Zd Zd Zd Zy)	TestLloydc                 $   t         j                  j                  d      }|j                  ddd      }t	        |      }t        |      }t        d      D ]9  }t        |d      }t	        |      }t        |      }||k  sJ ||k  sJ |}|}|}; y )Ni r   r   )   r   )r  rL   )maxiter)r(   r7   RandomStateuniformr   r  r   r   )	r*   r9   r:   base_l1base_l2rF  sample_lloydcurr_l1curr_l2s	            r0   
test_lloydzTestLloyd.test_lloydI  s    ii##G,Q16"&/qAAAL |,Gl+G W$$$W$$$GG!F r2   c                     t        j                  ddgddgddgddgg      }|j                         }t        |      }t	        ||       t        j
                  ||      rJ y)z
        Verify that the input samples are not mutated in place and that they do
        not share memory with the output.
        r   r  ra  N)r(   r)   copyr   r   may_share_memory)r*   sample_origsample_copy
new_samples       r0   test_lloyd_non_mutatingz!TestLloyd.test_lloyd_non_mutating`  st    
 hhc
!$c
!$c
!$c
 , - "&&(;

 	[1&&{J????r2   c                    t        j                  t        d      5  g d}t        |       d d d        d}t        j                  t        |      5  dgdgdgg}t        |       d d d        d}t        j                  t        |      5  d	dgd
dgddgg}t        |       d d d        y # 1 sw Y   xY w# 1 sw Y   RxY w# 1 sw Y   y xY w)Nz`sample` is not a 2D arrayrB   rD   z`sample` dimension is not >= 2r   r  r   z!`sample` is not in unit hypercubegr   r   )rG   rH   rI   r   )r*   r:   r
  s      r0   test_lloyd_errorszTestLloyd.test_lloyd_errorsp  s    ]]:-JK 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*B6
C*B36B?CN)r   r   r   rG  rN  rP  rz   r2   r0   r<  r<  H  s    ".@ ;r2   r<  c                 H    t        j                  |       j                         S ry   )r	   pdistr  ra  s    r0   r  r    s    >>&!%%''r2   ).r~   collectionsr   	itertoolsr   r   rG   numpyr(   numpy.testingr   r   r   scipy.spatialr	   scipy.statsr
   scipy.stats._sobolr   r   scipy.stats._qmcr   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   rr  rw  r  r  r  r  r  r<  r  rz   r2   r0   <module>r[     s    	  +   K K "  /   h% h%V#' #'L3== &.2<D+ e/ e/P) )BRn RjH7 H7VA3. A3H;< ;<|u( u(p] ]@5; 5;r(r2   