From: timv Date: Mon, 3 Jun 2013 01:08:20 +0000 (-0400) Subject: Fixed colon equals aggregator (:=). X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=8aebad3b0dc18c0f4f7cce902825d4bb7c7bd60d;p=dyna2 Fixed colon equals aggregator (:=). --- diff --git a/src/Dyna/Backend/Python/defn.py b/src/Dyna/Backend/Python/defn.py index f81b583..66c330d 100644 --- a/src/Dyna/Backend/Python/defn.py +++ b/src/Dyna/Backend/Python/defn.py @@ -41,24 +41,13 @@ class MultisetAggregator(BAggregator): return self.folder(self) -class LastEquals(Aggregator): - def __init__(self, item, name): - self.values = {} - Aggregator.__init__(self, item, name) +class LastEquals(BAggregator): def inc(self, val, ruleix, variables): - if ruleix not in self.values: - self.values[ruleix] = [] - self.values[ruleix].append(val) + self[ruleix, val] += 1 def dec(self, val, ruleix, variables): - self.values[ruleix].delete(val) - def clear(self): - self.values = {} + self[ruleix, val] -= 1 def fold(self): - maxrix = max(self.values.keys(), key=int) - if len(self.values[maxrix]) == 1: - return self.values[maxrix][0] - else: - return None + return max(x for x, cnt in self.items() if cnt > 0)[1] class SetEquals(Aggregator): @@ -139,16 +128,15 @@ def agg_bind(item, agg_decl): 'majority=': majority_equals, } - (fn, _) = item - if agg_decl[fn] == ':=': - return LastEquals(item, agg_decl[fn]) + if agg_decl[item.fn] == ':=': + return LastEquals(item, agg_decl[item.fn]) - elif agg_decl[fn] == 'bag=': - return BAggregator(item, agg_decl[fn]) + elif agg_decl[item.fn] == 'bag=': + return BAggregator(item, agg_decl[item.fn]) - elif agg_decl[fn] == 'set=': - return SetEquals(item, agg_decl[fn]) + elif agg_decl[item.fn] == 'set=': + return SetEquals(item, agg_decl[item.fn]) else: - return MultisetAggregator(item, agg_decl[fn], defs[agg_decl[fn]]) + return MultisetAggregator(item, agg_decl[item.fn], defs[agg_decl[item.fn]])