Beispiel #1
0
def test_reduce_rational_inequalities_real_relational():
    def OpenInterval(a, b):
        return Interval(a, b, True, True)
    def LeftOpenInterval(a, b):
        return Interval(a, b, True, False)
    def RightOpenInterval(a, b):
        return Interval(a, b, False, True)

    with assuming(Q.real(x)):
        assert reduce_rational_inequalities([[(x**2 + 3*x + 2)/(x**2 - 16) >= 0]], x, relational=False) == \
            Union(OpenInterval(-oo, -4), Interval(-2, -1), OpenInterval(4, oo))

        assert reduce_rational_inequalities([[((-2*x - 10)*(3 - x))/((x**2 + 5)*(x - 2)**2) < 0]], x, relational=False) == \
            Union(OpenInterval(-5, 2), OpenInterval(2, 3))

        assert reduce_rational_inequalities([[(x + 1)/(x - 5) <= 0]], x, assume=Q.real(x), relational=False) == \
            RightOpenInterval(-1, 5)

        assert reduce_rational_inequalities([[(x**2 + 4*x + 3)/(x - 1) > 0]], x, assume=Q.real(x), relational=False) == \
            Union(OpenInterval(-3, -1), OpenInterval(1, oo))

        assert reduce_rational_inequalities([[(x**2 - 16)/(x - 1)**2 < 0]], x, assume=Q.real(x), relational=False) == \
            Union(OpenInterval(-4, 1), OpenInterval(1, 4))

        assert reduce_rational_inequalities([[(3*x + 1)/(x + 4) >= 1]], x, assume=Q.real(x), relational=False) == \
            Union(OpenInterval(-oo, -4), RightOpenInterval(S(3)/2, oo))

        assert reduce_rational_inequalities([[(x - 8)/x <= 3 - x]], x, assume=Q.real(x), relational=False) == \
            Union(LeftOpenInterval(-oo, -2), LeftOpenInterval(0, 4))
Beispiel #2
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)
        )
Beispiel #3
0
def test_reduce_rational_inequalities_real_relational():
    def OpenInterval(a, b):
        return Interval(a, b, True, True)

    def LeftOpenInterval(a, b):
        return Interval(a, b, True, False)

    def RightOpenInterval(a, b):
        return Interval(a, b, False, True)

    with assuming(Q.real(x)):
        assert reduce_rational_inequalities([[(x**2 + 3*x + 2)/(x**2 - 16) >= 0]], x, relational=False) == \
            Union(OpenInterval(-oo, -4), Interval(-2, -1), OpenInterval(4, oo))

        assert reduce_rational_inequalities([[((-2*x - 10)*(3 - x))/((x**2 + 5)*(x - 2)**2) < 0]], x, relational=False) == \
            Union(OpenInterval(-5, 2), OpenInterval(2, 3))

        assert reduce_rational_inequalities([[(x + 1)/(x - 5) <= 0]], x, assume=Q.real(x), relational=False) == \
            RightOpenInterval(-1, 5)

        assert reduce_rational_inequalities([[(x**2 + 4*x + 3)/(x - 1) > 0]], x, assume=Q.real(x), relational=False) == \
            Union(OpenInterval(-3, -1), OpenInterval(1, oo))

        assert reduce_rational_inequalities([[(x**2 - 16)/(x - 1)**2 < 0]], x, assume=Q.real(x), relational=False) == \
            Union(OpenInterval(-4, 1), OpenInterval(1, 4))

        assert reduce_rational_inequalities([[(3*x + 1)/(x + 4) >= 1]], x, assume=Q.real(x), relational=False) == \
            Union(OpenInterval(-oo, -4), RightOpenInterval(S(3)/2, oo))

        assert reduce_rational_inequalities([[(x - 8)/x <= 3 - x]], x, assume=Q.real(x), relational=False) == \
            Union(LeftOpenInterval(-oo, -2), LeftOpenInterval(0, 4))
Beispiel #4
0
def test_M27():
    x = symbols('x', real=True)
    b = symbols('b', real=True)
    with assuming(Q.is_true(sin(cos(1 / E**2) + 1) + b > 0)):
        solve(log(acos(asin(x**R(2, 3) - b) - 1)) + 2, x) == [
            -b - sin(1 + cos(1 / e**2))**R(3 / 2),
            b + sin(1 + cos(1 / e**2))**R(3 / 2)
        ]
Beispiel #5
0
def test_matsolve():
    n = Symbol('n', integer=True)
    A = MatrixSymbol('A', n, n)
    x = MatrixSymbol('x', n, 1)

    with assuming(Q.fullrank(A)):
        assert optimize(A**(-1) * x, [matinv_opt]) == MatrixSolve(A, x)
        assert optimize(A**(-1) * x + x, [matinv_opt]) == MatrixSolve(A, x) + x
Beispiel #6
0
def test_reduce_poly_inequalities_real_interval():
    with assuming(Q.real(x), 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)
        )
Beispiel #7
0
def test_reduce_poly_inequalities_real_interval():
    with assuming(Q.real(x), Q.real(y)):
        assert reduce_rational_inequalities(
            [[Eq(x**2, 0)]], x, relational=False) == FiniteSet(0)
        assert reduce_rational_inequalities(
            [[Le(x**2, 0)]], x, relational=False) == FiniteSet(0)
        assert reduce_rational_inequalities(
            [[Lt(x**2, 0)]], x, relational=False) == S.EmptySet
        assert reduce_rational_inequalities(
            [[Ge(x**2, 0)]], x, relational=False) == Interval(-oo, oo)
        assert reduce_rational_inequalities(
            [[Gt(x**2, 0)]], x, relational=False) == FiniteSet(0).complement
        assert reduce_rational_inequalities(
            [[Ne(x**2, 0)]], x, relational=False) == FiniteSet(0).complement

        assert reduce_rational_inequalities(
            [[Eq(x**2, 1)]], x, relational=False) == FiniteSet(-1, 1)
        assert reduce_rational_inequalities(
            [[Le(x**2, 1)]], x, relational=False) == Interval(-1, 1)
        assert reduce_rational_inequalities(
            [[Lt(x**2, 1)]], x, relational=False) == Interval(-1, 1, True, True)
        assert reduce_rational_inequalities([[Ge(x**2, 1)]], x, relational=False) == Union(Interval(-oo, -1), Interval(1, oo))
        assert reduce_rational_inequalities(
            [[Gt(x**2, 1)]], x, relational=False) == Interval(-1, 1).complement
        assert reduce_rational_inequalities(
            [[Ne(x**2, 1)]], x, relational=False) == FiniteSet(-1, 1).complement
        assert reduce_rational_inequalities([[Eq(
            x**2, 1.0)]], x, relational=False) == FiniteSet(-1.0, 1.0).evalf()
        assert reduce_rational_inequalities(
            [[Le(x**2, 1.0)]], x, relational=False) == Interval(-1.0, 1.0)
        assert reduce_rational_inequalities([[Lt(
            x**2, 1.0)]], x, relational=False) == Interval(-1.0, 1.0, True, True)
        assert reduce_rational_inequalities([[Ge(x**2, 1.0)]], x, relational=False) == Union(Interval(-inf, -1.0), Interval(1.0, inf))
        assert reduce_rational_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_rational_inequalities([[Ne(
            x**2, 1.0)]], x, relational=False) == FiniteSet(-1.0, 1.0).complement

        s = sqrt(2)

        assert reduce_rational_inequalities([[Lt(
            x**2 - 1, 0), Gt(x**2 - 1, 0)]], x, relational=False) == S.EmptySet
        assert reduce_rational_inequalities([[Le(x**2 - 1, 0), Ge(
            x**2 - 1, 0)]], x, relational=False) == FiniteSet(-1, 1)
        assert reduce_rational_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_rational_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_rational_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_rational_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_rational_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))
Beispiel #8
0
def test_reduce_poly_inequalities_real_relational():
    with assuming(Q.real(x), Q.real(y)):
        assert reduce_rational_inequalities(
            [[Eq(x**2, 0)]], x, relational=True) == Eq(x, 0)
        assert reduce_rational_inequalities(
            [[Le(x**2, 0)]], x, relational=True) == Eq(x, 0)
        assert reduce_rational_inequalities(
            [[Lt(x**2, 0)]], x, relational=True) == False
        assert reduce_rational_inequalities(
            [[Ge(x**2, 0)]], x, relational=True) == And(Lt(-oo, x), Lt(x, oo))
        assert reduce_rational_inequalities(
            [[Gt(x**2, 0)]], x, relational=True) == Or(And(Lt(-oo, x), Lt(x, 0)), And(Lt(0, x), Lt(x, oo)))
        assert reduce_rational_inequalities(
            [[Ne(x**2, 0)]], x, relational=True) == Or(And(Lt(-oo, x), Lt(x, 0)), And(Lt(0, x), Lt(x, oo)))

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

        assert reduce_rational_inequalities(
            [[Le(x**2, 1.0)]], x, relational=True) == And(Le(-1.0, x), Le(x, 1.0))
        assert reduce_rational_inequalities(
            [[Lt(x**2, 1.0)]], x, relational=True) == And(Lt(-1.0, x), Lt(x, 1.0))
        assert reduce_rational_inequalities(
            [[Ge(x**2, 1.0)]], x, relational=True) == Or(And(Lt(Float('-inf'), x), Le(x, -1.0)),
                                                         And(Le(1.0, x), Lt(x, Float('+inf'))))
        assert reduce_rational_inequalities(
            [[Gt(x**2, 1.0)]], x, relational=True) == Or(And(Lt(Float('-inf'), x), Lt(x, -1.0)),
                                                         And(Lt(1.0, x), Lt(x, Float('+inf'))))
        assert reduce_rational_inequalities([[Ne(x**2, 1.0)]], x, relational=True) == \
            Or(And(Lt(-1.0, x), Lt(x, 1.0)), And(Lt(Float('-inf'), x), Lt(x, -1.0)),
               And(Lt(1.0, x), Lt(x, Float('+inf'))))
Beispiel #9
0
def test_reduce_poly_inequalities_real_relational():
    with assuming(Q.real(x), Q.real(y)):
        assert reduce_rational_inequalities(
            [[Eq(x**2, 0)]], x, relational=True) == Eq(x, 0)
        assert reduce_rational_inequalities(
            [[Le(x**2, 0)]], x, relational=True) == Eq(x, 0)
        assert reduce_rational_inequalities(
            [[Lt(x**2, 0)]], x, relational=True) == False
        assert reduce_rational_inequalities(
            [[Ge(x**2, 0)]], x, relational=True) == True
        assert reduce_rational_inequalities(
            [[Gt(x**2, 0)]], x, relational=True) == Or(Lt(x, 0), Gt(x, 0))
        assert reduce_rational_inequalities(
            [[Ne(x**2, 0)]], x, relational=True) == Or(Lt(x, 0), Gt(x, 0))

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

        assert reduce_rational_inequalities(
            [[Le(x**2, 1.0)]], x, relational=True) == And(Le(-1.0, x), Le(x, 1.0))
        assert reduce_rational_inequalities(
            [[Lt(x**2, 1.0)]], x, relational=True) == And(Lt(-1.0, x), Lt(x, 1.0))
        assert reduce_rational_inequalities(
            [[Ge(x**2, 1.0)]], x, relational=True) == Or(Le(x, -1.0), Ge(x, 1.0))
        assert reduce_rational_inequalities(
            [[Gt(x**2, 1.0)]], x, relational=True) == Or(Lt(x, -1.0), Gt(x, 1.0))
        assert reduce_rational_inequalities([[Ne(x**2, 1.0)]], x, relational=True) == \
            Or(Lt(x, -1.0), And(Lt(-1.0, x), Lt(x, 1.0)), Gt(x, 1.0))
def test_symmetry():
    X = MatrixSymbol('x', 10, 10)
    Y = X[:5, 5:]
    with assuming(Q.symmetric(X)):
        assert Y.T == X[5:, :5]
Beispiel #11
0
def test_N9():
    with assuming(Q.real(x)):
        assert reduce_inequalities(abs(x-1) >2) is Or(Lt(3, x), Lt(x, -1))
Beispiel #12
0
def test_N10():
    p=(x-1)*(x-2)*(x-3)*(x-4)*(x-5)
    with assuming(Q.real(x)):
        assert reduce_inequalities(expand(p) <0) == Or( And(Lt(2, x), Lt(x, 3)), And(Lt(4, x), Lt(x, 5)), Lt(x, 1))
Beispiel #13
0
def test_M27():
    x = symbols('x', real=True)
    b = symbols('b', real=True)
    with assuming(Q.is_true(sin(cos(1/E**2) + 1) + b > 0)):
        solve(log(acos(asin(x**R(2,3) - b) - 1)) + 2, x) == [-b - sin(1 + cos(1/e**2))**R(3/2), b + sin(1 + cos(1/e**2))**R(3/2)]
Beispiel #14
0
def test_N9():
    with assuming(Q.real(x)):
        assert solve(abs(x-1) > 2) == Or(x < -1, x > 3)
Beispiel #15
0
@Docstring : Solve the quadratic equation.
@Require   : Python==3.7.6; sympy==1.4
@Result    : \\
Poly(C2*x**2 + C1*x + C0, x, domain='ZZ[C0,C1,C2]')
            ________________
           /              2
   C1    \/  -4*C0*C2 + C1
- ---- - -------------------
  2*C2           2*C2
            ________________
           /              2
   C1    \/  -4*C0*C2 + C1
- ---- + -------------------
  2*C2           2*C2
'''
from sympy import symbols, Poly, roots, pretty_print
from sympy.assumptions import assuming, Q

# variables declaration
degree = 2
C = symbols(f'C0:{degree+1}')  # C_0, C_1, ..., C_degree
x = symbols('x')  # x^0, x^1, ..., x^degree
# calculate roots
with assuming(Q.nonzero(C[-1]), *map(Q.complex, C[:-1])):
    quadratic_equation = Poly(reversed(C), x)
    solutions = roots(quadratic_equation)
# display results
pretty_print(quadratic_equation, use_unicode=False)
for solution in solutions:
    pretty_print(solution, use_unicode=False)
Beispiel #16
0
def test_N9():
    with assuming(Q.real(x)):
        assert solve(abs(x-1) > 2) == Or(x < -1, x > 3)
Beispiel #17
0
def test_N11():
    p=6/(x - 3)
    with assuming(Q.real(x)):
        assert reduce_inequalities(p <= 3) == Or(Le(5, x), Lt(x,3))
Beispiel #18
0
def test_N2():
    with assuming(Q.real(x)):
        assert reduce_inequalities(x**4 - x + 1 > 0) is True
        assert reduce_inequalities(x**4 - x + 1 > 1) is Or(Lt(1, x), Lt(x, 0))
Beispiel #19
0
def test_N3():
    with assuming(Q.real(x)):
        assert reduce_inequalities(abs(x) < 1) is And(Lt(-1, x), Lt(x, 1))