o
    Ö­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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.ej/ 0d,ej1ej2ej3ej4g¡d-d.„ ƒZ5dS )/é    N)ÚCounter)ÚcombinationsÚproduct)Úassert_allcloseÚassert_equalÚassert_array_equalÚassert_array_less)Údistance)Úshapiro)Ú_test_find_index)Úqmc)Úvan_der_corputÚn_primesÚprimes_from_2_toÚupdate_discrepancyÚ	QMCEngineÚ_l1_normÚ_perturb_discrepancyÚ&_lloyd_centroidal_voronoi_tessellationc                   @   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ÚoutÚscaled_spaceÚboundsÚscaled_back_spacer   r   © r.   úW/var/www/html/CropPilot/venv/lib/python3.10/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î ©é   é
   r3   F)r!   T)r&   ÚrandomÚdefault_rngr   r%   r   )r(   ÚrngÚsampleÚaÚbÚscaledÚunscaledr.   r.   r/   Útest_scale_random4   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w   Y  t jtdd��* 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 sWw   Y  t jtdd��$ ddgd	d	gd
d
gg}g d¢ddg}}tj|||d� W d   ƒ n1 sŠw   Y  t jtdd��* 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Ãw   Y  t jtdd��* 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üw   Y  t jtdd��, 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   ƒ d S 1 �s8w   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=   s>   þýüüüÿ$ýzTestUtils.test_scale_errorsc              
   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  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 ]}t  d|  ¡}ttjt  dg| g¡dd�|ƒ qšd S )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   rG   rB   é   é    é@   úL2-star)r&   r'   r   r   ÚdiscrepancyÚsqrt)r(   Úspace_1Úspace_2r7   Ú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.w   Y  tjtd	d�� t ddg¡ W d   ƒ n1 sLw   Y  d
d
gddgddgg}tjtdd�� tj|dd� W d   ƒ d S 1 svw   Y  d S )Nr   r#   r   r   rG   r   rA   r>   r=   r   r   ú'toto' is not a valid ...ÚtotorX   )r&   r'   rC   rD   rE   r   rc   ©r(   r7   r.   r.   r/   Útest_discrepancy_errors„   s   .ÿýÿ"ÿz!TestUtils.test_discrepancy_errorsc              
   C   s`  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 ]}t  d|  ¡}ttjt  dg| g¡ddd�|ƒ qK| tddd„ ¡ tj	t
dd�� tj|dd� W d   ƒ n1 sŠw   Y  tj	td d�� tj|d!d� W d   ƒ d S 1 s©w   Y  d S )"NrO   rP   rQ   rR   rS   rT   rU   rH   rI   rV   rW   rB   )rY   Úworkersr   rL   rM   rZ   r[   r\   r]   r^   r#   r   rb   éÿÿÿÿÚ	cpu_countc                   S   s   d S ©Nr.   r.   r.   r.   r/   Ú<lambda>¯   s    z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>zCannot determine ther>   ©rn   zInvalid number of workers...r   )r&   r'   r   r   rc   rd   ÚsetattrÚosrC   rD   ÚNotImplementedErrorrE   )r(   Úmonkeypatchr7   rg   rh   r.   r.   r/   Útest_discrepancy_parallel“   sF   
úþþþÿÿÿ"ÿ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.w   Y  tjtd	d�� t ddg¡ W d   ƒ n1 sLw   Y  d
d
gddgddgg}tjtdd�� tj|dd� W d   ƒ n1 suw   Y  t  d
d
gd
d
gd
dgg¡}tjtdd�� t |¡ W d   ƒ n1 sŸw   Y  t  ddgg¡}tjtdd�� t |¡ W d   ƒ d S 1 sÄw   Y  d S )Nr   r#   r   r   rG   r   rA   r>   r=   r   r   rj   rk   rX   z!Sample contains duplicate points.z'Sample must contain at least two points)	r&   r'   rC   rD   rE   r   Úgeometric_discrepancyÚwarnsÚUserWarningrl   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   ÚmstrX   r   ç      è?ç      Ð?rG   Ú	chebyshev)Úmetric)rY   r�   l	   ’sˆ;80øri�R$½� r#   ©Údr6   é2   g–˜Y�$ª?guÚ—¼8É?)	r&   r'   r   r   ry   rd   r4   r5   ÚLatinHypercube)r(   r7   r6   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   r}   rX   r   )r&   r'   r   r   ry   rl   r.   r.   r/   Ú2test_geometric_discrepancy_mst_with_zero_distancesã   s   z<TestUtils.test_geometric_discrepancy_mst_with_zero_distancesc              	   C   sJ  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‹w   Y  tj	t
dd�� t|d
 |d |ƒ W d   ƒ n1 s¬w   Y  ddg}tj	t
dd�� t||d d
… |ƒ W d   ƒ n1 sÑw   Y  ddgg}tj	t
dd�� t||d d
… |ƒ W d   ƒ n1 s÷w   Y  g d¢}tj	t
dd�� t||d d
… |ƒ W d   ƒ d S 1 �sw   Y  d S )Nr   r#   r   r   rG   r   rH   rI   rJ   ro   T)Ú	iterativerK   rL   rM   l	   gy°,!uUx‡FYo9"]µ )rG   r3   rA   r>   r=   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   rc   r   r   r4   r5   rC   rD   rE   )r(   re   Ú	disc_initÚ	disc_iterr6   Údisc_refÚx_newr.   r.   r/   Útest_update_discrepancyë   s:   .

þÿþ
ÿ$þz!TestUtils.test_update_discrepancyc           
      C   s¬   t j d¡}tjd|d�}| d¡}t |¡}tdƒD ]8}| d¡}| d¡}| d¡}t|||||ƒ}|||f |||f |||f< |||f< t |¡}	t	||	ƒ qd S )Nl	   ýPv’W®uW=�lêWêx" r   ©r6   r3   éd   )
r&   r4   r5   r   r…   rc   ÚrangeÚintegersr   r   )
r(   r6   Úqmc_genr7   ÚdiscÚiÚrow_1Úrow_2ÚcolÚ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   ©Úaxisr   gUUUUUUñ?©Úshaper&   ÚsumÚprodÚabs©ÚxÚnÚsÚxijÚdisc1ÚxkjÚ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_wd8  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   r   r�   g      þ?r~   r   gUUUUUUù?rŸ   r¤   r.   r.   r/   Údisc_mdB  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 ]}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>W  s    þ,ÿÿz_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>)r    r&   rd   r¡   r¢   r“   )r¥   r§   r.   r³   r/   Údisc_star_l2R  s   
ÿþýþÿzKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2l	   Áj¤;<Q`sºi—y—õX r1   r\   rX   rZ   rW   rb   N)r&   r4   r5   r   rc   r   )	r(   r¬   r­   r®   rµ   r6   r7   Ú	disc_currÚ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sJ ‚t dƒ}|d dks$J ‚d S )Nr3   ro   é   é¨   iå  i^  i5	  )r   )r(   Úprimesr.   r.   r/   Útest_n_primesp  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_primesz  s   zTestUtils.test_primesN)Ú__name__Ú
__module__Ú__qualname__r0   r<   rF   ri   rm   rx   r|   r†   rC   ÚmarkÚxfailr‰   r�   rœ   r¸   r¼   rÈ   r.   r.   r.   r/   r      s&    	"%#þ
*J
r   c                   @   ó$   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 )	Nr3   )
ç        r   r   r~   ç      À?ç      ä?ç      Ø?ç      ì?g      °?g      â?rG   rs   rB   r½   r#   )Ústart_index©r   r   )r(   r7   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þ r3   T©Úscrambler6   r½   r#   )rÕ   rÙ   r6   rG   )rÕ   rÙ   r6   rn   rB   rÖ   )r(   r6   r*   r7   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   ƒ d S 1 sw   Y  d S )Nz'base' must be at least 2r>   r3   r   )Úbase)rC   rD   rE   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)rƒ   Úoptimizationr6   )ÚsuperÚ__init__)r(   rƒ   rß   r6   ©Ú	__class__r.   r/   rá   §  s   zRandomEngine.__init__r   rs   c                C   s   | j  || jf¡}|S rq   )r6   r4   rƒ   )r(   r¦   rn   r7   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sJ ‚|  ¡  | jdks$J ‚| jdd�}t||ƒ |  ¡  | jdd� | jdd�}t||ƒ | jdksKJ ‚d S )	Nr   l	   šF,@IY^ä+Geƒ r‘   r   ©r¦   r½   é   r   )rÞ   r4   Únum_generatedÚresetr   Úfast_forward)ÚengineÚsample_1Úsample_2Úsample_1_testÚ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w   Y  t jtdd�� tdƒ W d   ƒ n1 s1w   Y  d} t jt| d�� tdƒ}|jddd� W d   ƒ d S 1 sVw   Y  d S )	Nz d must be a non-negative integerr>   )r   ro   z*'u_bounds' and 'l_bounds' must be integersr   gš™™™™™ñ?r   )rC   rD   rE   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‘   r3   ræ   r   Úint64T)r¦   Úendpointéûÿÿÿr½   é   F©r   r¦   rô   r’   )rÞ   r”   r   r&   ÚuniqueÚdtyperé   r4   ÚfloorÚastyperó   ÚminÚmax)rë   r7   Ú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 )Nr3   l	   G]	#0¦m$avâe rõ   ro   )rþ   rÿ   Úsizer   r   T)rþ   rÿ   r  rô   r‘   r’   Fr÷   r   r�   )r&   r4   r5   r”   rÞ   r   rü   rý   )rƒ   r6   rþ   rÿ   rë   r7   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-dedefd	d
„Zdedejf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.TFÚ	ScrambledÚUnscrambledì	   \v$PdËv†uL2+C€ rÙ   Úreturnc                 K   s@   | j r| jd||dœ|¤ŽS |rt ¡  d S | jdd|i|¤ŽS )N)rÙ   Úseedr	  r.   )Úcan_scrambleÚqmcerC   Úskip)r(   rÙ   r6   Úkwargsr.   r.   r/   rë     s
   zQMCEngineTests.enginec                 C   s   |r| j S | jS rq   )Úscramble_ndÚunscramble_nd)r(   rÙ   r.   r.   r/   Ú	reference   s   zQMCEngineTests.reference)Úidsc                 C   ó,   | j d|d�}| d¡}tt d¡|ƒ d S )Nr   ©rƒ   rÙ   rG   )rG   r   ©rë   r4   r   r&   Úempty©r(   rÙ   rë   r7   r.   r.   r/   Ú	test_0dim#  ó   
zQMCEngineTests.test_0dimc                 C   r  )Nr   r  r   ©r   r   r  r  r.   r.   r/   Útest_0sample)  r  zQMCEngineTests.test_0samplec                 C   s*   | j d|d�}| d¡}d|jksJ ‚d S )Nr   r  r   ©r   r   )rë   r4   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ë   r4   r&   Úallr  r.   r.   r/   Útest_bounds5  s   
zQMCEngineTests.test_boundsc                 C   sN   | j |d�}| jd|d�}|jt|ƒd�}t||dd� |jt|ƒks%J ‚d S )N©rÙ   r   r  ræ   r‹   rM   )r  rë   r4   Úlenr   rè   )r(   rÙ   r   rë   r7   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  rB   ræ   r‹   rM   )rë   r4   r!  r   )r(   rÙ   rë   r   Ún_halfÚ_r7   r.   r.   r/   Útest_continuingE  s   zQMCEngineTests.test_continuingr6   Nc                 C   sL   | j d||d�}|jdd�}| ¡  |jdksJ ‚|jdd�}t||ƒ d S )Nr   ©rƒ   rÙ   r6   rB   ræ   r   )rë   r4   ré   rè   r   )r(   rÙ   r6   rë   r   r7   r.   r.   r/   Ú
test_resetR  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rD| | ¡ ¡ q4| d	¡ q4t|d
d„ tdƒD ƒ t |¡dd� d S )Nr   r  rB   ræ   rG   r‹   rM   r   r   c                 S   s   g | ]
}|d  dkr|‘qS )r   r   r.   )r°   r—   r.   r.   r/   r´   z  s    z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>çñhãˆµøä>)	rë   r4   rê   r   ré   r“   Úappendr&   Úconcatenate)r(   rÙ   rë   r   r7   Ú
even_drawsr—   r.   r.   r/   Útest_fast_forwarde  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„?rM   é   r   éK   r~   )rë   r4   r   r&   ÚmeanÚrepeatÚ
percentile)r(   rÙ   rƒ   rë   r7   r.   r.   r/   Útest_distribution  s   
ÿÿ
ÿz QMCEngineTests.test_distributionc                 C   sH   d}t jt|d�� | jdddd� W d   ƒ d S 1 sw   Y  d S )Nz)'toto' is not a valid optimization methodr>   r   Frk   ©rƒ   rÙ   rß   )rC   rD   rE   rë   ©r(   Úmessager.   r.   r/   Útest_raises_optimizerŽ  s   "ÿz$QMCEngineTests.test_raises_optimizerzoptimization,metricú	random-CDÚlloydc                 C   s
   t | ƒ S rq   )r   ©r7   r.   r.   r/   rr   —  s   
 zQMCEngineTests.<lambda>c           	      C   sV   | j ddd�}|jdd�}||ƒ}| j dd|d�}|jdd�}||ƒ}||k s)J ‚d S )Nr   Fr  ra   ræ   r4  )rë   r4   )	r(   rß   r�   rë   Ú
sample_refÚ
metric_refÚoptimal_Úsample_Ú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 s:w   Y  tjtdd�� t	|d	 |d ƒ W d   ƒ d S 1 s[w   Y  d S )Nl	    B©û"V6ÿD¾GlUN¢ r#   r   Tr&  rG   zArrays are not equalr>   r   r   )
r&   r4   r5   r“   rë   r)  rC   rD   ÚAssertionErrorr   )r(   r6   r7   r—   rë   r.   r.   r/   Útest_consume_prng_state¤  s   ÿ"ÿz&QMCEngineTests.test_consume_prng_state)r  )$rÉ   rÊ   rË   Ú__doc__ÚNotImplementedr  r
  r  r  rÙ   r  Úboolr   rë   r&   Úndarrayr  rC   rÌ   Úparametrizer  r  r  r  r"  r%  r4   r5   r'  r,  r3  r7  r   rc   r@  rB  r.   r.   r.   r/   r    sb    þÿ
ü






ýþ



þþ
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Ø–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  rB   )r¦   rn   gü©ñÒMbP?rM   r3   rs   )r  rë   r4   r!  r   ré   r”   r   )r(   r   rë   r7   r.   r.   r/   Útest_workersÃ  s   
zTestHalton.test_workersN)rÉ   rÊ   rË   r   ÚHaltonr  r
  r&   r'   r  r  rI  r.   r.   r.   r/   rH  ±  s$    ý
ù	rH  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   ó   t  d¡ d S ©NzNot applicable: not a sequence.©rC   r  ©r(   Úargsr.   r.   r/   r%  Ö  ó   zTestLHS.test_continuingc                 G   rL  rM  rN  rO  r.   r.   r/   r,  Ù  rQ  zTestLHS.test_fast_forwardc                 G   rL  ©NzJNot applicable: the value of reference sample is implementation dependent.rN  rO  r.   r.   r/   r"  Ü  rQ  zTestLHS.test_sampleÚstrengthr   r   rÙ   Frß   Nr8  c                 C   s\  t j d¡}d}|d }d}tj|||||d�}|j|d�}	|	j||fks'J ‚|j|ks.J ‚t  |¡d | }
t  |
||f¡j	}t  
|	|k¡sIJ ‚t j|	dd	�}|rVd| nd}t|||d
� t  
|	| |k¡sjJ ‚|dkr¨|d u rªt  |¡}tt||ƒƒ}tt|jƒdƒD ]%\}}|	d d …||gf }||  t¡}dd„ |D ƒ}t||ƒ q†d S d S d S )Nl	   pIrtS"×M¿d@B r   r   r   )rƒ   rÙ   rS  rß   r6   ræ   r   r   r�   rM   c                 S   s   h | ]}t |ƒ’qS r.   )Útuple)r°   Úrowr.   r.   r/   Ú	<setcomp>  s    z1TestLHS.test_sample_stratified.<locals>.<setcomp>)r&   r4   r5   r   r…   r    rè   ÚarangeÚbroadcast_toÚTÚanyÚsortr   Úsetr   r   r“   rƒ   rû   Úintr   )r(   rß   rÙ   rS  r6   Úpr¦   rƒ   rë   r7   Ú
expected1dÚexpectedÚsorted_sampleÚtolÚunique_elementsÚdesiredr—   r²   Ú
samples_2dÚresÚres_setr.   r.   r/   Útest_sample_stratifiedà  s:   ý
ø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  ra   ræ   r8  r4  )rë   r4   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 sw   Y  d}t jt|d�� tjddd�}| d	¡ W d   ƒ n1 s@w   Y  d}t jt|d�� tjddd�}| d
¡ W d   ƒ n1 sew   Y  d}t jt|d�� tjd
dd�}| d¡ W d   ƒ d S 1 s‹w   Y  d S )Nznot a valid strengthr>   r   r#   )rS  z%n is not the square of a prime numberr   )rƒ   rS  r_   r   zn is too small for dé	   )rC   rD   rE   r   r…   r4   )r(   r6  rë   r.   r.   r/   rò     s&   ÿþþ"þzTestLHS.test_raises)rÉ   rÊ   rË   r   r…   r  r
  r%  r,  r"  rC   rÌ   rG  rh  ri  rò   r.   r.   r.   r/   rK  Ò  s    %
rK  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   sH   t jtdd�� t d¡}| d¡ W d   ƒ d S 1 sw   Y  d S )Nú'The balance properties of Sobol' pointsr>   r   r3   )rC   rz   r{   r   ÚSobolr4   ©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   ƒ d S 1 s=w   Y  d S )Nr   Fr   rG   rB   rl  r>   )r   rm  Úrandom_base2r   r  rC   rD   rE   ©r(   rë   r7   r.   r.   r/   Útest_random_base2D  s   

"þzTestSobol.test_random_base2c                 C   s‚   t jtdd�� t tjjd ¡ W d   ƒ n1 sw   Y  t jtdd�� tjddd� W d   ƒ d S 1 s:w   Y  d S )Nz Maximum supported dimensionalityr>   r   zMaximum supported 'bits' is 64éA   )Úbits)rC   rD   rE   r   rm  ÚMAXDIMrÜ   r.   r.   r/   Ú
test_raiseR  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   rm  r   r4   ÚflattenÚtolistr   )r(   rë   Úcount1Úcount2r.   r.   r/   Útest_high_dim[  s
   zTestSobol.test_high_dimrt  r   r#   c                 C   sr   t jdd|d�}d| }| |¡}t| jd |… |ƒ tjtdd�� | ¡  W d   ƒ d S 1 s2w   Y  d S )Nr   F©rÙ   rt  zincreasing `bits`r>   )r   rm  r4   r   r  rC   rD   rE   )r(   rt  rë   Únsr7   r.   r.   r/   Ú	test_bitsb  s   

"ÿzTestSobol.test_bitsc                 C   s*   t jdddd�}| d¡}t| j|ƒ d S )Nr   Fra   r|  rB   )r   rm  r4   r   r  rq  r.   r.   r/   Útest_64bitsl  s   
zTestSobol.test_64bitsN)rÉ   rÊ   rË   r   rm  r  r
  r&   r'   r  r  ro  rr  rv  r{  rC   rÌ   rG  r~  r  r.   r.   r.   r/   rk  '  s8    
ù

ù		
	rk  c                   @   sÐ   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ej dg d¢g d¢g¡dd„ ƒZej dg d¢g d¢g¡dd„ ƒZdd„ Zej dg d¢ddgg¡ej dddgg¡dd„ ƒƒZdd„ Zd S )!ÚTestPoissonFc                 G   rL  )NzToo costly in memory.rN  rO  r.   r.   r/   r  v  rQ  zTestPoisson.test_boundsc                 G   rL  )Nz"Not applicable: recursive process.rN  rO  r.   r.   r/   r,  y  rQ  zTestPoisson.test_fast_forwardc                 G   rL  rR  rN  rO  r.   r.   r/   r"  |  rQ  zTestPoisson.test_samplec                 G   sª   d}d}| j d|dd�}|j|d�}t|ƒ|ksJ ‚t|ƒ|ks"J ‚|j|d�}t|ƒ|ks0J ‚t|ƒ|ks8J ‚tj||gdd�}t|ƒ|d ksKJ ‚t|ƒ|ksSJ ‚d S )	Nçš™™™™™©?r   r   F)rƒ   ÚradiusrÙ   ræ   r   r�   )rë   r4   r!  Úl2_normr&   r*  )r(   rP  r‚  r}  rë   Úsample_initÚsample_continuedr7   r.   r.   r/   r%  €  s   zTestPoisson.test_continuingc                 C   sš   t j d¡}d}d\}}|| | d¡ | }g d¢}ddg}t|||ƒ}|D ]#\}	}
}| j|	|
||d�}| |¡}t|ƒ|ksBJ ‚t|ƒ|
ksJJ ‚q'd S )	Nl	   ïx¼_Ù4ê÷vZ.c r„   )g{®Gáz´?çš™™™™™É?r   )r   r#   rG   ÚvolumeÚsurface)rƒ   r‚  Úhyperspherer6   )r&   r4   r5   r   r  r!  rƒ  )r(   r6   r}  rþ   rÿ   ÚradiiÚ
dimensionsÚhypersphere_methodsÚgenrƒ   r‚  r‰  rë   r7   r.   r.   r/   Útest_mindist“  s   ÿ
ùzTestPoisson.test_mindistc                 C   s.   d}| j d|d�}| ¡ }t|ƒ|ksJ ‚d S )Nr†  r   )rƒ   r‚  )r  Ú
fill_spacerƒ  )r(   r‚  rë   r7   r.   r.   r/   Útest_fill_space¨  s   zTestPoisson.test_fill_spacer   ©ro   r   ro   )r   r   r   c                 C   sJ   d}g d¢}| j d|||d�}| d¡}|D ]}t||ƒ t||ƒ qd S )Nr†  )r#   r#   r   r#   ©rƒ   r‚  r   r   r2   ©r  r4   r   )r(   r   r‚  r   rë   r7   Úpointr.   r.   r/   Útest_sample_inside_lower_bounds°  ó   ÿ

þz+TestPoisson.test_sample_inside_lower_boundsr   c                 C   sJ   d}g d¢}| j d|||d�}| d¡}|D ]}t||ƒ t||ƒ qd S )Nr†  )éýÿÿÿr—  r   r#   r’  r2   r“  )r(   r   r‚  r   rë   r7   r”  r.   r.   r/   Útest_sample_inside_upper_bounds½  r–  z+TestPoisson.test_sample_inside_upper_boundsc                 C   sZ   d}g d¢}g d¢}t jtdd�� | jd|||d� W d   ƒ d S 1 s&w   Y  d S )Nr†  )r#   r   r   r‘  z1Bounds are not consistent 'l_bounds' < 'u_bounds'r>   r#   r’  ©rC   rD   rE   r  )r(   r‚  r   r   r.   r.   r/   Útest_inconsistent_bound_valueÊ  s   þ"ýz)TestPoisson.test_inconsistent_bound_valuero   r   r#   r   c                 C   sJ   d}t jtdd�� | jd|||d� W d   ƒ d S 1 sw   Y  d S )Nr†  zP'l_bounds' and 'u_bounds' must be broadcastable and respect the sample dimensionr>   r#   r’  r™  )r(   r   r   r‚  r.   r.   r/   Útest_inconsistent_boundsÓ  s   þþ"üz$TestPoisson.test_inconsistent_boundsc                 C   sF   d}t jt|d�� tjddd� W d   ƒ d S 1 sw   Y  d S )Nz*'toto' is not a valid hypersphere samplingr>   r   rk   )r‰  )rC   rD   rE   r   ÚPoissonDiskr5  r.   r.   r/   rò   à  s   "ÿzTestPoisson.test_raisesN)rÉ   rÊ   rË   r   rœ  r  r
  r  r,  r"  r%  rŽ  r�  rC   rÌ   rG  r•  r˜  rš  r›  rò   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  g d¢¡}tjtdd�� tj|dd� W d   ƒ n1 s w   Y  t  g d¢¡}d}tjt|d�� tj|dd� W d   ƒ n1 sGw   Y  t  g d¢¡}d	}tjt|d�� tj|dtjd
d�d� W d   ƒ n1 ssw   Y  d}tjt|d�� tj|dt j 	¡ d� W d   ƒ d S 1 s˜w   Y  d S )N)ç¸…ëQ¸¾?ç¤p=
×£Ð?gš™™™™™©¿çffffffÖ?ç)\�Âõ(Ì?z'Elements of pvals must be non-negative.r>   r3   )Ú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'   rC   rD   rE   r   ÚMultinomialQMCrm  r4   r5   )r(   r^  r6  r.   r.   r/   Útest_validationsç  s$   þÿÿ"ÿ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ù{-Î r£  r’   )r¢  r	  r   rM   )
r&   r4   r5   r'   Ú
atleast_2drû   r]  r   r¦  r   )r(   r6   r^  r¢  r`  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: r£  i    )r¢  r6   r   rL   rM   )	r&   r4   r5   r'   r   r¦  r   r¡   r¨  )r(   r6   r^  rë   Ú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ã?r~   çÍÌÌÌÌÌì?g®Gáz®ï?rI   rÐ   r   r¬  r   g»aÛ¢ÌÜ?g”Þ7¾öÌÜ?r#   rI   r   )r&   r'   r!  r   r   )r(   Ú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<Õ r£  r’   r   TrØ   )r¢  rë   r6   rM   )r&   r4   r5   r'   r¨  rû   r]  r   rm  r¦  r   )r(   r6   r^  r¢  r`  Úbase_enginerë   r.   r.   r/   Útest_other_engine  s   
ÿz$TestMultinomialQMC.test_other_engineN)rÉ   rÊ   rË   r§  rC   rÌ   Úfilterwarningsr©  r«  r¯  r±  r.   r.   r.   r/   r�  æ  s    

	
	r�  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   )r0  ©r   r   r   ræ   ©r   r   r   r  ©r   r   ©r   ÚMultivariateNormalQMCr&   Úzerosr4   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)r0  Úinv_transformr´  r   ræ   rµ  r   r  r¶  r·  rº  r.   r.   r/   Útest_NormalQMCInvTransform4  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)r0  r½  r	  ræ   çƒÛÚÂóÒí¿çLpêÉ»à¿g†U¼‘y¤÷¿gx·²Dgë?rL   rM   r#   ©r0  r½  r6   )r¿  rÀ  gÀ”�Zº¢?)g#ÚŽ©»rü¿gÎŒ~4œ2í?gÔ»x?n¿°¿rG   TrØ   )r0  r½  rë   r6   )	r&   r4   r5   r   r¸  r¹  r'   r   rm  )r(   r6   rë   r»  Úsamples_expectedr°  r.   r.   r/   Útest_NormalQMCSeededD  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)r0  r6   r½  ræ   ç«èÍ<9í¿ç\ÌÏMÙî¿gî˜º+»`Ð?g]‰@õ"i?rL   rM   r#   )rÄ  rÅ  g»,D‡ÀÖ?)gÁÈËšX`æ?g�ìõî�7@gaTR' ‰ä¿)r&   r4   r5   r   r¸  r¹  r'   r   )r(   r6   rë   r»  rÂ  r.   r.   r/   Ú test_NormalQMCSeededInvTransformd  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)r0  rë   r½  r   )r   rm  r¸  r&   r¹  r4   r   r    )r(   rƒ   r°  rë   r»  r.   r.   r/   r±  w  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 ƒs%J ‚tt  |j	dd�d	 ¡dk ƒs6J ‚d
D ]}t
|d d …|f ƒ\}}|dksLJ ‚q8t  | ¡ ¡}t  |d
 ¡dk s_J ‚d S )Niº3  r   )r0  r6   é   ræ   r   r�   r-  r   ©r   r   r­  ©r&   r4   r5   r   r¸  r¹  r  r£   r0  Ústdr
   ÚcovÚ	transpose©r(   r6   rë   r»  r—   r$  ÚpvalrÌ  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 ƒs&J ‚tt  |j	dd�d
 ¡d	k ƒs7J ‚dD ]}t
|d d …|f ƒ\}}|dksMJ ‚q9t  | ¡ ¡}t  |d ¡d	k s`J ‚d S )Niê‰ír   TrÁ  rÈ  ræ   r   r�   r-  r   rÉ  r­  rÊ  rÎ  r.   r.   r/   Ú!test_NormalQMCShapiroInvTransformŽ  s   ÿ"z/TestNormalQMC.test_NormalQMCShapiroInvTransformN)
rÉ   rÊ   rË   r¼  r¾  rÃ  rÆ  r±  rÐ  rÑ  r.   r.   r.   r/   r³  %  s     	r³  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 w   Y  d}t jt|d�� tjg d¢tjdd�d� W d   ƒ n1 sFw   Y  d	}t jt|d�� tjddgtj ¡ d� W d   ƒ n1 skw   Y  d
}t jt|d�� t ddgddgddgg¡ W d   ƒ n1 s’w   Y  d}t jt|d�� t ddgddgddgg¡ W d   ƒ n1 s¹w   Y  d}t jt|d�� t dgddgddgg¡ W d   ƒ d S 1 sàw   Y  d S )Nz(Dimension of `engine` must be consistentr>   r   r   r¤  )rë   r"   rG   r¥  zCovariance matrix not PSD.r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	rC   rD   rE   r   r¸  rm  r&   r4   r5   r5  r.   r.   r/   r§     s0   ÿÿÿÿÿ"ÿz*TestMultivariateNormalQMC.test_validationsc                 C   s4   t  g d¢g d¢g d¢g d¢g¡}|jd usJ ‚d S )Nr"   )r   r   r   )r   r   r   )r   r   r   )r   r¸  Ú_corr_matrixrn  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   )r0  rÌ  r´  ræ   rµ  r   r  r¶  rÇ  ©r   r   r   ©r   r   r   ©r   r   r   ©r   r#   ©r   r#   ©r   r¸  r4   r   r    r&   r'   ©r(   rë   r»  r0  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)r0  rÌ  r½  r´  ræ   rµ  r   r  r¶  rÇ  rÕ  rÖ  r×  )r½  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)r½  r6   ræ   g° ÍX4�ä¿gƒ0º<ì¿gÎ§ŽUÊê?gÏKÅÆ\ @rL   rM   ©r#   r#   r#   r"   )gZhç44æ¿gA-Ó>ô¿gÉZC©½ˆ¶¿)g~TÃ~Oìù?g*Ê¥ño@gc}“EÝ?©
r&   r4   r5   Ústandard_normalrÍ  Údiagr   r¸  r'   r   ©r(   r6   r8   ÚArë   r»  rÂ  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)r6   r½  ræ   g�òèFXÔå?gãý¸ýòéÀgRµÝß4¹¿gèO=Ò`å?rL   rM   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 ƒs+J ‚tt  |jdd�d ¡dk ƒs<J ‚d	D ]}t	|d d …|f ƒ\}}|d
ksRJ ‚q>t  
| ¡ ¡}t  |d	 ¡dk seJ ‚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 ƒs¢J ‚d	D ]}t	|d d …|f ƒ\}}|d
ks¸J ‚q¤t  
| ¡ ¡}t  |d	 d ¡dk sÍJ ‚d S )Nl   ¸–ÅVù^�Am%¦2r   r   ©r0  rÌ  r6   rÈ  ræ   r�   r-  rÉ  r­  rI   rH   r$   r   r   ©r&   r4   r5   r   r¸  r  r£   r0  rË  r
   rÌ  rÍ  rd   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 ƒs,J ‚tt  |jdd�d ¡d	k ƒs=J ‚d
D ]}t	|d d …|f ƒ\}}|dksSJ ‚q?t  
| ¡ ¡}t  |d
 ¡d	k sfJ ‚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 ƒs¤J ‚d
D ]}t	|d d …|f ƒ\}}|dksºJ ‚q¦t  
| ¡ ¡}t  |d
 d ¡d	k sÏJ ‚d S )Nl	   A"l7D#maxbwcuòC– r   r   T)r0  rÌ  r6   r½  rÈ  ræ   r�   r-  rÉ  r­  rI   rH   r$   r   r   rè  rÎ  r.   r.   r/   Ú-test_MultivariateNormalQMCShapiroInvTransformC  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 sBJ ‚t  t  |d d …df ¡d ¡dk sVJ ‚t  t  |d d …df ¡t  	d¡ ¡dk smJ ‚dD ]}t
|d d …|f ƒ\}}|dksƒJ ‚qot  | ¡ ¡}t  |d ¡dk s–J ‚t  |d d ¡dk s£J ‚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Ð   )rI   rÐ   rI   )rÐ   rI   rI   )rI   rI   rH   rç  r  ræ   r   r�   r-  r   r   rÇ  gš™™™™™é?rÉ  r  r(  )r&   r4   r5   r   r¸  r  r£   r0  rË  rd   r
   rÌ  rÍ  rÎ  r.   r.   r/   Ú$test_MultivariateNormalQMCDegeneratef  s(   ý((.6ÿz>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerateN)rÉ   rÊ   rË   r§  rÔ  rÜ  rÝ  rå  ræ  ré  rê  rë  r.   r.   r.   r/   rÒ  ž  s     #rÒ  c                   @   rÎ   )Ú	TestLloydc           	      C   s~   t j d¡}|jdddd�}t|ƒ}t|ƒ}tdƒD ]"}t|dd�}t|ƒ}t|ƒ}||k s0J ‚||k s6J ‚|}|}|}qd S )Ni§� r   r   )é€   r   )r  rG   )Úmaxiter)r&   r4   ÚRandomStateÚuniformr   rƒ  r“   r   )	r(   r6   r7   Úbase_l1Úbase_l2r$  Úsample_lloydÚcurr_l1Ú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  ||¡r'J ‚dS )zƒ
        Verify that the input samples are not mutated in place and that they do
        not share memory with the output.
        r‹   r†  r:  N)r&   r'   Úcopyr   r   Úmay_share_memory)r(   Úsample_origÚsample_copyÚ
new_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 sw   Y  d}t jt|d�� dgdgdgg}t|ƒ W d   ƒ n1 s?w   Y  d}t jt|d�� d	dgd
dgddgg}t|ƒ W d   ƒ d S 1 shw   Y  d S )Nz`sample` is not a 2D arrayr>   r@   z`sample` dimension is not >= 2r   r¬  r   z!`sample` is not in unit hypercubegš™™™™™ñ¿r‹   r   )rC   rD   rE   r   )r(   r7   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 rq   )r	   Úpdistrü   r:  r.   r.   r/   rƒ  ·  rQ  rƒ  rë   c                 C   sü   d}t j |¡}| d|d� d¡}t j |¡}| d|d� d¡}t||ƒ t j |¡}| d|d� d¡}| d|d� d¡}t||ƒ t j |¡}| d|d� d¡}t||ƒ t||ƒ d}tjt|d�� | d||d� W d   ƒ d S 1 sww   Y  d S )	Nl   Ø7P r   )rƒ   r	  rG   r‚   z3got multiple values for argument now known as `rng`r>   )rƒ   r6   r	  )r&   r4   rï  r   r5   rC   rD   Ú	TypeError)rë   Úseed_numberr6   Úres1Úres2Úres3r6  r.   r.   r/   Útest_deterministic»  s$   



"ÿr  )6ru   Úcollectionsr   Ú	itertoolsr   r   rC   Únumpyr&   Únumpy.testingr   r   r   r   Úscipy.spatialr	   Úscipy.statsr
   Úscipy.stats._sobolr   r   Úscipy.stats._qmcr   r   r   r   r   r   r   r   r   rÏ   rÞ   rð   rò   r  r  r  rH  rK  rk  r€  r�  r³  rÒ  rì  rƒ  rÌ   rG  rJ  rm  r…   rœ  r  r.   r.   r.   r/   Ú<module>   sH    (  m&	" ,!UKt?y a9ÿ