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
def __init__(self, env): Substituter.__init__(self, env=env) self.set_function(self.walk_replace, *op.all_types())
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
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]))