cranky-coder08's picture
Add files using upload-large-folder tool
ac2f8e9 verified
"""Tests of transforms of quantum expressions for Mul and Pow."""
from sympy.core.symbol import symbols
from sympy.testing.pytest import raises
from sympy.physics.quantum.operator import (
Operator, OuterProduct
)
from sympy.physics.quantum.state import Ket, Bra
from sympy.physics.quantum.innerproduct import InnerProduct
from sympy.physics.quantum.tensorproduct import TensorProduct
k1 = Ket('k1')
k2 = Ket('k2')
k3 = Ket('k3')
b1 = Bra('b1')
b2 = Bra('b2')
b3 = Bra('b3')
A = Operator('A')
B = Operator('B')
C = Operator('C')
x, y, z = symbols('x y z')
def test_bra_ket():
assert b1*k1 == InnerProduct(b1, k1)
assert k1*b1 == OuterProduct(k1, b1)
# Test priority of inner product
assert OuterProduct(k1, b1)*k2 == InnerProduct(b1, k2)*k1
assert b1*OuterProduct(k1, b2) == InnerProduct(b1, k1)*b2
def test_tensor_product():
# We are attempting to be rigourous and raise TypeError when a user tries
# to combine bras, kets, and operators in a manner that doesn't make sense.
# In particular, we are not trying to interpret regular ``*`` multiplication
# as a tensor product.
with raises(TypeError):
k1*k1
with raises(TypeError):
b1*b1
with raises(TypeError):
k1*TensorProduct(k2, k3)
with raises(TypeError):
b1*TensorProduct(b2, b3)
with raises(TypeError):
TensorProduct(k2, k3)*k1
with raises(TypeError):
TensorProduct(b2, b3)*b1
assert TensorProduct(A, B, C)*TensorProduct(k1, k2, k3) == \
TensorProduct(A*k1, B*k2, C*k3)
assert TensorProduct(b1, b2, b3)*TensorProduct(A, B, C) == \
TensorProduct(b1*A, b2*B, b3*C)
assert TensorProduct(b1, b2, b3)*TensorProduct(k1, k2, k3) == \
InnerProduct(b1, k1)*InnerProduct(b2, k2)*InnerProduct(b3, k3)
assert TensorProduct(b1, b2, b3)*TensorProduct(A, B, C)*TensorProduct(k1, k2, k3) == \
TensorProduct(b1*A*k1, b2*B*k2, b3*C*k3)
def test_outer_product():
assert OuterProduct(k1, b1)*OuterProduct(k2, b2) == \
InnerProduct(b1, k2)*OuterProduct(k1, b2)
def test_compound():
e1 = b1*A*B*k1*b2*k2*b3
assert e1 == InnerProduct(b2, k2)*b1*A*B*OuterProduct(k1, b3)
e2 = TensorProduct(k1, k2)*TensorProduct(b1, b2)
assert e2 == TensorProduct(
OuterProduct(k1, b1),
OuterProduct(k2, b2)
)