コード例 #1
0
ファイル: postprocess_latent.py プロジェクト: Acreom/quickadd
def _latent_time_interval(ts: datetime, ti: Interval) -> Interval:
    assert ti.t_from and ti.t_to  # guaranteed by the caller
    dm_from = ts + relativedelta(hour=ti.t_from.hour,
                                 minute=ti.t_from.minute or 0)
    dm_to = ts + relativedelta(hour=ti.t_to.hour, minute=ti.t_to.minute or 0)
    if dm_from <= ts:
        dm_from += relativedelta(days=1)
        dm_to += relativedelta(days=1)
    return Interval(
        t_from=Time(
            year=dm_from.year,
            month=dm_from.month,
            day=dm_from.day,
            hour=dm_from.hour,
            minute=dm_from.minute,
            period=ti.t_from.period,
        ),
        t_to=Time(
            year=dm_to.year,
            month=dm_to.month,
            day=dm_to.day,
            hour=dm_to.hour,
            minute=dm_to.minute,
            period=ti.t_to.period,
        ),
    )
コード例 #2
0
ファイル: test_time_rules.py プロジェクト: Acreom/quickadd
    def test_ruleDOYDate(self):
        t1 = Time(month=4, day=12)
        t2 = Time(year=2017, month=4, day=12)
        self.assertIsNone(ruleDOYDate(None, t1, None, t2))

        t1 = Time(month=4, day=12)
        t2 = Time(year=2017, month=4, day=13)
        self.assertIsNotNone(ruleDOYDate(None, t1, None, t2))
コード例 #3
0
ファイル: test_ctparse.py プロジェクト: Acreom/quickadd
def test_latent_time():
    parse = ctparse("8:00 pm",
                    ts=datetime(2020, 1, 1, 7, 0),
                    latent_time=False)
    assert parse
    assert parse.resolution == Time(None, None, None, 20, 00)

    parse = ctparse("8:00 pm", ts=datetime(2020, 1, 1, 7, 0), latent_time=True)
    assert parse
    assert parse.resolution == Time(2020, 1, 1, 20, 00)
コード例 #4
0
 def test_ctparse(self):
     txt = '12.12.2020'
     res = ctparse(txt)
     self.assertEqual(res.resolution, Time(year=2020, month=12, day=12))
     txt = '12.12.'
     res = ctparse(txt, ts=datetime(2020, 12, 1))
     self.assertEqual(res.resolution, Time(year=2020, month=12, day=12))
     res = ctparse(txt, ts=datetime(2020, 12, 1), debug=True)
     self.assertEqual(
         next(res).resolution, Time(year=2020, month=12, day=12))
コード例 #5
0
 def test_start(self):
     t = Time()
     self.assertEqual(t.start, Time(hour=0, minute=0))
     t = Time(year=2012, month=1, day=1)
     self.assertEqual(t.start, Time(2012, 1, 1, 0, 0))
     t = Time(year=2012, month=1, day=1, hour=12)
     self.assertEqual(t.start, Time(2012, 1, 1, 12, 0))
     t = Time(year=2012, month=1, day=1, hour=12, minute=20)
     self.assertEqual(t.start, Time(2012, 1, 1, 12, 20))
     t = Time(year=2012, month=1, day=1, POD='last')
     self.assertEqual(t.start, Time(2012, 1, 1, 23, 00))
コード例 #6
0
 def test_end(self):
     t = Time()
     self.assertEqual(t.end, Time(hour=23, minute=59))
     t = Time(year=2012, month=1, day=1)
     self.assertEqual(t.end, Time(2012, 1, 1, 23, 59))
     t = Time(year=2012, month=1, day=1, hour=12)
     self.assertEqual(t.end, Time(2012, 1, 1, 12, 59))
     t = Time(year=2012, month=1, day=1, hour=12, minute=20)
     self.assertEqual(t.end, Time(2012, 1, 1, 12, 20))
     t = Time(year=2012, month=1, day=1, POD='last')
     self.assertEqual(t.end, Time(2012, 1, 1, 23, 59))
コード例 #7
0
    def test_dt(self):
        t = Time(2015, 12, 12, 12, 12)
        self.assertEqual(t.dt, datetime(2015, 12, 12, 12, 12))
        t = Time(2015, 12, 12, 12)
        self.assertEqual(t.dt, datetime(2015, 12, 12, 12))
        t = Time(2015, 12, 12)
        self.assertEqual(t.dt, datetime(2015, 12, 12))

        with self.assertRaises(ValueError):
            t = Time(year=2012, month=12, hour=12, minute=12)
            t.dt
コード例 #8
0
 def test_ctparse(self):
     txt = '12.12.2020'
     res = ctparse(txt)
     self.assertEqual(res.resolution, Time(year=2020, month=12, day=12))
     self.assertIsNotNone(str(res))
     self.assertIsNotNone(repr(res))
     # non sense gives no result
     self.assertIsNone(ctparse('gargelbabel'))
     txt = '12.12.'
     res = ctparse(txt, ts=datetime(2020, 12, 1))
     self.assertEqual(res.resolution, Time(year=2020, month=12, day=12))
     res = ctparse(txt, ts=datetime(2020, 12, 1), debug=True)
     self.assertEqual(next(res).resolution, Time(year=2020, month=12, day=12))
コード例 #9
0
    def test_from_str(self):
        # Complete time
        t = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD='pod')
        t_str = str(t)
        t_back = Time.from_str(t_str)
        self.assertEqual(t, t_back)

        # Incomplete time
        t = Time(year=None,
                 month=1,
                 day=1,
                 hour=None,
                 minute=None,
                 DOW=None,
                 POD='pod')
        t_str = str(t)
        t_back = Time.from_str(t_str)
        self.assertEqual(t, t_back)

        # Zeroed time
        t = Time()
        t_str = str(t)
        t_back = Time.from_str(t_str)
        self.assertEqual(t, t_back)

        # Mistake
        with self.assertRaises(ValueError):
            Time.from_str('0001-01-01 01-01 (1/pod)')
コード例 #10
0
ファイル: test_ctparse.py プロジェクト: Acreom/quickadd
def test_latent_time_interval():
    parse = ctparse("8:00 pm - 9:00 pm",
                    ts=datetime(2020, 1, 1, 7, 0),
                    latent_time=False)
    assert parse
    assert parse.resolution == Interval(Time(None, None, None, 20, 00),
                                        Time(None, None, None, 21, 00))

    parse = ctparse("8:00 pm - 9:00 pm",
                    ts=datetime(2020, 1, 1, 7, 0),
                    latent_time=True)
    assert parse
    assert parse.resolution == Interval(Time(2020, 1, 1, 20, 00),
                                        Time(2020, 1, 1, 21, 00))
コード例 #11
0
def test_dummy():
    scorer = DummyScorer()
    pp = PartialParse((Time(), Interval()), ("rule1", "rule2"))

    assert scorer.score("a", datetime.datetime(2019, 1, 1), pp) == 0.0
    assert scorer.score_final("a", datetime.datetime(2019, 1, 1), pp,
                              pp.prod[0]) == 0.0
コード例 #12
0
    def test_eq(self):
        a = Artifact()
        b = Artifact()
        self.assertEqual(a, b)

        a = Time(2017, 12, 12, 12, 12, 4, 'morning')
        b = Time(2017, 12, 12, 12, 12, 4, 'morning')
        self.assertEqual(a, b)

        a = Time(2017, 12, 12, 12, 12, 4, 'morning')
        b = Time(2017, 12, 12, 12, 12, 3, 'morning')
        self.assertNotEqual(a, b)

        a = Time()
        b = Interval()
        self.assertNotEqual(a, b)
コード例 #13
0
def test_random():
    rng = random.Random(42)
    scorer = RandomScorer(rng)

    pp = PartialParse((Time(), Interval()), ("rule1", "rule2"))

    assert 0.0 <= scorer.score("a", datetime.datetime(2019, 1, 1), pp) <= 1.0
    assert (0.0 <= scorer.score_final("a", datetime.datetime(2019, 1, 1), pp,
                                      pp.prod[1]) <= 1.0)
コード例 #14
0
def _latent_tod(ts: datetime, tod: Time) -> Time:
    dm = ts + relativedelta(hour=tod.hour, minute=tod.minute or 0)
    if dm <= ts:
        dm += relativedelta(days=1)
    return Time(year=dm.year,
                month=dm.month,
                day=dm.day,
                hour=dm.hour,
                minute=dm.minute)
コード例 #15
0
ファイル: test_ctparse.py プロジェクト: Acreom/quickadd
def test_ctparse():
    txt = "12.12.2020"
    res = ctparse(txt)
    assert res
    assert res.resolution == Time(year=2020, month=12, day=12)
    assert str(res)
    assert repr(res)

    # non sense gives no result
    assert ctparse("gargelbabel") is None
    txt = "12.12."
    res = ctparse(txt, ts=datetime(2020, 12, 1))
    assert res
    assert res.resolution == Time(year=2020, month=12, day=12)

    gres = ctparse_gen(txt, ts=datetime(2020, 12, 1))
    first_res = next(gres)
    assert first_res
    assert first_res.resolution == Time(year=2020, month=12, day=12)
コード例 #16
0
def test_make_partial_rule_dataset() -> None:
    ts = datetime(year=2019, month=10, day=1)
    entries = [
        TimeParseEntry("today at 5 pm", ts, Time(year=2019, month=10, day=1, hour=17, minute=0))
    ]

    X, y = zip(*make_partial_rule_dataset(entries, timeout=0,
                                          max_stack_depth=0, scorer=DummyScorer()))
    assert isinstance(y[0], bool)
    assert isinstance(X[0][0], str)
コード例 #17
0
ファイル: test_time_rules.py プロジェクト: Acreom/quickadd
    def test_ruleDateDate(self):
        t1 = Time(year=2017)
        t2 = Time(year=2015)
        self.assertIsNone(ruleDateDate(None, t1, None, t2))

        t1 = Time(year=2017, month=12)
        t2 = Time(year=2017, month=11)
        self.assertIsNone(ruleDateDate(None, t1, None, t2))

        t1 = Time(year=2017, month=12, day=31)
        t2 = Time(year=2017, month=12, day=30)
        self.assertIsNone(ruleDateDate(None, t1, None, t2))

        t1 = Time(year=2017, month=12, day=31)
        t2 = Time(year=2017, month=12, day=31)
        self.assertIsNone(ruleDateDate(None, t1, None, t2))

        t1 = Time(year=2017, month=12, day=30)
        t2 = Time(year=2017, month=12, day=31)
        self.assertIsNotNone(ruleDateDate(None, t1, None, t2))
コード例 #18
0
    def test_from_str(self):
        # Complete interval
        t1 = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD='pod')
        t2 = Time(year=2, month=1, day=1, hour=1, minute=1, DOW=1, POD='pod')
        interval = Interval(t1, t2)
        i_back = Interval.from_str(str(interval))
        self.assertEqual(interval, i_back)

        # Incomplete interval
        interval = Interval(None, t2)
        i_back = Interval.from_str(str(interval))
        self.assertEqual(interval, i_back)

        # Zeroed interval
        interval = Interval()
        i_back = Interval.from_str(str(interval))
        self.assertEqual(interval, i_back)

        # Mistake
        with self.assertRaises(ValueError):
            Interval.from_str('X-X-X X: X(X/X) -X-X-X X: X(X/X)')
コード例 #19
0
    def test_start(self):
        i = Interval(Time(2013, 1, 1), Time(2013, 1, 2))
        self.assertEqual(i.start, Time(2013, 1, 1, 0, 0))

        i = Interval(Time(2013, 1, 1), None)
        self.assertEqual(i.start, Time(2013, 1, 1, 0, 0))

        i = Interval(None, Time(2013, 1, 2))
        self.assertIsNone(i.start)
コード例 #20
0
    def test_end(self):
        i = Interval(Time(2013, 1, 1), Time(2013, 1, 2))
        self.assertEqual(i.end, Time(2013, 1, 2, 23, 59))

        i = Interval(None, Time(2013, 1, 2))
        self.assertEqual(i.end, Time(2013, 1, 2, 23, 59))

        i = Interval(Time(2013, 1, 1), None)
        self.assertIsNone(i.end)
コード例 #21
0
ファイル: test_time_rules.py プロジェクト: Acreom/quickadd
    def test_ruleDOMDate(self):
        t1 = Time(day=30)
        t2 = Time(year=2015, month=1, day=29)
        self.assertIsNone(ruleDOMDate(None, t1, None, t2))

        t1 = Time(day=30)
        t2 = Time(year=2015, month=1, day=30)
        self.assertIsNone(ruleDOMDate(None, t1, None, t2))

        t1 = Time(day=29)
        t2 = Time(year=2015, month=1, day=30)
        self.assertIsNotNone(ruleDOMDate(None, t1, None, t2))
コード例 #22
0
def test_nbscorer():
    # We only test that it runs just fine
    X = [("a", "b"), ("a", ), ("b"), ("a", "b", "a", "b")]
    y = [False, True, True, False]

    model = train_naive_bayes(X, y)
    scorer = NaiveBayesScorer(model)

    pp = PartialParse((Time(), Interval()), ("rule1", "rule2"))

    pp.prod[0].mstart = 0
    pp.prod[1].mend = 1

    pp.prod[0].mend = 1
    pp.prod[1].mend = 2

    assert 0.0 <= scorer.score("ab", datetime.datetime(2019, 1, 1), pp) <= 1.0
    assert (0.0 <= scorer.score_final("ab", datetime.datetime(2019, 1, 1), pp,
                                      pp.prod[1]) <= 1.0)
コード例 #23
0
def test_parse_nb_string() -> None:
    t = Time(year=1, month=1, day=1, hour=1, minute=1, DOW=1, POD="pod")

    assert t == parse_nb_string("Time[]{0001-01-01 01:01 (1/pod)}")
    assert Interval(Time(), Time()) == parse_nb_string(
        "Interval[]{X-X-X X:X (X/X) - X-X-X X:X (X/X)}")
コード例 #24
0
 def test_isTOD(self):
     self.assertTrue(Time(hour=1, minute=1).isTOD)
     self.assertTrue(Time(hour=1).isTOD)
     self.assertFalse(Time(minute=1).isTOD)
     self.assertFalse(Time().isTOD)
コード例 #25
0
 def test_isPOD(self):
     self.assertTrue(Time(POD='morning').isPOD)
     self.assertFalse(Time(day=1).isPOD)
     self.assertFalse(Time(year=1).isPOD)
コード例 #26
0
 def test_isMonth(self):
     self.assertTrue(Time(month=1).isMonth)
     self.assertFalse(Time(day=1).isMonth)
     self.assertFalse(Time(year=1).isMonth)
コード例 #27
0
 def test_isDOW(self):
     self.assertTrue(Time(DOW=1).isDOW)
     self.assertFalse(Time().isDOW)
コード例 #28
0
 def test_isHour(self):
     self.assertTrue(Time(hour=1).isHour)
     self.assertFalse(Time(hour=1, minute=1).isHour)
     self.assertFalse(Time(hour=1, month=1).isHour)
コード例 #29
0
 def test_isDOM(self):
     self.assertTrue(Time(day=1).isDOM)
     self.assertFalse(Time(month=1).isDOM)
コード例 #30
0
 def test_isDOY(self):
     self.assertTrue(Time(month=1, day=1).isDOY)
     self.assertFalse(Time(year=1).isDOY)