Ejemplo n.º 1
0
def _test_erfa_conversion(leap, i_f):
    i_i, f_i = i_f
    assume(0 <= f_i < 1)
    if leap:
        assume(i_i in leap_sec_days)
    else:
        assume(i_i not in leap_sec_days)
    jd1_in, jd2_in = day_frac(erfa.DJM0 + i_i, f_i)
    y, mo, d, f = erfa.jd2cal(jd1_in, jd2_in)
    assert 0 < y < 3000
    assert 0 < mo <= 12
    assert 0 <= d < 32
    assert 0 <= f < 1

    jd1_temp, jd2_temp = erfa.cal2jd(y, mo, d)
    jd1_temp, jd2_temp = day_frac(jd1_temp, jd2_temp)  # improve numerics
    jd1_temp, jd2_temp = day_frac(jd1_temp, jd2_temp + f)
    jd_change = abs((jd1_temp - jd1_in) + (jd2_temp - jd2_in)) * u.day
    assert jd_change.to(u.ns) < 1 * u.ns

    ft = 24 * f
    h = safe_kind_conversion(np.floor(ft), dtype=int)
    ft -= h
    ft *= 60
    m = safe_kind_conversion(np.floor(ft), dtype=int)
    ft -= m
    ft *= 60
    s = ft
    assert 0 <= h < 24
    assert 0 <= m < 60
    assert 0 <= s < 60

    jd1, jd2 = erfa.dtf2d("UTC", y, mo, d, h, m, s)
    y2, mo2, d2, f2 = erfa.jd2cal(jd1, jd2)
    # assert (y, mo, d) == (y2, mo2, d2)
    # assert (abs(f2-f)*u.day).to(u.s) < 1*u.ns

    assert jd1 == np.floor(jd1) + 0.5
    assert 0 <= jd2 < 1
    jd1, jd2 = day_frac(jd1, jd2)
    jd_change = abs((jd1 - jd1_in) + (jd2 - jd2_in)) * u.day
    if leap:
        assert jd_change.to(u.s) < 1 * u.s
    else:
        assert jd_change.to(u.ns) < 2 * u.ns
        # assert jd_change.to(u.ns) < 1 * u.ns
    return

    i_o, f_o = day_frac(jd1 - erfa.DJM0, jd2)

    mjd_change = abs((i_o - i_i) + (f_o - f_i)) * u.day
    if leap:
        assert mjd_change.to(u.s) < 1 * u.s
    else:
        assert mjd_change.to(u.ns) < 1 * u.ns
Ejemplo n.º 2
0
def test_day_frac(i_f):
    assert_closer_than_ns(day_frac(*i_f), i_f, 1)
Ejemplo n.º 3
0
def test_time_to_longdouble_via_jd(scale, i_f):
    i, f = i_f
    jd1, jd2 = day_frac(i + erfa.DJM0, f)
    t = Time(val=jd1, val2=jd2, format="jd", scale=scale)
    ld = np.longdouble(i) + np.longdouble(f)
    assert (abs(time_to_longdouble(t) - ld) * u.day).to(u.ns) < 1 * u.ns
Ejemplo n.º 4
0
def test_time_construction_mjd_versus_jd(scale, i_f):
    i, f = i_f
    jd1, jd2 = day_frac(i + erfa.DJM0, f)
    t = Time(val=jd1, val2=jd2, format="jd", scale=scale)
    t2 = Time(val=i, val2=f, format="mjd", scale=scale)
    assert abs(t - t2).to(u.ns) < 1 * u.ns
Ejemplo n.º 5
0
def test_time_construction_mjds_preserved(i_f):
    i, f = i_f
    t = Time(val=i, val2=f, format="mjd", scale="tai")
    jd1, jd2 = day_frac(i + erfa.DJM0, f)
    jd1_t, jd2_t = day_frac(t.jd1, t.jd2)
    assert (abs((jd1 - jd1_t) + (jd2 - jd2_t)) * u.day).to(u.ns) < 1 * u.ns
Ejemplo n.º 6
0
def test_time_construction_jds_exact(scale, i_f):
    i, f = i_f
    jd1, jd2 = day_frac(i + erfa.DJM0, f)
    t = Time(val=jd1, val2=jd2, format="jd", scale=scale)
    jd1_t, jd2_t = day_frac(t.jd1, t.jd2)
    assert (jd1, jd2) == (jd1_t, jd2_t)