From d9800dc82531f66d5395a31f3c0949c4df5cf424 Mon Sep 17 00:00:00 2001 From: Piotr Maslanka <piotr.maslanka@henrietta.com.pl> Date: Sat, 9 Dec 2017 20:10:41 +0100 Subject: [PATCH] apply_with_indices -> apply join_with_indices -> join old applies and joins removed! --- firanka/__init__.py | 2 +- firanka/series/base.py | 31 ++++++------------------------- tests/test_series.py | 23 +++++++---------------- 3 files changed, 14 insertions(+), 42 deletions(-) diff --git a/firanka/__init__.py b/firanka/__init__.py index 5767029..1c98a23 100644 --- a/firanka/__init__.py +++ b/firanka/__init__.py @@ -1 +1 @@ -__version__ = '0.1.9a1' +__version__ = '0.1.9' diff --git a/firanka/series/base.py b/firanka/series/base.py index 1c0fcee..79572ef 100644 --- a/firanka/series/base.py +++ b/firanka/series/base.py @@ -55,14 +55,6 @@ class Series(object): return [self[p] for p in points] def apply(self, fun): - """ - Return this series with a function applied to each value - :param fun: callable/1 => 1 - :return: Series instance - """ - return AlteredSeries(self, applyfun=lambda k, v: fun(v)) - - def apply_with_indices(self, fun): """ Return this series with a function applied to each value :param fun: callable(index: float, value: any) => 1 @@ -88,21 +80,11 @@ class Series(object): return DiscreteSeries([(i, self[i]) for i in points], domain) def join(self, series, fun): - """ - Return a new series with values of fun(v1, v2) - - :param series: series to join against - :param fun: callable/2 => value - :return: new Series instance - """ - return JoinedSeries(self, series, lambda t, v1, v2: fun(v1, v2)) - - def join_with_indices(self, series, fun): """ Return a new series with values of fun(index, v1, v2) :param series: series to join against - :param fun: callable/3 => value + :param fun: callable(t: float, v1: any, v2: any) => value :return: new Series instance """ return JoinedSeries(self, series, fun) @@ -135,13 +117,13 @@ class DiscreteSeries(Series): 'some domain space is not covered by definition!') def apply(self, fun): - return DiscreteSeries([(k, fun(v)) for k, v in self.data], self.domain) - - def apply_with_indices(self, fun): return DiscreteSeries([(k, fun(k, v)) for k, v in self.data], self.domain) def _get_for(self, item): + if item == self.data[0]: + return self.data[0][1] + for k, v in reversed(self.data): if k <= item: return v @@ -191,10 +173,8 @@ class DiscreteSeries(Series): return DiscreteSeries(c, new_domain) - def join_discrete(self, series, fun): - return self.join_discrete_with_indices(series, lambda i, v1, v2: fun(v1, v2)) - def join_discrete_with_indices(self, series, fun): + def join_discrete(self, series, fun): new_domain = self.domain.intersection(series.domain) if isinstance(series, DiscreteSeries): @@ -256,6 +236,7 @@ class JoinedSeries(Series): """ def __init__(self, ser1, ser2, op, *args, **kwargs): + """:type op: callable(time: float, v1, v2: any) -> v""" super(JoinedSeries, self).__init__(ser1.domain.intersection(ser2.domain), *args, **kwargs) self.ser1 = ser1 self.ser2 = ser2 diff --git a/tests/test_series.py b/tests/test_series.py index 49027f9..e670b6c 100644 --- a/tests/test_series.py +++ b/tests/test_series.py @@ -24,7 +24,7 @@ class TestDiscreteSeries(unittest.TestCase): a = DiscreteSeries([(0,0), (1,0), (2,0)], '<0;5>') b = DiscreteSeries([(0,0), (1,0)], '<0;5>') - a.join(b, lambda x,y: x+y) + a.join(b, lambda i,x,y: x+y) def test_uncov(self): self.assertRaises(ValueError, @@ -83,7 +83,7 @@ class TestDiscreteSeries(unittest.TestCase): sa = DiscreteSeries([[0, 0], [1, 1], [2, 2]]) sb = DiscreteSeries([[0, 1], [1, 2], [2, 3]]) - sc = sa.join_discrete(sb, lambda a, b: a + b) + sc = sa.join_discrete(sb, lambda i, a, b: a + b) self.assertIsInstance(sc, DiscreteSeries) self.assertEqual(sc.eval_points([0, 1, 2]), [1, 3, 5]) self.assertEqual(sc.data, [(0, 1), (1, 3), (2, 5)]) @@ -92,7 +92,7 @@ class TestDiscreteSeries(unittest.TestCase): sa = DiscreteSeries([[0, 0], [1, 1], [2, 2]]) sb = FunctionSeries(NOOP, '<0;2>') - sc = sa.join_discrete(sb, lambda a, b: a + b) + sc = sa.join_discrete(sb, lambda i, a, b: a + b) self.assertEqual(sc.eval_points([0, 1, 2]), [0, 2, 4]) self.assertIsInstance(sc, DiscreteSeries) @@ -100,16 +100,13 @@ class TestDiscreteSeries(unittest.TestCase): def test_eval2i(self): sa = DiscreteSeries([[0, 0], [1, 1], [2, 2]]) - sc = sa.join_discrete_with_indices(HUGE_IDENTITY, lambda i, a, b: i) + sc = sa.join_discrete(HUGE_IDENTITY, lambda i, a, b: i) self.assertEqual(sc.eval_points([0, 1, 2]), [0, 1, 2]) self.assertIsInstance(sc, DiscreteSeries) self.assertEqual(sc.data, [(0, 0), (1, 1), (2, 2)]) def test_apply(self): - sa = DiscreteSeries([[0, 0], [1, 1], [2, 2]]).apply(lambda x: x + 1) - self.assertEquals(sa.data, [(0, 1), (1, 2), (2, 3)]) - - sb = DiscreteSeries([[0, 0], [1, 1], [2, 2]]).apply_with_indices( + sb = DiscreteSeries([[0, 0], [1, 1], [2, 2]]).apply( lambda k, v: k) self.assertEquals(sb.data, [(0, 0), (1, 1), (2, 2)]) @@ -117,7 +114,7 @@ class TestDiscreteSeries(unittest.TestCase): sa = FunctionSeries(lambda x: x ** 2, '<-10;10)') sb = FunctionSeries(NOOP, '<0;2)') - sc = sa.join(sb, lambda a, b: a * b) + sc = sa.join(sb, lambda i, a, b: a * b) PTS = [0, 1, 1.9] EPTS = [x * x ** 2 for x in PTS] @@ -165,13 +162,7 @@ class TestFunctionSeries(unittest.TestCase): def test_apply(self): PTS = [-1, -2, -3, 1, 2, 3] - series = FunctionSeries(NOOP, '<-5;5>').apply(lambda x: x * 2) - - self.assertEqual(series.eval_points(PTS), [x * 2 for x in PTS]) - - PTS = [-1, -2, -3, 1, 2, 3] - series = FunctionSeries(NOOP, '<-5;5>').apply_with_indices( - lambda k, x: k) + series = FunctionSeries(NOOP, '<-5;5>').apply(lambda k, x: k) self.assertEqual(series.eval_points(PTS), [x for x in PTS]) -- GitLab