Beispiel #1
0
def reduce_poly_inequalities_wrap(condition, var):
    if condition.is_Relational:
        return reduce_poly_inequalities([[condition]], var, relational=False)
    if condition.__class__ is Or:
        return reduce_poly_inequalities([list(condition.args)],
                var, relational=False)
    if condition.__class__ is And:
        intervals = [reduce_poly_inequalities([[arg]], var, relational=False)
            for arg in condition.args]
        I = intervals[0]
        for i in intervals:
            I = I.intersect(i)
        return I
Beispiel #2
0
def _reduce_inequalities(conditions, var, **kwargs):
    try:
        return reduce_poly_inequalities(conditions, var, **kwargs)
    except PolynomialError:
        raise ValueError("Reduction of condition failed %s\n" % conditions[0])
Beispiel #3
0
def test_reduce_poly_inequalities_real_relational():
    global_assumptions.add(Q.real(x))
    global_assumptions.add(Q.real(y))

    assert reduce_poly_inequalities([[Eq(x ** 2, 0)]], x, relational=True) == Eq(x, 0)
    assert reduce_poly_inequalities([[Le(x ** 2, 0)]], x, relational=True) == Eq(x, 0)
    assert reduce_poly_inequalities([[Lt(x ** 2, 0)]], x, relational=True) == False
    assert reduce_poly_inequalities([[Ge(x ** 2, 0)]], x, relational=True) == True
    assert reduce_poly_inequalities([[Gt(x ** 2, 0)]], x, relational=True) == Or(Lt(x, 0), Lt(0, x))
    assert reduce_poly_inequalities([[Ne(x ** 2, 0)]], x, relational=True) == Or(Lt(x, 0), Lt(0, x))

    assert reduce_poly_inequalities([[Eq(x ** 2, 1)]], x, relational=True) == Or(Eq(x, -1), Eq(x, 1))
    assert reduce_poly_inequalities([[Le(x ** 2, 1)]], x, relational=True) == And(Le(-1, x), Le(x, 1))
    assert reduce_poly_inequalities([[Lt(x ** 2, 1)]], x, relational=True) == And(Lt(-1, x), Lt(x, 1))
    assert reduce_poly_inequalities([[Ge(x ** 2, 1)]], x, relational=True) == Or(Le(x, -1), Le(1, x))
    assert reduce_poly_inequalities([[Gt(x ** 2, 1)]], x, relational=True) == Or(Lt(x, -1), Lt(1, x))
    assert reduce_poly_inequalities([[Ne(x ** 2, 1)]], x, relational=True) == Or(
        Lt(x, -1), And(Lt(-1, x), Lt(x, 1)), Lt(1, x)
    )

    assert (
        reduce_poly_inequalities([[Eq(x ** 2, 1.0)]], x, relational=True).evalf() == Or(Eq(x, -1.0), Eq(x, 1.0)).evalf()
    )
    assert reduce_poly_inequalities([[Le(x ** 2, 1.0)]], x, relational=True) == And(Le(-1.0, x), Le(x, 1.0))
    assert reduce_poly_inequalities([[Lt(x ** 2, 1.0)]], x, relational=True) == And(Lt(-1.0, x), Lt(x, 1.0))
    assert reduce_poly_inequalities([[Ge(x ** 2, 1.0)]], x, relational=True) == Or(Le(x, -1.0), Le(1.0, x))
    assert reduce_poly_inequalities([[Gt(x ** 2, 1.0)]], x, relational=True) == Or(Lt(x, -1.0), Lt(1.0, x))
    assert reduce_poly_inequalities([[Ne(x ** 2, 1.0)]], x, relational=True) == Or(
        Lt(x, -1.0), And(Lt(-1.0, x), Lt(x, 1.0)), Lt(1.0, x)
    )

    global_assumptions.remove(Q.real(x))
    global_assumptions.remove(Q.real(y))
Beispiel #4
0
def test_reduce_poly_inequalities_real_interval():
    global_assumptions.add(Q.real(x))
    global_assumptions.add(Q.real(y))

    assert reduce_poly_inequalities([[Eq(x ** 2, 0)]], x, relational=False) == FiniteSet(0)
    assert reduce_poly_inequalities([[Le(x ** 2, 0)]], x, relational=False) == FiniteSet(0)
    assert reduce_poly_inequalities([[Lt(x ** 2, 0)]], x, relational=False) == S.EmptySet
    assert reduce_poly_inequalities([[Ge(x ** 2, 0)]], x, relational=False) == Interval(-oo, oo)
    assert reduce_poly_inequalities([[Gt(x ** 2, 0)]], x, relational=False) == FiniteSet(0).complement
    assert reduce_poly_inequalities([[Ne(x ** 2, 0)]], x, relational=False) == FiniteSet(0).complement

    assert reduce_poly_inequalities([[Eq(x ** 2, 1)]], x, relational=False) == FiniteSet(-1, 1)
    assert reduce_poly_inequalities([[Le(x ** 2, 1)]], x, relational=False) == Interval(-1, 1)
    assert reduce_poly_inequalities([[Lt(x ** 2, 1)]], x, relational=False) == Interval(-1, 1, True, True)
    assert reduce_poly_inequalities([[Ge(x ** 2, 1)]], x, relational=False) == Union(Interval(-oo, -1), Interval(1, oo))
    assert reduce_poly_inequalities([[Gt(x ** 2, 1)]], x, relational=False) == Interval(-1, 1).complement
    assert reduce_poly_inequalities([[Ne(x ** 2, 1)]], x, relational=False) == FiniteSet(-1, 1).complement
    assert reduce_poly_inequalities([[Eq(x ** 2, 1.0)]], x, relational=False) == FiniteSet(-1.0, 1.0).evalf()
    assert reduce_poly_inequalities([[Le(x ** 2, 1.0)]], x, relational=False) == Interval(-1.0, 1.0)
    assert reduce_poly_inequalities([[Lt(x ** 2, 1.0)]], x, relational=False) == Interval(-1.0, 1.0, True, True)
    assert reduce_poly_inequalities([[Ge(x ** 2, 1.0)]], x, relational=False) == Union(
        Interval(-inf, -1.0), Interval(1.0, inf)
    )
    assert reduce_poly_inequalities([[Gt(x ** 2, 1.0)]], x, relational=False) == Union(
        Interval(-inf, -1.0, right_open=True), Interval(1.0, inf, left_open=True)
    )
    assert reduce_poly_inequalities([[Ne(x ** 2, 1.0)]], x, relational=False) == FiniteSet(-1.0, 1.0).complement

    s = sqrt(2)

    assert reduce_poly_inequalities([[Lt(x ** 2 - 1, 0), Gt(x ** 2 - 1, 0)]], x, relational=False) == S.EmptySet
    assert reduce_poly_inequalities([[Le(x ** 2 - 1, 0), Ge(x ** 2 - 1, 0)]], x, relational=False) == FiniteSet(-1, 1)
    assert reduce_poly_inequalities([[Le(x ** 2 - 2, 0), Ge(x ** 2 - 1, 0)]], x, relational=False) == Union(
        Interval(-s, -1, False, False), Interval(1, s, False, False)
    )
    assert reduce_poly_inequalities([[Le(x ** 2 - 2, 0), Gt(x ** 2 - 1, 0)]], x, relational=False) == Union(
        Interval(-s, -1, False, True), Interval(1, s, True, False)
    )
    assert reduce_poly_inequalities([[Lt(x ** 2 - 2, 0), Ge(x ** 2 - 1, 0)]], x, relational=False) == Union(
        Interval(-s, -1, True, False), Interval(1, s, False, True)
    )
    assert reduce_poly_inequalities([[Lt(x ** 2 - 2, 0), Gt(x ** 2 - 1, 0)]], x, relational=False) == Union(
        Interval(-s, -1, True, True), Interval(1, s, True, True)
    )
    assert reduce_poly_inequalities([[Lt(x ** 2 - 2, 0), Ne(x ** 2 - 1, 0)]], x, relational=False) == Union(
        Interval(-s, -1, True, True), Interval(-1, 1, True, True), Interval(1, s, True, True)
    )

    global_assumptions.remove(Q.real(x))
    global_assumptions.remove(Q.real(y))
Beispiel #5
0
def test_reduce_poly_inequalities_complex_relational():
    cond = Eq(im(x), 0)

    assert reduce_poly_inequalities([[Eq(x ** 2, 0)]], x, relational=True) == And(Eq(re(x), 0), cond)
    assert reduce_poly_inequalities([[Le(x ** 2, 0)]], x, relational=True) == And(Eq(re(x), 0), cond)
    assert reduce_poly_inequalities([[Lt(x ** 2, 0)]], x, relational=True) == False
    assert reduce_poly_inequalities([[Ge(x ** 2, 0)]], x, relational=True) == cond
    assert reduce_poly_inequalities([[Gt(x ** 2, 0)]], x, relational=True) == And(Or(Lt(re(x), 0), Lt(0, re(x))), cond)
    assert reduce_poly_inequalities([[Ne(x ** 2, 0)]], x, relational=True) == And(Or(Lt(re(x), 0), Lt(0, re(x))), cond)

    assert reduce_poly_inequalities([[Eq(x ** 2, 1)]], x, relational=True) == And(Or(Eq(re(x), -1), Eq(re(x), 1)), cond)
    assert reduce_poly_inequalities([[Le(x ** 2, 1)]], x, relational=True) == And(
        And(Le(-1, re(x)), Le(re(x), 1)), cond
    )
    assert reduce_poly_inequalities([[Lt(x ** 2, 1)]], x, relational=True) == And(
        And(Lt(-1, re(x)), Lt(re(x), 1)), cond
    )
    assert reduce_poly_inequalities([[Ge(x ** 2, 1)]], x, relational=True) == And(Or(Le(re(x), -1), Le(1, re(x))), cond)
    assert reduce_poly_inequalities([[Gt(x ** 2, 1)]], x, relational=True) == And(Or(Lt(re(x), -1), Lt(1, re(x))), cond)
    assert reduce_poly_inequalities([[Ne(x ** 2, 1)]], x, relational=True) == And(
        Or(Lt(re(x), -1), And(Lt(-1, re(x)), Lt(re(x), 1)), Lt(1, re(x))), cond
    )

    assert reduce_poly_inequalities([[Eq(x ** 2, 1.0)]], x, relational=True).evalf() == And(
        Or(Eq(re(x), -1.0), Eq(re(x), 1.0)), cond
    )
    assert reduce_poly_inequalities([[Le(x ** 2, 1.0)]], x, relational=True) == And(
        And(Le(-1.0, re(x)), Le(re(x), 1.0)), cond
    )
    assert reduce_poly_inequalities([[Lt(x ** 2, 1.0)]], x, relational=True) == And(
        And(Lt(-1.0, re(x)), Lt(re(x), 1.0)), cond
    )
    assert reduce_poly_inequalities([[Ge(x ** 2, 1.0)]], x, relational=True) == And(
        Or(Le(re(x), -1.0), Le(1.0, re(x))), cond
    )
    assert reduce_poly_inequalities([[Gt(x ** 2, 1.0)]], x, relational=True) == And(
        Or(Lt(re(x), -1.0), Lt(1.0, re(x))), cond
    )
    assert reduce_poly_inequalities([[Ne(x ** 2, 1.0)]], x, relational=True) == And(
        Or(Lt(re(x), -1.0), And(Lt(-1.0, re(x)), Lt(re(x), 1.0)), Lt(1.0, re(x))), cond
    )
Beispiel #6
0
def _reduce_inequalities(conditions, var, **kwargs):
    try:
        return reduce_poly_inequalities(conditions, var, **kwargs)
    except PolynomialError:
        raise ValueError("Reduction of condition failed %s\n" % conditions[0])
Beispiel #7
0
def test_reduce_poly_inequalities_complex_relational():
    cond = Eq(im(x), 0)

    assert reduce_poly_inequalities([[Eq(x**2, 0)]], x,
                                    relational=True) == And(
                                        Eq(re(x), 0), cond)
    assert reduce_poly_inequalities([[Le(x**2, 0)]], x,
                                    relational=True) == And(
                                        Eq(re(x), 0), cond)
    assert reduce_poly_inequalities([[Lt(x**2, 0)]], x,
                                    relational=True) == False
    assert reduce_poly_inequalities([[Ge(x**2, 0)]], x,
                                    relational=True) == cond
    assert reduce_poly_inequalities([[Gt(x**2, 0)]], x,
                                    relational=True) == And(
                                        Or(Lt(re(x), 0), Lt(0, re(x))), cond)
    assert reduce_poly_inequalities([[Ne(x**2, 0)]], x,
                                    relational=True) == And(
                                        Or(Lt(re(x), 0), Lt(0, re(x))), cond)

    assert reduce_poly_inequalities([[Eq(x**2, 1)]], x,
                                    relational=True) == And(
                                        Or(Eq(re(x), -1), Eq(re(x), 1)), cond)
    assert reduce_poly_inequalities([[Le(x**2, 1)]], x,
                                    relational=True) == And(
                                        And(Le(-1, re(x)), Le(re(x), 1)), cond)
    assert reduce_poly_inequalities([[Lt(x**2, 1)]], x,
                                    relational=True) == And(
                                        And(Lt(-1, re(x)), Lt(re(x), 1)), cond)
    assert reduce_poly_inequalities([[Ge(x**2, 1)]], x,
                                    relational=True) == And(
                                        Or(Le(re(x), -1), Le(1, re(x))), cond)
    assert reduce_poly_inequalities([[Gt(x**2, 1)]], x,
                                    relational=True) == And(
                                        Or(Lt(re(x), -1), Lt(1, re(x))), cond)
    assert reduce_poly_inequalities([[Ne(x**2, 1)]], x,
                                    relational=True) == And(
                                        Or(Lt(re(x), -1),
                                           And(Lt(-1, re(x)), Lt(re(x), 1)),
                                           Lt(1, re(x))), cond)

    assert reduce_poly_inequalities([[Eq(x**2, 1.0)]], x,
                                    relational=True).evalf() == And(
                                        Or(Eq(re(x), -1.0), Eq(re(x), 1.0)),
                                        cond)
    assert reduce_poly_inequalities([[Le(x**2, 1.0)]], x,
                                    relational=True) == And(
                                        And(Le(-1.0, re(x)), Le(re(x), 1.0)),
                                        cond)
    assert reduce_poly_inequalities([[Lt(x**2, 1.0)]], x,
                                    relational=True) == And(
                                        And(Lt(-1.0, re(x)), Lt(re(x), 1.0)),
                                        cond)
    assert reduce_poly_inequalities([[Ge(x**2, 1.0)]], x,
                                    relational=True) == And(
                                        Or(Le(re(x), -1.0), Le(1.0, re(x))),
                                        cond)
    assert reduce_poly_inequalities([[Gt(x**2, 1.0)]], x,
                                    relational=True) == And(
                                        Or(Lt(re(x), -1.0), Lt(1.0, re(x))),
                                        cond)
    assert reduce_poly_inequalities(
        [[Ne(x**2, 1.0)]], x, relational=True) == And(
            Or(Lt(re(x), -1.0), And(Lt(-1.0, re(x)), Lt(re(x), 1.0)),
               Lt(1.0, re(x))), cond)
Beispiel #8
0
def test_reduce_poly_inequalities_real_interval():
    global_assumptions.add(Q.real(x))
    global_assumptions.add(Q.real(y))

    assert reduce_poly_inequalities([[Eq(x**2, 0)]], x,
                                    relational=False) == FiniteSet(0)
    assert reduce_poly_inequalities([[Le(x**2, 0)]], x,
                                    relational=False) == FiniteSet(0)
    assert reduce_poly_inequalities([[Lt(x**2, 0)]], x,
                                    relational=False) == S.EmptySet
    assert reduce_poly_inequalities([[Ge(x**2, 0)]], x,
                                    relational=False) == Interval(-oo, oo)
    assert reduce_poly_inequalities(
        [[Gt(x**2, 0)]], x, relational=False) == FiniteSet(0).complement
    assert reduce_poly_inequalities(
        [[Ne(x**2, 0)]], x, relational=False) == FiniteSet(0).complement

    assert reduce_poly_inequalities([[Eq(x**2, 1)]], x,
                                    relational=False) == FiniteSet(-1, 1)
    assert reduce_poly_inequalities([[Le(x**2, 1)]], x,
                                    relational=False) == Interval(-1, 1)
    assert reduce_poly_inequalities([[Lt(x**2, 1)]], x,
                                    relational=False) == Interval(
                                        -1, 1, True, True)
    assert reduce_poly_inequalities([[Ge(x**2, 1)]], x,
                                    relational=False) == Union(
                                        Interval(-oo, -1), Interval(1, oo))
    assert reduce_poly_inequalities([[Gt(x**2, 1)]], x,
                                    relational=False) == Interval(-1,
                                                                  1).complement
    assert reduce_poly_inequalities(
        [[Ne(x**2, 1)]], x, relational=False) == FiniteSet(-1, 1).complement
    assert reduce_poly_inequalities([[Eq(x**2, 1.0)]],
                                    x, relational=False) == FiniteSet(
                                        -1.0, 1.0).evalf()
    assert reduce_poly_inequalities([[Le(x**2, 1.0)]], x,
                                    relational=False) == Interval(-1.0, 1.0)
    assert reduce_poly_inequalities([[Lt(x**2, 1.0)]], x,
                                    relational=False) == Interval(
                                        -1.0, 1.0, True, True)
    assert reduce_poly_inequalities([[Ge(x**2, 1.0)]], x,
                                    relational=False) == Union(
                                        Interval(-inf, -1.0),
                                        Interval(1.0, inf))
    assert reduce_poly_inequalities([[Gt(x**2, 1.0)]], x,
                                    relational=False) == Union(
                                        Interval(-inf, -1.0, right_open=True),
                                        Interval(1.0, inf, left_open=True))
    assert reduce_poly_inequalities([[Ne(x**2, 1.0)]],
                                    x, relational=False) == FiniteSet(
                                        -1.0, 1.0).complement

    s = sqrt(2)

    assert reduce_poly_inequalities(
        [[Lt(x**2 - 1, 0), Gt(x**2 - 1, 0)]], x,
        relational=False) == S.EmptySet
    assert reduce_poly_inequalities(
        [[Le(x**2 - 1, 0), Ge(x**2 - 1, 0)]], x,
        relational=False) == FiniteSet(-1, 1)
    assert reduce_poly_inequalities(
        [[Le(x**2 - 2, 0), Ge(x**2 - 1, 0)]], x,
        relational=False) == Union(Interval(-s, -1, False, False),
                                   Interval(1, s, False, False))
    assert reduce_poly_inequalities(
        [[Le(x**2 - 2, 0), Gt(x**2 - 1, 0)]], x,
        relational=False) == Union(Interval(-s, -1, False, True),
                                   Interval(1, s, True, False))
    assert reduce_poly_inequalities(
        [[Lt(x**2 - 2, 0), Ge(x**2 - 1, 0)]], x,
        relational=False) == Union(Interval(-s, -1, True, False),
                                   Interval(1, s, False, True))
    assert reduce_poly_inequalities(
        [[Lt(x**2 - 2, 0), Gt(x**2 - 1, 0)]], x,
        relational=False) == Union(Interval(-s, -1, True, True),
                                   Interval(1, s, True, True))
    assert reduce_poly_inequalities(
        [[Lt(x**2 - 2, 0), Ne(x**2 - 1, 0)]], x,
        relational=False) == Union(Interval(-s, -1, True, True),
                                   Interval(-1, 1, True, True),
                                   Interval(1, s, True, True))

    global_assumptions.remove(Q.real(x))
    global_assumptions.remove(Q.real(y))
Beispiel #9
0
def test_reduce_poly_inequalities_real_relational():
    global_assumptions.add(Q.real(x))
    global_assumptions.add(Q.real(y))

    assert reduce_poly_inequalities([[Eq(x**2, 0)]], x,
                                    relational=True) == Eq(x, 0)
    assert reduce_poly_inequalities([[Le(x**2, 0)]], x,
                                    relational=True) == Eq(x, 0)
    assert reduce_poly_inequalities([[Lt(x**2, 0)]], x,
                                    relational=True) == False
    assert reduce_poly_inequalities([[Ge(x**2, 0)]], x,
                                    relational=True) == True
    assert reduce_poly_inequalities([[Gt(x**2, 0)]], x,
                                    relational=True) == Or(Lt(x, 0), Lt(0, x))
    assert reduce_poly_inequalities([[Ne(x**2, 0)]], x,
                                    relational=True) == Or(Lt(x, 0), Lt(0, x))

    assert reduce_poly_inequalities([[Eq(x**2, 1)]], x, relational=True) == Or(
        Eq(x, -1), Eq(x, 1))
    assert reduce_poly_inequalities([[Le(x**2, 1)]], x,
                                    relational=True) == And(
                                        Le(-1, x), Le(x, 1))
    assert reduce_poly_inequalities([[Lt(x**2, 1)]], x,
                                    relational=True) == And(
                                        Lt(-1, x), Lt(x, 1))
    assert reduce_poly_inequalities([[Ge(x**2, 1)]], x, relational=True) == Or(
        Le(x, -1), Le(1, x))
    assert reduce_poly_inequalities([[Gt(x**2, 1)]], x, relational=True) == Or(
        Lt(x, -1), Lt(1, x))
    assert reduce_poly_inequalities([[Ne(x**2, 1)]], x, relational=True) == Or(
        Lt(x, -1), And(Lt(-1, x), Lt(x, 1)), Lt(1, x))

    assert reduce_poly_inequalities([[Eq(x**2, 1.0)]], x,
                                    relational=True).evalf() == Or(
                                        Eq(x, -1.0), Eq(x, 1.0)).evalf()
    assert reduce_poly_inequalities([[Le(x**2, 1.0)]], x,
                                    relational=True) == And(
                                        Le(-1.0, x), Le(x, 1.0))
    assert reduce_poly_inequalities([[Lt(x**2, 1.0)]], x,
                                    relational=True) == And(
                                        Lt(-1.0, x), Lt(x, 1.0))
    assert reduce_poly_inequalities([[Ge(x**2, 1.0)]], x,
                                    relational=True) == Or(
                                        Le(x, -1.0), Le(1.0, x))
    assert reduce_poly_inequalities([[Gt(x**2, 1.0)]], x,
                                    relational=True) == Or(
                                        Lt(x, -1.0), Lt(1.0, x))
    assert reduce_poly_inequalities([[Ne(x**2, 1.0)]], x,
                                    relational=True) == Or(
                                        Lt(x, -1.0),
                                        And(Lt(-1.0, x), Lt(x, 1.0)),
                                        Lt(1.0, x))

    global_assumptions.remove(Q.real(x))
    global_assumptions.remove(Q.real(y))
Beispiel #10
0
def test_reduce_poly_inequalities_real_interval():
    global_assumptions.add(x_assume)
    global_assumptions.add(y_assume)

    assert reduce_poly_inequalities([[Eq(x**2, 0)]], x, relational=False) == [Interval(0, 0)]
    assert reduce_poly_inequalities([[Le(x**2, 0)]], x, relational=False) == [Interval(0, 0)]
    assert reduce_poly_inequalities([[Lt(x**2, 0)]], x, relational=False) == []
    assert reduce_poly_inequalities([[Ge(x**2, 0)]], x, relational=False) == [Interval(-oo, oo)]
    assert reduce_poly_inequalities([[Gt(x**2, 0)]], x, relational=False) == [Interval(-oo, 0, right_open=True), Interval(0, oo, left_open=True)]
    assert reduce_poly_inequalities([[Ne(x**2, 0)]], x, relational=False) == [Interval(-oo, 0, right_open=True), Interval(0, oo, left_open=True)]

    assert reduce_poly_inequalities([[Eq(x**2, 1)]], x, relational=False) == [Interval(-1,-1), Interval(1, 1)]
    assert reduce_poly_inequalities([[Le(x**2, 1)]], x, relational=False) == [Interval(-1, 1)]
    assert reduce_poly_inequalities([[Lt(x**2, 1)]], x, relational=False) == [Interval(-1, 1, True, True)]
    assert reduce_poly_inequalities([[Ge(x**2, 1)]], x, relational=False) == [Interval(-oo, -1), Interval(1, oo)]
    assert reduce_poly_inequalities([[Gt(x**2, 1)]], x, relational=False) == [Interval(-oo, -1, right_open=True), Interval(1, oo, left_open=True)]
    assert reduce_poly_inequalities([[Ne(x**2, 1)]], x, relational=False) == [Interval(-oo, -1, right_open=True), Interval(-1, 1, True, True), Interval(1, oo, left_open=True)]

    assert reduce_poly_inequalities([[Eq(x**2, 1.0)]], x, relational=False) == [Interval(-1.0,-1.0), Interval(1.0, 1.0)]
    assert reduce_poly_inequalities([[Le(x**2, 1.0)]], x, relational=False) == [Interval(-1.0, 1.0)]
    assert reduce_poly_inequalities([[Lt(x**2, 1.0)]], x, relational=False) == [Interval(-1.0, 1.0, True, True)]
    assert reduce_poly_inequalities([[Ge(x**2, 1.0)]], x, relational=False) == [Interval(-inf, -1.0), Interval(1.0, inf)]
    assert reduce_poly_inequalities([[Gt(x**2, 1.0)]], x, relational=False) == [Interval(-inf, -1.0, right_open=True), Interval(1.0, inf, left_open=True)]
    assert reduce_poly_inequalities([[Ne(x**2, 1.0)]], x, relational=False) == [Interval(-inf, -1.0, right_open=True), Interval(-1.0, 1.0, True, True), Interval(1.0, inf, left_open=True)]

    s = sqrt(2)

    assert reduce_poly_inequalities([[Lt(x**2 - 1, 0), Gt(x**2 - 1, 0)]], x, relational=False) == []
    assert reduce_poly_inequalities([[Le(x**2 - 1, 0), Ge(x**2 - 1, 0)]], x, relational=False) == [Interval(-1,-1), Interval(1, 1)]
    assert reduce_poly_inequalities([[Le(x**2 - 2, 0), Ge(x**2 - 1, 0)]], x, relational=False) == [Interval(-s, -1, False, False), Interval(1, s, False, False)]
    assert reduce_poly_inequalities([[Le(x**2 - 2, 0), Gt(x**2 - 1, 0)]], x, relational=False) == [Interval(-s, -1, False, True), Interval(1, s, True, False)]
    assert reduce_poly_inequalities([[Lt(x**2 - 2, 0), Ge(x**2 - 1, 0)]], x, relational=False) == [Interval(-s, -1, True, False), Interval(1, s, False, True)]
    assert reduce_poly_inequalities([[Lt(x**2 - 2, 0), Gt(x**2 - 1, 0)]], x, relational=False) == [Interval(-s, -1, True, True), Interval(1, s, True, True)]
    assert reduce_poly_inequalities([[Lt(x**2 - 2, 0), Ne(x**2 - 1, 0)]], x, relational=False) == [Interval(-s, -1, True, True), Interval(-1, 1, True, True), Interval(1, s, True, True)]

    global_assumptions.remove(x_assume)
    global_assumptions.remove(y_assume)
Beispiel #11
0
def test_reduce_poly_inequalities_real_relational():
    with assuming(Q.real(x), Q.real(y)):
        assert reduce_poly_inequalities([[Eq(x ** 2, 0)]], x, relational=True) == Eq(x, 0)
        assert reduce_poly_inequalities([[Le(x ** 2, 0)]], x, relational=True) == Eq(x, 0)
        assert reduce_poly_inequalities([[Lt(x ** 2, 0)]], x, relational=True) is False
        assert reduce_poly_inequalities([[Ge(x ** 2, 0)]], x, relational=True) is True
        assert reduce_poly_inequalities([[Gt(x ** 2, 0)]], x, relational=True) == Or(Lt(x, 0), Lt(0, x))
        assert reduce_poly_inequalities([[Ne(x ** 2, 0)]], x, relational=True) == Or(Lt(x, 0), Lt(0, x))

        assert reduce_poly_inequalities([[Eq(x ** 2, 1)]], x, relational=True) == Or(Eq(x, -1), Eq(x, 1))
        assert reduce_poly_inequalities([[Le(x ** 2, 1)]], x, relational=True) == And(Le(-1, x), Le(x, 1))
        assert reduce_poly_inequalities([[Lt(x ** 2, 1)]], x, relational=True) == And(Lt(-1, x), Lt(x, 1))
        assert reduce_poly_inequalities([[Ge(x ** 2, 1)]], x, relational=True) == Or(Le(x, -1), Le(1, x))
        assert reduce_poly_inequalities([[Gt(x ** 2, 1)]], x, relational=True) == Or(Lt(x, -1), Lt(1, x))
        assert reduce_poly_inequalities([[Ne(x ** 2, 1)]], x, relational=True) == Or(
            Lt(x, -1), And(Lt(-1, x), Lt(x, 1)), Lt(1, x)
        )

        assert reduce_poly_inequalities([[Le(x ** 2, 1.0)]], x, relational=True) == And(Le(-1.0, x), Le(x, 1.0))
        assert reduce_poly_inequalities([[Lt(x ** 2, 1.0)]], x, relational=True) == And(Lt(-1.0, x), Lt(x, 1.0))
        assert reduce_poly_inequalities([[Ge(x ** 2, 1.0)]], x, relational=True) == Or(Le(x, -1.0), Le(1.0, x))
        assert reduce_poly_inequalities([[Gt(x ** 2, 1.0)]], x, relational=True) == Or(Lt(x, -1.0), Lt(1.0, x))
        assert reduce_poly_inequalities([[Ne(x ** 2, 1.0)]], x, relational=True) == Or(
            Lt(x, -1.0), And(Lt(-1.0, x), Lt(x, 1.0)), Lt(1.0, x)
        )