From e19d8b13b85b2955481e2844f8fcd8bbed27a233 Mon Sep 17 00:00:00 2001 From: Alexey Velikiy Date: Mon, 20 May 2019 14:59:05 +0300 Subject: [PATCH] TimeSeries type v2 (#666) * TimeSeries -> TimeSeries2 , better inheritance and tests --- analytics/analytics/analytic_types/__init__.py | 15 +++++++++------ analytics/tests/test_analytic_types.py | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 analytics/tests/test_analytic_types.py diff --git a/analytics/analytics/analytic_types/__init__.py b/analytics/analytics/analytic_types/__init__.py index 5d85143..17b89cd 100644 --- a/analytics/analytics/analytic_types/__init__.py +++ b/analytics/analytics/analytic_types/__init__.py @@ -28,9 +28,12 @@ ts = TimeSeries([4, 5, 6], tsis) Timestamp = Union[str, pd.Timestamp] class TimeSeriesIndex(pd.DatetimeIndex): - def __init__(self, timestamps: List[Timestamp]): - super().__init__(timestamps, dtype='datetime64[ns]') - -class TimeSeries(pd.Series): - def __init__(self, values: List[object], tsindex: TimeSeriesIndex): - super().__init__(values, index=tsindex) + def __new__(cls, *args, **kwargs): + return pd.DatetimeIndex.__new__(cls, *args, **kwargs) + +# TODO: make generic type for values. See List definition for example of generic class +# TODO: constructor from DataFrame +# TODO: repleace TimeSeries (above) with this class: rename TimeSeries2 to TimeSeries +class TimeSeries2(pd.Series): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) diff --git a/analytics/tests/test_analytic_types.py b/analytics/tests/test_analytic_types.py new file mode 100644 index 0000000..89a261a --- /dev/null +++ b/analytics/tests/test_analytic_types.py @@ -0,0 +1,16 @@ +from analytic_types import TimeSeriesIndex, TimeSeries2 + +import unittest + + +class TestDataset(unittest.TestCase): + def test_basic_timeseries_index(self): + tsi = TimeSeriesIndex(['2017-12-31 16:00:00-08:00']) + self.assertEqual(len(tsi), 1) + tsi2 = TimeSeriesIndex(['2017-12-31 16:00:00-08:00', '2017-12-31 17:00:00-08:00', '2017-12-31 18:00:00-08:00']) + self.assertEqual(len(tsi2), 3) + + def test_basic_timeseries(self): + tsis = TimeSeriesIndex(['2017-12-31 16:00:00-08:00', '2017-12-31 17:00:00-08:00', '2017-12-31 18:00:00-08:00']) + ts = TimeSeries2([4, 5, 6], tsis) + self.assertEqual(len(ts), 3)