U
    h                     @   s   d Z ddlmZmZmZ ddlZddlZddlm	Z	 ddl
mZmZ ddlmZmZmZ ddlZdd Zed	d
 Zedd Zedd Zedd ZdS )z
Tests used to verify running PyWavelets transforms in parallel via
concurrent.futures.ThreadPoolExecutor does not raise errors.
    )divisionprint_functionabsolute_importN)partial)assert_array_equalassert_allclose)uses_futuresfuturesmax_workersc                 C   s   t | t |krdS t| |D ]d\}}t|trPt||D ]\}}t|| q:qt|tr|| D ]\}}t|||  qbq dS qdS )NFT)lenzip
isinstancetupler   dictitems)Zcoefs1Zcoefs2Zc1c2a1a2kv r   >/tmp/pip-unpacked-wheel-mu97bu1x/pywt/tests/test_concurrent.py_assert_all_coeffs_equal   s    

r   c                     s   t   t dt ttjtjtjgt	
dt	dt	dgD ]b\}  t| ddd}tdD ]B} fdd	td
D }tjtd}t|||}W 5 Q R X qbqD| }t||d  W 5 Q R X d S )Nignore      haar   waveletlevel
   c                    s   g | ]}   qS r   copy.0_xr   r   
<listcomp>/   s     z'test_concurrent_swt.<locals>.<listcomp>d   r
   )warningscatch_warningssimplefilterFutureWarningr   pywtZswtZswt2Zswtnnponeseyer   ranger	   ThreadPoolExecutorr
   listmapr   )Zswt_func	transformr&   arrsexresultsexpected_resultr   r'   r   test_concurrent_swt#   s    
r>   c                     s   t tjtjtjgtdtdtdgD ]x\}  t| ddd}t	dD ]B} fddt	d	D }t
jtd
}t|||}W 5 Q R X qL| }t||d  q.d S )Nr   r   r      r   r!   c                    s   g | ]}   qS r   r"   r$   r'   r   r   r)   @   s     z+test_concurrent_wavedec.<locals>.<listcomp>r*   r+   r,   )r   r1   ZwavedecZwavedec2Zwavedecnr2   r3   r4   r   r5   r	   r6   r
   r7   r8   r   )Zwavedec_funcr9   r&   r:   r;   r<   r=   r   r'   r   test_concurrent_wavedec8   s    r@   c                     s   t tjtjtjgtdtdtdgD ]z\}  t| dd}t	dD ]B} fddt	dD }t
jtd	}t|||}W 5 Q R X qJ| }t|g|d
 g q.d S )Nr   r   r   )r   r!   c                    s   g | ]}   qS r   r"   r$   r'   r   r   r)   Q   s     z'test_concurrent_dwt.<locals>.<listcomp>r*   r+   r,   )r   r1   ZdwtZdwt2Zdwtnr2   r3   r4   r   r5   r	   r6   r
   r7   r8   r   )Zdwt_funcr9   r&   r:   r;   r<   r=   r   r'   r   test_concurrent_dwtI   s    rA   c               
      s   d } }t j \} |d |d  }tt jtddd|d}tdD ]B} fdd	td
D }tj	t
d}t|||}W 5 Q R X qH| }	t|	|d D ]\}
}t|
|| |d qd S )Ng+=r?   r      z	cmor1.5-1)Zscalesr   Zsampling_periodr!   c                    s   g | ]}   qS r   r"   r$   Zsstr   r   r)   b   s     z'test_concurrent_cwt.<locals>.<listcomp>2   r+   r,   )atolrtol)r1   dataZninor   Zcwtr2   Zaranger5   r	   r6   r
   r7   r8   r   r   )rE   rF   timedtr9   r&   r:   r;   r<   r=   r   r   r   rC   r   test_concurrent_cwtZ   s    rJ   )__doc__
__future__r   r   r   r-   Znumpyr2   	functoolsr   Znumpy.testingr   r   Zpywt._pytestr   r	   r
   r1   r   r>   r@   rA   rJ   r   r   r   r   <module>   s    


