U
    e»{jM  ã                   @   sv   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	m
Z
 d dlmZmZ d dlmZ d dlmZ G dd„ dƒZdS )	é    N)Úassert_allcloseÚassert_almost_equal)ÚconvolveÚconvolve_fftÚconvolve_models)ÚfittingÚmodels)Ú	HAS_SCIPY)ÚNumpyRNGContextc                   @   sð   e Zd Zej deeg¡ejje	 dd�dd„ ƒƒZ
ej dddg¡ejje	 dd�dd	„ ƒƒZej dddg¡ejje	 dd�d
d„ ƒƒZej dddg¡dd„ ƒZej dddg¡dd„ ƒZej dddg¡ejje	 dd�dd„ ƒƒZdS )ÚTestConvolve1DModelsÚmodezRequires scipy)Úreasonc                 C   s`   t  ddd¡}t  ddd¡}t|||jd�}t dd¡}|||ƒ||ƒƒ}t|||ƒdd� d S )Né   r   ©r   éûÿÿÿé   çñhãˆµøä>©Zatol)r   Ú
Gaussian1Dr   Ú__name__ÚnpÚaranger   ©Úselfr   ÚkernelÚmodelÚ
model_convÚxÚans© r   úm/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/convolution/tests/test_convolve_models.pyÚ,test_is_consistency_with_astropy_convolution   s    zATestConvolve1DModels.test_is_consistency_with_astropy_convolutionr   r   c                 C   sz   ddl m} t ddd¡}t ddd¡}t|||d�}t dd¡}|||ƒ||ƒdd�}t|||ƒ||ƒ ¡  dd	� d S )
Nr   ©Úfftconvolver   r   r   r   Úsamer   r   )	Úscipy.signalr#   r   r   r   r   r   r   Úsum©r   r   r#   r   r   r   r   r   r   r   r    Útest_against_scipy   s    z'TestConvolve1DModels.test_against_scipyc                 C   sp   ddl m} t ddd¡}t ddd¡}t|||dd�}t dd¡}|||ƒ||ƒdd	�}t|||ƒd
d� d S )Nr   r"   r   F©r   Znormalize_kernelr   r   r$   r   r   r   )r%   r#   r   r   r   r   r   r   r'   r   r   r    Ú+test_against_scipy_with_additional_keywords(   s    z@TestConvolve1DModels.test_against_scipy_with_additional_keywordsc                 C   s–   t  dt dtj ¡ dd¡}t  dt dtj ¡ dd¡}t|||dd�}t  ddt tj¡  dt d¡¡}t dd¡}t||ƒ||ƒd	d
� dS )zä
        Test that convolving N(a, b) with N(c, d) gives N(a + c, b + d),
        where N(., .) stands for Gaussian probability density function,
        in which a and c are their means and b and d are their variances.
        r   é   é   Fr)   é   r   r   çü©ñÒMbP?r   N)	r   r   ÚmathÚsqrtr   Úpir   r   r   )r   r   r   r   r   r   r   r   r   r    Útest_sum_of_gaussians5   s    $z*TestConvolve1DModels.test_sum_of_gaussiansc                 C   sd   t  ¡ }t  ¡ }t|||d�}t ddd¡}|d |dk  | d |dk  }t|||ƒdd� d S )Nr   éÿÿÿÿr   éc   r   r.   r   )r   ÚBox1Dr   r   Úlinspacer   r   r   r   r    Útest_convolve_box_modelsE   s    "z-TestConvolve1DModels.test_convolve_box_modelsc              	   C   s    t  ¡ }t  ¡ }t ddd¡}t jdd�}tdƒ�  ||ƒtjjt|ƒd� }W 5 Q R X t	|||dd	�}t
 ¡ }||||ƒ}	t |	|ƒ| ¡}
t|
d
dd� dS )z:
        test that a convolve model can be fitted
        r   é   r4   é
   )Z	amplitudeé{   )ÚsizeFr)   g        r+   )ÚdecimalN)r   r5   r   r   r6   r
   ÚrandomÚnormalÚlenr   r   ZLevMarLSQFitterZmeanr   )r   r   Úb1Úg1r   Z
fake_modelZ	fake_dataZ
init_modelZfitterZfitted_modelÚmer   r   r    Útest_fitting_convolve_modelsO   s    
$z1TestConvolve1DModels.test_fitting_convolve_modelsN)r   Ú
__module__Ú__qualname__ÚpytestÚmarkZparametrizer   r   Zskipifr	   r!   r(   r*   r2   r7   rC   r   r   r   r    r      s    	

	r   )r/   Únumpyr   rF   Znumpy.testingr   r   Zastropy.convolution.convolver   r   r   Zastropy.modelingr   r   Z"astropy.utils.compat.optional_depsr	   Zastropy.utils.miscr
   r   r   r   r   r    Ú<module>   s   