def test_tensor_product_adjoint(): assert KroneckerProduct(I*A, B).adjoint() == \ -I*KroneckerProduct(A.adjoint(), B.adjoint()) assert KroneckerProduct(mat1, mat2).adjoint() == \ kronecker_product(mat1.adjoint(), mat2.adjoint())
def test_KroneckerProduct_combine_add(): kp1 = kronecker_product(A, B) kp2 = kronecker_product(C, W) assert combine_kronecker(kp1 * kp2) == kronecker_product(A * C, B * W)
def test_KroneckerProduct_combine_mul(): X = MatrixSymbol('X', m, n) Y = MatrixSymbol('Y', m, n) kp1 = kronecker_product(A, X) kp2 = kronecker_product(B, Y) assert combine_kronecker(kp1 + kp2) == kronecker_product(A + B, X + Y)
def test_KroneckerProduct_combine_add(): kp1 = kronecker_product(A, B) kp2 = kronecker_product(C, W) assert combine_kronecker(kp1*kp2) == kronecker_product(A*C, B*W)
def test_KroneckerProduct_inverse(): kp = kronecker_product(W, Z) assert kp.inverse() == kronecker_product(W.inverse(), Z.inverse())
def test_KroneckerProduct_is_associative(): assert kronecker_product(A, kronecker_product(B, C)) == kronecker_product( kronecker_product(A, B), C) assert kronecker_product(A, kronecker_product(B, C)) == KroneckerProduct( A, B, C)
def test_KroneckerProduct_determinant(): kp = kronecker_product(W, Z) assert det(kp) == det(W)**n * det(Z)**m
def test_KroneckerProduct_is_bilinear(): assert kronecker_product(x*A, B) == x*kronecker_product(A, B) assert kronecker_product(A, x*B) == x*kronecker_product(A, B)
def test_KroneckerProduct_determinant(): kp = kronecker_product(W, Z) assert det(kp) == det(W)**n * det(Z)**m
def test_tensor_product_transpose(): assert KroneckerProduct(I*A, B).transpose() == \ I*KroneckerProduct(A.transpose(), B.transpose()) assert KroneckerProduct(mat1, mat2).transpose() == \ kronecker_product(mat1.transpose(), mat2.transpose())
def test_KroneckerProduct_is_associative(): assert kronecker_product(A, kronecker_product( B, C)) == kronecker_product(kronecker_product(A, B), C) assert kronecker_product(A, kronecker_product( B, C)) == KroneckerProduct(A, B, C)
def test_tensor_product_conjugate(): assert KroneckerProduct(I*A, B).conjugate() == \ -I*KroneckerProduct(A.conjugate(), B.conjugate()) assert KroneckerProduct(mat1, mat2).conjugate() == \ kronecker_product(mat1.conjugate(), mat2.conjugate())
def test_tensor_product_adjoint(): assert KroneckerProduct(I*A, B).adjoint() == \ -I*KroneckerProduct(A.adjoint(), B.adjoint()) assert KroneckerProduct(mat1, mat2).adjoint() == \ kronecker_product(mat1.adjoint(), mat2.adjoint())
def test_KroneckerProduct_combine_mul(): X = MatrixSymbol('X', m, n) Y = MatrixSymbol('Y', m, n) kp1 = kronecker_product(A, X) kp2 = kronecker_product(B, Y) assert combine_kronecker(kp1+kp2) == kronecker_product(A+B, X+Y)
def test_tensor_product_conjugate(): assert KroneckerProduct(I*A, B).conjugate() == \ -I*KroneckerProduct(A.conjugate(), B.conjugate()) assert KroneckerProduct(mat1, mat2).conjugate() == \ kronecker_product(mat1.conjugate(), mat2.conjugate())
def test_KroneckerProduct_trace(): kp = kronecker_product(W, Z) assert trace(kp) == trace(W)*trace(Z)
def test_tensor_product_transpose(): assert KroneckerProduct(I*A, B).transpose() == \ I*KroneckerProduct(A.transpose(), B.transpose()) assert KroneckerProduct(mat1, mat2).transpose() == \ kronecker_product(mat1.transpose(), mat2.transpose())
def test_KroneckerProduct_extracts_commutative_part(): assert kronecker_product(x * A, 2 * B) == x * \ 2 * KroneckerProduct(A, B)
def test_KroneckerProduct_is_bilinear(): assert kronecker_product(x * A, B) == x * kronecker_product(A, B) assert kronecker_product(A, x * B) == x * kronecker_product(A, B)
def test_KroneckerProduct_extracts_commutative_part(): assert kronecker_product(x * A, 2 * B) == x * \ 2 * KroneckerProduct(A, B)
def test_KroneckerProduct_trace(): kp = kronecker_product(W, Z) assert trace(kp) == trace(W) * trace(Z)
def test_KroneckerProduct_inverse(): kp = kronecker_product(W, Z) assert kp.inverse() == kronecker_product(W.inverse(), Z.inverse())