Exemple #1
0
 def test_majority(self):
     cnf = cnfformula.CNF([[(True, 'x'), (False, 'y')]])
     lift = cnfformula.MajoritySubstitution(cnf, 3)
     self.assertCnfEqual(
         lift,
         cnfformula.CNF([
             [(True, '{x}^0'), (True, '{x}^1'), (False, '{y}^0'),
              (False, '{y}^1')],
             [(True, '{x}^1'), (True, '{x}^2'), (False, '{y}^0'),
              (False, '{y}^1')],
             [(True, '{x}^2'), (True, '{x}^0'), (False, '{y}^0'),
              (False, '{y}^1')],
             [(True, '{x}^0'), (True, '{x}^1'), (False, '{y}^1'),
              (False, '{y}^2')],
             [(True, '{x}^1'), (True, '{x}^2'), (False, '{y}^1'),
              (False, '{y}^2')],
             [(True, '{x}^2'), (True, '{x}^0'), (False, '{y}^1'),
              (False, '{y}^2')],
             [(True, '{x}^0'), (True, '{x}^1'), (False, '{y}^2'),
              (False, '{y}^0')],
             [(True, '{x}^1'), (True, '{x}^2'), (False, '{y}^2'),
              (False, '{y}^0')],
             [(True, '{x}^2'), (True, '{x}^0'), (False, '{y}^2'),
              (False, '{y}^0')],
         ]))
     lift2 = cnfformula.MajoritySubstitution(cnf, 3)
     self.assertCnfEqual(lift, lift2)
Exemple #2
0
 def test_inequality_pos_clause(self) :
     cnf = cnfformula.CNF([[(True,'x')]])
     lift = cnfformula.NotAllEqualSubstitution(cnf, 3)
     self.assertCnfEqual(lift,cnfformula.CNF([
                 [(True,'{x}^0'),(True,'{x}^1'),(True,'{x}^2')],
                 [(False,'{x}^0'),(False,'{x}^1'),(False,'{x}^2')]
             ]))
Exemple #3
0
 def test_variable_and_polarity_flip(self) :
     cnf = cnfformula.CNF([[(True,'x'),(True,'y'),(False,'z')]])
     variable_permutation = ['y','z','x']
     clause_permutation = list(range(1))
     polarity_flip = [1,-1,-1]
     shuffle = cnfshuffle.Shuffle(cnf, variable_permutation, clause_permutation, polarity_flip)
     expected = cnfformula.CNF([[(False,'y'),(True,'z'),(True,'x')]])
     self.assertCnfEqual(expected,shuffle)
Exemple #4
0
 def test_eq_vs_neq(self):
     cnf = cnfformula.CNF([[(False, 'x'), (True, 'y')],
                           [(True, 'z'), (True, 't')],
                           [(False, 'u'), (False, 'v')]])
     cnfneg = cnfformula.CNF([[(True, 'x'), (False, 'y')],
                              [(False, 'z'), (False, 't')],
                              [(True, 'u'), (True, 'v')]])
     lifteq = cnfformula.AllEqualSubstitution(cnf, 4)
     liftneq = cnfformula.NotAllEqualSubstitution(cnfneg, 4)
     self.assertCnfEqual(lifteq, liftneq)
Exemple #5
0
 def test_if_then_else(self) :
     cnf = cnfformula.CNF([[(True,'x'),(False,'y')]])
     lift  = cnfformula.IfThenElseSubstitution(cnf)
     self.assertCnfEqual(lift,cnfformula.CNF([
                 [(False,'{x}^0'),(True,'{x}^1'),(False,'{y}^0'),(False,'{y}^1')],
                 [(False,'{x}^0'),(True,'{x}^1'),(True,'{y}^0'),(False,'{y}^2')],
                 [(True,'{x}^0'),(True,'{x}^2'),(False,'{y}^0'),(False,'{y}^1')],
                 [(True,'{x}^0'),(True,'{x}^2'),(True,'{y}^0'),(False,'{y}^2')],
     ]))
     lift2 = cnfformula.IfThenElseSubstitution(cnf)
     self.assertCnfEqual(lift,lift2)
Exemple #6
0
 def test_equality(self) :
     cnf = cnfformula.CNF([[(False,'x'),(True,'y')]])
     lift = cnfformula.AllEqualSubstitution(cnf, 2)
     self.assertCnfEqual(lift,cnfformula.CNF([
                 [(True,'{x}^0'),(True,'{x}^1'),(True,'{y}^0'),(False,'{y}^1')],
                 [(False,'{x}^0'),(False,'{x}^1'),(True,'{y}^0'),(False,'{y}^1')],
                 [(True,'{x}^0'),(True,'{x}^1'),(False,'{y}^0'),(True,'{y}^1')],
                 [(False,'{x}^0'),(False,'{x}^1'),(False,'{y}^0'),(True,'{y}^1')],
                 ]))
     lift2 = cnfformula.AllEqualSubstitution(cnf, 2)
     self.assertCnfEqual(lift,lift2)
Exemple #7
0
 def test_polarity_flip(self):
     cnf = cnfformula.CNF([[(True, 'x'), (True, 'y'), (False, 'z')]])
     variables_permutation = list(cnf.variables())
     constraints_permutation = list(range(1))
     polarity_flips = [1, -1, -1]
     shuffle = cnfshuffle.Shuffle(
         cnf,
         variables_permutation=variables_permutation,
         constraints_permutation=constraints_permutation,
         polarity_flips=polarity_flips)
     expected = cnfformula.CNF([[(True, 'x'), (False, 'y'), (True, 'z')]])
     self.assertCnfEqual(expected, shuffle)
Exemple #8
0
 def cnf_from_variables_and_clauses(variables, clauses):
     cnf = cnfformula.CNF()
     for variable in variables:
         cnf.add_variable(variable)
     for clause in clauses:
         cnf.add_clause(clause)
     return cnf
Exemple #9
0
 def test_variable_permutation(self) :
     cnf = cnfformula.CNF([[(True,'x'),(True,'y'),(False,'z')]])
     variable_permutation = ['y','z','x']
     clause_permutation = list(range(1))
     polarity_flip = [1]*3
     shuffle = cnfshuffle.Shuffle(cnf, variable_permutation, clause_permutation, polarity_flip)
     self.assertSequenceEqual(list(shuffle.variables()),variable_permutation)
     self.assertSequenceEqual(list(shuffle.clauses()),list(cnf.clauses()))
Exemple #10
0
 def test_safe_clause_insetion(self):
     F = cnfformula.CNF()
     F.add_variable("S")
     F.add_variable("U")
     F.add_clause([(True, "S"), (False, "T")])
     self.assertTrue(len(list(F.variables())), 2)
     F.add_clause([(True, "T"), (False, "U")], strict=True)
     self.assertTrue(len(list(F.variables())), 3)
     self.assertRaises(ValueError,
                       F.add_clause, [(True, "T"), (False, "V")],
                       strict=True)
Exemple #11
0
 def test_one_var_cnf(self):
     dimacs = StringIO.StringIO("c Hej!\np cnf 1 2\n1 0\n-1 0\n")
     cnf = cnfutils.dimacs2cnf(dimacs)
     self.assertCnfEqual(cnf, cnfformula.CNF([[(True, 1)], [(False, 1)]]))
Exemple #12
0
 def test_one_clause_cnf(self):
     dimacs = StringIO.StringIO("c Hej!\np cnf 2 1\n1 -2 0\n")
     cnf = cnfutils.dimacs2cnf(dimacs)
     self.assertCnfEqual(cnf, cnfformula.CNF([[(True, 1), (False, 2)]]))
Exemple #13
0
 def test_commented_empty_cnf(self):
     dimacs = StringIO.StringIO("c Hej!\np cnf 0 0\n")
     cnf = cnfutils.dimacs2cnf(dimacs)
     self.assertCnfEqual(cnf, cnfformula.CNF())
 def test_empty_cnf(self):
     dimacs = io.StringIO("p cnf 0 0\n")
     cnf = cnfutils.dimacs2cnf(dimacs)
     self.assertCnfEqual(cnf, cnfformula.CNF())
Exemple #15
0
 def test_empty(self):
     F = cnfformula.CNF()
     self.assertTrue(F._check_coherence())
     self.assertListEqual(list(F.variables()), [])
     self.assertListEqual(list(F.clauses()), [])
Exemple #16
0
 def test_exactly_one(self):
     cnf = cnfformula.CNF([[(True, 'x'), (False, 'y')]])
     lift = cnfformula.ExactlyOneSubstitution(cnf, 2)
     lift2 = cnfformula.ExactlyOneSubstitution(cnf, 2)
     self.assertCnfEqual(lift, lift2)