U
    d»{jš,  ã                   @   st  d dl Z d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ e
dd	d
ddgƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zej dedd … ed d… dfed!d… edd … ed"d!… fed g edd … dfed g eddd … dfg¡d#d$„ ƒZej d%d"ej d&ej d'ej d(ej g¡d)d*„ ƒZ dS )+é    N)Úassert_equal)Úunits)ÚTime)Úaggregate_downsampleÚreduceat)Ú
TimeSeries)ÚAstropyUserWarningú2016-03-22T12:30:31z2016-03-22T12:30:32ú2016-03-22T12:30:33ú2016-03-22T12:30:34ú2016-03-22T12:30:35c                  C   s   t j t  d¡dddddddd	g¡} tt  d¡dddddddd	gt jƒ}t|| ƒ tt  d¡t  d¡d d d… t jƒ}t|t  d
dddg¡ƒ tt  d¡dddddddd	gt jƒ}t|t  ddddddddg¡ƒ ttt  d¡t  d¡d d d… t jƒtt  d¡t  d¡d d d… t jƒƒ d S )Né   r   é   é   é   é   é   é   é   g      à?ç      @g      @g      @g      ø?g      @g      @)	ÚnpÚaddr   ZarangeÚsumr   ZmeanÚarrayZnanmean)Z
add_outputZ
sum_outputZmean_outputZnanmean_output© r   úg/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/timeseries/tests/test_downsample.pyÚtest_reduceat   s    $$
$$ ""þr   c                	   C   s&   t jtdd�� td ƒ W 5 Q R X d S )Nz"time_series should be a TimeSeries©Úmatch)ÚpytestÚraisesÚ	TypeErrorr   r   r   r   r   Útest_timeseries_invalid*   s    r"   c                	   C   s,   t jtdd�� ttƒ dd� W 5 Q R X d S )Nz3'time_bin_size' should be a Quantity or a TimeDeltar   r   )Útime_bin_size)r   r    r!   r   r   r   r   r   r   Útest_time_bin_invalid/   s
     ÿr$   c               	   C   sB   t tdddddggdgd�} tjtdd	�� t| ƒ W 5 Q R X d S )
Nr   r   r   r   r   Úa©ÚtimeÚdataÚnamesz_With single 'time_bin_start' either 'n_bins', 'time_bin_size' or time_bin_end' must be providedr   )r   Ú
INPUT_TIMEr   r    r!   r   )Útsr   r   r   Útest_binning_arg_invalid8   s    þr,   c                  C   sl   t tdddddggdgd�} t| dgdgtj d	�}t|jjd
gƒ t| ddgdd�}t|jjddgƒ d S )Nr   r   r   r   r   r%   r&   r	   )Útime_bin_startr#   ú2016-03-22T12:30:31.000r
   r   ©r-   Útime_bin_endú2016-03-22T12:30:33.000ú2016-03-22T12:30:34.000)	r   r*   r   ÚuÚsr   r-   Úisotr0   )r+   Z
down_startZdown_endr   r   r   Útest_time_bin_conversionB   s       
ÿýþr6   c                  C   sB   t tdddddggdgd�} t| dd	gd
�}t|jjddgƒ d S )Nr   r   r   r   r   r%   r&   r	   r
   )r-   r1   ú2016-03-22T12:30:35.000)r   r*   r   r   r0   r5   )r+   Zdown_auto_endr   r   r   Útest_time_bin_end_autoV   s     ÿþr8   c                  C   sB   t tdddddggdgd�} t| dd	gd
�}t|jjddgƒ d S )Nr   r   r   r   r   r%   r&   r
   r   )r0   r.   r1   )r   r*   r   r   r-   r5   )r+   Zdown_start_arrayr   r   r   Útest_time_bin_start_arrayd   s     ÿþr9   c                  C   s~   t tdddddggdgd�} t| dd�}t|jjd	d
gƒ ttƒ}d|d ||d fD ]"}t| t|d�}t|ƒ|ksVt‚qVd S )Nr   r   r   r   r   r%   r&   )Ún_binsr.   r1   r   )r-   r:   )r   r*   r   r   r-   r5   ÚlenÚAssertionError)r+   Z
down_nbinsZn_timesr:   r   r   r   Ú
test_nbinst   s    þr=   c               	   C   s„  t tdddddggdgd�} t tdddddgtj gdgd�}tjdkrXdtj }d }nd	tj }| jd
 dtj  }t	| ||d�}t 
|jdddddg| ¡ t|jjtdddddgƒƒ t|d jjt dddddg¡ƒ t	| d| |d�}t 
|jdddg| ¡ t|jjtdddgƒƒ t|d jjt dddg¡ƒ t	| d| |d�}t 
|jddg| ¡ t|jjtddgƒƒ t|d jjt ddg¡ƒ t	| d| |d�}t 
|jddg| ¡ t|jjtddgƒƒ t|d jjt ddg¡ƒ t	|d| |d�}t 
|jddg| ¡ t|jjtddgƒƒ |d jjdk�sFt‚t|d jt ddg¡ƒ t	| dddg| |d�}	t 
|	jdddg| ¡ t|	jjtdddgƒƒ t|	d jjt dddg¡ƒ t	| tddgƒtddgƒd�}
t 
|
jddgtj ¡ t|
jjtddgƒƒ t|
d jjt ddg¡ƒ tjtdd��> t	| tddgƒtddgƒd�}t|d jt ddg¡ƒ W 5 Q R X d S )Nr   r   r   r   r   r%   r&   l        gé!çýÿï?r   )r#   r-   r.   z2016-03-22T12:30:32.000r1   r2   r7   Úctr   g      @r/   zaOverlapping bins should be avoided since they can lead to double-counting of data during binning.r   r   z2016-03-22T12:30:36.000)r   r*   r3   ÚcountÚsysÚmaxsizer4   r'   Únsr   Úiscloser#   r   r-   r5   r   r(   r   r   ÚunitÚnamer<   Úsecondr   Zwarnsr   )r+   Zts_unitsZtime_bin_incrr-   Zdown_1Zdown_2Zdown_3Zdown_4Z
down_unitsZdown_uneven_binsZdown_time_arrayZdown_overlap_binsr   r   r   Útest_downsample…   sè      ÿ


  ÿûÿþ"  ÿýÿþ
  ÿ
þ  ÿ
þ  ÿ
þ  ÿýÿþ


ý
þý

ýrG   z"time, time_bin_start, time_bin_endr   r   r   c                 C   s²   t | t t| ƒ¡gdgd�}t|||d�}t|ƒt|ƒks>t‚t|d dkƒsRt‚|j ¡ |d k sl|dk	r€|d j	 ¡ s®t‚n.|j ¡ |d k r®|d d |d d ks®t‚dS )ztRegression test for #12527: allow downsampling even if all bins fall
    before or beyond the time span of the data.r%   r&   r/   r#   r   Nr   )
r   r   Zonesr;   r   r<   Úallr'   ÚminÚmask)r'   r-   r0   r+   Zdownr   r   r   Útest_downsample_edge_cases  s      ÿÿÿrK   Údiff_from_baseé
   é2   éd   c                 C   sX   dt j }ddlm} tdddd�}||  }|| }|||ƒ}|||ƒ}||ksTt‚dS )	ae  
    A test on time precision limit supported by downsample().

    It is related to an implementation details: that time comparison (and sorting indirectly)
    is done with relative time for computational efficiency.
    The relative time converted has a slight loss of precision, which worsens
    as the gap between a time and the base time increases, e.g., when downsampling
    a timeseries that combines current observation with archival data years back.

    This test is to document the acceptable precision limit.

    see also: https://github.com/astropy/astropy/pull/13069#issuecomment-1093069184
    iô  r   )Ú_to_relative_longdoublez1980-01-01T12:30:31.000r5   Ztdb)ÚformatÚscaleN)r3   rB   Úastropy.timeseries.downsamplerP   r   r<   )rL   Zprecision_limitrP   Zt_baseÚt2Zt3Zr_t2Zr_t3r   r   r   Útest_time_precision_limit!  s    


rU   )!r@   Únumpyr   r   Znumpy.testingr   Zastropyr   r3   Zastropy.timer   rS   r   r   Zastropy.timeseries.sampledr   Zastropy.utils.exceptionsr   r*   r   r"   r$   r,   r6   r8   r9   r=   rG   ÚmarkZparametrizerK   ÚyearrU   r   r   r   r   Ú<module>   sN   ûÿ	
 üþ	
 "ÿ