a
    /'a                     @   sF  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 d dl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	QMCEngine)Versionc                   @   sz   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
jeejedk dd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(   9lib/python3.9/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bZscaledZunscaledr(   r(   r)   test_scale_random1   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 s0    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 s0    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 s0    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 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_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   r=   r8          @   L2-star)r"   r#   r   r
   discrepancysqrt)r$   space_1Zspace_2r0   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 s0    Y  d
d
gddgddgg}tjtdd tj|dd W d    n1 s0    Y  d S )Nr   r   r   r   r=   r   r7   r5   r4   r   r   z'toto' is not a valid ...ZtotorM   )r"   r#   r9   r:   r;   r
   rX   )r$   r0   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 )"NrD   rE   rF   rG   rH   rI   rJ   r>   r?   rK   rL   r8   )rN   workersr   rB   rC   rO   rP   rQ   rR   rS   r   r   rW   	cpu_countc                   S   s   d S Nr(   r(   r(   r(   r)   <lambda>       z5TestUtils.test_discrepancy_parallel.<locals>.<lambda>zCannot determine ther5   )r_   zInvalid number of workers...r   )r"   r#   r   r
   rX   rY   setattrosr9   r:   NotImplementedErrorr;   )r$   Zmonkeypatchr0   r[   r\   r(   r(   r)   test_discrepancy_parallel   sB    
.z#TestUtils.test_discrepancy_parallelz1.17z+default_rng not available for numpy, < 1.17)reasonc              	   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 s0    Y  ddgg}tj	t
dd$ t||d d
 | W d    n1 s0    Y  g d}tj	t
dd$ t||d d
 | W d    n1 sB0    Y  d S )Nr   r   r   r   r=   r   r>   r?   r@   r`   T)Z	iterativerA   rB   rC   l	   gy,!uUxFYo9"] )r=   r,   r7   r5   r4   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
   rX   r   r   r-   Zdefault_rngr9   r:   r;   )r$   rZ   Z	disc_initZ	disc_iterrngZdisc_refZx_newr(   r(   r)   test_update_discrepancy   s0    .

<44
4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   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   rm   r   gUUUUUU?r   rn   )rt   ru   rv   rw   rx   Z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   rm   g      ?      ?r   gUUUUUU?rn   rs   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   rm   c                    sH   g | ]@}t  D ]2}td t|ddf |ddf  qqS )r   N)ranger"   rq   Zmaximum).0kjru   rt   r(   r)   
<listcomp>  s   z_TestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2.<locals>.<listcomp>)ro   r"   rY   rp   rq   r~   )rt   rv   r(   r   r)   disc_star_l2  s    
zKTestUtils.test_discrepancy_alternative_implementation.<locals>.disc_star_l2r   r+   r,   rQ   rM   rO   rL   rW   N)r"   r-   r.   r/   r
   rX   r   )r$   ry   rz   r}   r   r0   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 )Nr,   r`         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_primes4  s    zTestUtils.test_primesN)__name__
__module____qualname__r*   r3   r<   r]   r^   rh   r9   markZskipifr   r"   __version__rl   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.   r0   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&   r0   r(   r(   r)   test_van_der_corput_scrambleD  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   O  s    zRandomEngine.__init__r   c                 C   sN   |  j |7  _ z| j|| jf}W n$ tyH   | j|| jf}Y n0 |S rb   )num_generatedrk   r-   r   AttributeErrorZrandom_sample)r$   ru   r0   r(   r(   r)   r-   R  s    zRandomEngine.random)r   )r   r   r   r   r-   __classcell__r(   r(   r   r)   r   N  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sTJ |jdd}t|| |  |jdd |jdd}t|| |jdksJ tj	t
d	d
 td| d W d    n1 s0    Y  d S )Nr   r   r   r   ru   r      r   zd must be an integer valuer5   )r   )r"   r-   r   r   r   resetr   fast_forwardr9   r:   r;   )r.   engineZsample_1Zsample_2Zsample_1_testZsample_2_testr(   r(   r)   test_subclassing_QMCEngine[  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
eedddZeejdd	d
Zejjde	e
ddd Zejjde	e
ddd Zejjde	e
ddd Zejjde	e
ddd Zejjde	e
ddd Zejjde	e
ddd Zejjde	e
ddd Zejjde	e
ddd Zejddgdd ZdS ) QMCEngineTestszGeneric tests for QMC engines.TFZ	ScrambledZUnscrambled)r   returnc                 K   sN   t jd}| jr(| jf ||d|S |r6t  n| jf d|i|S d S )Nr   r   r.   )r"   r-   r   can_scrambleqmcer9   skip)r$   r   kwargsr.   r(   r(   r)   r     s    
zQMCEngineTests.enginec                 C   s   |r
| j S | jS rb   )scramble_ndunscramble_nd)r$   r   r(   r(   r)   	reference  s    zQMCEngineTests.referencer   )idsc                 C   s,   | j d|d}|d}ttd| d S )Nr   r   r   r=   )r=   r   r   r-   r   r"   emptyr$   r   r   r0   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   r-   ro   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sJJ d S )N)r   r   r   r   r   Zdecimal)r   r   r-   lenr   r   )r$   r   
ref_sampler   r0   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   r8   r   r   r   )r   r-   r   r   )r$   r   r   r   Zn_half_r0   r(   r(   r)   test_continuing  s    zQMCEngineTests.test_continuingc                 C   sJ   | j d|d}|jdd}|  |jdks0J |jdd}t|| d S )Nr   r   r8   r   r   )r   r-   r   r   r   )r$   r   r   r   r0   r(   r(   r)   
test_reset  s    zQMCEngineTests.test_resetc                 C   s   | j d|d}|jdd}| j d|d}|d |jdd}t||dd  dd |  g }tdD ]*}|d dkr||  qh|d qht|d	d
 tdD  t|dd d S )Nr   r   r8   r   r=   r   r   r   c                 S   s   g | ]}|d  dkr|qS )r   r   r(   )r   ir(   r(   r)   r     rd   z4QMCEngineTests.test_fast_forward.<locals>.<listcomp>r   )	r   r-   r   r   r   r~   appendr"   Zconcatenate)r$   r   r   r   r0   Z
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   rm   r   r   r      r{   K   r|   )r   r-   r   r"   meanrepeatZ
percentile)r$   r   r   r   r0   r(   r(   r)   test_distribution  s    
z QMCEngineTests.test_distributionN)r   r   r   __doc__NotImplementedr   r   r   r   r   r   boolr   r   r"   Zndarrayr   r9   r   Zparametrizer   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r   w  s6   









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
   Z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   s   t d d S NzNot applicable: not a sequence.r9   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_samplec                 C   s   d\}}t |d | }t |||fj}| j|ddd}|j|d}t j|dd}t|| t ||ksrJ | j|ddd}|j|d}t j|dd}t	||d| d	 t || d| ksJ d S )
N)r=      r   FT)r   r   Zcenteredr   r   rm   rC   )
r"   ZarangeZbroadcast_toTr   r-   sortr   anyr   )r$   r   ru   Z
expected1dexpectedr   r0   Zsorted_sampler(   r(   r)   test_sample_stratified  s    
zTestLHS.test_sample_stratifiedN)r   r   r   r
   Z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   sV   t jtdd4 tjd}tjd|d}|d W d    n1 sH0    Y  d S )N'The balance properties of Sobol' pointsr5   r   r   r   r,   )r9   ZwarnsUserWarningr"   r-   r   r
   Sobolr$   r.   r   r(   r(   r)   test_warning=  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    n1 s0    Y  d S )	Nr   r   Fr   r=   r8   r   r5   )r"   r-   r   r
   r   Zrandom_base2r   r   r9   r:   r;   )r$   r.   r   r0   r(   r(   r)   test_random_base2D  s    

zTestSobol.test_random_base2c                 C   sT   t jd}tjtdd& tjtjjd |d W d    n1 sF0    Y  d S )Nr   z Maximum supported dimensionalityr5   r   r   )	r"   r-   r   r9   r:   r;   r
   r   ZMAXDIM)r$   r.   r(   r(   r)   
test_raiseU  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   Zflattentolistr   )r$   r.   r   Zcount1Zcount2r(   r(   r)   test_high_dim[  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   &  s0   


	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<0    Y  t g d}d}tjt|d t| W d    n1 s0    Y  t g d}t jd}d}tjt|d( tj|tj	d	|d
d W d    n1 s0    Y  d}tjt|d" tj|t jjd W d    n1 s00    Y  d S )N)Q?p=
ף?gffffff?)\(?z'Elements of pvals must be non-negative.r5   )r   r   rj   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#   r9   r:   r;   r
   MultinomialQMCr-   r   r   )r$   pmessager.   r(   r(   r)   test_validationse  s    ((6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
   r  r   )r$   r.   r  r   r   r(   r(   r)   test_MultinomialBasicDraw|  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
   r  r   rp   )r$   r.   r  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)rj   皙?g?g333333?r|   ?gGz?r?   r   r   r  r   gaۢ?g7?r   r?   r   )r"   r#   r   r   r	   )r$   Z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  r  r   Tr   r   r.   r   )r"   r-   r   r#   r
   r   r  r   )r$   r.   r  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
   r  r   r   )r$   r  r.   r   samplesZsamples_resetr(   r(   r)   r     s    

zTestMultinomialQMC.test_resetN)r   r   r   r  r9   r   filterwarningsr
  r  r  r  r   r(   r(   r(   r)   r   d  s   

	

	r   c                  O   s$   | d}tjf dt|i|S )Nr   r   )popr
   MultivariateNormalQMCr"   zeros)r   r   r   r(   r(   r)   _wrapper_mv_qmc  s    
r  c                   @   s$   e Zd ZeZdZdd Zdd ZdS )TestMultivariateNormalQMCEngineFc                 G   s   t d d S r   r   r   r(   r(   r)   r     s    z+TestMultivariateNormalQMCEngine.test_samplec                 G   s   t d d S )Nz&Not applicable: normal is not bounded.r   r   r(   r(   r)   r     s    z+TestMultivariateNormalQMCEngine.test_boundsN)r   r   r   r  r   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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
   r  r  r   ro   r$   r.   r   r  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.   r  r   r   r  r   r   r  r  r   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   r#  r.   r   )	r"   r-   r   r
   r   r  r  r   ro   )r$   r.   r  r   r  r(   r(   r)   r    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   Fr"  r   "10燆Ũk?g̹1gVEr   )r%  r&  g[z4?)g^qN?g2`ygT	&?r"   r-   r   r
   r  r  r#   r   r$   r.   r   r  samples_expectedr(   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|| 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.   r#  r   0:9?|҉SĿgڿgft8?r   )r,  r-  guSk?)gv6{g{>?guOCr'  r(  r(   r(   r)    test_NormalQMCSeededInvTransform  s(    
z.TestNormalQMC.test_NormalQMCSeededInvTransformc                 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 sJ d S )Nr   r   r     r   r   rm   {Gz?r   r   r   r  r"   r-   r   r
   r  r  r   rr   r   stdr   cov	transposer$   r.   r   r  r   r   Zpvalr4  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 sLJ tt |j	ddd
 d	k snJ dD ](}t
|d d |f \}}|dksrJ qrt | }t |d d	k sJ d S )Nr   r   Tr+  r/  r   r   rm   r0  r   r1  r  r2  r6  r(   r(   r)   !test_NormalQMCShapiroInvTransform!  s    "z/TestNormalQMC.test_NormalQMCShapiroInvTransformN)
r   r   r   r!  r$  r  r*  r.  r7  r8  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  t j }d}tjt|d, tjdgtjd|d|d W d    n1 sN0    Y  d}tjt|d( tjddgt jj|d W d    n1 s0    Y  d}tjt|d0 tjddgd	dgdd	gg|d
 W d    n1 s0    Y  d}tjt|d0 tjddgd	dgdd	gg|d
 W d    n1 s>0    Y  d}tjt|d. tjdgd	dgdd	gg|d
 W d    n1 s0    Y  d S )Nz(Dimension of `engine` must be consistentr5   r   r   r   r  r  zCovariance matrix not PSD.r   r   z#Covariance matrix is not symmetric.z/Dimension mismatch between mean and covariance.)	r"   r-   r   r9   r:   r;   r
   r  r   )r$   r.   r  r(   r(   r)   r  3  s(    
$$>@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
   r  Z_corr_matrixr   r(   r(   r)   test_MultivariateNormalQMCNonPDL  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   r4  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   ro   r#   r$   r.   r   r  r   r4  r(   r(   r)   test_MultivariateNormalQMCU  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   r4  r#  r.   r  r   r  r   r   r  r<  r=  r>  r?  r#  r.   r@  rA  rB  rC  r(   r(   r)   &test_MultivariateNormalQMCInvTransformo  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   FrE  r   gb+ggԿgFvg]hx1r   r   )gWдg-@g遏S?)gd j @g?Bngu:?r"   r-   r   r.   Zrandnr5  Zdiagr/   r
   r  r#   r   r$   r.   r1   Ar   r  r)  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   rG  r   r   T)r.   r#  r   giTN?g_@/ܹ0rg~rܿgM ?r   r   )g^?g.^gq?)gd/gJg:q@g
BԃrH  rI  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 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 sJ 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 s*J tt |jddt d dk sTJ d	D ],}t	|d d |f \}}|d
ksXJ qXt 
| }t |d	 d dk sJ d S )Nr   r   r   r;  r/  r   rm   r0  r1  r  r?   r>   r    r   r   r"   r-   r   r
   r  r   rr   r   r3  r   r4  r5  rY   r6  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 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 sJ 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 s.J tt |jddt d d	k sXJ d
D ],}t	|d d |f \}}|dks\J q\t 
| }t |d
 d d	k sJ d S )Nr   r   r   T)r   r4  r.   r#  r/  r   rm   r0  r1  r  r?   r>   r    r   r   rM  r6  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 sJ t t |d d df d dk sJ t t |d d df t 	d dk sJ dD ](}t
|d d |f \}}|dksJ qt | }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 sJ d S )Nr   )r   r   r   )r?   r   r?   )r   r?   r?   )r?   r?   r>   r;  r   r   r   rm   r0  r   r   r<  g?r1  r   gh㈵>)r"   r-   r   r
   r  r   rr   r   r3  rY   r   r4  r5  r6  r(   r(   r)   $test_MultivariateNormalQMCDegenerate  s(    ((.6z>TestMultivariateNormalQMC.test_MultivariateNormalQMCDegenerateN)r   r   r   r  r:  rD  rF  rK  rL  rN  rO  rP  r(   r(   r(   r)   r9  1  s   	 !$r9  )&rf   collectionsr   r9   Znumpyr"   Znumpy.testingr   r   r   r   r   Zscipy.statsr   Zscipy.stats._sobolr	   r
   Zscipy.stats._qmcr   r   r   r   r   Zscipy._lib._pep440r   r   r   r   r   r   r   r   r   r   r  r  r  r9  r(   r(   r(   r)   <module>   s0     *{!>Dx