
    IR-eq                        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	j.        e/          j0        d           Z1 ej,        e	j-         e	j.        e/          j0         e	j.        e/          j0                  Z2 ej,        e	j-         e	j.        e/          j0         e	j.        e/          j0        dz  dz            Z3 e	j.        e/          j0        Z4 e&e4d          Z5d Z6 e
j7        d          d             Z8e j9        d             Z:dddddZ;e+j<        =                                Z>e>d         dz
  Z? e@ eAe?dd          e	jB        e>d                                       ZC e%jD                    ZE e%d d          ZFd ZGed             ZHd ZId ZJd  ZKd! ZLed"             ZMd# ZNd$ ZOd% ZP e eM eL                                d&             ZQ e ed'd(           ed)d*g                    d+             ZRd, ZSd- ZTd. ZUd/ ZVd0 ZWd1 ZXd2 ZYd3 ZZd4 Z[d5 Z\ e ed6d7           ed8d                     ed9d:;          d<                         Z] e e e	j.        e/          j^        d=z   e	j.        e/          j_        d=z  >           e e	j.        e/          j^        d=z   e	j.        e/          j_        d=z  >                    d?             Z` e ed@d@A           ed@d@A                     edBdCD           edBdED           edFdED           edGdHD          dI                                                             Za e ed6d7           ed8d                     ed9d:;          dJ                         Zb e ed6d7           ed)d*                     ed9d:;           eddK;          dL                                     Zc e ed6d7           ed8d                     ed9d:;          dM                         Zd e ed6dN eeejf                  z
  dOz
             ed8d                     ed9d:;          dP                         Zg e eM eL                                dQ             Zh e ed'd(           ed)d*g                    dR             Zi e edS e$D                        eL            T           edUdVT           edUdWT          dX                                     Zj e eI                       edYZ          d[                         Zk e ee$           ee$           eL            \           ed]d^d_\           edUd`da\           edUd`dV\          db                                                 Zl e ee$           ee$           eL            \           edUdcdV\           edcd^dd\           ed^dUde\          df                                                 Zm e eeC           edgdh                    di             Zn e ee$           eL             edjdk          l           edcdmdnl           edcdodpl           edcdqdrl           edcdsdtl           edcdVdul           edcdvdwl          dx                                                                                     Zo e ee&jp                   eI             edye4z  dOe4z            l           edUdzd{l           edUdad|l           edUd}d~l           edUddl          d                                                             Zq e ee$           eL             eL                       edcdd           edcdd          d                                     Zr e ee$           eL             eL             edd           edd                    d             Zs e ee$           ee$           eI             eI                      d             Ztd e$D             Zu e e             e                       e edddd d            edddd d d d                    e
jv        w                    deu          d                                     Zx e edd           ed d                    e
jv        w                    deu          d                         Zy e edd           ed d                    e
jv        w                    deu          d                         Zz e edd           ed d                     edd           edd          e
jv        w                    deu          d                                                 Z{ e edd           ed d                     edd          e
jv        w                    deu          d                                     Z|d Z} e e             e                       e edddd d            edd=                     e edddd d            edd                     e edddd d            edd                     e edddd d            edd                     e edddd d d d           edd                    e
jv        w                    deu          d                                                                                     Z~ e eI             edd           edd           edd                    e
jv        w                    dddg          d                         Z e eI             edd           edd           edd                    e
jv        w                    dddg          d                         Zd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                  .    t          d          j         d S )Nz
2020-01-01)r   ut1     Alib/python3.11/site-packages/astropy/time/tests/test_precision.pysetup_moduler(   +   s     	r&   module)scopec               #      K   t           j                            t           j                            t           j                            5  dV  ddd           dS # 1 swxY w Y   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   earth_orientation_tablesetIERS_BopenIERS_B_FILEr%   r&   r'   iers_br1   1   s       
	%	)	)$+*:*:4;K*L*L	M	M 1 100001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1s   	AA"Ac               #      K   t          j                    5  t          j        dt                     d V  d d d            d S # 1 swxY w Y   d S )Nignore)category)warningscatch_warningsfilterwarningsr   r%   r&   r'   
quiet_erfar8   <   s      		 	"	"  ;????                 s    AA
A )r   r   labelc                   d}||dk    r|}nP|&|t          |           t          |          z   z  dz  }n(||t          |           t          |          z   z  dz  z   }| |z
  }t          |t                    r}|                    t          j                  }t          ||dz              t          | |dz              t          |t          j                  r|                    |j	                  }nJ	 t          |          }	t          |	|dz              t          |	 |d	z              n# t          $ r Y nw xY wt          |          |k     sJ 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)r:   z$ (b-a).to_value(u.s), from TimeDeltaz float(a-b)z float(b-a))abs
isinstancer   to_valueusr   Quantitytounitfloat	TypeError)
abr   r   r:   __tracebackhide__threshambambvtarget_values
             r'   assert_almost_equalrN   C   sz    |tqyy	Q#a&&)A-AQ0144
a%C#y!! ?||AC  t5#IIJJJJuE$JJKKKKfaj)) 	&&&%%C	? ::L <u}'<====L=(=>>>>>	  	 	 	D	 s88fs   6D/ /
D<;D<mjd   tai_utcc                  Z    t          t          dd          t          dd                    S )N@;% ip%             ?r   r   r%   r&   r'   reasonable_ordinary_jdrW   u   s&    &'**F4,=,=>>>r&   c           
          | t          t          t                    t          t          dz             t          t          dz
                                }|t          j        z   t          j        z    | t          dd                    fS )NrP   r   )r   r   leap_second_daysmjd0jd1jd2r   )drawrO   s     r'   leap_second_trickyr^   y   sz    
$)**)A-..)A-..	
 	
 C >DH$dd6!Q<<&8&888r&   c                      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        )rZ   r[   r\   todayr   r   rW   r^   )momentss    r'   reasonable_jdrd      sJ      $(DH!5	597MNG,w'')?)A)ACUCWCWXXXr&   c                  Z    t          t          dd          t          dd                    S )z+JD pair that might be unordered or far away    c    cArV   r%   r&   r'   unreasonable_ordinary_jdrh      &    &s##VD#%6%6777r&   c                  Z    t          t          dd          t          dd                    S )z4JD pair that is ordered but not necessarily near nowrf   rg   rT   rU   rV   r%   r&   r'   
ordered_jdrk      ri   r&   c                  l    t          t                      t                      t                                S N)r   rd   rk   rh   r%   r&   r'   unreasonable_jdrn      s#    -//:<<1I1K1KLLLr&   c                      | t                                }t          j        dt          fdt          fg          |                    fd          } | t          ||                    }|d         |d         fS )Nr[   r\   c                 0    t          j        |           S )N)dtype)nparray)xds    r'   <lambda>zjd_arrays.<locals>.<lambda>   s    "(1A"6"6"6 r&   )elements)r   rr   rq   rE   mapr   )r]   	jd_valuesrA   jdvrG   ru   s        @r'   	jd_arraysr{      s~    \^^A
5%.5%.122A
--6666
7
7CVAq3'''((AU8QuXr&   c                  Z    t          t          dd          t          dd                    S )Nrf   rg   rV   r%   r&   r'   unreasonable_deltar}      &    &s##VD#%6%6777r&   c                  Z    t          t          dd          t          dd                    S )Ng     g     @rT   rU   rV   r%   r&   r'   reasonable_deltar      r~   r&   c                     t          dt           t          
 gd          } t          j        | j        dz  dk              sJ t          j        t          | j                  dk               sJ t          ddt          z
  dt          z   gdt          z
  dt          z   ggd          }t          j        |j        dz  dk              sJ t          j        t          |j                  dk               sJ d	S )
z<Make jd2 approach +/-0.5, and check that it doesn't go over.g   @OBAr    r!   rP   r   rU   g    OBArT   N)r   tinyrr   allr[   r=   r\   t1t2s     r'   "test_abs_jd2_always_less_than_halfr      s    	i4%$	5	5	5B6"&1*/"""""6#bf++#$$$$$	S4Zt,td{D4K.HIRV
 
 
B 6"&1*/"""""6#bf++#$$$$$$$r&   c                    | \  }}t          ||d          }t          t          j        t          j        |j                                       t          j        |j        dz  dk              sJ t          j        t	          |j                  dk              sJ t          j        t	          |j                  dk     |j        dz  dk    z            sJ d S )Nr    r!   rP   r   rU   r<   )r   r   rr   amaxr=   r\   r   r[   jdsr[   r\   ts       r'   2test_abs_jd2_always_less_than_half_on_constructionr      s    HCS#d###A
2726!%==!!"""6!%!)q.!!!!!6#ae**#$$$$$63qu::#	Q78888888r&   i 
i rT   rU   c                 z    t          | |d          }t          |j                  dk    r|j        dz  dk    sJ d S )Nr    r!   rU   r<   r   )r   r=   r\   r[   )r[   r\   r   s      r'   test_round_to_evenr      s?    S#d###AJJ#AEAINNNNNNr&   c                      t          dddd          } | t          z   }|j        | j        k    r|j        | j        k    sJ |t          z
  }|j        | j        k    r|j        | j        k    sJ dS )z@Check that an addition at the limit of precision (2^-52) is seeng   BArU   r    utcr"   scaleN)r   dt_tinyr[   r\   )r   t_dtr   s      r'   test_additionr      sp    YD666Aw;D8quQU!2!2!2!2 
B6QU??rvr&   c                      dt           z  } t          dd          }|| z   dz  }|t          dd          z
  }t          |j        d          sJ dS )	z'Test precision with multiply and divide   g     @r    r!   g      @g     
@gYUUUUU?N)r   r   allclose_jd2r\   )dt_smalldt_bigdt_big_small_by_6dt_fracs       r'   test_mult_divr      sc    7{Hwt,,,F(*c1)F4"@"@"@@G%89999999r&   c                  .   t           j        dz  } t          dd          t           z   }t          d| d          }t          | dd          }|j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ dS )zDCheck that 3 ways of specifying a time + small offset are equivalentg     @g   vH7Bcxcsecr!   N)r   r\   r   r[   )dt_tiny_secr   r   t3s       r'   test_init_variationsr      s    +'K	d8	$	$	$w	.B	dK	1	1	1B	k4	1	1	1B6RV6RV6RV6RVr&   c                  `    t          dd          } | t          z   }| j        |j        k    sJ 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.
      <Br   r!   N)r   r   r    r   s     r'   test_precision_exceeds_64bitr      s4     
mH	-	-	-B	gB5BE>>>>>>r&   c                      t          dd          } t          dd          }|| z
  }|j        | j        z
  }t          |j        |j                  sJ t	          |j        |j                  sJ dS )z>Check that precision holds through scale change (cxcsec is TT)      ?r   r!   r   N)r   taiallclose_jdr[   r   r\   )t0r   dt_ttdt_tais       r'   test_through_scale_changer      sv    	c(	#	#	#B	mH	-	-	-BGEVbf_Fuy&*-----	6:.......r&   c                      t          dd          } t          dd          }|| z
  }t          |j        d          sJ dS )z%Check when initializing from ISO date2000:001:00:00:00.00000001r   r   z3000:001:13:00:00.00000002g2MUUUUݿN)r   r   r\   )r   r   dts      r'   test_iso_initr     sP    	*%	8	8	8B	*%	8	8	8B	bB BCCCCCCCr&   c                      t          dd          } t          j        | j                  | j        k    sJ t          dddd          } t          j        | j                  | j        k    sJ dS )	z,
    Check that jd1 is a multiple of 1.
    r   r   r   gރB?g)gAr    r   N)r   rr   roundr[   )r   s    r'   test_jd1_is_mult_of_oner     sr     
*%	8	8	8B8BFrv%%%%	j+D	F	F	FB8BFrv%%%%%%r&   c                      t          ddd          } t          j        | j                  | j        k    sJ | j        }t          j        |j                  |j        k    sJ 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jr    ttr   N)r   rr   r   r[   r   )r   t1_tais     r'   test_precision_negr     sc     
nT	6	6	6B8BFrv%%%%VF8FJ6:------r&   c                      t          t          dd          dd          } t          t          dd          dd          }| |z
  }t          |j        t	          j        |j                            sJ 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  jyearr   r   r   N)r   rangeallclose_secsecrr   r   )t_utct_tair   s      r'   test_precision_epochr   %  ss    
 tT""7%@@@EtT""7%@@@E	B 0 01111111r&   c                     t           j                            dd          5  t          ddgdd          j        } t          j        | j        t          j        dd	g          k              sJ 	 d
d
d
           d
S # 1 swxY w Y   d
S )zoRegression tests against #2083, where a leap second was rounded
    incorrectly by the underlying ERFA routine.auto_downloadFz2012-06-30 23:59:59.413z2012-07-01 00:00:00.413r$      )r   	precisionz2012-06-30 23:59:60.000z2012-07-01 00:00:00.000N)	r   confset_tempr   r   rr   r   isors   )r   s    r'   #test_leap_seconds_rounded_correctlyr   0  s     
		OU	3	3 
 
&(AB
 
 
 	 	

 vERX8:STUUU
 
 	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   AA<<B B l l    i   g     =)ifc           	         t          j        t          j        d                    5  t          |           t          |          z   }t	          | |          \  }}t          |          t          |          z   }t          ||t          t                    t          d                     d d d            d S # 1 swxY w Y   d S N(   )precr   r   r   )decimallocalcontextContextr   r   rN   r   )r   r   rG   rA   rrH   s         r'   test_two_sumr   ?  s     
	go2666	7	7 G GAJJ#q!}}1AJJ#Aqwt}}71::FFFF	G G G G G G G G G G G G G G G G G G   BB99B= B=r<   )	min_value	max_valuec                 ~    t           j                            t          | |          t          ||                      d S rm   )rr   testingassert_equalr   f1f2s     r'   test_two_sum_symmetricr   M  s2    
 JGBOOWR__=====r&   F)	allow_nanallow_infinitygg      r   g      gg    gc                 6   t          | |          \  }}t          |          t          |          t          j        t                    j        z  k    sB||cxk    rdk    s7n t          j        t          |           t          |          z             rJ d S d S d S )Nr   )r   r=   rr   finforE   epsisfinite)r   r   r1r2s       r'   test_two_sum_sizer   U  s     R__FBB#b''BHUOO////====q===={3r77SWW,-- == 	0/===r&   c           	         t          j        t          j        d                    5  t          |           t          |          z   }t	          | |          \  }}t          |          t          |          z   }t          ||t          t                    t          d                     d d d            d S # 1 swxY w Y   d S r   )r   r   r   r   r   rN   r   )r   r   rG   i_df_da_ds         r'   test_day_frac_harmlessr   f  s     
	go2666	7	7 I IAJJ#Aq>>ScllWS\\)AsWQZZHHHH	I I I I I I I I I I I I I I I I I Ir   ?c                     t          t          |          dk     p| dz  dk               t          | |          \  }}| |k    sJ ||k    sJ d S NrU   r<   r   )r   r=   r   r   r   r   r   s       r'   test_day_frac_exactr   p  sX     3q66C<%1q5A:&&&1~~HC8888888888r&   c                 \    t          | |          \  }}||ft          ||          k    sJ d S rm   )r   r   s       r'   test_day_frac_idempotentr   z  s:     1~~HC:#s++++++++r&   l          r   c                 P   t          | |dd          }t          | t          j        z   |          \  }}t          |j        |j                  \  }}t          ||z
  ||z
  z             t          j        z  	                    t          j
                  dt          j
        z  k     sJ d S )NrO   r   )valval2r"   r   rP   )r   r   erfaDJM0r[   r\   r=   r@   dayrC   ns)r   r   r   r[   r\   jd1_tjd2_ts          r'   test_mjd_initialization_preciser     s     	5666ADIq))HCAE15))LE5uu-..6::14@@1qt8KKKKKKr&   c                     | \  }}t          ||          \  }}t          j        |dz  dk              sJ t          j        t          |          dk              sJ t          j        t          |          dk     |dz  dk    z            sJ d S )NrP   r   rU   r<   )r   rr   r   r=   )r   r[   r\   t_jd1t_jd2s        r'   #test_day_frac_always_less_than_halfr    s    HCC%%LE56%!)q.!!!!!6#e**#$$$$$63u::#	Q78888888r&   c                 h    t          | |          \  }}t          |          dk    r	|dz  dk    sJ d S r   )r   r=   )r[   r\   r  r  s       r'   test_day_frac_round_to_evenr    s:    C%%LE5JJ#EAINNNNNNr&   c                     g | ]
}|d k    |S )r   r%   ).0scs     r'   
<listcomp>r
    s    IIIrR5[[[[[r&   )r   r   r   )ra   ra   )ra   g_   c                     |\  }}t          ||d|           }t                      5  ||t          z   k    sJ 	 d d d            d S # 1 swxY w Y   d S Nr    r   r   r8   r   )r   r   r[   r\   r   s        r'   test_resolution_never_decreasesr    s     HCS#d%000A	    AK                                   s   AA
A
)g   BA?)r   c                     | \  }}t          ||dd          }t                      5  ||dt          z  z   k    sJ 	 ddd           dS # 1 swxY w Y   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    r   r   r<   Nr  r   s       r'   #test_resolution_never_decreases_utcr    s     HCS#d%000A	 $ $AGO#####$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   A		AA)scale1scale2r   tcgr$   )g   BAg@;3?tcb)   @2BAra   c                    |\  }}t          |||d          }	 t                      5  t          ||          }d d d            n# 1 swxY w Y   n># t          j        $ r t          d           Y nt          $ r t          d           Y nw xY w|j        dz  dk    sJ t          |j	                  dk    sJ t          |j	                  dk     s|j        dz  dk    sJ d S d S )Nr    r   r"   FrP   r   rU   r<   )
r   r8   getattrr   IERSRangeErrorr   r   r[   r=   r\   )r1   r  r  r   r[   r\   r   r   s           r'   +test_conversion_preserves_jd1_jd2_invariantr    s@    HCS#VD111A\\ 	$ 	$F##B	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$   u   u6A:????rv;;#rv;;
as9   A AA A		A A	A B1BBr   )r  g?)g   @BAr  c                    |\  }}t          |||d          }|dk    s|dk    r&t          ||z             dk     rdt          j        z  }n
dt          z  }	 t                      5  ||z   }t          ||          }	t          ||          }
|	|
k     sJ 	 ddd           dS # 1 swxY w Y   dS # t          j        $ rN t          |dk    pd	||z   cxk     od
k     nc            t          |dk    pd	||z   cxk     od
k     nc             t          $ rN ||h                    ddh          }||h                    h d          }t          ||z   dk    p|p|            t          $ rq d||fv rit          |	|
z
  dt          j        z  z
            dt          j        z  k     rt          j                     t          |j        dk    p
|j        dk                 w xY w)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  r   rP   d   r<   Nr$   rS   i% r  tdb>   r   r   r  g       2BAg5?)r   r=   r@   usr   r8   r  r   r  r   r   issubsetAssertionErrorrA   mspytestxfailr    r\   )r1   r  r  r   r[   r\   r   r   r   t_scale2	t2_scale2barycentric
geocentrics                r'   %test_conversion_never_loses_precisionr*    s    HCS#VD111A 	%6U??C#I0B0BQTz7{\\ 	( 	(TBq&))HF++Ii'''''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
    v?'C#I"?"?"?"?"?"?"?"?@@@v?'C#I"?"?"?"?"?"?"?"?@@@   
 v&//??f%../C/C/CDD
sSyH$A
AkBBB    VV$$$8i'!ac'122QX==14)#8quy'8999s1   B- $.B B-  B$$B- 'B$(B- -D,Gg?g?c                 h   | \  }}t          |dd          }t          ||z   dd          }t          |dz   dd          }t          ||z
                      t          j                  dt          j        z  |t          j        z  z              t          ||z
                      t          j                  |dt          j        z  |t          j        z  z   z             t          ||z
                      t          j                  d|z
  dt          j        z  |t          j        z  z   z             d S )NrO   r   r   rP   )r   r   rC   r@   rA   r   )ru   r   rO   deltar   thr   s          r'   test_leap_stretch_mjdr.    s    JC	c%u	-	-	-B	cAge5	1	1	1B	cAge5	1	1	1Bb2g\\!#..QUUQS[1HJJJb2g\\!#..QY5L0MNNNb2g\\!#..Q1qu9uqs{;R0STTTTTr&   ii'  )r   r   r,  )ra   g    @O=g    pg=)g   @BAg     <g    =)ra   g    ]d=ra   )r   g  @   ?g      g      <)g   @BAra   g      c                 H   |\  }}t          j        t                    j        }dt          z  }| dk    r,||z   dk     s||z   |z   dk     rd}|t
          j        z  }n|dz  }t          ||| d          }	 t                      5  ||t
          j        z  z   }t          |          |k    r||k    sJ ||t
          j        z  z
  }	t          |	||d           d d d            d S # 1 swxY w Y   d S # t          $ r( t          | dk    pd	||z   cxk     od
k     nc             w xY w)Nr<   r   rP   g&.>r    r  r   r   rS   `% )rr   r   rE   r   r   r@   r   r   r8   r=   rN   r   r   )
r   r   r,  r[   r\   minimum_for_changerJ   r   r   r   s
             r'   test_jd_add_subtract_round_tripr2    s    HC%,[F~~9q==C#I-11 "&'!%/FF !#S#U4000A	\\ 	< 	<UQU]"B5zz///Qwwwweaem#BAF;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<    u~>39!>!>!>!>w!>!>!>!>???s1   4C/ AC"C/ "C&&C/ )C&*C/ /2D!)ra   g   8@g      <g      <)r  ra   g      )g   BAr   g      <c                    |\  }}t          ||| d          t          d|g| d          z   }|                                }|                                }|                                }t          |j        d         |j        d                    \  }	}
|	|j        d         |j        d         z
  z  }	|	|
z  }	|	dk     r2|dk     sJ |dk    r |dk    rt          j	        |ddgk              sJ d S |	dk    rDt          |          t          k    sJ |dk    r |dk    rt          j	        |ddgk              sJ d S |dk    sJ |dk    r |dk    rt          j	        |ddgk              sJ d S )Nr    r  r   rP   )r   r   argminargmaxargsortr   r\   r[   rr   r   r=   r   )r   r   r,  r[   r\   r   iminimaxisortdiffextras              r'   test_time_argminmaxsortr=  :  s    HCS#U40009	
E
%4 4 4 	A 88::D88::DIIKKE !%(QU1XI..KD%AE!HquQxDEMDaxxqyyyyqyyTQYY26%Aq6/+B+BYYYYY	5zzT!!!!qyyTQYY26%Aq6/+B+BYYYYYqyyyyqyyTQYY26%Aq6/+B+BYYYYYr&   r`   )g   @ģBAg;"a ?)r   jds_ajds_b)g   BAg8)l?)gA"@BAg ?c                 `   |\  }}|\  }}t          | dk    p%d||z   cxk     odk     nc od||z   cxk     odk     nc            | dk    rdt          z  }nt          }t          ||| d          }t          ||| d          }	|	|z
  }
|
|	|z   |z
  k    sJ t                      5  t	          |	|
dz  z
  ||
dz  z   dt          z  dd	           t	          |	|
z   |d|
z  z   dt          z  dd
	           t	          |	d|
z  z
  ||
z
  dt          z  dd	           d d d            d S # 1 swxY w Y   d S )Nr   rS   r0  r<   r    r  r   midpointr   r   r:   updown)r   r   r   r8   rN   )r   r>  r?  jd1_ajd2_ajd1_bjd2_br   t_at_br   s              r'   test_timedelta_full_precisionrK  [  s    LE5LE5
 	Ueem----g----S'EEM2S2S2S2SG2S2S2S2S   ~~7{
ue5
6
6
6C
ue5
6
6
6C	sB#*#####	 	
 	
"q&L#Q,Q[q
	
 	
 	
 	
 	"HcAFlW1D	
 	
 	
 	
 	!b&L#(W1F	
 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
s   #A3D##D'*D'r  )r   r>  r?  rt   yc                    |\  }}|\  }}t          ||| d          }	t          ||| d          }
t                      5  	 |
|	z
  }||z  ||z   z  }||z  ||z   z  }t          ||z   |||z   t          z  d           nH# t          $ r; t          | dk    p%d||z   cxk     odk     nc od||z   cxk     odk     nc             w xY w	 d d d            d S # 1 swxY w Y   d S )Nr    r  r   r   r   rS   r0  )r   r8   rN   r   r   r   )r   r>  r?  rt   rL  rE  rF  rG  rH  rI  rJ  r   dt_xdt_ys                 r'   (test_timedelta_full_precision_arithmeticrP    s    LE5LE5
ue5
6
6
6C
ue5
6
6
6C	  	sBr6QU#Dr6QU#DtRq1u6GaPPPPP 	 	 	 eem5555g5555 :%%-9999'9999	   	 Q                 s*   C<A>=C>ACCCC)r  r  r>  r?  c                    |\  }}|\  }}t          d| |fv           t          d| |fvp| |k               t          ||| d          }t          |||d          }	t                      5  |	|z
  }
t          ||          }t          |	|          }t          |
|          }t	          ||z
  |t
          dd           t	          ||z
  |
t
          dd           d d d            d S # 1 swxY w Y   d S )	Nr   r$   r    r  r   	convertedrB  znot converted)r   r   r8   r  rN   r   )r  r  r>  r?  rE  rF  rG  rH  rI  rJ  r   t_a_2t_b_2dt_2s                 r'   test_timedelta_conversionrV    sn    LE5LE5
5(()))
E&&))>f.>???
ue6$
7
7
7C
ue6$
7
7
7C	 
 
3YV$$V$$r6""EM4gA[	
 	
 	
 	
 	EM2G!?	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   +A.C&&C*-C*c                 h    g | ]/}|d k    r%t          j        |t           j        j                  n|0S )r   )marks)r$  parammarkr%  )r  rA   s     r'   r
  r
    sI       	 23eV\!6;,----  r&     &  镗 )dt1dt2r   c                     t          ||           }t          ||           }t          ||z
  t          ||z
  | dk    rd n|           dt          j        z             d S )Nr   r   r<   r   )r   rN   r   r@   r   r   r^  r_  r   r   s        r'   .test_datetime_difference_agrees_with_timedeltarc    sy     
c			B	c			B
R#)5E>>44uEEEX     r&   iJiX l    `;P daysmicrosecondsc                 ~    t          ||          }t          ||           t          ||dz  | d          k    sJ d S )Nrd  r   g   `4Br    r  )r   r   r   re  rf  tds       r'   test_datetime_to_timedeltarj    sc     
<	8	8	8BRu%%%lk*%* * *      r&   c                 `    t          ||          }|t          ||           j        k    sJ d S )Nrd  r   )r   r   valuerh  s       r'   !test_datetime_timedelta_roundtriprm    s=     
<	8	8	8B2U+++1111111r&   )re  r   i   g   s=i   g   =c                     t          ||d|           }d|_        t          |t          |j        |           dt          j        z             d S )Nr    r   r   r   r<   ra  )r   r"   rN   rl  r@   r   )r   re  r   ri  s       r'   !test_timedelta_datetime_roundtripro    sQ    
 
4$e	<	<	<BBIIbhe<<<1qt8LLLLLLr&   c                     t          d|           }t          ||fi |}t          |fi |t          |fi |z   }||k    sJ d S r  )dictr   )r   re  r   kwargswhole
from_partss         r'   test_timedelta_from_partsru    sn     U+++FdH////E4**6**Yx-J-J6-J-JJJJr&   c            	         d} t          ddddd          }t          ddddddd          }t          ||           }t          ||           }t          ||z
  t          ||z
  |           z
            dt          j        z  k     sJ d S )Nr   r[  rP   r   r\  r]  r   )r   r   r=   r   r@   r   rb  s        r'   <test_datetime_difference_agrees_with_timedelta_no_hypothesisrw    s    E
4Aq!
$
$C
4Aq!Q
/
/C	c			B	c			BR9S3Ye<<<<==ADHHHHHHr&   i  i)r   ri  i  i5   iE 
   i  i7i    i4c c                    	 ||z    n# t           $ r t          d           Y nw xY wt          ||           }t          || dk    rd n|           }t	          ||z   t          ||z   |           dt
          j        z             d S )NFr   r   r<   ra  )OverflowErrorr   r   r   rN   r@   r   )r   r   ri  dt_atd_as        r'   test_datetime_timedelta_sumr    s    
R   u%   DRu~~tt5AAADtT"r'%?%?%?a!$hOOOOOOs    $$iZ   iL   )r   lat1lat2lonkindapparentmeanc                 >   |\  }}t          ||dd||f          }t          ||dd||f          }		 t          |                    |          |	                    |          dt          j        z             d S # t
          j        $ r t          d           Y d S w xY w)Nr$   r    r   r"   locationrP   ra  F)r   rN   sidereal_timer@   uasr   r  r   )
r1   r  r   r  r  r  r[   r\   r   r   s
             r'   test_sidereal_lat_independentr    s     HC	c3eDC;	G	G	GB	c3eDC;	G	G	GBT""B$4$4T$:$:QU	
 	
 	
 	
 	
 	
    us   AA: :BBih  )r   latr  	lon_deltac                    |\  }}t          ||dd||f          }t          ||dd||z   |f          }		 |                    |          |t          j        z  z   |	                    |          z
  }
|
                    t          j                  dz   dz  }t          |dd           d S # t          j        $ r t          d           Y d S w xY w)	Nr$   r    r  r  r  gy/>ra  F)	r   r  r@   degreer?   rN   r   r  r   )r1   r  r   r  r  r  r[   r\   r   r   r;  expected_degreess               r'   test_sidereal_lon_independentr  *  s     HC	c3eDC:	F	F	FB	c3eDC)OS;Q	R	R	RBN%%	AH(<<r?O?OPT?U?UU !MM!(33c9S@,c8LMMMMMM	    us   ;B* *CC)
contextlibr   	functoolsr5   r   r   r   r   numpyrr   r$  r   r   
hypothesisr   r	   r
   r   hypothesis.extra.numpyr   r   hypothesis.strategiesr   r   r   r   r   r   r   r   astropy.unitsunitsr@   astropy.tests.helperr   astropy.timer   r   r   astropy.time.utilsr   r   astropy.utilsr   partialallcloser   rE   r   r   r   r   r   r   r(   fixturer1   contextmanagerr8   rN   LeapSecondsfrom_iers_leap_secondsleap_second_tablerY   listzipr;  leap_second_deltasnowrb   rZ   rW   r^   rd   rh   rk   rn   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   minmaxr   r   r   r   r   intr   r   r  r  r  r  r  r*  r.  r2  SCALESr=  rK  rP  rV  _utc_badrZ  parametrizerc  rj  rm  ro  ru  rw  r  r  r  r%   r&   r'   <module>r     s/             ( ( ( ( ( ( ( (             ' ' ' ' ' ' ' ' 5 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	       9 9 9 9 9 9 > > > > > > > > > > 0 0 0 0 0 0 0 0      i("(5//2EANNN y Khbhuoo)0C   !y Khbhuoo)0Cb0H40O   rx
)D
&
&
&   h1 1  1    '+R     N $;;== $U+a/ TCgbg&7	&BCCDD   	

tAe? ? ? 9 9 9Y Y Y8 8 8
8 8 8
M M M   8 8 88 8 8
	% 	% 	% yy""##$$9 9 %$9 xx%  ,,c{";";<<4 4 =<4

/ 
/ 
/: : :	 	 	  / / /D D D& & &	. 	. 	.2 2 2
 
 
 xxi((&&Q--885)***G G +* 98G 
FXRXe__(1,8Ka8OPPP
FXRXe__(1,8Ka8OPPP > >	 > 
FU5111
FU5111  	!&:;;;!&;<<<"'<==="'=>>>  ?> >= =< <;	  xxi((&&Q--885)***I I +* 98I xxi((&&s*;*;<<5)***1#$$$  %$ +* =< xxi((&&Q--885)***, , +* 98,
 xxecc$)nn4q89966"a==II5)***L L +* JIL yy""##$$9 9 %$9 xx%  ,,c{";";<<4 4 =<4
 
,II%9III
J
J   	u*%%%u4555    65 &%	   }},---$ $ .- $ <,--<,--  
 	e)IJJJe)9:::e4440 0 54 ;: KJ 0 <,--<,--  
 	e444e)HIIIe)HIII. . JI JI 54 .b ||&''S)9)9::U U ;:U 
,+
,
,
&

  
 	u7?TUUU
8@U   	u6cBBBu4DAAAu*,EFFFu*2HIII  JI GF BA CB  VU 6 
,y'
(
(
&dAH
%
%  
 	u3;PQQQu*2GHHHu*2HIIIu:BWXXXC C YX JI IH RQ C0 ||())??+<+<oo>O>OPPu,4STTT

(
2  

 
  UT QP
: 
,+
,
,
/


/

hq#hq#    , <,--<,--
-//
-//	  
 
 
0 !   yy{{IIKK  XXdAq!Q''XXdAq!Q6-R-RSSS(++  ,+ TS !  	+z	*	*!344   (++  ,+	 
 	+z	*	*!344   (++2 2 ,+	 
2
 HH[*--q!EEEf4555g 5666(++M M ,+ 76 65 FEM xxZ((&&A,,77f4555(++  ,+ 65 87I I I yy{{JJLL!!HHT1aA&&99'PQ+R+R+RSSSHHT1aA&&99'PR+S+S+STTTHHT1aA&&99'PR+S+S+STTTxaAq!!iiXF&S&S&S   	xaAq!R((yhV444   (++P P ,+	   UT UT TS "!P 	R	RtS	   *f!566	 	 76 	 sBtSfT3	   *f!566
N 
N 76 
N 
N 
Nr&   