def test_zero_power(): z1 = ZeroMatrix(n, n) assert MatPow(z1, 3).doit() == z1 pytest.raises(ValueError, lambda: MatPow(z1, -1).doit()) assert MatPow(z1, 0).doit() == Identity(n) assert MatPow(z1, n).doit() == z1 pytest.raises(ValueError, lambda: MatPow(z1, -2).doit()) z2 = ZeroMatrix(4, 4) assert MatPow(z2, n).doit() == z2 pytest.raises(ValueError, lambda: MatPow(z2, -3).doit()) assert MatPow(z2, 2).doit() == z2 assert MatPow(z2, 0).doit() == Identity(4) pytest.raises(ValueError, lambda: MatPow(z2, -1).doit())
def test_Zero_power(): z1 = ZeroMatrix(n, n) assert z1**4 == z1 pytest.raises(ValueError, lambda: z1**-2) assert z1**0 == Identity(n) assert MatPow(z1, 2).doit() == z1**2 pytest.raises(ValueError, lambda: MatPow(z1, -2).doit()) z2 = ZeroMatrix(3, 3) assert MatPow(z2, 4).doit() == z2**4 pytest.raises(ValueError, lambda: z2**-3) assert z2**3 == MatPow(z2, 3).doit() assert z2**0 == Identity(3) pytest.raises(ValueError, lambda: MatPow(z2, -1).doit())
def test_addition(): A = MatrixSymbol('A', n, m) B = MatrixSymbol('B', n, m) assert isinstance(A + B, MatAdd) assert (A + B).shape == A.shape assert isinstance(A - A + 2 * B, MatMul) pytest.raises(ShapeError, lambda: A + B.T) pytest.raises(TypeError, lambda: A + 1) pytest.raises(TypeError, lambda: 5 + A) pytest.raises(TypeError, lambda: 5 - A) assert A + ZeroMatrix(n, m) - A == ZeroMatrix(n, m) with pytest.raises(TypeError): ZeroMatrix(n, m) + Integer(0)
def test_ZeroMatrix(): A = MatrixSymbol('A', n, m) Z = ZeroMatrix(n, m) assert A + Z == A assert A*Z.T == ZeroMatrix(n, n) assert Z*A.T == ZeroMatrix(n, n) assert A - A == ZeroMatrix(*A.shape) assert not Z assert transpose(Z) == ZeroMatrix(m, n) assert Z.conjugate() == Z assert ZeroMatrix(n, n)**0 == Identity(n) with pytest.raises(ShapeError): Z**0 with pytest.raises(ShapeError): Z**2
def test_multiplication(): A = MatrixSymbol('A', n, m) B = MatrixSymbol('B', m, l) C = MatrixSymbol('C', n, n) assert (2 * A * B).shape == (n, l) assert (A * 0 * B) == ZeroMatrix(n, l) pytest.raises(ShapeError, lambda: B * A) assert (2 * A).shape == A.shape assert A * ZeroMatrix(m, m) * B == ZeroMatrix(n, l) assert C * Identity(n) * C.inverse() == Identity(n) assert B / 2 == Rational(1, 2) * B pytest.raises(NotImplementedError, lambda: 2 / B) A = MatrixSymbol('A', n, n) B = MatrixSymbol('B', n, n) assert Identity(n) * (A + B) == A + B
def test_ZeroMatrix(): A = MatrixSymbol('A', n, m) Z = ZeroMatrix(n, m) assert A + Z == A assert A * Z.T == ZeroMatrix(n, n) assert Z * A.T == ZeroMatrix(n, n) assert A - A == ZeroMatrix(*A.shape) assert not Z assert transpose(Z) == ZeroMatrix(m, n) assert Z.conjugate() == Z assert ZeroMatrix(n, n)**0 == Identity(n) with pytest.raises(ShapeError): Z**0 with pytest.raises(ShapeError): Z**2
def test_invariants(): A = MatrixSymbol('A', n, m) B = MatrixSymbol('B', m, l) X = MatrixSymbol('X', n, n) objs = [ Identity(n), ZeroMatrix(m, n), MatMul(A, B), MatAdd(A, A), Transpose(A), Adjoint(A), Inverse(X), MatPow(X, 2), MatPow(X, -1), MatPow(X, 0) ] for obj in objs: assert obj == obj.__class__(*obj.args)
def test_ZeroMatrix_doit(): Znn = ZeroMatrix(Add(n, n, evaluate=False), n) assert isinstance(Znn.rows, Add) assert Znn.doit() == ZeroMatrix(2 * n, n) assert isinstance(Znn.doit().rows, Mul)
def test_matexpr(): assert (x * A).shape == A.shape assert (x * A).__class__ == MatMul assert 2 * A - A - A == ZeroMatrix(*A.shape) assert (A * B).shape == (n, l)
def test_ZeroMatrix_doit(): Znn = ZeroMatrix(Add(n, n, evaluate=False), n) assert isinstance(Znn.rows, Add) assert Znn.doit() == ZeroMatrix(2*n, n) assert isinstance(Znn.doit().rows, Mul)
def test_any_zeros(): assert any_zeros(MatMul(A, ZeroMatrix(m, k), evaluate=False)) == \ ZeroMatrix(n, k)