From: Tim Vieira Date: Wed, 31 Jul 2013 13:38:48 +0000 (-0400) Subject: minor refactor. X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=f04963161538bf3f7e3d6f14b9529ab489ba5eee;p=dyna2 minor refactor. --- diff --git a/src/Dyna/Backend/Python/aggregator.py b/src/Dyna/Backend/Python/aggregator.py index b68b870..e27a08e 100644 --- a/src/Dyna/Backend/Python/aggregator.py +++ b/src/Dyna/Backend/Python/aggregator.py @@ -225,7 +225,7 @@ def aggregator(name, term): if name is None: return None - if name == ':=': + elif name == ':=': return ColonEquals() elif name == '=': diff --git a/src/Dyna/Backend/Python/chart.py b/src/Dyna/Backend/Python/chart.py index 97f4c58..84cc669 100644 --- a/src/Dyna/Backend/Python/chart.py +++ b/src/Dyna/Backend/Python/chart.py @@ -16,6 +16,12 @@ class Chart(object): def new_aggregator(self, term): return aggregator(self.agg_name, term) + def set_aggregator(self, agg): + self.agg_name = agg + for item in self.intern.values(): + assert item.value is None # shouldn't aggregator when non-null. + item.aggregator = self.new_aggregator(item) + def __repr__(self): rows = [term for term in self.intern.values() if term.value is not None] if not rows: diff --git a/src/Dyna/Backend/Python/interpreter.py b/src/Dyna/Backend/Python/interpreter.py index 5208920..fad8b7d 100644 --- a/src/Dyna/Backend/Python/interpreter.py +++ b/src/Dyna/Backend/Python/interpreter.py @@ -134,12 +134,7 @@ class Interpreter(object): # a value, which didn't have a value before -- i.e. was only used as # structure. if fn in self.chart: - c = self.chart[fn] - assert c.agg_name is None - c.agg_name = agg - for item in c.intern.values(): - assert item.aggregator is None - item.aggregator = c.new_aggregator(item) + self.chart[fn].set_aggregator(agg) # check for aggregator conflict. assert self.agg_name[fn] == agg, (fn, self.agg_name[fn], agg) @@ -588,15 +583,7 @@ class Interpreter(object): # if there are no more rules defining a functor; clear some of the state if not self.rule_by_head[rule.head_fn]: if rule.head_fn in self.chart: - # clear aggregators - chart = self.chart[rule.head_fn] - chart.agg_name = None - for item in chart.intern.values(): - item.aggregator = None - # make sure chart is cleared out - for item in chart.intern.values(): - assert item.value is None - assert item not in self.error + self.chart[rule.head_fn].set_aggregator(None) if rule.head_fn in self.agg_name: del self.agg_name[rule.head_fn] if rule.head_fn in self.pstate[2]: