def test_at_most_zero_small(self): (a, _b, _c) = self.pos self.function = a cardinality = cardnet.at_most(self.function.support, 0) sat = expr.And(self.function, *cardinality).to_cnf().satisfy_one() self.assertIsNone(sat)
def test_not_at_most_is_not_equivalent(self): at_most = expr.exprvar("at_most") cardinality = cardnet.at_most(self.function.support, len(self.pos) - 1, ~at_most) sat = expr.And(self.function, at_most, *cardinality).to_cnf().satisfy_one() self.assertIsNotNone(sat) self.assertEqual(sat.get(at_most), 1)
def test_at_most_higher(self): cardinality = cardnet.at_most(self.function.support, len(self.pos) + 1) sat = expr.And(self.function, *cardinality).to_cnf().satisfy_one() self.assertIsNotNone(sat) solution = {x: sat.get(x) for x in self.pos} self.assertEqual(solution, {x: 1 for x in self.pos})
def test_at_most_lower(self): cardinality = cardnet.at_most(self.function.support, len(self.pos) - 1) sat = expr.And(self.function, *cardinality).to_cnf().satisfy_one() self.assertIsNone(sat)
def test_at_most_zero(self): cardinality = cardnet.at_most(self.function.support, 0) sat = expr.And(self.function, *cardinality).to_cnf().satisfy_one() self.assertIsNone(sat)
def at_most(inputs, p, equivalent=None): if p == 1: yield from at_most_one(inputs, equivalent) else: yield from cardnet.at_most(inputs, p, equivalent)