
U\c           @` 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	   Z" d
   Z# d   Z$ d   Z% d   Z& d   Z' d   Z( d   Z) e j* d d   Z, d   Z- d d  Z. d   Z/ d   Z0 d   Z1 e j* d d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d   Z7 d   Z8 d   Z9 d   Z: e; d  k re   n  d S(!   i    (   t   divisiont   print_functiont   absolute_importN(   t   deepcopy(   t   combinationst   permutations(   t   run_module_suitet   dect   assert_allcloset   assert_t   assert_equalt   assert_raisest   assert_array_equalt   assert_warns(   t   swt_axisgư>gvIh%<=c          C` sG  d d d d d d d d g }  t  j 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 d g }
 t | |
 d d d | d d d d d d d d g } t | | d t d | d d d d d  d! d d! g } t | | d t d | d" g d# } t | | d d d | d$ d% d& d' d$ d d d g } t | | d d d | t  j | | d d d( d } | d \ } } t | | d t d | t | | d t d | t  j |  |  } t t |  d k  t t  j t |    d  d  S()   Ni   i   i   ii   i   t   db1t   levelgMH@gVf@g'e@g'e?gQyC3t@t   rtolg:0yE>t   atolg'eg^v@g'egʪ H@gVfg'e?gev @g      @g      @g      #@i
   g      !@g      @i    g      ig      ?gZo̙#@i   g        gʪ Hg^vgev t   start_level(   t   pywtt   Wavelett
   tol_doublet   swtR   R	   t   lent   swt_max_level(   t   xR   R   t   cA3t   cD3t   cA2t   cD2t   cA1t   cD1t   expected_cA1t   expected_cD1t   expected_cA2t   expected_cD2t   expected_cA3t   expected_cD3t   rest   coeffs(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_decomposition    s4    3c           C` s   t  t t j d  t j   + t j d t  t t j d  d  Wd  QXt t j d  d  t t j d	  d  t t j d  d  t t j d
  d  d  S(   Ni   t   ignorei    i   i   i   i   i   i   i0   (   R   t   UserWarningR   R   t   warningst   catch_warningst   simplefilterR
   (    (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_max_level@   s    c       	   C` sH  d d d d d d d d g }  t  j d  } t  j |  | d d	 \ \ } } \ } } xd
 d g D]} t j |   j d  } t j | f d d d } | d
 k r t j |  } n | d k r t j |  } n  t  j | | d d	 \ \ } }	 \ }
 } x0 | |	 |
 | g D] } t	 | j
 | j
 k  qWx |
 D] } t | |  q>Wx | D] } t | |  q\Wx | D] } t | |  qzWx |	 D] } t | |  qWt j |   j d  } t j | f d d d } | d
 k rt j |  } n | d k rt j |  } n  t  j | | d d	 d d \ \ } }	 \ }
 } x0 | |	 |
 | g D] } t	 | j
 | j
 k  qbWx$ |
 j d  D] } t | |  qWx$ | j d  D] } t | |  qWx$ | j d  D] } t | |  qWx$ |	 j d  D] } t | |  qWqd Wt t t  j |  | d d	 d d d  S(   Ni   i   i   ii   i   R   R   i   t   Ct   Fii   t   axisi    (   i   i(   ii   (   i   i    (   i   i    (   i   i    (   i   i    (   R   R   R   t   npt   asarrayt   reshapet   concatenatet   ascontiguousarrayt   asfortranarrayR	   t   shapeR   t	   transposeR   t
   ValueError(   R   R   R   R   R   R    t   ordert   x_2dt   cA2_2dt   cD2_2dt   cA1_2dt   cD1_2dt   ct   row(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_axisN   sP    **c    	      C` s   d }  t  j d d  } d | k r4 | j d  n  x | D] } t  j |  } t t j t j t | j	 | j
     } d | |  d } t j |  } t  j | | |   } t  j | |  } t | | d d d	 d
 q; Wd  S(   Ni   t   kindt   discretet   dmeyi   i   R   gh㈵>R   gHz>(   R   t   wavelistt   removeR   t   intR3   t   ceilt   log2t   maxt   dec_lent   rec_lent   arangeR   t   iswtR   (	   t	   max_levelt   waveletst   current_wavelet_strt   current_wavelett   input_length_powert   input_lengtht   XR(   t   Y(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_iswt_integration   s    
c          C` sS  t  j d  }  x=t t t  D],\ } } d j |  } 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 Wd  S(   Nt   haars"   wrong dtype returned for {0} inputi   t   dtypeR   i   s   swt: i   i    s   swt2: (   i   i   (   R   R   t   zipt	   dtypes_int
   dtypes_outt   formatR3   t   onesR   R	   R\   t   swt2(   t   wavelett   dt_int   dt_outt   errmsgR   R   R   R   R    t   cAt   cHt   cVt   cD(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_dtypes   s    *>+>c          C` s   t  j j d  }  t j d  } x t t t  D] \ } } |  j d
  j	 |  } t j
 | | d d } t j | |  } t | | d d d d	 |  j d  j	 |  } t j | | d d } t j | |  } t | | d d d d	 q1 Wd  S(   Ni   R[   i   R   i   R   gư>R   gHz>(   i   (   i   i   (   R3   t   randomt   RandomStateR   R   R]   R^   R_   t   standard_normalt   astypeR   RQ   R   Rb   t   iswt2(   t   rstateRc   Rd   Re   R   RB   t   xr(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_roundtrip_dtypes   s    c       
   C` sz   d }  t  j d d d f  } xU d D]M } t j | |  d d  d	 d d
 | } t t |  t j | j |   q% Wd  S(   Nt   db2i   i   i   i   i    i   R   R   R2   i   i   i    (   i    i   i   (	   R3   Ra   R   R   t   NoneR
   R   R   R9   (   t   wavR   R2   t   sdec(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt_default_level_by_axis   s
    $c          C` sR   t  j d  }  t j   1 t j d t  t t t j	 |  d d d Wd  QXd  S(   Ni   R*   R[   R   i   (
   R3   Ra   R,   R-   R.   t   FutureWarningR   R;   R   Rb   (   R   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt2_ndim_error   s    c   	      C` s  d } |  d  k rC t j d d  }  d |  k rC |  j d  qC n  x |  D] } t j |  } t t j t j t	 | j
 | j     } d | | d } t j | d  j | |  } t j | | |  } t j | |  } t | | d d d	 d qJ Wd  S(
   Ni   RE   RF   RG   i   i   R   gh㈵>R   (   Ru   R   RH   RI   R   RJ   R3   RK   RL   RM   RN   RO   RP   R5   Rb   Rp   R   (	   RS   RR   RT   RU   RV   RW   RX   R(   RY   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt2_iswt2_integration   s    c           C` s   t  d d g  d  S(   NRS   R   (   R{   (    (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt2_iswt2_quick   s    c      
   C` s   x d d d g D] } t  j | d  j | d  } d } t j   ? t j d t  t j | | d d } t j	 | |  } Wd  QXt
 | | d	 t d
 t q Wd  S(   Ni   i   i0   i    R   R*   R   i   R   R   (   R3   RP   R5   R,   R-   R.   Ry   R   Rb   Rp   R   t
   tol_single(   RS   t   nrowsRX   RU   R(   RY   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt2_iswt2_non_square   s    c       	   C` sU  d }  t  j d  } t t j t j t | j | j     } d | } t j	 | d  j
 | |  } t  j | | d d d \ } \ } } } t  j | | d 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+=Rt   i   R   i   i    t   axesR   (   i   i    (   i    i    (   i    (   R   R   RJ   R3   RK   RL   RM   RN   RO   RP   R5   Rb   R   R   R;   (   R   RU   RV   RW   RX   R   t   cH1t   cV1R    R   t   cH2t   cV2R   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swt2_axes  s"    
+c          C` sA   t  j d  }  t j |  d d d } t t t j | d  d  S(   Ni   R[   R   i   (   i   i   i   (   R3   Ra   R   Rb   R   R;   Rp   (   t   x_3dRB   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_iswt2_2d_only  s    c          C` s  d }  t  j d  } t t j t j t | j | j     } d | } t j	 | d  j
 | |  } t  j | | d d d d  d } t  j | | d 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 j g   | d  t t t  j | | d d d d t t t | | d d d d t t t | d  d  d  d   f | d d d d d d d  S(   Ng+=Rt   i   R   i   R   i    t   aaR   t   adt   dat   ddR   iR2   (   i   i    (   i    i    (   R   R   RJ   R3   RK   RL   RM   RN   RO   RP   R5   t   swtnRu   R   R
   R   R;   R4   R   (   R   RU   RV   RW   RX   R(   t   coeffs2t   empty(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swtn_axes"  s.    
""".c      
   C` s  d } |  d  k rC t j d d  }  d |  k rC |  j d  qC n  x~t d d  D]m} | d } xZt t |  |  D]C} x:|  D]2} t j |  } | j d k r q n  t t	 j
 t	 j t | j | j     } d | | d } t	 j | |  j | f |  }	 t j |	 | | d | }
 t |
  } t j |
 | d | } t | |	 d	 d
 d d
 xK t |
 |  D]: \ } } x+ | j   D] \ } } t | | |  qWqzWq Wqy WqS Wd  S(   Ni   RE   RF   RG   i   i   i   R   R   gh㈵>R   (   Ru   R   RH   RI   t   rangeR   R   RN   RJ   R3   RK   RL   RM   RO   RP   R5   R   R   t   iswtnR   R]   t   itemsR   (   RS   RR   t   ndim_transformt   ndimR   RT   Rv   RV   t   NRX   R(   t   coeffs_copyRY   RB   t   c2t   kt   v(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swtn_iswtn_integrationH  s0    
#c           C` s   t  d d g  d  S(   NRS   R   (   R   (    (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_swtn_iswtn_quickq  s    c       	   C` s   t  j d
  j d d d  }  d } d } t j 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   i   i   i    i   R   R   R   ii   (   i    i   (   i    i   i   (   i    i    (
   R3   RP   R5   R   R   R   R   R;   R   t   RuntimeError(   R   RR   R   t   wR(   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_iswtn_errorsu  s    ,c          C` s   d }  d } d } t  j j d  } x t |   D] } g  t |  D] \ } } | d k rD | ^ qD } | j |  } t j | | | d | }	 t j |	 | d | }
 t	 | |
 d d	 d
 d	 q1 Wd  S(   Ni   i0   i    t   sym2i   i    R   R   g|=R   (   i   i0   i    (
   R3   Rl   Rm   R   t	   enumerateRn   R   R   R   R   (   t   _shapeRv   RR   Rq   R9   t   axt   sR   R   RB   t   r(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt%   test_swtn_iswtn_unique_shape_per_axis  s    1c       	   C` s_  t  j j d  }  |  j d d d  } d } t j d  d d f } t j | | d | } t t j | |  | d d	 t j | | d
  d | } t t j | | d
   | d d	 t	 t
 t j | | d  |  t	 t
 t j | | d   t j   [ t j d t  | d } t j | | d  |  } t t j | | d   | d d	 Wd  QXd  S(   Ni  i   i   R[   R   t   db4R   R   g+=i   i   R*   .i    (   .i    (   R3   Rl   Rm   t   randnR   R   R   R   R   R   R;   R,   R-   R.   Ry   Rb   Rp   (   Rq   t   dataR   RS   t   coefst   data2t   coefs2(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_per_axis_wavelets  s    #
c       
   C` s   t  j d  }  x t t j t j t j g t j t j t j	 g  D]s \ } } xd d t j
 d  g D]M } t t | |  d | d d | |  d d d } t t | | d | qe WqC Wd  S(   Ni   t   morlRc   R   i   R   (   i   i   (   R3   Ra   R]   R   R   Rb   R   RQ   Rp   R   t   DiscreteContinuousWaveletR   R;   (   R   t   dec_funct   rec_funct   cwaveRB   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt    test_error_on_continuous_wavelet  s    %c    	      C` sP  t  j d  j t  j  }  |  d |  } d } x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 g D] \ } } | t  j t  j g k r | } t  j } n |  } t  j } t j	 | | d  } | d d j |  | d d j |  g | d <t j
 | |  } t | | j  t | | d d d	 d q Wd  S(
   Ni   y              ?R   i   i    i   R   gMbP?R   (   R3   RP   Ro   t   float64t   float32t   float16t
   complex128t	   complex64R   R   RQ   R
   R\   R   (	   t   x_realt	   x_complexRv   t   dtype1t   dtype2R   t   output_dtypeR(   t   y(    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_iswt_mixed_dtypes  s&    	c          C` sr  t  j j d  }  |  j d d  } | d | } d } x3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 g D] \ } } | t  j t  j g k r | } t  j } n | } t  j } t	 j
 | | d  } | d d j |  t g  | d d D] }	 |	 j |  ^ q
 g | d <t	 j | |  }
 t | |
 j  t |
 | d d d	 d q Wd  S(
   Ni    i   y              ?R   i   i   R   gMbP?R   (   R3   Rl   Rm   R   R   R   R   R   R   R   Rb   Ro   t   tupleRp   R
   R\   R   (   Rq   R   R   Rv   R   R   R   R   R(   RB   R   (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_iswt2_mixed_dtypes  s(    	7c    
      ` s  t  j j d  }  |  j d d d  } | d | } d } xJ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 g D] \ }   | t  j t  j g k r | } t  j } n | } t  j } t	 j
 | | d  } | d j d | j  } | j |  }   f d   | d j   D | d <| | d d | j <t	 j | |  }	 t | |	 j  t |	 | d d	 d
 d	 q Wd  S(   Ni    i   y              ?R   i   t   ac         ` s(   i  |  ] \ } } | j     |  q S(    (   Ro   (   t   .0R   RB   (   R   (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pys
   <dictcomp>  s   	 R   gMbP?R   (   R3   Rl   Rm   R   R   R   R   R   R   R   R   t   popR   Ro   R   R   R
   R\   R   (
   Rq   R   R   Rv   R   R   R   R(   R   R   (    (   R   s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   test_iswtn_mixed_dtypes  s,    	$t   __main__(<   t
   __future__R    R   R   R,   t   copyR   t	   itertoolsR   R   t   numpyR3   t   numpy.testingR   R   R   R	   R
   R   R   R   R   t   pywt._extensions._swtR   t   int8R   R   R   R   R   R^   R_   R}   R   R)   R/   RD   RZ   Rk   Rs   Rx   Rz   t   slowRu   R{   R|   R   R   R   R   R   R   R   R   R   R   R   R   R   t   __name__(    (    (    s2   lib/python2.7/site-packages/pywt/tests/test_swt.pyt   <module>   sP   :	 		8										&(								