From: timv Date: Thu, 13 Dec 2012 04:29:04 +0000 (-0500) Subject: FIX: aggregating on empty returns None, which now propagate correctly thru the X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=12e5e45e4c15a38b8425e94c44c47939518e30bb;p=dyna2 FIX: aggregating on empty returns None, which now propagate correctly thru the program. --- diff --git a/bin/defn.py b/bin/defn.py index 48bb3b8..b0903ee 100644 --- a/bin/defn.py +++ b/bin/defn.py @@ -63,26 +63,34 @@ def agg_bind(agg_decl, table): """ def max_equals(item): - return max(k for k, m in table[item].iteritems() if m > 0) + s = [k for k, m in table[item].iteritems() if m > 0] + if len(s): + return max() def min_equals(item): - return min(k for k, m in table[item].iteritems() if m > 0) + s = [k for k, m in table[item].iteritems() if m > 0] + if len(s): + return min(s) def plus_equals(item): - return reduce(operator.add, - [k*m for k, m in table[item].iteritems()]) + s = [k*m for k, m in table[item].iteritems()] + if len(s): + return reduce(operator.add, s) def times_equals(item): - return reduce(operator.mul, - [k**m for k, m in table[item].iteritems()]) + s = [k**m for k, m in table[item].iteritems()] + if len(s): + return reduce(operator.mul, s) def and_equals(item): - return reduce(operator.and_, - [k for k, m in table[item].iteritems() if m > 0]) + s = [k for k, m in table[item].iteritems() if m > 0] + if len(s): + return reduce(operator.and_, s) def or_equals(item): - return reduce(operator.or_, - [k for k, m in table[item].iteritems() if m > 0]) + s = [k for k, m in table[item].iteritems() if m > 0] + if len(s): + return reduce(operator.or_, s) # map names to functions agg_defs = { diff --git a/bin/stdlib.py b/bin/stdlib.py index 4c714b9..46cb95f 100644 --- a/bin/stdlib.py +++ b/bin/stdlib.py @@ -179,6 +179,8 @@ def update_dispatcher(item, val): """ Passes update to relevant handlers. """ + if val is None: + return (fn, _) = item print 'dispatch', pretty(item), '=', val for handler in register.handlers[fn]: @@ -267,7 +269,8 @@ def _go(): chart[fn].data[idx][-1] = now - update_dispatcher(item, now) + if now is not None: + update_dispatcher(item, now) def go(): diff --git a/examples/papa.dyna b/examples/papa.dyna index ef5dc38..b415424 100644 --- a/examples/papa.dyna +++ b/examples/papa.dyna @@ -30,5 +30,4 @@ phrase("caviar", 3, 4) += 1. phrase( "with", 4, 5) += 1. phrase( "a", 5, 6) += 1. phrase( "spoon", 6, 7) += 1. -phrase( ".", 7, 8) += 1 -. +phrase( ".", 7, 8) += 1.