Пример #1
0
    def test_get_metadata_key_ranges(self):
        experiment = m.Experiment(
            os.path.join(ud.UData().Basedir, "foo.myrmidon"))
        experiment.SetMetaDataKey("alive", True)
        experiment.CreateAnt()
        a = experiment.CreateAnt()
        a.SetValue(key="alive", value=False, time=m.Time())
        a = experiment.CreateAnt()
        a.SetValue(key="alive", value=False, time=m.Time.SinceEver())
        a.SetValue(key="alive", value=True, time=m.Time())
        a.SetValue(key="alive", value=True, time=m.Time().Add(1))
        a.SetValue(key="alive", value=False, time=m.Time().Add(2))
        a.SetValue(key="alive", value=True, time=m.Time().Add(3))

        ranges = m.Query.GetMetaDataKeyRanges(experiment,
                                              key="alive",
                                              value=True)
        self.assertEqual(len(ranges), 4)
        self.assertEqual(ranges[0], (1, m.Time.SinceEver(), m.Time.Forever()))
        self.assertEqual(ranges[1], (2, m.Time.SinceEver(), m.Time()))
        self.assertEqual(ranges[2], (3, m.Time(), m.Time().Add(2)))
        self.assertEqual(ranges[3], (3, m.Time().Add(3), m.Time.Forever()))

        with self.assertRaises(IndexError):
            m.Query.GetMetaDataKeyRanges(experiment, key="isDead", value=True)

        with self.assertRaises(ValueError):
            m.Query.GetMetaDataKeyRanges(experiment, key="alive", value=42.0)
Пример #2
0
 def test_has_infinite_support(self):
     self.assertEqual(m.Time.SinceEver().ToTimestamp(), float('-inf'))
     self.assertEqual(m.Time.Forever().ToTimestamp(), float('inf'))
     self.assertEqual(m.Time(float('-inf')), m.Time.SinceEver())
     self.assertEqual(m.Time(float('inf')), m.Time.Forever())
     self.assertTrue(m.Time.Forever().IsInfinite())
     self.assertTrue(m.Time.Forever().IsForever())
     self.assertFalse(m.Time.Forever().IsSinceEver())
     self.assertTrue(m.Time.SinceEver().IsInfinite())
     self.assertFalse(m.Time.SinceEver().IsForever())
     self.assertTrue(m.Time.SinceEver().IsSinceEver())
Пример #3
0
    def test_identification_manipulation(self):
        ants = [self.experiment.CreateAnt(), self.experiment.CreateAnt()]
        with self.assertRaises(IndexError):
            self.experiment.AddIdentification(42, 0, m.Time.SinceEver(),
                                              m.Time.Forever())
        self.experiment.AddIdentification(ants[0].ID, 0, m.Time.SinceEver(),
                                          m.Time.Forever())

        with self.assertRaises(m.OverlappingIdentification):
            self.experiment.AddIdentification(ants[0].ID, 1,
                                              m.Time.SinceEver(),
                                              m.Time.Forever())

        with self.assertRaises(m.OverlappingIdentification):
            self.experiment.AddIdentification(ants[1].ID, 0,
                                              m.Time.SinceEver(),
                                              m.Time.Forever())

        self.experiment.AddIdentification(ants[1].ID, 1, m.Time.SinceEver(),
                                          m.Time.Forever())

        e2 = m.Experiment("foo.myrmidon")
        a2 = e2.CreateAnt()
        i2 = e2.AddIdentification(a2.ID, 0, m.Time.SinceEver(),
                                  m.Time.Forever())

        with self.assertRaises(ValueError):
            self.experiment.DeleteIdentification(i2)

        ants[0].Identifications[0].End = m.Time()
        with self.assertRaises(RuntimeError):
            self.experiment.FreeIdentificationRangeAt(
                ants[0].Identifications[0].TagValue,
                m.Time().Add(-1))

        low, high = self.experiment.FreeIdentificationRangeAt(
            ants[0].Identifications[0].TagValue, m.Time())
        self.assertTimeEqual(low, m.Time())
        self.assertTimeEqual(high, m.Time.Forever())

        low, high = self.experiment.FreeIdentificationRangeAt(42, m.Time())
        self.assertTimeEqual(low, m.Time.SinceEver())
        self.assertTimeEqual(high, m.Time.Forever())

        identifications = self.experiment.IdentificationsAt(
            time=m.Time().Add(-1), removeUnidentifiedAnt=True)
        self.assertEqual(len(identifications), 2)
        self.assertEqual(identifications[ants[0].ID], 0)
        self.assertEqual(identifications[ants[1].ID], 1)
        identifications = self.experiment.IdentificationsAt(
            time=m.Time(), removeUnidentifiedAnt=True)
        self.assertEqual(len(identifications), 1)
        self.assertEqual(identifications[ants[1].ID], 1)
        self.assertFalse(ants[0].ID in identifications)
        identifications = self.experiment.IdentificationsAt(
            time=m.Time(), removeUnidentifiedAnt=False)
        self.assertEqual(len(identifications), 2)
        self.assertEqual(identifications[ants[0].ID], 2**32 - 1)
        self.assertEqual(identifications[ants[1].ID], 1)
Пример #4
0
    def test_has_math_support(self):
        t = m.Time.Now().Round(m.Duration.Second)

        # we makes a deep copy of the time we use by passing it forth
        # and back to a float
        u = m.Time(t.ToDateTime())

        self.assertEqual(t.Add(1).Sub(t), 1)
        self.assertEqual(
            t.Add(1 * m.Duration.Second).Sub(t), m.Duration.Second)

        # we can use the verbose comparators Equals/After/Before or
        # the overloaded operators
        self.assertFalse(t > t)
        self.assertFalse(t.After(t))
        self.assertFalse(t < t)
        self.assertFalse(t.Before(t))
        self.assertTrue(t.Add(1) > t)
        self.assertTrue(t.Add(1).After(t))
        self.assertFalse(t > t.Add(1))
        self.assertFalse(t.After(t.Add(1)))
        self.assertTrue(t == t)
        self.assertTrue(t.Equals(t))

        # all modification did not modify the original t
        self.assertEqual(t, u)
Пример #5
0
 def test_datetime_conversion(self):
     # create a datetime from UTC, and convert it to localtime
     d = datetime.datetime.fromisoformat(
         "2019-11-02T23:12:13.000014+00:00").astimezone(None)
     t = m.Time(d)
     self.assertEqual(t, m.Time.Parse("2019-11-02T23:12:13.000014Z"))
     self.assertEqual(d, t.ToDateTime().astimezone(None))
Пример #6
0
 def test_infinite_time_computation_overflow(self):
     operations = [
         (lambda: m.Time.Forever().Add(0), False),
         (lambda: m.Time.Forever().Add(1), True),
         (lambda: m.Time.Forever().Add(-1), True),
         (lambda: m.Time.SinceEver().Add(0), False),
         (lambda: m.Time.SinceEver().Add(1), True),
         (lambda: m.Time.SinceEver().Add(-1), True),
         (lambda: m.Time.SinceEver().Sub(m.Time()), True),
         (lambda: m.Time.SinceEver().Sub(m.Time()), True),
     ]
     for op, hasError in operations:
         if hasError:
             with self.assertRaises(RuntimeError):
                 op()
         else:
             op()
Пример #7
0
    def test_infinite_time_comparisons(self):
        data = [
            m.Time(),
            m.Time().Add(2**63 - 1),
            m.Time().Add(-2**63),
        ]
        for t in data:
            self.assertTrue(t < m.Time.Forever())
            self.assertTrue(t > m.Time.SinceEver())

        self.assertFalse(m.Time.Forever() > m.Time.Forever())
        self.assertFalse(m.Time.Forever() < m.Time.Forever())
        self.assertTrue(m.Time.Forever() == m.Time.Forever())

        self.assertFalse(m.Time.SinceEver() > m.Time.SinceEver())
        self.assertFalse(m.Time.SinceEver() < m.Time.SinceEver())
        self.assertTrue(m.Time.SinceEver() == m.Time.SinceEver())
Пример #8
0
    def test_time_parsing(self):

        self.assertEqual(
            m.Time.Parse("1970-01-02T01:02:03.004Z"),
            m.Time().Add(25 * m.Duration.Hour + 2 * m.Duration.Minute +
                         3 * m.Duration.Second + 4 * m.Duration.Millisecond))

        with self.assertRaises(RuntimeError):
            m.Time.Parse("-∞")
        with self.assertRaises(RuntimeError):
            m.Time.Parse("+∞")
Пример #9
0
    def test_zone_definition_manipulation(self):
        zone = self.space.CreateZone("exit")
        definitions = [
            zone.AddDefinition([], start=m.Time()),
            zone.AddDefinition([], end=m.Time()),
        ]
        with self.assertRaises(RuntimeError):
            zone.AddDefinition([],
                               start=m.Time().Add(-1),
                               end=m.Time().Add(1))

        self.assertEqual(len(zone.Definitions), 2)
        self.assertEqual(zone.Definitions[0], definitions[1])
        self.assertEqual(zone.Definitions[1], definitions[0])

        with self.assertRaises(IndexError):
            zone.DeleteDefinition(42)

        zone.DeleteDefinition(0)
        self.assertEqual(zone.Definitions[0], definitions[0])
    def test_time_manipulation(self):
        self.experiment.DeleteIdentification(self.i)
        self.i = None
        idents = [
            self.experiment.AddIdentification(self.ant.ID, 123, end=m.Time()),
            self.experiment.AddIdentification(self.ant.ID, 124,
                                              start=m.Time()),
        ]
        self.assertTimeEqual(idents[0].Start, m.Time.SinceEver())
        self.assertTimeEqual(idents[0].End, m.Time())
        self.assertTimeEqual(idents[1].Start, m.Time())
        self.assertTimeEqual(idents[1].End, m.Time.Forever())

        with self.assertRaises(m.OverlappingIdentification):
            idents[0].End = m.Time().Add(1)

        with self.assertRaises(m.OverlappingIdentification):
            idents[1].Start = m.Time().Add(-1)

        idents[0].End = m.Time().Add(-1)
        idents[1].Start = m.Time().Add(1)

        self.assertTimeEqual(idents[0].End, m.Time().Add(-1))
        self.assertTimeEqual(idents[1].Start, m.Time().Add(1))
Пример #11
0
    def test_zone_definition_have_time_validity(self):
        zone = self.space.CreateZone("food")
        definitions = [
            zone.AddDefinition([], end=m.Time()),
            zone.AddDefinition([], start=m.Time()),
        ]
        with self.assertRaises(ValueError):
            zone.AddDefinition([],
                               start=m.Time.Forever(),
                               end=m.Time.SinceEver())
        
        with self.assertRaises(RuntimeError):
            definitions[0].End = m.Time().Add(1)

        with self.assertRaises(RuntimeError):
            definitions[1].Start = m.Time().Add(-1)

        definitions[0].End = m.Time().Add(-1)
        definitions[1].Start = m.Time().Add(1)
        zone.AddDefinition([],
                           start=m.Time().Add(-1),
                           end=m.Time().Add(1))
Пример #12
0
    def test_meta_data_key_manipulation(self):
        self.experiment.SetMetaDataKey("alive", True)
        self.experiment.SetMetaDataKey("group", "worker")
        self.assertEqual(len(self.experiment.MetaDataKeys), 2)
        self.assertTrue("alive" in self.experiment.MetaDataKeys)
        self.assertTrue("group" in self.experiment.MetaDataKeys)
        self.assertEqual(self.experiment.MetaDataKeys["alive"], True)
        self.assertEqual(self.experiment.MetaDataKeys["group"], "worker")

        a = self.experiment.CreateAnt()
        a.SetValue(key="group", value="nurse", time=m.Time.SinceEver())

        with self.assertRaises(IndexError):
            self.experiment.DeleteMetaDataKey("foo")

        with self.assertRaises(RuntimeError):
            self.experiment.DeleteMetaDataKey("group")

        with self.assertRaises(IndexError):
            self.experiment.RenameMetaDataKey(oldKey="foo", newKey="bar")

        with self.assertRaises(ValueError):
            self.experiment.RenameMetaDataKey(oldKey="alive", newKey="group")

        self.experiment.RenameMetaDataKey(oldKey="alive", newKey="death-date")
        self.experiment.SetMetaDataKey("death-date", m.Time.Forever())
        self.experiment.DeleteMetaDataKey("death-date")
        self.experiment.SetMetaDataKey("group", "forager")

        with self.assertRaises(RuntimeError):
            self.experiment.SetMetaDataKey("group", 42)

        a.SetValue(key="group", value="forager", time=m.Time())
        a.SetValue(key="group", value="worker", time=m.Time().Add(1))
        self.experiment.SetMetaDataKey("group", "worker")
        self.assertEqual(a.GetValue("group", m.Time()), "worker")
        self.assertEqual(a.GetValue("group", m.Time().Add(1)), "worker")

        a.DeleteValue("group", m.Time.SinceEver())
        a.DeleteValue("group", m.Time())
        a.DeleteValue("group", m.Time().Add(1))
        self.experiment.SetMetaDataKey("group", 42)
        self.assertEqual(self.experiment.MetaDataKeys["group"], 42)
Пример #13
0
 def test_time_infinite_rounding_is_noop(self):
     self.assertTrue(m.Time.Forever().Round(0).Equals(m.Time().Forever()))
     self.assertTrue(m.Time.SinceEver().Round(0).Equals(
         m.Time().SinceEver()))
Пример #14
0
 def test_constructor(self):
     self.assertEqual(m.Time(), m.Time(0.0))
     self.assertEqual(m.Time(), 0.0)
Пример #15
0
 def test_time_overflow(self):
     with self.assertRaises(RuntimeError):
         m.Time(2.0**64)
Пример #16
0
 def test_scope_vailidity(self):
     a = self.experiment.CreateAnt()
     self.experiment.SetMetaDataKey("alive", True)
     self.experiment = None
     a.SetValue("alive", False, m.Time())
    def test_scope_validity(self):
        self.experiment = None
        self.ant = None

        self.i.Start = m.Time()
Пример #18
0
 def test_can_identify_ants(self):
     self.assertEqual(self.solver.IdentifyAnt(0, m.Time()), 1)
     self.assertEqual(self.solver.IdentifyAnt(1, m.Time()), 2)
     self.assertEqual(self.solver.IdentifyAnt(2, m.Time()), 3)
     self.assertEqual(self.solver.IdentifyAnt(123, m.Time()), 0)