def test_RootSum_doit():
    rs = RootSum(x**2 + 1, exp)

    assert isinstance(rs, RootSum) is True
    assert rs.doit() == exp(-I) + exp(I)

    rs = RootSum(x**2 + a, exp, x)

    assert isinstance(rs, RootSum) is True
    assert rs.doit() == exp(-sqrt(-a)) + exp(sqrt(-a))
Exemple #2
0
def test_RootSum_doit():
    rs = RootSum(x**2 + 1, exp)

    assert isinstance(rs, RootSum) is True
    assert rs.doit() == exp(-I) + exp(I)

    rs = RootSum(x**2 + a, exp, x)

    assert isinstance(rs, RootSum) is True
    assert rs.doit() == exp(-sqrt(-a)) + exp(sqrt(-a))
Exemple #3
0
def test_RootSum___new__():
    f = x**3 + x + 3

    g = Lambda(r, log(r * x))
    s = RootSum(f, g)

    rootofs = sum(log(RootOf(f, i) * x) for i in (0, 1, 2))

    assert isinstance(s, RootSum) == True
    assert s.doit() == rootofs

    assert RootSum(f**2, g) == 2 * RootSum(f, g)
    assert RootSum(f**2, g).doit() == 2 * rootofs

    assert RootSum((x - 7) * f**3, g) == log(7 * x) + 3 * RootSum(f, g)
    assert RootSum((x - 7) * f**3, g).doit() == log(7 * x) + 3 * rootofs

    raises(MultivariatePolynomialError, "RootSum(x**3 + x + y)")
    raises(ValueError, "RootSum(x**2 + 3, lambda x: x)")

    assert RootSum(f, exp) == RootSum(f, Lambda(x, exp(x)))
    assert RootSum(f, log) == RootSum(f, Lambda(x, log(x)))

    assert isinstance(RootSum(f, auto=False), RootSum) == True

    assert RootSum(f) == 0
    assert RootSum(f, Lambda(x, x)) == 0
    assert RootSum(f, Lambda(x, x**2)) == -2

    assert RootSum(f, Lambda(x, 1)) == 3
    assert RootSum(f, Lambda(x, 2)) == 6

    assert RootSum(f, auto=False).is_commutative == True

    assert RootSum(f, Lambda(x, 1 / (x + x**2))) == S(11) / 3
    assert RootSum(f, Lambda(x, y / (x + x**2))) == S(11) / 3 * y

    assert RootSum(x**2 - 1, Lambda(x, 3 * x**2), x) == 6
    assert RootSum(x**2 - y, Lambda(x, 3 * x**2), x) == 6 * y

    assert RootSum(x**2 - 1, Lambda(x, z * x**2), x) == 2 * z
    assert RootSum(x**2 - y, Lambda(x, z * x**2), x) == 2 * z * y

    assert RootSum(x**2 - 1, Lambda(x, exp(x)),
                   quadratic=True) == exp(-1) + exp(1)

    assert RootSum(x**3 + a * x + a**3, tan,
                   x) == RootSum(x**3 + x + 1, Lambda(x, tan(a * x)))
    assert RootSum(a**3 * x**3 + a * x + 1, tan,
                   x) == RootSum(x**3 + x + 1, Lambda(x, tan(x / a)))
Exemple #4
0
def test_RootSum___new__():
    f = x**3 + x + 3

    g = Lambda(r, log(r*x))
    s = RootSum(f, g)

    rootofs = sum(log(RootOf(f, i)*x) for i in (0, 1, 2))

    assert isinstance(s, RootSum) == True
    assert s.doit() == rootofs

    assert RootSum(f**2, g) == 2*RootSum(f, g)
    assert RootSum(f**2, g).doit() == 2*rootofs

    assert RootSum((x - 7)*f**3, g) == log(7*x) + 3*RootSum(f, g)
    assert RootSum((x - 7)*f**3, g).doit() == log(7*x) + 3*rootofs
    # Issue 2472
    assert hash(RootSum((x - 7)*f**3, g)) == hash(log(7*x) + 3*RootSum(f, g))

    raises(MultivariatePolynomialError, "RootSum(x**3 + x + y)")
    raises(ValueError, "RootSum(x**2 + 3, lambda x: x)")

    assert RootSum(f, exp) == RootSum(f, Lambda(x, exp(x)))
    assert RootSum(f, log) == RootSum(f, Lambda(x, log(x)))

    assert isinstance(RootSum(f, auto=False), RootSum) == True

    assert RootSum(f) == 0
    assert RootSum(f, Lambda(x, x)) == 0
    assert RootSum(f, Lambda(x, x**2)) == -2

    assert RootSum(f, Lambda(x, 1)) == 3
    assert RootSum(f, Lambda(x, 2)) == 6

    assert RootSum(f, auto=False).is_commutative == True

    assert RootSum(f, Lambda(x, 1/(x + x**2))) == S(11)/3
    assert RootSum(f, Lambda(x, y/(x + x**2))) == S(11)/3*y

    assert RootSum(x**2 - 1, Lambda(x, 3*x**2), x) == 6
    assert RootSum(x**2 - y, Lambda(x, 3*x**2), x) == 6*y

    assert RootSum(x**2 - 1, Lambda(x, z*x**2), x) == 2*z
    assert RootSum(x**2 - y, Lambda(x, z*x**2), x) == 2*z*y

    assert RootSum(x**2 - 1, Lambda(x, exp(x)), quadratic=True) == exp(-1) + exp(1)

    assert RootSum(x**3 + a*x + a**3, tan, x) == RootSum(x**3 + x + 1, Lambda(x, tan(a*x)))
    assert RootSum(a**3*x**3 + a*x + 1, tan, x) == RootSum(x**3 + x + 1, Lambda(x, tan(x/a)))