Exemplo n.º 1
0
def test_reduce_inequalities_general():
    assert reduce_inequalities(sqrt(2) * x >= 1) == (sqrt(2) / 2 <= x)
    assert reduce_inequalities(PurePoly(x + 1, x) > 0) == (Integer(-1) < x)

    # issue sympy/sympy#10196
    assert reduce_inequalities(x**2 >= 0)
    assert reduce_inequalities(x**2 < 0) is false
Exemplo n.º 2
0
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))
Exemplo n.º 3
0
def test_solve_inequalities():
    eqs = [x**2 - 2 < 0, x**2 - 1 > 0]
    assert reduce_inequalities(eqs) == (((-sqrt(2) < x) & (x < -1)) |
                                        ((Integer(1) < x) & (x < sqrt(2))))

    # issue sympy/sympy#6627, sympy/sympy#6547
    assert reduce_inequalities((x - 3) /
                               (x - 2) < 0) == (Integer(2) < x) & (x < 3)
    assert reduce_inequalities(x / (x + 1) > 1, x) == (x < -1)

    assert reduce_inequalities(
        sin(x) > Rational(1, 2)) == (pi / 6 < x) & (x < 5 * pi / 6)
Exemplo n.º 4
0
def test_sympyissue_20902():
    eq = y / ((1 + y)**2)

    assert (reduce_inequalities(eq.subs({
        y: 3 * x + 2
    }).diff(x) > 0) == (Integer(-1) < x) & (x < Rational(-1, 3)))
    assert (reduce_inequalities(eq.subs({
        y: 3 * x + 3
    }).diff(x) > 0) == (Rational(-4, 3) < x) & (x < Rational(-2, 3)))
    assert (reduce_inequalities(eq.subs({
        y: 3 * x + 4
    }).diff(x) > 0) == (Rational(-5, 3) < x) & (x < Integer(-1)))
    assert (reduce_inequalities(eq.subs({
        y: 3 * x + 2
    }).diff(x) > 0) == (Integer(-1) < x) & (x < Rational(-1, 3)))
Exemplo n.º 5
0
def test_solve_linear_inequalities():
    eqs = [x >= 0, 2 * x + 4 * y <= 14, x - 2 * y <= 1]
    ans = ((x >= Integer(0)) & (x <= Integer(4)) &
           (y >= x / 2 - Rational(1, 2)) & (y <= -x / 2 + Rational(7, 2)))

    assert reduce_inequalities(eqs) == ans

    eqs = [x + y >= 4, x <= 1, y <= 1]

    assert reduce_inequalities(eqs) == false

    eqs = [x + 2 * y <= 3, 2 * x + y <= 5]

    assert reduce_inequalities(eqs) == (y <= Min(-2 * x + 5,
                                                 -x / 2 + Rational(3, 2)))

    eqs = [x + 2 * y < 3, 2 * x + y < 5]

    assert reduce_inequalities(eqs) == (y < Min(-2 * x + 5,
                                                -x / 2 + Rational(3, 2)))

    eqs = [x + 2 * y <= 3, 2 * x + y < 5]
    ans = (((y <= -x / 2 + Rational(3, 2)) &
            (-x / 2 + Rational(3, 2) < -2 * x + 5)) |
           ((y < -2 * x + 5) & (-2 * x + 5 <= -x / 2 + Rational(3, 2))))

    assert reduce_inequalities(eqs) == ans

    eqs = [x + 2 * y >= 3, 2 * x + y >= 5]

    assert reduce_inequalities(eqs) == (y >= Max(-2 * x + 5,
                                                 -x / 2 + Rational(3, 2)))

    eqs = [x + 2 * y > 3, 2 * x + y > 5]

    assert reduce_inequalities(eqs) == (y > Max(-2 * x + 5,
                                                -x / 2 + Rational(3, 2)))

    eqs = [x + 2 * y >= 3, 2 * x + y > 5]
    ans = (((y >= -x / 2 + Rational(3, 2)) &
            (-x / 2 + Rational(3, 2) > -2 * x + 5)) |
           ((y > -2 * x + 5) & (-2 * x + 5 >= -x / 2 + Rational(3, 2))))

    assert reduce_inequalities(eqs) == ans
Exemplo n.º 6
0
def test_solve_univariate_inequality():
    assert isolve(x**2 >= 4,
                  x, relational=False) == Union(Interval(-oo, -2),
                                                Interval(2, oo))
    assert isolve(x**2 >= 4, x) == (Integer(2) <= x) | (x <= -2)
    assert isolve((x - 1)*(x - 2)*(x - 3) >= 0, x, relational=False) == \
        Union(Interval(1, 2), Interval(3, oo))
    assert isolve((x - 1)*(x - 2)*(x - 3) >= 0, x) == \
        ((Integer(1) <= x) & (x <= 2)) | (Integer(3) <= x)
    # issue sympy/sympy#2785:
    assert isolve(x**3 - 2*x - 1 > 0, x, relational=False) == \
        Union(Interval(-1, -sqrt(5)/2 + Rational(1, 2), True, True),
              Interval(Rational(1, 2) + sqrt(5)/2, oo, True))
    # issue sympy/sympy#2794:
    assert isolve(x**3 - x**2 + x - 1 > 0, x, relational=False) == \
        Interval(1, oo, True)

    # XXX should be limited in domain, e.g. between 0 and 2*pi
    assert isolve(sin(x) < Rational(1, 2),
                  x) == (x < pi / 6) | (5 * pi / 6 < x)
    assert isolve(sin(x) > Rational(1, 2),
                  x) == (pi / 6 < x) & (x < 5 * pi / 6)

    # numerical testing in valid() is needed
    assert isolve(x**7 - x - 2 > 0, x) == (RootOf(x**7 - x - 2, 0) < x)

    # handle numerator and denominator; although these would be handled as
    # rational inequalities, these test confirm that the right thing is done
    # when the domain is EX (e.g. when 2 is replaced with sqrt(2))
    assert isolve(1 / (x - 2) > 0, x) == (Integer(2) < x)
    den = ((x - 1) * (x - 2)).expand()
    assert isolve((x - 1) / den <= 0,
                  x) == (x < 1) | ((Integer(1) < x) & (x < 2))

    assert isolve(x > oo, x) is false

    # issue sympy/sympy#10268
    assert reduce_inequalities(log(x) < 300) == (-oo < x) & (x < E**300)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
def test_sympyissue_8235():
    assert reduce_inequalities(x**2 - 1 < 0) == \
        (Integer(-1) < x) & (x < Integer(1))
    assert reduce_inequalities(x**2 - 1 <= 0) == \
        (Integer(-1) <= x) & (x <= 1)
    assert reduce_inequalities(x**2 - 1 > 0) == \
        (x < -1) | (Integer(1) < x)
    assert reduce_inequalities(x**2 - 1 >= 0) == \
        (x <= Integer(-1)) | (Integer(1) <= x)

    eq = x**8 + x - 9  # we want RootOf solns here
    sol = reduce_inequalities(eq >= 0)
    tru = (RootOf(eq, 1) <= x) | (x <= RootOf(eq, 0))
    assert sol == tru

    # recast vanilla as real
    assert reduce_inequalities(
        sqrt((-x + 1)**2) < 1) == (Integer(0) < x) & (x < 2)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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))
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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)))
Exemplo n.º 13
0
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))))
Exemplo n.º 14
0
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))
Exemplo n.º 15
0
def test_sympyissue_10196():
    assert reduce_inequalities(x**2 >= 0)
    assert reduce_inequalities(x**2 < 0) is false
Exemplo n.º 16
0
def test_reduce_inequalities_multivariate():
    assert (reduce_inequalities([x**2 >= 1,
                                 y**2 >= 1]) == ((Integer(1) <= x) | (x <= -1))
            & ((Integer(1) <= y) | (y <= -1)))
Exemplo n.º 17
0
def test_sympyissue_20861():
    assert reduce_inequalities([3 / x < 0, x >= 2, x >= 7], x) is false
Exemplo n.º 18
0
def test_issue_836():
    assert reduce_inequalities(x + y > 1) == (y > -x + 1)

    pytest.raises(
        NotImplementedError, lambda: reduce_inequalities(
            [x**2 * y**2 <= x**2 * y, x**2 * y**2 > x**2 * y]))
Exemplo n.º 19
0
def test_sympyissue_8545():
    eq = 1 - x - abs(1 - x)
    ans = (Integer(1) < x)
    assert reduce_piecewise_inequality(eq, '<', x) == ans
    eq = 1 - x - sqrt((1 - x)**2)
    assert reduce_inequalities(eq < 0) == ans
Exemplo n.º 20
0
def test_slow_general_univariate():
    assert reduce_inequalities(
        sqrt(x) + 1 / root(x, 3) > 1) == (Integer(0) < x)
Exemplo n.º 21
0
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)
Exemplo n.º 22
0
def test_reduce_piecewise_inequalities():
    e = abs(x - 5) < 3
    ans = (Integer(2) < x) & (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) == ((Rational(5, 2) <= x) |
                                 (x <= -Rational(11, 2)))
    assert reduce_inequalities(
        abs(x - 4) + abs(3 * x - 5) < 7) == (Rational(1, 2) < x) & (x < 4)
    assert reduce_inequalities(abs(x - 4) + abs(3*abs(x) - 5) < 7) == \
        ((Integer(-2) < x) & (x < -1)) | ((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) == \
        ((Integer(0) < x) & (x < Rational(1, 2))) | (x < 0)
    assert reduce_inequalities(-1 + 1/abs(-1/x - 1) < 0) == \
        ((-Rational(1, 2) < x) & (x < 0)) | (Integer(0) < x)

    # sympy/sympy#10255
    assert reduce_inequalities(Piecewise((1, x < 1), (3, True)) > 1) == \
        (Integer(1) <= x)
    assert reduce_inequalities(Piecewise((x**2, x < 0), (2*x, True)) < 1) == \
        (Integer(-1) < x) & (x < Rational(1, 2))
Exemplo n.º 23
0
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
Exemplo n.º 24
0
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
Exemplo n.º 25
0
def test_sympyissue_10268():
    assert reduce_inequalities(log(x) < 300) == And(-oo < x, x < E**300)
Exemplo n.º 26
0
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)