test_determinant.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from sympy.core import S, symbols
  2. from sympy.matrices import eye, ones, Matrix, ShapeError
  3. from sympy.matrices.expressions import (
  4. Identity, MatrixExpr, MatrixSymbol, Determinant,
  5. det, per, ZeroMatrix, Transpose,
  6. Permanent, MatMul
  7. )
  8. from sympy.matrices.expressions.special import OneMatrix
  9. from sympy.testing.pytest import raises
  10. from sympy.assumptions.ask import Q
  11. from sympy.assumptions.refine import refine
  12. n = symbols('n', integer=True)
  13. A = MatrixSymbol('A', n, n)
  14. B = MatrixSymbol('B', n, n)
  15. C = MatrixSymbol('C', 3, 4)
  16. def test_det():
  17. assert isinstance(Determinant(A), Determinant)
  18. assert not isinstance(Determinant(A), MatrixExpr)
  19. raises(ShapeError, lambda: Determinant(C))
  20. assert det(eye(3)) == 1
  21. assert det(Matrix(3, 3, [1, 3, 2, 4, 1, 3, 2, 5, 2])) == 17
  22. _ = A / det(A) # Make sure this is possible
  23. raises(TypeError, lambda: Determinant(S.One))
  24. assert Determinant(A).arg is A
  25. def test_eval_determinant():
  26. assert det(Identity(n)) == 1
  27. assert det(ZeroMatrix(n, n)) == 0
  28. assert det(OneMatrix(n, n)) == Determinant(OneMatrix(n, n))
  29. assert det(OneMatrix(1, 1)) == 1
  30. assert det(OneMatrix(2, 2)) == 0
  31. assert det(Transpose(A)) == det(A)
  32. assert Determinant(MatMul(eye(2), eye(2))).doit(deep=True) == 1
  33. def test_refine():
  34. assert refine(det(A), Q.orthogonal(A)) == 1
  35. assert refine(det(A), Q.singular(A)) == 0
  36. assert refine(det(A), Q.unit_triangular(A)) == 1
  37. assert refine(det(A), Q.normal(A)) == det(A)
  38. def test_commutative():
  39. det_a = Determinant(A)
  40. det_b = Determinant(B)
  41. assert det_a.is_commutative
  42. assert det_b.is_commutative
  43. assert det_a * det_b == det_b * det_a
  44. def test_permanent():
  45. assert isinstance(Permanent(A), Permanent)
  46. assert not isinstance(Permanent(A), MatrixExpr)
  47. assert isinstance(Permanent(C), Permanent)
  48. assert Permanent(ones(3, 3)).doit() == 6
  49. _ = C / per(C)
  50. assert per(Matrix(3, 3, [1, 3, 2, 4, 1, 3, 2, 5, 2])) == 103
  51. raises(TypeError, lambda: Permanent(S.One))
  52. assert Permanent(A).arg is A