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))
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) )
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) ]
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
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) )
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))
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'))))
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]
def test_N9(): with assuming(Q.real(x)): assert reduce_inequalities(abs(x-1) >2) is Or(Lt(3, x), Lt(x, -1))
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))
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)]
def test_N9(): with assuming(Q.real(x)): assert solve(abs(x-1) > 2) == Or(x < -1, x > 3)
@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)
def test_N11(): p=6/(x - 3) with assuming(Q.real(x)): assert reduce_inequalities(p <= 3) == Or(Le(5, x), Lt(x,3))
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))
def test_N3(): with assuming(Q.real(x)): assert reduce_inequalities(abs(x) < 1) is And(Lt(-1, x), Lt(x, 1))