]> hydra-www.ietfng.org Git - dyna2/commitdiff
minor refactor.
authorTim Vieira <tim.f.vieira@gmail.com>
Wed, 31 Jul 2013 13:38:48 +0000 (09:38 -0400)
committerTim Vieira <tim.f.vieira@gmail.com>
Wed, 31 Jul 2013 13:38:48 +0000 (09:38 -0400)
src/Dyna/Backend/Python/aggregator.py
src/Dyna/Backend/Python/chart.py
src/Dyna/Backend/Python/interpreter.py

index b68b870609e0b747aa81d305be00e54f27b756cd..e27a08ec43eefbcc822d800d7a47266daf45b409 100644 (file)
@@ -225,7 +225,7 @@ def aggregator(name, term):
     if name is None:
         return None
 
-    if name == ':=':
+    elif name == ':=':
         return ColonEquals()
 
     elif name == '=':
index 97f4c58f9922605f293295566af81e523b8e695e..84cc669f165593dd2c691c14392af950e7f90341 100644 (file)
@@ -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:
index 5208920b70b0885a648a03234c2a1c24775e25a8..fad8b7d00024a7d163e3abca3785d1e6e21b25c5 100644 (file)
@@ -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]: