U
    »mœdåÇ  ã                   @   s€  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„ dƒZG dd„ dƒZG dd„ dejƒZdd„ Z dd„ Z!dd„ Z"dd„ Z#G dd„ dƒZ$G dd„ de$ƒZ%G dd„ de$ƒZ&G dd„ de$ƒZ'G d d!„ d!e$ƒZ(G d"d#„ d#ƒZ)G d$d%„ d%ƒZ*G d&d'„ d'ƒZ+G d(d)„ d)ƒZ,d*d+„ Z-dS ),é    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                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )Ú	TestUtilsc                 C   s(  dgdgdgg}dgdgdgg}t j|ddd�}t||ƒ ddgddgddgg}t ddgddgg¡}ddgddgdd	gg}t j||d |d d�}t||ƒ t j||d |d d
d�}t||ƒ dddgdddgdddgg}ddddg }}dddgdddgdd	dgg}t j|||d�}t||ƒ d S )Nr   é   ç      à?éþÿÿÿé   é   ©Úl_boundsÚu_boundsé   ç      @T©r   r   Úreverseé   ç      ø?)r   Úscaler   ÚnpÚarray)ÚselfÚspaceÚoutZscaled_spaceÚboundsZscaled_back_spacer   r   © r*   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/stats/tests/test_qmc.pyÚ
test_scale   s&    

 ÿ
zTestUtils.test_scalec                 C   sf   t j d¡}| d¡}| d¡ d }| d¡d }tj|||dd�}tj|||dd�}t||ƒ d S )Nl	   Ea�T4ÇGõñ*­wÉvî ©é   é
   r/   F)r    T)r$   ÚrandomÚdefault_rngr   r#   r   )r&   ÚrngÚsampleÚaÚbZscaledZunscaledr*   r*   r+   Útest_scale_random3   s    
zTestUtils.test_scale_randomc              	   C   s
  t jtdd��  dddg}tj|ddd� W 5 Q R X t jtd	d��J ddgddgddgg}t ddgdd
gg¡}tj||d |d d� W 5 Q R X t jtdd��@ ddgddgddgg}dddgdd
g }}tj|||d� W 5 Q R X t jtdd��N ddgddgddgg}t dddgdd
d
gg¡}tj||d |d d� W 5 Q R X t jtdd��J ddgddgddgg}t ddgdd
gg¡}tj||d |d d� W 5 Q R X t jtdd��L ddgdd
gddgg}t ddgdd
gg¡}tj||d |d dd� W 5 Q R X d S )NúSample is not a 2D array©Úmatchr   r   r   r   r   r   zBounds are not consistentr   z/'l_bounds' and 'u_bounds' must be broadcastabler   ú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(   r*   r*   r+   Útest_scale_errors<   s2    
"""ÿzTestUtils.test_scale_errorsc                 C   sª  t  ddgddgddgddgddgddgg¡}d| d d	 }t  ddgddgddgddgddgddgg¡}d| d d	 }tt |¡d
dd� tt |¡ddd� t  ddddddgddddddgddddddgddddddgddddddgddddddgddddddgg¡}d| d d }ttj|dd�ddd� ttj|dd�ddd� ttj|dd�ddd� dD ]8}t  d|  ¡}ttjt  dg| g¡dd�|ƒ �qld S )Nr   r!   r   r   é   r   ç       @ç      ð?ç      (@ç‚âÇ˜»–€?ç-Cëâ6?©Zatolg/Ý$�…?ç      @ÚMD©Úmethodr   ÚWDçÙÎ÷Sãõ?ÚCDç£’:MÔ?©r   r@   r;   é   é    é@   úL2-star)r$   r%   r   r   ÚdiscrepancyÚsqrt)r&   Úspace_1Zspace_2r3   ÚdimÚrefr*   r*   r+   Útest_discrepancy^   s>    ..úÿÿÿÿÿzTestUtils.test_discrepancyc              	   C   s¼   t  ddgddgddgddgddgddgg¡}tjtdd�� t |¡ W 5 Q R X tjtd	d�� t ddg¡ W 5 Q R X d
d
gddgddgg}tjtdd�� tj|dd� W 5 Q R X d S )Nr   r!   r   r   r@   r   r:   r8   r7   r   r   z'toto' is not a valid ...ÚtotorI   )r$   r%   r<   r=   r>   r   rT   )r&   r3   r*   r*   r+   Útest_discrepancy_errorsƒ   s    . ÿz!TestUtils.test_discrepancy_errorsc                 C   sn  t  ddddddgddddddgddddddgddddddgddddddgddddddgddddddgg¡}d| d d }ttj|ddd�d	d
d� ttj|ddd�dd
d� ttj|ddd�dd
d� dD ]8}t  d|  ¡}ttjt  dg| g¡ddd�|ƒ qÎ| tddd„ ¡ tj	t
dd�� tj|dd� W 5 Q R X tj	tdd�� tj|dd� W 5 Q R X d S )Nr   r   rA   rB   rG   rH   r;   )rJ   Úworkersr   rE   rF   rK   rL   rM   rN   rO   r!   rS   éÿÿÿÿÚ	cpu_countc                   S   s   d S ©Nr*   r*   r*   r*   r+   Ú<lambda>®   ó    z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>zCannot determine ther8   ©r\   zInvalid number of workers...r   )r$   r%   r   r   rT   rU   ÚsetattrÚosr<   r=   ÚNotImplementedErrorr>   )r&   Zmonkeypatchr3   rW   rX   r*   r*   r+   Útest_discrepancy_parallel’   sD    úþþþ ÿÿz#TestUtils.test_discrepancy_parallelc              	   C   sä  t  ddgddgddgddgddgddgg¡}d| d d	 }tj|d d
… dd�}t|d
 |d d
… |ƒ}t|ddd� t j d¡}| d¡}t |¡}tj|d d
… dd�}t|d
 |d d
… |ƒ}t||dd� tj	t
dd��" t|d
 |d d
… d |ƒ W 5 Q R X tj	t
dd�� t|d
 |d |ƒ W 5 Q R X ddg}tj	t
dd�� t||d d
… |ƒ W 5 Q R X ddgg}tj	t
dd�� t||d d
… |ƒ W 5 Q R X dddg}tj	t
dd�� t||d d
… |ƒ W 5 Q R X d S )Nr   r!   r   r   r@   r   rA   rB   rC   r]   T)Z	iterativerD   rE   rF   l	   gy°,!uUx‡FYo9"]µ )r@   r/   r:   r8   r7   r   zx_new is not in unit hypercuber   zx_new is not a 1D arrayg333333Ó?çš™™™™™¹?z&x_new and sample must be broadcastable)r$   r%   r   rT   r   r   r0   r1   r<   r=   r>   )r&   rV   Z	disc_initZ	disc_iterr2   Zdisc_refZx_newr*   r*   r+   Útest_update_discrepancyµ   s0    .

&

z!TestUtils.test_update_discrepancyc           
      C   s¬   t j d¡}tjd|d�}| d¡}t |¡}tdƒD ]p}| d¡}| d¡}| d¡}t|||||ƒ}|||f |||f  |||f< |||f< t |¡}	t	||	ƒ q6d S )Nl	   ýPv’W®uW=�lêWêx" r   ©Úseedr/   éd   )
r$   r0   r1   r   ÚLatinHypercuberT   ÚrangeÚintegersr   r   )
r&   r2   Zqmc_genr3   ÚdiscÚiZrow_1Zrow_2ÚcolZdisc_referencer*   r*   r+   Útest_perm_discrepancyß   s    





 
ÿ
zTestUtils.test_perm_discrepancyc           	      C   sº   dd„ }dd„ }dd„ }dd„ }t j d	¡}| d
¡}tj|dd�}||ƒ}t||ƒ tj|dd�}||ƒ}t||ƒ tj|dd�}||ƒ}t||ƒ tj|dd�}||ƒ}t||ƒ dS )z,Alternative definitions from Matt Haberland.c              
   S   sî   | j \}}| }t tjddt |d ¡  dt |d ¡d   dd�¡}| d d d …d d …f }| d d …d d d …f }t tjtjddt |d ¡  dt |d ¡  dt || ¡  dd�dd�¡}d| d| |  d|d  |  S )Nr   r   r   ©Zaxisr   gUUUUUUñ?©Úshaper$   ÚsumÚprodÚabs©ÚxÚnÚsÚxijZdisc1ÚxkjZdisc2r*   r*   r+   Údisc_c2ó   s.    

ÿþþÿþýýüzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_c2c              	   S   sŽ   | j \}}| d d d …d d …f }| d d …d d d …f }t tjtjdt || ¡ t || ¡d  dd�dd�¡}d|  d|d  |  S )Nr"   r   rs   r   gUUUUUUõ?r   rt   )rz   r{   r|   r}   r~   ro   r*   r*   r+   Údisc_wd  s    
ÿþþýzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_wdc              
   S   s  | j \}}| }t tjddt |d ¡  dt |d ¡d   dd�¡}| d d d …d d …f }| d d …d d d …f }t tjtjddt |d ¡  dt |d ¡  dt || ¡  dt || ¡d   dd�d	d�¡}d
| d| |  d|d  |  S )Ng«ªªªªªú?ç      Ð?r   r   r   rs   g      þ?ç      è?r   gUUUUUUù?rt   ry   r*   r*   r+   Údisc_md  s2    

ÿþþÿþýüûûzFTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_mdc              
      sl   ˆj \‰ }t d|  dd|  ˆ  t tjdˆd  dd�¡  t ‡ ‡fdd„tˆ ƒD ƒ¡ˆ d   ¡S )Nr!   r   r   rs   c                    sH   g | ]@}t ˆ ƒD ]2}t d t ˆ|dd…f ˆ|dd…f ¡ ¡‘qqS )r   N)rm   r$   rw   Úmaximum)Ú.0ÚkÚj©r{   rz   r*   r+   Ú
<listcomp>!  s    
 ÿz_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>)ru   r$   rU   rv   rw   rm   )rz   r|   r*   rˆ   r+   Údisc_star_l2  s    
ÿþýþÿzKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2l	   Áj¤;<Q`sºi—y—õX r-   rM   rI   rK   rH   rS   N)r$   r0   r1   r   rT   r   )	r&   r   r€   rƒ   rŠ   r2   r3   Z	disc_currZdisc_altr*   r*   r+   Ú+test_discrepancy_alternative_implementationð   s$    




z5TestUtils.test_discrepancy_alternative_implementationc                 C   sL   t dƒ}|d dkst‚t dƒ}|d dks0t‚t dƒ}|d dksHt‚d S )Nr/   r]   é   é¨   iå  i^  i5	  )r   ÚAssertionError)r&   Úprimesr*   r*   r+   Útest_n_primes:  s    zTestUtils.test_n_primesc                 C   s8   t dƒ}dddddddd	d
ddddddg}t||ƒ d S )Né2   r   r!   r   é   é   é   é   é   é   rŒ   é   é%   é)   é+   é/   )r   r   )r&   r�   r(   r*   r*   r+   Útest_primesD  s    "zTestUtils.test_primesN)Ú__name__Ú
__module__Ú__qualname__r,   r6   r?   rY   r[   rf   rh   rr   r‹   r�   r�   r*   r*   r*   r+   r      s   	"%#*J
r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestVDCc              
   C   sx   t dƒ}dddddddd	d
dg
}t||ƒ t ddd�}t||ƒ t ddd�}t||ƒ t ddd�}t||dd … ƒ d S )Nr/   ç        r   r�   r‚   ç      À?ç      ä?ç      Ø?ç      ì?g      °?g      â?r@   rb   r;   r’   r!   )Ústart_index©r   r   )r&   r3   r(   r*   r*   r+   Útest_van_der_corputK  s       ÿ


zTestVDC.test_van_der_corputc                 C   s€   d}t dd|d�}t ddd|d�}t||dd … ƒ t ddd|dd	�}t||dd … ƒ t ddd|d
d	�}t||dd … ƒ d S )Nl	   	XCòf
Kl<{OÍ8þ r/   T©Úscramblerj   r’   r!   )r§   r«   rj   r@   )r§   r«   rj   r\   r;   r¨   )r&   rj   r(   r3   r*   r*   r+   Útest_van_der_corput_scrambleZ  s(        ÿ    ÿz$TestVDC.test_van_der_corput_scramblec              	   C   s*   t jtdd�� tddd� W 5 Q R X d S )Nz'base' must be at least 2r8   r/   r   )Úbase)r<   r=   r>   r   ©r&   r*   r*   r+   Útest_invalid_base_errork  s    zTestVDC.test_invalid_base_errorN)rž   rŸ   r    r©   r¬   r¯   r*   r*   r*   r+   r¡   J  s   r¡   c                       s.   e Zd Zd‡ fdd„	Zd	ddœdd„Z‡  ZS )
ÚRandomEngineNc                    s   t ƒ j|||d� d S )N)ÚdÚoptimizationrj   )ÚsuperÚ__init__)r&   r±   r²   rj   ©Ú	__class__r*   r+   r´   q  s    zRandomEngine.__init__r   rb   c                C   s   | j  || jf¡}|S r_   )r2   r0   r±   )r&   r{   r\   r3   r*   r*   r+   Ú_randomt  s    zRandomEngine._random)NN)r   )rž   rŸ   r    r´   r·   Ú__classcell__r*   r*   rµ   r+   r°   p  s   r°   c                  C   sš   t ddd�} | jdd�}| jdd�}| jdks2t‚|  ¡  | jdksHt‚| jdd�}t||ƒ |  ¡  | jdd� | jdd�}t||ƒ | jdks–t‚d S )	Nr   l	   šF,@IY^ä+Geƒ ri   r   ©r{   r’   é   r   )r°   r0   Únum_generatedrŽ   Úresetr   Úfast_forward)ÚengineZsample_1Zsample_2Zsample_1_testZsample_2_testr*   r*   r+   Útest_subclassing_QMCEnginey  s    

r¿   c               	   C   s|   t jtdd�� tdƒ W 5 Q R X t jtdd�� tdƒ W 5 Q R X d} t jt| d�� tdƒ}|jddd� W 5 Q R X d S )	Nz d must be a non-negative integerr8   )r   r]   z*'u_bounds' and 'l_bounds' must be integersr   gš™™™™™ñ?r   )r<   r=   r>   r°   rn   )Úmsgr¾   r*   r*   r+   Útest_raises�  s    rÁ   c                  C   s$  t ddd�} | jddd�}tt |¡dgƒ |jt d¡ks@t‚| jdddd	�}tt |¡ddgƒ d
}d}|  ¡  |  d¡}|||  | }t 	|¡ 
tj¡}|  ¡  | j||ddd�}t||ƒ | j||ddd�}t| ¡ | ¡ f||d fƒ | j||ddd�}t| ¡ | ¡ f||fƒ d S )Nr   l	   llGíö[/Ww­ ri   r/   r¹   r   Úint64T)r{   Úendpointéûÿÿÿr’   é   F©r   r{   rÃ   rk   )r°   rn   r   r$   ÚuniqueZdtyperŽ   r¼   r0   ÚfloorÚastyperÂ   ÚminÚmax)r¾   r3   ÚlowÚhighÚ
ref_sampler*   r*   r+   Útest_integersž  s&    

rÏ   c                  C   s²   d} t j d¡}|jdd| d�}|jdd| dd	�}t| |d
�}|j||ddd�}t|jdd�|ƒ t|jdd�|d ƒ |j||ddd�}t|jdd�|ƒ t|jdd�|ƒ d S )Nr/   l	   G]	#0¦m$avâe rÄ   r]   )rÌ   rÍ   Úsizer   r   T)rÌ   rÍ   rÐ   rÃ   ri   rk   FrÆ   r   rs   )r$   r0   r1   rn   r°   r   rÊ   rË   )r±   r2   rÌ   rÍ   r¾   r3   r*   r*   r+   Útest_integers_ndÀ  s    rÑ   c                   @   sj  e Zd ZdZeZeZeZeZddgZ	ddgZ
eedœdd„Zeejdœd	d
„Zejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZejjde	e
d�dd„ ƒZej ddg¡dd„ ƒZdd „ Zej d!d"ejfd#d$d%„ fg¡d&d'„ ƒZ d(S ))ÚQMCEngineTestszGeneric tests for QMC engines.TFZ	ScrambledZUnscrambled)r«   Úreturnc                 K   sN   t j d¡}| jr(| jf ||dœ|—ŽS |r6t ¡  n| jf d|i|—ŽS d S )Nl	   \v$PdËv†uL2+C€ rª   rj   )r$   r0   r1   Úcan_scrambleÚqmcer<   Úskip)r&   r«   Úkwargsrj   r*   r*   r+   r¾   Ú  s    
zQMCEngineTests.enginec                 C   s   |r
| j S | jS r_   )Úscramble_ndÚunscramble_nd)r&   r«   r*   r*   r+   Ú	referenceä  s    zQMCEngineTests.referencer«   )Úidsc                 C   s,   | j d|d�}| d¡}tt d¡|ƒ d S )Nr   ©r±   r«   r@   )r@   r   ©r¾   r0   r   r$   Úempty©r&   r«   r¾   r3   r*   r*   r+   Ú	test_0dimç  s    
zQMCEngineTests.test_0dimc                 C   s,   | j d|d�}| d¡}tt d¡|ƒ d S )Nr   rÜ   r   ©r   r   rÝ   rß   r*   r*   r+   Útest_0sampleí  s    
zQMCEngineTests.test_0samplec                 C   s*   | j d|d�}| d¡}d|jks&t‚d S )Nr   rÜ   r   ©r   r   )r¾   r0   ru   rŽ   rß   r*   r*   r+   Útest_1sampleó  s    
zQMCEngineTests.test_1samplec                 C   s@   | j d|d�}| d¡}t |dk¡s*t‚t |dk¡s<t‚d S )Nrk   rÜ   é   r   r   )r¾   r0   r$   ÚallrŽ   rß   r*   r*   r+   Útest_boundsù  s    
zQMCEngineTests.test_boundsc                 C   sN   | j |d�}| jd|d�}|jt|ƒd�}t||dd� |jt|ƒksJt‚d S )N©r«   r   rÜ   r¹   rg   rF   )rÚ   r¾   r0   Úlenr   r»   rŽ   )r&   r«   rÎ   r¾   r3   r*   r*   r+   Útest_sample   s
    zQMCEngineTests.test_samplec                 C   sf   | j d|d�}|jdd�}| j d|d�}t|ƒd }|j|d�}|j|d�}t|||d … dd� d S )Nr   rÜ   r;   r¹   rg   rF   )r¾   r0   ré   r   )r&   r«   r¾   rÎ   Zn_halfÚ_r3   r*   r*   r+   Útest_continuing	  s    zQMCEngineTests.test_continuingc                 C   sJ   | j d|d�}|jdd�}| ¡  |jdks0t‚|jdd�}t||ƒ d S )Nr   rÜ   r;   r¹   r   )r¾   r0   r¼   r»   rŽ   r   )r&   r«   r¾   rÎ   r3   r*   r*   r+   Ú
test_reset  s    zQMCEngineTests.test_resetc                 C   s¾   | j d|d�}|jdd�}| j d|d�}| d¡ |jdd�}t||dd … dd� | ¡  g }tdƒD ]*}|d dkrˆ| | ¡ ¡ qh| d	¡ qht|d
d„ tdƒD ƒ t |¡dd� d S )Nr   rÜ   r;   r¹   r@   rg   rF   r   r   c                 S   s   g | ]}|d  dkr|‘qS )r   r   r*   )r…   rp   r*   r*   r+   r‰   6  s      z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>çñhãˆµøä>)	r¾   r0   r½   r   r¼   rm   Úappendr$   Úconcatenate)r&   r«   r¾   rÎ   r3   Z
even_drawsrp   r*   r*   r+   Útest_fast_forward!  s"    
ýz QMCEngineTests.test_fast_forwardc                 C   s„   d}| j ||d�}| d¡}ttj|dd�t d|¡dd� ttj|d	dd�t d
|¡dd� ttj|ddd�t d|¡dd� d S )Nr‘   rÜ   i   r   rs   r   ç{®Gáz„?rF   é   r�   éK   r‚   )r¾   r0   r   r$   ÚmeanÚrepeatZ
percentile)r&   r«   r±   r¾   r3   r*   r*   r+   Útest_distribution;  s$    
 
 ÿ 
 ÿ 
 ÿz QMCEngineTests.test_distributionc              	   C   s2   d}t jt|d�� | jdddd� W 5 Q R X d S )Nz)'toto' is not a valid optimization methodr8   r   FrZ   ©r±   r«   r²   )r<   r=   r>   r¾   ©r&   Úmessager*   r*   r+   Útest_raises_optimizerJ  s    z$QMCEngineTests.test_raises_optimizerzoptimization,metricú	random-CDZlloydc                 C   s
   t | ƒ S r_   )r   ©r3   r*   r*   r+   r`   S  ra   zQMCEngineTests.<lambda>c           	      C   sV   | j ddd�}|jdd�}||ƒ}| j dd|d�}|jdd�}||ƒ}||k sRt‚d S )Nr   FrÜ   rR   r¹   rø   )r¾   r0   rŽ   )	r&   r²   Zmetricr¾   Z
sample_refZ
metric_refZoptimal_Zsample_Zmetric_r*   r*   r+   Útest_optimizersO  s    zQMCEngineTests.test_optimizersN)!rž   rŸ   r    Ú__doc__ÚNotImplementedrÕ   rÔ   rÙ   rØ   r«   rÛ   Úboolr   r¾   r$   ZndarrayrÚ   r<   ÚmarkÚparametrizerà   râ   rä   rç   rê   rì   rí   rñ   r÷   rû   r   rT   rþ   r*   r*   r*   r+   rÒ   Ð  sF   











þþrÒ   c                   @   s’   e Zd ZejZdZe 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 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!d"„ Zd#S )$Ú
TestHaltonTr   r   gUUUUUUÕ?r�   gUUUUUUå?r‚   gÇqÇq¼?r£   gÇqÇqÜ?r¤   g9Žã8Žãè?r¥   gÇqÇqÌ?r¦   grÇqÇá?g{�·¿'à?gg_»¬p¹?gŒz�·¿'d?g´U‹€±Û?g{�·¿'è?gvc‹îjƒè?gõ oO(Ð?gÉ­jÅ•Ô?g{�·¿'ä?gRà•2õä?gêAÞþžPÀ?g¿iv´ÜŸï?g{�·¿'ì?gÀ…é9ñÊ?gõ oO(Ø?g-] (ùfá?c                 C   sp   | j dd�}| jddd�}|jt|ƒdd�}t||dd� | ¡  | d	¡}| ¡  |jd	dd
�}t||ƒ d S )NTrè   r   rÜ   r;   )r{   r\   gü©ñÒMbP?rF   r/   rb   )rÚ   r¾   r0   ré   r   r¼   rn   r   )r&   rÎ   r¾   r3   r*   r*   r+   Útest_workerss  s    
zTestHalton.test_workersN)rž   rŸ   r    r   ZHaltonrÕ   rÔ   r$   r%   rÙ   rØ   r  r*   r*   r*   r+   r  a  s(      ý
ù	r  c                   @   st   e Zd ZejZdZdd„ Zdd„ Zdd„ Z	e
j dd	d
g¡e
j dddg¡e
j dddg¡dd„ ƒƒƒZdd„ ZdS )ÚTestLHSFc                 G   s   t  d¡ d S ©NzNot applicable: not a sequence.©r<   rÖ   ©r&   Úargsr*   r*   r+   rì   †  s    zTestLHS.test_continuingc                 G   s   t  d¡ d S r  r  r	  r*   r*   r+   rñ   ‰  s    zTestLHS.test_fast_forwardc                 G   s   t  d¡ d S ©NzJNot applicable: the value of reference sample is implementation dependent.r  r	  r*   r*   r+   rê   Œ  s    zTestLHS.test_sampleÚstrengthr   r   r«   Tr²   Nrü   c                 C   s^  t j d¡}d}|d }d}tj|||||d�}|j|d�}	|	j||fksNt‚|j|ks\t‚t  |¡d | }
t  	|
||f¡j
}t  |	|k¡s’t‚t j|	dd	�}|r¬d| nd}t|||d
� t  |	| |k¡sÔt‚|dk�rZ|d k�rZt  |¡}tt||ƒƒ}tt|jƒdƒD ]H\}}|	d d …||gf }||  t¡}tdd„ |D ƒƒ}t||ƒ �qd S )Nl	   pIrtS"×M¿d@B r   r   r   )r±   r«   r  r²   rj   r¹   r   r   rs   rF   c                 s   s   | ]}t |ƒV  qd S r_   )Útuple)r…   Úrowr*   r*   r+   Ú	<genexpr>µ  s     z1TestLHS.test_sample_stratified.<locals>.<genexpr>)r$   r0   r1   r   rl   ru   rŽ   r»   ZarangeZbroadcast_toÚTÚanyÚsortr   Úsetr   r   rm   r±   rÉ   Úintr   )r&   r²   r«   r  rj   Úpr{   r±   r¾   r3   Z
expected1dÚexpectedZsorted_sampleZtolZunique_elementsZdesiredrp   r‡   Z
samples_2dÚresZres_setr*   r*   r+   Útest_sample_stratified�  s6    ý
zTestLHS.test_sample_stratifiedc              	   C   sþ   d}t jt|d�� tjddd� W 5 Q R X d}t jt|d�� tjddd�}| d	¡ W 5 Q R X d}t jt|d�� tjddd�}| d
¡ W 5 Q R X d}t jt|d�� tjd
dd�}| d¡ W 5 Q R X d}t jt|d�� tjddd� W 5 Q R X d S )Nznot a valid strengthr8   r   r!   )r  z%n is not the square of a prime numberr   )r±   r  rP   r   zn is too small for dé	   z'centered' is deprecatedT)Zcentered)r<   r=   r>   r   rl   r0   ÚwarnsÚUserWarning)r&   rú   r¾   r*   r*   r+   rÁ   ¸  s$    zTestLHS.test_raises)rž   rŸ   r    r   rl   rÕ   rÔ   rì   rñ   rê   r<   r  r  r  rÁ   r*   r*   r*   r+   r  ‚  s   %r  c                   @   sÌ   e Zd ZejZdZe 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 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d„ Zdd„ Zdd„ Zd d!„ Zej d"d#d$g¡d%d&„ ƒZd'd(„ Zd)S )*Ú	TestSobolTr¢   r   r‚   r�   r¥   r¦   r¤   r£   gò�™Æa6Ð?gtAAzÚ?g´`˜ˆ±ë?gÊ_k €mï?gðsAdnæ?gò­rIÃ¢?g£´q£LÇ?gÝ”|ã?g+»&ÅCïº?g#‘*H;Ì?g¦&fb_÷à?gÈ]bnQå?gvD2¢¼(í?gt¤|µ!Ö?g›$\Ý?g™4>z@é?c              	   C   s2   t jtdd�� t d¡}| d¡ W 5 Q R X d S )Nú'The balance properties of Sobol' pointsr8   r   r/   )r<   r  r  r   ÚSobolr0   ©r&   r¾   r*   r*   r+   Útest_warningè  s    
zTestSobol.test_warningc              	   C   sr   t jddd�}| d¡}t| jd d… |ƒ | d¡}t| jdd… |ƒ tjtdd�� | d¡ W 5 Q R X d S )Nr   Frè   r@   r;   r  r8   )r   r  Zrandom_base2r   rÙ   r<   r=   r>   ©r&   r¾   r3   r*   r*   r+   Útest_random_base2î  s    

zTestSobol.test_random_base2c              	   C   sX   t jtdd�� t tjjd ¡ W 5 Q R X t jtdd�� tjddd� W 5 Q R X d S )Nz Maximum supported dimensionalityr8   r   zMaximum supported 'bits' is 64éA   )Úbits)r<   r=   r>   r   r  ZMAXDIMr®   r*   r*   r+   Ú
test_raiseü  s    zTestSobol.test_raisec                 C   s^   t jddd�}t| ¡  ¡  ¡ ƒ}t| ¡  ¡  ¡ ƒ}t|tddiƒƒ t|tddiƒƒ d S )NiW  Frè   r¢   r   )r   r  r   r0   ÚflattenÚtolistr   )r&   r¾   Zcount1Zcount2r*   r*   r+   Útest_high_dim  s
    zTestSobol.test_high_dimr$  r   r!   c              	   C   s\   t jdd|d�}d| }| |¡}t| jd |… |ƒ tjtdd�� | ¡  W 5 Q R X d S )Nr   F©r«   r$  zincreasing `bits`r8   )r   r  r0   r   rÙ   r<   r=   r>   )r&   r$  r¾   Únsr3   r*   r*   r+   Ú	test_bits  s    
zTestSobol.test_bitsc                 C   s*   t jdddd�}| d¡}t| j|ƒ d S )Nr   FrR   r)  r;   )r   r  r0   r   rÙ   r!  r*   r*   r+   Útest_64bits  s    
zTestSobol.test_64bitsN)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  Ñ  s6   
ù

ù		
	r  c                   @   sN   e Zd ZejZdZdd„ Zdd„ Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ ZdS )ÚTestPoissonFc                 G   s   t  d¡ d S )NzToo costly in memory.r  r	  r*   r*   r+   rç      s    zTestPoisson.test_boundsc                 G   s   t  d¡ d S )Nz"Not applicable: recursive process.r  r	  r*   r*   r+   rñ   #  s    zTestPoisson.test_fast_forwardc                 G   s   t  d¡ d S r  r  r	  r*   r*   r+   rê   &  s    zTestPoisson.test_samplec                 G   sª   d}d}| j d|dd�}|j|d�}t|ƒ|ks4t‚t|ƒ|ksDt‚|j|d�}t|ƒ|ks`t‚t|ƒ|kspt‚tj||gdd�}t|ƒ|d ks–t‚t|ƒ|ks¦t‚d S )	Nçš™™™™™©?r   r   F)r±   Úradiusr«   r¹   r   rs   )r¾   r0   ré   rŽ   Úl2_normr$   rð   )r&   r
  r/  r*  r¾   Zsample_initZsample_continuedr3   r*   r*   r+   rì   *  s    zTestPoisson.test_continuingc                 C   sœ   t j d¡}d}d\}}|| | d¡ | }dddg}dd	g}t|||ƒ}|D ]F\}	}
}| j|	|
||d
�}| |¡}t|ƒ|ks†t‚t|ƒ|
ksPt‚qPd S )Nl	   ïx¼_Ù4ê÷vZ.c r‘   )g{®Gáz´?çš™™™™™É?r   r   r!   r@   ÚvolumeZsurface)r±   r/  Úhypersphererj   )r$   r0   r1   r   rÕ   ré   rŽ   r0  )r&   r2   r*  rÌ   rÍ   ZradiiÚ
dimensionsZhypersphere_methodsÚgenr±   r/  r3  r¾   r3   r*   r*   r+   Útest_mindist=  s"    
   ÿ
zTestPoisson.test_mindistc                 C   s.   d}| j d|d�}| ¡ }t|ƒ|ks*t‚d S )Nr1  r   )r±   r/  )rÕ   Z
fill_spacer0  rŽ   )r&   r/  r¾   r3   r*   r*   r+   Útest_fill_spaceR  s    zTestPoisson.test_fill_spacec              	   C   s0   d}t jt|d�� tjddd� W 5 Q R X d S )Nz*'toto' is not a valid hypersphere samplingr8   r   rZ   )r3  )r<   r=   r>   r   ÚPoissonDiskrù   r*   r*   r+   rÁ   Z  s    zTestPoisson.test_raisesN)rž   rŸ   r    r   r8  rÕ   rÔ   rç   rñ   rê   rì   r6  r7  rÁ   r*   r*   r*   r+   r-    s   r-  c                   @   sL   e Zd Zdd„ Zej d¡dd„ ƒZdd„ Zdd	„ Z	ej d¡d
d„ ƒZ
dS )ÚTestMultinomialQMCc              	   C   sþ   t  dddddg¡}tjtdd�� tj|dd	� W 5 Q R X t  ddd
ddg¡}d}tjt|d�� tj|dd	� W 5 Q R X t  dddddg¡}d}tjt|d�� tj|dtjdd�d� W 5 Q R X d}tjt|d�� tj|dt j 	¡ d� W 5 Q R X d S )Nç¸…ëQ¸¾?ç¤p=
×£Ð?gš™™™™™©¿çffffffÖ?ç)\�Âõ(Ì?z'Elements of pvals must be non-negative.r8   r/   )Ún_trialsrg   z Elements of pvals must sum to 1.r.  z Dimension of `engine` must be 1.r   ©r±   )r>  r¾   ú"`engine` must be an instance of...)
r$   r%   r<   r=   r>   r   ÚMultinomialQMCr  r0   r1   )r&   r  rú   r*   r*   r+   Útest_validationsa  s    "z#TestMultinomialQMC.test_validationszignore::UserWarningc                 C   sZ   t j d¡}t  dddddg¡}t  ddd	d
dgg¡}tj|d|d�}t| d¡|ƒ d S )Nl	   ¡(uý@ÌgPù{-Î r:  r;  r.  r<  r=  r”   é   r   é#   é   rk   ©r>  rj   r   )r$   r0   r1   r%   r   rA  r   )r&   rj   r  r  r¾   r*   r*   r+   Útest_MultinomialBasicDrawx  s
    z,TestMultinomialQMC.test_MultinomialBasicDrawc                 C   s\   t j d¡}t  dddddg¡}tj|d|d�}| d	¡}t|t  |¡ t  |¡d
d� d S )Nl	   8X¸7:ct]+Ê¸©C: r:  r;  r.  r<  r=  i    rF  r   rE   rF   )	r$   r0   r1   r%   r   rA  r   rv   Z
atleast_2d)r&   rj   r  r¾   Zdrawsr*   r*   r+   Útest_MultinomialDistribution€  s
    
z/TestMultinomialQMC.test_MultinomialDistributionc              
   C   s„   t  ddddddddg¡}t|ƒ}tt||d	ƒd
ƒ tt||dƒdƒ tt||dƒdƒ tt||dƒdƒ tt||dƒ|d ƒ d S )Nrg   çš™™™™™Ù?gÍÌÌÌÌÌÜ?g333333ã?r‚   çÍÌÌÌÌÌì?g®Gáz®ï?rB   r¢   r   r   g»aÛ¢ÌÜ?g”Þ7¾öÌÜ?r!   r   )r$   r%   ré   r   r
   )r&   Zp_cumulativerÐ   r*   r*   r+   Útest_FindIndex‡  s    z!TestMultinomialQMC.test_FindIndexc                 C   sl   t j d¡}t  dddddg¡}t  ddd	d
dgg¡}tjdd|d�}tj|d||d�}t| d¡|ƒ d S )Nl	   aýFÇkýqñ|Ë‘'x<Õ r:  r;  r.  r<  r=  rº   ró   r   é$   rE  r   Trª   rk   )r>  r¾   rj   )r$   r0   r1   r%   r   r  rA  r   )r&   rj   r  r  Úbase_enginer¾   r*   r*   r+   Útest_other_engine�  s    
ÿz$TestMultinomialQMC.test_other_engineN)rž   rŸ   r    rB  r<   r  ÚfilterwarningsrG  rH  rK  rN  r*   r*   r*   r+   r9  `  s   

	
r9  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestNormalQMCc                 C   s€   t jt d¡d�}| ¡ }t|jdƒ |jdd�}t|jdƒ t jt d¡d�}| ¡ }t|jdƒ |jdd�}t|jd	ƒ d S )
Nr   )rõ   ©r   r   r   r¹   ©r   r   r   rã   ©r   r   ©r   ÚMultivariateNormalQMCr$   Úzerosr0   r   ru   ©r&   r¾   Úsamplesr*   r*   r+   Útest_NormalQMC�  s    zTestNormalQMC.test_NormalQMCc                 C   s„   t jt d¡dd�}| ¡ }t|jdƒ |jdd�}t|jdƒ t jt d¡dd�}| ¡ }t|jd	ƒ |jdd�}t|jd
ƒ d S )Nr   T)rõ   Úinv_transformrQ  r   r¹   rR  r   rã   rS  rT  rW  r*   r*   r+   Útest_NormalQMCInvTransform«  s      ÿ ÿz(TestNormalQMC.test_NormalQMCInvTransformc                 C   s  t j d¡}tjt  d¡d|d�}|jdd�}t  ddgdd	gg¡}t||d
d� t j d¡}tjt  d¡d|d�}|jdd�}t  dddgdddgg¡}t||d
d� t j d¡}tjdd|d�}tjt  d¡d||d�}|jdd�}t  dddgdddgg¡}t||d
d� d S )Nl	   q)í*s�yRóM¦@
KÎ r   F©rõ   rZ  rj   r¹   gá˜eO›Ü?g’[“nKäó¿g[éµÙX‰Í¿g¾¤1ZGUË?rE   rF   r!   gæv/÷ÉÔ?g;ßO�—îï¿g¾/.Ui‹Ù?gµ}Ì„ð?r@   Trª   )rõ   rZ  r¾   rj   )	r$   r0   r1   r   rU  rV  r%   r   r  )r&   rj   r¾   rX  Úsamples_expectedrM  r*   r*   r+   Útest_NormalQMCSeeded»  sF      ÿ
ÿ  ÿÿ  þÿz"TestNormalQMC.test_NormalQMCSeededc                 C   s¬   t j d¡}tjt  d¡|dd�}|jdd�}t  ddgdd	gg¡}t||d
d� t j d¡}tjt  d¡|dd�}|jdd�}t  dddgdddgg¡}t||d
d� d S )Nl	   9e)-%ÿ5ŸZµ%Ö_6Ù r   T)rõ   rj   rZ  r¹   gÛ†Q<¾é¿gHÜÖžØ?gF^ÖÄ_Ù?g(+†« ¾¿rE   rF   r!   gÂß/fKVù?gr‹ù¹¡)Å?g·Aí·v"ÀgãÅÂ9}ú¿)r$   r0   r1   r   rU  rV  r%   r   )r&   rj   r¾   rX  r]  r*   r*   r+   Ú test_NormalQMCSeededInvTransformÚ  s,      ÿ
ÿ  ÿÿz.TestNormalQMC.test_NormalQMCSeededInvTransformc                 C   sJ   dD ]@}t j|dd�}t jt |¡|dd�}| ¡ }t|jd|fƒ qd S )N©r   r   r   FrÜ   T)rõ   r¾   rZ  r   )r   r  rU  r$   rV  r0   r   ru   )r&   r±   rM  r¾   rX  r*   r*   r+   rN  í  s    þzTestNormalQMC.test_other_enginec                 C   sÂ   t j d¡}tjt  d¡|d�}|jdd�}tt  |jdd�¡dk ƒsJt	‚tt  |j
dd�d	 ¡dk ƒslt	‚d
D ](}t|d d …|f ƒ\}}|dkspt	‚qpt  | ¡ ¡}t  |d
 ¡dk s¾t	‚d S )Niº3  r   )rõ   rj   é   r¹   r   rs   rò   r   ©r   r   rJ  ©r$   r0   r1   r   rU  rV  ræ   rx   rõ   rŽ   Ústdr	   ÚcovÚ	transpose©r&   r2   r¾   rX  rp   rë   Úpvalre  r*   r*   r+   Útest_NormalQMCShapiroö  s    "z#TestNormalQMC.test_NormalQMCShapiroc                 C   sÄ   t j d¡}tjt  d¡d|d�}|jdd�}tt  |jdd�¡d	k ƒsLt	‚tt  |j
dd�d
 ¡d	k ƒsnt	‚dD ](}t|d d …|f ƒ\}}|dksrt	‚qrt  | ¡ ¡}t  |d ¡d	k sÀt	‚d S )Ni—Z1 r   Tr\  ra  r¹   r   rs   rò   r   rb  rJ  rc  rg  r*   r*   r+   Ú!test_NormalQMCShapiroInvTransform  s      ÿ"z/TestNormalQMC.test_NormalQMCShapiroInvTransformN)
rž   rŸ   r    rY  r[  r^  r_  rN  ri  rj  r*   r*   r*   r+   rP  œ  s   	rP  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestMultivariateNormalQMCc              	   C   sV  d}t jt|d�� tjdgtjdd�d� W 5 Q R X d}t jt|d��" tjdddgtjdd�d� W 5 Q R X d}t jt|d�� tjddgtj ¡ d� W 5 Q R X d	}t jt|d��" t ddgd
dgdd
gg¡ W 5 Q R X d}t jt|d��" t ddgd
dgdd
gg¡ W 5 Q R X d}t jt|d��  t dgd
dgdd
gg¡ W 5 Q R X d S )Nz(Dimension of `engine` must be consistentr8   r   r   r?  )r¾   r@   r@  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	r<   r=   r>   r   rU  r  r$   r0   r1   rù   r*   r*   r+   rB    s$    "&"&&z*TestMultivariateNormalQMC.test_validationsc                 C   s<   t  dddgdddgdddgdddgg¡}|jd k	s8t‚d S )Nr   r   r   )r   rU  Z_corr_matrixrŽ   r  r*   r*   r+   Útest_MultivariateNormalQMCNonPD0  s
     ÿz9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPDc                 C   sò   t jddd�}| ¡ }t|jdƒ |jdd�}t|jdƒ t jddgddgddggd�}| ¡ }t|jdƒ |jdd�}t|jd	ƒ t ddd
g¡}t dddgdddgdddgg¡}t  ||¡}| ¡ }t|jdƒ |jdd�}t|jdƒ d S )Nr   r   )rõ   re  rQ  r¹   rR  r   rã   rS  r   ©r   r!   ©r   r!   ©r   rU  r0   r   ru   r$   r%   ©r&   r¾   rX  rõ   re  r*   r*   r+   Útest_MultivariateNormalQMC7  s"    "z4TestMultivariateNormalQMC.test_MultivariateNormalQMCc                 C   sú   t jdddd�}| ¡ }t|jdƒ |jdd�}t|jdƒ t jddgddgddggdd�}| ¡ }t|jd	ƒ |jdd�}t|jd
ƒ t dddg¡}t dddgdddgdddgg¡}t j||dd�}| ¡ }t|jdƒ |jdd�}t|jdƒ d S )Nr   r   T)rõ   re  rZ  rQ  r¹   rR  r   rã   rS  r   )rZ  rm  rn  ro  rp  r*   r*   r+   Ú&test_MultivariateNormalQMCInvTransformO  s*      ÿ"z@TestMultivariateNormalQMC.test_MultivariateNormalQMCInvTransformc                 C   s  t j d¡}| d¡}|| ¡  t  | d¡¡ }tjt  ddg¡|d|d�}|jdd�}t  dd	gd
dgg¡}t	||dd� t j d¡}| d¡}|| ¡  t  | d¡¡ }tjt  dddg¡|d|d�}|jdd�}t  dddgdddgg¡}t	||dd� d S )Nl	   èb·{1/YKë $`øF‡ ©r   r   r   r   F)rZ  rj   r¹   g6«>W[±Þ?gP5z5@éí?gŽ?QÙ°fû?gÊ¤†6 Æ?rE   rF   ©r!   r!   r!   g�¡cµ@gÃ L£É@g�™D½`ì¿gž•´â
ô?go€™ïà'ž?güI‚pò¿©
r$   r0   r1   Zstandard_normalrf  Zdiagr   rU  r%   r   ©r&   r2   r4   ÚAr¾   rX  r]  r*   r*   r+   Ú test_MultivariateNormalQMCSeededi  s0    
 ÿ
ÿ
 ÿÿz:TestMultivariateNormalQMC.test_MultivariateNormalQMCSeededc                 C   s  t j d¡}| d¡}|| ¡  t  | d¡¡ }tjt  ddg¡||dd�}|jdd�}t  dd	gd
dgg¡}t	||dd� t j d¡}| d¡}|| ¡  t  | d¡¡ }tjt  dddg¡||dd�}|jdd�}t  dddgdddgg¡}t	||dd� d S )Nl	   A^ª}�KT0zub‡N¨ rs  r   r   T)rj   rZ  r¹   gB³ëÞŠÄÀgSËÖú"!â¿g`sž	Mã?g]Â¡·xÌ?rE   rF   rt  r!   g¦€´ÿÖö?g¨«;Û¤Õ¿gy­„î’øø¿g«–t”ƒÙÖ¿gïäÓc›ú?gÌ(–[ZÓ¿ru  rv  r*   r*   r+   Ú,test_MultivariateNormalQMCSeededInvTransform€  s8    
   ÿ
ÿ
   ÿÿzFTestMultivariateNormalQMC.test_MultivariateNormalQMCSeededInvTransformc                 C   s¨  t j d¡}tjddgddgddgg|d�}|jdd�}tt  |jdd�¡dk ƒsVt‚tt  |j	dd�d ¡dk ƒsxt‚d	D ](}t
|d d …|f ƒ\}}|d
ks|t‚q|t  | ¡ ¡}t  |d	 ¡dk sÊt‚tjddgddgddgg|d�}|jdd�}tt  |jdd�ddg ¡dk ƒ�st‚tt  |j	dd�t  d¡ ¡dk ƒ�sHt‚d	D ],}t
|d d …|f ƒ\}}|d
k�sLt‚�qLt  | ¡ ¡}t  |d	 d ¡dk �s¤t‚d S )Nl	   €R¡2”qM}È3”i/Ž r   r   ©rõ   re  rj   ra  r¹   rs   rò   rb  rJ  rB   rA   r"   r   r   ©r$   r0   r1   r   rU  ræ   rx   rõ   rŽ   rd  r	   re  rf  rU   ©r&   rj   r¾   rX  rp   rë   rh  re  r*   r*   r+   Ú!test_MultivariateNormalQMCShapiro™  s6      ÿ"  ÿ(*z;TestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroc                 C   s¬  t j d¡}tjddgddgddgg|dd�}|jdd�}tt  |jdd�¡d	k ƒsXt‚tt  |j	dd�d ¡d	k ƒszt‚d
D ](}t
|d d …|f ƒ\}}|dks~t‚q~t  | ¡ ¡}t  |d
 ¡d	k sÌt‚tjddgddgddgg|dd�}|jdd�}tt  |jdd�ddg ¡d	k ƒ�s"t‚tt  |j	dd�t  d¡ ¡d	k ƒ�sLt‚d
D ],}t
|d d …|f ƒ\}}|dk�sPt‚�qPt  | ¡ ¡}t  |d
 d ¡d	k �s¨t‚d S )Nl	   A"l7D#maxbwcuòC– r   r   T)rõ   re  rj   rZ  ra  r¹   rs   rò   rb  rJ  rB   rA   r"   r   r   r{  r|  r*   r*   r+   Ú-test_MultivariateNormalQMCShapiroInvTransform¹  s:       ÿ"ü(*zGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformc                 C   sš  t j d¡}tjdddgdddgdddgdddgg|d�}|jdd�}tt  |jdd	�¡d
k ƒsdt‚t  t  	|d d …df ¡d ¡d
k sŒt‚t  t  	|d d …df ¡d ¡d
k s´t‚t  t  	|d d …df ¡t  
d¡ ¡d
k sât‚dD ](}t|d d …|f ƒ\}}|dksæt‚qæt  | ¡ ¡}t  |d ¡d
k �s6t‚t  |d d ¡d
k �sRt‚tt  |d d …df |d d …df  |d d …df  ¡dk ƒ�s–t‚d S )Nl	   A	�+€CÂIÄI›mG`3dz r¢   rB   rA   rz  rå   r¹   r   rs   rò   r   r   r`  gš™™™™™é?rb  rá   rî   )r$   r0   r1   r   rU  ræ   rx   rõ   rŽ   rd  rU   r	   re  rf  r|  r*   r*   r+   Ú$test_MultivariateNormalQMCDegenerateÜ  s(    ý((.6ÿz>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerateN)rž   rŸ   r    rB  rl  rq  rr  rx  ry  r}  r~  r  r*   r*   r*   r+   rk    s    #rk  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú	TestLloydc           	      C   s~   t j d¡}|jdddd�}t|ƒ}t|ƒ}tdƒD ]D}t|dd�}t|ƒ}t|ƒ}||k s`t‚||k slt‚|}|}|}q4d S )Ni§� r   r   )é€   r   )rÐ   r@   )Úmaxiter)	r$   r0   ZRandomStateÚuniformr   r0  rm   r   rŽ   )	r&   r2   r3   Zbase_l1Zbase_l2rë   Zsample_lloydZcurr_l1Zcurr_l2r*   r*   r+   Ú
test_lloydõ  s      ÿzTestLloyd.test_lloydc                 C   sR   t  ddgddgddgddgg¡}| ¡ }t|d�}t||ƒ t  ||¡rNt‚dS )zƒ
        Verify that the input samples are not mutated in place and that they do
        not share memory with the output.
        rg   r1  rý   N)r$   r%   Úcopyr   r   Zmay_share_memoryrŽ   )r&   Zsample_origZsample_copyZ
new_sampler*   r*   r+   Útest_lloyd_non_mutating  s    
ýÿ
z!TestLloyd.test_lloyd_non_mutatingc              	   C   s¢   t jtdd�� dddg}t|ƒ W 5 Q R X d}t jt|d�� dgdgdgg}t|ƒ W 5 Q R X d}t jt|d��$ d	dgd
dgddgg}t|ƒ W 5 Q R X d S )Nz`sample` is not a 2D arrayr8   r   r   r   z`sample` dimension is not >= 2rI  z!`sample` is not in unit hypercubegš™™™™™ñ¿rg   r   )r<   r=   r>   r   )r&   r3   rÀ   r*   r*   r+   Útest_lloyd_errors  s    
zTestLloyd.test_lloyd_errorsN)rž   rŸ   r    r„  r†  r‡  r*   r*   r*   r+   r€  ô  s   r€  c                 C   s   t  | ¡ ¡ S r_   )r   ZpdistrÊ   rý   r*   r*   r+   r0  -  s    r0  ).rd   Úcollectionsr   Ú	itertoolsr   r   r<   Únumpyr$   Znumpy.testingr   r   r   Zscipy.spatialr   Zscipy.statsr	   Zscipy.stats._sobolr
   r   Zscipy.stats._qmcr   r   r   r   r   r   r   r   r   r¡   r°   r¿   rÁ   rÏ   rÑ   rÒ   r  r  r  r-  r9  rP  rk  r€  r0  r*   r*   r*   r+   Ú<module>   s>   (  8&	" !OKD<x a9