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