From 294317cfa394f532660f5ce950eae5b5de84ee53 Mon Sep 17 00:00:00 2001 From: Piotr Maslanka <piotr.maslanka@henrietta.com.pl> Date: Sat, 9 Dec 2017 01:36:51 +0100 Subject: [PATCH] bug in ranges found --- firanka/series/__init__.py | 3 ++- firanka/series/range.py | 4 ++-- firanka/series/series.py | 8 +++++++- tests/test_series/test_range.py | 1 + tests/test_series/test_series.py | 8 ++++++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/firanka/series/__init__.py b/firanka/series/__init__.py index 4335115..ea3c4b2 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 82efa38..1dc6323 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 ae7372b..aea3798 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 6a6652f..068b0b8 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 232d557..c7451f8 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>') -- GitLab