U
    e»{jÆ¦  ã                   @   sÈ  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  ee¡ƒZdd
ddgZdd
gZddgZddgZ ee!e  "ef¡eƒƒedfed
fg Z#G dd„ dƒZ$G dd„ dƒZ%G dd„ dƒZ&ej' (de¡dd„ ƒZ)ej' (dd¡dd„ ƒZ*dd„ Z+ej'j,e dd �d!d"„ ƒZ-ej'j,e d#d �d$d%„ ƒZ.d&d'„ Z/ej' (de¡d(d)„ ƒZ0ej' (d*e  ee¡¡d+d,„ ƒZ1d-d.„ Z2d/d0„ Z3dS )1é    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ÚfillÚwrapÚextendÚinterpolateTFc                
   @   sv  e Zd Zdd„ Zdd„ Zej de 	e
eeee¡¡dd„ ƒZej de 	e
eeee¡¡dd	„ ƒZej de 	e
eeee¡¡d
d„ ƒZej de¡dd„ ƒZej de¡dd„ ƒZej de
¡dd„ ƒZej de
¡dd„ ƒZej de 	e
eee¡¡dd„ ƒZej de 	e
eee¡¡dd„ ƒZej de 	e
e¡¡dd„ ƒZej de 	e
e¡¡dd „ ƒZej d!e¡d"d#„ ƒZd$S )%ÚTestConvolve1Dc                 C   sN   dddddddg}dddg}t ||d	d
�}t|t dddddddg¡dƒ d	S )úJ
        Test that convolve works correctly when inputs are lists
        é   é   é   é   é   é   çš™™™™™É?ç333333ã?N©Úboundaryç        çÍÌÌÌÌÌ@ç      @çffffff@ç333333@é
   ©r   r   ÚnpÚarray©ÚselfÚxÚyÚz© r,   úf/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/convolution/tests/test_convolve.pyÚ	test_list#   s    
  ÿzTestConvolve1D.test_listc                 C   s:   d}d}t ||dd�}t|t dddddd	dg¡d
ƒ dS )zK
        Test that convolve works correctly when inputs are tuples
        )r   r   r   r   r   r   r   )r   r   r   Nr   r   r   r    r!   r"   r#   r$   r'   r,   r,   r-   Ú
test_tuple/   s      ÿzTestConvolve1D.test_tuple)r   Únan_treatmentÚnormalize_kernelÚpreserve_nanÚdtypec           	      C   s^   t jdddddddg|d�tj }t jdd	dg|d�}t||||||d
�}|j|jksZt‚dS )zS
        Test that convolve works correctly when input array is a Quantity
        r   r   r   r   r   r   ©r3   r   r   ©r   r0   r1   r2   N)r%   r&   ÚuÚphr   ÚunitÚAssertionError)	r(   r   r0   r1   r2   r3   r)   r*   r+   r,   r,   r-   Útest_quantity;   s    "ú	zTestConvolve1D.test_quantityc           
      C   s˜   dddddddg}dddg}t j||d	�}t j||d	�}	d
|j_d
|	j_t||	||||d� t  t j||d	�|k¡sxt‚t  t j||d	�|	k¡s”t‚dS )r   ç      ð?ç      @r    ç      @ç      @ç       @r   r   r4   Fr5   N)r%   r&   ÚflagsÚ	writeabler   Úallr9   )
r(   r   r0   r1   r2   r3   r&   Úkernelr)   r*   r,   r,   r-   Útest_input_unmodifiedY   s     
ú	z$TestConvolve1D.test_input_unmodifiedc                 C   sö   dddt jdddg}dddg}t j||d�}t j||d�}	d	|j_d	|	j_| ¡ }
|	 ¡ }t||	||||d
� t  |¡}t  |¡}| }| }t  |
| || k¡s¨t	‚t  || |	| k¡sÂt	‚t  t  || ¡¡sÚt	‚t  t  |	| ¡¡sòt	‚dS )zB
        Test that convolve doesn't modify the input data
        r;   r<   r    r>   r?   r   r   r4   Fr5   N)
r%   Únanr&   r@   rA   Úcopyr   ÚisnanrB   r9   )r(   r   r0   r1   r2   r3   r&   rC   r)   r*   Zx_copyZy_copyZarray_is_nanZkernel_is_nanZarray_not_nanZkernel_not_nanr,   r,   r-   Útest_input_unmodified_with_nan   s0    
ú

z-TestConvolve1D.test_input_unmodified_with_nan©Údtype_arrayÚdtype_kernelc                 C   sF   t jdddg|d�}t jdddg|d�}t||ƒ}|j|jksBt‚dS )úG
        Test that 32- and 64-bit floats are correctly handled
        r;   ç       @ç      @r4   r   N©r%   r&   r   r3   r9   ©r(   rJ   rK   r)   r*   r+   r,   r,   r-   Ú
test_dtype²   s    
zTestConvolve1D.test_dtype)Úconvfuncr   c                 C   sD   t jdddgdd�}t jdgdd�}||||d�}t j ||¡ dS )zV
        Test that a unit kernel with a single element returns the same array
        r;   rM   rN   r   r4   r   N)r%   r&   Ztestingr   )r(   r   rR   r)   r*   r+   r,   r,   r-   Útest_unity_1_noneÀ   s    z TestConvolve1D.test_unity_1_noner   c                 C   sx   t jdddgdd�}t jdddgdd�}t|||d�}|dkrbt  |t jdddgdd�k¡stt‚nt  ||k¡stt‚dS )	z|
        Test that a unit kernel with three elements returns the same array
        (except when boundary is None).
        r;   rM   rN   r   r4   r   r   N©r%   r&   r   rB   r9   ©r(   r   r)   r*   r+   r,   r,   r-   Útest_unity_3Ô   s    $zTestConvolve1D.test_unity_3c                 C   sâ   t jdddgdd�}t jdddgdd�}t|||dd�}|dkrdt  |t jdd	dgdd�k¡sÞt‚nz|d
kr�t  |t jdd	dgdd�k¡sÞt‚nN|dkr¼t  |t jd	d	d	gdd�k¡sÞt‚n"t  |t jdd	dgdd�k¡sÞt‚dS )z„
        Test that the different modes are producing the correct results using
        a uniform kernel with three elements
        r;   r   rN   r   r4   F©r   r1   Nr<   r   r   rM   r=   rT   rU   r,   r,   r-   Útest_uniform_3æ   s    $$$zTestConvolve1D.test_uniform_3r5   c           	   	   C   sÜ   t jdt jdgdd�}t jdddgdd�}|dkrF|sFtjtdd�}ntƒ }|� t||||||d	�}W 5 Q R X |r†t  |d
 ¡s†t	‚t  
|¡}t  
|¡}|dkrÆt  |t jdddgdd�k¡sØt	‚nt  ||k¡sØt	‚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.
        r;   rN   r   r4   r   r   z9nan_treatment='interpolate', however, NaN values detected©Úmatchr5   r   N)r%   r&   rE   ÚpytestÚwarnsr   r   r   rG   r9   Ú
nan_to_numrB   )	r(   r   r0   r1   r2   r)   r*   Úctxr+   r,   r,   r-   Útest_unity_3_withnanü   s0    þú	

$z#TestConvolve1D.test_unity_3_withnanc           	      C   s  t jdt jdgdd�}t jdddgdd�}t||||||d�}|rTt  |d ¡sTt‚t  |¡}dddgdd	dgdd
dgdddgdddgdd	dgdd
dgdddgdddgd	d	d	gd
d
d
gdddgdddgdd	dgdd
dgddd	gdœ|||f }|rúd|d< t|t j|d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.
        r;   rN   r   r4   r5   r   r   é   r   gUUUUUUõ?r   ç      à?g      ø?g      @gUUUUUUÕ?é   é	   gUUUUUUå?rM   ))Nr   T)Nr   F)Nr   T)Nr   F)r   r   T)r   r   F)r   r   T)r   r   F)r   r   T)r   r   F)r   r   T)r   r   F)r   r   T)r   r   F)r   r   T)r   r   Fr#   N)r%   r&   rE   r   rG   r9   r]   r   )	r(   r   r0   r1   r2   r)   r*   r+   Úrsltr,   r,   r-   Útest_uniform_3_withnan2  sF    ú	
ðïz%TestConvolve1D.test_uniform_3_withnanrW   c                 C   sÖ   |rt  d¡ dddddddd	d
g	}ddddd	ddddg	}tjt|ƒddd�sRt‚t||||d�}dddddddddg	dddddddddg	dddddddddg	d ddddd!d"d#dg	d$œ| }t|tj|d%d&�d'ƒ d(S ))zK
        Test that convolve works correctly with zero sum kernels.
        ú(You can't normalize by a zero sum kernelr   r`   rb   r   r   r   r   r   rc   éÿÿÿÿr   g:Œ0âŽyE>)ZatolrW   r   g      Àç      Àç      ð¿ç      $@ç      5@ç     €@@ç      G@g      BÀg      ;Àg      2Àg      "Àç      "@ç      2@ç      ;@ç      B@g      $Àr;   rN   r=   ©Nr   r   r   r   r4   r#   N)	r[   Úxfailr%   ÚiscloseÚsumr9   r   r   r&   ©r(   r   r1   r)   r*   r+   rd   r,   r,   r-   Útest_zero_sum_kerneln  s    	
üûz#TestConvolve1D.test_zero_sum_kernelc                 C   sÜ   |rt  d¡ dddddddd	d
g	}tjddddd	ddddg	dddddddddg	dd�}t||||d�}dddddddddg	dddddddddg	dddddddddg	ddd d!ddd"d#d$g	d%œ| }t|tj|d&d'�d(ƒ d)S )*zQ
        Test that convolve works correctly with integer masked kernels.
        rf   r   r`   rb   r   r   r   r   r   rc   rg   r   r   ©ÚmaskÚ
fill_valuerW   rn   ri   rN   r=   r?   rj   rk   rl   rm   g      ?Àg      5Àg      &Àç      4@g      >@ç      D@ç      Àr<   r>   ç      (@ç      .@ç      3@rr   r   r4   r#   N)r[   rs   Úmar&   r   r   r%   rv   r,   r,   r-   Útest_int_masked_kernelŠ  s"    	
ýüûz%TestConvolve1D.test_int_masked_kernelr2   c                 C   st   t jdddddgdddddgdd	�}tjd
d
d
gdd�}t|||d�}|rdt |d ¡s\t‚d|d< t|ddƒ dS )zP
        Test that convolve works correctly with integer masked arrays.
        rb   r   r   é   é   r   r   r   rx   r;   r   r4   )r2   r`   r   )gUUUUUU@r   r   é   r   r#   N)r�   r&   r%   r   rG   r9   r   )r(   r2   r)   r*   r+   r,   r,   r-   Útest_int_masked_array©  s    $z$TestConvolve1D.test_int_masked_arrayN)Ú__name__Ú
__module__Ú__qualname__r.   r/   r[   ÚmarkÚparametrizeÚ	itertoolsÚproductÚBOUNDARY_OPTIONSÚNANHANDLING_OPTIONSÚNORMALIZE_OPTIONSÚPRESERVE_NAN_OPTIONSÚVALID_DTYPESr:   rD   rH   ÚVALID_DTYPE_MATRIXrQ   ÚBOUNDARIES_AND_CONVOLUTIONSrS   rV   rX   r_   re   rw   r‚   r†   r,   r,   r,   r-   r   "   sœ   ûþ

ûþ

ûþ

)
û


üþ	
-üþ	
3
þ

þ
r   c                   @   sÄ   e Zd Zdd„ Zej de¡dd„ ƒZej de	¡dd„ ƒZ
ej de	¡d	d
„ ƒZej de	¡dd„ ƒZej de	¡dd„ ƒZej de	¡dd„ ƒZej de	¡dd„ ƒZej de	¡dd„ ƒZdS )ÚTestConvolve2Dc                 C   sh   dddgdddgdddgg}t ||dddd�}t||dƒ t ||dddd�}t|t |t¡d dƒ dS )	r   r   r   T©r   rz   r1   r#   Frc   N)r   r   r%   r&   Úfloat©r(   r)   r+   r,   r,   r-   r.   ¼  s
    zTestConvolve2D.test_listrI   c                 C   sj   t jdddgdddgddd	gg|d
�}t jdddgdddgdddgg|d
�}t||ƒ}|j|jksft‚dS ©rL   r;   rM   rN   r<   r    r=   r>   r?   rn   r4   r   NrO   rP   r,   r,   r-   rQ   Ç  s     ÿ ÿ
zTestConvolve2D.test_dtyper   c                 C   s\   t jdddgdddgddd	ggd
d�}t jdggd
d�}t|||d�}t  ||k¡sXt‚dS )zD
        Test that a 1x1 unit kernel returns the same array
        r;   rM   rN   r<   r    r=   r>   r?   rn   r   r4   r   NrT   rU   r,   r,   r-   Útest_unity_1x1_noneÙ  s    &z"TestConvolve2D.test_unity_1x1_nonec              	   C   s®   t jdddgdddgddd	ggd
d�}t jdddgdddgdddggd
d�}t|||d�}|dkr˜t  |t jdddgdddgdddggd
d�k¡sªt‚nt  ||k¡sªt‚dS )zl
        Test that a 3x3 unit kernel returns the same array (except when
        boundary is None).
        r;   rM   rN   r<   r    r=   r>   r?   rn   r   r4   r   r   NrT   rU   r,   r,   r-   Útest_unity_3x3ç  s    && ÿÿÿ
zTestConvolve2D.test_unity_3x3c                 C   s8  t jdddgdddgdddggdd�}t jdddgdddgdddggdd�}t|||dd�}|d	kr”t|t jdddgdd
dgdddggdd�dƒ n |dkrÌt|t jdddgdd
dgdddggdd�dƒ nh|dk�rt|t jd
d
d
gd
d
d
gd
d
d
ggdd�dƒ n.t|t jdddgdd
dgd
ddggdd�dƒ d	S )úu
        Test that the different modes are producing the correct results using
        a 3x3 uniform kernel.
        r   rN   r;   rM   r   r4   FrW   Nr=   r#   r   r<   r    r   r>   r~   r?   ©r%   r&   r   r   rU   r,   r,   r-   Útest_uniform_3x3þ  sL    && ÿû ÿû
 ÿû ÿûzTestConvolve2D.test_uniform_3x3c              	   C   sÚ   t jdddgdt jdgdddggd	d
�}t jdddgdddgdddggd	d
�}t|||ddd�}t  |d ¡srt‚t  |¡}t  |¡}|dkrÄt  |t jdddgdddgdddggd	d
�k¡sÖt‚nt  ||k¡sÖt‚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;   rM   rN   r<   r=   r>   r?   rn   r   r4   r   r   T©r   r0   r2   )r   r   N)r%   r&   rE   r   rG   r9   r]   rB   rU   r,   r,   r-   Útest_unity_3x3_withnan,  s&     ÿ&

 ÿÿÿ
z%TestConvolve2D.test_unity_3x3_withnanc                 C   sP  t jdddgdt jdgdddggdd�}t jdddgdddgdddggdd�}t|||ddd	�}|d
kr˜t|t jdddgdddgdddggdd�dƒ n´|dkrÐt|t jdddgdddgdddggdd�dƒ n||dk�r
t|t jdddgdddgdddggdd�dƒ nB|dk�rDt|t jdddgdddgdddggdd�dƒ ntdƒ‚d
S )ú¶
        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<   r;   rN   r   r4   r   F©r   r0   r1   Nr?   r#   r    r>   r   r   rM   rn   ç      0@g      &@r=   úInvalid boundary specification©r%   r&   rE   r   r   Ú
ValueErrorrU   r,   r,   r-   Útest_uniform_3x3_withnanfilledJ  sb     ÿ&    ÿ ÿû ÿû
 ÿû
 ÿûz-TestConvolve2D.test_uniform_3x3_withnanfilledc                 C   sP  t jdddgdt jdgdddggdd�}t jdddgdddgdddggdd�}t|||ddd	�}|d
kr˜t|t jdddgdddgdddggdd�dƒ n´|dkrÐt|t jdddgdddgdddggdd�dƒ n||dk�r
t|t jdddgdddgdddggdd�dƒ nB|dk�rDt|t jdddgdddgdddggdd�dƒ ntdƒ‚d
S )r¡   r   r<   r;   rN   r   r4   r   Tr¢   Nr#   r   g      À?g      ä?ra   g      ì?g      Ø?r   r   g      Ð?g      ò?rM   g      ö?g      è?r¤   r¥   rU   r,   r,   r-   Ú test_uniform_3x3_withnaninterped  sn     ÿ&    ÿ ÿûýúö
 ÿû
ýúöz/TestConvolve2D.test_uniform_3x3_withnaninterpedc                 C   sN  t jdddgdddgdddggdd�}t jdddgdddgdddggdd�}t|||d	d
d�}|d kr–t|t jdddgdddgdddggdd�dƒ n´|d	krÎt|t jdddgdddgdddggdd�dƒ n||dk�rt|t jdddgdddgdddggdd�dƒ nB|dk�rBt|t jdddgdddgdddggdd�dƒ ntdƒ‚d S )Nr   r<   r;   rM   rN   r—   r4   ri   r   Fr¢   r#   r}   rh   g       Àr   g       Àr=   r    g      Àr   r¤   )r%   r&   r   r   r¦   rU   r,   r,   r-   Útest_non_normalized_kernel_2D¾  sb    & ÿ    ÿ ÿûþú
þú
þú	z,TestConvolve2D.test_non_normalized_kernel_2DN)r‡   rˆ   r‰   r.   r[   rŠ   r‹   r“   rQ   rŽ   rš   r›   rž   r    r§   r¨   r©   r,   r,   r,   r-   r•   »  s"   



-

4
>r•   c                   @   s¶   e Zd Zdd„ Zej de¡dd„ ƒZej de	¡dd„ ƒZ
ej de	¡d	d
„ ƒZej de	¡dd„ ƒZej de e	e¡¡dd„ ƒZej de	¡dd„ ƒZej de	¡dd„ ƒZdS )ÚTestConvolve3Dc                 C   sx   dddgdddgdddggdddgdddgdddggdddgdddgdddggg}t ||dddd�}t|d |dƒ dS )r   r   r   Fr–   é   r#   N)r   r   r˜   r,   r,   r-   r.   ò  s    ýzTestConvolve3D.test_listrI   c                 C   sj   t jdddgdddgddd	gg|d
�}t jdddgdddgdddgg|d
�}t||ƒ}|j|jksft‚dS r™   rO   rP   r,   r,   r-   rQ   ÿ  s     ÿ ÿ
zTestConvolve3D.test_dtyper   c                 C   s”   t jdddgdddgdddggdddgdddgdddggdddgd	ddgd
ddgggdd�}t jdgggdd�}t|||d�}t  ||k¡s�t‚dS )zF
        Test that a 1x1x1 unit kernel returns the same array
        r;   rM   rN   r    r<   r   r=   r>   r?   rn   r   r4   r   NrT   rU   r,   r,   r-   Útest_unity_1x1x1_none  s    ýú	z$TestConvolve3D.test_unity_1x1x1_nonec                 C   s  t jdddgdddgdddggdddgdddgdddggdddgd	ddgd
ddgggdd�}t jddd�}d|d< t|||d�}|dkrôt  |t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�k¡sòt‚nt  ||k¡�st‚dS )zn
        Test that a 3x3x3 unit kernel returns the same array (except when
        boundary is None).
        r;   rM   rN   r    r<   r=   r>   r   r?   rn   r   r4   ©rb   rb   rb   ©r   r   r   r   N)r%   r&   Úzerosr   rB   r9   rU   r,   r,   r-   Útest_unity_3x3x3&  s.    ýú	ýúÿÿ
zTestConvolve3D.test_unity_3x3x3c              
   C   s2  t jdddgdddgdddggdddgdddgdddggdddgd	ddgd
ddgggdd�}t jddd�}t|||dd�}|dkrêt|t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�dƒ �nD|dk�rZt|t jdddgdddgdddggdddgdddgdd d!ggd"ddgdd#d$gdd%dgggdd�dƒ nÔ|d&k�rÊt|t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�dƒ ndt|t jd'd(d)gd*d+d,gd-d.d/ggd0d/dgd1dd(gd2d3d4ggd5d6d7gd8d0d9gd:d;d<gggdd�dƒ dS )=rœ   r;   rM   rN   r    r<   r=   r>   r   r?   rn   r   r4   r­   FrW   Ng     @T@r#   r   g      7@g      <@r£   g     €A@rm   ç      9@g      A@ro   r|   ç      I@ç     €O@rq   ç      N@rp   ç      @@g     €N@ç      6@g      F@r   g     @P@ç      K@ç     €E@ç     ÀR@g     €P@ç     €L@ç     @U@ç     €S@g     ÀQ@g      X@g      [@g      ^@g     ÀV@ç      O@g     À_@ç      V@g     €H@g      a@ç     €I@g     `c@g      Z@g     €J@)r%   r&   Úonesr   r   rU   r,   r,   r-   Útest_uniform_3x3x3J  sv    ýú	ýúö
ýúö
ýúöýý	öòz!TestConvolve3D.test_uniform_3x3x3)r   r0   c                 C   s<  t jdddgdddgdddggdddgdt jdgdddggdddgd	ddgd
ddgggdd�}t jddd�}d|d< t||||dd�}t  |d ¡s˜t‚t  |¡}t  |¡}|dk�r$t  |t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�k¡�s8t‚nt  ||k¡�s8t‚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;   rM   rN   r    r<   r=   r>   r   r?   rn   r   r4   r­   r®   TrŸ   N)	r%   r&   rE   r¯   r   rG   r9   r]   rB   )r(   r   r0   r)   r*   r+   r,   r,   r-   Útest_unity_3x3x3_withnan—  s@    ýú	    ÿ


ýúÿÿz'TestConvolve3D.test_unity_3x3x3_withnanc              
   C   sJ  t jdddgdddgdddggdddgdt jdgdddggdddgd	ddgd
ddgggdd�}t jddd�}t|||ddd�}|dkrît|t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�dƒ �nX|dk�r^t|t jdddgdddgdddggdddgdddgdd d!ggd"ddgdd#d$gdd%dgggdd�dƒ nè|d&k�rÎt|t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�dƒ nx|d'k�r>t|t jd(d)d*gd+d,d-gd.d/d0ggd1d0dgd2dd)gd3d4d5ggd6d7d8gd9d1d:gd;d<d=gggdd�dƒ ntd>ƒ‚dS )?r¡   r;   rM   rN   r    r<   r=   r>   r   r?   rn   r   r4   r­   r   Fr¢   Nr¼   r#   r{   r±   ç      *@rµ   r¸   r¶   ç      ?@r   ç     €B@ç     €G@r´   rl   rº   ç      8@ç      =@ç      M@r€   ç     €D@r   r   r½   r¿   r|   ç      R@r³   r·   ç     €T@r¹   ç      Q@ç     @W@ç     @Z@ç     @]@r¾   ç     €M@ç      _@r»   rm   ç     @a@ç      H@ç      c@ç     @Y@r²   úInvalid Boundary Option)r%   r&   rE   rÀ   r   r   r¦   rU   r,   r,   r-   Ú!test_uniform_3x3x3_withnan_filledÅ  s†    ýú	    ÿýúö
ýúö
ýúö
ýý	öòz0TestConvolve3D.test_uniform_3x3x3_withnan_filledc              
   C   s6  t jdddgdddgdddggdddgdt jdgdddggdddgd	ddgd
ddgggdd�}t jddd�}t|||ddd�}| ¡ d }|t  |¡  ¡ | }|dk�rt|t jdddgdddgdddggdddgdddgdddggdddgdddgdddgggdd�| dƒ �n|dk�rŠt|t jdddgdddgdddggdddgd dd!gdd"d#ggd$ddgdd%d&gd!d'dgggdd�| dƒ n¨|d(k�r¶t|t  | 	d¡d)d)d)g¡dƒ n||d*k�r*t|t jd+d,d-gd.d/d0gd1d2d3ggd4d3dgd5dd,gd6d7d8ggd9d:d;gd<d4d=gd>d?d@gggdd�| dƒ nt
dAƒ‚dS )Br¡   r;   rM   rN   r    r<   r=   r>   r   r?   rn   r   r4   r­   r   Tr¢   r   Nr¼   r#   r   r{   r±   rÃ   rµ   r¸   r¶   rÄ   r   rÅ   rÆ   r´   rl   rº   rÇ   rÈ   rÉ   r€   rÊ   r   rb   r   r½   r¿   r|   rË   r³   r·   rÌ   r¹   rÍ   rÎ   rÏ   rÐ   r¾   rÑ   rÒ   r»   rm   rÓ   rÔ   rÕ   rÖ   r²   r×   )r%   r&   rE   rÀ   r   ru   Úisfiniter   ZtileZastyper¦   )r(   r   r)   r*   r+   ZkernsumÚmidr,   r,   r-   Ú#test_uniform_3x3x3_withnan_interped  s‚    ýú	    ÿ
ýúø	õ
ýúø	õ
"
ýý	öôñz2TestConvolve3D.test_uniform_3x3x3_withnan_interpedN)r‡   rˆ   r‰   r.   r[   rŠ   r‹   r“   rQ   rŽ   r¬   r°   rÁ   rŒ   r�   r�   rÂ   rØ   rÛ   r,   r,   r,   r-   rª   ñ  s$   


#
L
þ
*
Qrª   r   c                 C   sÒ   t jdddgdd�}t jdddgdd�}t||| d	d
�}| dkr^t|t jdddgdd�dƒ np| dkr„t|t jdddgdd�dƒ nJ| dkrªt|t jdddgdd�dƒ n$| dkrÎt|t jdddgdd�dƒ dS )zo
    Regression test for #6264: make sure that asymmetric convolution
    functions go the right direction
    rN   r   r;   r   r4   r   r`   rb   FrW   r   r=   rj   rM   r—   r#   Nr   r   r   rn   r    r�   )r   r)   r*   r+   r,   r,   r-   Útest_asymmetric_kernele  s      ÿrÜ   Úndims)r   r`   rb   c                 C   sh   t j d¡ t jjdg|  Ž }t j d¡ t jjdg|  Ž }t||dd�}t||dd�}t||dƒ d S )Nr   rb   r   r   é   )r%   ÚrandomÚseedZrandnZrandr   r   r   )rÝ   r&   rC   Zconv_fZconv_dr,   r,   r-   Útest_convolution_consistency~  s    rá   c                  C   sd   t  dddg¡} t  dddddg¡}tt  || d¡t|| dd�ƒ tt  || d¡t|| dd�ƒ d S )	Nr   r`   rb   r   r   ÚsameF©r1   )r%   r&   r   r   r   )r)   r*   r,   r,   r-   Ú&test_astropy_convolution_against_numpy‹  s     ÿ ÿrä   zRequires scipy)Úreasonc                  C   sl   ddl m}  t dddg¡}t dddddg¡}t| ||dƒt||d	d
�ƒ t| ||dƒt||d	d
�ƒ d S )Nr   )Úfftconvolver   r`   rb   r   r   râ   Frã   )Zscipy.signalræ   r%   r&   r   r   r   )ræ   r)   r*   r,   r,   r-   Ú&test_astropy_convolution_against_scipy—  s    
 ÿ
 ÿrç   zRequires pandasc                  C   sd   dd l } t t ddd¡¡}d}t|t |f¡| ƒ}|  |¡}t|t |f¡| ƒ}t||ƒ d S )Nr   iˆ  iì  r#   rb   )Úpandasr%   r&   Zlinspacer   rÀ   ZSeriesr   )rè   ÚwaveZboxcarZnonseries_resultZwave_seriesZseries_resultr,   r,   r-   Útest_regression_6099¦  s    
rê   c               	   C   s2   t  d¡d } t t¡� td| ƒ W 5 Q R X d S )Nrb   rN   Zglork)r%   rÀ   r[   ÚraisesÚ	TypeErrorr   )rC   r,   r,   r-   Útest_invalid_array_convolve´  s    rí   c              	   C   sn   t  dddddgdddddgdddddgg¡}t  d¡}d|d< t||d| d�}t|d	d
…dd…f |ƒ d S )Nr   r`   rb   r   )r„   r„   )r   r   F)r1   r   r   r   r   rc   )r%   r&   r¯   r   r   )r   rC   ÚimageÚresultr,   r,   r-   Ú!test_non_square_kernel_asymmetric»  s
    .
rð   rW   c              	   C   sæ   t dddƒ}t |jtj¡}tj||jd d ddd�}tjtdd��, t	||| d	|d
�}t 
t |¡¡snt‚W 5 Q R X t |jd d |jd d ftj¡}tj||jd d ddd�}t	||| d	|d
�}t 
t |¡¡ sât‚d S )Nr   r   r   r`   Zconstant)Z	pad_widthÚmodeZconstant_valueszÓnan_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.rY   r   r¢   )r	   r%   ÚfullÚshaperE   Úpadr[   r\   r   r   ÚanyrG   r9   )r   r1   rC   Znan_centroidrî   rï   r,   r,   r-   Útest_uninterpolated_nan_regionsÆ  sL    
   ÿþû ÿ   ÿûrö   c                  C   sp   t  dddgdddgddd	gg¡} d
tj }d
tj }t|| d�}t| |dt jdd� t| |dt jd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;   rM   rN   r<   r    r=   r>   r?   rn   r   )Zx_stddevr   T)r   rz   r2   N)r%   r&   r6   Zarcsecr	   r   rE   r   )r)   Zkernel_fwhmZ
pixel_sizerC   r,   r,   r-   Útest_regressiontest_issue9168ö  s    ÿ

r÷   c                	   C   s:   t jtdd��" tdtjdgdddgdd� W 5 Q R X d S )	Nz»Setting 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'.rY   r   rb   rg   r`   Frã   )r[   rë   r¦   r   r%   rE   r,   r,   r,   r-   Ú!test_convolve_nan_zero_sum_kernel
  s
    ý
rø   )4rŒ   Ú
contextlibr   Únumpyr%   Znumpy.mar�   r[   Znumpy.testingr   r   r   Zastropyr   r6   Zastropy.convolution.convolver   r   Zastropy.convolution.kernelsr	   Z"astropy.utils.compat.optional_depsr
   r   Zastropy.utils.exceptionsr   r’   Úlistr�   r“   rŽ   r�   r�   r‘   ÚzipÚcycler”   r   r•   rª   rŠ   r‹   rÜ   rá   rä   Zskipifrç   rê   rí   rð   rö   r÷   rø   r,   r,   r,   r-   Ú<module>   sd   ÿþ     8  v






þ
,