def test_poly(): assert rsolve_poly([-1, -1, 1], 0, n) == (0, []) assert rsolve_poly([-1, -1, 1], 1, n) == (-1, []) assert rsolve_poly([-n**2, n, -1, 1], 1, n) is None assert rsolve(-f(n) + (n + 1) * f(n + 1) - n) == [{ f: Lambda(n, C0 / factorial(n) + 1) }] assert rsolve(-(n + 1) * f(n) + n * f(n + 1) - 1) == [{ f: Lambda(n, C0 * n - 1) }] assert rsolve(-(4 * n + 2) * f(n) + f(n + 1) - 4 * n - 1) == [{ f: Lambda(n, 4**n * C0 * gamma(n + 1 / 2) / sqrt(pi) - 1) }] assert (rsolve(-f(n) + f(n + 1) - n**5 - n**3) == [{ f: Lambda(n, C0 + n**2 * (n**4 - 3 * n**3 + 4 * n**2 - 3 * n + 1) / 6) }]) assert rsolve_poly([1, 1], sqrt(n), n) is None assert rsolve_poly([-2, -1, 1], -2 * n**4 - (n + 1)**4 + (n + 2)**4, n) == (n**4, []) assert rsolve(n * f(n) - f(n + 1) - n**3 + (n + 1)**2) == [{ f: Lambda(n, (C0 * factorial(n) + n**3) / n) }]
def test_rsolve_poly(): assert rsolve_poly([-1, -1, 1], 0, n) == 0 assert rsolve_poly([-1, -1, 1], 0, n, symbols=True) == (0, []) assert rsolve_poly([-1, -1, 1], 1, n) == -1 assert rsolve_poly([-n**2, n, -1, 1], 1, n) is None assert rsolve_poly([-1, n + 1], n, n) == 1 assert rsolve_poly([-1, 1], n, n) == C0 + (n**2 - n) / 2 assert rsolve_poly([-n - 1, n], 1, n) == C1 * n - 1 assert rsolve_poly([-4 * n - 2, 1], 4 * n + 1, n) == -1 assert rsolve_poly([-1, 1], n**5 + n**3, n) == \ C0 - n**3 / 2 - n**5 / 2 + n**2 / 6 + n**6 / 6 + 2*n**4 / 3 assert rsolve_poly([1, 1], sqrt(n), n) is None
def test_rsolve_poly(): assert rsolve_poly([-1, -1, 1], 0, n) == 0 assert rsolve_poly([-1, -1, 1], 1, n) == -1 assert rsolve_poly([-1, n + 1], n, n) == 1 assert rsolve_poly([-1, 1], n, n) == C0 + (n**2 - n) / 2 assert rsolve_poly([-n - 1, n], 1, n) == C1 * n - 1 assert rsolve_poly([-4 * n - 2, 1], 4 * n + 1, n) == -1 assert rsolve_poly([-1, 1], n**5 + n**3, n) == \ C0 - n**3 / 2 - n**5 / 2 + n**2 / 6 + n**6 / 6 + 2*n**4 / 3
def test_rsolve_bulk(): """Some bulk-generated tests.""" funcs = [n, n + 1, n**2, n**3, n**4, n + n**2, 27*n + 52*n**2 - 3*n**3 + 12*n**4 - 52*n**5] coeffs = [[-2, 1], [-2, -1, 1], [-1, 1, 1, -1, 1], [-n, 1], [n**2 - n + 12, 1] ] for p in funcs: # compute difference for c in coeffs: q = recurrence_term(c, p) if p.is_polynomial(n): assert rsolve_poly(c, q, n) == p if p.is_hypergeometric(n) and len(c) <= 3: assert rsolve_hyper(c, q, n).subs(zip(symbols('C:3'), [0, 0, 0])).expand() == p
def test_rsolve_bulk(): """Some bulk-generated tests.""" funcs = [ n, n + 1, n**2, n**3, n**4, n + n**2, 27 * n + 52 * n**2 - 3 * n**3 + 12 * n**4 - 52 * n**5 ] coeffs = [[-2, 1], [-2, -1, 1], [-1, 1, 1, -1, 1], [-n, 1], [n**2 - n + 12, 1]] for p in funcs: # compute difference for c in coeffs: q = recurrence_term(c, p) if p.is_polynomial(n): assert rsolve_poly(c, q, n) == p if p.is_hypergeometric(n) and len(c) <= 3: assert rsolve_hyper(c, q, n).subs(zip(symbols('C:3'), [0, 0, 0])).expand() == p
def test_bulk(): funcs = [ n, n + 1, n**2, n**3, n**4, n + n**2, 27 * n + 52 * n**2 - 3 * n**3 + 12 * n**4 - 52 * n**5 ] coeffs = [[-2, 1], [-2, -1, 1], [-1, 1, 1, -1, 1], [-n, 1], [n**2 - n + 12, 1]] for p in funcs: for c in coeffs: q = sum(c[i] * p.subs({n: n + i}) for i in range(len(c))) if p.is_polynomial(n): assert rsolve_poly(c, q, n)[0] == p if p.is_hypergeometric(n) and len(c) <= 3: assert rsolve_hyper(c, q, n)[0].subs({ C0: 0, C1: 0, C2: 0 }).expand() == p
def test_rsolve_poly(): assert rsolve_poly([-1, -1, 1], 0, n) == 0 assert rsolve_poly([-1, -1, 1], 0, n, symbols=True) == (0, []) assert rsolve_poly([-1, -1, 1], 1, n) == -1 assert rsolve_poly([-n**2, n, -1, 1], 1, n) is None assert rsolve_poly([-1, n + 1], n, n) == 1 assert rsolve_poly([-1, 1], n, n) == C0 + (n**2 - n)/2 assert rsolve_poly([-n - 1, n], 1, n) == C1*n - 1 assert rsolve_poly([-4*n - 2, 1], 4*n + 1, n) == -1 assert rsolve_poly([-1, 1], n**5 + n**3, n) == \ C0 - n**3 / 2 - n**5 / 2 + n**2 / 6 + n**6 / 6 + 2*n**4 / 3 assert rsolve_poly([1, 1], sqrt(n), n) is None assert rsolve_poly([-2, -1, 1], -2*n**4 - (n + 1)**4 + (n + 2)**4, n) == n**4 assert rsolve_poly([-n, 1], -n**3 + (n + 1)**2, n) == n**2