1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from sympy.core import S, symbols
- from sympy.matrices import eye, ones, Matrix, ShapeError
- from sympy.matrices.expressions import (
- Identity, MatrixExpr, MatrixSymbol, Determinant,
- det, per, ZeroMatrix, Transpose,
- Permanent
- )
- from sympy.matrices.expressions.special import OneMatrix
- from sympy.testing.pytest import raises
- from sympy.assumptions.ask import Q
- from sympy.assumptions.refine import refine
- n = symbols('n', integer=True)
- A = MatrixSymbol('A', n, n)
- B = MatrixSymbol('B', n, n)
- C = MatrixSymbol('C', 3, 4)
- def test_det():
- assert isinstance(Determinant(A), Determinant)
- assert not isinstance(Determinant(A), MatrixExpr)
- raises(ShapeError, lambda: Determinant(C))
- assert det(eye(3)) == 1
- assert det(Matrix(3, 3, [1, 3, 2, 4, 1, 3, 2, 5, 2])) == 17
- _ = A / det(A) # Make sure this is possible
- raises(TypeError, lambda: Determinant(S.One))
- assert Determinant(A).arg is A
- def test_eval_determinant():
- assert det(Identity(n)) == 1
- assert det(ZeroMatrix(n, n)) == 0
- assert det(OneMatrix(n, n)) == Determinant(OneMatrix(n, n))
- assert det(OneMatrix(1, 1)) == 1
- assert det(OneMatrix(2, 2)) == 0
- assert det(Transpose(A)) == det(A)
- def test_refine():
- assert refine(det(A), Q.orthogonal(A)) == 1
- assert refine(det(A), Q.singular(A)) == 0
- assert refine(det(A), Q.unit_triangular(A)) == 1
- assert refine(det(A), Q.normal(A)) == det(A)
- def test_commutative():
- det_a = Determinant(A)
- det_b = Determinant(B)
- assert det_a.is_commutative
- assert det_b.is_commutative
- assert det_a * det_b == det_b * det_a
- def test_permanent():
- assert isinstance(Permanent(A), Permanent)
- assert not isinstance(Permanent(A), MatrixExpr)
- assert isinstance(Permanent(C), Permanent)
- assert Permanent(ones(3, 3)).doit() == 6
- _ = C / per(C)
- assert per(Matrix(3, 3, [1, 3, 2, 4, 1, 3, 2, 5, 2])) == 103
- raises(TypeError, lambda: Permanent(S.One))
- assert Permanent(A).arg is A
|