| | from itertools import product |
| |
|
| | from sympy.core.relational import (Equality, Unequality) |
| | from sympy.core.singleton import S |
| | from sympy.core.sympify import sympify |
| | from sympy.integrals.integrals import integrate |
| | from sympy.matrices.dense import (Matrix, eye, zeros) |
| | from sympy.matrices.immutable import ImmutableMatrix |
| | from sympy.matrices import SparseMatrix |
| | from sympy.matrices.immutable import \ |
| | ImmutableDenseMatrix, ImmutableSparseMatrix |
| | from sympy.abc import x, y |
| | from sympy.testing.pytest import raises |
| |
|
| | IM = ImmutableDenseMatrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) |
| | ISM = ImmutableSparseMatrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) |
| | ieye = ImmutableDenseMatrix(eye(3)) |
| |
|
| |
|
| | def test_creation(): |
| | assert IM.shape == ISM.shape == (3, 3) |
| | assert IM[1, 2] == ISM[1, 2] == 6 |
| | assert IM[2, 2] == ISM[2, 2] == 9 |
| |
|
| |
|
| | def test_immutability(): |
| | with raises(TypeError): |
| | IM[2, 2] = 5 |
| | with raises(TypeError): |
| | ISM[2, 2] = 5 |
| |
|
| |
|
| | def test_slicing(): |
| | assert IM[1, :] == ImmutableDenseMatrix([[4, 5, 6]]) |
| | assert IM[:2, :2] == ImmutableDenseMatrix([[1, 2], [4, 5]]) |
| | assert ISM[1, :] == ImmutableSparseMatrix([[4, 5, 6]]) |
| | assert ISM[:2, :2] == ImmutableSparseMatrix([[1, 2], [4, 5]]) |
| |
|
| |
|
| | def test_subs(): |
| | A = ImmutableMatrix([[1, 2], [3, 4]]) |
| | B = ImmutableMatrix([[1, 2], [x, 4]]) |
| | C = ImmutableMatrix([[-x, x*y], [-(x + y), y**2]]) |
| | assert B.subs(x, 3) == A |
| | assert (x*B).subs(x, 3) == 3*A |
| | assert (x*eye(2) + B).subs(x, 3) == 3*eye(2) + A |
| | assert C.subs([[x, -1], [y, -2]]) == A |
| | assert C.subs([(x, -1), (y, -2)]) == A |
| | assert C.subs({x: -1, y: -2}) == A |
| | assert C.subs({x: y - 1, y: x - 1}, simultaneous=True) == \ |
| | ImmutableMatrix([[1 - y, (x - 1)*(y - 1)], [2 - x - y, (x - 1)**2]]) |
| |
|
| |
|
| | def test_as_immutable(): |
| | data = [[1, 2], [3, 4]] |
| | X = Matrix(data) |
| | assert sympify(X) == X.as_immutable() == ImmutableMatrix(data) |
| |
|
| | data = {(0, 0): 1, (0, 1): 2, (1, 0): 3, (1, 1): 4} |
| | X = SparseMatrix(2, 2, data) |
| | assert sympify(X) == X.as_immutable() == ImmutableSparseMatrix(2, 2, data) |
| |
|
| |
|
| | def test_function_return_types(): |
| | |
| | |
| | X = ImmutableMatrix([[1, 2], [3, 4]]) |
| | Y = ImmutableMatrix([[1], [0]]) |
| | q, r = X.QRdecomposition() |
| | assert (type(q), type(r)) == (ImmutableMatrix, ImmutableMatrix) |
| |
|
| | assert type(X.LUsolve(Y)) == ImmutableMatrix |
| | assert type(X.QRsolve(Y)) == ImmutableMatrix |
| |
|
| | X = ImmutableMatrix([[5, 2], [2, 7]]) |
| | assert X.T == X |
| | assert X.is_symmetric |
| | assert type(X.cholesky()) == ImmutableMatrix |
| | L, D = X.LDLdecomposition() |
| | assert (type(L), type(D)) == (ImmutableMatrix, ImmutableMatrix) |
| |
|
| | X = ImmutableMatrix([[1, 2], [2, 1]]) |
| | assert X.is_diagonalizable() |
| | assert X.det() == -3 |
| | assert X.norm(2) == 3 |
| |
|
| | assert type(X.eigenvects()[0][2][0]) == ImmutableMatrix |
| |
|
| | assert type(zeros(3, 3).as_immutable().nullspace()[0]) == ImmutableMatrix |
| |
|
| | X = ImmutableMatrix([[1, 0], [2, 1]]) |
| | assert type(X.lower_triangular_solve(Y)) == ImmutableMatrix |
| | assert type(X.T.upper_triangular_solve(Y)) == ImmutableMatrix |
| |
|
| | assert type(X.minor_submatrix(0, 0)) == ImmutableMatrix |
| |
|
| | |
| | |
| | |
| |
|
| |
|
| | def test_immutable_evaluation(): |
| | X = ImmutableMatrix(eye(3)) |
| | A = ImmutableMatrix(3, 3, range(9)) |
| | assert isinstance(X + A, ImmutableMatrix) |
| | assert isinstance(X * A, ImmutableMatrix) |
| | assert isinstance(X * 2, ImmutableMatrix) |
| | assert isinstance(2 * X, ImmutableMatrix) |
| | assert isinstance(A**2, ImmutableMatrix) |
| |
|
| |
|
| | def test_deterimant(): |
| | assert ImmutableMatrix(4, 4, lambda i, j: i + j).det() == 0 |
| |
|
| |
|
| | def test_Equality(): |
| | assert Equality(IM, IM) is S.true |
| | assert Unequality(IM, IM) is S.false |
| | assert Equality(IM, IM.subs(1, 2)) is S.false |
| | assert Unequality(IM, IM.subs(1, 2)) is S.true |
| | assert Equality(IM, 2) is S.false |
| | assert Unequality(IM, 2) is S.true |
| | M = ImmutableMatrix([x, y]) |
| | assert Equality(M, IM) is S.false |
| | assert Unequality(M, IM) is S.true |
| | assert Equality(M, M.subs(x, 2)).subs(x, 2) is S.true |
| | assert Unequality(M, M.subs(x, 2)).subs(x, 2) is S.false |
| | assert Equality(M, M.subs(x, 2)).subs(x, 3) is S.false |
| | assert Unequality(M, M.subs(x, 2)).subs(x, 3) is S.true |
| |
|
| |
|
| | def test_integrate(): |
| | intIM = integrate(IM, x) |
| | assert intIM.shape == IM.shape |
| | assert all(intIM[i, j] == (1 + j + 3*i)*x for i, j in |
| | product(range(3), range(3))) |
| |
|