]> hydra-www.ietfng.org Git - dyna2/commitdiff
FIX: aggregating on empty returns None, which now propagate correctly thru the
authortimv <tim.f.vieira@gmail.com>
Thu, 13 Dec 2012 04:29:04 +0000 (23:29 -0500)
committertimv <tim.f.vieira@gmail.com>
Thu, 13 Dec 2012 04:29:04 +0000 (23:29 -0500)
program.

bin/defn.py
bin/stdlib.py
examples/papa.dyna

index 48bb3b84a6341e48f2c29fdd1d1fec0de68bec25..b0903ee2984f9d2bac8201fb55c5a62e4ce929fc 100644 (file)
@@ -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 = {
index 4c714b9e42c6538e52f441dbdf0c1a828045ab3a..46cb95fa0e1a79b70b5693ad1515bab070bb3fde 100644 (file)
@@ -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():
index ef5dc380b53a2ae8606d700fd0865ff834a02290..b41542430aa017415505368fc12b8c26c61d9e75 100644 (file)
@@ -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.