diff --git a/firanka/series/__init__.py b/firanka/series/__init__.py index 433511507577aa789e26da50156158c3ee5a429d..ea3c4b2092c52f9f4f2de02c2f306fdc26f74c12 100644 --- a/firanka/series/__init__.py +++ b/firanka/series/__init__.py @@ -5,7 +5,7 @@ import logging from .exceptions import NotInDomainError, FirankaError from .range import Range, REAL_SET -from .series import DiscreteSeries, FunctionBasedSeries, ModuloSeries +from .series import DiscreteSeries, FunctionBasedSeries, ModuloSeries, Series __all__ = [ @@ -16,4 +16,5 @@ __all__ = [ 'FunctionBasedSeries', 'DiscreteSeries', 'ModuloSeries', + 'Series', ] diff --git a/firanka/series/range.py b/firanka/series/range.py index 82efa3809d754e2db0de86c12453286dc5c8a9e7..1dc63237a22a231deedc8bac7dcf8bb9499be539 100644 --- a/firanka/series/range.py +++ b/firanka/series/range.py @@ -107,14 +107,14 @@ class Range(object): if self.start == y.start: start = self.start - left_inc = self.left_inc or y.left_inc + left_inc = self.left_inc and y.left_inc else: start = y.start left_inc = y.left_inc if self.stop == y.stop: stop = self.stop - right_inc = self.right_inc or y.right_inc + right_inc = self.right_inc and y.right_inc else: p, q = (self, y) if self.stop < y.stop else (y, self) stop = p.stop diff --git a/firanka/series/series.py b/firanka/series/series.py index ae7372b8649dd7e1ed0f6f14111cc900c42f30d7..aea37983c6ecacc27bd5fb864f202de99bcd90d5 100644 --- a/firanka/series/series.py +++ b/firanka/series/series.py @@ -10,6 +10,12 @@ from .exceptions import NotInDomainError class Series(object): + """ + Abstract, base class for series. + + Your series needs to override just _get_for(x: float) -> v + for minimum functionality + """ def __init__(self, domain): if not isinstance(domain, Range): @@ -39,7 +45,7 @@ class Series(object): return self._get_for(item) def _get_for(self, item): - raise NotImplementedError + raise NotImplementedError('This is abstract, override me!') def eval_points(self, points): """ diff --git a/tests/test_series/test_range.py b/tests/test_series/test_range.py index 6a6652f7d5de0842d05ef207bded3b57c393f378..068b0b846948ca31cfd0ec8f9aa88c8c7ab63d39 100644 --- a/tests/test_series/test_range.py +++ b/tests/test_series/test_range.py @@ -28,6 +28,7 @@ class TestRange(unittest.TestCase): self.do_intersect('<-10;-1)', '<-1;1>', True) self.do_intersect('<-10;-1)', '(-1;3>', True) self.do_intersect('<-10;2)', '<1;5>', '<1;2)') + self.do_intersect('<-5;5>', '(-5;5)', '(-5;5)') def test_str_and_repr_and_bool(self): p = Range(-1,1,True,True) diff --git a/tests/test_series/test_series.py b/tests/test_series/test_series.py index 232d557a8b5bad3f32db76ee6c887da1ef3d3a15..c7451f87dc30218cb728d0874e661db370513a78 100644 --- a/tests/test_series/test_series.py +++ b/tests/test_series/test_series.py @@ -32,6 +32,11 @@ class TestDiscreteSeries(unittest.TestCase): self.assertEqual(s[3.5], 0) self.assertEqual(s[4], 1) + def test_slice_outdomain(self): + series = DiscreteSeries([[0, 0], [1, 1], [2, 2]]) + + self.assertRaises(NotInDomainError, lambda: series[-1:2]) + def test_slice(self): series = DiscreteSeries([[0, 0], [1, 1], [2, 2]]) @@ -89,6 +94,9 @@ class TestDiscreteSeries(unittest.TestCase): self.assertIsInstance(sa, DiscreteSeries) self.assertEqual(sa.data, [(i, i**2) for i in PTS]) + empty = FunctionBasedSeries(lambda x: x**2, '<-10;10)').discretize([]) + self.assertTrue(empty.domain.is_empty()) + class TestFunctionBasedSeries(unittest.TestCase): def test_slice(self): series = FunctionBasedSeries(lambda x: x, '<0;2>')