Exemple #1
0
def test_exp():
    x = symbols('x')
    assert refine(exp(pi * I * 2 * x), Assume(x, Q.integer)) == 1
    assert refine(exp(pi * I * 2 * (x + Rational(1, 2))),
                  Assume(x, Q.integer)) == -1
    assert refine(exp(pi * I * 2 * (x + Rational(1, 4))),
                  Assume(x, Q.integer)) == I
    assert refine(exp(pi * I * 2 * (x + Rational(3, 4))),
                  Assume(x, Q.integer)) == -I
Exemple #2
0
def test_abs():
    x = symbols('x')
    assert refine(abs(x), Assume(x, Q.positive)) == x
    assert refine(1 + abs(x), Assume(x, Q.positive)) == 1 + x
    assert refine(abs(x), Assume(x, Q.negative)) == -x
    assert refine(1 + abs(x), Assume(x, Q.negative)) == 1 - x

    assert refine(abs(x**2)) != x**2
    assert refine(abs(x**2), Assume(x, Q.real)) == x**2
Exemple #3
0
def test_solve_inequalities():
    system = [Lt(x**2 - 2, 0), Gt(x**2 - 1, 0)]

    assert solve(system) == \
        And(Or(And(Lt(-sqrt(2), re(x)), Lt(re(x), -1)),
               And(Lt(1, re(x)), Lt(re(x), sqrt(2)))), Eq(im(x), 0))
    assert solve(system, assume=Assume(x, Q.real)) == \
        Or(And(Lt(-sqrt(2), x), Lt(x, -1)), And(Lt(1, x), Lt(x, sqrt(2))))
Exemple #4
0
def test_reduce_abs_inequalities():
    real = Assume(x, Q.real)

    assert reduce_inequalities(abs(x - 5) < 3, assume=real) == And(Gt(x, 2), Lt(x, 8))
    assert reduce_inequalities(abs(2*x + 3) >= 8, assume=real) == Or(Le(x, -S(11)/2), Ge(x, S(5)/2))
    assert reduce_inequalities(abs(x - 4) + abs(3*x - 5) < 7, assume=real) == And(Gt(x, S(1)/2), Lt(x, 4))
    assert reduce_inequalities(abs(x - 4) + abs(3*abs(x) - 5) < 7, assume=real) == Or(And(-2 < x, x < -1), And(S(1)/2 < x, x < 4))

    raises(NotImplementedError, "reduce_inequalities(abs(x - 5) < 3)")
Exemple #5
0
def test_pow():
    x, y, z = symbols('x y z')
    assert refine((-1)**x, Assume(x, Q.even)) == 1
    assert refine((-1)**x, Assume(x, Q.odd)) == -1
    assert refine((-2)**x, Assume(x, Q.even)) == 2**x

    # nested powers
    assert refine(sqrt(x**2)) != abs(x)
    assert refine(sqrt(x**2), Assume(x, Q.complex)) != abs(x)
    assert refine(sqrt(x**2), Assume(x, Q.real)) == abs(x)
    assert refine(sqrt(x**2), Assume(x, Q.positive)) == x
    assert refine((x**3)**(S(1) / 3)) != x

    assert refine((x**3)**(S(1) / 3), Assume(x, Q.real)) != x
    assert refine((x**3)**(S(1) / 3), Assume(x, Q.positive)) == x

    assert refine(sqrt(1 / x), Assume(x, Q.real)) != 1 / sqrt(x)
    assert refine(sqrt(1 / x), Assume(x, Q.positive)) == 1 / sqrt(x)

    # powers of (-1)
    assert refine((-1)**(x + y), Assume(x, Q.even)) == (-1)**y
    assert refine((-1)**(x + y + z),
                  Assume(x, Q.odd) & Assume(z, Q.odd)) == (-1)**y
    assert refine((-1)**(x + y + 1), Assume(x, Q.odd)) == (-1)**y
    assert refine((-1)**(x + y + 2), Assume(x, Q.odd)) == (-1)**(y + 1)
    assert refine((-1)**(x + 3)) == (-1)**(x + 1)
Exemple #6
0
def test_reduce_inequalities_assume():
    assert reduce_inequalities([Le(x**2, 1), Assume(x, Q.real)]) == And(Le(-1, x), Le(x, 1))
    assert reduce_inequalities([Le(x**2, 1)], Assume(x, Q.real)) == And(Le(-1, x), Le(x, 1))
Exemple #7
0
"""Tests for tools for solving inequalities and systems of inequalities. """

from sympy.solvers.inequalities import (
    reduce_poly_inequalities,
    reduce_inequalities)

from sympy import (
    S, Symbol, Interval, Eq, Ne, Lt, Le, Gt, Ge, Or, And, pi, oo,
    sqrt, Q, Assume, global_assumptions, re, im, sin)

from sympy.utilities.pytest import raises
from sympy.abc import x, y

inf = oo.evalf()

x_assume = Assume(x, Q.real)
y_assume = Assume(y, Q.real)

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)]