def resolve_duration(candidate: Timex, constraints: [Timex]): results = [] for constraint in constraints: if Constants.TIMEX_TYPES_DATETIME in constraint.types: results.append( TimexHelpers.timex_datetime_add(constraint, candidate)) elif Constants.TIMEX_TYPES_TIME in constraint.types: results.append( TimexHelpers.timex_time_add(constraint, candidate)) return results
def resolve_date_timerange(timex: Timex): if timex.part_of_day is not None: date = TimexValue.date_value(timex) time_range = TimexResolver.part_of_day_timerange(timex) entry = Entry() entry.timex = timex.timex_value() entry.type = 'datetimerange' entry.start = f'{date} {time_range[0]}' entry.end = f'{date} {time_range[1]}' entry.value = None return [entry] else: time_range = TimexHelpers.expand_datetime_range(timex) entry = Entry() entry.timex = timex.timex_value() entry.type = 'datetimerange' entry.start = f'{TimexValue.date_value(time_range.start)} {TimexValue.time_value(time_range.start)}' entry.end = f'{TimexValue.date_value(time_range.end)} {TimexValue.time_value(time_range.end)}' entry.value = None return [entry]
def resolve_time_range(timex: Timex): if timex.part_of_day is not None: range = TimexResolver.part_of_day_timerange(timex) entry = Entry() entry.timex = timex.timex_value() entry.type = 'timerange' entry.start = range[0] entry.end = range[1] entry.value = None return [entry] else: range = TimexHelpers.expand_time_range(timex) entry = Entry() entry.timex = timex.timex_value() entry.type = 'timerange' entry.start = TimexValue.time_value(range.start) entry.end = TimexValue.time_value(range.end) entry.value = None return [entry]
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)
def resolve_definite_daterange(timex: Timex): date_range = TimexHelpers.expand_datetime_range(timex) entry = Entry() entry.timex = timex.timex_value() entry.type = 'daterange' entry.start = TimexValue.date_value(date_range.start) entry.end = TimexValue.date_value(date_range.end) return [entry]
def resolve_by_date_range_constraints(candidates: [str], timex_constraints: [Timex]): date_range_constraints = list( map( lambda t: TimexHelpers.daterange_from_timex(t), filter(lambda t: Constants.TIMEX_TYPES_DATERANGE in t.types, timex_constraints))) collapsed_date_ranges = TimexConstraintsHelper.collapse( TimexConstraintsHelper(), date_range_constraints) if not any(collapsed_date_ranges): return candidates resolution = [] for timex in candidates: resolve_date = TimexRangeResolver.resolve_date( Timex(timex), collapsed_date_ranges) resolution.extend(resolve_date) return TimexRangeResolver.remove_duplicates(resolution)
def resolve_by_time_constraints(candidates, timex_constraints): times = list((map( lambda ti: TimexHelpers.time_from_timex(ti), filter(lambda t: Constants.TIMEX_TYPES_TIME in t.types, timex_constraints)))) if not any(times): return candidates resolutions = [] for timex in list(map(lambda t: Timex(t), candidates)): if Constants.TIMEX_TYPES_DATE in timex.types and not ( Constants.TIMEX_TYPES_TIME in timex.types): for time in times: timex.hour = time.hour timex.minute = time.minute timex.second = time.second resolutions.append(timex.timex_value()) else: resolutions.append(timex.timex_value()) return TimexRangeResolver.remove_duplicates(resolutions)
def resolve_timerage(timex: Timex, constraints: [TimeRange]): candidate = TimexHelpers.timerange_from_timex(timex) result = [] for contraint in constraints: if candidate.is_overlapping(contraint): start = max(candidate.start.get_time(), contraint.start.get_time()) time = Time.from_seconds(start) resolved = copy.copy(timex) resolved.part_of_day = None resolved.seconds = None resolved.minutes = None resolved.hours = None resolved.second = time.second resolved.minute = time.minute resolved.hour = time.hour result.append(resolved.timex_value()) return result
def test_datatypes_helpers_expanddatetimerange_short(): timex = Timex(timex='(2017-09-27,2017-09-29,P2D)') range = TimexHelpers.expand_datetime_range(timex) assert range.start.timex_value() == '2017-09-27' assert range.end.timex_value() == '2017-09-29'
def test_datatypes_helpers_daterangefromtimex(): timex = Timex(timex='(2017-09-27,2017-09-29,P2D)') range = TimexHelpers.daterange_from_timex(timex) assert range.start == datetime(2017, 9, 27).date() assert range.end == datetime(2017, 9, 29).date()
def test_datatypes_helpers_expandtimerange(): timex = Timex(timex='(T14,T16,PT2H)') range = TimexHelpers.expand_datetime_range(timex) assert range.start.timex_value() == 'T14' assert range.end.timex_value() == 'T16'
def test_datatypes_helpers_expanddatetimerange_year(): timex = Timex(timex='1999') range = TimexHelpers.expand_datetime_range(timex) assert range.start.timex_value() == '1999-01-01' assert range.end.timex_value() == '2000-01-01'
def test_datatypes_helpers_expanddatetimerange_month(): timex = Timex(timex='2017-05') range = TimexHelpers.expand_datetime_range(timex) assert range.start.timex_value() == '2017-05-01' assert range.end.timex_value() == '2017-06-01'
def test_datatypes_gelpers_expanddatetimerange_include_time(): timex = Timex(timex='(2017-10-10T16:02:04,2017-10-10T16:07:04,PT5M)') range = TimexHelpers.expand_datetime_range(timex) assert range.start.timex_value() == '2017-10-10T16:02:04' assert range.end.timex_value() == '2017-10-10T16:07:04'
def resolve_definite_against_constraint(timex, constraint): timex_date = TimexHelpers.date_from_timex(timex) if constraint.start <= timex_date < constraint.end: return [timex.timex_value()] return ['']
def test__datatypes_helpers_datefromtimex(): timex = Timex(timex='2017-09-27') date = TimexHelpers.date_from_timex(timex) assert date == datetime(2017, 9, 27).date()
def test_datatypes_helpers_timefromtimex(): timex = Timex(timex='T00:05:00') time = TimexHelpers.time_from_timex(timex) assert time.get_time() == Time(0, 5, 0).get_time()
def test_datatypes_helpers_expanddatetimerange_long(): timex = Timex(timex='(2006-01-01,2008-06-01,P882D)') range = TimexHelpers.expand_datetime_range(timex) assert range.start.timex_value() == '2006-01-01' assert range.end.timex_value() == '2008-06-01'