o
    Ge/                     @   s:  d dl Z d dlmZ d dlZd dlZd dlmZ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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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Zdd Z G dd deZ!G dd dZ"G d d! d!Z#dS )"    N)Counter)assert_allcloseassert_almost_equalassert_equalassert_array_almost_equalassert_array_equal)shapiro)_test_find_index)qmc)van_der_corputn_primesprimes_from_2_toupdate_discrepancy	QMCEnginec                   @   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
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)   d/var/www/html/SPIRAL.web.tool/spiral_venv/lib/python3.10/site-packages/scipy/stats/tests/test_qmc.py
test_scale   s$   


zTestUtils.test_scalec                 C   sn   t jd t jdd}t jd d }t jdd }tj|||dd}tj|||dd}t|| d S )Nr      
   F)r   T)r!   randomseedrandr
   r    r   )r#   sampleabscaledunscaledr)   r)   r*   test_scale_random0   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 sw   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 sw   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 sw   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 consistent a < br   r   r   r   z=shape mismatch: objects cannot be broadcast to a single shape)r   r   r   z3Sample dimension is different than bounds dimension)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_errors9   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| qd 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   r@   r;          @   L2-star)r!   r"   r   r
   discrepancysqrt)r#   space_1space_2r1   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   r@   r   r:   r8   r7   r   r   z'toto' is not a valid ...totorQ   )r!   r"   r<   r=   r>   r
   r\   )r#   r1   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 sw   Y  tj	td d tj|d!d W d    d S 1 sw   Y  d S )"NrH   rI   rJ   rK   rL   rM   rN   rA   rB   rO   rP   r;   )rR   workersr   rE   rF   rS   rT   rU   rV   rW   r   r   r[   	cpu_countc                   S   s   d S Nr)   r)   r)   r)   r*   <lambda>   s    z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>zCannot determine ther8   )re   zInvalid number of workers...r   )r!   r"   r   r
   r\   r]   setattrosr<   r=   NotImplementedErrorr>   )r#   monkeypatchr1   r`   ra   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}d| d d	 }tj|d d
 dd}t|d
 |d d
 |}t|d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 sw   Y  ddgg}tjtdd t||d d
 | W d    n1 sw   Y  g d}tjtdd t||d d
 | W d    d S 1 sw   Y  d S )Nr   r   r   r   r@   r   rA   rB   rC   rf   T)	iterativerD   rE   rF   r:   r8   r7   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   r<   r=   r>   )r#   r^   	disc_init	disc_iterx_newr)   r)   r*   test_update_discrepancy   s2   .
"z!TestUtils.test_update_discrepancyc                 C   s   dd }dd }dd }dd }t j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   ru   r   gUUUUUU?r   rw   )r}   r~   r   r   r   discr)   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   ru   g      ?      ?r   gUUUUUU?rw   r|   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   ru   c                    sH   g | ] }t  D ]}td t|ddf |ddf  qqS )r   N)ranger!   rz   maximum).0kjr~   r}   r)   r*   
<listcomp>  s    ,z_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>)rx   r!   r]   ry   rz   r   )r}   r   r)   r   r*   disc_star_l2   s   
zKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2r   r,   r-   rU   rQ   rS   rP   r[   N)r!   r.   r/   r0   r
   r\   r   )r#   r   r   r   r   r1   	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 )Nr-   rf         i  i^  i5	  )r   )r#   primesr)   r)   r*   test_n_primes  s   zTestUtils.test_n_primesc                 C   s   t d}g d}t|| d S )N2   )r   r   r                     r      %   )   +   /   )r   r   )r#   r   r%   r)   r)   r*   test_primes'  s   zTestUtils.test_primesN)__name__
__module____qualname__r+   r6   r?   rb   rd   rn   rt   r   r   r   r)   r)   r)   r*   r      s    	$%# I
r   c                   @   s   e Zd Zdd Zdd ZdS )TestVDCc                 C   sN   t jd}td|d}g d}t|| tdd|d}t||dd   d S )N90  r-   r/   )
        r   r   r         ?      ?      ?      ?g      ?g      ?r   r   )start_indexr/   r!   r.   RandomStater   r   )r#   r/   r1   r%   r)   r)   r*   test_van_der_corput.  s   
zTestVDC.test_van_der_corputc                 C   sL   t jd}tdd|d}t jd}tddd|d}t||dd   d S )N@ r-   Tscrambler/   r   r   )r   r   r/   r   )r#   r/   r%   r1   r)   r)   r*   test_van_der_corput_scramble7  s   z$TestVDC.test_van_der_corput_scrambleN)r   r   r   r   r   r)   r)   r)   r*   r   -  s    	r   c                       s&   e Zd Z fddZdddZ  ZS )RandomEnginec                    s   t  j||d d S )Ndr/   )super__init__)r#   r   r/   	__class__r)   r*   r   B  s   zRandomEngine.__init__r   c                 C   sN   |  j |7  _ z| j|| jf}W |S  ty&   | j|| jf}Y |S w rh   )num_generatedrngr.   r   AttributeErrorrandom_sample)r#   r~   r1   r)   r)   r*   r.   E  s   zRandomEngine.random)r   )r   r   r   r   r.   __classcell__r)   r)   r   r*   r   A  s    r   c                  C   s   t jd} t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sQJ tj	t
d	d
 td| d W d    d S 1 sjw   Y  d S )Nr   r   r   r   r~   r      r   zd must be an integer valuer8   )r   )r!   r.   r   r   r   resetr   fast_forwardr<   r=   r>   )r/   enginesample_1sample_2sample_1_testsample_2_testr)   r)   r*   test_subclassing_QMCEngineN  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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dd Zejjde	e
ddd Zejddgdd ZdS ) QMCEngineTestszGeneric tests for QMC engines.TF	ScrambledUnscrambledr   returnc                 K   sL   t jd}| jr| jd||d|S |rt  d S | jdd|i|S )Nr   r   r/   r)   )r!   r.   r   can_scrambleqmcer<   skip)r#   r   kwargsr/   r)   r)   r*   r   t  s   zQMCEngineTests.enginec                 C   s   |r| j S | jS rh   )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   r@   )r@   r   r   r.   r   r!   emptyr#   r   r   r1   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   r.   rx   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 )Nd   r      r   r   )r   r.   r!   allr   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s%J d S )N)r   r   r   r   r   decimal)r   r   r.   lenr   r   )r#   r   
ref_sampler   r1   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   r   r   )r   r.   r   r   )r#   r   r   r   n_half_r1   r)   r)   r*   test_continuing  s   zQMCEngineTests.test_continuingc                 C   sJ   | j d|d}|jdd}|  |jdksJ |jdd}t|| d S )Nr   r   r;   r   r   )r   r.   r   r   r   )r#   r   r   r   r1   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rD||  q4|d q4t|d	d
 tdD  t|dd d S )Nr   r   r;   r   r@   r   r   r   c                 S   s   g | ]
}|d  dkr|qS )r   r   r)   )r   ir)   r)   r*   r     s    z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>r   )	r   r.   r   r   r   r   appendr!   concatenate)r#   r   r   r   r1   
even_drawsr   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   ru   r   r   r      r   K   r   )r   r.   r   r!   meanrepeat
percentile)r#   r   r   r   r1   r)   r)   r*   test_distribution  s   

z QMCEngineTests.test_distributionN)r   r   r   __doc__NotImplementedr   r   r   r   r   r   boolr   r   r!   ndarrayr   r<   markparametrizer   r   r   r   r   r   r   r   r   r)   r)   r)   r*   r   j  s8    









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!S )"
TestHaltonTr   r   gUUUUUU?r   gUUUUUU?r   gqq?r   gqq?r   g98?r   gqq?r   grq?gݵ D,?g?gZ "?g,D?gkX?g^-wfB?gZ "?g)?gݵ D,?g뢮?gZ "?g(2l?g bA?gNZ?gZ "?gWB%?N)r   r   r   r
   Haltonr   r   r!   r"   r   r   r)   r)   r)   r*   r    s"    

r  c                   @   s6   e Zd ZejZdZdd Zdd Zdd Z	dd	 Z
d
S )TestLHSFc                 G      t d d S NzNot applicable: not a sequence.r<   r   r#   argsr)   r)   r*   r        zTestLHS.test_continuingc                 G   r  r  r	  r
  r)   r)   r*   r     r  zTestLHS.test_fast_forwardc                 G   r  NzJNot applicable: the value of reference sample is implementation dependent.r	  r
  r)   r)   r*   r     r  zTestLHS.test_samplec                 C   s   d\}}t |d | }t |||fj}| j|ddd}|j|d}t j|dd}t|| t ||ks9J | j|ddd}|j|d}t j|dd}t	||d| d	 t || d| ksdJ d S )
N)r@      r   FT)r   r   centeredr   r   ru   rF   )
r!   arangebroadcast_toTr   r.   sortr   anyr   )r#   r   r~   
expected1dexpectedr   r1   sorted_sampler)   r)   r*   test_sample_stratified  s   
zTestLHS.test_sample_stratifiedN)r   r   r   r
   LatinHypercuber   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d"S )#	TestSobolTr   r   r   r   r   r   r   r   g@F?gt?g:(8?gB䟕?gY.?gX-?gO?g_dz?gnyz?gk=l?g?g.zn?gH	 
?g9<(?gT`?g-m?c                 C   sX   t jtdd tjd}tjd|d}|d W d    d S 1 s%w   Y  d S )N'The balance properties of Sobol' pointsr8   r   r   r   r-   )r<   warnsUserWarningr!   r.   r   r
   Sobolr#   r/   r   r)   r)   r*   test_warning0  s
   "zTestSobol.test_warningc                 C   s   t jd}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 sDw   Y  d S )	Nr   r   Fr   r@   r;   r  r8   )r!   r.   r   r
   r  random_base2r   r   r<   r=   r>   )r#   r/   r   r1   r)   r)   r*   test_random_base27  s   

"zTestSobol.test_random_base2c                 C   sV   t jd}tjtdd tjtjjd |d W d    d S 1 s$w   Y  d S )Nr   z Maximum supported dimensionalityr8   r   r   )	r!   r.   r   r<   r=   r>   r
   r  MAXDIM)r#   r/   r)   r)   r*   
test_raiseH  s   "zTestSobol.test_raisec                 C   sl   t jd}tjdd|d}t|   }t|   }t|tddi t|tddi d S )Nr   iW  Fr   r   r   )	r!   r.   r   r
   r  r   flattentolistr   )r#   r/   r   count1count2r)   r)   r*   test_high_dimN  s   zTestSobol.test_high_dimN)r   r   r   r
   r  r   r   r!   r"   r   r   r   r"  r$  r)  r)   r)   r)   r*   r    s2    


	r  c                   @   sT   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d ZdS )TestMultinomialQMCc                 C   s>  t g d}tjtdd t| W d    n1 sw   Y  t g d}d}tjt|d t| W d    n1 sCw   Y  t g d}t jd}d}tjt|d tj|tj	d	|d
d W d    n1 suw   Y  d}tjt|d tj|t jjd W d    d S 1 sw   Y  d S )N)Q?p=
ף?gffffff?)\(?z'Elements of pvals must be non-negative.r8   )r+  r,  rp   r-  r.  z Elements of pvals must sum to 1.r+  r,  g?r-  r.  r   z Dimension of `engine` must be 1.r   r   )r   "`engine` must be an instance of...)
r!   r"   r<   r=   r>   r
   MultinomialQMCr.   r   r  )r#   pmessager/   r)   r)   r*   test_validationsX  s&   "z#TestMultinomialQMC.test_validationszignore::UserWarningc                 C   sJ   t jd}t g d}t g d}tj||d}t|d| d S )Nr   r/  r   r   r   #      r   r   )r!   r.   r   r"   r
   r1  r   )r#   r/   r2  r  r   r)   r)   r*   test_MultinomialBasicDrawo  s
   z,TestMultinomialQMC.test_MultinomialBasicDrawc                 C   sN   t jd}t g d}tj||d}|d}t|t | |dd d S )Nr   r/  r   i    r@   r   )r!   r.   r   r"   r
   r1  r   ry   )r#   r/   r2  r   drawsr)   r)   r*   test_MultinomialDistributionw  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)rp   皙?g?g333333?r   ?gGz?rB   r   r   r;  r   gaۢ?g7?r   rB   r   )r!   r"   r   r   r	   )r#   p_cumulativesizer)   r)   r*   test_FindIndex~  s   z!TestMultinomialQMC.test_FindIndexc                 C   s\   t jd}t g d}t g d}tjdd|d}tj|||d}t|d| d S )	Nr   r/  r5  r   Tr   r   r/   r   )r!   r.   r   r"   r
   r  r1  r   )r#   r/   r2  r  base_enginer   r)   r)   r*   test_other_engine  s   z$TestMultinomialQMC.test_other_enginec                 C   sR   t g d}t jd}tj||d}|d}|  |d}t|| d S )Nr/  r   r   r   )r!   r"   r.   r   r
   r1  r   r   )r#   r2  r/   r   samplessamples_resetr)   r)   r*   r     s   

zTestMultinomialQMC.test_resetN)r   r   r   r4  r<   r  filterwarningsr8  r:  r?  rB  r   r)   r)   r)   r*   r*  W  s    


	
	r*  c                  O   s$   | d}tjddt|i|S )Nr   r   r)   )popr
   MultivariateNormalQMCr!   zeros)r  r   r   r)   r)   r*   _wrapper_mv_qmc  s   
rI  c                   @   s$   e Zd ZeZdZdd Zdd ZdS )TestMultivariateNormalQMCEngineFc                 G   r  r  r	  r
  r)   r)   r*   r     r  z+TestMultivariateNormalQMCEngine.test_samplec                 G   r  )Nz&Not applicable: normal is not bounded.r	  r
  r)   r)   r*   r     r  z+TestMultivariateNormalQMCEngine.test_boundsN)r   r   r   rI  r   r   r   r   r)   r)   r)   r*   rJ    s
    rJ  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d}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   r   r!   r.   r   r
   rG  rH  r   rx   r#   r/   r   rC  r)   r)   r*   test_NormalQMC  s   zTestNormalQMC.test_NormalQMCc                 C   s   t jd}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   r   Tr   inv_transformr/   rM  r   r   rN  r   r   rO  rP  rQ  r)   r)   r*   test_NormalQMCInvTransform  s   z(TestNormalQMC.test_NormalQMCInvTransformc                 C   sL   t jd}tjdd|d}tjt d|d|d}| }t|jd d S )Nr   r   F)r   r   r/   T)r   r   rT  r/   r   )	r!   r.   r   r
   r  rG  rH  r   rx   )r#   r/   rA  r   rC  r)   r)   r*   rB    s   zTestNormalQMC.test_other_enginec                 C   s   t jd}tjt dd|d}|jdd}t ddgdd	gg}t|| t jd}tjt d
d|d}|jdd}t g dg dg}t|| d S )Nr   r   FrS  r   "10燆Ũk?g̹1gVEr   )rV  rW  g[z4?)g^qN?g2`ygT	&?r!   r.   r   r
   rG  rH  r"   r   r#   r/   r   rC  samples_expectedr)   r)   r*   test_NormalQMCSeeded  (   
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|| t jd}tjt d
|dd}|jdd}t g dg dg}t|| d S )Nr   r   Tr   r/   rT  r   0:9?|҉SĿgڿgft8?r   )r^  r_  guSk?)gv6{g{>?guOCrX  rY  r)   r)   r*    test_NormalQMCSeededInvTransform  r\  z.TestNormalQMC.test_NormalQMCSeededInvTransformc                 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 )Nr   r   rL     r   r   ru   {Gz?r   r   r   r<  r!   r.   r   r
   rG  rH  r   r{   r   stdr   cov	transposer#   r/   r   rC  r   r   pvalrf  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 )Nr   r   Tr]  ra  r   r   ru   rb  r   rc  r<  rd  rh  r)   r)   r*   !test_NormalQMCShapiroInvTransform  s   "z/TestNormalQMC.test_NormalQMCShapiroInvTransformN)
r   r   r   rR  rU  rB  r[  r`  rj  rk  r)   r)   r)   r*   rK    s    	rK  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  t j }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ddgt jj|d W d    n1 sLw   Y  d}tjt|d tjddgd	dgdd	gg|d
 W d    n1 suw   Y  d}tjt|d tjddgd	dgdd	gg|d
 W d    n1 sw   Y  d}tjt|d tjdgd	dgdd	gg|d
 W d    d S 1 sw   Y  d S )Nz(Dimension of `engine` must be consistentr8   r   r   r   r@  r0  zCovariance matrix not PSD.r   r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	r!   r.   r   r<   r=   r>   r
   rG  r  )r#   r/   r3  r)   r)   r*   r4  &  s2   
"" "z*TestMultivariateNormalQMC.test_validationsc                 C   sD   t jd}tjg dg dg dg dg|d}|jd us J d S )Nr   r   )r   r   r   )r   r   r   )r   r   r   r   )r!   r.   r   r
   rG  _corr_matrixr  r)   r)   r*   test_MultivariateNormalQMCNonPD?  s   z9TestMultivariateNormalQMC.test_MultivariateNormalQMCNonPDc                 C   s   t jd}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j|||d}| }t|jd |jdd}t|jd d S )Nr   r   r   r   rf  r/   rM  r   rN  r   r   rO  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r.   r   r
   rG  r   rx   r"   r#   r/   r   rC  r   rf  r)   r)   r*   test_MultivariateNormalQMCH  s(   z4TestMultivariateNormalQMC.test_MultivariateNormalQMCc                 C   s  t jd}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   r   T)r   rf  rT  r/   rM  r   rN  r   r   rO  rp  rq  rr  rs  rT  r/   rt  ru  rv  rw  r)   r)   r*   &test_MultivariateNormalQMCInvTransformb  s2   

z@TestMultivariateNormalQMC.test_MultivariateNormalQMCInvTransformc                 C   s  t jd}t jd t jdd}||  t t jd }tj	t 
ddg|d|d}|jdd}t 
dd	gd
dgg}t|| t jd}t jd t jdd}||  t t jd }tj	t 
g d|d|d}|jdd}t 
g dg dg}t|| d S )Nr   1  r   r   Fry  r   gb+ggԿgFvg]hx1r   r   )gWдg-@g遏S?)gd j @g?Bngu:?r!   r.   r   r/   randnrg  diagr0   r
   rG  r"   r   r#   r/   r2   Ar   rC  rZ  r)   r)   r*    test_MultivariateNormalQMCSeeded  s4   
z:TestMultivariateNormalQMC.test_MultivariateNormalQMCSeededc                 C   s  t jd}t jd t jdd}||  t t jd }tj	t 
ddg||dd}|jdd}t 
dd	gd
dgg}t|| t jd}t jd t jdd}||  t t jd }tj	t 
g d||dd}|jdd}t 
g dg dg}t|| d S )Nr   r{  r   r   T)r/   rT  r   giTN?g_@/ܹ0rg~rܿgM ?r   r   )g^?g.^gq?)gd/gJg:q@g
Bԃr|  r  r)   r)   r*   ,test_MultivariateNormalQMCSeededInvTransform  s4   
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}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 sJ tt |jddt d dk sJ d	D ]}t	|d d |f \}}|d
ksJ qt 
| }t |d	 d dk sJ d S )Nr   r   r   ro  ra  r   ru   rb  rc  r<  rB   rA   r   r   r   r!   r.   r   r
   rG  r   r{   r   re  r   rf  rg  r]   rh  r)   r)   r*   !test_MultivariateNormalQMCShapiro  s0   "&(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}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 sJ tt |jddt d d	k sJ d
D ]}t	|d d |f \}}|dksJ qt 
| }t |d
 d d	k sJ d S )Nr   r   r   T)r   rf  r/   rT  ra  r   ru   rb  rc  r<  rB   rA   r   r   r   r  rh  r)   r)   r*   -test_MultivariateNormalQMCShapiroInvTransform  s6   "&(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sJ qot | }t |d dk sJ t |d d dk sJ tt |d d d	f |d d df  |d d df  dk sJ d S )Nr   )r   r   r   )rB   r   rB   )r   rB   rB   )rB   rB   rA   ro  r   r   r   ru   rb  r   r   rp  g?rc  r   gh㈵>)r!   r.   r   r
   rG  r   r{   r   re  r]   r   rf  rg  rh  r)   r)   r*   $test_MultivariateNormalQMCDegenerate  s(   ((.6z>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerateN)r   r   r   r4  rn  rx  rz  r  r  r  r  r  r)   r)   r)   r*   rl  $  s    	 !$rl  )$rk   collectionsr   r<   numpyr!   numpy.testingr   r   r   r   r   scipy.statsr   scipy.stats._sobolr	   r
   scipy.stats._qmcr   r   r   r   r   r   r   r   r   r   r  r  r  r*  rI  rJ  rK  rl  r)   r)   r)   r*   <module>   s0      {!>Dx