def test_GPSTime_add_datetime():
    gps_time = GPSTime(0, 0)
    dt = GPSTime(1920, 415000).to_datetime()
    gps_time_adding = GPSTime.from_datetime(dt)
    gps_time2 = gps_time + dt
    assert gps_time2.week_number == gps_time_adding.week_number
    assert gps_time2.time_of_week == gps_time_adding.time_of_week
def test_GPSTime_constructor():
    t = GPSTime(1500, 604799)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799, "Tow not properly calculated"
    t = GPSTime(1500, 604800)
    assert t.week_number == 1501, "Weeknum not properly calculated"
    assert t.time_of_week == 0, "Tow not properly calculated"
def test_GPSTime_constructor_input_arguments():
    t = GPSTime(1500, 604799, 9e14)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert t.femtoseconds == 9e14, "femtoseconds not properly calculated"

    # Loses femtosecond accuracy
    t = GPSTime(1500, 604799.9)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert np.isclose(t.femtoseconds,
                      9e14), "femtoseconds not properly calculated"

    t = GPSTime(1500, seconds=604799, femtoseconds=9e14)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert t.femtoseconds == 9e14, "femtoseconds not properly calculated"

    t = GPSTime(1500, femtoseconds=9e14, seconds=604799)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert t.femtoseconds == 9e14, "femtoseconds not properly calculated"

    # These will not produce accurate results at the femtosecond level
    t = GPSTime(1500, seconds=604799.9)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert np.isclose(t.femtoseconds,
                      9e14), "femtoseconds not properly calculated"

    t = GPSTime(1500, time_of_week=604799.9)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert np.isclose(t.femtoseconds,
                      9e14), "femtoseconds not properly calculated"

    t = GPSTime(week_number=1500, time_of_week=604799.9)
    assert t.week_number == 1500, "Weeknum not properly calculated"
    assert t.time_of_week == 604799.9, "Tow not properly calculated"
    assert t.seconds == 604799, "seconds not properly calculated"
    assert np.isclose(t.femtoseconds,
                      9e14), "femtoseconds not properly calculated"

    with pytest.raises(ValueError):
        t = GPSTime(1500, 1, 2, 3)

    with pytest.raises(ValueError):
        t = GPSTime(1500, time_of_week=1.0, seconds=2, femtoseconds=3)

    with pytest.raises(ValueError):
        t = GPSTime(1500, time_of_week=604799, femtoseconds=9e14)
def test_GPSTime_sub_GPSTime():
    gps_time = GPSTime(2080, 0)
    gps_time2 = gps_time - gps_time
    assert gps_time2 == 0
    gps_time3 = GPSTime(2080, 5)
    gps_time2 = gps_time - gps_time3
    assert gps_time2 == -5
    gps_time4 = GPSTime(2079, 604795)
    gps_time2 = gps_time - gps_time4
    assert gps_time2 == 5
def test_GPSTime_sub_nparray_timedelta():
    gps_time = GPSTime(2080, 100)
    arr = np.array([datetime.timedelta(seconds=101)])
    subtracted = gps_time - arr
    for i, t in enumerate(subtracted):
        assert t.time_of_week == 604799
        assert t.week_number == 2079
def test_GPSTime_from_datetime():
    dt = datetime.datetime(2020, 4, 24)
    t = GPSTime.from_datetime(dt)
    assert t.to_datetime() == dt
    assert hasattr(t, "seconds"), "from_datetime() did not instantiate seconds"
    assert hasattr(
        t, "femtoseconds"), "from_datetime() did not instantiate femtoseconds"
def test_GPSTime_sub_add_picosecond_accuracy():
    t = GPSTime(1000, 0)
    t2 = t + 1e-12
    assert t2.time_of_week == 1e-12
    t3 = t - 1e-12
    assert t3.week_number == 999
    assert t3.time_of_week == 604800 - 1e-12
def test_GPSTime_sub_datetime():
    gps_time = GPSTime(2080, 0)
    dt = gps_time.to_datetime()
    gps_time2 = gps_time - dt
    assert gps_time2 == 0
    gps_time3 = GPSTime(2080, 5)
    dt = gps_time3.to_datetime()
    gps_time2 = gps_time - dt
    assert gps_time2 == -5
    gps_time4 = GPSTime(2079, 604795)
    dt = gps_time4.to_datetime()
    gps_time2 = gps_time - dt
    assert gps_time2 == 5
def test_GPSTime_add_numpy_array():
    to_add = np.arange(0, 50, 1)
    gps_time = GPSTime(2080, 604700)
    added = gps_time + to_add
    assert len(added) == len(to_add)
    for i, add in enumerate(added):
        assert isinstance(add, GPSTime)
        assert add.time_of_week == gps_time.time_of_week + i
def test_GPSTime_add_timedelta():
    gps_time = GPSTime(2080, 604700)
    gps_time2 = gps_time + datetime.timedelta(seconds=5)
    assert gps_time2.week_number == 2080
    assert gps_time2.time_of_week == 604705
    gps_time2 = gps_time + datetime.timedelta(seconds=100)
    assert gps_time2.week_number == 2081
    assert gps_time2.time_of_week == 0
def test_get_next_leap_seconds(year, leap_second_date, leap_second):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    out = LeapSeconds.get_next_leap_second(GPSTime.from_datetime(date))
    if leap_second_date is not None:
        date, calculated_ls = out
        assert leap_second_date == date
        assert leap_second == calculated_ls
    else:
        assert out is None
def test_GPSTime_add_float():
    gps_time = GPSTime(2080, 604700)
    gps_time2 = gps_time + 5
    assert gps_time2.week_number == 2080
    assert gps_time2.time_of_week == 604705
    gps_time2 = gps_time + 100
    assert gps_time2.week_number == 2081
    assert gps_time2.time_of_week == 0
    gps_time2 = gps_time + -604701
    assert gps_time2.week_number == 2079
    assert gps_time2.time_of_week == 604799
def test_GPSTime_iadd():
    gps_time = GPSTime(2080, 604700)
    gps_time += 5
    assert gps_time.week_number == 2080
    assert gps_time.time_of_week == 604705
    gps_time += 95
    assert gps_time.week_number == 2081
    assert gps_time.time_of_week == 0
    gps_time += -100
    assert gps_time.week_number == 2080
    assert gps_time.time_of_week == 604700
def test_get_leap_seconds(year, leap_seconds):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    calculated_ls = LeapSeconds.get_leap_seconds(GPSTime.from_datetime(date))
    assert leap_seconds == calculated_ls
@pytest.mark.parametrize("year,leap_seconds", [(1981, 0), (1982, 1), (1983, 2),
                                               (1984, 3), (1986, 4), (1989, 5),
                                               (1991, 6), (1992, 7), (1993, 8),
                                               (1995, 10), (1997, 11),
                                               (1998, 12), (2000, 13),
                                               (2007, 14), (2010, 15),
                                               (2013, 16), (2016, 17),
                                               (2020, 18), (2021, 18)])
def test_get_leap_seconds(year, leap_seconds):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    calculated_ls = LeapSeconds.get_leap_seconds(GPSTime.from_datetime(date))
    assert leap_seconds == calculated_ls


@pytest.mark.parametrize("year,leap_second_date,leap_second",
                         [(1980, GPSTime(77, 259200), 1), (2021, None, None),
                          (2000, GPSTime(1356, 0.0), 14)])
def test_get_next_leap_seconds(year, leap_second_date, leap_second):
    date = datetime.datetime(year, 1, 1, 0, 0, 0)
    out = LeapSeconds.get_next_leap_second(GPSTime.from_datetime(date))
    if leap_second_date is not None:
        date, calculated_ls = out
        assert leap_second_date == date
        assert leap_second == calculated_ls
    else:
        assert out is None


if __name__ == "__main__":
    gps_time = GPSTime.from_datetime(datetime.datetime(2000, 1, 1))
    # gps_time2 = gps_time + datetime.datetime(1990, 1, 6)
def test_GPSTime_to_datetime():
    dt = datetime.datetime(2020, 4, 24)
    week, tow = datetime2tow(dt)
    t = GPSTime(week, tow)
    assert t.to_datetime() == dt
def test_has_hash():
    GPSTime(2080, 604800).__hash__()
def test_has_repr():
    repr(GPSTime(2080, 604800))
def test_GPSTime_sub_float():
    gps_time = GPSTime(2081, 0)
    gps_time2 = gps_time - 1
    assert gps_time2.week_number == 2080
    assert gps_time2.time_of_week == 604799
def test_GPSTime_add_GPSTime():
    gps_time = GPSTime(0, 0)
    gps_time_adding = GPSTime(1920, 415000)
    gps_time2 = gps_time + gps_time_adding
    assert gps_time2.week_number == gps_time_adding.week_number
    assert gps_time2.time_of_week == gps_time_adding.time_of_week
示例#21
0
def get_photo_date(gpsweek, seconds):
    float_val = float(seconds)
    int_val = int(float_val)
    gps_time = GPSTime(gpsweek, int_val)
    return gps_time.to_datetime().strftime("%Y:%m:%d %H:%M:%S")
def test_GPSTime_from_datetime_invalid_type(invalid_type):
    with pytest.raises(TypeError):
        GPSTime.from_datetime(invalid_type)
def test_GPSTime_sub_nparray_datetime():
    gps_time = GPSTime(2080, 100)
    arr = np.array([gps_time.to_datetime()])
    subtracted = gps_time - arr
    for i, t in enumerate(subtracted):
        assert t == 0
def test_GPSTime_sub_nparray_float():
    arr = np.arange(0, 50, 1)
    gps_time = GPSTime(2080, 100)
    subtracted = gps_time - arr
    for i, t in enumerate(subtracted):
        assert t.time_of_week == 100 - i
def test_GPSTime_to_zcount():
    tow = 500000
    t = GPSTime(10, tow)
    assert t.to_zcount() == t.time_of_week / 1.5
def test_GPSTime_isub():
    gps_time = GPSTime(2080, 604800)
    gps_time -= 5
    assert gps_time.week_number == 2080
    assert gps_time.time_of_week == 604795
示例#27
0
def test_arange_datetime():
    gps_time = GPSTime(0, 0).to_datetime()
    gps_times = time.arange_datetime(gps_time, 1, 1)
    for i, t in enumerate(gps_times):
        assert t == gps_time + datetime.timedelta(seconds=i * 0.001)
def test_GPSTime_sub_timedelta():
    gps_time = GPSTime(2081, 0)
    gps_time2 = gps_time - datetime.timedelta(seconds=1)
    assert gps_time2.week_number == 2080
    assert gps_time2.time_of_week == 604799
def test_arange_gps_time():
    gps_time = GPSTime(0, 0)
    gps_times = utilities.arange_gpstime(gps_time, 1, 1)
    for i, t in enumerate(gps_times):
        assert t == gps_time + i * 0.001
def test_GPSTime_ge_type_error(invalid_type):
    with pytest.raises(TypeError):
        GPSTime(0, 0) <= invalid_type