Ejemplo n.º 1
0
def test_CheckOldAssump():
    # TODO: Make these tests more complete

    class Test1(Expr):
        def _eval_is_extended_positive(self):
            return True

        def _eval_is_extended_negative(self):
            return False

    class Test2(Expr):
        def _eval_is_finite(self):
            return True

        def _eval_is_extended_positive(self):
            return True

        def _eval_is_extended_negative(self):
            return False

    t1 = Test1()
    t2 = Test2()

    # We can't say if it's positive or negative in the old assumptions without
    # bounded. Remember, True means "no new knowledge", and
    # Q.positive(t2) means "t2 is positive."
    assert CheckOldAssump(Q.positive(t1)) == to_NNF(True)
    assert CheckOldAssump(Q.negative(t1)) == to_NNF(~Q.negative(t1))

    assert CheckOldAssump(Q.positive(t2)) == to_NNF(Q.positive(t2))
    assert CheckOldAssump(Q.negative(t2)) == to_NNF(~Q.negative(t2))
Ejemplo n.º 2
0
def test_AllArgs():
    a = AllArgs(Q.zero)
    b = AllArgs(Q.positive | Q.negative)
    assert a.rcall(x * y) == to_NNF(And(Q.zero(x), Q.zero(y)))
    assert b.rcall(x * y) == to_NNF(
        And(Q.positive(x) | Q.negative(x),
            Q.positive(y) | Q.negative(y)))
Ejemplo n.º 3
0
def test_AnyArgs():
    a = AnyArgs(Q.zero)
    b = AnyArgs(Q.positive & Q.negative)
    assert a.rcall(x * y) == to_NNF(Or(Q.zero(x), Q.zero(y)))
    assert b.rcall(x * y) == to_NNF(
        Or(Q.positive(x) & Q.negative(x),
           Q.positive(y) & Q.negative(y)))
Ejemplo n.º 4
0
def test_ExactlyOneArg():
    a = ExactlyOneArg(Q.zero)
    b = ExactlyOneArg(Q.positive | Q.negative)
    assert a.rcall(x * y) == to_NNF(
        Or(Q.zero(x) & ~Q.zero(y),
           Q.zero(y) & ~Q.zero(x)))
    assert a.rcall(x * y * z) == to_NNF(
        Or(
            Q.zero(x) & ~Q.zero(y) & ~Q.zero(z),
            Q.zero(y)
            & ~Q.zero(x) & ~Q.zero(z),
            Q.zero(z) & ~Q.zero(x) & ~Q.zero(y)))
    assert b.rcall(x * y) == to_NNF(
        Or((Q.positive(x) | Q.negative(x)) & ~(Q.positive(y) | Q.negative(y)),
           (Q.positive(y) | Q.negative(y)) & ~(Q.positive(x) | Q.negative(x))))
Ejemplo n.º 5
0
 def apply(self, *args):
     return to_NNF(self.lamda(*args), get_composite_predicates())
Ejemplo n.º 6
0
 def apply(self, expr=None, is_Not=False):
     from sympy import isprime
     arg = self.args[0](expr) if callable(self.args[0]) else self.args[0]
     res = Equivalent(arg, isprime(expr))
     return to_NNF(res, get_composite_predicates())
Ejemplo n.º 7
0
 def apply(self, expr=None, is_Not=False):
     arg = self.args[0](expr) if callable(self.args[0]) else self.args[0]
     res = Equivalent(arg, evaluate_old_assump(arg))
     return to_NNF(res, get_composite_predicates())
Ejemplo n.º 8
0
 def apply(self, expr=None):
     if expr is None:
         return
     pred = to_NNF(self.pred, get_composite_predicates())
     return self._eval_apply(expr, pred)
Ejemplo n.º 9
0
 def apply(self, expr=None):
     if expr is None:
         return
     pred = to_NNF(self.pred)
     return self._eval_apply(expr, pred)
Ejemplo n.º 10
0
 def apply(self, *args):
     return to_NNF(self.lamda(*args))