test_appellseqs.py 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. """Tests for efficient functions for generating Appell sequences."""
  2. from sympy.core.numbers import Rational as Q
  3. from sympy.polys.polytools import Poly
  4. from sympy.testing.pytest import raises
  5. from sympy.polys.appellseqs import (bernoulli_poly, bernoulli_c_poly,
  6. euler_poly, genocchi_poly, andre_poly)
  7. from sympy.abc import x
  8. def test_bernoulli_poly():
  9. raises(ValueError, lambda: bernoulli_poly(-1, x))
  10. assert bernoulli_poly(1, x, polys=True) == Poly(x - Q(1,2))
  11. assert bernoulli_poly(0, x) == 1
  12. assert bernoulli_poly(1, x) == x - Q(1,2)
  13. assert bernoulli_poly(2, x) == x**2 - x + Q(1,6)
  14. assert bernoulli_poly(3, x) == x**3 - Q(3,2)*x**2 + Q(1,2)*x
  15. assert bernoulli_poly(4, x) == x**4 - 2*x**3 + x**2 - Q(1,30)
  16. assert bernoulli_poly(5, x) == x**5 - Q(5,2)*x**4 + Q(5,3)*x**3 - Q(1,6)*x
  17. assert bernoulli_poly(6, x) == x**6 - 3*x**5 + Q(5,2)*x**4 - Q(1,2)*x**2 + Q(1,42)
  18. assert bernoulli_poly(1).dummy_eq(x - Q(1,2))
  19. assert bernoulli_poly(1, polys=True) == Poly(x - Q(1,2))
  20. def test_bernoulli_c_poly():
  21. raises(ValueError, lambda: bernoulli_c_poly(-1, x))
  22. assert bernoulli_c_poly(1, x, polys=True) == Poly(x, domain='QQ')
  23. assert bernoulli_c_poly(0, x) == 1
  24. assert bernoulli_c_poly(1, x) == x
  25. assert bernoulli_c_poly(2, x) == x**2 - Q(1,3)
  26. assert bernoulli_c_poly(3, x) == x**3 - x
  27. assert bernoulli_c_poly(4, x) == x**4 - 2*x**2 + Q(7,15)
  28. assert bernoulli_c_poly(5, x) == x**5 - Q(10,3)*x**3 + Q(7,3)*x
  29. assert bernoulli_c_poly(6, x) == x**6 - 5*x**4 + 7*x**2 - Q(31,21)
  30. assert bernoulli_c_poly(1).dummy_eq(x)
  31. assert bernoulli_c_poly(1, polys=True) == Poly(x, domain='QQ')
  32. assert 2**8 * bernoulli_poly(8, (x+1)/2).expand() == bernoulli_c_poly(8, x)
  33. assert 2**9 * bernoulli_poly(9, (x+1)/2).expand() == bernoulli_c_poly(9, x)
  34. def test_genocchi_poly():
  35. raises(ValueError, lambda: genocchi_poly(-1, x))
  36. assert genocchi_poly(2, x, polys=True) == Poly(-2*x + 1)
  37. assert genocchi_poly(0, x) == 0
  38. assert genocchi_poly(1, x) == -1
  39. assert genocchi_poly(2, x) == 1 - 2*x
  40. assert genocchi_poly(3, x) == 3*x - 3*x**2
  41. assert genocchi_poly(4, x) == -1 + 6*x**2 - 4*x**3
  42. assert genocchi_poly(5, x) == -5*x + 10*x**3 - 5*x**4
  43. assert genocchi_poly(6, x) == 3 - 15*x**2 + 15*x**4 - 6*x**5
  44. assert genocchi_poly(2).dummy_eq(-2*x + 1)
  45. assert genocchi_poly(2, polys=True) == Poly(-2*x + 1)
  46. assert 2 * (bernoulli_poly(8, x) - bernoulli_c_poly(8, x)) == genocchi_poly(8, x)
  47. assert 2 * (bernoulli_poly(9, x) - bernoulli_c_poly(9, x)) == genocchi_poly(9, x)
  48. def test_euler_poly():
  49. raises(ValueError, lambda: euler_poly(-1, x))
  50. assert euler_poly(1, x, polys=True) == Poly(x - Q(1,2))
  51. assert euler_poly(0, x) == 1
  52. assert euler_poly(1, x) == x - Q(1,2)
  53. assert euler_poly(2, x) == x**2 - x
  54. assert euler_poly(3, x) == x**3 - Q(3,2)*x**2 + Q(1,4)
  55. assert euler_poly(4, x) == x**4 - 2*x**3 + x
  56. assert euler_poly(5, x) == x**5 - Q(5,2)*x**4 + Q(5,2)*x**2 - Q(1,2)
  57. assert euler_poly(6, x) == x**6 - 3*x**5 + 5*x**3 - 3*x
  58. assert euler_poly(1).dummy_eq(x - Q(1,2))
  59. assert euler_poly(1, polys=True) == Poly(x - Q(1,2))
  60. assert genocchi_poly(9, x) == euler_poly(8, x) * -9
  61. assert genocchi_poly(10, x) == euler_poly(9, x) * -10
  62. def test_andre_poly():
  63. raises(ValueError, lambda: andre_poly(-1, x))
  64. assert andre_poly(1, x, polys=True) == Poly(x)
  65. assert andre_poly(0, x) == 1
  66. assert andre_poly(1, x) == x
  67. assert andre_poly(2, x) == x**2 - 1
  68. assert andre_poly(3, x) == x**3 - 3*x
  69. assert andre_poly(4, x) == x**4 - 6*x**2 + 5
  70. assert andre_poly(5, x) == x**5 - 10*x**3 + 25*x
  71. assert andre_poly(6, x) == x**6 - 15*x**4 + 75*x**2 - 61
  72. assert andre_poly(1).dummy_eq(x)
  73. assert andre_poly(1, polys=True) == Poly(x)