test_maxima.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from sympy.parsing.maxima import parse_maxima
  2. from sympy.core.numbers import (E, Rational, oo)
  3. from sympy.core.symbol import Symbol
  4. from sympy.functions.combinatorial.factorials import factorial
  5. from sympy.functions.elementary.complexes import Abs
  6. from sympy.functions.elementary.exponential import log
  7. from sympy.functions.elementary.trigonometric import (cos, sin)
  8. from sympy.abc import x
  9. n = Symbol('n', integer=True)
  10. def test_parser():
  11. assert Abs(parse_maxima('float(1/3)') - 0.333333333) < 10**(-5)
  12. assert parse_maxima('13^26') == 91733330193268616658399616009
  13. assert parse_maxima('sin(%pi/2) + cos(%pi/3)') == Rational(3, 2)
  14. assert parse_maxima('log(%e)') == 1
  15. def test_injection():
  16. parse_maxima('c: x+1', globals=globals())
  17. # c created by parse_maxima
  18. assert c == x + 1 # noqa:F821
  19. parse_maxima('g: sqrt(81)', globals=globals())
  20. # g created by parse_maxima
  21. assert g == 9 # noqa:F821
  22. def test_maxima_functions():
  23. assert parse_maxima('expand( (x+1)^2)') == x**2 + 2*x + 1
  24. assert parse_maxima('factor( x**2 + 2*x + 1)') == (x + 1)**2
  25. assert parse_maxima('2*cos(x)^2 + sin(x)^2') == 2*cos(x)**2 + sin(x)**2
  26. assert parse_maxima('trigexpand(sin(2*x)+cos(2*x))') == \
  27. -1 + 2*cos(x)**2 + 2*cos(x)*sin(x)
  28. assert parse_maxima('solve(x^2-4,x)') == [-2, 2]
  29. assert parse_maxima('limit((1+1/x)^x,x,inf)') == E
  30. assert parse_maxima('limit(sqrt(-x)/x,x,0,minus)') is -oo
  31. assert parse_maxima('diff(x^x, x)') == x**x*(1 + log(x))
  32. assert parse_maxima('sum(k, k, 1, n)', name_dict={
  33. "n": Symbol('n', integer=True),
  34. "k": Symbol('k', integer=True)
  35. }) == (n**2 + n)/2
  36. assert parse_maxima('product(k, k, 1, n)', name_dict={
  37. "n": Symbol('n', integer=True),
  38. "k": Symbol('k', integer=True)
  39. }) == factorial(n)
  40. assert parse_maxima('ratsimp((x^2-1)/(x+1))') == x - 1
  41. assert Abs( parse_maxima(
  42. 'float(sec(%pi/3) + csc(%pi/3))') - 3.154700538379252) < 10**(-5)