111 lines
2.6 KiB
Python
111 lines
2.6 KiB
Python
|
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)
|