U
    ?ha                     @   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Zd dl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)j*d?ddZ+dd Z,d@ddZ-dd  Z.d!d" Z/ej)j*dAd#d$Z0d%d& Z1d'd( Z2d)d* Z3d+d, Z4d-d. Z5d/d0 Z6d1d2 Z7d3d4 Z8d5d6 Z9d7d8 Z:d9d: Z;d;d< Z<d=d> Z=dS )B    )divisionprint_functionabsolute_importN)deepcopy)combinationspermutations)assert_allcloseassert_assert_equalassert_raisesassert_array_equalassert_warns)swt_axisư>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>Z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_cD3rescoeffs r-   E/var/www/html/venv/lib/python3.8/site-packages/pywt/tests/test_swt.pytest_swt_decomposition    sL    
"      
   r/   c                	   C   s   t ttjd t " tdt ttdd W 5 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    
r:   c                  C   s:  ddddddddg} t d}t j| |dd	\\}}\}}d
D ]}t| d}tj|fd dd}|dkr|t|}n|dkrt|}t j||dd	\\}}	\}
}||	|
|fD ]}t	|j
|j
k q|
D ]}t|| q|D ]}t|| q|D ]}t|| q|	D ]}t|| qt| d}tj|fd dd}|dkrXt|}n|dkrlt|}t j||ddd\\}}	\}
}||	|
|fD ]}t	|j
|j
k q|
dD ]}t|| q|dD ]}t|| q|dD ]}t|| q|	dD ]}t|| qq>ttt j| |ddd d S )Nr   r   r   r   r   r   r   r2   r   )CF)r      r   )axisr;   r<   )r=   r   )r   r?   r   r   )r    r!   r#   npasarrayreshape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   sR    






rJ   c               
   C   s   d} t jdd}d|kr"|d |D ]}t |}tttt|j	|j
}d||  d  }t|}dD ]N}|r|jsqpdD ]8}t j||| ||d}	t j|	||d	}
t|
|d
dd qqpq&d S )Nr   discretekinddmeyr2   r   TFtrim_approxnormrR   h㈵>Hz>r   )r    wavelistremover!   intrA   ceillog2maxdec_lenrec_lenarange
orthogonalr#   iswtr   )	max_levelwaveletscurrent_wavelet_strcurrent_waveletinput_length_powerinput_lengthXrR   rQ   r,   Yr-   r-   r.   test_swt_iswt_integration   s,    






 ri   c                  C   s   t d} t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d S )Nhaarz"wrong dtype returned for {0} inputr   )dtyper2   r   zswt: r   r   r   r   zswt2: )r    r!   zip	dtypes_in
dtypes_outformatrA   onesr#   r	   rk   swt2)waveletdt_indt_outerrmsgr&   r'   r(   r)   r*   ZcAZcHZcVZcDr-   r-   r.   test_swt_dtypes   s    

44rw   c                  C   s   t jd} td}tttD ]\}}| d	|}tj
||dd}t||}t||ddd | d		|}tj||dd}t||}t||ddd q d S )
Nr>   rj   )r   r2   r   r   rU   r   rl   )rA   randomRandomStater    r!   rm   rn   ro   standard_normalastyper#   r`   r   rr   iswt2)rstaters   rt   ru   r&   rH   Zxrr-   r-   r.   test_swt_roundtrip_dtypes   s    
r~   c                  C   sJ   d} t d}dD ]2}tj|| d d|d}tt|t|j|  qd S )Ndb2)r   r4       r   r   r2   r   r   r   r?   )rA   rq   r    r#   r
   r$   r%   rE   )wavr&   r?   Zsdecr-   r-   r.   test_swt_default_level_by_axis   s
    
r   c               	   C   sB   t d} t & tdt tttj	| ddd W 5 Q R X d S )Nr   r1   rj   r   r   )
rA   rq   r7   r8   r9   FutureWarningr   rF   r    rr   r&   r-   r-   r.   test_swt2_ndim_error   s    

r   c              
   C   s   d}| d kr*t jdd} d| kr*| d | D ]}t |}tttt|j	|j
}d|| d  }t|d ||}dD ]N}|r|jsqdD ]8}t j|||||d}	t j|	||d	}
t|
|d
d
d qqq.d S )Nr   rK   rL   rN   r2   r   rO   rP   rS   rT   r   )r    rV   rW   r!   rX   rA   rY   rZ   r[   r\   r]   r^   rC   r_   rr   r|   r   )rb   ra   rc   rd   re   rf   rg   rR   rQ   r,   rh   r-   r-   r.   test_swt2_iswt2_integration   s.    




 r   c                   C   s   t dgd d S Nr   )rb   )r   r-   r-   r-   r.   test_swt2_iswt2_quick   s    r   c              
   C   st   dD ]j}t |d |d}d}t . tdt tj||dd}t	||}W 5 Q R X t
||ttd qd S )N)r   r4   r5   r   r   r1   r2   r   r   )rA   r^   rC   r7   r8   r9   r   r    rr   r|   r   
tol_single)rb   Znrowsrg   rd   r,   rh   r-   r-   r.   test_swt2_iswt2_non_square  s    
r   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 ||||fg|}t||| d	 t j|	|
||fg|dd
}t||| d	 ttt j||ddd
 ttt j||ddd
 d S )N+=r   r2   r   r   r   r@   r   axesr   r   r   r   r   )r    r!   rX   rA   rY   rZ   r[   r\   r]   r^   rC   rr   r   r|   r   rF   )r   rd   re   rf   rg   r)   ZcH1ZcV1r*   r'   ZcH2ZcV2r(   r1r2r-   r-   r.   test_swt2_axes  s4    


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 )Nr   r   r2   r   r   r   r@   Zaar   addaddr   r   r   r   r=   r   )r    r!   rX   rA   rY   rZ   r[   r\   r]   r^   rC   swtnr   r
   r   rF   rB   r   )r   rd   re   rf   rg   r,   Zcoeffs2emptyr-   r-   r.   test_swtn_axes-  s:    


  r   c                 C   s^  d}| d kr*t jdd} d| kr*| d tddD ]"}|d }tt||D ]}| D ]}t |}|jdkrtqZtt	t
t|j|j}d|| d  }t|| |f| }	dD ]Z}
|
r|jsqdD ]D}t j|	|||||
d	}t|}t j||||
d
}t||	ddd qqt||D ],\}}| D ]\}}t|| | q6q&qZqPq4d S )Nr   rK   rL   rN   r   r   r2   rO   )r   rQ   rR   )r   rR   rT   r   )r    rV   rW   ranger   r!   r\   rX   rA   rY   rZ   r[   r]   r^   rC   r_   r   r   iswtnr   rm   itemsr   )rb   ra   Zndim_transformndimr   rc   r   re   Nrg   rR   rQ   r,   Zcoeffs_copyrh   rH   c2kvr-   r-   r.   test_swtn_iswtn_integrationS  s@    




 r   c                   C   s   t dgd d S r   )r   r-   r-   r-   r.   test_swtn_iswtn_quick  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   r2   )r   r   r   r   r   r   r   r   r=   )
rA   r^   rC   r    r!   r   r   rF   r   RuntimeError)r&   ra   r   wr,   r-   r-   r.   test_iswtn_errors  s    
$r   c            	      C   sx   d} d}d}t jd}t| D ]R}dd t|D }||}tj||||d}tj|||d}t	||ddd	 q d S )
N)r   r5   r   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   )
rA   rx   ry   r   	enumeraterz   r    r   r   r   )	_shaper   ra   r}   rE   r   r&   rH   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 5 Q R X d S )Ni  r4   r   rj   r   Zdb4r   r   r   r   r2   r1   ).r   )rA   rx   ry   randnr    r!   r   r   r   r   rF   r7   r8   r9   r   rr   r|   )r}   datar   rb   ZcoefsZdata2Zcoefs2r-   r-   r.   test_per_axis_wavelets  s    
r   c               	   C   s~   t d} ttjtjtjgtjtjtj	gD ]L\}}dt
dfD ]4}tt|| |dd || ddd}tt|||d qBq,d S )N)r4   r4   Zmorlr   )rs   r   r   r   )rs   )rA   rq   rm   r    r#   rr   r   r`   r|   r   ZDiscreteContinuousWaveletr   rF   )r   Zdec_funcZrec_funcZcwaverH   r-   r-   r.    test_error_on_continuous_wavelet  s    

r   c            	      C   s   t dt j} | d|   }d}t jt jft jt jft jt jft jt jft jt jffD ]\}}|t jt jfkr||}t j}n
| }t j}t	||d}|d d ||d d |g|d< t
||}t||j t||ddd qXd S )	Nr4                 ?r   r2   r   r   MbP?r   )rA   r^   r{   float64float32float16
complex128	complex64r    r#   r`   r
   rk   r   )	x_real	x_complexr   dtype1dtype2r&   output_dtyper,   yr-   r-   r.   test_iswt_mixed_dtypes  s*    




r   c            	         s   t jd} | dd}|d|  }d}t jt jft jt jft jt jft jt jft jt jffD ]\} |t jt jf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^d S )Nr   r   r   r   r2   c                    s   g | ]}|  qS r-   r{   r   rH   r   r-   r.   r     s     z+test_iswt2_mixed_dtypes.<locals>.<listcomp>r   r   r   )rA   rx   ry   r   r   r   r   r   r   r    rr   r{   tupler|   r
   rk   r   )	r}   r   r   r   r   r&   r   r,   r   r-   r   r.   test_iswt2_mixed_dtypes  s,    




r   c            
         s  t jd} | ddd}|d|  }d}t jt jft jt jft jt jft jt jft jt jffD ]\} |t jt jf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
 q`d S )Nr   r   r   r   r2   ac                    s   i | ]\}}||  qS r-   r   )r   r   rH   r   r-   r.   
<dictcomp>  s      z+test_iswtn_mixed_dtypes.<locals>.<dictcomp>r   r   )rA   rx   ry   r   r   r   r   r   r   r    r   popr   r{   r   r   r
   rk   r   )
r}   r   r   r   r   r&   r   r,   r   r   r-   r   r.   test_iswtn_mixed_dtypes  s.    





r   c                  C   sD   t ttjg d tdddd d f } t ttj| dddd d S )Nr   )r   r   r   r   r   r   )r   rF   r    r#   rA   rq   r   r   r-   r-   r.   test_swt_zero_size_axes#  s    r   c                  C   s   d} t jd}|d}tj|| ddd}dd |D }tt |t | tt j	
|t j	
t | tttj|ddd	 d
S )zBVerify that the 1D SWT partitions variance among the coefficients.r   r>      TrP   c                 S   s   g | ]}t |qS r-   rA   varr   r-   r-   r.   r   4  s     z=test_swt_variance_and_energy_preservation.<locals>.<listcomp>bior2.2rS   N)rA   rx   ry   r   r    r#   r   sumr   linalgrR   rD   r   r6   )r   r}   r&   r,   	variancesr-   r-   r.   )test_swt_variance_and_energy_preservation,  s    
r   c                  C   s   d} t jd}|dd}tj|| dddd}|d  g}|dd	 D ]}|D ]}||  qRqJd
d |D }tt 	|t 
| tt j|t jt | tttj|dddd d	S )zBVerify that the 2D SWT partitions variance among the coefficients.r   r>   @   r   Tr   rQ   rR   r   r   Nc                 S   s   g | ]}t |qS r-   r   r   r   r-   r-   r.   r   K  s     z>test_swt2_variance_and_energy_preservation.<locals>.<listcomp>r   r   rR   )rA   rx   ry   r   r    rr   ravelappendr   r   r   r   rR   rD   r   r6   )r   r}   r&   r,   
coeff_listdr   r   r-   r-   r.   *test_swt2_variance_and_energy_preservation?  s    r   c            	      C   s   d} t jd}|dd}tj|| dddd}|d  g}|dd	 D ]$}| D ]\}}||  qVqJd
d |D }t	t 
|t | t	t j|t jt | tttj|dddd d	S )zBVerify that the nD SWT partitions variance among the coefficients.r   r>   r   r   Tr   r   r   Nc                 S   s   g | ]}t |qS r-   r   r   r-   r-   r.   r   b  s     z>test_swtn_variance_and_energy_preservation.<locals>.<listcomp>r   r   )rA   rx   ry   r   r    r   r   r   r   r   r   r   r   rR   rD   r   r6   )	r   r}   r&   r,   r   r   r   r   r   r-   r-   r.   *test_swtn_variance_and_energy_preservationV  s    r   c            
      C   s   dt jt jdfdt jt jdfdt jt jdffD ]`\} }}}td|  }||ddd	d
}t 	|\}}}t j
||||d}||d}	t||	 q.d S )Nr   r#   r2   rr   r   r   )r4   r   T)r   rQ   )Zoutput_format)r    r#   r`   rr   r|   r   r   rA   rq   Zravel_coeffsZunravel_coeffsr   )
r   Z_swtZ_iswtZ
ravel_typer&   rH   ZarrZslicesZshapesr   r-   r-   r.   test_swt_ravel_and_unravelm  s    
r   )N)N)N)>
__future__r   r   r   r7   copyr   	itertoolsr   r   numpyrA   ZpytestZnumpy.testingr   r	   r
   r   r   r   r    Zpywt._extensions._swtr   Zint8r   r   r   r   r   rn   ro   r   r"   r/   r:   rJ   ri   rw   r~   r   r   markZslowr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r-   r-   r-   r.   <module>   sZ     8!	#
&.	