From 9b4ef9832a19d433c4e9be60007b4a7c1ac6d7b7 Mon Sep 17 00:00:00 2001
From: Piotr Maslanka <piotr.maslanka@henrietta.com.pl>
Date: Sat, 9 Dec 2017 21:20:20 +0100
Subject: [PATCH] fixed #2

---
 README.md                           |  7 +++++++
 firanka/{builder.py => builders.py} |  4 ++--
 firanka/series/base.py              |  4 ++++
 firanka/series/modulo.py            |  6 ++++++
 tests/test_builder.py               | 16 ++++++++++++++--
 5 files changed, 33 insertions(+), 4 deletions(-)
 rename firanka/{builder.py => builders.py} (95%)

diff --git a/README.md b/README.md
index f14d95a..a660d10 100644
--- a/README.md
+++ b/README.md
@@ -109,6 +109,13 @@ and will do classical linear interpolation.
 They can either utilize an existing discrete series, or be created just as
 any other discrete series would be.
 
+## Builders
+
+## DiscreteSeriesBuilder
+
+Sometimes you just need to update a DiscreteSeries, or to blang a brand new one. This little fella
+will help you out.
+
 ## Ranges
 
 Can be imported from _sai.ranges_.
diff --git a/firanka/builder.py b/firanka/builders.py
similarity index 95%
rename from firanka/builder.py
rename to firanka/builders.py
index b9d499a..7691352 100644
--- a/firanka/builder.py
+++ b/firanka/builders.py
@@ -11,10 +11,10 @@ Update knowledge of current discrete series
 """
 
 __all__ = [
-    'DiscreteKnowledgeBuilder',
+    'DiscreteSeriesBuilder',
 ]
 
-class DiscreteKnowledgeBuilder(object):
+class DiscreteSeriesBuilder(object):
     def __init__(self, series=None):
 
         if series is None:
diff --git a/firanka/series/base.py b/firanka/series/base.py
index 79572ef..2855e20 100644
--- a/firanka/series/base.py
+++ b/firanka/series/base.py
@@ -99,6 +99,10 @@ class Series(object):
 
 
 class DiscreteSeries(Series):
+    """
+    A series with lots of small rectangles interpolating something
+    """
+
     def __init__(self, data, domain=None, *args, **kwargs):
 
         data = SortedList(data)
diff --git a/firanka/series/modulo.py b/firanka/series/modulo.py
index ed72808..684439a 100644
--- a/firanka/series/modulo.py
+++ b/firanka/series/modulo.py
@@ -24,7 +24,13 @@ class ModuloSeries(Series):
         elif math.isinf(self.period):
             raise ValueError('Modulo series cannot have an infinite period')
 
+        # We internally translate the start of the series' domain to be at 0, because it simpler for us :D
+        self.intertrans = -self.series.domain.start
+
     def _get_for(self, item):
+
+        item += self.intertrans
+
         if item < 0:
             item = -(item // self.period) * self.period + item
         elif item > self.period:
diff --git a/tests/test_builder.py b/tests/test_builder.py
index 51c816a..9188215 100644
--- a/tests/test_builder.py
+++ b/tests/test_builder.py
@@ -3,7 +3,7 @@ from __future__ import print_function, absolute_import, division
 import six
 import unittest
 
-from firanka.builder import DiscreteKnowledgeBuilder
+from firanka.builders import DiscreteSeriesBuilder
 from firanka.series import DiscreteSeries
 
 
@@ -12,7 +12,7 @@ class TestBuilder(unittest.TestCase):
 
         ser = DiscreteSeries([(0,1), (1,2)])
 
-        kb = DiscreteKnowledgeBuilder(ser)
+        kb = DiscreteSeriesBuilder(ser)
 
         kb.put(3, 4)
         kb.put(-1, 5)
@@ -23,3 +23,15 @@ class TestBuilder(unittest.TestCase):
 
         self.assertTrue(s2.domain, '<-1;3>')
         self.assertEqual(s2.data,[(-1,6), (0,2), (1,2), (3,4)])
+
+    def test_exnihilo(self):
+        kb = DiscreteSeriesBuilder()
+
+        kb.put(0, 0)
+        kb.put(1, 1)
+
+        s = kb.as_series()
+
+        self.assertEqual(s[0],0)
+        self.assertEqual(s[1],1)
+        self.assertEqual(s.domain, '<0;1>')
-- 
GitLab