Coverage for jstark/feature_period.py: 100%
29 statements
« prev ^ index » next coverage.py v7.4.3, created at 2024-02-25 20:09 +0000
« prev ^ index » next coverage.py v7.4.3, created at 2024-02-25 20:09 +0000
1"""
2Encapsulate the period of a feature, defined by a unit of time
3measure, a start and an end
4"""
5from jstark.period_unit_of_measure import PeriodUnitOfMeasure
6from .exceptions import FeaturePeriodEndGreaterThanStartError
9class FeaturePeriod:
10 """
11 Encapsulate the period of a feature, defined by a unit of time
12 measure, a start and an end
13 """
15 def __init__(
16 self, period_unit_of_measure: PeriodUnitOfMeasure, start: int, end: int
17 ) -> None:
18 if not isinstance(period_unit_of_measure, PeriodUnitOfMeasure):
19 raise TypeError(
20 (
21 "period_unit_of_measure needs to be of type "
22 + f"PeriodUnitOfMeasure, not {type(period_unit_of_measure)}"
23 )
24 )
25 if end > start:
26 raise FeaturePeriodEndGreaterThanStartError(start=start, end=end)
27 self.__period_unit_of_measure = period_unit_of_measure
28 self.__start = start
29 self.__end = end
31 @property
32 def start(self) -> int:
33 "Number of periods ago that the FeaturePeriod begins at"
34 return self.__start
36 @property
37 def end(self) -> int:
38 "Number of periods ago that the FeaturePeriod ends at"
39 return self.__end
41 @property
42 def period_unit_of_measure(self) -> PeriodUnitOfMeasure:
43 "Period unit of measure"
44 return self.__period_unit_of_measure
46 @property
47 def mnemonic(self) -> str:
48 "Mnemonic for the feature period"
49 return f"{self.start}{self.period_unit_of_measure.value}{self.end}"
51 @property
52 def description(self) -> str:
53 """Description of the feature period
55 Pretty sure this will change in time, but this initial implementation
56 will do for now
58 Returns:
59 str: description
60 """
61 return (
62 f"Between {self.start} and {self.end} "
63 + f"{self.period_unit_of_measure.name.lower()}s ago"
64 )
66 @property
67 def number_of_periods(self) -> int:
68 "Number of periods between start and end (inclusive)"
69 return self.start - self.end + 1