test_funcmatrix.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from sympy.core import symbols, Lambda
  2. from sympy.core.sympify import SympifyError
  3. from sympy.functions import KroneckerDelta
  4. from sympy.matrices import Matrix
  5. from sympy.matrices.expressions import FunctionMatrix, MatrixExpr, Identity
  6. from sympy.testing.pytest import raises
  7. def test_funcmatrix_creation():
  8. i, j, k = symbols('i j k')
  9. assert FunctionMatrix(2, 2, Lambda((i, j), 0))
  10. assert FunctionMatrix(0, 0, Lambda((i, j), 0))
  11. raises(ValueError, lambda: FunctionMatrix(-1, 0, Lambda((i, j), 0)))
  12. raises(ValueError, lambda: FunctionMatrix(2.0, 0, Lambda((i, j), 0)))
  13. raises(ValueError, lambda: FunctionMatrix(2j, 0, Lambda((i, j), 0)))
  14. raises(ValueError, lambda: FunctionMatrix(0, -1, Lambda((i, j), 0)))
  15. raises(ValueError, lambda: FunctionMatrix(0, 2.0, Lambda((i, j), 0)))
  16. raises(ValueError, lambda: FunctionMatrix(0, 2j, Lambda((i, j), 0)))
  17. raises(ValueError, lambda: FunctionMatrix(2, 2, Lambda(i, 0)))
  18. raises(SympifyError, lambda: FunctionMatrix(2, 2, lambda i, j: 0))
  19. raises(ValueError, lambda: FunctionMatrix(2, 2, Lambda((i,), 0)))
  20. raises(ValueError, lambda: FunctionMatrix(2, 2, Lambda((i, j, k), 0)))
  21. raises(ValueError, lambda: FunctionMatrix(2, 2, i+j))
  22. assert FunctionMatrix(2, 2, "lambda i, j: 0") == \
  23. FunctionMatrix(2, 2, Lambda((i, j), 0))
  24. m = FunctionMatrix(2, 2, KroneckerDelta)
  25. assert m.as_explicit() == Identity(2).as_explicit()
  26. assert m.args[2].dummy_eq(Lambda((i, j), KroneckerDelta(i, j)))
  27. n = symbols('n')
  28. assert FunctionMatrix(n, n, Lambda((i, j), 0))
  29. n = symbols('n', integer=False)
  30. raises(ValueError, lambda: FunctionMatrix(n, n, Lambda((i, j), 0)))
  31. n = symbols('n', negative=True)
  32. raises(ValueError, lambda: FunctionMatrix(n, n, Lambda((i, j), 0)))
  33. def test_funcmatrix():
  34. i, j = symbols('i,j')
  35. X = FunctionMatrix(3, 3, Lambda((i, j), i - j))
  36. assert X[1, 1] == 0
  37. assert X[1, 2] == -1
  38. assert X.shape == (3, 3)
  39. assert X.rows == X.cols == 3
  40. assert Matrix(X) == Matrix(3, 3, lambda i, j: i - j)
  41. assert isinstance(X*X + X, MatrixExpr)
  42. def test_replace_issue():
  43. X = FunctionMatrix(3, 3, KroneckerDelta)
  44. assert X.replace(lambda x: True, lambda x: x) == X