test_innerproduct.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from sympy.core.numbers import (I, Integer)
  2. from sympy.physics.quantum.innerproduct import InnerProduct
  3. from sympy.physics.quantum.dagger import Dagger
  4. from sympy.physics.quantum.state import Bra, Ket, StateBase
  5. def test_innerproduct():
  6. k = Ket('k')
  7. b = Bra('b')
  8. ip = InnerProduct(b, k)
  9. assert isinstance(ip, InnerProduct)
  10. assert ip.bra == b
  11. assert ip.ket == k
  12. assert b*k == InnerProduct(b, k)
  13. assert k*(b*k)*b == k*InnerProduct(b, k)*b
  14. assert InnerProduct(b, k).subs(b, Dagger(k)) == Dagger(k)*k
  15. def test_innerproduct_dagger():
  16. k = Ket('k')
  17. b = Bra('b')
  18. ip = b*k
  19. assert Dagger(ip) == Dagger(k)*Dagger(b)
  20. class FooState(StateBase):
  21. pass
  22. class FooKet(Ket, FooState):
  23. @classmethod
  24. def dual_class(self):
  25. return FooBra
  26. def _eval_innerproduct_FooBra(self, bra):
  27. return Integer(1)
  28. def _eval_innerproduct_BarBra(self, bra):
  29. return I
  30. class FooBra(Bra, FooState):
  31. @classmethod
  32. def dual_class(self):
  33. return FooKet
  34. class BarState(StateBase):
  35. pass
  36. class BarKet(Ket, BarState):
  37. @classmethod
  38. def dual_class(self):
  39. return BarBra
  40. class BarBra(Bra, BarState):
  41. @classmethod
  42. def dual_class(self):
  43. return BarKet
  44. def test_doit():
  45. f = FooKet('foo')
  46. b = BarBra('bar')
  47. assert InnerProduct(b, f).doit() == I
  48. assert InnerProduct(Dagger(f), Dagger(b)).doit() == -I
  49. assert InnerProduct(Dagger(f), f).doit() == Integer(1)