diff --git a/README.md b/README.md index a660d10052c572ba46d35746f7c008762b9ba5a7..edaad25dbe128aa0e0a75338471991814e679806 100644 --- a/README.md +++ b/README.md @@ -149,9 +149,3 @@ Or you can check for strict inclusion ```python Range('<-1;1>') in Range('<-2;2>') ``` - -## TimeProviders - -**EXPERIMENTAL** - -Can be imported from _sai.timeproviders_. diff --git a/firanka/builders.py b/firanka/builders.py index 769135294e861f11cf7f3911bc1ddc6e2669ad7e..ba49333f6561f20999b6a63d001d80848a25dd1e 100644 --- a/firanka/builders.py +++ b/firanka/builders.py @@ -5,6 +5,7 @@ import logging import copy from .series import Series, DiscreteSeries from .ranges import Range +from sortedcontainers import SortedList """ Update knowledge of current discrete series @@ -43,11 +44,10 @@ class DiscreteSeriesBuilder(object): :return: a new DiscreteSeries instance """ - new_data = [] - + new_data = SortedList() cp_new_data = copy.copy(self.new_data) - # Update + # Update - series.data is sorted, so no worries :) for k, v in self.series.data: if k in cp_new_data: v = cp_new_data.pop(k) @@ -55,6 +55,6 @@ class DiscreteSeriesBuilder(object): # Add those that remained for k,v in cp_new_data.items(): - new_data.append((k,v)) + new_data.add((k,v)) return DiscreteSeries(new_data, self.domain) diff --git a/firanka/timeproviders.py b/firanka/timeproviders.py deleted file mode 100644 index 47dbd0cfe6507a6d0b5cb47e7dc66d2b5441516b..0000000000000000000000000000000000000000 --- a/firanka/timeproviders.py +++ /dev/null @@ -1,59 +0,0 @@ -# coding=UTF-8 -from __future__ import print_function, absolute_import, division - -from .ranges import Range -from .series import Series - - -class BijectionMapping(object): - def __init__(self, user2float, float2user): - """ - :param user2float: callable/1 => float, mapping from your time system to floats - :param float2user: callable/float => 1, mapping from float to your time systen - """ - self.user2float = user2float - self.float2user = float2user - - def to_float(self, user): - return self.user2float(user) - - def to_user(self, flt): - return self.float2user(flt) - - -class TimeProvidedSeries(Series): - """ - If your time is something else than simple floats, this will help you out - """ - - def __init__(self, series, mapping, *args, **kwargs): - """ - :param series: series to overlay - """ - super(TimeProvidedSeries, self).__init__(series.domain, *args, - **kwargs) - self.mapping = mapping - self.series = series - - def _withmap(self, series): - return TimeProvidedSeries(series, self.mapping) - - def __getitem__(self, item): - if isinstance(item, slice): - item = slice( - float('-inf') if slice.start is None else self.to_float( - slice.start), - float('+inf') if slice.stop is None else self.to_float( - slice.stop), ) - - return self._withmap(self.series[item]) - elif isinstance(item, Range): - return self._withmap(self.series[item]) - else: - return self.series[self.mapping.to_float(item)] - - def _get_for(self, item): - return self.series[self.l2f(item)] - - def join(self, series, fun): - return TimeProvidedSeries(self.series.join(series, fun), self.mapping) diff --git a/tests/test_timeproviders.py b/tests/test_timeproviders.py deleted file mode 100644 index 87bc595feb1fa122891fa837b6a5095613599536..0000000000000000000000000000000000000000 --- a/tests/test_timeproviders.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=UTF-8 -from __future__ import print_function, absolute_import, division - -import unittest - -from firanka.series import DiscreteSeries -from firanka.timeproviders import TimeProvidedSeries, BijectionMapping - - -class TestTimeproviders(unittest.TestCase): - def test_base(self): - map = BijectionMapping( - lambda hhmm: hhmm[0] * 60 + hhmm[1], - lambda t: (t // 60, t % 60) - ) - - ser = DiscreteSeries([(0, 17), (60, 20), (120, 18)]) - ts = TimeProvidedSeries(ser, map) - - self.assertEqual(ts[(2, 0)], 18)