test_combsimp.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. from sympy.core.numbers import Rational
  2. from sympy.core.symbol import symbols
  3. from sympy.functions.combinatorial.factorials import (FallingFactorial, RisingFactorial, binomial, factorial)
  4. from sympy.functions.special.gamma_functions import gamma
  5. from sympy.simplify.combsimp import combsimp
  6. from sympy.abc import x
  7. def test_combsimp():
  8. k, m, n = symbols('k m n', integer = True)
  9. assert combsimp(factorial(n)) == factorial(n)
  10. assert combsimp(binomial(n, k)) == binomial(n, k)
  11. assert combsimp(factorial(n)/factorial(n - 3)) == n*(-1 + n)*(-2 + n)
  12. assert combsimp(binomial(n + 1, k + 1)/binomial(n, k)) == (1 + n)/(1 + k)
  13. assert combsimp(binomial(3*n + 4, n + 1)/binomial(3*n + 1, n)) == \
  14. Rational(3, 2)*((3*n + 2)*(3*n + 4)/((n + 1)*(2*n + 3)))
  15. assert combsimp(factorial(n)**2/factorial(n - 3)) == \
  16. factorial(n)*n*(-1 + n)*(-2 + n)
  17. assert combsimp(factorial(n)*binomial(n + 1, k + 1)/binomial(n, k)) == \
  18. factorial(n + 1)/(1 + k)
  19. assert combsimp(gamma(n + 3)) == factorial(n + 2)
  20. assert combsimp(factorial(x)) == gamma(x + 1)
  21. # issue 9699
  22. assert combsimp((n + 1)*factorial(n)) == factorial(n + 1)
  23. assert combsimp(factorial(n)/n) == factorial(n-1)
  24. # issue 6658
  25. assert combsimp(binomial(n, n - k)) == binomial(n, k)
  26. # issue 6341, 7135
  27. assert combsimp(factorial(n)/(factorial(k)*factorial(n - k))) == \
  28. binomial(n, k)
  29. assert combsimp(factorial(k)*factorial(n - k)/factorial(n)) == \
  30. 1/binomial(n, k)
  31. assert combsimp(factorial(2*n)/factorial(n)**2) == binomial(2*n, n)
  32. assert combsimp(factorial(2*n)*factorial(k)*factorial(n - k)/
  33. factorial(n)**3) == binomial(2*n, n)/binomial(n, k)
  34. assert combsimp(factorial(n*(1 + n) - n**2 - n)) == 1
  35. assert combsimp(6*FallingFactorial(-4, n)/factorial(n)) == \
  36. (-1)**n*(n + 1)*(n + 2)*(n + 3)
  37. assert combsimp(6*FallingFactorial(-4, n - 1)/factorial(n - 1)) == \
  38. (-1)**(n - 1)*n*(n + 1)*(n + 2)
  39. assert combsimp(6*FallingFactorial(-4, n - 3)/factorial(n - 3)) == \
  40. (-1)**(n - 3)*n*(n - 1)*(n - 2)
  41. assert combsimp(6*FallingFactorial(-4, -n - 1)/factorial(-n - 1)) == \
  42. -(-1)**(-n - 1)*n*(n - 1)*(n - 2)
  43. assert combsimp(6*RisingFactorial(4, n)/factorial(n)) == \
  44. (n + 1)*(n + 2)*(n + 3)
  45. assert combsimp(6*RisingFactorial(4, n - 1)/factorial(n - 1)) == \
  46. n*(n + 1)*(n + 2)
  47. assert combsimp(6*RisingFactorial(4, n - 3)/factorial(n - 3)) == \
  48. n*(n - 1)*(n - 2)
  49. assert combsimp(6*RisingFactorial(4, -n - 1)/factorial(-n - 1)) == \
  50. -n*(n - 1)*(n - 2)
  51. def test_issue_6878():
  52. n = symbols('n', integer=True)
  53. assert combsimp(RisingFactorial(-10, n)) == 3628800*(-1)**n/factorial(10 - n)
  54. def test_issue_14528():
  55. p = symbols("p", integer=True, positive=True)
  56. assert combsimp(binomial(1,p)) == 1/(factorial(p)*factorial(1-p))
  57. assert combsimp(factorial(2-p)) == factorial(2-p)