Esempio n. 1
0
 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))
Esempio n. 2
0
    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
Esempio n. 3
0
 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))