
    HR-eƦ                     |   d dl Z d dlmZ d dlZd dlmZ d dlZd dlm	Z	m
Z
mZ d dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZ d	Z e e j        ee                    Zg d
ZddgZddgZddgZ  e e! e j"        ef          e                    edfedfgz   Z# G d d          Z$ G d d          Z% G d d          Z&ej'        (                    de          d             Z)ej'        (                    dd          d             Z*d Z+ej'        ,                    e d          d             Z-ej'        ,                    e d          d              Z.d! Z/ej'        (                    de          d"             Z0ej'        (                    d# e j        ee                    d$             Z1d% Z2d& Z3dS )'    N)nullcontext)assert_allcloseassert_array_almost_equalassert_array_almost_equal_nulp)units)convolveconvolve_fft)Gaussian2DKernel)
HAS_PANDAS	HAS_SCIPY)AstropyUserWarning)z>f4z<f4>f8z<f8Nfillwrapextendinterpolater   TFr   c            
       f   e Zd Zd Zd Zej                            d ej	        e
eeee                    d             Zej                            d ej	        e
eeee                    d             Zej                            d ej	        e
eeee                    d             Zej                            de          d             Zej                            d	e          d
             Zej                            de
          d             Zej                            de
          d             Zej                            d ej	        e
eee                    d             Zej                            d ej	        e
eee                    d             Zej                            d ej	        e
e                    d             Zej                            d ej	        e
e                    d             Zej                            de          d             ZdS )TestConvolve1Dc                     g d}g d}t          ||d          }t          |t          j        g d          d           dS )J
        Test that convolve works correctly when inputs are lists
                    r         皙?g333333?r    Nboundary        g@      @ffffff@r&   g333333@r$   
   r   r   nparrayselfxyzs       Glib/python3.11/site-packages/astropy/convolution/tests/test_convolve.py	test_listzTestConvolve1D.test_list#   s`    
 "!!OOQD)))&rx;;;<<b	
 	
 	
 	
 	
    c                 |    d}d}t          ||d          }t          |t          j        g d          d           dS )zK
        Test that convolve works correctly when inputs are tuples
        r   r   Nr!   r#   r'   r(   r+   s       r0   
test_tuplezTestConvolve1D.test_tuple/   sV    
 "QD)))&rx;;;<<b	
 	
 	
 	
 	
r2   )r"   nan_treatmentnormalize_kernelpreserve_nandtypec                     t          j        g d|          t          j        z  }t          j        g d|          }t	          ||||||          }|j        |j        k    sJ dS )zS
        Test that convolve works correctly when input array is a Quantity
        r   r8   r   r"   r5   r6   r7   N)r)   r*   uphr   unit)	r,   r"   r5   r6   r7   r8   r-   r.   r/   s	            r0   test_quantityzTestConvolve1D.test_quantity;   s    " H***%88814?H___E222'-%
 
 
 vr2   c                    g d}g d}t          j        ||          }t          j        ||          }	d|j        _        d|	j        _        t	          ||	||||           t          j        t          j        ||          |k              sJ t          j        t          j        ||          |	k              sJ dS )r   )      ?      @r%         @r%         @       @r   r:   Fr;   N)r)   r*   flags	writeabler   all)
r,   r"   r5   r6   r7   r8   r*   kernelr-   r.   s
             r0   test_input_unmodifiedz$TestConvolve1D.test_input_unmodifiedY   s    " 433 HU%(((HV5))) "!'-%	
 	
 	
 	
 vbhuE222a788888vbhvU333q89999999r2   c                    dddt           j        dddg}g d}t          j        ||          }t          j        ||          }	d|j        _        d|	j        _        |                                }
|	                                }t          ||	||||	           t          j        |          }t          j        |          }| }| }t          j        |
|         ||         k              sJ t          j        ||         |	|         k              sJ t          j        t          j        ||                             sJ t          j        t          j        |	|                             sJ d
S )zB
        Test that convolve doesn't modify the input data
        rA   rB   r%   rD   rE   r   r:   Fr;   N)	r)   nanr*   rF   rG   copyr   isnanrH   )r,   r"   r5   r6   r7   r8   r*   rI   r-   r.   x_copyy_copyarray_is_nankernel_is_nanarray_not_nankernel_not_nans                   r0   test_input_unmodified_with_nanz-TestConvolve1D.test_input_unmodified_with_nan   sk   " c3S#6 HU%(((HV5))) "! '-%	
 	
 	
 	
 x((%'vf]+q/??@@@@@vf^,.0AABBBBBvbhq//00000vbhq/001111111r2   dtype_arraydtype_kernelc                     t          j        g d|          }t          j        g d|          }t          ||          }|j        |j        k    sJ dS )G
        Test that 32- and 64-bit floats are correctly handled
        rA          @      @r:   r$   rA   r$   Nr)   r*   r   r8   r,   rW   rX   r-   r.   r/   s         r0   
test_dtypezTestConvolve1D.test_dtype   s\     H___K888H___L999QNNw!'!!!!!!r2   )convfuncr"   c                     t          j        g dd          }t          j        dgd          } ||||          }t           j                            ||           dS )zV
        Test that a unit kernel with a single element returns the same array
        r[   r   r:   rA   r!   N)r)   r*   testingr   )r,   r"   rb   r-   r.   r/   s         r0   test_unity_1_nonez TestConvolve1D.test_unity_1_none   sf     H___E222HcU%(((HQH---

""1a(((((r2   r"   c                 &   t          j        g dd          }t          j        g dd          }t          |||          }|2t          j        |t          j        g dd          k              sJ dS t          j        ||k              sJ dS )z|
        Test that a unit kernel with three elements returns the same array
        (except when boundary is None).
        r[   r   r:   r^   r!   Nr$   r\   r$   r)   r*   r   rH   r,   r"   r-   r.   r/   s        r0   test_unity_3zTestConvolve1D.test_unity_3   s     H___E222H___E222QH---6!rxuEEEEFFFFFFF6!q&>>!!!!!r2   c                 4   t          j        g dd          }t          j        g dd          }t          |||d          }|2t          j        |t          j        g dd          k              sJ dS |d	k    r2t          j        |t          j        g d
d          k              sJ dS |dk    r2t          j        |t          j        g dd          k              sJ dS t          j        |t          j        g dd          k              sJ dS )z
        Test that the different modes are producing the correct results using
        a uniform kernel with three elements
        )rA   r$   r]   r   r:   rA   rA   rA   Fr"   r6   N)r$   rB   r$   r   rA   rB   r]   r   )rB   rB   rB   )r\   rB   rC   rh   ri   s        r0   test_uniform_3zTestConvolve1D.test_uniform_3   s6    H___E222H___E222QHuEEE6!rxuEEEEFFFFFFF6!rxuEEEEFFFFFFF6!rxuEEEEFFFFFFF6!rxuEEEEFFFFFFFr2   r;   c           	      f   t          j        dt           j        dgd          }t          j        g dd          }|dk    r|st          j        t
          d          }nt                      }|5  t          ||||||	          }d
d
d
           n# 1 swxY w Y   |rt          j        |d                   sJ t          j	        |          }t          j	        |          }|2t          j
        |t          j        g dd          k              sJ d
S t          j
        ||k              sJ d
S )z
        Test that a unit kernel with three elements returns the same array
        (except when boundary is None). This version includes a NaN value in
        the original array.
        rA   r]   r   r:   r^   r   z9nan_treatment='interpolate', however, NaN values detectedmatchr;   Nr   r$   r$   r$   )r)   r*   rL   pytestwarnsr   r   r   rN   
nan_to_numrH   )	r,   r"   r5   r6   r7   r-   r.   ctxr/   s	            r0   test_unity_3_withnanz#TestConvolve1D.test_unity_3_withnan   s   $ Hc263'u555H___E222
 M)),),"Q  CC
 --C 	 	!+!1)  A	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  	"8AaD>>!!!M!M!6!rxuEEEEFFFFFFF6!q&>>!!!!!s   0BBBc                    t          j        dt           j        dgd          }t          j        g dd          }t          ||||||          }|rt          j        |d                   sJ t          j        |          }i dg d	d
g ddg ddg ddg ddg ddg ddg ddg ddg ddg ddg dd g d!d"g d#d$g d%d&g d'|||f         }|rd(|d<   t          |t          j        |d          d)           d*S )+z
        Test that the different modes are producing the correct results using
        a uniform kernel with three elements. This version includes a NaN
        value in the original array.
        rA   r]   r   r:   rl   r;   r   )Nr   T)r      r   )Nr   F)r   r   r   )Nr   T)r   UUUUUU?r   )Nr   F)r   r   r   )r   r   T)      ?rz         ?)r   r   F)r}   r   g      @)r   r   T)gUUUUUU?r{   rA   )r   r   F)r   r      )r   r   T)rz   rz   rz   )r   r   F)r   r   r   )r   r   T)r{   r{   r{   )r   r   F)r   r   r   )r   r   Tr   rz   r~   )r   r   F)r~   r   	   )r   r   T)gUUUUUU?r{   r\   )r   r   F)rz   r   r   r   r'   N)r)   r*   rL   r   rN   rv   r   )	r,   r"   r5   r6   r7   r-   r.   r/   rslts	            r0   test_uniform_3_withnanz%TestConvolve1D.test_uniform_3_withnan2  s   $ Hc263'u555H___E222'-%
 
 
  	"8AaD>>!!!M!
'
()))
 !///
 "999	

 *+@+@+@
 +,A,A,A
 #$?$?$?
 $YYY
 *999
 +III
 #$?$?$?
 $YYY
 ,YYY
 -iii
 %&A&A&A
  &yyy!
" M#3
3#5$  	DG&q"(4u*E*E*ErJJJJJr2   rm   c                 (   |rt          j        d           g d}g d}t          j        t	          |          dd          sJ t          ||||          }g dg d	g d
g dd|         }t          |t          j        |d          d           dS )zK
        Test that convolve works correctly with zero sum kernels.
        (You can't normalize by a zero sum kernel	r   rz   r~   r   r   r   r   r   r   	r   r   r   r   r   r   r   r   r   g:0yE>)atolrm   )	r$   r$   r$   r$   r$   r$   r$   r$   r$   )	                  r$   r$         $@      5@     @@      G@)	g      Bg      ;g      2g      "r$         "@      2@      ;@      B@)	g      $r   r   r   r$   rA   r]   rC   r   r   r   r:   r'   N)rt   xfailr)   isclosesumr   r   r*   r,   r"   r6   r-   r.   r/   r   s          r0   test_zero_sum_kernelz#TestConvolve1D.test_zero_sum_kerneln  s      	ELCDDD'''///z#a&&!$//////QH?OPPP BAAHHHKKKIII	
 

  	'q"(4u*E*E*ErJJJJJr2   c                 
   |rt          j        d           g d}t          j        g dg dd          }t	          ||||          }g dg d	g d
g dd|         }t          |t          j        |d          d           dS )zQ
        Test that convolve works correctly with integer masked kernels.
        r   r   r   )	r   r   r   r   r   r   r   r   r   r$   mask
fill_valuerm   )	r$   r$   r$   r$   r   r$   r$   r$   r$   )	r   r]   rC   rE   r   r   r   r   r   )	g      ?g      5g      &r   r   r         4@g      >@      D@)	      r$   rB   rD   r   r         (@      .@      3@r   r   r:   r'   N)rt   r   mar*   r   r   r)   r   s          r0   test_int_masked_kernelz%TestConvolve1D.test_int_masked_kernel  s      	ELCDDD'''H///,,,
 
 
 QH?OPPP BAAFFFLLLHHH	
 

  	'q"(4u*E*E*ErJJJJJr2   r7   c                     t          j        g dg dd          }t          j        g dd          }t          |||          }|r!t          j        |d	                   sJ d
|d	<   t          |dd           dS )zP
        Test that convolve works correctly with integer masked arrays.
        )r~   r   r         )r   r   r   r   r   r$   r   rl   r   r:   )r7   rz   r   )gUUUUUU@r   r      r   r'   N)r   r*   r)   r   rN   r   )r,   r7   r-   r.   r/   s        r0   test_int_masked_arrayz$TestConvolve1D.test_int_masked_array  s     H&&&___MMMH___E222Q555 	8AaD>>!!!AaD&q*@"EEEEEr2   N)__name__
__module____qualname__r1   r4   rt   markparametrize	itertoolsproductBOUNDARY_OPTIONSNANHANDLING_OPTIONSNORMALIZE_OPTIONSPRESERVE_NAN_OPTIONSVALID_DTYPESr?   rJ   rU   VALID_DTYPE_MATRIXra   BOUNDARIES_AND_CONVOLUTIONSre   rj   ro   rx   r   r   r   r    r2   r0   r   r   "   sk       

 

 



 

 

 [R	 	
 	
	 	   	 	 ( [R	 	
 	
	 	: :	 	:8 [R	 	
 	
	 	'2 '2	 	'2R [<>PQQ" " RQ" [	
 	$ ) ) ) [Z)9::" " ;:"" [Z)9::G G ;:G* [I	 		
 	
 +" +" +"Z [I	 		
 	
 1K 1K 1Kf [(	*,=>> K K	 K0 [(	*,=>> K K	 K6 [^-ABBF F CBF F Fr2   r   c                   T   e Zd Zd Zej                            de          d             Zej                            de	          d             Z
ej                            de	          d             Zej                            de	          d             Zej                            de	          d             Zej                            de	          d	             Zej                            de	          d
             Zej                            de	          d             ZdS )TestConvolve2Dc                     g dg dg dg}t          ||ddd          }t          ||d           t          ||ddd          }t          |t          j        |t                    dz  d           d	S )
r   r   r   r   r   r   Tr"   r   r6   r'   Fr   N)r   r   r)   r*   floatr,   r-   r/   s      r0   r1   zTestConvolve2D.test_list  s     YY			999-QFq4PPP&q!R000QFq5QQQ&q"(1e*<*<q*@"EEEEEr2   rV   c                     t          j        g dg dg dg|          }t          j        g dg dg dg|          }t          ||          }|j        |j        k    sJ dS rZ   r[   rB   r%   rC   rD   rE   r   r:   rs   r^   Nr_   r`   s         r0   ra   zTestConvolve2D.test_dtype       H__ooo?{
 
 
 H__ooo?|
 
 
 QNNw!'!!!!!!r2   r"   c                     t          j        g dg dg dgd          }t          j        dggd          }t          |||          }t          j        ||k              sJ dS )	zD
        Test that a 1x1 unit kernel returns the same array
        r[   r   r   r   r:   rA   r!   Nrh   ri   s        r0   test_unity_1x1_nonez"TestConvolve2D.test_unity_1x1_none  sv     HoooHPUVVVHseWE***QH---va1f~~r2   c           	      P   t          j        g dg dg dgd          }t          j        g dg dg dgd          }t          |||          }|9t          j        |t          j        g dg d
g dgd          k              sJ d	S t          j        ||k              sJ d	S )zl
        Test that a 3x3 unit kernel returns the same array (except when
        boundary is None).
        r[   r   r   r   r:   rs   r^   r!   N)r$   r%   r$   rh   ri   s        r0   test_unity_3x3zTestConvolve2D.test_unity_3x3  s     HoooHPUVVVHoooHPUVVVQH---68$__oooGu         6!q&>>!!!!!r2   c           	      @   t          j        g dg dg dgd          }t          j        g dg dg dgd          }t          |||d          }|0t          |t          j        g d
g dg d
gd          d           d	S |dk    r0t          |t          j        g dg dg dgd          d           d	S |dk    r0t          |t          j        g dg dg dgd          d           d	S t          |t          j        g dg dg dgd          d           d	S )u
        Test that the different modes are producing the correct results using
        a 3x3 uniform kernel.
        )r$   r$   r]   )rA   r$   r$   rg   r   r:   rl   Frm   Nrs   )r$   rC   r$   r'   r   rn   )r]   rC   r%   )r]   r]   r\   r   )rC   rC   rC   )r\   rD   r   )rB   rC   rE   )rC   r%   rB   r)   r*   r   r   ri   s        r0   test_uniform_3x3zTestConvolve2D.test_uniform_3x3  s    HoooHPUVVVHoooHPUVVVQHuEEE*$__oooGu        *$__oooGu        *$__oooGu        +%%%HPU       r2   c           	         t          j        g ddt           j        dgg dgd          }t          j        g dg dg dgd          }t          |||d	d
          }t          j        |d                   sJ t          j        |          }t          j        |          }|9t          j        |t          j        g dg dg dgd          k              sJ dS t          j        ||k              sJ dS )z
        Test that a 3x3 unit kernel returns the same array (except when
        boundary is None). This version includes a NaN value in the original
        array.
        r[   rB   rC   r   r   r:   rs   r^   r   Tr"   r5   r7   )r   r   N)r)   r*   rL   r   rN   rv   rH   ri   s        r0   test_unity_3x3_withnanz%TestConvolve2D.test_unity_3x3_withnan,  s4    H__sBFC0///B%
 
 
 HoooHPUVVVQHFQUVVVx$     M!M!68$__oooGu         6!q&>>!!!!!r2   c           	         t          j        g ddt           j        dgg dgd          }t          j        g dg dg dgd          }t          |||dd	
          }|0t	          |t          j        g dg dg dgd          d           dS |dk    r0t	          |t          j        g dg dg dgd          d           dS |dk    r0t	          |t          j        g dg dg dgd          d           dS |dk    r0t	          |t          j        g dg dg dgd          d           dS t          d          )
        Test that the different modes are producing the correct results using
        a 3x3 uniform kernel. This version includes a NaN value in the
        original array.
        r$   r$   rB   rA   r$   r$   r]   r$   r   r:   rl   r   Fr"   r5   r6   Nrs   )r$   rE   r$   r'   )rA   r%   rB   )rB   rE   rD   )rB   rB   r]   r   )rE   rE   rE   r   )r\   r         0@)r%   rE   g      &@)rE   rD   rC   Invalid boundary specificationr)   r*   rL   r   r   
ValueErrorri   s        r0   test_uniform_3x3_withnanfilledz-TestConvolve2D.test_uniform_3x3_withnanfilledJ  s    H__sBFC0///B%
 
 
 HoooHPUVVVq86E
 
 
 *$__oooGu        *$__oooGu        *$__oooGu        !!*%%%'7'7'7IQV        =>>>r2   c           	         t          j        g ddt           j        dgg dgd          }t          j        g dg dg dgd          }t          |||dd	
          }|0t	          |t          j        g dg dg dgd          d           dS |dk    r0t	          |t          j        g dg dg dgd          d           dS |dk    r0t	          |t          j        g dg dg dgd          d           dS |dk    r0t	          |t          j        g dg dg dgd          d           dS t          d          )r   r   rA   r$   r   r   r:   rl   r   Tr   Nrs   r^   r'   r   )g      ?      ?r|   )r|   rA         ?)r|   r|   g      ?r   r   )g      ?g      ?r\   )r   rA   g      ?)rA   r   g      ?r   r   ri   s        r0    test_uniform_3x3_withnaninterpedz/TestConvolve2D.test_uniform_3x3_withnaninterped  s    H__sBFC0///B%
 
 
 HoooHPUVVVq8=SW
 
 
 *$__oooGu        *333333333
          *$__oooGu        !!*444444333
          =>>>r2   c           	      l   t          j        g dg dg dgd          }t          j        g dg dg dgd          }t          |||dd	
          }|0t          |t          j        g dg dg dgd          d           d S |dk    r0t          |t          j        g dg dg dgd          d           d S |dk    r0t          |t          j        g dg dg dgd          d           d S |dk    r0t          |t          j        g dg dg dgd          d           d S t	          d          )Nr   )rA   r\   r$   r   r   r:   )rA   r   rA   )r   r$   r   r   Fr   rs   r'   )rA   r   r\   )rA   r$   r   )       r   r   r   )r$   g       rC   )r%   r$         )r\   r]   r   r   )r\   r   r   )r$   r$   rA   )r\   r   r\   r   )r)   r*   r   r   r   ri   s        r0   test_non_normalized_kernel_2Dz,TestConvolve2D.test_non_normalized_kernel_2D  s   HoooHPWXXXH0002B2B2BC7
 
 
 q86E
 
 
 *$__oooGw        *%%%'7'7'79K9K9KL!        *%%%'7'7'79I9I9IJ!        !!*&&&9I9I9IJ!        =>>>r2   N)r   r   r   r1   rt   r   r   r   ra   r   r   r   r   r   r   r   r   r   r2   r0   r   r     s       	F 	F 	F [<>PQQ" " RQ"" [Z)9::  ;: [Z)9::" " ;:", [Z)9::+ + ;:+Z [Z)9::" " ;:": [Z)9::2? 2? ;:2?h [Z)9::<? <? ;:<?| [Z)9::/? /? ;:/? /? /?r2   r   c                   *   e Zd Zd Zej                            de          d             Zej                            de	          d             Z
ej                            de	          d             Zej                            de	          d             Zej                            d ej        e	e                    d	             Zej                            de	          d
             Zej                            de	          d             ZdS )TestConvolve3Dc                     g dg dg dgg dg dg dgg dg dg dgg}t          ||ddd          }t          |dz  |d           dS )	r   r   r   r   Fr      r'   N)r   r   r   s      r0   r1   zTestConvolve3D.test_list  s    
 YY			999-YY			999-YY			999-
 QFq5QQQ&q2vq"55555r2   rV   c                     t          j        g dg dg dg|          }t          j        g dg dg dg|          }t          ||          }|j        |j        k    sJ dS r   r_   r`   s         r0   ra   zTestConvolve3D.test_dtype  r   r2   r"   c                     t          j        g dg dg dgg dg dg dgg dg dg d	ggd
          }t          j        dgggd
          }t          |||          }t          j        ||k              sJ dS )zF
        Test that a 1x1x1 unit kernel returns the same array
        rA   r\   rA   r\   r]   rA   r]   r\   r%   rB   r]   rA   )r%   r$   r\   rC   rA   rA   rD   r$   r\   rE   r\   r]   r   r\   r\   r   r:   rA   r!   Nrh   ri   s        r0   test_unity_1x1x1_nonez$TestConvolve3D.test_unity_1x1x1_none  s     H ///???C ///???C ///???C
 
 
 
 HugYe,,,QH---va1f~~r2   c                    t          j        g dg dg dgg dg dg dgg dg dg d	ggd
          }t          j        dd
          }d|d<   t          |||          }|Nt          j        |t          j        g dg dg dgg dg dg dgg dg dg dggd
          k              sJ dS t          j        ||k              sJ dS )zn
        Test that a 3x3x3 unit kernel returns the same array (except when
        boundary is None).
        r   r   r   r   r%   r]   r\   r   r   r   r   r   r:   r~   r~   r~   rA   r   r!   Nrs   r   )r)   r*   zerosr   rH   ri   s        r0   test_unity_3x3x3zTestConvolve3D.test_unity_3x3x3&  sO    H ///???C ///???C ///???C
 
 
 
 HYe,,,'
QH---68(///???K(///???K(///???K
    
 
 
 
 
 
 
 6!q&>>!!!!!r2   c                     t          j        g dg dg dgg dg dg dgg dg dg d	ggd
          }t          j        dd
          }t          |||d          }|Et	          |t          j        g dg dg dgg dg dg dgg dg dg dggd
          d           dS |dk    rEt	          |t          j        g dg dg dgg dg dg dgg dg dg dggd
          d           dS |dk    rEt	          |t          j        g dg dg dgg dg dg dgg dg dg dggd
          d           dS t	          |t          j        g dg d g d!gg d"g d#g d$gg d%g d&g d'ggd
          d           dS )(r   r   r   r   r   r   r   r   r   r   r   r:   r   Frm   Nrs   )r$        @T@r$   r'   r   )      7@g      <@r   )g     A@r         9@)r   g      A@r   )r         I@r   )     O@r   r   )r         N@r   )      @@r   r   )r   g     N@      6@)r   g      F@r   r   )r   r   r   )g     @P@      K@     E@)     R@g     P@     L@)     @U@     S@     Q@)      X@r  r   )g      [@r   r   )g      ^@g     V@      O@)g     _@      V@g     H@)g     a@r       I@)g     `c@g      Z@g     J@)r)   r*   onesr   r   ri   s        r0   test_uniform_3x3x3z!TestConvolve3D.test_uniform_3x3x3J  s    H ///???C ///???C ///???C
 
 
 
 GIU+++QHuEEE*(///???K(*:*:*:OOOL(///???K
          *+++-?-?-?ASASAST+++-?-?-?ASASAST+++-?-?-?ASASAST
          *+++-?-?-?ASASAST+++-?-?-?ASASAST+++-?-?-?ASASAST
          ++++-?-?-?ASASAST+++-@-@-@BUBUBUV//////000         r2   )r"   r5   c                 >   t          j        g dg dg dgg ddt           j        dgg dgg dg d	g d
ggd          }t          j        dd          }d|d<   t	          ||||d          }t          j        |d                   sJ t          j        |          }t          j        |          }|Nt          j        |t          j        g dg dg dgg dg dg dgg dg dg dggd          k              sJ dS t          j        ||k              sJ dS )z
        Test that a 3x3x3 unit kernel returns the same array (except when
        boundary is None). This version includes a NaN value in the original
        array.
        r   r   r   r   r%   r\   r   r   r   r   r   r:   r   rA   r   Tr   Nrs   )r)   r*   rL   r   r   rN   rv   rH   )r,   r"   r5   r-   r.   r/   s         r0   test_unity_3x3x3_withnanz'TestConvolve3D.test_unity_3x3x3_withnan  s    H ///???C 3"4oooF ///???C
 
 
 
 HYe,,,'
q8=t
 
 
 x'
#####M!M!68(///???K(///???K(///???K
    
 
 
 
 
 
 
 6!q&>>!!!!!r2   c                 B   t          j        g dg dg dgg ddt           j        dgg dgg dg d	g d
ggd          }t          j        dd          }t	          |||dd          }|Et          |t          j        g dg dg dgg dg dg dgg dg dg dggd          d           dS |dk    rEt          |t          j        g dg dg dgg dg dg dgg dg dg dggd          d           dS |dk    rEt          |t          j        g dg dg dgg dg dg dgg dg dg dggd          d           dS |d k    rEt          |t          j        g d!g d"g d#gg d$g d%g d&gg d'g d(g d)ggd          d           dS t          d*          )+r   r   r   r   r   r%   r\   r   r   r   r   r   r:   r   r   Fr   Nrs   r$   r  r$   r'   r   r         *@r   r   r   r   g      ?@r        B@     G@r   r   r  r   r   r  g      8@g      =@r  r  r  g      M@r   r   g     D@r  r   )r  r  r  r   r  r	  r   g      R@r   r   g     T@r        Q@     @W@r  r   g     @Z@r  r	  g     @]@r  g     M@g      _@r  r   g     @a@r!  g      H@g      c@g     @Y@r   Invalid Boundary Option)r)   r*   rL   r
  r   r   r   ri   s        r0   !test_uniform_3x3x3_withnan_filledz0TestConvolve3D.test_uniform_3x3x3_withnan_filled  s=    H ///???C 3"4oooF ///???C
 
 
 
 GIU+++q86E
 
 
 *(///???K(*:*:*:OOOL(///???K
          *+++-?-?-?ASASAST+++-?-?-?ASASAST+++-?-?-?ASASAST
          *+++-?-?-?ASASAST+++-?-?-?ASASAST+++-?-?-?ASASAST
          !!*+++-?-?-?ASASAST+++-@-@-@BUBUBUV//////000         " 6777r2   c                    t          j        g dg dg dgg ddt           j        dgg dgg dg d	g d
ggd          }t          j        dd          }t	          |||dd          }|                                dz
  }|t          j        |                                                   |z  }|Ht          |t          j        g dg dg dgg dg dg dgg dg dg dggd          |z  d           dS |dk    rHt          |t          j        g dg dg dgg dg dg dgg dg dg dggd          |z  d           dS |d k    r;t          |t          j        |	                    d          g d          d           dS |d!k    rHt          |t          j        g d"g d#g d$gg d%g d&g d'gg d(g d)g d*ggd          |z  d           dS t          d+          ),r   r   r   r   r   r%   r\   r   r   r   r   r   r:   r   r   Tr   r   Nrs   r  r'   r   r  r  r  r  r  r  r  r  r  r   r   r  r  r  r   r"  r#  r$  r%  r&  r'  )r)   r*   rL   r
  r   r   isfiniter   tileastyper   )r,   r"   r-   r.   r/   kernsummids          r0   #test_uniform_3x3x3_withnan_interpedz2TestConvolve3D.test_uniform_3x3x3_withnan_interped  s'    H ///???C 3"4oooF ///???C
 
 
 
 GIU+++q8=SW
 
 
 %%''A+A##%%/*(///???K(*:*:*:OOOL(///???K
           *+++-?-?-?ASASAST+++-?-?-?ASASAST+++-?-?-?ASASAST
           *1bgcjj6G6G.S.SUWXXXXX!!*+++-?-?-?ASASAST+++-@-@-@BUBUBUV//////000          $ 6777r2   N)r   r   r   r1   rt   r   r   r   ra   r   r   r   r  r   r   r   r  r(  r/  r   r2   r0   r   r     s       6 6 6 [<>PQQ" " RQ"" [Z)9::  ;:( [Z)9::!" !" ;:!"F [Z)9::J J ;:JX [%	*,?@@ (" ("	 ("T [Z)9::O8 O8 ;:O8b [Z)9::J8 J8 ;:J8 J8 J8r2   r   r"   c                    t          j        g dd          }t          j        g dd          }t          ||| d          }| dk    r)t          |t          j        g dd	          d
           dS | )t          |t          j        g dd	          d
           dS | dk    r)t          |t          j        g dd	          d
           dS | dk    r)t          |t          j        g dd	          d
           dS dS )zo
    Regression test for #6264: make sure that asymmetric convolution
    functions go the right direction
    )r]   r$   rA   r   r:   r   Frm   r   )rC   r   r\   r   r'   N)r$   r   r$   r   )r   r   r]   r   )r   r   r%   r   )r"   r-   r.   r/   s       r0   test_asymmetric_kernelr1  e  sA    	...A
%(((AA5AAAA6&q"(3C3C3C7*S*S*SUWXXXXX		&q"(3C3C3C7*S*S*SUWXXXXX	X		&rx)))9992	
 	
 	
 	
 	
 
V		&q"(3C3C3C7*S*S*SUWXXXXX 
	r2   ndimsr   c                 H   t           j                            d           t          j        j        dg| z   }t           j                            d           t          j        j        dg| z   }t          ||d          }t          ||d          }t          ||d           d S )Nr   r~   r   r!      )r)   randomseedrandnrandr	   r   r   )r2  r*   rI   conv_fconv_ds        r0   test_convolution_consistencyr;  ~  s    INN1IOqcEk+EINN1Y^qcEk+F%&999FeVf555F"66266666r2   c                  .   t          j        g d          } t          j        g d          }t          t          j        || d          t          || d                     t          t          j        || d          t	          || d                     d S )Nr   r   r   r~   rz   r   sameFr6   )r)   r*   r   r   r	   )r-   r.   s     r0   &test_astropy_convolution_against_numpyr@    s    
A
!!A
Aq&!!8Aq5#I#I#I   
Aq&!!<1u#M#M#M    r2   zRequires scipy)reasonc                     ddl m}  t          j        g d          }t          j        g d          }t	           | ||d          t          ||d                     t	           | ||d          t          ||d                     d S )Nr   )fftconvolver   r=  r>  Fr?  )scipy.signalrC  r)   r*   r   r   r	   )rC  r-   r.   s      r0   &test_astropy_convolution_against_scipyrE    s    ((((((
A
!!AAq&!!8Aq5#I#I#I   Aq&!!<1u#M#M#M    r2   zRequires pandasc                  D   dd l } t          j        t          j        ddd                    }d}t	          |t          j        |f          |z            }|                     |          }t	          |t          j        |f          |z            }t          ||           d S )Nr   i  i  r'   r~   )pandasr)   r*   linspacer   r
  Seriesr   )rG  waveboxcarnonseries_resultwave_seriesseries_results         r0   test_regression_6099rO    s    MMM8BKdB//00DFbgvi&8&86&ABB--%%K["'6)*<*<v*EFFM.>>>>>r2   c                      t          j        d          dz  } t          j        t                    5  t          d|            d d d            d S # 1 swxY w Y   d S )Nr~   r]   glork)r)   r
  rt   raises	TypeErrorr   )rI   s    r0   test_invalid_array_convolverT    s    WQZZ#F	y	!	! " "&!!!" " " " " " " " " " " " " " " " " "s   AAAc                     t          j        g dg dg dg          }t          j        d          }d|d<   t          ||d|           }t	          |d	d
ddf         |           d S )N)r   rz   r~   rz   r   )r   r   rz   r   r   )r   r   r   r   r   )r   r   r   )r   r   F)r6   r"   r   r   r   r   )r)   r*   r   r   r   )r"   rI   imageresults       r0   !test_non_square_kernel_asymmetricrX    s{     XIJJFHXEE$KeVehOOOFF1Q3!8$f-----r2   rm   c                    t          ddd          }t          j        |j        t          j                  }t          j        ||j        d         dz  dd          }t          j        t          d          5  t          ||| d	|
          }t          j
        t          j        |                    sJ 	 d d d            n# 1 swxY w Y   t          j        |j        d         dz
  |j        d         dz
  ft          j                  }t          j        ||j        d         dz  dd          }t          ||| d	|
          }t          j
        t          j        |                     sJ d S )Nr   r   r   rz   constant)	pad_widthmodeconstant_valuesznan_treatment='interpolate', however, NaN values detected post convolution. A contiguous region of NaN values, larger than the kernel size, are present in the input array. Increase the kernel size to avoid this.rq   r   r   )r
   r)   fullshaperL   padrt   ru   r   r   anyrN   )r"   r6   rI   nan_centroidrV  rW  s         r0   test_uninterpolated_nan_regionsrc    s    aA&&F76<00LFQ! 3*VW  E 
3
 
 
 ( ( '-
 
 
 vbhv&&''''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (" 7	a1	fl1o12BF L FQ! 3*VW  E #)  F F28F##$$$$$$$$s   7=CCCc                     t          j        g dg dg dg          } dt          j        z  }dt          j        z  }t	          ||z            }t          | |dt           j        d           t          | |dt           j        d           d	S )
z
    Issue #9168 pointed out that kernels can be (unitless) quantities, which
    leads to crashes when inplace modifications are made to arrays in
    convolve/convolve_fft, so we now strip the quantity aspects off of kernels.
    r[   r   r   r   )x_stddevr   T)r"   r   r7   N)r)   r*   r<   arcsecr
   r	   rL   r   )r-   kernel_fwhm
pixel_sizerI   s       r0   test_regressiontest_issue9168ri    s     		///???;	 	A ah,KQXJ{Z'?@@@FFVTRRRRQBFNNNNNNr2   c                      t          j        t          d          5  t          dt          j        dgg dd           d d d            d S # 1 swxY w Y   d S )NzSetting nan_treatment='interpolate' requires the kernel to be normalized, but the input kernel has a sum close to zero. For a zero-sum kernel and data with NaNs, set nan_treatment='fill'.rq   r   r~   )r   rz   r   Fr?  )rt   rR  r   r   r)   rL   r   r2   r0   !test_convolve_nan_zero_sum_kernelrk  
  s    	$	
 	
 	
 
F 
F 	!RVQuEEEE
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
Fs   "AAA)4r   
contextlibr   numpyr)   numpy.mar   rt   numpy.testingr   r   r   astropyr   r<   astropy.convolution.convolver   r	   astropy.convolution.kernelsr
   "astropy.utils.compat.optional_depsr   r   astropy.utils.exceptionsr   r   listr   r   r   r   r   r   zipcycler   r   r   r   r   r   r1  r;  r@  skipifrE  rO  rT  rX  rc  ri  rk  r   r2   r0   <module>ry     s       " " " " " "                           ? ? ? ? ? ? ? ? 8 8 8 8 8 8 D D D D D D D D 7 7 7 7 7 7+T+)+L,GGHH 333 $f- 5M e} "dC	$$&677 FlF345 
VF VF VF VF VF VF VF VFrs? s? s? s? s? s? s? s?l	q8 q8 q8 q8 q8 q8 q8 q8h %566Y Y 76Y0 ),,	7 	7 -,	7	 	 	 	M*:;;  <; 
N+<==
? 
? >=
?" " " %566. . 76. $I&(9:: )% )%	 )%XO O O(F F F F Fr2   