U
    e»{j‘X  ã                   @   s:  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Zd dl	Z	d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZmZ d dlmZ e jejdd d	�Ze jejddd	�Ze jejdd
d	�Zejj Z!dd„ Z"dd„ Z#G dd„ dƒZ$G d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-dS )#é    N)Ú	timedelta)ÚDecimal)Úunits)ÚTable)ÚSTANDARD_TIME_SCALESÚTIME_DELTA_SCALESÚTIME_SCALESÚOperandTypeErrorÚScaleValueErrorÚTimeÚ	TimeDeltaÚTimeDeltaMissingUnitWarning)Úiersg      °<)ZrtolZatolg     µ=c                 C   s   dt j_dS )zUse offline IERS table only.FN)r   ÚconfÚauto_download©Úmodule© r   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/time/tests/test_delta.pyÚsetup_module#   s    r   c                 C   s   t tj_dS )zRestore original setting.N)Úorig_auto_downloadr   r   r   r   r   r   r   Úteardown_module(   s    r   c                   @   s’   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Ze	j
 dddgdgfg¡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 S )!ÚTestTimeDeltazTest TimeDelta classc              
   C   s‚   t ddd�| _t ddd�| _t dddddd	tj d
tj dtj fd�| _t ddd�| _tddd�| _	tt
 ddd¡dd�| _d S )Nú
2010-01-01Úutc©Úscalez2010-01-02 00:00:01z2010-01-03 01:02:03é	   Zdate_hmsZdate_hmg     ÀRÀg      >@iô  )r   Ú	precisionÚ	in_subfmtÚ
out_subfmtÚlocationÚlocalç      Y@Úsec©Úformatéd   iè  )r   ÚtÚt2ÚuZdegreeÚmÚt3Út4r   ÚdtÚnpÚarangeÚdt_array©Úselfr   r   r   Úsetup_method0   s    úzTestTimeDelta.setup_methodc              	   C   s˜   | j | j }t|ƒ d¡st‚t|jdƒs.t‚t|jdƒs>t‚| j | }|j	| jj	ksZt‚|| j
 }t|jdƒstt‚t t¡� || j  W 5 Q R X d S )Nz><TimeDelta object: scale='tai' format='jd' value=1.00001157407ggPä" ð?ç    õ@g    Ðõ@)r)   r(   ÚreprÚ
startswithÚAssertionErrorÚallclose_jdÚjdÚallclose_secr$   Úisor.   ÚpytestÚraisesr	   )r3   r.   r(   Údt2r   r   r   Útest_sub?   s    ÿ

zTestTimeDelta.test_subc              	   C   s�   t  t¡� | j| j  W 5 Q R X | j| j }| j| }|j| jjksJt‚|| j }t|j	dƒsdt‚| j| j }|| j }|j| jjksŒt‚d S )Ng    Põ@)
r=   r>   r	   r)   r(   r<   r8   r.   r;   r$   )r3   r.   r)   r?   r   r   r   Útest_addT   s    


zTestTimeDelta.test_addc                 C   sš  t dddd�}t ddgddd�}tddd�}tdd	gdd�}|| }t|jdƒsTt‚|js^t‚|| }t|jdd	gƒszt‚|jr„t‚|| }t|jdd
gƒs t‚|jrªt‚|| }t|jd	ƒsÂt‚|jsÌt‚|| }t|jd	dgƒsèt‚|jròt‚|| }t|jdƒ�st‚|j�st‚|| }t|jdd	gƒ�s6t‚|j�rBt‚|| }t|jdd
gƒ�s`t‚|j�rlt‚|| }t|jd	dgƒ�sŠt‚|j�r–t‚dS )úiCheck time arithmetic as well as properly keeping track of whether
        a time is a scalar or a vectorç        ÚmjdÚtai©r&   r   ç      ð?r#   r:   r%   ç      i@g     @Y@g     Àr@N©r   r   r9   rD   r8   Zisscalarr:   ©r3   r(   r)   r.   r?   Úoutr   r   r   Útest_add_vectorg   s>    




zTestTimeDelta.test_add_vectorc                 C   sö   t dddd�}t ddgddd�}tddd�}tdd	gdd�}|| }t|jd
ƒsTt‚|js^t‚|| }t|jd
dgƒszt‚|jr„t‚|| }t|jd
dgƒs t‚|jrªt‚|| }t|jdƒsÂt‚|jsÌt‚|| }t|jdd
gƒsèt‚|jròt‚dS )rB   rC   rD   rE   rF   rG   r#   r:   r%   rH   g      YÀg      iÀg     ÀXÀNrI   rJ   r   r   r   Útest_sub_vector”   s&    



zTestTimeDelta.test_sub_vectorÚvalues)ç   ÀN»BAç   @O»BArO   rP   c                 C   sà   |\}}t |ddd�}t |ddd�}|| }t|dd�}t |j|jk¡sNt‚|jj|jjksbt‚|jj|jjksvt‚t|dd�}t |j|jk¡s˜t‚|jj|jjk	s¬t‚|jj|jjk	sÀt‚t|dd�}t	|j
d	ƒsÜt‚d
S )zgTest copying the values of a TimeDelta object by passing it into the
        Time initializer.
        r:   r   rF   F)ÚcopyTr$   r%   ç     õ@N)r   r   r/   Úallr:   r8   Ú_timeÚjd1Újd2r;   Úvalue)r3   rN   Zval1Zval2r(   r)   r.   r?   r   r   r   Útest_copy_timedelta°   s    z!TestTimeDelta.test_copy_timedeltac                 C   sp   | j | jfD ]^}| }t |j|j k¡s.t‚t|ƒ}t |j|jk¡sLt‚t|ƒ}t |j|jk¡st‚qd S ©N)r.   r1   r/   rS   r:   r8   Úabs)r3   r.   r?   Údt3Údt4r   r   r   Útest_neg_absÊ   s    zTestTimeDelta.test_neg_absc              	   C   sþ   | j | jfD ]D}|| | }d| }t|j|jƒs6t‚|d }t|j|jƒst‚q| j t d¡ }|d jdkstt‚|d j| j | j  jks�t‚| j dddg }t |j|jk¡s¶t‚t 	t
¡� | j | j  W 5 Q R X t 	t¡� | j tƒ   W 5 Q R X d S )Ng      @é   r   rC   éÿÿÿÿé   é   )r.   r1   r9   r:   r8   r/   r0   rS   r=   r>   r	   r(   Ú	TypeErrorÚobject)r3   r.   r?   r[   r\   Údt5Údt6r   r   r   Útest_mul_divÓ   s    zTestTimeDelta.test_mul_divc                 C   s.   t dœdd„}|| jƒst‚|| jƒs*t‚d S )N)Ú
time_deltac                 S   s:   t  | j¡t  | j¡ | j }|  ¡ j|  ¡ j }||kS rY   )r/   ÚsumrU   rV   ÚsizeZmean)rg   Zmean_expectedZ	mean_testr   r   r   Úis_consistentå   s
    þz.TestTimeDelta.test_mean.<locals>.is_consistent)r   r.   r8   r1   )r3   rj   r   r   r   Ú	test_meanä   s    zTestTimeDelta.test_meanc                 C   s   t ddd�}| j| jfD ]Ü}|| }|j|jks4t‚|j|jksDt‚|j|jksTt‚|j|jksdt‚|| }|j|jks|t‚|j|jksŒt‚|j|jksœt‚|j|jks¬t‚|| }|j|jksÄt‚|j|jksÔt‚|j|jksät‚|j|jkst‚q| jj}t	|dƒ�st‚t	|dƒ�rt‚|j
}t	|dƒ�s4t‚t	|dƒ�sDt‚|j}t	|dƒ�sZt‚t	|dƒ�sjt‚tjtjfD ]„}	|	||ƒ}
t	|
dƒ�r”t‚t	|
dƒ�r¤t‚|	||ƒ}t	|dƒ�r¾t‚t	|dƒ�rÎt‚|	||ƒ}t	|dƒ�rèt‚t	|dƒ�rvt‚�qvd S )Nç     @�@r$   r%   Z_delta_tdb_ttZ_delta_ut1_utc)r   r(   r,   r!   r8   r   r   r    ÚtdbÚhasattrÚut1r   ÚoperatorÚaddÚsub)r3   r.   r(   ÚtaÚtrÚtsZt_tdbZ	t_tdb_ut1Zt_tdb_ut1_utcÚopÚt1r)   r,   r   r   r   Útest_keep_propertiesï   sH    


z"TestTimeDelta.test_keep_propertiesc                 C   sv   t ddd�}|jdkst‚|jdks(t‚d|_|jdks<t‚|jdksJt‚d|_|jtdd�ksdt‚|jdksrt‚d	S )
z:
        Test basics of setting format attribute.
        rR   r$   r%   r:   rG   Údatetimer`   ©ÚdaysN)r   rW   r8   r&   r   ©r3   r.   r   r   r   Útest_set_format  s    zTestTimeDelta.test_set_formatc                 C   sV   t ddd�}|t ddd�ks t‚|t dddd�ks6t‚t tdƒdd�}||ksRt‚d S )Nz1.000000000000001r:   r%   g     ð?r`   gVçž¯Ò<)r   r8   r   )r3   r.   r?   r   r   r   Útest_from_non_float+  s
    z!TestTimeDelta.test_from_non_floatc              	   C   s’   t ddd�}| d¡dkst‚| dd¡dks2t‚|jddd�d	ksHt‚tjtd
d�� | d¡ W 5 Q R X tjtdd�� | ¡  W 5 Q R X d S )NrR   r$   r%   r:   rG   Ústrz1.0)Zsubfmtz86400.0z7not one of the known formats.*failed to parse as a unit)ÚmatchZjulianzmissing required format or unit)r   Úto_valuer8   r=   r>   Ú
ValueErrorrb   r|   r   r   r   Útest_to_value2  s    þzTestTimeDelta.test_to_valueN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r4   r@   rA   rL   rM   r=   ÚmarkÚparametrizerX   r]   rf   rk   rx   r}   r~   rƒ   r   r   r   r   r   -   s$   - ÿ
	,r   c                	   @   s’   e Zd ZdZdd„ Zdd„ Zej de	e
 ee¡ƒ¡dd„ ƒZd	d
„ Zdd„ Zej de	e
 eejejf¡ƒ¡dd„ ƒZej de¡dd„ ƒZdS )ÚTestTimeDeltaScaleszfTest scale conversion for Time Delta.
    Go through @taldcroft's list of expected behavior from #1932c                    s:   ddddgˆ _ ‡ fdd„tD ƒˆ _‡ fdd„tD ƒˆ _d S )Nz2012-06-30 12:00:00z2012-06-30 23:59:59z2012-07-01 00:00:00z2012-07-01 12:00:00c                    s   i | ]}|t ˆ j|d d�“qS )r   )r   r   )r   Ú	iso_times©Ú.0r   r2   r   r   Ú
<dictcomp>M  s   ÿ z4TestTimeDeltaScales.setup_method.<locals>.<dictcomp>c                    s&   i | ]}|ˆ j | ˆ j | d   “qS )r   ©r(   rŒ   r2   r   r   rŽ   Q  s      )r‹   r   r(   r.   r2   r   r2   r   r4   E  s    ü
þz TestTimeDeltaScales.setup_methodc              	   C   sV   t tƒd g D ]}tdddgd|d� qt t¡� tdddgddd� W 5 Q R X d S )NrC   rG   ç      $@r$   rF   r   )Úlistr   r   r=   r>   r
   )r3   r   r   r   r   Útest_delta_scales_definitionS  s    z0TestTimeDeltaScales.test_delta_scales_definition)Úscale1Úscale2c           
      C   s¶   | j | }| j | }|| }|tkr4|j|ksNt‚n|dks@t‚|jdksNt‚|| }|j|ksdt‚t||ƒ}t|j|jƒs€t‚|| }|j|ks–t‚t||ƒ}	t|	j|jƒs²t‚dS )aX  T(X) - T2(Y)  -- does T(X) - T2(Y).X and return dT(X)
        and T(X) +/- dT(Y)  -- does (in essence) (T(X).Y +/- dT(Y)).X

        I.e., time differences of two times should have the scale of the
        first time.  The one exception is UTC, which returns TAI.

        There are no standard timescales for which this does not work.
        r   rE   N)r(   r   r   r8   Úgetattrr9   r:   )
r3   r“   r”   rw   r)   r.   Zt1_recover_t2_scaleÚ
t1_recoverZt2_recover_t1_scaleZ
t2_recoverr   r   r   Ú(test_standard_scales_for_time_minus_timeZ  s    



z<TestTimeDeltaScales.test_standard_scales_for_time_minus_timec           	   
   C   sV  | j d }tddd�}|| }|jdks,t‚|| }|jdksBt‚t|j|jƒsTt‚tdgddd�}|| }|j|jks|t‚dtj }|| j	|| j	ksžt‚| j d }t
D ]¤}| j | }t t¡� ||  W 5 Q R X t t¡� ||  W 5 Q R X t t¡� ||  W 5 Q R X t t¡� ||  W 5 Q R X t t¡� ||  W 5 Q R X q¬dS )	a  T1(local) - T2(local) should return dT(local)
        T1(local) +/- dT(local) or T1(local) +/- Quantity(time-like) should
        also return T(local)

        I.e. Tests that time differences of two local scale times should
        return delta time with local timescale. Furthermore, checks that
        arithmetic of T(local) with dT(None) or time-like quantity does work.

        Also tests that subtracting two Time objects, one having local time
        scale and other having standard time scale should raise TypeError.
        r"   r   r   r�   r$   NrF   é
   )r(   r   r   r8   r9   r:   r   r*   ÚsrW   r   r=   r>   rb   )	r3   rw   r)   r.   r–   r?   r,   Úqr   r   r   r   Ú%test_local_scales_for_time_minus_timez  s2    



z9TestTimeDeltaScales.test_local_scales_for_time_minus_timec              
   C   s„  | j d }| j d }|| }|jdks*t‚t|jdƒs:t‚| j d }|| }|jdksZt‚t|jdƒrjt‚| jd j}||d  }|| }|jdks˜t‚t|jdƒs¨t‚|| }	|	jdks¾t‚t|	jdƒsÎt‚dD ](}
t t	¡� || j |
   W 5 Q R X qÒ| j d }| j d }|| }|jdk�s(t‚t|jdƒ�r:t‚| jd j
}||d  }|| }|jdk�sjt‚t|jdƒ�s|t‚d	D ]*}
t t	¡� || j |
   W 5 Q R X �q€| j d
 }||d  }|jd
k�sÒt‚|d jdk�sæt‚dD ]*}
t t	¡� || j |
   W 5 Q R X �qê| j d }||d  }|jdk�s<t‚|d jdk�sPt‚dD ]*}
t t	¡� || j |
   W 5 Q R X �qTdS )z°dT(X) +/- dT2(Y) -- Add/substract JDs for dT(X) and dT(Y).X

        I.e. this will succeed if dT(Y) can be converted to scale X.
        Returns delta time in scale X
        rE   ÚttrC   Útcgr   )rm   Útcbro   rž   rm   )r   rE   rœ   r�   ro   ro   r_   )r   rE   rœ   r�   rž   rm   r"   )r   rE   rœ   r�   rž   rm   ro   N)r.   r   r8   r;   r$   r(   r�   r=   r>   rb   rm   )r3   Zdt_taiZdt_ttZdt0Zdt_tcgÚdt1Z	t_tai_tcgZ
dt_tai_tcgr?   r[   r   Zdt_tcbZdt_tdbr\   Z	t_tcb_tdbZ
dt_tcb_tdbrd   Zdt_ut1Zdt_localre   r   r   r   Ú!test_scales_for_delta_minus_delta¦  s^    






z5TestTimeDeltaScales.test_scales_for_delta_minus_delta)r   rv   c                 C   sz  t ddddgdd�}|jdks"t‚| d¡}| j| }|||ƒ}|j|jksPt‚t|j||j|jƒƒsjt‚|||ƒ}|j|jks„t‚t|j||j|jƒƒsžt‚|||ƒ}|j|jks¸t‚t|j|jƒsÊt‚| j| }	||	|ƒ}
|
j|	jksît‚t|
j||	j|jƒƒ�s
t‚|tj	k�rF|||	ƒ}|j|	jk�s2t‚t|j|
jƒ�sFt‚||	|ƒ}|j|	jk�sbt‚t|j|
jƒ�svt‚dS )	aI  T(X) +/- dT(None) or T(X) +/- Quantity(time-like)

        This is always allowed and just adds JDs, i.e., the scale of
        the TimeDelta or time-like Quantity will be taken to be X.
        The one exception is again for X=UTC, where TAI is assumed instead,
        so that a day is always defined as 86400 seconds.
        rC   rG   g      ð¿rl   r$   r%   Nr™   )
r   r   r8   Útor.   r9   r:   r(   rp   rq   )r3   r   rv   Zdt_noneZq_timer.   rŸ   r?   r[   r(   rw   r)   r,   r   r   r   Ú#test_scales_for_delta_scale_is_noneî  s0    








z7TestTimeDeltaScales.test_scales_for_delta_scale_is_noner   c           
      C   sö   | j | }tddd�}| d¡}|d |d  }t|j|jƒ|dkA sJt‚|d | }t|j|d jƒ|dkA stt‚||d  }t|j|d jƒ|dkA sžt‚|d | }t|j|d jƒ|dkA sÈt‚|d | }	t|	j|d jƒ|dkA sòt‚dS )	zÇTimeDelta or Quantity holding 1 day always means 24*60*60 seconds

        This holds true for all timescales but UTC, for which leap-second
        days are longer or shorter by one second.
        rG   r:   r%   Údayr_   r   r   N)r(   r   r¡   r9   r:   r8   )
r3   r   r(   Zdt_dayZq_dayZdt_day_leaprw   r)   r,   r-   r   r   r   Útest_delta_day_is_86400_seconds  s    

z3TestTimeDeltaScales.test_delta_day_is_86400_secondsN)r„   r…   r†   r‡   r4   r’   r=   rˆ   r‰   r‘   Ú	itertoolsÚproductr   r—   r›   r    r   rp   rq   rr   r¢   r¤   r   r   r   r   rŠ   A  s"   þ
,Hþ
#rŠ   c               	   C   sà   t dddgtj dd�} d| d< t| jdddgƒs6t‚d| dd …< t| jdddgƒsXt‚d	tj | d d …< t| jdddgƒs€t‚t ddd�| d< t| jdddgƒs¦t‚t t	¡�}dtj
 | d< W 5 Q R X d
t|jƒksÜt‚d S )Nr`   ra   r^   r:   r%   ç      à?r   ç      @é€Q ú.cannot convert value to a compatible TimeDelta)r   r*   Údr9   rW   r8   r™   r=   r>   r‚   r+   r   ©r(   Úerrr   r   r   Útest_timedelta_setitem.  s    r®   c               	   C   sÚ   t dddgdd�} d| d< t| jdddgƒs0t‚d| dd …< t| jdddgƒsRt‚dtj | d d …< t| jd	d	d	gƒszt‚t dd
d�| d< t| jd	dd	gƒs t‚t t¡�}dtj	 | d< W 5 Q R X dt
|jƒksÖt‚d S )Nr`   ra   r^   r$   r%   r§   r   r¨   r©   r:   i £ rª   )r   r9   rW   r8   r*   r£   r=   r>   r‚   r+   r   r¬   r   r   r   Útest_timedelta_setitem_secB  s    r¯   c                  C   sh   t ddgtj dd�} tjj| d< t | jddgk¡s:t‚t	| d j
dƒsNt‚| j
d tjjksdt‚d S )Nr`   ra   r:   r%   FTr   )r   r*   r«   r/   ÚmaZmaskedrS   Úmaskr8   r9   rW   r�   r   r   r   Útest_timedelta_maskV  s
    r²   c                  C   sD   t ddd�} t| dd�}|jdks&t‚tddd�}|j| ks@t‚d S )Nr`   )r{   Úsecondsry   r%   r5   r$   )r   r   r$   r8   ry   ©ÚtdZtd1Útd2r   r   r   Útest_python_timedelta_scalar^  s
    r·   c                  C   s„   t dd�t dd�gt dd�t dd�gg} t| dd�}t |jddgddggk¡sTt‚tddgddggdd�}t |j| k¡s€t‚d S )	Nr`   rz   ra   r^   é   ry   r%   r:   )r   r   r/   rS   r:   r8   ry   r´   r   r   r   Útest_python_timedelta_vectorh  s    þ r¹   c                  C   s|   t ddd�} |  ¡ tdd�ks"t‚t ddgddggdd�}tdd�tdd�gtdd�tdd�gg} t | ¡ | k¡sxt‚d S )Nr`   r:   r%   rz   ra   r^   r¸   )r   Úto_datetimer   r8   r/   rS   )rµ   r¶   r   r   r   Útest_timedelta_to_datetimev  s    þr»   c                  C   sN   t ddgdd�} |  dt ddgdd�¡}t |t ddddgdd�k¡sJt‚d S )Nr`   ra   r$   r%   r˜   é   )r   Úinsertr/   rS   r8   )ÚtmZtm2r   r   r   Útest_insert_timedelta„  s    r¿   c               	   C   s"  t  t¡�" tdƒ} |  tj¡dks(t‚W 5 Q R X t  t¡�D tddddgiƒ}t|d ƒ} t	 
|  tj¡dddgk¡s|t‚W 5 Q R X t  t¡�: tt	 dddg¡ƒ} t	 
|  tj¡dddgk¡sÆt‚W 5 Q R X t  t¡�( tdƒd }|jd d… dksþt‚W 5 Q R X t  t¡�6 tdddgdd	�dk}t	 
|d
ddgk¡�sDt‚W 5 Q R X t  t¡�" tdtj ƒdkd
k�svt‚W 5 Q R X tdtj ƒ tj¡dk�s t‚tddd	� tj¡dk�s¾t‚tddd	� tj¡dk�sÜt‚tddddgtj iƒ}t	 
t|d ƒ tj¡dddgk¡�st‚d S )Nr`   r(   ra   r^   z
2012-01-01r˜   z
2012-01-02r:   r%   FTé   r$   )r=   Zwarnsr   r   r�   r*   r£   r8   r   r/   rS   Úarrayr   Zisotr™   )ÚdeltaÚtabler(   Úcompr   r   r   Útest_no_units_warningŒ  s.    ** $& rÅ   ).Ú	functoolsr¥   rp   ry   r   Údecimalr   Únumpyr/   r=   Zastropyr   r*   Zastropy.tabler   Zastropy.timer   r   r   r	   r
   r   r   r   Zastropy.utilsr   ÚpartialZallcloser9   Zallclose_jd2r;   r   r   r   r   r   r   rŠ   r®   r¯   r²   r·   r¹   r»   r¿   rÅ   r   r   r   r   Ú<module>   sJ   (
  ÿ  ÿ   n
