Example #1
0
    def __init__(self, env=None):
        if env is None:
            import pysmt.environment
            env = pysmt.environment.get_env()
        self.env = env

        self.functions = {}
        for o in op.all_types():
            try:
                # getattr will raise an AttributeError exception if a
                # method does not exist
                self.functions[o] = getattr(self, nt_to_fun(o))
            except AttributeError:
                self.functions[o] = self.walk_error
Example #2
0
 def __init__(self, env):
     Substituter.__init__(self, env=env)
     self.set_function(self.walk_replace, *op.all_types())
Example #3
0
    def test_new_node_type(self):
        old = list(all_types())
        idx = new_node_type(node_str="xor")
        self.assertIsNotNone(idx)
        self.assertNotIn(idx, old)
        with self.assertRaises(AssertionError):
            new_node_type(idx)
        XOR = idx

        # Ad-hoc method to handle printing of the new node
        def hrprinter_walk_xor(self, formula):
            self.stream.write("(")
            yield formula.arg(0)
            self.stream.write(" *+* ")
            yield formula.arg(1)
            self.stream.write(")")

        SimpleTypeChecker.walk_xor = SimpleTypeChecker.walk_bool_to_bool
        HRPrinter.walk_xor = hrprinter_walk_xor

        # Reset the env to recreate the TypeChecker and HRPrinter
        reset_env()

        # Shortcuts for function in env
        create_node = get_env().formula_manager.create_node
        # Create a test node (This implicitly calls the Type-checker)
        x = Symbol("x")
        f1 = create_node(node_type=XOR, args=(x,x))
        self.assertIsNotNone(f1)

        # String conversion should use the function defined above.
        s_f1 = str(f1)
        self.assertEqual(s_f1, "(x *+* x)")

        # We did not define an implementation for the Simplifier
        with self.assertRaises(UnsupportedOperatorError):
            f1.simplify()

        # Clean-up
        del SimpleTypeChecker.walk_xor
        del HRPrinter.walk_xor

        class MySimpleTypeChecker(SimpleTypeChecker):
            walk_xor = SimpleTypeChecker.walk_bool_to_bool

        class MyHRPrinter(HRPrinter):
            def walk_xor(self, formula):
                return self.walk_nary(formula, " *+* ")

        class MyHRSerializer(HRSerializer):
            PrinterClass = MyHRPrinter

        class MyEnv(Environment):
            TypeCheckerClass = MySimpleTypeChecker
            HRSerializerClass = MyHRSerializer

        with MyEnv() as myenv:
            create_node = myenv.formula_manager.create_node
            # Create a test node (This implicitly calls the Type-checker)
            x = Symbol("x")
            f1 = create_node(node_type=XOR, args=(x,x))
            self.assertIsNotNone(f1)

            # String conversion should use the function defined above.
            s_f1 = str(f1)
            self.assertEqual(s_f1, "(x *+* x)")

            # We did not define an implementation for the Simplifier
            with self.assertRaises(UnsupportedOperatorError):
                f1.simplify()

        return
Example #4
0
 def test_02_all_types(self):
     old_types_set = set(all_types())
     new_t = new_node_type()
     new_types_set = set(all_types())
     self.assertEqual(new_types_set - old_types_set, set([new_t]))
Example #5
0
 def test_02_all_types(self):
     old_types_set = set(all_types())
     new_t = new_node_type()
     new_types_set = set(all_types())
     self.assertEqual(new_types_set - old_types_set, set([new_t]))