
[c        
   @` sO  d  d l  m Z m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 m Z d d l m Z m Z d d l m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z m Z d d l m  Z  d d	 l! m" Z" m# Z# m$ Z$ d d
 l% m& Z& m' Z' y d  d l( m) Z) e* Z+ Wn e, k
 rQe- Z+ n Xd d d d g Z. d d d d g Z/ d d d d g Z0 e e e e e e e e e e g
 Z1 d d e j2 d  e j3 d  e j4 d  g Z5 e j6 d  Z7 d e7 d <e j6 d  Z8 d e8 d <e j9 j: d  Z; e j9 j: d d  Z< d e= f d     YZ> d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   assert_almost_equalt   assert_allclosei   (   t   convolvet   convolve_fft(   t   Gaussian1DKernelt   Gaussian2DKernelt   Box1DKernelt   Box2DKernelt   Trapezoid1DKernelt   TrapezoidDisk2DKernelt   MexicanHat1DKernelt   Tophat2DKernelt   MexicanHat2DKernelt   AiryDisk2DKernelt   Ring2DKernelt   CustomKernelt   Model1DKernelt   Model2DKernelt   Kernel1Dt   Kernel2D(   t   KernelSizeErrori   (   t   Box2Dt
   Gaussian1Dt
   Gaussian2D(   t   AstropyWarningt   AstropyUserWarning(   t   filtersi   i   i	   i   i   i   u   centeru   linear_interpu
   oversampleu	   integratei   g      ?iQ   i(   i=   t   TestKernelsc           B` s  e  Z d  Z e j j d  e j j d e  d     Z e j j d  e j j d e  d     Z	 e j j d- e
 e j e e    d    Z e j j d. e
 e j e e    d    Z e j j d e  d    Z e j j d e  d	    Z d
   Z d   Z e j j d e  d    Z e j j d e  d    Z e j j d e  d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d   Z" d   Z# d   Z$ d   Z% d   Z& d   Z' d    Z( d!   Z) d"   Z* e j j d/ e
 e j e e+    d$    Z, e j j d e-  d%    Z. d&   Z/ d'   Z0 d(   Z1 d)   Z2 d*   Z3 d+   Z4 d,   Z5 RS(0   u:   
    Test class for the built-in convolution kernels.
    u   not HAS_SCIPYu   widthc         C` s   t  |  } | j   t |  } | j   t t | d d } t t | d d } t j t |  } t j t |  } t | | d d t | | d d d S(   uL   
        Test GaussianKernel against SciPy ndimage gaussian filter.
        t   boundaryu   fillt   decimali   N(	   R   t	   normalizeR	   R   t   delta_pulse_1Dt   delta_pulse_2DR   t   gaussian_filterR   (   t   selft   widtht   gauss_kernel_1Dt   gauss_kernel_2Dt
   astropy_1Dt
   astropy_2Dt   scipy_1Dt   scipy_2D(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_scipy_filter_gaussian8   s    

c   	      C` s<  t  |  } t |  } t t | d d d t } t t | d d d t } t j t  " } t t | d d d t	 } Wd QXd | j
 j d k s t  t j t  " } t t | d d d t	 } Wd QXd | j
 j d k s t  t j t |  } t j t |  } t | | d d t | | d d d S(	   uY   
        Test MexicanHat kernels against SciPy ndimage gaussian laplace filters.
        R    u   fillt   normalize_kernelNu   sum is close to zeroi    R!   i   (   R   R   R   R#   t   FalseR$   t   pytestt   raisest	   Exceptiont   Truet   valuet   argst   AssertionErrorR   t   gaussian_laplaceR   (	   R&   R'   t   mexican_kernel_1Dt   mexican_kernel_2DR*   R+   t   excR,   R-   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt"   test_scipy_filter_gaussian_laplaceL   s    !!u   kernel_typec         C` s   | t  k r# t r# t j d  n  | t k s> | |  } n | | | d  } | j d k r t t | d d d t } t	 t | d d d t } t
 | | d d nI t t | d d d t } t	 t | d d d t } t
 | | d d d	 S(
   uI   
        Test smoothing of an image with a single positive pixel
        u/   Omitting AiryDisk2DKernel, which requires SciPyg?i   R    u   fillR/   R!   i   N(   R   t	   HAS_SCIPYR1   t   skipR   t	   dimensionR   R#   R0   R   R   R$   (   R&   t   kernel_typeR'   t   kernelt   c1t   c2(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_delta_dataj   s    c         C` s   | t  k r# t r# t j d  n  | t k s> | |  } n | | | d  } | j d k r t t | d d d t } t	 t | d d d t } t
 | | d d nI t t | d d d t } t	 t | d d d t } t
 | | d d d	 S(
   uA   
        Test smoothing of an image made of random noise
        u/   Omitting AiryDisk2DKernel, which requires SciPyg?i   R    u   fillR/   R!   i   N(   R   R=   R1   R>   R   R?   R   t   random_data_1DR0   R   R   t   random_data_2D(   R&   R@   R'   RA   RB   RC   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_random_data   s    c         C` sV   t  j | | g  } t t | d d } t t | d d } t | | d d d S(   u   
        Test smoothing of an image with a single positive pixel

        Instead of using kernel class, uses a simple, small kernel
        R    u   fillR!   i   N(   t   npt   onesR   R$   R   R   (   R&   R'   RA   RC   RB   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_uniform_smallkernel   s    c         C` sj   t  j | | g  | d } t |  } t t | d d } t t | d d } t | | d d d S(   uI   
        Test smoothing of an image with a single positive pixel
        i   R    u   fillR!   i   N(   RH   RI   R   R   R$   R   (   R&   R'   t   kernel1t   kernel2RC   RB   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_smallkernel_vs_Box2DKernel   s
    c         C` sb   t  d  } t  d  } t  d  } t | |  } t j t j | | j  d k   s^ t  d S(   uR   
        Check if convolving two kernels with each other works correctly.
        i   i   i   g{Gz?N(   R   R   RH   t   allt   abst   arrayR7   (   R&   t   gauss_1t   gauss_2t   test_gauss_3t   gauss_3(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_convolve_1D_kernels   s
    c         C` sb   t  d  } t  d  } t  d  } t | |  } t j t j | | j  d k   s^ t  d S(   uR   
        Check if convolving two kernels with each other works correctly.
        i   i   i   g{Gz?N(   R	   R   RH   RN   RO   RP   R7   (   R&   RQ   RR   RS   RT   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_convolve_2D_kernels   s
    u   numberc         C` s7   t  d  } | | } t | j | j | d d d S(   uN   
        Check if multiplying a kernel with a scalar works correctly.
        i   R!   i   N(   R   R   RP   (   R&   t   numbert   gausst	   gauss_new(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_multiply_scalar   s    
c         C` s2   t  d  } | | } t |  t  k s. t  d S(   uN   
        Check if multiplying a kernel with a scalar works correctly.
        i   N(   R   t   typeR7   (   R&   RW   RX   RY   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_multiply_scalar_type   s    
c         C` s2   t  d  } | | } t |  t  k s. t  d S(   uN   
        Check if multiplying a kernel with a scalar works correctly.
        i   N(   R   R[   R7   (   R&   RW   RX   RY   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_rmultiply_scalar_type   s    
c         C` s.   t  d  } t j t   | | Wd QXd S(   u9   Test that multiplying two 1D kernels raises an exception.i   N(   R   R1   R2   R3   (   R&   RX   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_multiply_kernel1d   s    c         C` s.   t  d  } t j t   | | Wd QXd S(   u9   Test that multiplying two 2D kernels raises an exception.i   N(   R	   R1   R2   R3   (   R&   RX   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_multiply_kernel2d   s    c         C` s.   t  j t   t d  t d  Wd QXd S(   ua   
        Test that multiplying a 1D kernel with a 2D kernel raises an
        exception.
        i   N(   R1   R2   R3   R   R	   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_multiply_kernel1d_kernel2d   s    c         C` s(   t  j t   t d  d Wd QXd S(   u:   Test that adding a scalar to a kernel raises an exception.i   i   N(   R1   R2   R3   R   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_add_kernel_scalar   s    c         C` su   d } t  d t j d t j | d  d |  } t | d d } t | d d } t | j | j d d d	 S(
   u>   
        Check Model1DKernel against Gaussian1Dkernel
        g      @g      ?i   i    t   x_sizei   R!   i   N(   R   RH   t   sqrtt   piR   R   R   RP   (   R&   t   stddevRX   t   model_gauss_kernelt   gauss_kernel(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_model_1D_kernel   s    .c         C` sr   d } t  d d t j | d d d | |  } t | d d } t | d d } t | j | j d d d	 S(
   u>   
        Check Model2DKernel against Gaussian2Dkernel
        g      @g      ?i   i    Rb   i   R!   i   N(   R   RH   Rd   R   R	   R   RP   (   R&   Re   RX   Rf   Rg   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_model_2D_kernel  s    +c         C` sr   t  j d  } t |  } | j   t d  } t t | d d } t t | d d } t | | d d d S(   u9   
        Check CustomKernel against Box1DKernel.
        i   R    u   fillR!   i   N(   RH   RI   R   R"   R
   R   R#   R   (   R&   RP   t   customt   boxRC   RB   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_1D_kernel  s    
c         C` sr   t  j d  } t |  } | j   t d  } t t | d d } t t | d d } t | | d d d S(   u9   
        Check CustomKernel against Box2DKernel.
        i   R    u   fillR!   i   N(   i   i   (   RH   RI   R   R"   R   R   R$   R   (   R&   RP   Rj   Rk   RC   RB   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_2D_kernel  s    
c         C` s4   t  d d d d d g  } | j t k s0 t  d S(   u9   
        Check if CustomKernel works with lists.
        i   N(   R   t   is_boolR4   R7   (   R&   Rj   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_1D_kernel_list*  s    c         C` sI   t  d d d g d d d g d d d g g  } | j t k sE t  d S(   u9   
        Check if CustomKernel works with lists.
        i   N(   R   Rn   R4   R7   (   R&   Rj   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_2D_kernel_list1  s    c         C` sY   d d d d d g } t  |  } | j   | j d k s@ t  | j d k sU t  d S(   u]   
        Check if CustomKernel works when the input array/list
        sums to zero.
        iii    i   i   g        N(   R   R"   t
   truncationR7   t   _kernel_sum(   R&   RP   Rj   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_1D_kernel_zerosum:  s
    
c         C` sn   d d d g d d d g d d d g g } t  |  } | j   | j d k sU t  | j d k sj t  d S(   u]   
        Check if CustomKernel works when the input array/list
        sums to zero.
        i    ii   g        N(   R   R"   Rq   R7   Rr   (   R&   RP   Rj   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_2D_kernel_zerosumE  s
    *
c      	   C` s0   t  j t   t d d d d g  Wd QXd S(   uH   
        Check if CustomKernel raises if the array size is odd.
        i   N(   R1   R2   R   R   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_custom_kernel_odd_errorP  s    c         C` s  t  d  } t  d  } t  d  } | | | } | | | } | | | } d
 d d d d d d d d g } t | j | d d t | j | d d t | j | d d t | j d d d d d g d d t | j d d d g d d t | j d g d d d	 S(   u:   
        Check if adding of two 1D kernels works.
        i   i   i   g      @g      @R!   i   g?Ng?g?gUUUUUU?gUUUUUU?g?g?gUUUUUU?g?gUUUUUU?gUUUUUU?gUUUUUU?(   R
   R   RP   (   R&   t   box_1t   box_2t   box_3t	   box_sum_1t	   box_sum_2t	   box_sum_3t   ref(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_add_1D_kernelsW  s    %%c         C` s   t  d  } t  d  } | | } | | } d d d	 g d
 d d d g d d d g g } d d d g d d d g d d d g g } t | j d g g d d t | j | d d t | j | d d t | j | d d d S(   u:   
        Check if adding of two 1D kernels works.
        i   i   g      "@R!   i   Ngqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?gqq?(   R   R   RP   (   R&   Rv   Rw   Ry   Rz   R|   t   ref_1(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_add_2D_kernelsk  s    

c         C` s.   t  d d d } | j j d k s* t  d S(   u>   
        Check if even size for GaussianKernel works.
        i   Rb   i
   N(   R   RP   t   sizeR7   (   R&   RX   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_Gaussian1DKernel_even_size~  s    c         C` s4   t  d d d d d } | j j d k s0 t  d S(   u>   
        Check if even size for GaussianKernel works.
        i   Rb   i
   t   y_sizeN(   i
   i
   (   R	   RP   t   shapeR7   (   R&   RX   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_Gaussian2DKernel_even_size  s    c         C` sJ   t  d d d d d g  } | j d d  | j j   d k sF t  d S(   u:   
        Check if normalize works with peak mode.
        i   i   i   t   modeu   peakN(   R   R"   RP   t   maxR7   (   R&   Rj   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_normalize_peak  s    c         C` s   t  d  } | j d k s! t  t | j t  s9 t  | j d d g k sT t  | j   t | j	 d d d | j
 s t  d S(   u9   
        Check if kernel attributes are correct.
        i   i    i   g      ?R!   i   N(   R   Rq   R7   t
   isinstancet   modelR   t   centerR"   R   Rr   t	   separable(   R&   Rk   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_check_kernel_attributes  s    
u   modec         C` s   | t  k r# t r# t j d  n  | t k s> | d  } n | d d  } | j d k r t t | d d d t } t	 t | d d d t } t
 | | d d	 nI t t | d d d t } t	 t | d d d t } t
 | | d d	 d
 S(   u   
        Check if the different modes result in kernels that work with convolve.
        Use only small kernel width, to make the test pass quickly.
        u/   Omitting AiryDisk2DKernel, which requires SciPyi   g?i   R    u   fillR/   R!   i   Ng433333?(   R   R=   R1   R>   R   R?   R   R#   R0   R   R   R$   (   R&   R@   R   RA   RB   RC   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_discretize_modes  s    c         C` s   t  |  } | j d d d k s) t  | j j   d k sD t  t |  } t j g  | j D] } | d d k ^ q`  s t  | j j   d k s t  d S(   uC   
        Check if BoxKernel work properly with even sizes.
        i    i   g      ?N(   R
   R   R7   RP   t   sumR   RH   RN   (   R&   R'   t	   kernel_1Dt	   kernel_2Dt   _(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_box_kernels_even_size  s    5c         C` si   t  t j d   } | j   t j | j  } | j   t | | j  | j   t | | j  d S(   uU   
        Test that repeated normalizations do not change the kernel [#3747].
        i   N(   R   RH   RI   R"   t   copyRP   R   (   R&   RA   t   data(    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel_normalization  s    


c         C` s?   t  j t  * t t j d   } | j d d  Wd QXd S(   uB   
        Test that an error is raised if mode is invalid.
        i   R   u   invalidN(   R1   R2   t
   ValueErrorR   RH   RI   R"   (   R&   RA   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel_normalization_mode  s    c         C` s*   t  j t   t d d d Wd QXd S(   ud   
        Test that an error is raised if ``Kernel1D`` ``x_size`` is not
        an integer.
        i   Rb   g333333?N(   R1   R2   t	   TypeErrorR   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel1d_int_size  s    c         C` s*   t  j t   t d d d Wd QXd S(   ud   
        Test that an error is raised if ``Kernel2D`` ``x_size`` is not
        an integer.
        i   Rb   g333333?N(   R1   R2   R   R	   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel2d_int_xsize  s    c      
   C` s0   t  j t   t d d d d d Wd QXd S(   ud   
        Test that an error is raised if ``Kernel2D`` ``y_size`` is not
        an integer.
        i   Rb   i   R   g333333?N(   R1   R2   R   R	   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel2d_int_ysize  s    c         C` s!   t  j t   t   Wd QXd S(   un   
        Test that an error is raised if an array or model is not
        specified for ``Kernel1D``.
        N(   R1   R2   R   R   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel1d_initialization  s    c         C` s!   t  j t   t   Wd QXd S(   un   
        Test that an error is raised if an array or model is not
        specified for ``Kernel2D``.
        N(   R1   R2   R   R   (   R&   (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   test_kernel2d_initialization  s    (   u   kernel_typeu   width(   u   kernel_typeu   width(   u   kernel_typeu   mode(6   t   __name__t
   __module__t   __doc__R1   t   markt   skipift   parametrizet
   WIDTHS_ODDR.   R<   t   listt	   itertoolst   productt   KERNEL_TYPESRD   RG   RJ   RM   RU   RV   t   NUMSRZ   R\   R]   R^   R_   R`   Ra   Rh   Ri   Rl   Rm   Ro   Rp   Rs   Rt   Ru   R}   R   R   R   R   R   t   MODESR   t   WIDTHS_EVENR   R   R   R   R   R   R   R   (    (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyR   3   sT   !!00																									0						(   iQ   iQ   (   i(   i(   (?   t
   __future__R    R   R   R   R   R1   t   numpyRH   t   numpy.testingR   R   R   R   t   kernelsR   R	   R
   R   R   R   R   R   R   R   R   R   R   R   R   R   t   utilsR   t   modeling.modelsR   R   R   t   utils.exceptionsR   R   t   scipy.ndimageR   R4   R=   t   ImportErrorR0   R   R   R   R   t   floatt   float32t   float64R   t   zerosR#   R$   t   randomt   randRE   RF   t   objectR   (    (    (    sJ   lib/python2.7/site-packages/astropy/convolution/tests/test_kernel_class.pyt   <module>   s:   "j

0

