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))
def delta(p): if len(p) == 1: return oo return min(abs(i[0] - i[1]) for i in subsets(p, 2))
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)]
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)) ])