summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--category.py9
-rw-r--r--statemachine.py4
2 files changed, 5 insertions, 8 deletions
diff --git a/category.py b/category.py
index c718002..81f26c8 100644
--- a/category.py
+++ b/category.py
@@ -21,17 +21,14 @@ class Category:
self.args = args
self.name = name
- def equiv(self, other):
+ def superset_of(self, other):
"""
- A Category is equivalent to another Category if:
- - The other category mandates the same or more arguments
- - The intersection of the two is nonempty
- Its an odd relationship, brought about to match expected user behavior
+ Determine if this category is a superset of `other`.
"""
if self.name != other.name: return False
for key, value in self.args.iteritems():
if not other.args.has_key(key): return False
- if not other.args[key].intersect(value).nonempty(): return False
+ if not other.args[key].intersect(value) == other.args[key]: return False
return True
def subtract(self, other):
diff --git a/statemachine.py b/statemachine.py
index b8657fa..57d6af5 100644
--- a/statemachine.py
+++ b/statemachine.py
@@ -89,7 +89,7 @@ class StateMachine:
"""
retval = []
for cat in self.up:
- if dependencies.equiv(cat):
+ if dependencies.superset_of(cat) and val > 0:
retval.append(dependents.fill(cat.args))
return set(retval) | dependents.inverse_set()
@@ -99,7 +99,7 @@ class StateMachine:
"""
retval = []
for (x, y) in self.deps:
- if x.equiv(cat):
+ if x.superset_of(cat):
un = cat.intersect(x)
retval.append((un, y.fill(un.args)))
return retval