a
    ˆù»j÷Ú  ã                   @   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                   @   sŒ   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
ejjddd�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||ƒ g d¢g d¢g d¢g}dg d¢ }}g d¢g d¢g d¢g}t j|||d�}t||ƒ d S )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ÚoutZscaled_spaceÚboundsZscaled_back_spacer   r   © r+   ú@E:\soccer\ml_env\Lib\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î ©é   é
   r0   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��( g d¢}tj|ddd� W d   ƒ n1 s<0    Y  t jtdd��T ddgd	d	gd
d
gg}t ddgddgg¡}tj||d |d	 d� W d   ƒ n1 s®0    Y  t jtdd��H ddgd	d	gd
d
gg}g d¢ddg }}tj|||d� W d   ƒ n1 �s0    Y  t jtdd��T ddgd	d	gd
d
gg}t g d¢g d¢g¡}tj||d |d	 d� W d   ƒ n1 �sŠ0    Y  t jtdd��T ddgd	dgd
d
gg}t ddgddgg¡}tj||d |d	 d� W d   ƒ n1 �sþ0    Y  t jtdd��V 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 d   ƒ n1 �st0    Y  d S )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)   r+   r+   r,   Útest_scale_errors<   s2    .6088ÿzTestUtils.test_scale_errorsc              
   C   sr  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  g d¢g d¢g d¢g d¢g d¢g d¢g d¢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�|ƒ �q4d S )Nr   r"   r   r   é   r   ç       @ç      ð?ç      (@ç‚âÇ˜»–€?ç-Cëâ6?©Z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   rB   r=   é   é    é@   úL2-star)r%   r&   r   r   ÚdiscrepancyÚsqrt)r'   Úspace_1Zspace_2r4   Ú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 d   ƒ n1 s\0    Y  tjtd	d�� t ddg¡ W d   ƒ n1 s˜0    Y  d
d
gddgddgg}tjtdd�� tj|dd� W d   ƒ n1 sê0    Y  d S )Nr   r"   r   r   rB   r   r<   r9   r8   r   r   ú'toto' is not a valid ...ÚtotorR   )r%   r&   r>   r?   r@   r   r]   ©r'   r4   r+   r+   r,   Útest_discrepancy_errorsƒ   s    .ÿ(,z!TestUtils.test_discrepancy_errorsc              
   C   sb  t  g d¢g d¢g d¢g d¢g d¢g d¢g d¢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 d   ƒ n1 �s0    Y  tj	td d�� tj|d!d� W d   ƒ n1 �sT0    Y  d S )"NrI   rJ   rK   rL   rM   rN   rO   rC   rD   rP   rQ   r=   )rS   Úworkersr   rG   rH   rT   rU   rV   rW   rX   r"   r   r\   éÿÿÿÿÚ	cpu_countc                   S   s   d S ©Nr+   r+   r+   r+   r,   Ú<lambda>®   ó    z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>zCannot determine ther9   ©rg   zInvalid number of workers...r   )r%   r&   r   r   r]   r^   ÚsetattrÚosr>   r?   ÚNotImplementedErrorr@   )r'   Zmonkeypatchr4   r`   ra   r+   r+   r,   Útest_discrepancy_parallel’   sB    
úþþþÿÿ.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¡}tjtdd�� t |¡ W d   ƒ n1 s\0    Y  tjtd	d�� t ddg¡ W d   ƒ n1 s˜0    Y  d
d
gddgddgg}tjtdd�� tj|dd� W d   ƒ n1 sê0    Y  t  d
d
gd
d
gd
dgg¡}tjtdd�� t |¡ W d   ƒ n1 �s@0    Y  t  ddgg¡}tjtdd�� t |¡ W d   ƒ n1 �sŠ0    Y  d S )Nr   r"   r   r   rB   r   r<   r9   r8   r   r   rc   rd   rR   z!Sample contains duplicate points.z'Sample must contain at least two points)	r%   r&   r>   r?   r@   r   Úgeometric_discrepancyÚwarnsÚUserWarningre   r+   r+   r,   Ú!test_geometric_discrepancy_errorsµ   s    .(,,*z+TestUtils.test_geometric_discrepancy_errorsc                 C   sL  t  ddgddgg¡}tt |¡t  d¡ƒ ttj|dd�t  d¡ƒ t  ddgddgddgg¡}tt |¡dƒ ttj|dd�dƒ t  ddgddgddgg¡}tt |¡t  d¡d	 ƒ ttj|dd�t  d¡d ƒ ttj|d
d�dƒ ttj|dd
d�dƒ t j d¡}tjd|d� d¡}tt |¡dƒ ttj|dd�dƒ d S )Nr   r   r   ÚmstrR   r   ç      è?ç      Ð?rB   Z	chebyshev)Úmetric)rS   ry   l	   ’sˆ;80øri�R$½� r"   )ÚdÚseedé2   g–˜Y�$ª?guÚ—¼8É?)	r%   r&   r   r   rr   r^   r1   r2   ÚLatinHypercube)r'   r4   r3   r+   r+   r,   Útest_geometric_discrepancyÊ   s&    ÿÿz$TestUtils.test_geometric_discrepancyz5minimum_spanning_tree ignores zero distances (#18892)T)ÚreasonÚstrictc                 C   s4   t  ddgddgddgg¡}ttj|dd�dƒ d S )Nr   r   rv   rR   r   )r%   r&   r   r   rr   re   r+   r+   r,   Ú2test_geometric_discrepancy_mst_with_zero_distancesâ   s    z<TestUtils.test_geometric_discrepancy_mst_with_zero_distancesc              	   C   sP  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 d   ƒ n1 �s0    Y  tj	t
dd��$ t|d
 |d |ƒ W d   ƒ n1 �s\0    Y  ddg}tj	t
dd��$ t||d d
… |ƒ W d   ƒ n1 �s¨0    Y  ddgg}tj	t
dd��$ t||d d
… |ƒ W d   ƒ n1 �sö0    Y  g d¢}tj	t
dd��$ t||d d
… |ƒ W d   ƒ n1 �sB0    Y  d S )Nr   r"   r   r   rB   r   rC   rD   rE   rh   T)Z	iterativerF   rG   rH   l	   gy°,!uUx‡FYo9"]µ )rB   r0   r<   r9   r8   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   r]   r   r   r1   r2   r>   r?   r@   )r'   r_   Z	disc_initZ	disc_iterr3   Zdisc_refZx_newr+   r+   r,   Útest_update_discrepancyê   s0    .

<44
4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   ©r{   r0   éd   )
r%   r1   r2   r   r}   r]   ÚrangeÚintegersr   r   )
r'   r3   Zqmc_genr4   Ú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   rŒ   r   gUUUUUUõ?r   r�   )r“   r”   r•   r–   r—   rˆ   r+   r+   r,   Údisc_wd7  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«ªªªªªú?rx   r   r   r   rŒ   g      þ?rw   r   gUUUUUUù?r�   r’   r+   r+   r,   Údisc_mdA  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   rŒ   c                    sH   g | ]@}t ˆ ƒD ]2}t d t ˆ|dd…f ˆ|dd…f ¡ ¡‘qqS )r   N)r†   r%   r�   Úmaximum)Ú.0ÚkÚj©r”   r“   r+   r,   Ú
<listcomp>V  s   ÿz_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>)rŽ   r%   r^   r�   r�   r†   )r“   r•   r+   rŸ   r,   Údisc_star_l2Q  s    
ÿþýþÿzKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2l	   Áj¤;<Q`sºi—y—õX r.   rV   rR   rT   rQ   r\   N)r%   r1   r2   r   r]   r   )	r'   r˜   r™   rš   r¡   r3   r4   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J ‚t dƒ}|d dks0J ‚t dƒ}|d dksHJ ‚d S )Nr0   rh   é   é¨   iå  i^  i5	  )r   )r'   Úprimesr+   r+   r,   Útest_n_primeso  s    zTestUtils.test_n_primesc                 C   s   t dƒ}g d¢}t||ƒ d S )Nr|   )r   r"   r   é   é   é   é   é   é   r£   é   é%   é)   é+   é/   )r   r   )r'   r¥   r)   r+   r+   r,   Útest_primesy  s    zTestUtils.test_primesN)Ú__name__Ú
__module__Ú__qualname__r-   r7   rA   rb   rf   rq   ru   r~   r>   ÚmarkZxfailr�   rƒ   r‹   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   sh   t dƒ}g d¢}t||ƒ t ddd�}t||ƒ t ddd�}t||ƒ t ddd�}t||dd … ƒ d S )	Nr0   )
ç        r   rx   rw   ç      À?ç      ä?ç      Ø?ç      ì?g      °?g      â?rB   rm   r=   r§   r"   )Ústart_index©r   r   )r'   r4   r)   r+   r+   r,   Útest_van_der_corput€  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þ r0   T©Úscrambler{   r§   r"   )r½   rÁ   r{   rB   )r½   rÁ   r{   rg   r=   r¾   )r'   r{   r)   r4   r+   r+   r,   Útest_van_der_corput_scramble�  s    
ÿ
ÿz$TestVDC.test_van_der_corput_scramblec                 C   s>   t jtdd�� tddd� W d   ƒ n1 s00    Y  d S )Nz'base' must be at least 2r9   r0   r   )Úbase)r>   r?   r@   r   ©r'   r+   r+   r,   Útest_invalid_base_error   s    zTestVDC.test_invalid_base_errorN)r³   r´   rµ   r¿   rÂ   rÅ   r+   r+   r+   r,   r·     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)rz   Úoptimizationr{   )ÚsuperÚ__init__)r'   rz   rÇ   r{   ©Ú	__class__r+   r,   rÉ   ¦  s    zRandomEngine.__init__r   rm   c                C   s   | j  || jf¡}|S rj   )r3   r1   rz   )r'   r”   rg   r4   r+   r+   r,   Ú_random©  s    zRandomEngine._random)NN)r   )r³   r´   rµ   rÉ   rÌ   Ú__classcell__r+   r+   rÊ   r,   rÆ   ¥  s   rÆ   c                  C   sš   t ddd�} | jdd�}| jdd�}| jdks2J ‚|  ¡  | jdksHJ ‚| jdd�}t||ƒ |  ¡  | jdd� | jdd�}t||ƒ | jdks–J ‚d S )	Nr   l	   šF,@IY^ä+Geƒ r„   r   ©r”   r§   é   r   )rÆ   r1   Únum_generatedÚresetr   Úfast_forward)ÚengineZsample_1Zsample_2Zsample_1_testZsample_2_testr+   r+   r,   Útest_subclassing_QMCEngine®  s    

rÔ   c                  C   s¸   t jtdd�� tdƒ W d   ƒ n1 s,0    Y  t jtdd�� tdƒ W d   ƒ n1 sb0    Y  d} t jt| d��& tdƒ}|jddd� W d   ƒ n1 sª0    Y  d S )	Nz d must be a non-negative integerr9   )r   rh   z*'u_bounds' and 'l_bounds' must be integersr   gš™™™™™ñ?r   )r>   r?   r@   rÆ   r‡   )Ú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@J ‚| 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­ r„   r0   rÎ   r   Úint64T)r”   Úendpointéûÿÿÿr§   é   F©r   r”   rØ   r…   )rÆ   r‡   r   r%   ÚuniqueZdtyperÑ   r1   ÚfloorÚastyper×   ÚminÚmax)rÓ   r4   Ú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 )Nr0   l	   G]	#0¦m$avâe rÙ   rh   )rá   râ   Úsizer   r   T)rá   râ   rå   rØ   r„   r…   FrÛ   r   rŒ   )r%   r1   r2   r‡   rÆ   r   rß   rà   )rz   r3   rá   râ   rÓ   r4   r+   r+   r,   Útest_integers_ndõ  s    ræ   c                   @   s�  e Zd ZdZeZeZeZeZddgZ	ddgZ
d-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�ej ddej d¡df¡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+d,„ Z#dS ).ÚQMCEngineTestszGeneric tests for QMC engines.TFZ	ScrambledZUnscrambledì	   \v$PdËv†uL2+C€ )rÁ   Úreturnc                 K   sB   | j r| jf ||dœ|¤ŽS |r*t ¡  n| jf d|i|¤ŽS d S )NrÀ   r{   )Úcan_scrambleÚqmcer>   Úskip)r'   rÁ   r{   Úkwargsr+   r+   r,   rÓ     s
    
zQMCEngineTests.enginec                 C   s   |r
| j S | jS rj   )Ú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   ©rz   rÁ   rB   )rB   r   ©rÓ   r1   r   r%   Úempty©r'   rÁ   rÓ   r4   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&J ‚d S )Nr   rò   r   ©r   r   )rÓ   r1   rŽ   rõ   r+   r+   r,   Útest_1sample+  s    
zQMCEngineTests.test_1samplec                 C   s@   | j d|d�}| d¡}t |dk¡s*J ‚t |dk¡s<J ‚d S )Nr…   rò   é   r   r   )rÓ   r1   r%   Úallrõ   r+   r+   r,   Útest_bounds1  s    
zQMCEngineTests.test_boundsc                 C   sN   | j |d�}| jd|d�}|jt|ƒd�}t||dd� |jt|ƒksJJ ‚d S )N©rÁ   r   rò   rÎ   r‚   rH   )rð   rÓ   r1   Úlenr   rÐ   )r'   rÁ   rã   rÓ   r4   r+   r+   r,   Útest_sample8  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Î   r‚   rH   )rÓ   r1   rÿ   r   )r'   rÁ   rÓ   rã   Zn_halfÚ_r4   r+   r+   r,   Útest_continuingA  s    zQMCEngineTests.test_continuingr{   Nc                 C   sL   | j d||d�}|jdd�}| ¡  |jdks2J ‚|jdd�}t||ƒ d S )Nr   ©rz   rÁ   r{   r=   rÎ   r   )rÓ   r1   rÑ   rÐ   r   )r'   rÁ   r{   rÓ   rã   r4   r+   r+   r,   Ú
test_resetN  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Î   rB   r‚   rH   r   r   c                 S   s   g | ]}|d  dkr|‘qS )r   r   r+   )rœ   r‰   r+   r+   r,   r    v  rl   z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>çñhãˆµøä>)	rÓ   r1   rÒ   r   rÑ   r†   Úappendr%   Úconcatenate)r'   rÁ   rÓ   rã   r4   Z
even_drawsr‰   r+   r+   r,   Útest_fast_forwarda  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   rŒ   r   ç{®Gáz„?rH   é   rx   éK   rw   )rÓ   r1   r   r%   ÚmeanÚrepeatZ
percentile)r'   rÁ   rz   rÓ   r4   r+   r+   r,   Útest_distribution{  s    
ÿÿÿz QMCEngineTests.test_distributionc                 C   sF   d}t jt|d��  | jdddd� W d   ƒ n1 s80    Y  d S )Nz)'toto' is not a valid optimization methodr9   r   Frd   ©rz   rÁ   rÇ   )r>   r?   r@   rÓ   ©r'   Úmessager+   r+   r,   Útest_raises_optimizerŠ  s    z$QMCEngineTests.test_raises_optimizerzoptimization,metricú	random-CDZlloydc                 C   s
   t | ƒ S rj   )r   ©r4   r+   r+   r,   rk   “  rl   zQMCEngineTests.<lambda>c           	      C   sV   | j ddd�}|jdd�}||ƒ}| j dd|d�}|jdd�}||ƒ}||k sRJ ‚d S )Nr   Frò   r[   rÎ   r  )rÓ   r1   )	r'   rÇ   ry   rÓ   Ú
sample_refZ
metric_refÚoptimal_Úsample_Zmetric_r+   r+   r,   Útest_optimizers�  s    zQMCEngineTests.test_optimizersc                 C   sÂ   t j d¡}g }tdƒD ]$}| jdd|d�}| | d¡¡ qtjtdd��" t	|d	 |d
 ƒ W d   ƒ n1 st0    Y  tjtdd��" t	|d	 |d ƒ W d   ƒ n1 s´0    Y  d S )Nl	    B©û"V6ÿD¾GlUN¢ r"   r   Tr  rB   zArrays are not equalr9   r   r   )
r%   r1   r2   r†   rÓ   r  r>   r?   ÚAssertionErrorr   )r'   r3   r4   r‰   rÓ   r+   r+   r,   Útest_consume_prng_state   s    0z&QMCEngineTests.test_consume_prng_state)rè   )$r³   r´   rµ   Ú__doc__ÚNotImplementedrë   rê   rï   rî   rÁ   rñ   Úboolr   rÓ   r%   Zndarrayrð   r>   r¶   Úparametrizerö   rø   rú   rý   r   r  r1   r2   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#S )$Ú
TestHaltonTr   r   gUUUUUUÕ?rx   gUUUUUUå?rw   gÇqÇq¼?r¹   gÇqÇqÜ?rº   g9Žã8Žãè?r»   gÇqÇqÌ?r¼   grÇqÇá?g{�·¿'à?gØ–d‘äáí?gŒz�·¿'d?güGÑ?g{�·¿'è?gk„è97ã?gõ oO(Ð?g´o®«Sê?g{�·¿'ä?gg¸rYùÃ?gêAÞþžPÀ?gŽRß?g{�·¿'ì?g��yËrÅæ?gõ oO(Ø?gÍŸ¡E×§?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”   rg   gü©ñÒMbP?rH   r0   rm   )rð   rÓ   r1   rÿ   r   rÑ   r‡   r   )r'   rã   rÓ   r4   r+   r+   r,   Útest_workers¿  s    
zTestHalton.test_workersN)r³   r´   rµ   r   ZHaltonrë   rê   r%   r&   rï   rî   r   r+   r+   r+   r,   r  ­  s"   ý
ù	r  c                   @   s|   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d„ ZdS )ÚTestLHSTc                 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Á   FrÇ   Nr  c                 C   sZ  t j d¡}d}|d }d}tj|||||d�}|j|d�}	|	j||fksNJ ‚|j|ks\J ‚t  |¡d | }
t  |
||f¡j	}t  
|	|k¡s’J ‚t j|	dd	�}|r¬d| nd}t|||d
� t  
|	| |k¡sÔJ ‚|dk�rV|d u �rVt  |¡}tt||ƒƒ}tt|jƒdƒD ]D\}}|	d d …||gf }||  t¡}dd„ |D ƒ}t||ƒ �qd S )Nl	   pIrtS"×M¿d@B r   r   r   )rz   rÁ   r'  rÇ   r{   rÎ   r   r   rŒ   rH   c                 S   s   h | ]}t |ƒ’qS r+   )Útuple)rœ   Úrowr+   r+   r,   Ú	<setcomp>  rl   z1TestLHS.test_sample_stratified.<locals>.<setcomp>)r%   r1   r2   r   r}   rŽ   rÐ   ZarangeZbroadcast_toÚTÚanyÚsortr   Úsetr   r   r†   rz   rÞ   Úintr   )r'   rÇ   rÁ   r'  r{   Úpr”   rz   rÓ   r4   Z
expected1dÚexpectedZsorted_sampleZtolZunique_elementsZdesiredr‰   rž   Z
samples_2dÚresZres_setr+   r+   r,   Útest_sample_stratifiedÜ  s6    ý
zTestLHS.test_sample_stratifiedc                 C   sD   | j ddd�}|jdd�}| j dddd�}|jdd�}t||ƒ d S )Nr   Frò   r[   rÎ   r  r  )rÓ   r1   r   )r'   rÓ   r  r  r  r+   r+   r,   Útest_optimizer_1d  s
    zTestLHS.test_optimizer_1dc                 C   s$  d}t jt|d�� tjddd� W d   ƒ n1 s60    Y  d}t jt|d��( tjddd�}| d	¡ W d   ƒ n1 s€0    Y  d}t jt|d��( tjddd�}| d
¡ W d   ƒ n1 sÊ0    Y  d}t jt|d��( tjd
dd�}| d¡ W d   ƒ n1 �s0    Y  d S )Nznot a valid strengthr9   r   r"   )r'  z%n is not the square of a prime numberr   )rz   r'  rY   r   zn is too small for dé	   )r>   r?   r@   r   r}   r1   )r'   r  rÓ   r+   r+   r,   rÖ     s    ,((zTestLHS.test_raises)r³   r´   rµ   r   r}   rë   rê   r  r  r   r>   r¶   r  r3  r4  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   rw   rx   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   sF   t jtdd��$ t d¡}| d¡ W d   ƒ n1 s80    Y  d S )Nú'The balance properties of Sobol' pointsr9   r   r0   )r>   rs   rt   r   ÚSobolr1   ©r'   rÓ   r+   r+   r,   Útest_warning:  s    
zTestSobol.test_warningc                 C   s†   t jddd�}| d¡}t| jd d… |ƒ | d¡}t| jdd… |ƒ tjtdd�� | d¡ W d   ƒ n1 sx0    Y  d S )Nr   Frþ   rB   r=   r7  r9   )r   r8  Zrandom_base2r   rï   r>   r?   r@   ©r'   rÓ   r4   r+   r+   r,   Útest_random_base2@  s    

zTestSobol.test_random_base2c                 C   s€   t jtdd��" t tjjd ¡ W d   ƒ n1 s60    Y  t jtdd�� tjddd� W d   ƒ n1 sr0    Y  d S )Nz Maximum supported dimensionalityr9   r   zMaximum supported 'bits' is 64éA   )Úbits)r>   r?   r@   r   r8  ZMAXDIMrÄ   r+   r+   r,   Ú
test_raiseN  s    0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   r8  r   r1   ÚflattenÚtolistr   )r'   rÓ   Zcount1Zcount2r+   r+   r,   Útest_high_dimW  s
    zTestSobol.test_high_dimr>  r   r"   c                 C   sp   t jdd|d�}d| }| |¡}t| jd |… |ƒ tjtdd�� | ¡  W d   ƒ n1 sb0    Y  d S )Nr   F©rÁ   r>  zincreasing `bits`r9   )r   r8  r1   r   rï   r>   r?   r@   )r'   r>  rÓ   Únsr4   r+   r+   r,   Ú	test_bits^  s    
zTestSobol.test_bitsc                 C   s*   t jdddd�}| d¡}t| j|ƒ d S )Nr   Fr[   rC  r=   )r   r8  r1   r   rï   r;  r+   r+   r,   Útest_64bitsh  s    
zTestSobol.test_64bitsN)r³   r´   rµ   r   r8  rë   rê   r%   r&   rï   rî   r:  r<  r?  rB  r>   r¶   r  rE  rF  r+   r+   r+   r,   r6  #  s6   
ù

ù		
	r6  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ý   r  s    zTestPoisson.test_boundsc                 G   s   t  d¡ d S )Nz"Not applicable: recursive process.r#  r$  r+   r+   r,   r  u  s    zTestPoisson.test_fast_forwardc                 G   s   t  d¡ d S r&  r#  r$  r+   r+   r,   r   x  s    zTestPoisson.test_samplec                 G   sª   d}d}| j d|dd�}|j|d�}t|ƒ|ks4J ‚t|ƒ|ksDJ ‚|j|d�}t|ƒ|ks`J ‚t|ƒ|kspJ ‚tj||gdd�}t|ƒ|d ks–J ‚t|ƒ|ks¦J ‚d S )	Nçš™™™™™©?r   r   F)rz   ÚradiusrÁ   rÎ   r   rŒ   )rÓ   r1   rÿ   Úl2_normr%   r  )r'   r%  rI  rD  rÓ   Zsample_initZsample_continuedr4   r+   r+   r,   r  |  s    zTestPoisson.test_continuingc                 C   sš   t j d¡}d}d\}}|| | d¡ | }g d¢}ddg}t|||ƒ}|D ]F\}	}
}| j|	|
||d�}| |¡}t|ƒ|ks„J ‚t|ƒ|
ksNJ ‚qNd S )	Nl	   ïx¼_Ù4ê÷vZ.c r|   )g{®Gáz´?çš™™™™™É?r   )r   r"   rB   ÚvolumeZsurface)rz   rI  Úhyperspherer{   )r%   r1   r2   r   rë   rÿ   rJ  )r'   r3   rD  rá   râ   ZradiiÚ
dimensionsZhypersphere_methodsÚgenrz   rI  rM  rÓ   r4   r+   r+   r,   Útest_mindist�  s    ÿ
zTestPoisson.test_mindistc                 C   s.   d}| j d|d�}| ¡ }t|ƒ|ks*J ‚d S )NrK  r   )rz   rI  )rë   Z
fill_spacerJ  )r'   rI  rÓ   r4   r+   r+   r,   Útest_fill_space¤  s    zTestPoisson.test_fill_spacec                 C   sD   d}t jt|d�� tjddd� W d   ƒ n1 s60    Y  d S )Nz*'toto' is not a valid hypersphere samplingr9   r   rd   )rM  )r>   r?   r@   r   ÚPoissonDiskr  r+   r+   r,   rÖ   ¬  s    zTestPoisson.test_raisesN)r³   r´   rµ   r   rR  rë   rê   rý   r  r   r  rP  rQ  rÖ   r+   r+   r+   r,   rG  n  s   rG  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  g d¢¡}tjtdd�� tj|dd� W d   ƒ n1 s@0    Y  t  g d¢¡}d}tjt|d�� tj|dd� W d   ƒ n1 sŽ0    Y  t  g d¢¡}d	}tjt|d��( tj|dtjd
d�d� W d   ƒ n1 sæ0    Y  d}tjt|d��& tj|dt j 	¡ d� W d   ƒ n1 �s00    Y  d S )N)ç¸…ëQ¸¾?ç¤p=
×£Ð?gš™™™™™©¿çffffffÖ?ç)\�Âõ(Ì?z'Elements of pvals must be non-negative.r9   r0   )Ún_trials)rT  rU  r‚   rV  rW  z Elements of pvals must sum to 1.©rT  rU  rH  rV  rW  z Dimension of `engine` must be 1.r   ©rz   )rX  rÓ   ú"`engine` must be an instance of...)
r%   r&   r>   r?   r@   r   ÚMultinomialQMCr8  r1   r2   )r'   r0  r  r+   r+   r,   Útest_validations³  s    ,,6z#TestMultinomialQMC.test_validationszignore::UserWarningc                 C   sZ   t j d¡}t  g d¢¡}d}t  || ¡ t¡}tj|||d�}t	| d¡|dd� d S )Nl	   ¡(uý@ÌgPù{-Î rY  r…   ©rX  r{   r   rH   )
r%   r1   r2   r&   Ú
atleast_2drÞ   r/  r   r\  r   )r'   r{   r0  rX  r1  rÓ   r+   r+   r,   Útest_MultinomialBasicDrawÊ  s    z,TestMultinomialQMC.test_MultinomialBasicDrawc                 C   sV   t j d¡}t  g d¢¡}tj|d|d�}| d¡}t|t  |¡ t  |¡dd� d S )Nl	   8X¸7:ct]+Ê¸©C: rY  i    r^  r   rG   rH   )	r%   r1   r2   r&   r   r\  r   r�   r_  )r'   r{   r0  rÓ   Zdrawsr+   r+   r,   Útest_MultinomialDistributionÓ  s
    
z/TestMultinomialQMC.test_MultinomialDistributionc                 C   sx   t  g d¢¡}t|ƒ}tt||dƒdƒ tt||dƒdƒ tt||dƒdƒ tt||dƒdƒ tt||d	ƒ|d
 ƒ d S )N)r‚   çš™™™™™Ù?gÍÌÌÌÌÌÜ?g333333ã?rw   çÍÌÌÌÌÌì?g®Gáz®ï?rD   r¸   r   rb  r   g»aÛ¢ÌÜ?g”Þ7¾öÌÜ?r"   rD   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  g d¢¡}d}t  || ¡ t¡}tjdd|d�}tj	||||d�}t
| d¡|dd� d S )	Nl	   aýFÇkýqñ|Ë‘'x<Õ rY  r…   r   TrÀ   )rX  rÓ   r{   rH   )r%   r1   r2   r&   r_  rÞ   r/  r   r8  r\  r   )r'   r{   r0  rX  r1  Úbase_enginerÓ   r+   r+   r,   Útest_other_engineã  s    
ÿz$TestMultinomialQMC.test_other_engineN)r³   r´   rµ   r]  r>   r¶   Úfilterwarningsr`  ra  rd  rf  r+   r+   r+   r,   rS  ²  s   

	
rS  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%   Úzerosr1   r   rŽ   ©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_transformri  r   rÎ   rj  r   rù   rk  rl  ro  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  g d¢g d¢g¡}t||d
d� t j d¡}tjdd|d�}tjt  d¡d||d�}|jdd�}t  g d¢g d¢g¡}t||d
d� d S )Nl	   q)í*s�yRóM¦@
KÎ r   F©r  rr  r{   rÎ   çƒÛÚÂóÒí¿çLpêÉ»à¿g†U¼‘y¤÷¿gx·²Dgë?rG   rH   r"   )ru  rv  gÀ”�Zº¢?)g#ÚŽ©»rü¿gÎŒ~4œ2í?gÔ»x?n¿°¿rB   TrÀ   )r  rr  rÓ   r{   )	r%   r1   r2   r   rm  rn  r&   r   r8  )r'   r{   rÓ   rp  Úsamples_expectedre  r+   r+   r,   Útest_NormalQMCSeeded  s:    ÿ
ÿÿ
ÿ
þ
ÿ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  g d¢g d¢g¡}t||d
d� d S )Nl	   9e)-%ÿ5ŸZµ%Ö_6Ù r   T)r  r{   rr  rÎ   ç«èÍ<9í¿ç\ÌÏMÙî¿gî˜º+»`Ð?g]‰@õ"i?rG   rH   r"   )ry  rz  g»,D‡ÀÖ?)gÁÈËšX`æ?g�ìõî�7@gaTR' ‰ä¿)r%   r1   r2   r   rm  rn  r&   r   )r'   r{   rÓ   rp  rw  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Ó   rr  r   )r   r8  rm  r%   rn  r1   r   rŽ   )r'   rz   re  rÓ   rp  r+   r+   r,   rf  A  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 ƒsJJ ‚tt  |j	dd�d	 ¡dk ƒslJ ‚d
D ](}t
|d d …|f ƒ\}}|dkspJ ‚qpt  | ¡ ¡}t  |d
 ¡dk s¾J ‚d S )Niº3  r   )r  r{   é   rÎ   r   rŒ   r	  r   ©r   r   rc  ©r%   r1   r2   r   rm  rn  rü   r‘   r  Ústdr	   ÚcovÚ	transpose©r'   r3   rÓ   rp  r‰   r  Úpvalr�  r+   r+   r,   Útest_NormalQMCShapiroJ  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 ƒsLJ ‚tt  |j	dd�d
 ¡d	k ƒsnJ ‚dD ](}t
|d d …|f ƒ\}}|dksrJ ‚qrt  | ¡ ¡}t  |d ¡d	k sÀJ ‚d S )Niê‰ír   Trt  r}  rÎ   r   rŒ   r	  r   r~  rc  r  rƒ  r+   r+   r,   Ú!test_NormalQMCShapiroInvTransformX  s    ÿ"z/TestNormalQMC.test_NormalQMCShapiroInvTransformN)
r³   r´   rµ   rq  rs  rx  r{  rf  r…  r†  r+   r+   r+   r,   rh  ð  s   	rh  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   sÒ  d}t jt|d��( tjdgtjdd�d� W d   ƒ n1 s@0    Y  d}t jt|d��* tjg d¢tjdd�d� W d   ƒ n1 sŒ0    Y  d	}t jt|d��( tjddgtj ¡ d� W d   ƒ n1 sÖ0    Y  d
}t jt|d��, t ddgddgddgg¡ W d   ƒ n1 �s&0    Y  d}t jt|d��, t ddgddgddgg¡ W d   ƒ n1 �sv0    Y  d}t jt|d��* t dgddgddgg¡ W d   ƒ n1 �sÄ0    Y  d S )Nz(Dimension of `engine` must be consistentr9   r   r   rZ  )rÓ   r!   rB   r[  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	r>   r?   r@   r   rm  r8  r%   r1   r2   r  r+   r+   r,   r]  j  s$    686<<z*TestMultivariateNormalQMC.test_validationsc                 C   s4   t  g d¢g d¢g d¢g d¢g¡}|jd us0J ‚d S )Nr!   )r   r   r   )r   r   r   )r   r   r   )r   rm  Z_corr_matrixr9  r+   r+   r,   Útest_MultivariateNormalQMCNonPD„  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 g d
¢¡}t g d¢g d¢g d¢g¡}t  ||¡}| ¡ }t|jdƒ |jdd�}t|jdƒ d S )Nr   r   )r  r�  ri  rÎ   rj  r   rù   rk  r|  ©r   r   r   ©r   r   r   ©r   r   r   ©r   r"   ©r   r"   ©r   rm  r1   r   rŽ   r%   r&   ©r'   rÓ   rp  r  r�  r+   r+   r,   Útest_MultivariateNormalQMC‹  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 g d¢¡}t g d¢g d¢g d¢g¡}t j||dd�}| ¡ }t|jdƒ |jdd�}t|jdƒ d S )Nr   r   T)r  r�  rr  ri  rÎ   rj  r   rù   rk  r|  r‰  rŠ  r‹  )rr  rŒ  r�  rŽ  r�  r+   r+   r,   Ú&test_MultivariateNormalQMCInvTransform£  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  g d¢¡|d|d�}|jdd�}t  g d¢g d¢g¡}t	||dd� d S )Nl	   èb·{1/YKë $`øF‡ ©r   r   r   r   F)rr  r{   rÎ   g° ÍX4�ä¿gƒ0º<ì¿gÎ§ŽUÊê?gÏKÅÆ\ @rG   rH   ©r"   r"   r"   r!   )gZhç44æ¿gA-Ó>ô¿gÉZC©½ˆ¶¿)g~TÃ~Oìù?g*Ê¥ño@gc}“EÝ?©
r%   r1   r2   Zstandard_normalr‚  Zdiagr   rm  r&   r   ©r'   r3   r5   ÚArÓ   rp  rw  r+   r+   r,   Ú test_MultivariateNormalQMCSeeded½  s,    
ÿ
ÿ
ÿ
ÿ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  g d¢¡||dd�}|jdd�}t  g d¢g d¢g¡}t	||dd� d S )Nl	   A^ª}�KT0zub‡N¨ r’  r   r   T)r{   rr  rÎ   g�òèFXÔå?gãý¸ýòéÀgRµÝß4¹¿gèO=Ò`å?rG   rH   r“  r"   r!   )go.2žï?gÛikD0Nú¿gÆPN´«ì¿)g4óäšYü¿gÒ«JC�ñ?g„-vû¬2 @r”  r•  r+   r+   r,   Ú,test_MultivariateNormalQMCSeededInvTransformÔ  s,    
ÿ
ÿ
ÿ
ÿ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 ƒsVJ ‚tt  |jdd�d ¡dk ƒsxJ ‚d	D ](}t	|d d …|f ƒ\}}|d
ks|J ‚q|t  
| ¡ ¡}t  |d	 ¡dk sÊJ ‚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J ‚tt  |jdd�t  d¡ ¡dk ƒ�sHJ ‚d	D ],}t	|d d …|f ƒ\}}|d
k�sLJ ‚�qLt  
| ¡ ¡}t  |d	 d ¡dk �s¤J ‚d S )Nl   ¸–ÅVù^�Am%¦2r   r   ©r  r�  r{   r}  rÎ   rŒ   r	  r~  rc  rD   rC   r#   r   r   ©r%   r1   r2   r   rm  rü   r‘   r  r€  r	   r�  r‚  r^   ©r'   r{   rÓ   rp  r‰   r  r„  r�  r+   r+   r,   Ú!test_MultivariateNormalQMCShapiroí  s.    ÿ"ÿ(*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 ƒsXJ ‚tt  |jdd�d ¡d	k ƒszJ ‚d
D ](}t	|d d …|f ƒ\}}|dks~J ‚q~t  
| ¡ ¡}t  |d
 ¡d	k sÌJ ‚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"J ‚tt  |jdd�t  d¡ ¡d	k ƒ�sLJ ‚d
D ],}t	|d d …|f ƒ\}}|dk�sPJ ‚�qPt  
| ¡ ¡}t  |d
 d ¡d	k �s¨J ‚d S )Nl	   A"l7D#maxbwcuòC– r   r   T)r  r�  r{   rr  r}  rÎ   rŒ   r	  r~  rc  rD   rC   r#   r   r   rš  r›  r+   r+   r,   Ú-test_MultivariateNormalQMCShapiroInvTransform  s4    ÿ"ü(*zGTestMultivariateNormalQMC.test_MultivariateNormalQMCShapiroInvTransformc                 C   s’  t j d¡}tjg d¢g d¢g d¢g d¢g|d�}|jdd�}tt  |jd	d
�¡dk ƒs\J ‚t  t  |d d …d	f ¡d ¡dk s„J ‚t  t  |d d …df ¡d ¡dk s¬J ‚t  t  |d d …df ¡t  	d¡ ¡dk sÚJ ‚dD ](}t
|d d …|f ƒ\}}|dksÞJ ‚qÞt  | ¡ ¡}t  |d ¡dk �s.J ‚t  |d d ¡dk �sJJ ‚tt  |d d …d	f |d d …df  |d d …df  ¡dk ƒ�sŽJ ‚d S )Nl	   ì@ÁjŒSÆmÆ-\1:cž# )r¸   r¸   r¸   )rD   r¸   rD   )r¸   rD   rD   )rD   rD   rC   r™  rû   rÎ   r   rŒ   r	  r   r   r|  gš™™™™™é?r~  r÷   r  )r%   r1   r2   r   rm  rü   r‘   r  r€  r^   r	   r�  r‚  r›  r+   r+   r,   Ú$test_MultivariateNormalQMCDegenerate0  s(    ý((.6ÿz>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerateN)r³   r´   rµ   r]  rˆ  r�  r‘  r—  r˜  rœ  r�  rž  r+   r+   r+   r,   r‡  h  s    #r‡  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`J ‚||k slJ ‚|}|}|}q4d S )Ni§� r   r   )é€   r   )rå   rB   )Úmaxiter)r%   r1   ZRandomStateÚuniformr   rJ  r†   r   )	r'   r3   r4   Zbase_l1Zbase_l2r  Zsample_lloydZcurr_l1Zcurr_l2r+   r+   r,   Ú
test_lloydI  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  ||¡rNJ ‚dS )zƒ
        Verify that the input samples are not mutated in place and that they do
        not share memory with the output.
        r‚   rK  r  N)r%   r&   Úcopyr   r   Zmay_share_memory)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��  g d¢}t|ƒ W d   ƒ n1 s40    Y  d}t jt|d��( dgdgdgg}t|ƒ W d   ƒ n1 s~0    Y  d}t jt|d��. d	dgd
dgddgg}t|ƒ W d   ƒ n1 sÎ0    Y  d S )Nz`sample` is not a 2D arrayr9   r;   z`sample` dimension is not >= 2r   rb  r   z!`sample` is not in unit hypercubegš™™™™™ñ¿r‚   r   )r>   r?   r@   r   )r'   r4   rÕ   r+   r+   r,   Útest_lloyd_errorsp  s    &&zTestLloyd.test_lloyd_errorsN)r³   r´   rµ   r£  r¥  r¦  r+   r+   r+   r,   rŸ  H  s   rŸ  c                 C   s   t  | ¡ ¡ S rj   )r   Zpdistrß   r  r+   r+   r,   rJ  �  s    rJ  ).ro   Ú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!  r6  rG  rS  rh  r‡  rŸ  rJ  r+   r+   r+   r,   Ú<module>   s>   (  m&	" )!UKD>x a9