Spaces:
Running
Running
from sympy.physics.quantum.hilbert import ( | |
HilbertSpace, ComplexSpace, L2, FockSpace, TensorProductHilbertSpace, | |
DirectSumHilbertSpace, TensorPowerHilbertSpace | |
) | |
from sympy.core.numbers import oo | |
from sympy.core.symbol import Symbol | |
from sympy.printing.repr import srepr | |
from sympy.printing.str import sstr | |
from sympy.sets.sets import Interval | |
def test_hilbert_space(): | |
hs = HilbertSpace() | |
assert isinstance(hs, HilbertSpace) | |
assert sstr(hs) == 'H' | |
assert srepr(hs) == 'HilbertSpace()' | |
def test_complex_space(): | |
c1 = ComplexSpace(2) | |
assert isinstance(c1, ComplexSpace) | |
assert c1.dimension == 2 | |
assert sstr(c1) == 'C(2)' | |
assert srepr(c1) == 'ComplexSpace(Integer(2))' | |
n = Symbol('n') | |
c2 = ComplexSpace(n) | |
assert isinstance(c2, ComplexSpace) | |
assert c2.dimension == n | |
assert sstr(c2) == 'C(n)' | |
assert srepr(c2) == "ComplexSpace(Symbol('n'))" | |
assert c2.subs(n, 2) == ComplexSpace(2) | |
def test_L2(): | |
b1 = L2(Interval(-oo, 1)) | |
assert isinstance(b1, L2) | |
assert b1.dimension is oo | |
assert b1.interval == Interval(-oo, 1) | |
x = Symbol('x', real=True) | |
y = Symbol('y', real=True) | |
b2 = L2(Interval(x, y)) | |
assert b2.dimension is oo | |
assert b2.interval == Interval(x, y) | |
assert b2.subs(x, -1) == L2(Interval(-1, y)) | |
def test_fock_space(): | |
f1 = FockSpace() | |
f2 = FockSpace() | |
assert isinstance(f1, FockSpace) | |
assert f1.dimension is oo | |
assert f1 == f2 | |
def test_tensor_product(): | |
n = Symbol('n') | |
hs1 = ComplexSpace(2) | |
hs2 = ComplexSpace(n) | |
h = hs1*hs2 | |
assert isinstance(h, TensorProductHilbertSpace) | |
assert h.dimension == 2*n | |
assert h.spaces == (hs1, hs2) | |
h = hs2*hs2 | |
assert isinstance(h, TensorPowerHilbertSpace) | |
assert h.base == hs2 | |
assert h.exp == 2 | |
assert h.dimension == n**2 | |
f = FockSpace() | |
h = hs1*hs2*f | |
assert h.dimension is oo | |
def test_tensor_power(): | |
n = Symbol('n') | |
hs1 = ComplexSpace(2) | |
hs2 = ComplexSpace(n) | |
h = hs1**2 | |
assert isinstance(h, TensorPowerHilbertSpace) | |
assert h.base == hs1 | |
assert h.exp == 2 | |
assert h.dimension == 4 | |
h = hs2**3 | |
assert isinstance(h, TensorPowerHilbertSpace) | |
assert h.base == hs2 | |
assert h.exp == 3 | |
assert h.dimension == n**3 | |
def test_direct_sum(): | |
n = Symbol('n') | |
hs1 = ComplexSpace(2) | |
hs2 = ComplexSpace(n) | |
h = hs1 + hs2 | |
assert isinstance(h, DirectSumHilbertSpace) | |
assert h.dimension == 2 + n | |
assert h.spaces == (hs1, hs2) | |
f = FockSpace() | |
h = hs1 + f + hs2 | |
assert h.dimension is oo | |
assert h.spaces == (hs1, f, hs2) | |