Esempio n. 1
0
def test_diff_args():
    # issue sympy/sympy#5399
    args = [x, y, Integer(2), Rational(1, 2)]

    def ok(a):
        """Return True if the input args for diff are ok"""
        if not a:
            return False
        if a[0].is_Symbol is False:
            return False
        s_at = [i for i in range(len(a)) if a[i].is_Symbol]
        n_at = [i for i in range(len(a)) if not a[i].is_Symbol]
        # every symbol is followed by symbol or int
        # every number is followed by a symbol
        return (all(a[i + 1].is_Symbol or a[i + 1].is_Integer
                    for i in s_at if i + 1 < len(a))
                and all(a[i + 1].is_Symbol for i in n_at if i + 1 < len(a)))

    eq = x**10 * y**8
    for a in subsets(args):
        for v in variations(a, len(a)):
            if ok(v):
                eq.diff(*v)  # not raises
            else:
                pytest.raises(ValueError, lambda: eq.diff(*v))
Esempio n. 2
0
 def delta(p):
     if len(p) == 1:
         return oo
     return min(abs(i[0] - i[1]) for i in subsets(p, 2))
Esempio n. 3
0
def test_subsets():
    # combinations
    assert list(subsets([1, 2, 3], 0)) == [()]
    assert list(subsets([1, 2, 3], 1)) == [(1,), (2,), (3,)]
    assert list(subsets([1, 2, 3], 2)) == [(1, 2), (1, 3), (2, 3)]
    assert list(subsets([1, 2, 3], 3)) == [(1, 2, 3)]
    l = list(range(4))
    assert list(subsets(l, 0, repetition=True)) == [()]
    assert list(subsets(l, 1, repetition=True)) == [(0,), (1,), (2,), (3,)]
    assert list(subsets(l, 2, repetition=True)) == [(0, 0), (0, 1), (0, 2),
                                                    (0, 3), (1, 1), (1, 2),
                                                    (1, 3), (2, 2), (2, 3),
                                                    (3, 3)]
    assert list(subsets(l, 3, repetition=True)) == [(0, 0, 0), (0, 0, 1),
                                                    (0, 0, 2), (0, 0, 3),
                                                    (0, 1, 1), (0, 1, 2),
                                                    (0, 1, 3), (0, 2, 2),
                                                    (0, 2, 3), (0, 3, 3),
                                                    (1, 1, 1), (1, 1, 2),
                                                    (1, 1, 3), (1, 2, 2),
                                                    (1, 2, 3), (1, 3, 3),
                                                    (2, 2, 2), (2, 2, 3),
                                                    (2, 3, 3), (3, 3, 3)]
    assert len(list(subsets(l, 4, repetition=True))) == 35

    assert list(subsets(l[:2], 3, repetition=False)) == []
    assert list(subsets(l[:2], 3, repetition=True)) == [(0, 0, 0),
                                                        (0, 0, 1),
                                                        (0, 1, 1),
                                                        (1, 1, 1)]
    assert list(subsets([1, 2], repetition=True)) == \
        [(), (1,), (2,), (1, 1), (1, 2), (2, 2)]
    assert list(subsets([1, 2], repetition=False)) == \
        [(), (1,), (2,), (1, 2)]
    assert list(subsets([1, 2, 3], 2)) == \
        [(1, 2), (1, 3), (2, 3)]
    assert list(subsets([1, 2, 3], 2, repetition=True)) == \
        [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)]
Esempio n. 4
0
def test__isolate_real_roots_sqf():
    R, x = ring('x', ZZ)

    assert R._isolate_real_roots_sqf(R(0)) == []
    assert R._isolate_real_roots_sqf(R(5)) == []

    assert R._isolate_real_roots_sqf(x) == [(0, 0)]

    f = x * (x + 1)

    assert R._isolate_real_roots_sqf(f) == [(-1, -1), (0, 0)]
    assert R._isolate_real_roots_sqf(f, inf=+1) == []
    assert R._isolate_real_roots_sqf(f, sup=-1) == [(-1, -1)]
    assert R._isolate_real_roots_sqf(f, sup=-2) == []

    f = x * (x - 1)

    assert R._isolate_real_roots_sqf(f) == [(0, 0), (1, 1)]

    assert R._isolate_real_roots_sqf(x**4 + x + 1) == []

    i = [(-2, -1), (1, 2)]
    f = x**2 - 2

    assert R._isolate_real_roots_sqf(+f) == i
    assert R._isolate_real_roots_sqf(-f) == i

    for r in range(2, 7):
        for s in (1, 10, -1, -10):
            f = R(prod(x - s * _ for _ in range(1, r)))
            ans = sorted((s * _, s * _) for _ in range(1, r))
            assert R._isolate_real_roots_sqf(f) == ans

    assert R._isolate_real_roots_sqf(x**2 - 5) == [(-3, -2), (2, 3)]
    assert R._isolate_real_roots_sqf(x**3 - 5) == [(1, 2)]
    assert R._isolate_real_roots_sqf(x**4 - 5) == [(-2, -1), (1, 2)]
    assert R._isolate_real_roots_sqf(x**5 - 5) == [(1, 2)]
    assert R._isolate_real_roots_sqf(x**6 - 5) == [(-2, -1), (1, 2)]
    assert R._isolate_real_roots_sqf(x**7 - 5) == [(1, 2)]
    assert R._isolate_real_roots_sqf(x**8 - 5) == [(-2, -1), (1, 2)]
    assert R._isolate_real_roots_sqf(x**9 - 5) == [(1, 2)]

    for roots in subsets(range(1, 4)):
        f = R(prod(x - r for r in roots))
        ans = sorted((_, _) for _ in roots)
        assert R._isolate_real_roots_sqf(f) == ans

    assert R._isolate_real_roots_sqf((x - 3)*(x - 2)*(x - 1)*(x + 1)*(x + 2)*(x + 3)*(2*x + 1)) == \
        [(-3, -3), (-2, -2), (-1, -1), (-1, 0), (1, 1), (2, 2), (3, 3)]
    assert R._isolate_real_roots_sqf((x - 3)*(x - 2)*(x - 1)*(x + 1)*(x + 2)*(x + 3)*(2*x - 1)*(2*x + 1)) == \
        [(-3, -3), (-2, -2), (-1, -1), (-1, 0), (0, 1), (1, 1), (2, 2), (3, 3)]

    f = 9 * x**2 - 2

    assert R._isolate_real_roots_sqf(f) == \
        [(-1, 0), (0, 1)]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 10)) == \
        [(QQ(-1, 2), QQ(-3, 7)), (QQ(3, 7), QQ(1, 2))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 100)) == \
        [(QQ(-9, 19), QQ(-8, 17)), (QQ(8, 17), QQ(9, 19))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 1000)) == \
        [(QQ(-33, 70), QQ(-8, 17)), (QQ(8, 17), QQ(33, 70))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 10000)) == \
        [(QQ(-33, 70), QQ(-107, 227)), (QQ(107, 227), QQ(33, 70))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 100000)) == \
        [(QQ(-305, 647), QQ(-272, 577)), (QQ(272, 577), QQ(305, 647))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 1000000)) == \
        [(QQ(-1121, 2378), QQ(-272, 577)), (QQ(272, 577), QQ(1121, 2378))]

    f = (x - 2) * (x - 1) * (2 * x - 1) * (10002 * x - 1) * (10003 * x - 1)

    assert R._isolate_real_roots_sqf(f) == \
        [(QQ(15, 150046), QQ(47, 470110)), (QQ(47, 470110), QQ(17, 170018)),
         (QQ(1, 2), QQ(1, 2)), (1, 1), (2, 2)]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 100000000000)) == \
        [(QQ(1, 10003), QQ(1, 10003)), (QQ(1, 10002), QQ(1, 10002)),
         (QQ(1, 2), QQ(1, 2)), (1, 1), (2, 2)]

    a, b, c, d = 10000090000001, 2000100003, 10000300007, 10000005000008
    f = (x - d) * (x + a) * (b * x + 1) * (c * x - 1)

    assert R._isolate_real_roots_sqf(f) == \
        [(-13194139533313, -8796093022209), (-1, 0), (0, 1),
         (8796093022209, 13194139533313)]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 100000000000)) == \
        [(-a, -a), (QQ(-7, 13958643719), QQ(-1, 2013265921)),
         (QQ(3, 30064771075), QQ(1, 9663676417)),
         (QQ(1328823874562668133568119, 132882321015),
          QQ(37336367728494399224248237, 3733634906029))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 100000000000000000000000000000)) == \
        [(-a, -a), (-QQ(1, b), -QQ(1, b)), (QQ(1, c), QQ(1, c)), (d, d)]

    f = -2 * (x - 2) * (x + 2) * (5 * x**2 - 4 * x - 20)

    assert R._isolate_real_roots_sqf(f) == \
        [(-2, -2), (-2, -1), (2, 2), (2, 3)]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 100)) == \
        [(-2, -2), (-QQ(23, 14), -QQ(18, 11)), (2, 2), (QQ(39, 16), QQ(22, 9))]

    f = x - 1

    assert R._isolate_real_roots_sqf(f, inf=2) == []
    assert R._isolate_real_roots_sqf(f, sup=0) == []
    assert R._isolate_real_roots_sqf(f) == [(1, 1)]
    assert R._isolate_real_roots_sqf(f, inf=1) == [(1, 1)]
    assert R._isolate_real_roots_sqf(f, sup=1) == [(1, 1)]
    assert R._isolate_real_roots_sqf(f, inf=1, sup=1) == [(1, 1)]

    f = x**2 - 2

    assert R._isolate_real_roots_sqf(f, inf=QQ(7, 4)) == []
    assert R._isolate_real_roots_sqf(f, inf=QQ(7, 5)) == [(QQ(7, 5), QQ(3, 2))]
    assert R._isolate_real_roots_sqf(f, sup=QQ(7, 5)) == [(-2, -1)]
    assert R._isolate_real_roots_sqf(f, sup=QQ(7, 4)) == [(-2, -1),
                                                          (1, QQ(3, 2))]
    assert R._isolate_real_roots_sqf(f, sup=-QQ(7, 4)) == []
    assert R._isolate_real_roots_sqf(f,
                                     sup=-QQ(7, 5)) == [(-QQ(3, 2), -QQ(7, 5))]
    assert R._isolate_real_roots_sqf(f, inf=-QQ(7, 5)) == [(1, 2)]
    assert R._isolate_real_roots_sqf(f, inf=-QQ(7, 4)) == [(-QQ(3, 2), -1),
                                                           (1, 2)]

    i = [(-2, -1), (1, 2)]

    assert R._isolate_real_roots_sqf(f, inf=-2) == i
    assert R._isolate_real_roots_sqf(f, sup=+2) == i
    assert R._isolate_real_roots_sqf(f, inf=-2, sup=2) == i
    assert R._isolate_real_roots_sqf(f, inf=+1) == [i[1]]
    assert R._isolate_real_roots_sqf(f, sup=-1) == [i[0]]

    f = (2 * x - 3) * (x**2 - 3) * (x**2 - 2)

    assert R._isolate_real_roots_sqf(f) == \
        [(-2, -QQ(3, 2)), (-QQ(3, 2), -QQ(1, 1)), (1, QQ(3, 2)),
         (QQ(3, 2), QQ(3, 2)), (QQ(3, 2), 2)]

    f = 7 * x**4 - 19 * x**3 + 20 * x**2 + 17 * x + 20

    assert R._isolate_real_roots_sqf(f) == []

    R, x = ring('x', QQ)

    f = (6 * x - 85) * (1028 * x + 1) / 3855

    assert R._isolate_real_roots_sqf(f) == [(-1, 0), (14, 15)]
    assert [_.as_tuple()
            for _ in R._isolate_real_roots_sqf(f, blackbox=True)] == [(-1, 0),
                                                                      (14, 15)]

    f = (2 * x / 5 - QQ(17, 3)) * (4 * x + QQ(1, 257))

    assert R._isolate_real_roots_sqf(f) == [(-1, 0), (14, 15)]

    R, x = ring('x', EX)

    pytest.raises(DomainError, lambda: R._isolate_real_roots_sqf(x + 3))

    R, x = ring('x', QQ.algebraic_field(I))

    f = (x - 1) * (x**3 + I * x - 2)

    assert R._isolate_real_roots_sqf(f) == [(1, 1)]
    assert R._isolate_real_roots_sqf(f, sup=0) == []

    f = (x**2 - 2) * (x**3 - x + I)

    assert R._isolate_real_roots_sqf(f) == [(QQ(-3, 2), QQ(-4, 3)),
                                            (QQ(4, 3), QQ(3, 2))]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 10),
                                     inf=0) == [(QQ(7, 5), QQ(10, 7))]

    assert R._isolate_real_roots_sqf(x) == [(0, 0)]
    assert R._isolate_real_roots_sqf(x - 1) == [(1, 1)]
    assert R._isolate_real_roots_sqf(x - I) == []

    f = (x + I) * (x - 1)

    assert [_.as_tuple()
            for _ in R._isolate_real_roots_sqf(f, blackbox=True)] == [(1, 1)]

    R, x = ring('x', QQ.algebraic_field(sqrt(2)))

    f = (-x**3 + sqrt(2) * x - 1) * (x**2 + 1)

    assert R._isolate_real_roots_sqf(f) == [(-2, -1)]
    assert R._isolate_real_roots_sqf(f, eps=QQ(1, 1000)) == [(QQ(-132, 91),
                                                              QQ(-29, 20))]

    f = (x - sqrt(2)) * (x + 2 * sqrt(2)) * (x - 7 + sqrt(2)) * (
        x + 3 * sqrt(2)) * (x - 1) * (x + 1 - sqrt(2))

    assert R._isolate_real_roots_sqf(f) == [(-5, -4), (-3, -2), (0, 1), (1, 1),
                                            (1, 2), (5, 6)]

    R, x = ring('x', QQ.algebraic_field(sqrt(2), sqrt(3)))

    f = (x - sqrt(2)) * (x - sqrt(3)) * (x - 2 * sqrt(6)) * (x - sqrt(6)) * (
        x**2 + 2)

    assert R._isolate_real_roots_sqf(f) == [(1, QQ(3, 2)), (QQ(3, 2), 2),
                                            (2, 3), (4, 5)]
    assert (R._isolate_real_roots_sqf(f, eps=QQ(1, 1000)) == [
        (QQ(41, 29), QQ(58, 41)), (QQ(71, 41), QQ(97, 56)),
        (QQ(218, 89), QQ(49, 20)), (QQ(436, 89), QQ(485, 99))
    ])