test_determinant.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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
  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. def test_refine():
  33. assert refine(det(A), Q.orthogonal(A)) == 1
  34. assert refine(det(A), Q.singular(A)) == 0
  35. assert refine(det(A), Q.unit_triangular(A)) == 1
  36. assert refine(det(A), Q.normal(A)) == det(A)
  37. def test_commutative():
  38. det_a = Determinant(A)
  39. det_b = Determinant(B)
  40. assert det_a.is_commutative
  41. assert det_b.is_commutative
  42. assert det_a * det_b == det_b * det_a
  43. def test_permanent():
  44. assert isinstance(Permanent(A), Permanent)
  45. assert not isinstance(Permanent(A), MatrixExpr)
  46. assert isinstance(Permanent(C), Permanent)
  47. assert Permanent(ones(3, 3)).doit() == 6
  48. _ = C / per(C)
  49. assert per(Matrix(3, 3, [1, 3, 2, 4, 1, 3, 2, 5, 2])) == 103
  50. raises(TypeError, lambda: Permanent(S.One))
  51. assert Permanent(A).arg is A