def test_solve_empty_clause(self): sat_problem = SATProblem() sat_problem.constraint_clauses.append([]) sat_problem.solve(True) success = sat_problem.success result = sat_problem.result self.assertFalse(success) self.assertEqual(0, len(result)) self.assertEqual([], result)
def test_solve_single_clause(self): sat_problem = SATProblem() sat_problem.constraint_clauses.append([1]) sat_problem.solve(True) success = sat_problem.success result = sat_problem.result self.assertTrue(success) self.assertEqual(1, len(result)) self.assertEqual([1], result)
def test_encoder_reset_clauses(self): sat_problem = SATProblem() Encoder.encode_basic_clause(self.tbn_problem, sat_problem) Encoder.increment_min_representatives(self.tbn_problem, sat_problem) Encoder.increment_min_representatives(self.tbn_problem, sat_problem) self.assertEqual(sat_problem.min_reps, 2) sat_problem.reset_clauses() self.assertEqual(sat_problem.min_reps, 0) self.assertEqual( len(sat_problem.increment_min_representatives_clauses), 0)
def test_solve_basic_clauses(self): sat_problem = SATProblem() sat_problem.constraint_clauses.append([1, 2, 3]) sat_problem.constraint_clauses.append([-2]) sat_problem.constraint_clauses.append([-3]) sat_problem.solve(True) success = sat_problem.success result = sat_problem.result self.assertTrue(success) self.assertEqual(3, len(result)) self.assertEqual([1, -2, -3], result)
def test_constraints_encoder_monomer_together(self): constraint_input = ["TOGETHER output extra"] tbn_problem = parse_input_lines(self.monomer_input, constraint_input) sat_problem = SATProblem() Encoder.encode_basic_clause(tbn_problem, sat_problem) self.assertEqual(len(sat_problem.constraint_clauses), 1) self.assertEqual(len(sat_problem.constraint_clauses[0]), 1)
def test_constraints_encoder_monomer_notfree(self): constraint_input = ["NOTFREE output"] tbn_problem = parse_input_lines(self.monomer_input, constraint_input) sat_problem = SATProblem() Encoder.encode_basic_clause(tbn_problem, sat_problem) self.assertEqual(len(sat_problem.constraint_clauses), 1) self.assertEqual(len(sat_problem.constraint_clauses[0]), 8)
def test_constraints_encoder_not_free_constraint_exception(self): monomer_input = ["a >mon1", "b >mon2"] constraint_input = ["NOTFREE mon1"] tbn_problem = parse_input_lines(monomer_input, constraint_input) sat_problem = SATProblem() self.assertRaises(NotFreeConstraintException, Encoder.encode_basic_clause, tbn_problem, sat_problem)
def test_constraints_encoder_any_paired_constraint_exception(self): monomer_input = ["a:s1", "b:s2"] constraint_input = ["ANYPAIRED s1"] tbn_problem = parse_input_lines(monomer_input, constraint_input) sat_problem = SATProblem() self.assertRaises(AnyPairedConstraintException, Encoder.encode_basic_clause, tbn_problem, sat_problem)
def test_encode_each_site_binds_at_most_once(self): sat_problem = SATProblem() Encoder.encode_each_site_binds_at_most_once(self.tbn_problem, sat_problem) self.assertEqual(len(sat_problem.each_site_binds_at_most_once_clauses), 38) self.assertEqual(len(sat_problem.pair_to_id), 28)
def test_constraints_encoder_together_constraint_exception(self): monomer_input = ["a >mon1", "b >mon2"] constraint_input = ["TOGETHER mon1 mon2"] tbn_problem = parse_input_lines(monomer_input, constraint_input) sat_problem = SATProblem() self.assertRaises(TogetherConstraintException, Encoder.encode_basic_clause, tbn_problem, sat_problem)
def test_constraints_encoder_bsite_notanypaired(self): constraint_input = ["NOTANYPAIRED s1"] tbn_problem = parse_input_lines(self.monomer_input, constraint_input) sat_problem = SATProblem() Encoder.encode_basic_clause(tbn_problem, sat_problem) num_complement = tbn_problem.site_type_to_sitelist_map.get( "c").get_normal_site_count() self.assertEqual(len(sat_problem.constraint_clauses), num_complement)
def test_encode_bind_transitive(self): sat_problem = SATProblem() Encoder.encode_each_site_binds_at_most_once(self.tbn_problem, sat_problem) Encoder.encode_limiting_site_binds(self.tbn_problem, sat_problem) Encoder.encode_pair_implies_bind(self.tbn_problem, sat_problem) Encoder.encode_bind_transitive(self.tbn_problem, sat_problem) self.assertEqual(len(sat_problem.bind_to_id), 36) self.assertEqual(len(sat_problem.bind_transitive_clauses), 252)
def test_encode_pair_implies_bind(self): sat_problem = SATProblem() Encoder.encode_each_site_binds_at_most_once(self.tbn_problem, sat_problem) Encoder.encode_limiting_site_binds(self.tbn_problem, sat_problem) Encoder.encode_pair_implies_bind(self.tbn_problem, sat_problem) self.assertEqual(len(sat_problem.bind_to_id), 14) # Same number as number of pairs! self.assertEqual(len(sat_problem.pair_implies_bind_clauses), len(sat_problem.pair_to_id))
def test_encode_bind_representatives(self): sat_problem = SATProblem() Encoder.encode_each_site_binds_at_most_once(self.tbn_problem, sat_problem) Encoder.encode_limiting_site_binds(self.tbn_problem, sat_problem) Encoder.encode_pair_implies_bind(self.tbn_problem, sat_problem) Encoder.encode_bind_transitive(self.tbn_problem, sat_problem) Encoder.encode_bind_representatives(self.tbn_problem, sat_problem) self.assertEqual(len(sat_problem.rep_to_id), self.tbn_problem.monomer_count) self.assertEqual(len(sat_problem.bind_representatives_clauses), 36)
def test_constraints_encoder_bsite_paired(self): constraint_input = ["PAIRED s1 s2"] tbn_problem = parse_input_lines(self.monomer_input, constraint_input) sat_problem = SATProblem() Encoder.encode_basic_clause(tbn_problem, sat_problem) self.assertEqual(len(sat_problem.constraint_clauses), 1) self.assertEqual(len(sat_problem.constraint_clauses[0]), 1) pair_id = sat_problem.constraint_clauses[0][0] pair = sat_problem.id_to_pair.get(pair_id) self.assertEqual(pair.site1.name, "s1") self.assertEqual(pair.site2.name, "s2")
def test_encode_limiting_site_binds(self): sat_problem = SATProblem() Encoder.encode_each_site_binds_at_most_once(self.tbn_problem, sat_problem) Encoder.encode_limiting_site_binds(self.tbn_problem, sat_problem) self.assertEqual(len(sat_problem.pair_to_id), 28) self.assertEqual(len(sat_problem.limited_site_binds_clauses), 10) self.assertTrue([1, 2] in sat_problem.limited_site_binds_clauses) self.assertTrue([3, 4, 5] in sat_problem.limited_site_binds_clauses) self.assertTrue([9, 10, 11] in sat_problem.limited_site_binds_clauses) self.assertTrue([12, 13, 14] in sat_problem.limited_site_binds_clauses) self.assertTrue([15, 16, 17] in sat_problem.limited_site_binds_clauses) self.assertTrue([18, 19, 20] in sat_problem.limited_site_binds_clauses) self.assertTrue([21, 22, 23] in sat_problem.limited_site_binds_clauses) self.assertTrue([24, 25, 26] in sat_problem.limited_site_binds_clauses) self.assertTrue([27, 28] in sat_problem.limited_site_binds_clauses)
def test_increment_min_representatives(self): sat_problem = SATProblem() Encoder.encode_basic_clause(self.tbn_problem, sat_problem) self.assertEqual(sat_problem.min_reps, 0) Encoder.increment_min_representatives(self.tbn_problem, sat_problem) self.assertEqual(sat_problem.min_reps, 1) self.assertEqual( len(sat_problem.increment_min_representatives_clauses), 10) Encoder.increment_min_representatives(self.tbn_problem, sat_problem) self.assertEqual(sat_problem.min_reps, 2) self.assertEqual( len(sat_problem.increment_min_representatives_clauses), 28) Encoder.increment_min_representatives(self.tbn_problem, sat_problem) self.assertEqual(sat_problem.min_reps, 3) self.assertEqual( len(sat_problem.increment_min_representatives_clauses), 45)
def test_constraints_encoder_monomer_free(self): sat_problem = SATProblem() Encoder.encode_basic_clause(self.tbn_problem, sat_problem) self.assertEqual(len(sat_problem.constraint_clauses), 8) for clause in sat_problem.constraint_clauses: self.assertEqual(len(clause), 1)