o
    7ήc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*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>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   cA3cD3cA2cD2cA1cD1expected_cA1expected_cD1expected_cA2expected_cD2expected_cA3expected_cD3rescoeffs r?   :/tmp/pip-target-vg8gfxp4/lib/python/pywt/tests/test_swt.pytest_swt_decomposition    s.   
"
rA   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
   r?   r?   r?   r@   test_swt_max_level@   s   
rL   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   rD   r   )CF)r      r   )axisrM   rN   )rO   r   r   )r   rQ   r   r   )r*   r+   r-   npasarrayreshapeconcatenateascontiguousarrayasfortranarrayr	   shaper   	transposer   
ValueError)r0   r   r3   r4   r5   r6   orderx_2dcA2_2dcD2_2dcA1_2dcD1_2dcrowr?   r?   r@   test_swt_axisN   sT   



rd   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dmeyrD   r   TFtrim_approxnormrl   h㈵>Hz>r   )r*   wavelistremover+   intrS   ceillog2maxdec_lenrec_lenarange
orthogonalr-   iswtr   )	max_levelwaveletscurrent_wavelet_strcurrent_waveletinput_length_powerinput_lengthXrl   rk   r>   Yr?   r?   r@   test_swt_iswt_integration   s0   






r   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&   )dtyperD   r   zswt: r&   r&   r   r   zswt2: )r*   r+   zip	dtypes_in
dtypes_outformatrS   onesr-   r	   r   swt2)waveletdt_indt_outerrmsgr0   r3   r4   r5   r6   cAcHcVcDr?   r?   r@   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 )
NrP   r   )r&   rD   r   r   ro   r   r   )rS   randomRandomStater*   r+   r   r   r   standard_normalastyper-   rz   r   r   iswt2)rstater   r   r   r0   rb   xrr?   r?   r@   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&   rF       r   r   rD   r   r   r)   rQ   )rS   r   r*   r-   r
   r.   r/   rY   )wavr0   rQ   sdecr?   r?   r@   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&   rC   r   r   r   )
rS   r   rI   rJ   rK   FutureWarningr   r[   r*   r   r0   r?   r?   r@   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   re   rf   rh   rD   r   ri   rj   rm   rn   r   )r*   rp   rq   r+   rr   rS   rs   rt   ru   rv   rw   rx   rU   ry   r   r   r   )r|   r{   r}   r~   r   r   r   rl   rk   r>   r   r?   r?   r@   test_swt2_iswt2_integration   s2   




r   c                   C      t dgd d S Nr   )r|   )r   r?   r?   r?   r@   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&   rF   rG   r   r   rC   rD   r   r   )rS   rx   rU   rI   rJ   rK   r   r*   r   r   r   
tol_single)r|   nrowsr   r~   r>   r   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   rD   r   r   r   rR   r   axesr   r   r   r   r   )r*   r+   rr   rS   rs   rt   ru   rv   rw   rx   rU   r   r   r   r   r[   )r   r~   r   r   r   r5   cH1cV1r6   r3   cH2cV2r4   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   rD   r   r   r   rR   aar   addaddr   r   r   r(   rO   r   )r*   r+   rr   rS   rs   rt   ru   rv   rw   rx   rU   swtnr   r
   r   r[   rT   r   )r   r~   r   r   r   r>   coeffs2emptyr?   r?   r@   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   re   rf   rh   r   r&   rD   ri   )r   rk   rl   )r   rl   rn   r   )r*   rp   rq   ranger   r+   rv   rr   rS   rs   rt   ru   rw   rx   rU   ry   r   r   iswtnr   r   itemsr   )r|   r{   ndim_transformndimr   r}   r   r   Nr   rl   rk   r>   coeffs_copyr   rb   c2kvr?   r?   r@   test_swtn_iswtn_integrationS  sJ   




r   c                   C   r   r   )r   r?   r?   r?   r@   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&   rD   )r   r   r   r   r   r   r   r   rO   )
rS   rx   rU   r*   r+   r   r   r[   r   RuntimeError)r0   r{   r   wr>   r?   r?   r@   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   rG   r   sym2r   r   c                 S   s   g | ]
\}}|d kr|qS )r   r?   ).0axsr?   r?   r@   
<listcomp>      z9test_swtn_iswtn_unique_shape_per_axis.<locals>.<listcomp>r   g|=r   )
rS   r   r   r   	enumerater   r*   r   r   r   )	_shaper   r{   r   rY   r   r0   rb   rr?   r?   r@   %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  rF   r   r   r   db4r   r   r   r   rD   rC   ).r   )rS   r   r   randnr*   r+   r   r   r   r   r[   rI   rJ   rK   r   r   r   )r   datar   r|   coefsdata2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 ]&\}}dt
dfD ]}tt|| |dd || ddd}tt|||d q!qd S )N)rF   rF   morlr   )r   r   r   r   )r   )rS   r   r   r*   r-   r   r   rz   r   r   DiscreteContinuousWaveletr   r[   )r   dec_funcrec_funccwaverb   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 ]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 )	NrF                 ?r   rD   r   r   MbP?r   )rS   rx   r   float64float32float16
complex128	complex64r*   r-   rz   r
   r   r   )	x_real	x_complexr   dtype1dtype2r0   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 ]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   rD   c                    s   g | ]}|  qS r?   r   r   rb   r   r?   r@   r         z+test_iswt2_mixed_dtypes.<locals>.<listcomp>r   r   r   )rS   r   r   r   r   r   r   r   r   r*   r   r   tupler   r
   r   r   )	r   r   r   r   r   r0   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 ]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   rD   ac                    s   i | ]
\}}||  qS r?   r   )r   r   rb   r   r?   r@   
<dictcomp>  r   z+test_iswtn_mixed_dtypes.<locals>.<dictcomp>r   r   )rS   r   r   r   r   r   r   r   r   r*   r   popr   r   r   r   r
   r   r   )
r   r   r   r   r   r0   r   r>   r   r   r?   r   r@   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   r[   r*   r-   rS   r   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   rP      Trj   c                 S      g | ]}t |qS r?   rS   varr   r?   r?   r@   r   4  r   z=test_swt_variance_and_energy_preservation.<locals>.<listcomp>bior2.2rm   N)rS   r   r   r   r*   r-   r   sumr  linalgrl   rV   r   rH   )r   r   r0   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 ]	}||  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   rP   @   r   Tr   rk   rl   r   r   Nc                 S   r  r?   r  r   r   r?   r?   r@   r   K  r   z>test_swt2_variance_and_energy_preservation.<locals>.<listcomp>r	  r   rl   )rS   r   r   r   r*   r   ravelappendr   r
  r  r  rl   rV   r   rH   )r   r   r0   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 ]\}}||  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   rP   r  r   Tr  r   r   Nc                 S   r  r?   r  r  r?   r?   r@   r   b  r   z>test_swtn_variance_and_energy_preservation.<locals>.<listcomp>r	  r  )rS   r   r   r   r*   r   r  r   r  r   r
  r  r  rl   rV   r   rH   )	r   r   r0   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 ]0\} }}}td|  }||ddd	d
}t 	|\}}}t j
||||d}||d}	t||	 qd S )Nr   r-   rD   r   r   r   )rF   r   T)r   rk   )output_format)r*   r-   rz   r   r   r   r   rS   r   ravel_coeffsunravel_coeffsr   )
r   _swt_iswt
ravel_typer0   rb   arrslicesshapesr   r?   r?   r@   test_swt_ravel_and_unravelm  s   
r!  )N)>
__future__r   r   r   rI   copyr   	itertoolsr   r   numpyrS   pytestnumpy.testingr   r	   r
   r   r   r   r*   pywt._extensions._swtr   int8r   r   r   r   r   r   r   r   r,   rA   rL   rd   r   r   r   r   r   markslowr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r!  r?   r?   r?   r@   <module>   s\     8!	#
&.	