Esempio n. 1
0
def test_timex_convert_hour_and_minute():
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="T17:30")) == "5:30PM"
    assert TimexConvert.convert_timex_to_string(Timex(timex="T17:00")) == "5PM"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="T01:30")) == "1:30AM"
    assert TimexConvert.convert_timex_to_string(Timex(timex="T01:00")) == "1AM"
Esempio n. 2
0
def test_timex_convert_month():
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-01")) == "January"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-05")) == "May"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-12")) == "December"
Esempio n. 3
0
def test_timex_convert_full_datetime():
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="1984-01-03T18:30:45")) == "6:30:45PM 3rd January 1984"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="2000-01-01T00")) == "midnight 1st January 2000"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="1967-05-29T19:30:00")) == "7:30PM 29th May 1967"
Esempio n. 4
0
    def expand_datetime_range(timex):
        from datatypes_timex_expression import Timex

        types = timex.types if len(
            timex.types) != 0 else TimexInference.infer(timex)

        if Constants.TIMEX_TYPES_DURATION in types:
            start = TimexHelpers.clone_datetime(timex)
            duration = TimexHelpers.clone_duration(timex)
            return TimexRange(start,
                              TimexHelpers.timex_datetime_add(start, duration),
                              duration)

        else:
            if timex.year is not None:
                start = Timex()
                start.year = timex.year
                result = TimexRange(start, Timex())
                if timex.month is not None:
                    result.start.month = timex.month
                    result.start.day_of_month = 1
                    result.end.year = timex.year
                    result.end.month = timex.month + 1
                    result.end.day_of_month = 1
                else:
                    result.start.month = 1
                    result.start.day_of_month = 1
                    result.end.year = timex.year + 1
                    result.end.month = 1
                    result.end.day_of_month = 1
                return result

        return TimexRange(Timex(), Timex())
def test_DataTypes_RangeResolve_combined_daterange_and_timerange_next_week_and_business_hours(
):
    candidates = ['XXXX-WXX-3T04', 'XXXX-WXX-3T16']
    constraints = [
        Timex(year=2017, month=10, day_of_month=5, days=7).timex_value(),
        Timex(hour=12, minute=0, second=0, hours=8).timex_value()
    ]
    eval_constraints_and_candidates(candidates, constraints, ['2017-10-11T16'])
Esempio n. 6
0
def test_timex_convert_time():
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="T17:30:05")) == "5:30:05PM"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="T02:30:30")) == "2:30:30AM"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="T00:30:30")) == "12:30:30AM"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="T12:30:30")) == "12:30:30PM"
Esempio n. 7
0
def test_timex_convert_month_and_day_of_month_with_correct_abbreviation():
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-06-01")) == "1st June"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-06-02")) == "2nd June"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-06-03")) == "3rd June"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="XXXX-06-04")) == "4th June"
def test_datatypes_format_datetime():
    assert Timex(hour=4, minute=0, second=0,
                 day_of_week=3).timex_value() == 'XXXX-WXX-3T04'
    assert Timex(year=2017,
                 month=9,
                 day_of_month=27,
                 hour=11,
                 minute=41,
                 second=30).timex_value() == '2017-09-27T11:41:30'
Esempio n. 9
0
def test_timex_convert_part_of_the_day():
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="TDT")) == "daytime"
    assert TimexConvert.convert_timex_to_string(Timex(timex="TNI")) == "night"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="TMO")) == "morning"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="TAF")) == "afternoon"
    assert TimexConvert.convert_timex_to_string(
        Timex(timex="TEV")) == "evening"
Esempio n. 10
0
    def examples():
        LanguageGeneration.__describe(Timex("2019-05-29"))
        LanguageGeneration.__describe(Timex("XXXX-WXX-6"))
        LanguageGeneration.__describe(Timex("XXXX-WXX-6T16"))
        LanguageGeneration.__describe(Timex("T12"))

        LanguageGeneration.__describe(Timex.from_date(datetime.datetime.now()))
        LanguageGeneration.__describe(
            Timex.from_date(datetime.datetime.now() +
                            datetime.timedelta(days=1)))
def test_DataTypes_RangeResolve_multiple_times_with_overlapping_range():
    candidates = ["T19", "T19:30"]
    constraints = [Timex(hour=16, minute=0, second=0, hours=4).timex_value()]
    eval_constraints_and_candidates(candidates, constraints, ["T19", "T19:30"])

    constraints.append(Timex(hour=14, minute=0, second=0, hours=4).timex_value())

    eval_constraints_and_candidates(candidates, constraints, [])

    candidates = ["T17", "T17:30", "T19"]
    eval_constraints_and_candidates(candidates, constraints, ["T17", "T17:30"])
def test_DataTypes_RangeResolve_timerange_time_with_overlapping_ranges():
    candidates = ['T19']
    constraints = [Timex(hour=16, minute=0, second=0, hours=4).timex_value()]
    eval_constraints_and_candidates(candidates, constraints, ['T19'])

    constraints.append(Timex(hour=14, minute=0, second=0, hours=4).timex_value())

    eval_constraints_and_candidates(candidates, constraints, [])

    candidates = ['T17']
    eval_constraints_and_candidates(candidates, constraints, ['T17'])
Esempio n. 13
0
    def week_date_range(year: int, week_of_year: int):
        date_in_week = datetime(year, 1, 1) + \
            timedelta(days=(week_of_year-1)*7)
        start = TimexDateHelpers.date_of_last_day(Constants.DAYS['MONDAY'],
                                                  date_in_week)
        end = TimexDateHelpers.date_of_last_day(
            Constants.DAYS['MONDAY'], date_in_week + timedelta(days=7))

        return TimexValue.date_value(
            Timex(year=start.year, month=start.month,
                  day_of_month=start.day)), TimexValue.date_value(
                      Timex(year=start.year,
                            month=start.month,
                            day_of_month=end.day))
Esempio n. 14
0
    def evaluate(candidates: [str], constraints: [str]):
        timex_constraints = list(map(lambda tc: Timex(tc), constraints))
        candidates_with_duration_resolved = TimexRangeResolver.resolve_durations(
            candidates, timex_constraints)
        candidates_according_to_date = TimexRangeResolver.resolve_by_date_range_constraints(
            candidates_with_duration_resolved, timex_constraints)
        candidates_with_added_time = TimexRangeResolver.resolve_by_time_constraints(
            candidates_according_to_date, timex_constraints)
        candidates_filtered_by_time = TimexRangeResolver.resolve_by_timerange_constraints(
            candidates_with_added_time, timex_constraints)

        timex_results = list(
            map(lambda tc: Timex(tc), candidates_filtered_by_time))

        return timex_results
Esempio n. 15
0
def test_datatypes_parsing_full_datetime():
    timex = Timex(timex='1984-01-03T18:30:45')
    assert timex.types == {
        Constants.TIMEX_TYPES_DEFINITE, Constants.TIMEX_TYPES_DATE,
        Constants.TIMEX_TYPES_TIME, Constants.TIMEX_TYPES_DATETIME
    }
    assert timex.year == 1984
    assert timex.month == 1
    assert timex.day_of_month == 3
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour == 18
    assert timex.minute == 30
    assert timex.second == 45
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 16
0
    def resolve_by_timerange_constraints(candidates, timex_constraints):
        timerange_contraints = list(
            map(
                lambda ti: TimexHelpers.timerange_from_timex(ti),
                filter(lambda t: Constants.TIMEX_TYPES_TIMERANGE in t.types,
                       timex_constraints)))
        collapsed_time_ranges = TimexConstraintsHelper.collapse(
            TimexConstraintsHelper(), timerange_contraints)

        if not any(collapsed_time_ranges):
            return candidates

        resolution = []

        for timex in candidates:
            t = Timex(timex)

            if Constants.TIMEX_TYPES_TIMERANGE in t.types:
                r = TimexRangeResolver.resolve_timerage(
                    t, collapsed_time_ranges)
                resolution.extend(r)
            elif Constants.TIMEX_TYPES_TIME in t.types:
                r = TimexRangeResolver.resolve_time(t, collapsed_time_ranges)
                resolution.extend(r)

        return TimexRangeResolver.remove_duplicates(resolution)
Esempio n. 17
0
def test_datatypes_parsing_wed_4PM_to_sat_3PM():
    timex = Timex(timex='(XXXX-WXX-3T16,XXXX-WXX-6T15,PT71H)')
    assert timex.types == {
        Constants.TIMEX_TYPES_DATE, Constants.TIMEX_TYPES_TIMERANGE,
        Constants.TIMEX_TYPES_DATETIMERANGE, Constants.TIMEX_TYPES_TIME,
        Constants.TIMEX_TYPES_DATETIME, Constants.TIMEX_TYPES_DURATION,
        Constants.TIMEX_TYPES_DATERANGE
    }
    assert timex.year is None
    assert timex.month is None
    assert timex.day_of_month is None
    assert timex.day_of_week == 3
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour == 16
    assert timex.minute == 0
    assert timex.second == 0
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours == 71
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 18
0
def test_datatypes_parsing_last_5_minutes():
    timex = Timex(timex='(2017-09-08T21:19:29,2017-09-08T21:24:29,PT5M)')
    assert timex.types == {
        Constants.TIMEX_TYPES_DATE, Constants.TIMEX_TYPES_TIMERANGE,
        Constants.TIMEX_TYPES_DATETIMERANGE, Constants.TIMEX_TYPES_TIME,
        Constants.TIMEX_TYPES_DATETIME, Constants.TIMEX_TYPES_DURATION,
        Constants.TIMEX_TYPES_DATERANGE, Constants.TIMEX_TYPES_DEFINITE
    }
    assert timex.year == 2017
    assert timex.month == 9
    assert timex.day_of_month == 8
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour == 21
    assert timex.minute == 19
    assert timex.second == 29
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes == 5
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 19
0
def test_datatypes_parsing_lastnight():
    timex = Timex(timex='2017-09-07TNI')
    assert timex.types == {
        Constants.TIMEX_TYPES_DEFINITE, Constants.TIMEX_TYPES_DATE,
        Constants.TIMEX_TYPES_TIMERANGE, Constants.TIMEX_TYPES_DATETIMERANGE
    }
    assert timex.year == 2017
    assert timex.month == 9
    assert timex.day_of_month == 7
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour is None
    assert timex.minute is None
    assert timex.second is None
    assert timex.weekend is False
    assert timex.part_of_day == 'NI'
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 20
0
def test_datatypes_parsing_datetimerange():
    timex = Timex(timex='XXXX-WXX-5TEV')
    assert timex.types == {
        Constants.TIMEX_TYPES_DATE, Constants.TIMEX_TYPES_TIMERANGE,
        Constants.TIMEX_TYPES_DATETIMERANGE
    }
    assert timex.year is None
    assert timex.month is None
    assert timex.day_of_month is None
    assert timex.day_of_week == 5
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour is None
    assert timex.minute is None
    assert timex.second is None
    assert timex.weekend is False
    assert timex.part_of_day == 'EV'
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 21
0
def test_datatypes_parsing_timerange_430pm_to_445pm():
    timex = Timex(timex='(T16:30,T16:45,PT15M)')
    assert timex.types == {
        Constants.TIMEX_TYPES_TIME, Constants.TIMEX_TYPES_DURATION,
        Constants.TIMEX_TYPES_TIMERANGE
    }
    assert timex.year is None
    assert timex.month is None
    assert timex.day_of_month is None
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour == 16
    assert timex.minute == 30
    assert timex.second == 0
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes == 15
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 22
0
def test_datatypes_parsing_jan_1_to_aug_5_year_2015():
    timex = Timex(timex='(2015-01-01,2015-08-05,P216D)')
    assert timex.types == {
        Constants.TIMEX_TYPES_DEFINITE, Constants.TIMEX_TYPES_DATE,
        Constants.TIMEX_TYPES_DURATION, Constants.TIMEX_TYPES_DATERANGE
    }
    assert timex.year == 2015
    assert timex.month == 1
    assert timex.day_of_month == 1
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour is None
    assert timex.minute is None
    assert timex.second is None
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days == 216
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 23
0
def test_datatypes_parsing_wednesday_to_saturday():
    timex = Timex(timex='(XXXX-WXX-3,XXXX-WXX-6,P3D)')
    assert timex.types == {
        Constants.TIMEX_TYPES_DATE, Constants.TIMEX_TYPES_DURATION,
        Constants.TIMEX_TYPES_DATERANGE
    }
    assert timex.year is None
    assert timex.month is None
    assert timex.day_of_month is None
    assert timex.day_of_week == 3
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour is None
    assert timex.minute is None
    assert timex.second is None
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days == 3
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
def test_DataTypes_RangeResolve_carry_through_time_month_and_date():
    candidates = ['XXXX-05-29T19:30']
    constraints = [
        Timex(year=2006, month=1, day_of_month=1, years=2).timex_value()
    ]
    eval_constraints_and_candidates(candidates, constraints,
                                    ['2006-05-29T19:30', '2007-05-29T19:30'])
Esempio n. 25
0
def test_datatypes_parsing_paricular_time_on_particular_day_of_week():
    timex = Timex(timex='XXXX-WXX-3T16')
    assert timex.types == {
        Constants.TIMEX_TYPES_TIME, Constants.TIMEX_TYPES_DATE,
        Constants.TIMEX_TYPES_DATETIME
    }
    assert timex.year is None
    assert timex.month is None
    assert timex.day_of_month is None
    assert timex.day_of_week == 3
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour == 16
    assert timex.minute == 0
    assert timex.second == 0
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
Esempio n. 26
0
def test_datatypes_parsing_now():
    timex = Timex(timex='PRESENT_REF')
    assert timex.types == {
        Constants.TIMEX_TYPES_PRESENT, Constants.TIMEX_TYPES_DATE,
        Constants.TIMEX_TYPES_TIME, Constants.TIMEX_TYPES_DATETIME
    }
    assert timex.year is None
    assert timex.month is None
    assert timex.day_of_month is None
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour is None
    assert timex.minute is None
    assert timex.second is None
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is True
def test_datatypes_rangeresolve_daterange_month_and_date():
    candidates = ["XXXX-05-29"]
    constraints = [
        Timex(year=2006, month=1, day_of_month=1, years=2).timex_value()
    ]
    eval_constraints_and_candidates(candidates, constraints,
                                    ['2006-05-29', '2007-05-29'])
Esempio n. 28
0
def test_timex_parsing_complete_date():
    timex = Timex(timex='2017-05-29')
    assert timex.types == {
        Constants.TIMEX_TYPES_DEFINITE, Constants.TIMEX_TYPES_DATE
    }
    assert timex.year == 2017
    assert timex.month == 5
    assert timex.day_of_month == 29
    assert timex.day_of_week is None
    assert timex.week_of_year is None
    assert timex.week_of_month is None
    assert timex.season is None
    assert timex.hour is None
    assert timex.minute is None
    assert timex.second is None
    assert timex.weekend is False
    assert timex.part_of_day is None
    assert timex.years is None
    assert timex.months is None
    assert timex.weeks is None
    assert timex.days is None
    assert timex.hours is None
    assert timex.minutes is None
    assert timex.seconds is None
    assert timex.now is False
def test_DataTypes_RangeResolve_carry_through_time_definite():
    candidates = ['2017-09-28T18:30:01']
    constraints = [
        Timex(year=2017, month=9, day_of_month=27, days=2).timex_value()
    ]
    eval_constraints_and_candidates(candidates, constraints,
                                    ['2017-09-28T18:30:01'])
Esempio n. 30
0
    def resolve(timex_array: [str], date: datetime = None):
        resolution = Resolution()
        for timex in timex_array:
            t = Timex(timex)
            r = TimexResolver.resolve_timex(t, date)
            resolution.values.extend(r)

        return resolution