def evaluate_node(self, prog): if self.annotation_name == '@no_simplify': orig_level = settings.get_simplication_level() settings.set_simplification_level(0) res = self.body.evaluate(prog) settings.set_simplification_level(orig_level) return res elif self.annotation_name == '@simplify': orig_level = settings.get_simplication_level() settings.set_simplification_level(1) res = self.body.evaluate(prog) settings.set_simplification_level(orig_level) return res elif self.annotation_name == '@postprocess': return self.body.evaluate(prog).postprocess() elif self.annotation_name == '@simplify_states': return self.body.evaluate(prog).simplify_states() elif self.annotation_name == '@simplify_edges': return self.body.evaluate(prog).simplify_edges() elif self.annotation_name == '@merge_states': return self.body.evaluate(prog).merge_states() elif self.annotation_name == '@merge_edges': return self.body.evaluate(prog).merge_edges() # elif self.annotation_name == '@minimize': # return self.body.evaluate(prog).minimize() else: raise Exception('Unknown annotation: {}'.format( self.annotation_name))
def relabel(self): level_before = settings.get_simplication_level() settings.set_simplification_level(0) ap_set = set(map(str, self.aut.ap())) new_aps = {} for ap in self.aut.ap(): # Make sure that we don't try to relabel with an AP that's already in the automaton. # This can happen when we load an automaton from a file. new_ap = self.fresh_ap() while new_ap in ap_set: new_ap = self.fresh_ap() new_aps[ap.ap_name()] = new_ap settings.log(3, lambda: 'Relabeling: {}'.format(new_aps)) res = self.ap_substitute(new_aps) settings.set_simplification_level(level_before) return res
def evaluate_node(self, prog): if self.annotation_name == '@no_simplify': orig_level = settings.get_simplification_level() settings.set_simplification_level(0) res = self.body.evaluate(prog) settings.set_simplification_level(orig_level) return res elif self.annotation_name == '@simplify': orig_level = settings.get_simplification_level() settings.set_simplification_level(1) res = self.body.evaluate(prog) settings.set_simplification_level(orig_level) return res elif self.annotation_name == '@simplify_high': orig_level = settings.get_simplification_level() settings.set_simplification_level(2) res = self.body.evaluate(prog) settings.set_simplification_level(orig_level) return res elif self.annotation_name == '@postprocess': return self.body.evaluate(prog).postprocess() elif self.annotation_name == '@postprocess_high': return self.body.evaluate(prog).postprocess(level='High') elif self.annotation_name == '@postprocess_medium': return self.body.evaluate(prog).postprocess(level='Medium') elif self.annotation_name == '@postprocess_low': return self.body.evaluate(prog).postprocess(level='Low') elif self.annotation_name == '@simplify_states': return self.body.evaluate(prog).simplify_states() elif self.annotation_name == '@simplify_edges': return self.body.evaluate(prog).simplify_edges() elif self.annotation_name == '@merge_states': return self.body.evaluate(prog).merge_states() elif self.annotation_name == '@merge_edges': return self.body.evaluate(prog).merge_edges() elif self.annotation_name == '@merge_states_loop': aut = self.body.evaluate(prog) n = aut.num_states() + 1 while aut.num_states() < n: n = aut.num_states() aut.merge_states() return aut else: raise Exception('Unknown annotation: {}'.format( self.annotation_name))