def test_reduce_piecewise_inequalities(): e = abs(x - 5) < 3 ans = And(Lt(2, x), Lt(x, 8)) assert reduce_inequalities(e) == ans assert reduce_inequalities(e, x) == ans assert reduce_inequalities(abs(x - 5)) == Eq(x, 5) assert reduce_inequalities( abs(2*x + 3) >= 8) == Or(And(Le(Rational(5, 2), x), Lt(x, oo)), And(Le(x, -Rational(11, 2)), Lt(-oo, x))) assert reduce_inequalities(abs(x - 4) + abs( 3*x - 5) < 7) == And(Lt(Rational(1, 2), x), Lt(x, 4)) assert reduce_inequalities(abs(x - 4) + abs(3*abs(x) - 5) < 7) == \ Or(And(Integer(-2) < x, x < -1), And(Rational(1, 2) < x, x < 4)) nr = Symbol('nr', extended_real=False) pytest.raises(TypeError, lambda: reduce_inequalities(abs(nr - 5) < 3)) # sympy/sympy#10198 assert reduce_inequalities(-1 + 1/abs(1/x - 1) < 0) == \ Or(And(Lt(0, x), x < Rational(1, 2)), And(-oo < x, x < 0)) # sympy/sympy#10255 assert reduce_inequalities(Piecewise((1, x < 1), (3, True)) > 1) == \ And(Le(1, x), x < oo) assert reduce_inequalities(Piecewise((x**2, x < 0), (2*x, x >= 0)) < 1) == \ And(Lt(-1, x), x < Rational(1, 2))
def test_reduce_piecewise_inequalities(): e = abs(x - 5) < 3 ans = And(Lt(2, x), Lt(x, 8)) assert reduce_inequalities(e) == ans assert reduce_inequalities(e, x) == ans assert reduce_inequalities(abs(x - 5)) == Eq(x, 5) assert reduce_inequalities( abs(2*x + 3) >= 8) == Or(And(Le(Rational(5, 2), x), Lt(x, oo)), And(Le(x, -Rational(11, 2)), Lt(-oo, x))) assert reduce_inequalities(abs(x - 4) + abs( 3*x - 5) < 7) == And(Lt(Rational(1, 2), x), Lt(x, 4)) assert reduce_inequalities(abs(x - 4) + abs(3*abs(x) - 5) < 7) == \ Or(And(Integer(-2) < x, x < -1), And(Rational(1, 2) < x, x < 4)) nr = Symbol('nr', extended_real=False) pytest.raises(TypeError, lambda: reduce_inequalities(abs(nr - 5) < 3)) # sympy/sympy#10198 assert reduce_inequalities(-1 + 1/abs(1/x - 1) < 0) == \ Or(And(S.Zero < x, x < S.Half), And(-oo < x, x < S.Zero)) # sympy/sympy#10255 assert reduce_inequalities(Piecewise((1, x < 1), (3, True)) > 1) == \ And(S.One <= x, x < oo) assert reduce_inequalities(Piecewise((x**2, x < 0), (2*x, x >= 0)) < 1) == \ And(-S.One < x, x < S.Half)
def test_issue_8235(): assert reduce_inequalities(x**2 - 1 < 0) == \ And(Integer(-1) < x, x < Integer(1)) assert reduce_inequalities(x**2 - 1 <= 0) == \ And(Integer(-1) <= x, x <= 1) assert reduce_inequalities(x**2 - 1 > 0) == \ Or(And(-oo < x, x < -1), And(x < oo, Integer(1) < x)) assert reduce_inequalities(x**2 - 1 >= 0) == \ Or(And(-oo < x, x <= Integer(-1)), And(Integer(1) <= x, x < oo)) eq = x**8 + x - 9 # we want RootOf solns here sol = solve(eq >= 0) tru = Or(And(RootOf(eq, 1) <= x, x < oo), And(-oo < x, x <= RootOf(eq, 0))) assert sol == tru # recast vanilla as real assert solve(sqrt((-x + 1)**2) < 1) == And(Integer(0) < x, x < 2)
def test_sympyissue_8235(): assert reduce_inequalities(x**2 - 1 < 0) == \ And(Integer(-1) < x, x < Integer(1)) assert reduce_inequalities(x**2 - 1 <= 0) == \ And(Integer(-1) <= x, x <= 1) assert reduce_inequalities(x**2 - 1 > 0) == \ Or(And(-oo < x, x < -1), And(x < oo, Integer(1) < x)) assert reduce_inequalities(x**2 - 1 >= 0) == \ Or(And(-oo < x, x <= Integer(-1)), And(Integer(1) <= x, x < oo)) eq = x**8 + x - 9 # we want RootOf solns here sol = reduce_inequalities(eq >= 0) tru = Or(And(RootOf(eq, 1) <= x, x < oo), And(-oo < x, x <= RootOf(eq, 0))) assert sol == tru # recast vanilla as real assert reduce_inequalities(sqrt((-x + 1)**2) < 1) == And(Integer(0) < x, x < 2)
def test_reduce_inequalities_boolean(): assert reduce_inequalities( [Eq(x**2, 0), True]) == Eq(x, 0) assert reduce_inequalities([Eq(x**2, 0), False]) is S.false
def test_reduce_inequalities_general(): assert reduce_inequalities(Ge(sqrt(2)*x, 1)) == And(sqrt(2)/2 <= x, x < oo) assert reduce_inequalities(PurePoly(x + 1, x) > 0) == And(Integer(-1) < x, x < oo)
def test_sympyissue_10196(): assert reduce_inequalities(x**2 >= 0) assert reduce_inequalities(x**2 < 0) is S.false
def test_reduce_inequalities_boolean(): assert reduce_inequalities( [Eq(x**2, 0), True]) == Eq(x, 0) assert reduce_inequalities([Eq(x**2, 0), False]) is false
def test_sympyissue_6343(): eq = -3*x**2/2 - 45*x/4 + Rational(33, 2) > 0 assert reduce_inequalities(eq) == \ And(x < -Rational(15, 4) + sqrt(401)/4, -sqrt(401)/4 - Rational(15, 4) < x)
def test_slow_general_univariate(): r = RootOf(x**5 - x**2 + 1, 0) assert reduce_inequalities(sqrt(x) + 1/root(x, 3) > 1) == \ Or(And(Integer(0) < x, x < r**6), And(r**6 < x, x < oo))
def test_reduce_inequalities_multivariate(): assert reduce_inequalities([Ge(x**2, 1), Ge(y**2, 1)]) == And( Or(And(Le(1, x), Lt(x, oo)), And(Le(x, -1), Lt(-oo, x))), Or(And(Le(1, y), Lt(y, oo)), And(Le(y, -1), Lt(-oo, y))))
def test_hacky_inequalities(): y = Symbol('y', real=True) assert reduce_inequalities(x + y < 1, symbols=[x]) == And(-oo < x, x < -y + 1) assert reduce_inequalities(x + y >= 1, symbols=[x]) == And(-y + 1 <= x, x < oo)
def test_sympyissue_10203(): y = Symbol('y', extended_real=True) assert reduce_inequalities(Eq(0, x - y), symbols=[x]) == Eq(x, y) assert reduce_inequalities(Ne(0, x - y), symbols=[x]) == \ Or(And(-oo < x, x < y), And(x < oo, y < x))
def test_reduce_inequalities_errors(): pytest.raises(NotImplementedError, lambda: reduce_inequalities(Ge(sin(x) + x, 1))) pytest.raises(NotImplementedError, lambda: reduce_inequalities(Ge(x**2*y + y, 1)))
def test_sympyissue_5526(): assert reduce_inequalities(Integer(0) <= x + Integral(y**2, (y, 1, 3)) - 1, [x]) == \ And(-Integral(y**2, (y, 1, 3)) + 1 <= x, x < oo)
def test_sympyissue_8545(): eq = 1 - x - abs(1 - x) ans = And(Lt(1, x), Lt(x, oo)) assert reduce_piecewise_inequality(eq, '<', x) == ans eq = 1 - x - sqrt((1 - x)**2) assert reduce_inequalities(eq < 0) == ans
def test_sympyissue_10196(): assert reduce_inequalities(x**2 >= 0) assert reduce_inequalities(x**2 < 0) is false
def test_sympyissue_10268(): assert reduce_inequalities(log(x) < 300) == And(-oo < x, x < E**300)