Beispiel #1
0
 def test_round_trip(self):
     """Test precision of round-trip conversion.
     """
     # do tests at random points between epoch and max. time
     times = [
         "1970-01-01T12:00:00.123",
         "1999-12-31T23:59:57.123456",
         "2000-01-01T12:00:00.123456",
         "2030-01-01T12:00:00.123456789",
         "2075-08-17T00:03:45",
         "2099-12-31T23:00:50",
     ]
     for time in times:
         atime = Time(time, format="isot", scale="tai")
         for sec in range(7):
             # loop over few seconds to add to each time
             for i in range(100):
                 # loop over additional fractions of seconds
                 delta = sec + 0.3e-9 * i
                 in_time = atime + TimeDelta(delta, format="sec")
                 # do round-trip conversion to nsec and back
                 value = TimeConverter().astropy_to_nsec(in_time)
                 value = TimeConverter().nsec_to_astropy(value)
                 delta2 = value - in_time
                 delta2_sec = delta2.to_value("sec")
                 # absolute precision should be better than half
                 # nanosecond, but there are rounding errors too
                 self.assertLess(abs(delta2_sec), 0.51e-9)
Beispiel #2
0
    def test_time_before_epoch(self):
        """Tests for before-the-epoch time.
        """
        time = Time("1950-01-01T00:00:00", format="isot", scale="tai")
        value = TimeConverter().astropy_to_nsec(time)
        self.assertEqual(value, 0)

        value = TimeConverter().nsec_to_astropy(value)
        self.assertEqual(value, TimeConverter().epoch)
Beispiel #3
0
 def testInvalid(self):
     """Test that we reject timespans that should not exist.
     """
     with self.assertRaises(ValueError):
         Timespan(TimeConverter().max_time, None)
     with self.assertRaises(ValueError):
         Timespan(TimeConverter().max_time, TimeConverter().max_time)
     with self.assertRaises(ValueError):
         Timespan(None, TimeConverter().epoch)
     with self.assertRaises(ValueError):
         Timespan(TimeConverter().epoch, TimeConverter().epoch)
     t = TimeConverter().nsec_to_astropy(TimeConverter().max_nsec - 1)
     with self.assertRaises(ValueError):
         Timespan(t, t)
     with self.assertRaises(ValueError):
         Timespan.fromInstant(t)
    def test_max_time(self):
        """Tests for after-the-end-of-astronomy time.
        """
        # there are rounding issues, need more complex comparison
        time = Time("2101-01-01T00:00:00", format="isot", scale="tai")
        value = TimeConverter().astropy_to_nsec(time)

        value_max = TimeConverter().astropy_to_nsec(TimeConverter().max_time)
        self.assertEqual(value, value_max)

        # Astropy will give "dubious year" for UTC five years in the future
        # so hide these expected warnings from the test output
        with warnings.catch_warnings():
            warnings.simplefilter(
                "ignore", category=astropy.utils.exceptions.AstropyWarning)
            time = Time("2101-01-01T00:00:00", format="isot", scale="utc")

        # unittest can't test for no warnings so we run the test and
        # trigger our own warning and count all the warnings
        with self.assertWarns(Warning) as cm:
            TimeConverter().astropy_to_nsec(time)
            warnings.warn("deliberate")
        self.assertEqual(str(cm.warning), "deliberate")
Beispiel #5
0
    def test_times_equal(self):
        """Test for times_equal method
        """
        # time == time should always work
        time1 = Time("2000-01-01T00:00:00.123456789", format="isot", scale="tai")
        self.assertTrue(TimeConverter().times_equal(time1, time1))

        # one nsec difference
        time1 = Time("2000-01-01T00:00:00.123456789", format="isot", scale="tai")
        time2 = Time("2000-01-01T00:00:00.123456788", format="isot", scale="tai")
        self.assertTrue(TimeConverter().times_equal(time1, time2, 2.))
        self.assertTrue(TimeConverter().times_equal(time2, time1, 2.))
        self.assertFalse(TimeConverter().times_equal(time1, time2, .5))
        self.assertFalse(TimeConverter().times_equal(time2, time1, .5))

        # one nsec difference, times in UTC
        time1 = Time("2000-01-01T00:00:00.123456789", format="isot", scale="utc")
        time2 = Time("2000-01-01T00:00:00.123456788", format="isot", scale="utc")
        self.assertTrue(TimeConverter().times_equal(time1, time2, 2.))
        self.assertTrue(TimeConverter().times_equal(time2, time1, 2.))
        self.assertFalse(TimeConverter().times_equal(time1, time2, .5))
        self.assertFalse(TimeConverter().times_equal(time2, time1, .5))

        # 1/2 nsec difference
        time1 = Time("2000-01-01T00:00:00.123456789", format="isot", scale="tai")
        time2 = time1 + TimeDelta(0.5e-9, format="sec")
        self.assertTrue(TimeConverter().times_equal(time1, time2))
        self.assertTrue(TimeConverter().times_equal(time2, time1))
        self.assertFalse(TimeConverter().times_equal(time1, time2, .25))
        self.assertFalse(TimeConverter().times_equal(time2, time1, .25))

        # 1/2 microsec difference
        time1 = Time("2000-01-01T00:00:00.123456789", format="isot", scale="tai")
        time2 = time1 + TimeDelta(0.5e-6, format="sec")
        self.assertTrue(TimeConverter().times_equal(time1, time2, 501))
        self.assertTrue(TimeConverter().times_equal(time2, time1, 501))
        self.assertFalse(TimeConverter().times_equal(time1, time2, 499))
        self.assertFalse(TimeConverter().times_equal(time2, time1, 499))

        # UTC vs TAI
        time1 = Time('2013-06-17 13:34:45.775000', scale='tai', format='iso')
        time2 = Time('2013-06-17T13:34:10.775', scale='utc', format='isot')
        self.assertTrue(TimeConverter().times_equal(time1, time2))
        self.assertEqual(TimeConverter().astropy_to_nsec(time1), TimeConverter().astropy_to_nsec(time2))