diff --git a/firanka/builder.py b/firanka/builder.py index 1b15543414737fc5369ddbc084d6356eee76e4bc..b9d499aa7007ea9ba73fcec6fd576c80133a8962 100644 --- a/firanka/builder.py +++ b/firanka/builder.py @@ -15,7 +15,10 @@ __all__ = [ ] class DiscreteKnowledgeBuilder(object): - def __init__(self, series): + def __init__(self, series=None): + + if series is None: + series = DiscreteSeries([], '(0;0)') if not isinstance(series, DiscreteSeries): raise TypeError('discrete knowledge builder supports only discrete series') @@ -34,11 +37,24 @@ class DiscreteKnowledgeBuilder(object): self.new_data[index] = value - def update_series(self): - """:return: a new DiscreteSeries instance""" + def as_series(self): + """ + Update + :return: a new DiscreteSeries instance + """ + + new_data = [] + + cp_new_data = copy.copy(self.new_data) + + # Update + for k, v in self.series.data: + if k in cp_new_data: + v = cp_new_data.pop(k) + new_data.append((k,v)) - new_data = copy.copy(self.series.data) - for k,v in self.new_data.items(): - new_data.add((k,v)) + # Add those that remained + for k,v in cp_new_data.items(): + new_data.append((k,v)) return DiscreteSeries(new_data, self.domain) diff --git a/tests/test_builder.py b/tests/test_builder.py index 0c2b7043bff8be5e0f696538263c9576757b9325..51c816a350ef8a5014e3c6dfa3508aa8e44e6452 100644 --- a/tests/test_builder.py +++ b/tests/test_builder.py @@ -16,9 +16,10 @@ class TestBuilder(unittest.TestCase): kb.put(3, 4) kb.put(-1, 5) + kb.put(0, 2) kb.put(-1, 6) - s2 = kb.update_series() + s2 = kb.as_series() self.assertTrue(s2.domain, '<-1;3>') - self.assertEqual(s2.data,[(-1,6), (0,1), (1,2), (3,4)]) + self.assertEqual(s2.data,[(-1,6), (0,2), (1,2), (3,4)])