B
    \O                 @   s  d dl mZmZmZ d dlZd dlmZ d dlmZm	Z	 d dl
Zd dlmZmZmZmZmZmZmZmZ d dlZd dlmZ ejejejejejejgZejejejejejejgZd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*d8ddZ+dd Z,d9ddZ-dd  Z.d!d" Z/d#d$ Z0ej*d:d%d&Z1d'd( Z2d)d* Z3d+d, Z4d-d. Z5d/d0 Z6d1d2 Z7d3d4 Z8d5d6 Z9e:d7kre  dS );    )divisionprint_functionabsolute_importN)deepcopy)combinationspermutations)run_module_suitedecassert_allcloseassert_assert_equalassert_raisesassert_array_equalassert_warns)swt_axisgư>gvIh%<=c              C   s  ddddddddg} t d}t}t j| |dd\\}}\}}\}}d	d
dddd	d	dg}	t||	d|d ddddddddg}
t||
d|d ddddddddg}t||t|d dddddd dd g}t||t|d d!gd" }t||d|d d#d$d%d&d#dddg}t||d|d t j||ddd'}|d \}}t||t|d t||t|d t | |}tt|dk tt t| d d S )(N               db1)levelgMH@gVf@g'e@g'e?gQyC3t@g:0yE>)rtolatolg'eg^v@g'egʪ H@gVfg'e?gev @g      @g      @g      #@
   g      !@g      @r   g      g      ?gZo̙#@   g        gʪ Hg^vgev )r   start_level)pywtWavelet
tol_doubleswtr
   r   lenswt_max_level)xr   r   ZcA3ZcD3cA2cD2cA1cD1Zexpected_cA1Zexpected_cD1Zexpected_cA2Zexpected_cD2Zexpected_cA3Zexpected_cD3Zrescoeffs r+   2lib/python3.7/site-packages/pywt/tests/test_swt.pytest_swt_decomposition    s4    
"
r-   c            	   C   s   t ttjd t " tdt ttdd W d Q R X ttdd ttdd ttdd ttd	d d S )
N   ignorer      r         r   0   )r   UserWarningr   r$   warningscatch_warningssimplefilterr   r+   r+   r+   r,   test_swt_max_level@   s    
r8   c              C   sj  ddddddddg} t d}t j| |dd	\\}}\}}xd
D ]}t| d}tj|fd dd}|dkrt|}n|dkrt|}t j||dd	\\}}	\}
}x$||	|
|gD ]}t	|j
|j
k qW x|
D ]}t|| qW x|D ]}t|| qW x|D ]}t|| q
W x|	D ]}t|| q$W t| d}tj|fd dd}|dkrrt|}n|dkrt|}t j||ddd\\}}	\}
}x&||	|
|gD ]}t	|j
|j
k qW x|
dD ]}t|| qW x|dD ]}t|| qW x|dD ]}t|| qW x|	dD ]}t|| q8W qBW ttt j| |ddd d S )Nr   r   r   r   r   r   r   r0   )r   )CF)r      r   )axisr9   r:   )r;   r   )r   r=   )r   r   )r   r    r"   npasarrayreshapeZconcatenateZascontiguousarrayZasfortranarrayr   shaper   Z	transposer   
ValueError)r%   r   r&   r'   r(   r)   orderZx_2dZcA2_2dZcD2_2dZcA1_2dZcD1_2dcrowr+   r+   r,   test_swt_axisN   sP    









rF   c        	   	   C   s   d} t jdd}d|kr"|d xx|D ]p}t |}tttt|j	|j
}d||  d  }t|}t ||| }t ||}t||ddd	 q(W d S )
Nr   discrete)kinddmeyr0   r   gh㈵>gHz>)r   r   )r   wavelistremover    intr>   ceillog2maxdec_lenrec_lenaranger"   iswtr
   )		max_levelwaveletscurrent_wavelet_strcurrent_waveletinput_length_powerinput_lengthXr*   Yr+   r+   r,   test_swt_iswt_integration   s    




r\   c              C   s  t d} xtttD ]\}}d|}tjd|d}t j|| dd\\}}\}}t	|j
|j
  ko|j
  ko|j
  ko|kn  d|  tjd|d}t j|| d	dd
 \}	\}
}}t	|	j
|
j
  ko|j
  ko|j
  ko|kn  d|  qW d S )Nhaarz"wrong dtype returned for {0} inputr   )dtyper0   )r   zswt: )r   r   r   r   zswt2: )r   r    zip	dtypes_in
dtypes_outformatr>   onesr"   r   r^   swt2)waveletdt_indt_outerrmsgr%   r&   r'   r(   r)   ZcAZcHZcVZcDr+   r+   r,   test_swt_dtypes   s    

4
4ri   c              C   s   t jd} td}xtttD ]\}}| d	|}tj
||dd}t||}t||ddd | d		|}tj||dd}t||}t||ddd q"W d S )
Nr<   r]   )r   r0   )r   gư>gHz>)r   r   )r   r   )r>   randomRandomStater   r    r_   r`   ra   standard_normalastyper"   rS   r
   rd   iswt2)rstatere   rf   rg   r%   rD   Zxrr+   r+   r,   test_swt_roundtrip_dtypes   s    
rp   c              C   sN   d} t d}x:dD ]2}tj|| d d|d}tt|t|j|  qW d S )Ndb2)r   r2       )r   r   r0   r   )r   r   r=   )r>   rc   r   r"   r   r#   r$   rA   )wavr%   r=   Zsdecr+   r+   r,   test_swt_default_level_by_axis   s
    

rt   c           	   C   sB   t d} t & tdt tttj	| ddd W d Q R X d S )Nr   r/   r]   r   )r   )
r>   rc   r5   r6   r7   FutureWarningr   rB   r   rd   )r%   r+   r+   r,   test_swt2_ndim_error   s    

rv   c       	   	   C   s   d}| d kr*t jdd} d| kr*| d x| D ]|}t |}tttt|j	|j
}d|| d  }t|d ||}t |||}t ||}t||ddd q0W d S )	Nr   rG   )rH   rI   r0   r   gh㈵>)r   r   )r   rJ   rK   r    rL   r>   rM   rN   rO   rP   rQ   rR   r@   rd   rn   r
   )	rU   rT   rV   rW   rX   rY   rZ   r*   r[   r+   r+   r,   test_swt2_iswt2_integration   s    


rw   c               C   s   t dgd d S )Nr   )rU   )rw   r+   r+   r+   r,   test_swt2_iswt2_quick   s    rx   c          
   C   sx   xrdD ]j}t |d |d}d}t . tdt tj||dd}t	||}W d Q R X t
||ttd qW d S )N)r   r2   r3   rr   r   r/   r0   )r   )r   r   )r>   rR   r@   r5   r6   r7   ru   r   rd   rn   r
   
tol_single)rU   ZnrowsrZ   rW   r*   r[   r+   r+   r,   test_swt2_iswt2_non_square   s    

rz   c              C   s   d} t d}tttt|j|j}d| }t	|d 
||}t j||ddd \}\}}}t j||dddd \}	\}
}}t||	| d	 t||| d	 t||
| d	 t||| d	 ttt j||dd
d ttt j||ddd d S )Ng+=rq   r0   r   )r   r   )r   r   )r   axes)r   )r   r   )r{   )r   )r   r    rL   r>   rM   rN   rO   rP   rQ   rR   r@   rd   r
   r   rB   )r   rW   rX   rY   rZ   r(   ZcH1ZcV1r)   r&   ZcH2ZcV2r'   r+   r+   r,   test_swt2_axes  s"    

r|   c              C   s.   t d} tj| ddd}tttj|d d S )N)r   r   r   r]   r   )r   )r>   rc   r   rd   r   rB   rn   )Zx_3drD   r+   r+   r,   test_iswt2_2d_only  s    
r}   c           	   C   sj  d} t d}tttt|j|j}d| }t	|d 
||}t j||dd dd }t j||dddd }t|d |d | d	 t|d
 |d | d	 t|d |d
 | d	 t|d |d | d	 t j||dd}t|g  ttt j||ddd ttt jtg |d ttt j||ddd ttt||ddd ttt|d dd d f |dddd d S )Ng+=rq   r0   r   )r   r{   r   )r   r   Zaa)r   ZaddaZdd)r   )r   r   )r{   )r   r   r;   )r   r   r=   )r   r    rL   r>   rM   rN   rO   rP   rQ   rR   r@   swtnr
   r   r   rB   r?   r   )r   rW   rX   rY   rZ   r*   Zcoeffs2emptyr+   r+   r,   test_swtn_axes"  s.    


r   c             C   sL  d}| d kr*t jdd} d| kr*| d xtddD ]
}|d }xtt||D ]}x| D ]}t |}|jdkrzq`tt	t
t|j|j}d|| d  }t|| |f| }	t j|	|||d}
t|
}t j|
||d}t||	d	d	d
 x>t|
|D ]0\}}x$| D ]\}}t|| | qW qW q`W qVW q8W d S )Nr   rG   )rH   rI   r   r   r0   )r{   gh㈵>)r   r   )r   rJ   rK   ranger   r    rP   rL   r>   rM   rN   rO   rQ   rR   r@   r   r   iswtnr
   r_   itemsr   )rU   rT   Zndim_transformndimr{   rV   rs   rX   NrZ   r*   Zcoeffs_copyr[   rD   Zc2kvr+   r+   r,   test_swtn_iswtn_integrationH  s0    



r   c               C   s   t dgd d S )Nr   )rU   )r   r+   r+   r+   r,   test_swtn_iswtn_quickq  s    r   c              C   s   t dddd} d}d}td}tj| |||d}tttj||dd tttj||dd |d	 d
 d dd d f |d	 d
< tt	tj|||d d S )Ni   r   r0   )r   r   r   )r{   )r   r   r0   )r   r   r   r~   r;   )
r>   rR   r@   r   r    r   r   rB   r   RuntimeError)r%   rT   r{   wr*   r+   r+   r,   test_iswtn_errorsu  s    
$r   c        	      C   s|   d} d}d}t jd}x^t| D ]R}dd t|D }||}tj||||d}tj|||d}t	||ddd	 q"W d S )
N)r   r3   rr   sym2r   r   c             S   s   g | ]\}}|d kr|qS )r   r+   ).0Zaxsr+   r+   r,   
<listcomp>  s    z9test_swtn_iswtn_unique_shape_per_axis.<locals>.<listcomp>)r{   g|=)r   r   )
r>   rj   rk   r   	enumeraterl   r   r   r   r
   )	Z_shapers   rT   ro   rA   r{   r%   rD   rr+   r+   r,   %test_swtn_iswtn_unique_shape_per_axis  s    
r   c           	   C   s  t jd} | ddd}d}tdddf}tj|||d}tt|||dd	 tj||d d
 |d}tt||d d
 |dd	 t	t
tj||d d | t	t
tj||d d  t N tdt |d }t||d d |}tt||d d |dd	 W d Q R X d S )Ni  r2   r   r]   r   Zdb4)r   g+=)r   r   r0   r/   ).r   )r>   rj   rk   randnr   r    r   r
   r   r   rB   r5   r6   r7   ru   rd   rn   )ro   datar   rU   ZcoefsZdata2Zcoefs2r+   r+   r,   test_per_axis_wavelets  s    
r   c           	   C   s   t d} xvttjtjtjgtjtjtj	gD ]P\}}xFdt
dgD ]4}tt|| |dd || ddd}tt|||d qFW q.W d S )N)r2   r2   Zmorlr   )re   r   r   )r   )re   )r>   rc   r_   r   r"   rd   r   rS   rn   r   ZDiscreteContinuousWaveletr   rB   )r   Zdec_funcZrec_funcZcwaverD   r+   r+   r,    test_error_on_continuous_wavelet  s    

r   c        	      C   s   t dt j} | d|   }d}xt jt jft jt jft jt jft jt jft jt jfgD ]\}}|t jt jgkr~|}t j}n
| }t j}t	||d}|d d ||d d |g|d< t
||}t||j t||ddd qZW d S )	Nr2   y              ?r   r0   r   r   gMbP?)r   r   )r>   rR   rm   float64float32float16
complex128	complex64r   r"   rS   r   r^   r
   )	x_real	x_complexrs   dtype1dtype2r%   output_dtyper*   yr+   r+   r,   test_iswt_mixed_dtypes  s&    


r   c        	         s   t jd} | dd}|d|  }d}xt jt jft jt jft jt jft jt jft jt jfgD ]\} |t jt jgkr|}t j}n
|}t j}t	
||d}|d d |t fdd|d d D g|d< t	||}t||j t||d	d	d
 q`W d S )Nr   r   y              ?r   r0   c                s   g | ]}|  qS r+   )rm   )r   rD   )r   r+   r,   r     s    z+test_iswt2_mixed_dtypes.<locals>.<listcomp>r   gMbP?)r   r   )r>   rj   rk   r   r   r   r   r   r   r   rd   rm   tuplern   r   r^   r
   )	ro   r   r   rs   r   r%   r   r*   r   r+   )r   r,   test_iswt2_mixed_dtypes  s(    


$r   c        
         s  t jd} | ddd}|d|  }d}xt jt jft jt jft jt jft jt jft jt jfgD ]\} |t jt jgkr|}t j}n
|}t j}t	
||d}|d d|j }||} fdd|d  D |d< ||d d|j < t	||}	t||	j t|	|d	d	d
 qbW d S )Nr   r   y              ?r   r0   ac                s   i | ]\}}|  |qS r+   )rm   )r   r   rD   )r   r+   r,   
<dictcomp>  s    z+test_iswtn_mixed_dtypes.<locals>.<dictcomp>gMbP?)r   r   )r>   rj   rk   r   r   r   r   r   r   r   r   popr   rm   r   r   r   r^   r
   )
ro   r   r   rs   r   r%   r   r*   r   r   r+   )r   r,   test_iswtn_mixed_dtypes  s,    



r   __main__)N)N)N);Z
__future__r   r   r   r5   copyr   	itertoolsr   r   Znumpyr>   Znumpy.testingr   r	   r
   r   r   r   r   r   r   Zpywt._extensions._swtr   Zint8r   r   r   r   r   r`   ra   ry   r!   r-   r8   rF   r\   ri   rp   rt   rv   Zslowrw   rx   rz   r|   r}   r   r   r   r   r   r   r   r   r   r   __name__r+   r+   r+   r,   <module>   sP   ( 8	
&(
