U
    e»{jÌp  ã                   @   sˆ	  d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ 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mZ d dlmZ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  d dl!m"Z" d d	l#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z) d dl*m+Z+ ej,e	j-e	 .e/¡j0d d�Z1ej,e	j-e	 .e/¡j0e	 .e/¡j0d�Z2ej,e	j-e	 .e/¡j0e	 .e/¡j0d d d�Z3e	 .e/¡j0Z4e&e4dd�Z5dd„ Z6e
j7dd�dd„ ƒZ8e j9dd„ ƒZ:ddddœdd„Z;e+j< =¡ Z>e>d d Z?e@eAe?dd… e	 Be>d ¡ƒƒZCe% D¡ ZEe%d dd�ZFd d!„ ZGed"d#„ ƒZHd$d%„ ZId&d'„ ZJd(d)„ ZKd*d+„ ZLed,d-„ ƒZMd.d/„ ZNd0d1„ ZOd2d3„ ZPeeMeLƒ ƒƒd4d5„ ƒZQeed6d7ƒed8d9gƒƒd:d;„ ƒZRd<d=„ ZSd>d?„ ZTd@dA„ ZUdBdC„ ZVdDdE„ ZWdFdG„ ZXdHdI„ ZYdJdK„ ZZdLdM„ Z[dNdO„ Z\eedPdQƒedRdƒƒedSdTdU�dVdW„ ƒƒZ]eee	 .e/¡j^dX e	 .e/¡j_dX dY�ee	 .e/¡j^dX e	 .e/¡j_dX dY�ƒdZd[„ ƒZ`eed\d\d]�ed\d\d]�ƒed^d_d`�ed^dad`�edbdad`�dcdd„ ƒƒƒƒZaeedPdQƒedRdƒƒedSdTdU�dedf„ ƒƒZbeedPdQƒed8d9ƒƒedSdTdU�eddgdU�dhdi„ ƒƒƒZceedPdQƒedRdƒƒedSdTdU�djdk„ ƒƒZdeedPdleeejfƒ dm ƒedRdƒƒedSdTdU�dndo„ ƒƒZgeeMeLƒ ƒƒdpdq„ ƒZheed6d7ƒed8d9gƒƒdrds„ ƒZieedtdu„ e$D ƒƒeLƒ dv�edwdxdv�edwdydv�dzd{„ ƒƒƒZjeeIƒ ƒed|d}�d~d„ ƒƒZkeee$ƒee$ƒeLƒ d€�ed�d‚dƒd€�edwd„d…d€�edwd„dxd€�d†d‡„ ƒƒƒƒZleee$ƒee$ƒeLƒ d€�edwdˆdxd€�edˆd‚d‰d€�ed‚dwdŠd€�d‹dŒ„ ƒƒƒƒZmeeeCƒed�dŽƒƒd�d�„ ƒZneee$ƒeLƒ ed‘d’ƒd“�edˆd”d•d“�edˆd–d—d“�edˆd˜d™d“�edˆdšd›d“�edˆdxdœd“�edˆd�džd“�dŸd „ ƒƒƒƒƒƒƒZoeee&jpƒeIƒ ed¡e4 dme4 ƒd“�edwd¢d£d“�edwd…d¤d“�edwd¥d¦d“�edwd§d¨d“�d©dª„ ƒƒƒƒƒZqeee$ƒeLƒ eLƒ ƒedˆd«d¬d­�edˆd®d¯d­�d°d±„ ƒƒƒZreee$ƒeLƒ eLƒ edd²ƒedd²ƒd³�d´dµ„ ƒZseee$ƒee$ƒeIƒ eIƒ d¶�d·d¸„ ƒZtd¹du„ e$D ƒZueeƒ eƒ ƒeedºddd d ƒed»ddd d d d¼ƒd½�e
jv wd¾eu¡d¿dÀ„ ƒƒƒZxeedÁdÂƒed dÃƒdÄ�e
jv wd¾eu¡dÅdÆ„ ƒƒZyeedÁdÂƒed dÃƒdÄ�e
jv wd¾eu¡dÇdÈ„ ƒƒZzeedÁdÂƒed dƒdÉ�edÊdËdÉ�edÌdÍdÉ�e
jv wd¾eu¡dÎdÏ„ ƒƒƒƒZ{eedÁdÂƒed dƒƒedÊdËdÉ�e
jv wd¾eu¡dÐdÑ„ ƒƒƒZ|dÒdÓ„ Z}eeƒ eƒ ƒeedÔddd d ƒedÕdXdÄ�dÖ�eed×ddd d ƒedØdÙdÄ�dÖ�eedÔddd d ƒedÚdÛdÄ�dÖ�eedÜddd d ƒedÝdÞdÄ�dÖ�eedÜddd d d dßƒedÝdàdÄ�dÖ�e
jv wd¾eu¡dádâ„ ƒƒƒƒƒƒƒZ~eeIƒ edãdäƒedãdäƒedådæƒdç�e
jv wdèdédêg¡dëdì„ ƒƒZeeIƒ edãdäƒedådæƒedídîƒdï�e
jv wdèdédêg¡dðdñ„ ƒƒZ€dS )òé    N)ÚdatetimeÚ	timedelta)ÚDecimal)Ú	ErfaErrorÚErfaWarning)ÚassumeÚexampleÚgivenÚtarget)Úarray_shapesÚarrays)Ú	compositeÚ	datetimesÚfloatsÚintegersÚone_ofÚsampled_fromÚ
timedeltasÚtuples)Úassert_quantity_allclose)ÚSTANDARD_TIME_SCALESÚTimeÚ	TimeDelta)Úday_fracÚtwo_sum)Úiers)ÚrtolÚatolé   i  Újd©Úformatc                   C   s   t dƒj d S )Nz
2020-01-01)r   Úut1© r#   r#   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/time/tests/test_precision.pyÚsetup_module+   s    r%   Úmodule)Úscopec                	   c   s,   t j t j t j¡¡� dV  W 5 Q R X dS )a*  This is an expensive operation, so we share it between tests using a
    module-scoped fixture instead of using the context manager form.  This
    is particularly important for Hypothesis, which invokes the decorated
    test function many times (100 by default; see conftest.py for details).
    z <using IERS-B orientation table>N)r   Zearth_orientation_tableÚsetZIERS_BÚopenZIERS_B_FILEr#   r#   r#   r$   Úiers_b1   s    r*   c                	   c   s,   t  ¡ � t jdtd� d V  W 5 Q R X d S )NÚignore)Úcategory)ÚwarningsÚcatch_warningsÚfilterwarningsr   r#   r#   r#   r$   Ú
quiet_erfa<   s    
r0   Ú )r   r   Úlabelc          
      C   s  d}|dks|dkr|}n>|dkr<|t | ƒt |ƒ  d }n||t | ƒt |ƒ  d  }| | }t|tƒr²| tj¡}t||d d� t| |d d� t|tjƒrö| |j	¡}nDzt
|ƒ}	W n tk
rÒ   Y n$X t|	|d d� t|	 |d	 d� t |ƒ|k �st‚dS )
a  Assert numbers are almost equal.

    This version also lets hypothesis know how far apart the inputs are, so
    that it can work towards a failure and present the worst failure ever seen
    as well as the simplest, which often just barely exceeds the threshold.
    TNr   é   z$ (a-b).to_value(u.s), from TimeDelta)r2   z$ (b-a).to_value(u.s), from TimeDeltaz float(a-b)z float(b-a))ÚabsÚ
isinstancer   Úto_valueÚuÚsr
   ZQuantityÚtoÚunitÚfloatÚ	TypeErrorÚAssertionError)
ÚaÚbr   r   r2   Z__tracebackhide__ÚthreshZambZambvZtarget_valuer#   r#   r$   Úassert_almost_equalC   s(    
rA   Úmjdé   Ztai_utcc                   C   s   t tddƒtddƒƒS )Né@;% ip°% ç      à¿ç      à?©r   r   r#   r#   r#   r$   Úreasonable_ordinary_jdu   s    rH   c                 C   sB   | t ttƒttd ƒttd ƒƒƒ}|tj tj | tddƒƒfS )NrC   r   )r   r   Úleap_second_daysÚmjd0Újd1Újd2r   )ÚdrawrB   r#   r#   r$   Úleap_second_trickyy   s    

ýÿrN   c                  C   s.   dt jt jftjtjfg} tt| ƒtƒ tƒ ƒS )aÐ  Pick a reasonable JD.

    These should be not too far in the past or future (so that date conversion
    routines don't have to deal with anything too exotic), but they should
    include leap second days as a special case, and they should include several
    particularly simple cases (today, the beginning of the MJD scale, a
    reasonable date) so that hypothesis' example simplification produces
    obviously simple examples when they trigger problems.
    ©g    ìºBAç        )rJ   rK   rL   Útodayr   r   rH   rN   )Zmomentsr#   r#   r$   Úreasonable_jd…   s    
rR   c                   C   s   t tddƒtddƒƒS )z+JD pair that might be unordered or far awayç    ÐcÁç    ÐcArG   r#   r#   r#   r$   Úunreasonable_ordinary_jd“   s    rU   c                   C   s   t tddƒtddƒƒS )z4JD pair that is ordered but not necessarily near nowrS   rT   rE   rF   rG   r#   r#   r#   r$   Ú
ordered_jd˜   s    rV   c                   C   s   t tƒ tƒ tƒ ƒS ©N)r   rR   rV   rU   r#   r#   r#   r$   Úunreasonable_jd�   s    rX   c                    sT   | t ƒ ƒ}t dtfdtfg¡‰ | ‡ fdd„¡}| tˆ ||d�ƒ}|d |d fS )NrK   rL   c                    s   t j| ˆ d�S )N)Údtype)ÚnpÚarray)Úx©Údr#   r$   Ú<lambda>¥   ó    zjd_arrays.<locals>.<lambda>)Úelements)r   rZ   rY   r;   Úmapr   )rM   Z	jd_valuesr8   Zjdvr>   r#   r]   r$   Ú	jd_arrays¡   s
    
rc   c                   C   s   t tddƒtddƒƒS )NrS   rT   rG   r#   r#   r#   r$   Úunreasonable_deltaª   s    rd   c                   C   s   t tddƒtddƒƒS )Ng     ˆÃÀg     ˆÃ@rE   rF   rG   r#   r#   r#   r$   Úreasonable_delta®   s    re   c                  C   s¤   t dt t
 gdd�} t | jd dk¡s.t‚t t| jƒdk ¡sFt‚t ddt dt gdt dt ggdd�}t |jd dk¡sˆt‚t t|jƒdk ¡s t‚d	S )
z<Make jd2 approach +/-0.5, and check that it doesn't go over.g   @€OBAr   r    rC   r   rF   g    €OBArE   N)r   ÚtinyrZ   ÚallrK   r=   r4   rL   ©Út1Út2r#   r#   r$   Ú"test_abs_jd2_always_less_than_half³   s      ÿrk   c                 C   s†   | \}}t ||dd�}tt t |j¡¡ƒ t |jd dk¡sDt‚t t|jƒdk¡s\t‚t t|jƒdk |jd dkB ¡s‚t‚d S )Nr   r    rC   r   rF   r3   )	r   r
   rZ   Zamaxr4   rL   rg   rK   r=   ©ÚjdsrK   rL   Útr#   r#   r$   Ú2test_abs_jd2_always_less_than_half_on_construction¿   s    ro   i 
úi áõrE   rF   c                 C   s2   t | |dd�}t|jƒdkr*|jd dks.t‚d S )Nr   r    rF   r3   r   )r   r4   rL   rK   r=   )rK   rL   rn   r#   r#   r$   Útest_round_to_evenÉ   s    rp   c                  C   s\   t ddddd�} | t }|j| jkr0|j| jks4t‚|t }|j| jkrT|j| jksXt‚dS )z@Check that an addition at the limit of precision (2^-52) is seeng   €¼BArF   r   Úutc©r!   ÚscaleN)r   Údt_tinyrK   rL   r=   )rn   Zt_dtrj   r#   r#   r$   Útest_additionÏ   s
    ru   c                  C   sD   dt  } tddd�}||  d }|tddd� }t|jdƒs@t‚dS )	z'Test precision with multiply and divideé   g     ˆÓ@r   r    g      @g     
ª@gYUUUUUÕ?N)rt   r   Úallclose_jd2rL   r=   )Zdt_smallZdt_bigZdt_big_small_by_6Zdt_fracr#   r#   r$   Útest_mult_divÜ   s
    rx   c                  C   sz   t jd } tddd�t  }td| dd�}t| ddd�}|j|jksFt‚|j|jksVt‚|j|jksft‚|j|jksvt‚dS )zDCheck that 3 ways of specifying a time + small offset are equivalentg     õ@g   èvH7BÚcxcsecr    N)rt   rL   r   rK   r=   )Zdt_tiny_secri   rj   Út3r#   r#   r$   Útest_init_variationsæ   s    
r{   c                  C   s(   t ddd�} | t }| j|jks$t‚dS )z«
    Check that Time object really holds more precision than float64 by looking
    at the (naively) summed 64-bit result and asserting equality at the
    bit level.
    ç  ™¾<Bry   r    N)r   rt   r   r=   rh   r#   r#   r$   Útest_precision_exceeds_64bitò   s    r}   c                  C   sT   t ddd�} t ddd�}||  }|j| j }t|j|jƒs>t‚t|j|jƒsPt‚dS )z>Check that precision holds through scale change (cxcsec is TT)ç      ð?ry   r    r|   N)r   ÚtaiÚallclose_jdrK   r=   rw   rL   )Út0ri   Zdt_ttZdt_tair#   r#   r$   Útest_through_scale_changeý   s    r‚   c                  C   s4   t ddd�} t ddd�}||  }t|jdƒs0t‚dS )z%Check when initializing from ISO dateú2000:001:00:00:00.00000001r   ©rs   z3000:001:13:00:00.00000002g2MUUUUÝ¿N)r   rw   rL   r=   )ri   rj   Údtr#   r#   r$   Útest_iso_init  s    r†   c                  C   sL   t ddd�} t | j¡| jks"t‚t ddddd�} t | j¡| jksHt‚dS )	z,
    Check that jd1 is a multiple of 1.
    rƒ   r   r„   gÞƒBÊÀó?gÜéÖÜ)ŒgAr   rr   N)r   rZ   ÚroundrK   r=   )ri   r#   r#   r$   Útest_jd1_is_mult_of_one  s    rˆ   c                  C   sD   t dddd�} t | j¡| jks$t‚| j}t |j¡|jks@t‚dS )zâ
    Check precision when jd1 is negative.  This used to fail because ERFA
    routines use a test like jd1 > jd2 to decide which component to update.
    It was updated to abs(jd1) > abs(jd2) in erfa 1.6 (sofa 20190722).
    g¨ÿ¬ùjøÀr   Úttrr   N)r   rZ   r‡   rK   r=   r   )ri   Zt1_tair#   r#   r$   Útest_precision_neg  s    rŠ   c                  C   sL   t tddƒddd�} t tddƒddd�}| | }t|jt |j¡ƒsHt‚dS )z‰
    Check that input via epoch also has full precision, i.e., against
    regression on https://github.com/astropy/astropy/pull/366
    i¼  iÑ  Zjyearrq   rr   r   N)r   ÚrangeÚallclose_secÚsecrZ   r‡   r=   )Zt_utcZt_tair…   r#   r#   r$   Útest_precision_epoch%  s    rŽ   c               	   C   sP   t j dd¡�8 tddgddd�j} t | jt dd	g¡k¡sBt	‚W 5 Q R X d
S )zoRegression tests against #2083, where a leap second was rounded
    incorrectly by the underlying ERFA routine.Zauto_downloadFz2012-06-30 23:59:59.413z2012-07-01 00:00:00.413r"   é   )rs   Ú	precisionz2012-06-30 23:59:60.000z2012-07-01 00:00:00.000N)
r   ZconfZset_tempr   rq   rZ   rg   Zisor[   r=   )rn   r#   r#   r$   Ú#test_leap_seconds_rounded_correctly0  s    ýÿr‘   lüÿÿÿþÿÿ l   þÿÿ éÿÿÿÿi   g     �=)ÚiÚfc              	   C   sh   t  t jdd�¡�L t| ƒt|ƒ }t| |ƒ\}}t|ƒt|ƒ }t||ttƒtdƒd� W 5 Q R X d S ©Né(   )Úprecr   ©r   r   )ÚdecimalÚlocalcontextÚContextr   r   rA   rf   )r“   r”   r>   r8   Úrr?   r#   r#   r$   Útest_two_sum?  s
    r�   r3   )Z	min_valueZ	max_valuec                 C   s   t j t| |ƒt|| ƒ¡ d S rW   )rZ   ZtestingZassert_equalr   ©Úf1Úf2r#   r#   r$   Útest_two_sum_symmetricM  s    r¡   F)Ú	allow_nanZallow_infinitygÿÿÿÿÿÿßg      àrž   g      àÿgÿÿÿÿÿÿßÿc                 C   sV   t | |ƒ\}}t|ƒt|ƒt t¡j ksR||  kr>dksRn t | | ¡rRt‚d S )Nr   )r   r4   rZ   Úfinfor;   ÚepsÚisfiniter=   )rŸ   r    Úr1Úr2r#   r#   r$   Útest_two_sum_sizeU  s    ÿ þþýr¨   c              	   C   sh   t  t jdd�¡�L t| ƒt|ƒ }t| |ƒ\}}t|ƒt|ƒ }t||ttƒtdƒd� W 5 Q R X d S r•   )r™   rš   r›   r   r   rA   rf   )r“   r”   r>   Úi_dÚf_dZa_dr#   r#   r$   Útest_day_frac_harmlesse  s
    r«   çÿÿÿÿÿÿß?c                 C   sF   t t|ƒdk p| d dkƒ t| |ƒ\}}| |ks6t‚||ksBt‚d S ©NrF   r3   r   )r   r4   r   r=   ©r“   r”   r©   rª   r#   r#   r$   Útest_day_frac_exacto  s    r¯   c                 C   s(   t | |ƒ\}}||ft ||ƒks$t‚d S rW   )r   r=   r®   r#   r#   r$   Útest_day_frac_idempotenty  s    r°   l         € r�   c                 C   sj   t | |ddd�}t| tj |ƒ\}}t|j|jƒ\}}t|| ||  ƒtj  	tj
¡dtj
 k sft‚d S )NrB   r   )ÚvalZval2r!   rs   rC   )r   r   ÚerfaÚDJM0rK   rL   r4   r7   Údayr9   Únsr=   )r“   r”   rn   rK   rL   Zjd1_tZjd2_tr#   r#   r$   Útest_mjd_initialization_precise€  s    r¶   c                 C   sh   | \}}t ||ƒ\}}t |d dk¡s,t‚t t|ƒdk¡sBt‚t t|ƒdk |d dkB ¡sdt‚d S )NrC   r   rF   r3   )r   rZ   rg   r=   r4   )rm   rK   rL   Út_jd1Út_jd2r#   r#   r$   Ú#test_day_frac_always_less_than_half‰  s
    r¹   c                 C   s.   t | |ƒ\}}t|ƒdkr&|d dks*t‚d S r­   )r   r4   r=   )rK   rL   r·   r¸   r#   r#   r$   Útest_day_frac_round_to_even’  s    rº   c                 C   s   g | ]}|d kr|‘qS )rq   r#   )Ú.0Úscr#   r#   r$   Ú
<listcomp>™  s      r½   )rs   rm   r   )rP   rP   )rP   g_    þÞÀc              	   C   s>   |\}}t ||d| d�}tƒ � ||t ks0t‚W 5 Q R X d S ©Nr   rr   ©r   r0   rt   r=   )rs   rm   rK   rL   rn   r#   r#   r$   Útest_resolution_never_decreases˜  s    rÀ   )g   À£BAçÿÿÿÿÿÿï?)rm   c              	   C   sB   | \}}t ||ddd�}tƒ � ||dt  ks4t‚W 5 Q R X dS )aA  UTC is very unhappy with unreasonable times,

    Unlike for the other timescales, in which addition is done
    directly, here the time is transformed to TAI before addition, and
    then back to UTC.  Hence, some rounding errors can occur and only
    a change of 2*dt_tiny is guaranteed to give a different time.

    r   rq   rr   r3   Nr¿   rl   r#   r#   r$   Ú#test_resolution_never_decreases_utc¥  s    rÂ   )Úscale1Úscale2rm   Útcgr"   )g   À®§BAg²à@¡;3Þ?Útcb)ç   @2 BArP   c              	   C   sº   |\}}t |||dd�}z tƒ � t||ƒ}W 5 Q R X W n8 tjk
rV   tdƒ Y n tk
rp   tdƒ Y nX |jd dks„t‚t	|j
ƒdks–t‚t	|j
ƒdk s¶|jd dks¶t‚d S )Nr   ©rs   r!   FrC   r   rF   r3   )r   r0   Úgetattrr   ÚIERSRangeErrorr   r   rK   r=   r4   rL   )r*   rÃ   rÄ   rm   rK   rL   rn   rj   r#   r#   r$   Ú+test_conversion_preserves_jd1_jd2_invariant¶  s    	rË   rq   )rÇ   gøÿÿÿÿÿï?)g   @� BArÁ   c              	   C   sº  |\}}t |||dd�}|dks(|dkrDt|| ƒdk rDdtj }ndt }z@tƒ �. || }t||ƒ}	t||ƒ}
|	|
k s~t‚W 5 Q R X W �n( tj	k
rô   t
|dkpÂd||   k o¾d	k n  ƒ t
|dkpêd||   k oæd	k n  ƒ ‚ Y nÂ tk
�rL   ||h d
dh¡}||h dddh¡}t
|| dk�pB|�pB|ƒ ‚ Y nj tk
�r´   d||fk�r®t|	|
 dtj  ƒdtj k �r”t ¡  t
|jdk�pª|jdk ƒ ‚ Y nX dS )a  Check that time ordering remains if we convert to another scale.

    Here, since scale differences can involve multiplication, we allow
    for losing one ULP, i.e., we test that two times that differ by
    two ULP will keep the same order if changed to another scale.
    r   rÈ   rq   rC   éd   r3   r"   rD   i��% rÆ   Ztdbr   r‰   rÅ   g     þÞÀç   À2 BAg•5 ”ÿÿß?N)r   r4   r7   Úusrt   r0   rÉ   r=   r   rÊ   r   r   Úissubsetr8   ÚmsÚpytestÚxfailr   rL   )r*   rÃ   rÄ   rm   rK   rL   rn   rf   rj   Zt_scale2Z	t2_scale2ZbarycentricZ
geocentricr#   r#   r$   Ú%test_conversion_never_loses_precisionÍ  s4     

(("rÓ   gš™™™™™¹?gÍÌÌÌÌÌì?c                 C   s¼   | \}}t |ddd�}t || ddd�}t |d ddd�}t||  tj¡dtj |tj  ƒ t||  tj¡|dtj |tj   ƒ t||  tj¡d| dtj |tj   ƒ d S )NrB   rq   rr   rC   )r   r   r9   r7   r8   r´   )r^   r”   rB   Údeltar�   Úthri   r#   r#   r$   Útest_leap_stretch_mjd  s    &*rÖ   iðØÿÿi'  )rs   rm   rÔ   )rP   g    @O=g    pg=)g   @é BAg     °<g     =)rP   g    ]d=rP   )r~   g  @   Ð?g      ð¿g      À<)g   @£BArP   g      °¼c           
   	   C   s  |\}}t  t¡j}dt }| dkrX|| dk s@|| | dk rPd}|tj }n|d9 }t||| dd�}zZtƒ �J ||tj  }t	|ƒ|kr˜||ks˜t
‚||tj  }	t|	||dd� W 5 Q R X W n@ tk
�r   t| dkpød	||   k oôd
k n  ƒ ‚ Y nX d S )Nr3   rq   rC   g•Ö&è.>r   rÈ   r   r˜   rD   é`‰% )rZ   r£   r;   r¤   rt   r7   r´   r   r0   r4   r=   rA   r   r   )
rs   rm   rÔ   rK   rL   Zminimum_for_changer@   rn   rj   rz   r#   r#   r$   Útest_jd_add_subtract_round_trip  s&    (rØ   éýÿÿÿ)rP   g   8œ@g      °<g      ”<)rÍ   rP   g      ”¼)g   € �BAr¬   g      �<c                 C   s8  |\}}t ||| dd�td|g| dd� }| ¡ }| ¡ }| ¡ }t|jd |jd  ƒ\}	}
|	|jd |jd  7 }	|	|
7 }	|	dk rº|dk s’t‚|dkr´|dkr´t	 
|ddgk¡s¸t‚nz|	dkrút|ƒtksÒt‚|dkrô|dkrôt	 
|ddgk¡søt‚n:|dk�st‚|dk�r0|dk�r0t	 
|ddgk¡�s4t‚d S )Nr   rÈ   r   rC   )r   r   ZargminZargmaxZargsortr   rL   rK   r=   rZ   rg   r4   rf   )rs   rm   rÔ   rK   rL   rn   ZiminZimaxZisortÚdiffÚextrar#   r#   r$   Útest_time_argminmaxsort9  s(    
  ÿ((rÜ   rO   )g   @Ä£BAg;ƒ"a à?)rs   Újds_aÚjds_b)g   €½ÂBAg8)¯lÄÑ?)gùA"€@ºBAg €ßîß?c              	   C   s&  |\}}|\}}t | dkpPd||   k o0dk n  oPd||   k oLdk n  ƒ | dkrfdt }nt}t||| dd�}t||| dd�}	|	| }
|
|	| | ks¦t‚tƒ �p t|	|
d  ||
d  dt ddd	� t|	|
 |d|
  dt dd
d	� t|	d|
  ||
 dt ddd	� W 5 Q R X d S )Nrq   rD   r×   r3   r   rÈ   r   Zmidpoint©r   r   r2   ÚupZdown)r   rt   r   r=   r0   rA   )rs   rÝ   rÞ   Újd1_aÚjd2_aÚjd1_bÚjd2_brf   Út_aÚt_br…   r#   r#   r$   Útest_timedelta_full_precisionZ  sF    6þ

 
   ÿ 
   ÿ
    ÿrç   rÌ   )rs   rÝ   rÞ   r\   Úyc              	   C   sê   |\}}|\}}t ||| dd�}	t ||| dd�}
tƒ �ª zH|
|	 }|| ||  }|| ||  }t|| ||| t dd� W nZ tk
rÚ   t| dkpÐd||   k o°dk n  oÐd||   k oÌdk n  ƒ ‚ Y nX W 5 Q R X d S )Nr   rÈ   r   r˜   rq   rD   r×   )r   r0   rA   rt   r   r   )rs   rÝ   rÞ   r\   rè   rá   râ   rã   rä   rå   ræ   r…   Zdt_xZdt_yr#   r#   r$   Ú(test_timedelta_full_precision_arithmetic~  s"     üré   )rÃ   rÄ   rÝ   rÞ   c              	   C   sÀ   |\}}|\}}t d| |fkƒ t d| |fkp4| |kƒ t||| dd�}t|||dd�}	tƒ �X |	| }
t||ƒ}t|	|ƒ}t|
|ƒ}t|| |tddd� t|| |
tddd� W 5 Q R X d S )	Nrq   r"   r   rÈ   r   Z	convertedrß   znot converted)r   r   r0   rÉ   rA   rt   )rÃ   rÄ   rÝ   rÞ   rá   râ   rã   rä   rå   ræ   r…   Zt_a_2Zt_b_2Zdt_2r#   r#   r$   Útest_timedelta_conversion›  s2    


    ÿ    ÿrê   c                 C   s*   g | ]"}|d kr"t j|t jjd�n|‘qS )rq   )Zmarks)rÑ   ÚparamÚmarkrÒ   )r»   r8   r#   r#   r$   r½   ¹  s   ÿéÓ  éÞ&  é•— )Údt1Údt2rs   c                 C   sL   t || d�}t || d�}t|| t|| | dkr4d n| d�dtj d� d S )Nr„   rq   r3   ©r   )r   rA   r   r7   rÎ   ©rs   rð   rñ   ri   rj   r#   r#   r$   Ú.test_datetime_difference_agrees_with_timedelta¿  s    ýrô   i¨JïÿiXµ l    `®;P ©ÚdaysÚmicrosecondsc                 C   s4   t ||d�}t|| d�t||d | dd�ks0t‚d S )Nrõ   r„   g   `×4Br   rÈ   )r   r   r=   ©rs   rö   r÷   Útdr#   r#   r$   Útest_datetime_to_timedeltaÌ  s       ÿrú   c                 C   s&   t ||d�}|t|| d�jks"t‚d S )Nrõ   r„   )r   r   Úvaluer=   rø   r#   r#   r$   Ú!test_datetime_timedelta_roundtripØ  s    rü   )rö   r   i   g    s¹=i   g   ˆÐß=c                 C   s8   t ||d| d�}d|_t|t |j| d�dtj d� d S )Nr   rr   r   r„   r3   rò   )r   r!   rA   rû   r7   rÎ   )rs   rö   r   rù   r#   r#   r$   Ú!test_timedelta_datetime_roundtripâ  s    rý   c                 C   sB   t d| d�}t||f|Ž}t|f|Žt|f|Ž }||ks>t‚d S r¾   )Údictr   r=   )rs   rö   r   ÚkwargsZwholeZ
from_partsr#   r#   r$   Útest_timedelta_from_partsì  s    r   c                  C   sn   d} t dddddƒ}t dddddddƒ}t|| d�}t|| d�}t|| t|| | d� ƒdtj k sjt‚d S )Nr   rí   rC   r   rî   rï   r„   )r   r   r4   r   r7   rÎ   r=   ró   r#   r#   r$   Ú<test_datetime_difference_agrees_with_timedelta_no_hypothesisö  s    r  iÐ  i�îùÿ)r…   rù   iƒ  iÝóÿé5   iÉE é
   i  i7ºçÿiú¤ é   i4c c                 C   sv   z||  W n t k
r(   tdƒ Y nX t|| d�}t|| dkrFd n| d�}t|| t|| | d�dtj d� d S )NFr„   rq   r3   rò   )ÚOverflowErrorr   r   r   rA   r7   rÎ   )rs   r…   rù   Zdt_aZtd_ar#   r#   r$   Útest_datetime_timedelta_sum   s    r  i¦ÿÿÿéZ   iLÿÿÿé´   )rm   Úlat1Úlat2ÚlonÚkindZapparentZmeanc           
      C   s|   |\}}t ||dd||fd�}t ||dd||fd�}	z$t| |¡|	 |¡dtj d� W n tjk
rv   tdƒ Y nX d S )Nr"   r   ©rs   r!   ÚlocationrC   rò   F)r   rA   Úsidereal_timer7   Zuasr   rÊ   r   )
r*   r  rm   r	  r
  r  rK   rL   ri   rj   r#   r#   r$   Útest_sidereal_lat_independent  s      ÿ
r  i˜þÿÿéh  )rm   Úlatr  Ú	lon_deltac                 C   s    |\}}t ||dd||fd�}t ||dd|| |fd�}	z"| |¡|tj  |	 |¡ }
W n tjk
rx   tdƒ Y n$X |
 tj¡d d }t|ddd� d S )	Nr"   r   r  Fr  r  g¹y–/¤’>rò   )	r   r  r7   Zdegreer   rÊ   r   r6   rA   )r*   r  rm   r  r  r  rK   rL   ri   rj   rÚ   Zexpected_degreesr#   r#   r$   Útest_sidereal_lon_independent)  s    "r  )�Ú
contextlibr™   Ú	functoolsr-   r   r   r   r²   ÚnumpyrZ   rÑ   r   r   Z
hypothesisr   r   r	   r
   Zhypothesis.extra.numpyr   r   Zhypothesis.strategiesr   r   r   r   r   r   r   r   Zastropy.unitsZunitsr7   Zastropy.tests.helperr   Zastropy.timer   r   r   Zastropy.time.utilsr   r   Zastropy.utilsr   ÚpartialZallcloser£   r;   r¤   r€   rw   rŒ   rf   rt   r%   Zfixturer*   Úcontextmanagerr0   rA   ZLeapSecondsZfrom_iers_leap_secondsZleap_second_tablerI   ÚlistÚziprÚ   Zleap_second_deltasÚnowrQ   rJ   rH   rN   rR   rU   rV   rX   rc   rd   re   rk   ro   rp   ru   rx   r{   r}   r‚   r†   rˆ   rŠ   rŽ   r‘   r�   ÚminÚmaxr¡   r¨   r«   r¯   r°   Úintr³   r¶   r¹   rº   rÀ   rÂ   rË   rÓ   rÖ   rØ   ZSCALESrÜ   rç   ré   rê   Z_utc_badrì   Zparametrizerô   rú   rü   rý   r   r  r  r  r  r#   r#   r#   r$   Ú<module>   sà  ( 
 
ÿ 
 ÿ



'
ÿ


	




""þ


þ


	



"


þ

ýý1

ý  ÿýýû
ü
þ&
þþ



 
ÿ
þ
üü