def reflexive_closure(self): """ Compute the reflexive closure of the relations in the model """ states_in_model = self.states.values() for agent, relations in self.relations.iteritems(): relations_as_set = set( [relation.to_tuple() for relation in relations]) closure = closures.reflexive(relations_as_set, states_in_model) closure.difference_update(relations_as_set) [ self.add_relation( Relation.from_tuple((source, destination, agent))) for (source, destination) in closure ]
def compute_closure(self, closure_function): """ Compute the closure defined by closure_function. :param closure_function: Function that computes a closure, it should accept a set of tuples as input and output a set of tuples. """ for agent, relations in self.relations.iteritems(): relations_as_set = set([relation.to_tuple() for relation in relations]) relations_as_set = set([(source, destination) for (source, destination, _) in relations_as_set]) closure = closure_function(relations_as_set) closure.difference_update(relations_as_set) [ self.add_relation( Relation.from_tuple((source, destination, agent)) ) for (source, destination) in closure ]