def test_sympyissue_8016(): n, m = symbols('n, m', integer=True, positive=True) k = symbols('k', integer=True) assert summation(binomial(m, k) * binomial(m, n - k) * (-1)**k, (k, 0, n)).equals( cos(pi * n / 2) * gamma(m + 1) / gamma(n / 2 + 1) / gamma(m - n / 2 + 1))
def test_findrecur(): pytest.raises(ValueError, lambda: Sum(x * y, (x, 0, 2), (y, 0, 2)).findrecur()) pytest.raises(ValueError, lambda: Sum(x * y, (x, 0, 2)).findrecur()) pytest.raises(ValueError, lambda: Sum(x, (x, 0, oo)).findrecur()) pytest.raises(ValueError, lambda: Sum(sin(x * y) / (x**2 + 1), (x, 0, oo)).findrecur()) n, k = symbols("n, k", integer=True) F = symbols("F", cls=Function) f = Sum(factorial(n) / (factorial(k) * factorial(n - k)), (k, 0, oo)) g = Sum(k * factorial(n) / (factorial(k) * factorial(n - k)), (k, 0, oo)) fa = Sum((-1)**k * binomial(n, k) * binomial(2 * n - 2 * k, n + a), (k, 0, oo)) fb = Sum(binomial(x, k) * binomial(y, n - k), (k, 0, oo)) assert f.findrecur(F) == -F(n, k) + F(n - 1, k) + F(n - 1, k - 1) assert (Sum(binomial(n, k), (k, 0, oo)).findrecur(F) == -F(n, k) + F(n - 1, k) + F(n - 1, k - 1)) assert (g.findrecur(F) == (-1 + 1 / n) * F(n, k) + F(n - 1, k) + F(n - 1, k - 1)) assert (fa.findrecur(F, n) == F(n - 2, k - 1) - (2 * n - 1) * F(n - 1, k) / (2 * n - 2) - (a**2 - n**2) * F(n, k) / (4 * n * (n - 1))) assert (fb.findrecur(F, n) == -n * F(n, k) / (-n + x + y + 2) + (-n + x + 1) * F(n - 1, k - 1) / (-n + x + y + 2) + (-n + y + 1) * F(n - 1, k) / (-n + x + y + 2) + F(n - 2, k - 1))
def test_gosper_sum(): assert gosper_sum(1, (k, 0, n)) == 1 + n assert gosper_sum(k, (k, 0, n)) == n * (1 + n) / 2 assert gosper_sum(k**2, (k, 0, n)) == n * (1 + n) * (1 + 2 * n) / 6 assert gosper_sum(k**3, (k, 0, n)) == n**2 * (1 + n)**2 / 4 assert gosper_sum(2**k, (k, 0, n)) == 2 * 2**n - 1 assert gosper_sum(factorial(k), (k, 0, n)) is None assert gosper_sum(binomial(n, k), (k, 0, n)) is None assert gosper_sum(factorial(k) / k**2, (k, 0, n)) is None assert gosper_sum((k - 3) * factorial(k), (k, 0, n)) is None f = k * factorial(k) assert gosper_sum(f, k) == factorial(k) assert gosper_sum(f, (k, 0, n)) == n * factorial(n) + factorial(n) - 1 f = (-1)**k * binomial(n, k) assert gosper_sum(f, (k, 0, n)) == 0 assert gosper_sum(f, (k, 0, m)) == -(-1)**m * (m - n) * binomial(n, m) / n f = (4 * k + 1) * factorial(k) / factorial(2 * k + 1) assert gosper_sum(f, (k, 0, n)) == (2 * factorial(2 * n + 1) - factorial(n)) / factorial(2 * n + 1) assert gosper_sum( f, (k, 3, n)) == (-60 * factorial(n) + factorial(2 * n + 1)) / (60 * factorial(2 * n + 1))
def test_gosper_sum(): assert gosper_sum(1, (k, 0, n)) == 1 + n assert gosper_sum(k, (k, 0, n)) == n*(1 + n)/2 assert gosper_sum(k**2, (k, 0, n)) == n*(1 + n)*(1 + 2*n)/6 assert gosper_sum(k**3, (k, 0, n)) == n**2*(1 + n)**2/4 assert gosper_sum(2**k, (k, 0, n)) == 2*2**n - 1 assert gosper_sum(factorial(k), (k, 0, n)) is None assert gosper_sum(binomial(n, k), (k, 0, n)) is None assert gosper_sum(factorial(k)/k**2, (k, 0, n)) is None assert gosper_sum((k - 3)*factorial(k), (k, 0, n)) is None assert gosper_sum(k*factorial(k), k) == factorial(k) assert gosper_sum( k*factorial(k), (k, 0, n)) == n*factorial(n) + factorial(n) - 1 assert gosper_sum((-1)**k*binomial(n, k), (k, 0, n)) == 0 assert gosper_sum(( -1)**k*binomial(n, k), (k, 0, m)) == -(-1)**m*(m - n)*binomial(n, m)/n assert gosper_sum((4*k + 1)*factorial(k)/factorial(2*k + 1), (k, 0, n)) == \ (2*factorial(2*n + 1) - factorial(n))/factorial(2*n + 1) # issue sympy/sympy#6033: assert gosper_sum( n*(n + a + b)*a**n*b**n/(factorial(n + a)*factorial(n + b)), (n, 0, m)).rewrite(factorial) == \ -a*b*(a**m*b**m*factorial(a) * factorial(b) - factorial(a + m)*factorial(b + m))/(factorial(a) * factorial(b)*factorial(a + m)*factorial(b + m))
def test_gosper_sum(): assert gosper_sum(1, (k, 0, n)) == 1 + n assert gosper_sum(k, (k, 0, n)) == n * (1 + n) / 2 assert gosper_sum(k**2, (k, 0, n)) == n * (1 + n) * (1 + 2 * n) / 6 assert gosper_sum(k**3, (k, 0, n)) == n**2 * (1 + n)**2 / 4 assert gosper_sum(2**k, (k, 0, n)) == 2 * 2**n - 1 assert gosper_sum(factorial(k), (k, 0, n)) is None assert gosper_sum(binomial(n, k), (k, 0, n)) is None assert gosper_sum(factorial(k) / k**2, (k, 0, n)) is None assert gosper_sum((k - 3) * factorial(k), (k, 0, n)) is None assert gosper_sum(k * factorial(k), k) == factorial(k) assert gosper_sum(k * factorial(k), (k, 0, n)) == n * factorial(n) + factorial(n) - 1 assert gosper_sum((-1)**k * binomial(n, k), (k, 0, n)) == 0 assert gosper_sum((-1)**k * binomial(n, k), (k, 0, m)) == -(-1)**m * (m - n) * binomial(n, m) / n assert gosper_sum((4*k + 1)*factorial(k)/factorial(2*k + 1), (k, 0, n)) == \ (2*factorial(2*n + 1) - factorial(n))/factorial(2*n + 1) # issue sympy/sympy#6033: assert gosper_sum( n*(n + a + b)*a**n*b**n/(factorial(n + a)*factorial(n + b)), (n, 0, m)).rewrite(factorial) == \ -a*b*(a**m*b**m*factorial(a) * factorial(b) - factorial(a + m)*factorial(b + m))/(factorial(a) * factorial(b)*factorial(a + m)*factorial(b + m))
def test_findrecur(): pytest.raises(ValueError, lambda: Sum(x*y, (x, 0, 2), (y, 0, 2)).findrecur()) pytest.raises(ValueError, lambda: Sum(x*y, (x, 0, 2)).findrecur()) pytest.raises(ValueError, lambda: Sum(x, (x, 0, oo)).findrecur()) pytest.raises(ValueError, lambda: Sum(sin(x*y)/(x**2 + 1), (x, 0, oo)).findrecur()) n, k = symbols("n, k", integer=True) F = symbols("F", cls=Function) f = Sum(factorial(n)/(factorial(k)*factorial(n - k)), (k, 0, oo)) g = Sum(k*factorial(n)/(factorial(k)*factorial(n - k)), (k, 0, oo)) fa = Sum((-1)**k*binomial(n, k)*binomial(2*n - 2*k, n + a), (k, 0, oo)) fb = Sum(binomial(x, k)*binomial(y, n - k), (k, 0, oo)) assert f.findrecur(F) == -F(n, k) + F(n - 1, k) + F(n - 1, k - 1) assert (Sum(binomial(n, k), (k, 0, oo)).findrecur(F) == -F(n, k) + F(n - 1, k) + F(n - 1, k - 1)) assert (g.findrecur(F) == (-1 + 1/n)*F(n, k) + F(n - 1, k) + F(n - 1, k - 1)) assert (fa.findrecur(F, n) == F(n - 2, k - 1) - (2*n - 1)*F(n - 1, k)/(2*n - 2) - (a**2 - n**2)*F(n, k)/(4*n*(n - 1))) assert (fb.findrecur(F, n) == -n*F(n, k)/(-n + x + y + 2) + (-n + x + 1)*F(n - 1, k - 1)/(-n + x + y + 2) + (-n + y + 1)*F(n - 1, k)/(-n + x + y + 2) + F(n - 2, k - 1))
def test_binomial_rewrite(): n = Symbol('n', integer=True) k = Symbol('k', integer=True) assert binomial(n, k).rewrite( factorial) == factorial(n)/(factorial(k)*factorial(n - k)) assert binomial( n, k).rewrite(gamma) == gamma(n + 1)/(gamma(k + 1)*gamma(n - k + 1))
def test_sympyissue_9699(): n, k = symbols('n k', real=True) assert combsimp((n + 1) * factorial(n)) == factorial(n + 1) assert combsimp( (x + 1) * factorial(x) / gamma(y)) == gamma(x + 2) / gamma(y) assert combsimp(factorial(n) / n) == factorial(n - 1) assert combsimp( rf(x + n, k) * binomial(n, k)) == binomial(n, k) * gamma(k + n + x) / gamma(n + x)
def test_sympyissue_2787(): n, k = symbols('n k', positive=True, integer=True) p = symbols('p', positive=True) binomial_dist = binomial(n, k) * p**k * (1 - p)**(n - k) s = summation(binomial_dist * k, (k, 0, n)) assert s.simplify() == Piecewise( (n * p, And(Or(-n + 1 < 0, Ne(p / (p - 1), 1)), p / abs(p - 1) <= 1)), (Sum(k * p**k * (-p + 1)**(-k) * (-p + 1)**n * binomial(n, k), (k, 0, n)), True))
def test_binomial_rewrite(): n = Symbol('n', integer=True) k = Symbol('k', integer=True) assert binomial(n, k).rewrite(factorial) == factorial(n) / (factorial(k) * factorial(n - k)) assert binomial( n, k).rewrite(gamma) == gamma(n + 1) / (gamma(k + 1) * gamma(n - k + 1))
def dict(self): N, m, n = self.N, self.m, self.n N, m, n = list(map(sympify, (N, m, n))) density = { sympify(k): Rational(binomial(m, k) * binomial(N - m, n - k), binomial(N, n)) for k in range(max(0, n + m - N), min(m, n) + 1) } return density
def test_sympyissue_2787(): n, k = symbols('n k', positive=True, integer=True) p = symbols('p', positive=True) binomial_dist = binomial(n, k)*p**k*(1 - p)**(n - k) s = Sum(binomial_dist*k, (k, 0, n)) res = s.doit().simplify() assert res == Piecewise( (n*p, And(Or(-n + 1 < 0, Ne(p/(p - 1), 1)), p/Abs(p - 1) <= 1)), (Sum(k*p**k*(-p + 1)**(-k)*(-p + 1)**n*binomial(n, k), (k, 0, n)), True))
def test_gosper_sum_iterated(): f1 = binomial(2*k, k)/4**k f2 = (1 + 2*n)*binomial(2*n, n)/4**n f3 = (1 + 2*n)*(3 + 2*n)*binomial(2*n, n)/(3*4**n) f4 = (1 + 2*n)*(3 + 2*n)*(5 + 2*n)*binomial(2*n, n)/(15*4**n) f5 = (1 + 2*n)*(3 + 2*n)*(5 + 2*n)*(7 + 2*n)*binomial(2*n, n)/(105*4**n) assert gosper_sum(f1, (k, 0, n)) == f2 assert gosper_sum(f2, (n, 0, n)) == f3 assert gosper_sum(f3, (n, 0, n)) == f4 assert gosper_sum(f4, (n, 0, n)) == f5
def test_sympyissue_16722(): n, z = symbols('n z') assert isinstance(limit(binomial(n + z, n)*n**-z, n, oo), Limit) z = symbols('z', positive=True) assert limit(binomial(n + z, n)*n**-z, n, oo) == 1/gamma(z + 1) n = symbols('n', positive=True, integer=True) z = symbols('z', positive=True) assert isinstance(limit(binomial(n + z, n)*n**-z, n, oo), Limit) n, z = symbols('n z', positive=True, integer=True) assert isinstance(limit(binomial(n + z, n)*n**-z, n, oo), Limit)
def test_catalan(): n = Symbol('n', integer=True) m = Symbol('n', integer=True, positive=True) catalans = [1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786] for i, c in enumerate(catalans): assert catalan(i) == c assert catalan(n).rewrite(factorial).subs({n: i}) == c assert catalan(n).rewrite(Product).subs({n: i}).doit() == c assert catalan(x) == catalan(x) assert catalan(2 * x).rewrite(binomial) == binomial(4 * x, 2 * x) / (2 * x + 1) assert catalan(Rational(1, 2)).rewrite(gamma) == 8 / (3 * pi) assert catalan(Rational(1, 2)).rewrite(factorial).rewrite(gamma) ==\ 8 / (3 * pi) assert catalan(3 * x).rewrite(gamma) == 4**( 3 * x) * gamma(3 * x + Rational(1, 2)) / (sqrt(pi) * gamma(3 * x + 2)) assert catalan(x).rewrite(hyper) == hyper((-x + 1, -x), (2, ), 1) assert catalan(n).rewrite(factorial) == factorial( 2 * n) / (factorial(n + 1) * factorial(n)) assert isinstance(catalan(n).rewrite(Product), catalan) assert isinstance(catalan(m).rewrite(Product), Product) assert diff(catalan(x), x) == (polygamma(0, x + Rational(1, 2)) - polygamma(0, x + 2) + log(4)) * catalan(x) assert catalan(x).evalf() == catalan(x) c = catalan(Rational(1, 2)).evalf() assert str(c) == '0.848826363156775' c = catalan(I).evalf(3) assert sstr((re(c), im(c))) == '(0.398, -0.0209)'
def test_evalf_fast_series(): # Euler transformed series for sqrt(1+x) assert NS(Sum(fac(2*n + 1)/fac(n)**2/2**(3*n + 1), (n, 0, oo)), 100, strict=False) == NS(sqrt(2), 100) # Some series for exp(1) estr = NS(E, 100) assert NS(Sum(1/fac(n), (n, 0, oo)), 100, strict=False) == estr assert NS(1/Sum((1 - 2*n)/fac(2*n), (n, 0, oo)), 100) == estr assert NS(Sum((2*n + 1)/fac(2*n), (n, 0, oo)), 100, strict=False) == estr assert NS(Sum((4*n + 3)/2**(2*n + 1)/fac(2*n + 1), (n, 0, oo))**2, 100, strict=False) == estr pistr = NS(pi, 100) # Ramanujan series for pi assert NS(9801/sqrt(8)/Sum(fac(4*n)*(1103 + 26390*n)/fac(n)**4/396**(4*n), (n, 0, oo)), 100, strict=False) == pistr assert NS(1/Sum( binomial(2*n, n)**3 * (42*n + 5)/2**(12*n + 4), (n, 0, oo)), 100) == pistr # Machin's formula for pi assert NS(16*Sum((-1)**n/(2*n + 1)/5**(2*n + 1), (n, 0, oo)) - 4*Sum((-1)**n/(2*n + 1)/239**(2*n + 1), (n, 0, oo)), 100) == pistr # Apery's constant astr = NS(zeta(3), 100) P = 126392*n**5 + 412708*n**4 + 531578*n**3 + 336367*n**2 + 104000 * \ n + 12463 assert NS(Sum((-1)**n * P / 24 * (fac(2*n + 1)*fac(2*n)*fac(n))**3 / fac(3*n + 2) / fac(4*n + 3)**3, (n, 0, oo)), 100, strict=False) == astr assert NS(Sum((-1)**n * (205*n**2 + 250*n + 77)/64 * fac(n)**10 / fac(2*n + 1)**5, (n, 0, oo)), 100, strict=False) == astr pytest.raises(ValueError, lambda: Sum(factorial(n), (n, 0, oo)).evalf())
def dict(self): n, p, succ, fail = self.n, self.p, self.succ, self.fail n = as_int(n) return { k * succ + (n - k) * fail: binomial(n, k) * p**k * (1 - p)**(n - k) for k in range(0, n + 1) }
def test_uniformsum_d(): n = Symbol("n", integer=True) k = Symbol("k") X = UniformSum('x', n) d = density(X)(x) assert d == 1/factorial(n - 1)*Sum((-1)**k*(x - k)**(n - 1) * binomial(n, k), (k, 0, floor(x)))
def test_uniformsum(): n = Symbol("n", integer=True) _k = Symbol("k") X = UniformSum('x', n) assert density(X)(x) == (Sum( (-1)**_k * (-_k + x)**(n - 1) * binomial(n, _k), (_k, 0, floor(x))) / factorial(n - 1))
def test_uniformsum_d(): n = Symbol('n', integer=True) k = Symbol('k') X = UniformSum('x', n) d = density(X)(x) assert d == 1/factorial(n - 1)*Sum((-1)**k*(x - k)**(n - 1) * binomial(n, k), (k, 0, floor(x)))
def test_gosper_sum_AeqB_part2(): f2a = n**2*a**n f2b = (n - r/2)*binomial(r, n) f2c = factorial(n - 1)**2/(factorial(n - x)*factorial(n + x)) g2a = -a*(a + 1)/(a - 1)**3 + a**( m + 1)*(a**2*m**2 - 2*a*m**2 + m**2 - 2*a*m + 2*m + a + 1)/(a - 1)**3 g2b = (m - r)*binomial(r, m)/2 ff = factorial(1 - x)*factorial(1 + x) g2c = 1/ff*( 1 - 1/x**2) + factorial(m)**2/(x**2*factorial(m - x)*factorial(m + x)) g = gosper_sum(f2a, (n, 0, m)) assert g is not None and simplify(g - g2a) == 0 g = gosper_sum(f2b, (n, 0, m)) assert g is not None and simplify(g - g2b) == 0 g = gosper_sum(f2c, (n, 1, m)) assert g is not None and simplify(g - g2c) == 0
def test_gosper_sum_AeqB_part2(): # Ex. 5.7.2 f2a = n**2 * a**n f2b = (n - r / 2) * binomial(r, n) f2c = factorial(n - 1)**2 / (factorial(n - x) * factorial(n + x)) f2d = n * (n + a + b) * a**n * b**n / (factorial(n + a) * factorial(n + b)) g2a = -a * (a + 1) / (a - 1)**3 + a**(m + 1) * ( a**2 * m**2 - 2 * a * m**2 + m**2 - 2 * a * m + 2 * m + a + 1) / (a - 1)**3 g2b = (m - r) * binomial(r, m) / 2 g2c = (factorial(m)**2 / (x**2 * factorial(-x + m) * factorial(x + m)) - sin(pi * x) / (pi * x**3)) g2d = (1 / (factorial(a - 1) * factorial(b - 1)) - a**(m + 1) * b**(m + 1) / (factorial(a + m) * factorial(b + m))) assert gosper_sum(f2a, (n, 0, m)).equals(g2a) assert gosper_sum(f2b, (n, 0, m)).equals(g2b) assert gosper_sum(f2c, (n, 1, m)).equals(g2c) assert gosper_sum(f2d, (n, 0, m)).equals(g2d)
def test_binomial_diff(): n = Symbol('n', integer=True) k = Symbol('k', integer=True) assert binomial(n, k).diff(n) == \ (-polygamma(0, 1 + n - k) + polygamma(0, 1 + n))*binomial(n, k) assert binomial(n**2, k**3).diff(n) == \ 2*n*(-polygamma( 0, 1 + n**2 - k**3) + polygamma(0, 1 + n**2))*binomial(n**2, k**3) assert binomial(n, k).diff(k) == \ (-polygamma(0, 1 + k) + polygamma(0, 1 + n - k))*binomial(n, k) assert binomial(n**2, k**3).diff(k) == \ 3*k**2*(-polygamma( 0, 1 + k**3) + polygamma(0, 1 + n**2 - k**3))*binomial(n**2, k**3) pytest.raises(ArgumentIndexError, lambda: binomial(n, k).fdiff(3))
def test_hypersimp(): n, k = symbols('n,k', integer=True) assert hypersimp(factorial(k), k) == k + 1 assert hypersimp(factorial(k**2), k) is None assert hypersimp(1/factorial(k), k) == 1/(k + 1) assert hypersimp(2**k/factorial(k)**2, k) == 2/(k + 1)**2 assert hypersimp(binomial(n, k), k) == (n - k)/(k + 1) assert hypersimp(binomial(n + 1, k), k) == (n - k + 1)/(k + 1) term = (4*k + 1)*factorial(k)/factorial(2*k + 1) assert hypersimp(term, k) == ((4*k + 5)/(3 + 14*k + 8*k**2))/2 term = 1/((2*k - 1)*factorial(2*k + 1)) assert hypersimp(term, k) == (k - Rational(1, 2))/((k + 1)*(2*k + 1)*(2*k + 3)) term = binomial(n, k)*(-1)**k/factorial(k) assert hypersimp(term, k) == (k - n)/(k + 1)**2
def test_findrecur(): a, x, y = symbols("a, x, y") n, k = symbols("n, k", integer=True) F = symbols("F", cls=Function) f = Sum(factorial(n) / (factorial(k) * factorial(n - k)), (k, 0, oo)) g = Sum(k * factorial(n) / (factorial(k) * factorial(n - k)), (k, 0, oo)) fa = Sum((-1)**k * binomial(n, k) * binomial(2 * n - 2 * k, n + a), (k, 0, oo)) fb = Sum(binomial(x, k) * binomial(y, n - k), (k, 0, oo)) assert f.findrecur(F) == -F(n, k) + F(n - 1, k) + F(n - 1, k - 1) assert (Sum(binomial(n, k), (k, 0, oo)).findrecur(F) == -F(n, k) + F(n - 1, k) + F(n - 1, k - 1)) assert (g.findrecur(F) == (-1 + 1 / n) * F(n, k) + F(n - 1, k) + F(n - 1, k - 1)) assert (fa.findrecur(F, n) == F(n - 2, k - 1) - (2 * n - 1) * F(n - 1, k) / (2 * n - 2) - (a**2 - n**2) * F(n, k) / (4 * n * (n - 1))) assert (fb.findrecur(F, n) == -n * F(n, k) / (-n + x + y + 2) + (-n + x + 1) * F(n - 1, k - 1) / (-n + x + y + 2) + (-n + y + 1) * F(n - 1, k) / (-n + x + y + 2) + F(n - 2, k - 1))
def test_binomial_numeric(): nvals = range(5) pvals = [0, Rational(1, 4), Rational(1, 2), Rational(3, 4), 1] for n in nvals: for p in pvals: X = Binomial('X', n, p) assert E(X) == n * p assert variance(X) == n * p * (1 - p) if n > 0 and 0 < p < 1: assert skewness(X) == (1 - 2 * p) / sqrt(n * p * (1 - p)) for k in range(n + 1): assert P(Eq(X, k)) == binomial(n, k) * p**k * (1 - p)**(n - k)
def test_binomial_numeric(): nvals = range(5) pvals = [0, Rational(1, 4), Rational(1, 2), Rational(3, 4), 1] for n in nvals: for p in pvals: X = Binomial('X', n, p) assert E(X) == n*p assert variance(X) == n*p*(1 - p) if n > 0 and 0 < p < 1: assert skewness(X) == (1 - 2*p)/sqrt(n*p*(1 - p)) for k in range(n + 1): assert P(Eq(X, k)) == binomial(n, k)*p**k*(1 - p)**(n - k)
def test_binomial_diff(): n = Symbol('n', integer=True) k = Symbol('k', integer=True) assert binomial(n, k).diff(n) == \ (-polygamma(0, 1 + n - k) + polygamma(0, 1 + n))*binomial(n, k) assert binomial(n**2, k**3).diff(n) == \ 2*n*(-polygamma( 0, 1 + n**2 - k**3) + polygamma(0, 1 + n**2))*binomial(n**2, k**3) assert binomial(n, k).diff(k) == \ (-polygamma(0, 1 + k) + polygamma(0, 1 + n - k))*binomial(n, k) assert binomial(n**2, k**3).diff(k) == \ 3*k**2*(-polygamma( 0, 1 + k**3) + polygamma(0, 1 + n**2 - k**3))*binomial(n**2, k**3)
def test_hypersum(): assert simplify(summation(x**n/fac(n), (n, 1, oo))) == -1 + exp(x) assert summation((-1)**n * x**(2*n) / fac(2*n), (n, 0, oo)) == cos(x) assert simplify(summation((-1)**n*x**(2*n + 1) / factorial(2*n + 1), (n, 3, oo))) == -x + sin(x) + x**3/6 - x**5/120 assert summation(1/(n + 2)**3, (n, 1, oo)) == -Rational(9, 8) + zeta(3) assert summation(1/n**4, (n, 1, oo)) == pi**4/90 s = summation(x**n*n, (n, -oo, 0)) assert s.is_Piecewise assert s.args[0].args[0] == -1/(x*(1 - 1/x)**2) assert s.args[0].args[1] == (abs(1/x) < 1) m = Symbol('n', integer=True, positive=True) assert summation(binomial(m, k), (k, 0, m)) == 2**m
def test_catalan(): n = Symbol('n', integer=True) m = Symbol('n', integer=True, positive=True) catalans = [1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786] for i, c in enumerate(catalans): assert catalan(i) == c assert catalan(n).rewrite(factorial).subs({n: i}) == c assert catalan(n).rewrite(Product).subs({n: i}).doit() == c assert catalan(x) == catalan(x) assert catalan(2 * x).rewrite(binomial) == binomial(4 * x, 2 * x) / (2 * x + 1) assert catalan(Rational(1, 2)).rewrite(gamma) == 8 / (3 * pi) assert catalan(Rational(1, 2)).rewrite(factorial).rewrite(gamma) ==\ 8 / (3 * pi) assert catalan(3 * x).rewrite(gamma) == 4**( 3 * x) * gamma(3 * x + Rational(1, 2)) / (sqrt(pi) * gamma(3 * x + 2)) assert catalan(x).rewrite(hyper) == hyper((-x + 1, -x), (2, ), 1) assert catalan(n).rewrite(factorial) == factorial( 2 * n) / (factorial(n + 1) * factorial(n)) assert isinstance(catalan(n).rewrite(Product), catalan) assert isinstance(catalan(m).rewrite(Product), Product) assert diff(catalan(x), x) == (polygamma(0, x + Rational(1, 2)) - polygamma(0, x + 2) + log(4)) * catalan(x) assert catalan(x).evalf() == catalan(x) c = catalan(Rational(1, 2)).evalf() assert str(c) == '0.848826363156775' c = catalan(I).evalf(3) assert sstr((re(c), im(c))) == '(0.398, -0.0209)' # issue sympy/sympy#8601 n = Symbol('n', integer=True, negative=True) assert catalan(n - 1) == 0 assert catalan(Rational(-1, 2)) == zoo assert catalan(-1) == Rational(-1, 2) c1 = catalan(-5.6).evalf(strict=False) assert str(c1) == '6.93334070531408e-5' c2 = catalan(-35.4).evalf(strict=False) assert str(c2) == '-4.14189164517449e-24'
def test_assoc_laguerre(): # generalized Laguerre polynomials: assert assoc_laguerre(0, alpha, x) == 1 assert assoc_laguerre(1, alpha, x) == -x + alpha + 1 assert assoc_laguerre(2, alpha, x).expand() == \ (x**2/2 - (alpha + 2)*x + (alpha + 2)*(alpha + 1)/2).expand() assert assoc_laguerre(3, alpha, x).expand() == \ (-x**3/6 + (alpha + 3)*x**2/2 - (alpha + 2)*(alpha + 3)*x/2 + (alpha + 1)*(alpha + 2)*(alpha + 3)/6).expand() # Test the lowest 10 polynomials with laguerre_poly, to make sure it works: for i in range(10): assert assoc_laguerre(i, 0, x).expand() == laguerre_poly(i, x) X = assoc_laguerre(n, m, x) assert isinstance(X, assoc_laguerre) assert assoc_laguerre(n, 0, x) == laguerre(n, x) assert assoc_laguerre(n, alpha, 0) == binomial(alpha + n, alpha) p = Symbol('p', positive=True) assert assoc_laguerre(p, alpha, oo) == (-1)**p*oo assert assoc_laguerre(p, alpha, -oo) == oo assert diff(assoc_laguerre(n, alpha, x), x) == \ -assoc_laguerre(n - 1, alpha + 1, x) pytest.raises(ArgumentIndexError, lambda: assoc_laguerre(n, m, x).fdiff(1)) assert conjugate(assoc_laguerre(n, alpha, x)) == \ assoc_laguerre(n, conjugate(alpha), conjugate(x)) pytest.raises(ValueError, lambda: assoc_laguerre(-2.1, alpha, x)) # issue sympy/sympy#10961 X = assoc_laguerre(Rational(5, 2), alpha, x) assert isinstance(X, assoc_laguerre) assert (diff(assoc_laguerre(n, alpha, x), alpha) == Sum(assoc_laguerre(k, alpha, x)/(-alpha + n), (k, 0, n - 1)))
def test_gosper_sum_AeqB_part1(): f1a = n**4 f1b = n**3 * 2**n f1c = 1 / (n**2 + sqrt(5) * n - 1) f1d = n**4 * 4**n / binomial(2 * n, n) f1e = factorial( 3 * n) / (factorial(n) * factorial(n + 1) * factorial(n + 2) * 27**n) f1f = binomial(2 * n, n)**2 / ((n + 1) * 4**(2 * n)) f1g = (4 * n - 1) * binomial(2 * n, n)**2 / ((2 * n - 1)**2 * 4**(2 * n)) f1h = n * factorial(n - Rational(1, 2))**2 / factorial(n + 1)**2 g1a = m * (m + 1) * (2 * m + 1) * (3 * m**2 + 3 * m - 1) / 30 g1b = 26 + 2**(m + 1) * (m**3 - 3 * m**2 + 9 * m - 13) g1c = (m + 1) * (m * (m**2 - 7 * m + 3) * sqrt(5) - (3 * m**3 - 7 * m**2 + 19 * m - 6)) / ( 2 * m**3 * sqrt(5) + m**4 + 5 * m**2 - 1) / 6 g1d = -Rational(2, 231) + 2 * 4**m * (m + 1) * ( 63 * m**4 + 112 * m**3 + 18 * m**2 - 22 * m + 3) / (693 * binomial(2 * m, m)) g1e = -Rational( 9, 2) + (81 * m**2 + 261 * m + 200) * factorial(3 * m + 2) / ( 40 * 27**m * factorial(m) * factorial(m + 1) * factorial(m + 2)) g1f = (2 * m + 1)**2 * binomial(2 * m, m)**2 / (4**(2 * m) * (m + 1)) g1g = -binomial(2 * m, m)**2 / 4**(2 * m) g1h = 4 * pi - (2 * m + 1)**2 * ( 3 * m + 4) * factorial(m - Rational(1, 2))**2 / factorial(m + 1)**2 g = gosper_sum(f1a, (n, 0, m)) assert g is not None and simplify(g - g1a) == 0 g = gosper_sum(f1b, (n, 0, m)) assert g is not None and simplify(g - g1b) == 0 g = gosper_sum(f1c, (n, 0, m)) assert g is not None and simplify(g - g1c) == 0 g = gosper_sum(f1d, (n, 0, m)) assert g is not None and simplify(g - g1d) == 0 g = gosper_sum(f1e, (n, 0, m)) assert g is not None and simplify(g - g1e) == 0 g = gosper_sum(f1f, (n, 0, m)) assert g is not None and simplify(g - g1f) == 0 g = gosper_sum(f1g, (n, 0, m)) assert g is not None and simplify(g - g1g) == 0 g = gosper_sum(f1h, (n, 0, m)) # need to call rewrite(gamma) here because we have terms involving # factorial(1/2) assert g is not None and simplify(g - g1h).rewrite(gamma) == 0
def test_assoc_laguerre(): # generalized Laguerre polynomials: assert assoc_laguerre(0, alpha, x) == 1 assert assoc_laguerre(1, alpha, x) == -x + alpha + 1 assert assoc_laguerre(2, alpha, x).expand() == \ (x**2/2 - (alpha + 2)*x + (alpha + 2)*(alpha + 1)/2).expand() assert assoc_laguerre(3, alpha, x).expand() == \ (-x**3/6 + (alpha + 3)*x**2/2 - (alpha + 2)*(alpha + 3)*x/2 + (alpha + 1)*(alpha + 2)*(alpha + 3)/6).expand() # Test the lowest 10 polynomials with laguerre_poly, to make sure it works: for i in range(10): assert assoc_laguerre(i, 0, x).expand() == laguerre_poly(i, x) X = assoc_laguerre(n, m, x) assert isinstance(X, assoc_laguerre) assert assoc_laguerre(n, 0, x) == laguerre(n, x) assert assoc_laguerre(n, alpha, 0) == binomial(alpha + n, alpha) p = Symbol('p', positive=True) assert assoc_laguerre(p, alpha, oo) == (-1)**p*oo assert assoc_laguerre(p, alpha, -oo) == oo assert diff(assoc_laguerre(n, alpha, x), x) == \ -assoc_laguerre(n - 1, alpha + 1, x) pytest.raises(ArgumentIndexError, lambda: assoc_laguerre(n, m, x).fdiff(1)) assert conjugate(assoc_laguerre(n, alpha, x)) == \ assoc_laguerre(n, conjugate(alpha), conjugate(x)) pytest.raises(ValueError, lambda: assoc_laguerre(-2.1, alpha, x)) # issue sympy/sympy#10961 X = assoc_laguerre(Rational(5, 2), alpha, x) assert isinstance(X, assoc_laguerre)
def test_gosper_sum_AeqB_part1(): f1a = n**4 f1b = n**3*2**n f1c = 1/(n**2 + sqrt(5)*n - 1) f1d = n**4*4**n/binomial(2*n, n) f1e = factorial(3*n)/(factorial(n)*factorial(n + 1)*factorial(n + 2)*27**n) f1f = binomial(2*n, n)**2/((n + 1)*4**(2*n)) f1g = (4*n - 1)*binomial(2*n, n)**2/((2*n - 1)**2*4**(2*n)) f1h = n*factorial(n - Rational(1, 2))**2/factorial(n + 1)**2 g1a = m*(m + 1)*(2*m + 1)*(3*m**2 + 3*m - 1)/30 g1b = 26 + 2**(m + 1)*(m**3 - 3*m**2 + 9*m - 13) g1c = (m + 1)*(m*(m**2 - 7*m + 3)*sqrt(5) - ( 3*m**3 - 7*m**2 + 19*m - 6))/(2*m**3*sqrt(5) + m**4 + 5*m**2 - 1)/6 g1d = -Rational(2, 231) + 2*4**m*(m + 1)*(63*m**4 + 112*m**3 + 18*m**2 - 22*m + 3)/(693*binomial(2*m, m)) g1e = -Rational(9, 2) + (81*m**2 + 261*m + 200)*factorial( 3*m + 2)/(40*27**m*factorial(m)*factorial(m + 1)*factorial(m + 2)) g1f = (2*m + 1)**2*binomial(2*m, m)**2/(4**(2*m)*(m + 1)) g1g = -binomial(2*m, m)**2/4**(2*m) g1h = 4*pi - (2*m + 1)**2*(3*m + 4)*factorial(m - Rational(1, 2))**2/factorial(m + 1)**2 g = gosper_sum(f1a, (n, 0, m)) assert g is not None and simplify(g - g1a) == 0 g = gosper_sum(f1b, (n, 0, m)) assert g is not None and simplify(g - g1b) == 0 g = gosper_sum(f1c, (n, 0, m)) assert g is not None and simplify(g - g1c) == 0 g = gosper_sum(f1d, (n, 0, m)) assert g is not None and simplify(g - g1d) == 0 g = gosper_sum(f1e, (n, 0, m)) assert g is not None and simplify(g - g1e) == 0 g = gosper_sum(f1f, (n, 0, m)) assert g is not None and simplify(g - g1f) == 0 g = gosper_sum(f1g, (n, 0, m)) assert g is not None and simplify(g - g1g) == 0 g = gosper_sum(f1h, (n, 0, m)) # need to call rewrite(gamma) here because we have terms involving # factorial(1/2) assert g is not None and simplify(g - g1h).rewrite(gamma) == 0
def test_gosper_sum_AeqB_part1(): # Ex. 5.7.1 f1a = n**4 f1b = n**3 * 2**n f1c = 1 / (n**2 + sqrt(5) * n - 1) f1d = n**4 * 4**n / binomial(2 * n, n) f1e = factorial( 3 * n) / (factorial(n) * factorial(n + 1) * factorial(n + 2) * 27**n) f1f = binomial(2 * n, n)**2 / ((n + 1) * 4**(2 * n)) f1g = (4 * n - 1) * binomial(2 * n, n)**2 / ((2 * n - 1)**2 * 4**(2 * n)) f1h = n * factorial(n - Rational(1, 2))**2 / factorial(n + 1)**2 g1a = m * (m + 1) * (2 * m + 1) * (3 * m**2 + 3 * m - 1) / 30 g1b = 26 + 2**(m + 1) * (m**3 - 3 * m**2 + 9 * m - 13) g1c = (m + 1) * (m * (m**2 - 7 * m + 3) * sqrt(5) - (3 * m**3 - 7 * m**2 + 19 * m - 6)) / ( 2 * m**3 * sqrt(5) + m**4 + 5 * m**2 - 1) / 6 g1d = -Rational(2, 231) + 2 * 4**m * (m + 1) * ( 63 * m**4 + 112 * m**3 + 18 * m**2 - 22 * m + 3) / (693 * binomial(2 * m, m)) g1e = -Rational( 9, 2) + (81 * m**2 + 261 * m + 200) * factorial(3 * m + 2) / ( 40 * 27**m * factorial(m) * factorial(m + 1) * factorial(m + 2)) g1f = (2 * m + 1)**2 * binomial(2 * m, m)**2 / (4**(2 * m) * (m + 1)) g1g = -binomial(2 * m, m)**2 / 4**(2 * m) g1h = ( 4 * pi - (2 * m + 1)**2 * (3 * m + 4) * factorial(m - Rational(1, 2))**2 / factorial(m + 1)**2) assert gosper_sum(f1a, (n, 0, m)).equals(g1a) assert gosper_sum(f1b, (n, 0, m)).equals(g1b) assert gosper_sum(f1c, (n, 0, m)).equals(g1c) assert gosper_sum(f1d, (n, 0, m)).equals(g1d) assert gosper_sum(f1e, (n, 0, m)).equals(g1e) assert gosper_sum(f1f, (n, 0, m)).equals(g1f) assert gosper_sum(f1g, (n, 0, m)).equals(g1g) assert gosper_sum(f1h, (n, 0, m)).equals(g1h)
def test_gosper_sum_parametric(): assert gosper_sum(binomial(Rational(1, 2), m - j + 1)*binomial(Rational(1, 2), m + j), (j, 1, n)) == \ n*(1 + m - n)*(-1 + 2*m + 2*n)*binomial(Rational(1, 2), 1 + m - n) * \ binomial(Rational(1, 2), m + n)/(m*(1 + 2*m))
def test_sympyissue_12018(): f = binomial(n + 1, k) / 2**(n + 1) - binomial(n, k) / 2**n # Ex. 5.7.11a assert gosper_sum(f, (k, 0, n)).simplify() == -2**(-n - 1)
def test_sympyissue_8016(): n, m = symbols('n, m', integer=True, positive=True) k = symbols('k', integer=True) s = Sum(binomial(m, k)*binomial(m, n-k)*(-1)**k, (k, 0, n)) assert s.doit().simplify() == \ cos(pi*n/2)*gamma(m + 1)/gamma(n/2 + 1)/gamma(m - n/2 + 1)
def test_rsolve(): f = y(n + 2) - y(n + 1) - y(n) h = sqrt(5)*(Rational(1, 2) + sqrt(5)/2)**n \ - sqrt(5)*(Rational(1, 2) - sqrt(5)/2)**n assert rsolve(f, y(n)) in [ C0*(Rational(1, 2) - sqrt(5)/2)**n + C1*(Rational(1, 2) + sqrt(5)/2)**n, C1*(Rational(1, 2) - sqrt(5)/2)**n + C0*(Rational(1, 2) + sqrt(5)/2)**n, ] assert rsolve(f, y(n), [0, 5]) == h assert rsolve(f, y(n), {0: 0, 1: 5}) == h assert rsolve(f, y(n), {y(0): 0, y(1): 5}) == h assert rsolve(y(n) - y(n - 1) - y(n - 2), y(n), [0, 5]) == h assert rsolve(Eq(y(n), y(n - 1) + y(n - 2)), y(n), [0, 5]) == h assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 f = (n - 1)*y(n + 2) - (n**2 + 3*n - 2)*y(n + 1) + 2*n*(n + 1)*y(n) g = C1*factorial(n) + C0*2**n h = -3*factorial(n) + 3*2**n assert rsolve(f, y(n)) == g assert rsolve(f, y(n), []) == g assert rsolve(f, y(n), {}) == g assert rsolve(f, y(n), [0, 3]) == h assert rsolve(f, y(n), {0: 0, 1: 3}) == h assert rsolve(f, y(n), {y(0): 0, y(1): 3}) == h assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 f = y(n) - y(n - 1) - 2 assert rsolve(f, y(n), {y(0): 0}) == 2*n assert rsolve(f, y(n), {y(0): 1}) == 2*n + 1 assert rsolve(f, y(n), {y(0): 0, y(1): 1}) is None assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 f = 3*y(n - 1) - y(n) - 1 assert rsolve(f, y(n), {y(0): 0}) == -3**n/2 + Rational(1, 2) assert rsolve(f, y(n), {y(0): 1}) == 3**n/2 + Rational(1, 2) assert rsolve(f, y(n), {y(0): 2}) == 3*3**n/2 + Rational(1, 2) assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 f = y(n) - 1/n*y(n - 1) assert rsolve(f, y(n)) == C0/factorial(n) assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 f = y(n) - 1/n*y(n - 1) - 1 assert rsolve(f, y(n)) is None f = 2*y(n - 1) + (1 - n)*y(n)/n assert rsolve(f, y(n), {y(1): 1}) == 2**(n - 1)*n assert rsolve(f, y(n), {y(1): 2}) == 2**(n - 1)*n*2 assert rsolve(f, y(n), {y(1): 3}) == 2**(n - 1)*n*3 assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 f = (n - 1)*(n - 2)*y(n + 2) - (n + 1)*(n + 2)*y(n) assert rsolve(f, y(n), {y(3): 6, y(4): 24}) == n*(n - 1)*(n - 2) assert rsolve( f, y(n), {y(3): 6, y(4): -24}) == -n*(n - 1)*(n - 2)*(-1)**(n) assert f.subs({y: Lambda(k, rsolve(f, y(n)).subs({n: k}))}).simplify() == 0 assert rsolve(Eq(y(n + 1), a*y(n)), y(n), {y(1): a}).simplify() == a**n assert rsolve(y(n) - a*y(n-2), y(n), {y(1): sqrt(a)*(a + b), y(2): a*(a - b)}).simplify() == \ a**(n/2)*(-(-1)**n*b + a) f = (-16*n**2 + 32*n - 12)*y(n - 1) + (4*n**2 - 12*n + 9)*y(n) assert expand_func(rsolve(f, y(n), {y(1): binomial(2*n + 1, 3)}).rewrite(gamma)).simplify() == \ 2**(2*n)*n*(2*n - 1)*(4*n**2 - 1)/12 assert (rsolve(y(n) + a*(y(n + 1) + y(n - 1))/2, y(n)) - (C0*(-sqrt(-1 + a**(-2)) - 1/a)**n + C1*(sqrt(-1 + a**(-2)) - 1/a)**n)).simplify() == 0
def test_sympyissue_12018(): f = binomial(n + 1, k)/2**(n + 1) - binomial(n, k)/2**n # Ex. 5.7.11a assert gosper_sum(f, (k, 0, n)).simplify() == -2**(-n - 1)
def test_sympyissue_8462(): assert gruntz(binomial(x, x/2), x) == oo # issue sympy/sympy#10801 assert gruntz(16**x/(x*binomial(2*x, x)**2), x) == pi
def test_combsimp(): assert combsimp(factorial(n)) == factorial(n) assert combsimp(binomial(n, k)) == binomial(n, k) assert combsimp(factorial(n)/factorial(n - 3)) == n*(-1 + n)*(-2 + n) assert combsimp(binomial(n + 1, k + 1)/binomial(n, k)) == (1 + n)/(1 + k) assert combsimp(binomial(3*n + 4, n + 1)/binomial(3*n + 1, n)) == \ Rational(3, 2)*((3*n + 2)*(3*n + 4)/((n + 1)*(2*n + 3))) assert combsimp(factorial(n)**2/factorial(n - 3)) == \ factorial(n)*n*(-1 + n)*(-2 + n) assert combsimp(factorial(n)*binomial(n + 1, k + 1)/binomial(n, k)) == \ factorial(n + 1)/(1 + k) assert combsimp(binomial(n - 1, k)) == -((-n + k)*binomial(n, k))/n assert combsimp(binomial(n + 2, k + Rational(1, 2))) == 4*((n + 1)*(n + 2) * binomial(n, k + Rational(1, 2)))/((2*k - 2*n - 1)*(2*k - 2*n - 3)) assert combsimp(binomial(n + 2, k + 2.0)) == \ -((1.0*n + 2.0)*binomial(n + 1.0, k + 2.0))/(k - n) # coverage tests assert combsimp(factorial(n*(1 + n) - n**2 - n)) == 1 assert combsimp(binomial(n + k - 2, n)) == \ k*(k - 1)*binomial(n + k, n)/((n + k)*(n + k - 1)) i = Symbol('i', integer=True) e = gamma(i + 3) assert combsimp(e) == e e = gamma(exp(i)) assert combsimp(e) == e e = gamma(n + Rational(1, 3))*gamma(n + Rational(2, 3)) assert combsimp(e) == e assert combsimp(gamma(4*n + Rational(1, 2))/gamma(2*n - Rational(3, 4))) == \ 2**(4*n - Rational(5, 2))*(8*n - 3)*gamma(2*n + Rational(3, 4))/sqrt(pi) assert combsimp(6*FallingFactorial(-4, n)/factorial(n)) == \ (-1)**n*(n + 1)*(n + 2)*(n + 3) assert combsimp(6*FallingFactorial(-4, n - 1)/factorial(n - 1)) == \ (-1)**(n - 1)*n*(n + 1)*(n + 2) assert combsimp(6*FallingFactorial(-4, n - 3)/factorial(n - 3)) == \ (-1)**(n - 3)*n*(n - 1)*(n - 2) assert combsimp(6*FallingFactorial(-4, -n - 1)/factorial(-n - 1)) == \ -(-1)**(-n - 1)*n*(n - 1)*(n - 2) assert combsimp(6*RisingFactorial(4, n)/factorial(n)) == \ (n + 1)*(n + 2)*(n + 3) assert combsimp(6*RisingFactorial(4, n - 1)/factorial(n - 1)) == \ n*(n + 1)*(n + 2) assert combsimp(6*RisingFactorial(4, n - 3)/factorial(n - 3)) == \ n*(n - 1)*(n - 2) assert combsimp(6*RisingFactorial(4, -n - 1)/factorial(-n - 1)) == \ -n*(n - 1)*(n - 2)
def test_hypergeometric_sums(): assert summation( binomial(2*k, k)/4**k, (k, 0, n)) == (1 + 2*n)*binomial(2*n, n)/4**n
def test_binomial(): n = Symbol('n', integer=True) nz = Symbol('nz', integer=True, nonzero=True) k = Symbol('k', integer=True) kp = Symbol('kp', integer=True, positive=True) u = Symbol('u', negative=True) p = Symbol('p', positive=True) z = Symbol('z', zero=True) assert binomial(0, 0) == 1 assert binomial(1, 1) == 1 assert binomial(10, 10) == 1 assert binomial(n, z) == 1 assert binomial(1, 2) == 0 assert binomial(1, -1) == 0 assert binomial(-1, 1) == -1 assert binomial(-1, -1) == 1 assert binomial(Rational(1, 2), Rational(1, 2)) == 1 assert binomial(-10, 1) == -10 assert binomial(-10, 7) == -11440 assert binomial(n, -1).func == binomial assert binomial(kp, -1) == 0 assert binomial(nz, 0) == 1 assert expand_func(binomial(n, 1)) == n assert expand_func(binomial(n, 2)) == n*(n - 1)/2 assert expand_func(binomial(n, n - 2)) == n*(n - 1)/2 assert expand_func(binomial(n, n - 1)) == n assert binomial(n, 3).func == binomial assert binomial(n, 3).expand(func=True) == n**3/6 - n**2/2 + n/3 assert expand_func(binomial(n, 3)) == n*(n - 2)*(n - 1)/6 assert expand_func(binomial(1, 2, evaluate=False)) == 0 assert expand_func(binomial(n, 0, evaluate=False)) == 1 assert isinstance(expand_func(binomial(n, -1, evaluate=False)), binomial) assert isinstance(expand_func(binomial(n, k)), binomial) assert binomial(n, n) == 1 assert binomial(n, n + 1).func == binomial # e.g. (-1, 0) == 1 assert binomial(kp, kp + 1) == 0 assert binomial(n, u).func == binomial assert binomial(kp, u) == 0 assert binomial(n, p).func == binomial assert binomial(n, k).func == binomial assert binomial(n, n + p).func == binomial assert binomial(kp, kp + p) == 0 assert expand_func(binomial(n, n - 3)) == n*(n - 2)*(n - 1)/6 assert binomial(n, k).is_integer assert binomial(p, k).is_integer is None
def test_rsolve(): f = y(n + 2) - y(n + 1) - y(n) h = sqrt(5)*(Rational(1, 2) + sqrt(5)/2)**n \ - sqrt(5)*(Rational(1, 2) - sqrt(5)/2)**n assert rsolve(f, y(n)) in [ C0 * (Rational(1, 2) - sqrt(5) / 2)**n + C1 * (Rational(1, 2) + sqrt(5) / 2)**n, C1 * (Rational(1, 2) - sqrt(5) / 2)**n + C0 * (Rational(1, 2) + sqrt(5) / 2)**n, ] assert rsolve(f, y(n), [0, 5]) == h assert rsolve(f, y(n), {0: 0, 1: 5}) == h assert rsolve(f, y(n), {y(0): 0, y(1): 5}) == h assert rsolve(y(n) - y(n - 1) - y(n - 2), y(n), [0, 5]) == h assert rsolve(Eq(y(n), y(n - 1) + y(n - 2)), y(n), [0, 5]) == h assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 f = (n - 1) * y(n + 2) - (n**2 + 3 * n - 2) * y(n + 1) + 2 * n * (n + 1) * y(n) g = C1 * factorial(n) + C0 * 2**n h = -3 * factorial(n) + 3 * 2**n assert rsolve(f, y(n)) == g assert rsolve(f, y(n), []) == g assert rsolve(f, y(n), {}) == g assert rsolve(f, y(n), [0, 3]) == h assert rsolve(f, y(n), {0: 0, 1: 3}) == h assert rsolve(f, y(n), {y(0): 0, y(1): 3}) == h assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 f = y(n) - y(n - 1) - 2 assert rsolve(f, y(n), {y(0): 0}) == 2 * n assert rsolve(f, y(n), {y(0): 1}) == 2 * n + 1 assert rsolve(f, y(n), {y(0): 0, y(1): 1}) is None assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 f = 3 * y(n - 1) - y(n) - 1 assert rsolve(f, y(n), {y(0): 0}) == -3**n / 2 + Rational(1, 2) assert rsolve(f, y(n), {y(0): 1}) == 3**n / 2 + Rational(1, 2) assert rsolve(f, y(n), {y(0): 2}) == 3 * 3**n / 2 + Rational(1, 2) assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 f = y(n) - 1 / n * y(n - 1) assert rsolve(f, y(n)) == C0 / factorial(n) assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 f = y(n) - 1 / n * y(n - 1) - 1 assert rsolve(f, y(n)) is None f = 2 * y(n - 1) + (1 - n) * y(n) / n assert rsolve(f, y(n), {y(1): 1}) == 2**(n - 1) * n assert rsolve(f, y(n), {y(1): 2}) == 2**(n - 1) * n * 2 assert rsolve(f, y(n), {y(1): 3}) == 2**(n - 1) * n * 3 assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 f = (n - 1) * (n - 2) * y(n + 2) - (n + 1) * (n + 2) * y(n) assert rsolve(f, y(n), {y(3): 6, y(4): 24}) == n * (n - 1) * (n - 2) assert rsolve(f, y(n), { y(3): 6, y(4): -24 }) == -n * (n - 1) * (n - 2) * (-1)**(n) assert f.subs(y, Lambda(k, rsolve(f, y(n)).subs(n, k))).simplify() == 0 assert rsolve(Eq(y(n + 1), a * y(n)), y(n), {y(1): a}).simplify() == a**n assert rsolve(y(n) - a*y(n-2), y(n), {y(1): sqrt(a)*(a + b), y(2): a*(a - b)}).simplify() == \ a**(n/2)*(-(-1)**n*b + a) f = (-16 * n**2 + 32 * n - 12) * y(n - 1) + (4 * n**2 - 12 * n + 9) * y(n) assert expand_func(rsolve(f, y(n), {y(1): binomial(2*n + 1, 3)}).rewrite(gamma)).simplify() == \ 2**(2*n)*n*(2*n - 1)*(4*n**2 - 1)/12 assert (rsolve(y(n) + a * (y(n + 1) + y(n - 1)) / 2, y(n)) - (C0 * (-sqrt(-1 + a**(-2)) - 1 / a)**n + C1 * (sqrt(-1 + a**(-2)) - 1 / a)**n)).simplify() == 0
def test_sympyissue_9699(): n, k = symbols('n k', real=True) assert combsimp((n + 1)*factorial(n)) == factorial(n + 1) assert combsimp((x + 1)*factorial(x)/gamma(y)) == gamma(x + 2)/gamma(y) assert combsimp(factorial(n)/n) == factorial(n - 1) assert combsimp(rf(x + n, k)*binomial(n, k)) == binomial(n, k)*gamma(k + n + x)/gamma(n + x)