o
    ec                     @   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*d?d#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 )@    )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<  g d} t d}t}t j| |dd\\}}\}}\}}g d}	t||	d|d g d}
t||
d|d g d	}t||t|d g d
}t||t|d dgd }t||d|d g d}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         r         r   db1r   level)MH@gVf@'e@g'e?r   r   r   gQyC3t@g:0yE>Zrtolatol)g'e^v@'eʪ H@gVfg'e?r   ev @)r   g      @r   g      @r   g      #@
   g      !@)r   g      @r   g            ?r   r$   gZo̙#@   )        gʪ Hg^vgev r&   r    r   r!   r   r   start_levelr   )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 r6   CD:\Projects\ConvertPro\env\Lib\site-packages\pywt/tests/test_swt.pytest_swt_decomposition    s.   
"
r8   c                   C   s   t ttjd t  tdt ttdd W d    n1 s$w   Y  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
   r6   r6   r6   r7   test_swt_max_level@   s   
rC   c                  C   s  g d} t d}t j| |dd\\}}\}}dD ]}t| d}tj|fd dd	}|d
kr7t|}n	|dkr@t|}t j||dd\\}}	\}
}||	|
|fD ]
}t	|j
|j
k qT|
D ]}t|| qa|D ]}t|| qk|D ]}t|| qu|	D ]}t|| qt| d}tj|fd dd	}|d
krt|}n	|dkrt|}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|| qqttt j| |ddd d S )Nr   r   r;   r   )CF)r      r   )axisrD   rE   )rF   r   r   )r   rH   r   r   )r)   r*   r,   npasarrayreshapeconcatenateZascontiguousarrayZasfortranarrayr	   shaper   Z	transposer   
ValueError)r/   r   r0   r1   r2   r3   orderZx_2dZcA2_2dZcD2_2dZcA1_2dZcD1_2dcrowr6   r6   r7   test_swt_axisN   sT   



rS   c               
   C   s   d} t jdd}d|v r|d |D ]M}t |}tttt|j	|j
}d||  d  }t|}dD ]'}|r@|js@q8dD ]}t j||| ||d}	t j|	||d	}
t|
|d
dd qBq8qd S )Nr   discretekinddmeyr;   r   TFtrim_approxnormr[   h㈵>Hz>r   )r)   wavelistremover*   intrJ   ceillog2maxdec_lenrec_lenarange
orthogonalr,   iswtr   )	max_levelwaveletscurrent_wavelet_strcurrent_waveletinput_length_powerinput_lengthXr[   rZ   r5   Yr6   r6   r7   test_swt_iswt_integration   s0   






rr   c                  C   s   t d} tttD ]r\}}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ou|j
  kou|j
  kou|kn  d|  q
d S )Nhaarz"wrong dtype returned for {0} inputr%   )dtyper;   r   zswt: r%   r%   r   r   zswt2: )r)   r*   zip	dtypes_in
dtypes_outformatrJ   onesr,   r	   rt   swt2)waveletdt_indt_outerrmsgr/   r0   r1   r2   r3   ZcAZcHZcVZcDr6   r6   r7   test_swt_dtypes   s   

44r   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 )
NrG   rs   )r%   r;   r   r   r^   r   ru   )rJ   randomRandomStater)   r*   rv   rw   rx   standard_normalastyper,   ri   r   r{   iswt2)rstater|   r}   r~   r/   rQ   Zxrr6   r6   r7   test_swt_roundtrip_dtypes   s   
r   c                  C   sJ   d} t d}dD ]}tj|| d d|d}tt|t|j|  q	d S )Ndb2)r%   r=       r   r   r;   r   r   r(   rH   )rJ   rz   r)   r,   r
   r-   r.   rN   )wavr/   rH   Zsdecr6   r6   r7   test_swt_default_level_by_axis   s   
r   c                  C   sX   t d} t  tdt tttj	| ddd W d    d S 1 s%w   Y  d S )Nr%   r:   rs   r   r   )
rJ   rz   r@   rA   rB   FutureWarningr   rO   r)   r{   r/   r6   r6   r7   test_swt2_ndim_error   s
   

"r   c              
   C   s   d}| d u rt jdd} d| v r| d | D ]S}t |}tttt|j	|j
}d|| d  }t|d ||}dD ]'}|rJ|jsJqBdD ]}t j|||||d}	t j|	||d	}
t|
|d
d
d qLqBqd S )Nr   rT   rU   rW   r;   r   rX   rY   r\   r]   r   )r)   r_   r`   r*   ra   rJ   rb   rc   rd   re   rf   rg   rL   rh   r{   r   r   )rk   rj   rl   rm   rn   ro   rp   r[   rZ   r5   rq   r6   r6   r7   test_swt2_iswt2_integration   s2   




r   c                   C      t dgd d S Nr   )rk   )r   r6   r6   r6   r7   test_swt2_iswt2_quick      r   c              	   C   s   dD ]?}t |d |d}d}t  tdt tj||dd}t	||}W d    n1 s4w   Y  t
||ttd qd S )N)r%   r=   r>   r   r   r:   r;   r   r   )rJ   rg   rL   r@   rA   rB   r   r)   r{   r   r   
tol_single)rk   Znrowsrp   rm   r5   rq   r6   r6   r7   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   r;   r   r   r   rI   r   axesr   r   r   r   r   )r)   r*   ra   rJ   rb   rc   rd   re   rf   rg   rL   r{   r   r   r   rO   )r   rm   rn   ro   rp   r2   ZcH1ZcV1r3   r0   ZcH2ZcV2r1   r1r2r6   r6   r7   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   r;   r   r   r   rI   Zaar   addaddr   r   r   r'   rF   r   )r)   r*   ra   rJ   rb   rc   rd   re   rf   rg   rL   swtnr   r
   r   rO   rK   r   )r   rm   rn   ro   rp   r5   Zcoeffs2emptyr6   r6   r7   test_swtn_axes-  s6   



r   c                 C   sV  d}| d u rt jdd} d| v r| d tddD ]}|d }tt||D ]}| D ]{}t |}|jdkr8q+tt	t
t|j|j}d|| d  }t|| |f| }	dD ]-}
|
rf|jsfq^dD ]"}t j|	|||||
d	}t|}t j||||
d
}t||	ddd qhq^t||D ]\}}| D ]\}}t|| | qqq+q'qd S )Nr   rT   rU   rW   r   r%   r;   rX   )r   rZ   r[   )r   r[   r]   r   )r)   r_   r`   ranger   r*   re   ra   rJ   rb   rc   rd   rf   rg   rL   rh   r   r   iswtnr   rv   itemsr   )rk   rj   Zndim_transformndimr   rl   r   rn   Nrp   r[   rZ   r5   Zcoeffs_copyrq   rQ   c2kvr6   r6   r7   test_swtn_iswtn_integrationS  sJ   




r   c                   C   r   r   )r   r6   r6   r6   r7   test_swtn_iswtn_quick  r   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%   r;   )r   r   r   r   r   r   r   r   rF   )
rJ   rg   rL   r)   r*   r   r   rO   r   RuntimeError)r/   rj   r   wr5   r6   r6   r7   test_iswtn_errors  s   
$r   c            	      C   sx   d} d}d}t jd}t| D ])}dd t|D }||}tj||||d}tj|||d}t	||ddd	 qd S )
N)r   r>   r   sym2r   r   c                 S   s   g | ]
\}}|d kr|qS )r   r6   ).0axsr6   r6   r7   
<listcomp>      z9test_swtn_iswtn_unique_shape_per_axis.<locals>.<listcomp>r   g|=r   )
rJ   r   r   r   	enumerater   r)   r   r   r   )	_shaper   rj   r   rN   r   r/   rQ   rr6   r6   r7   %test_swtn_iswtn_unique_shape_per_axis  s   
r   c                  C   s2  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 - tdt |d }t||d d |}tt||d d |dd	 W d    d S 1 sw   Y  d S )Ni  r=   r   rs   r   Zdb4r   r   r   r   r;   r:   ).r   )rJ   r   r   randnr)   r*   r   r   r   r   rO   r@   rA   rB   r   r{   r   )r   datar   rk   ZcoefsZdata2Zcoefs2r6   r6   r7   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 ]&\}}dt
dfD ]}tt|| |dd || ddd}tt|||d q!qd S )N)r=   r=   Zmorlr   )r|   r   r   r   )r|   )rJ   rz   rv   r)   r,   r{   r   ri   r   r   ZDiscreteContinuousWaveletr   rO   )r   Zdec_funcZrec_funcZcwaverQ   r6   r6   r7    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 ]F\}}|t jt jfv r>|}t j}n| }t j}t	||d}|d d ||d d |g|d< t
||}t||j t||ddd q,d S )	Nr=                 ?r   r;   r   r   MbP?r   )rJ   rg   r   float64float32float16
complex128	complex64r)   r,   ri   r
   rt   r   )	x_real	x_complexr   dtype1dtype2r/   output_dtyper5   yr6   r6   r7   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 ]L\} |t jt jfv rA|}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   r;   c                    s   g | ]}|  qS r6   r   r   rQ   r   r6   r7   r         z+test_iswt2_mixed_dtypes.<locals>.<listcomp>r   r   r   )rJ   r   r   r   r   r   r   r   r   r)   r{   r   tupler   r
   rt   r   )	r   r   r   r   r   r/   r   r5   r   r6   r   r7   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 ]Y\} |t jt jfv rB|}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
 q0d S )Nr   r%   r   r   r;   ac                    s   i | ]
\}}||  qS r6   r   )r   r   rQ   r   r6   r7   
<dictcomp>  r   z+test_iswtn_mixed_dtypes.<locals>.<dictcomp>r   r   )rJ   r   r   r   r   r   r   r   r   r)   r   popr   r   r   r   r
   rt   r   )
r   r   r   r   r   r/   r   r5   r   r   r6   r   r7   test_iswtn_mixed_dtypes  s0   





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   rO   r)   r,   rJ   rz   r   r   r6   r6   r7   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   rG      TrY   c                 S      g | ]}t |qS r6   rJ   varr   r6   r6   r7   r   4  r   z=test_swt_variance_and_energy_preservation.<locals>.<listcomp>bior2.2r\   N)rJ   r   r   r   r)   r,   r   sumr   linalgr[   rM   r   r?   )r   r   r/   r5   	variancesr6   r6   r7   )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 ]	}||  q)q%d
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   rG   @   r   Tr   rZ   r[   r   r   Nc                 S   r   r6   r   r   r   r6   r6   r7   r   K  r   z>test_swt2_variance_and_energy_preservation.<locals>.<listcomp>r   r   r[   )rJ   r   r   r   r)   r{   ravelappendr   r   r   r   r[   rM   r   r?   )r   r   r/   r5   
coeff_listdr   r   r6   r6   r7   *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 ]\}}||  q+q%d
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   rG   r   r   Tr   r   r   Nc                 S   r   r6   r   r   r6   r6   r7   r   b  r   z>test_swtn_variance_and_energy_preservation.<locals>.<listcomp>r   r   )rJ   r   r   r   r)   r   r   r   r   r   r   r   r   r[   rM   r   r?   )	r   r   r/   r5   r   r   r   r   r   r6   r6   r7   *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 ]0\} }}}td|  }||ddd	d
}t 	|\}}}t j
||||d}||d}	t||	 qd S )Nr   r,   r;   r{   r   r   )r=   r   T)r   rZ   )Zoutput_format)r)   r,   ri   r{   r   r   r   rJ   rz   Zravel_coeffsZunravel_coeffsr   )
r   Z_swtZ_iswtZ
ravel_typer/   rQ   ZarrZslicesZshapesr   r6   r6   r7   test_swt_ravel_and_unravelm  s   
r   )N)>
__future__r   r   r   r@   copyr   	itertoolsr   r   numpyrJ   ZpytestZnumpy.testingr   r	   r
   r   r   r   r)   Zpywt._extensions._swtr   Zint8r   r   r   r   r   rw   rx   r   r+   r8   rC   rS   rr   r   r   r   r   markZslowr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r6   r6   r7   <module>   s\     8!	#
&.	