test_cartesian.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. """Tests for cartesian.py"""
  2. from sympy.core.numbers import (I, pi)
  3. from sympy.core.singleton import S
  4. from sympy.core.symbol import symbols
  5. from sympy.functions.elementary.exponential import exp
  6. from sympy.functions.elementary.miscellaneous import sqrt
  7. from sympy.functions.special.delta_functions import DiracDelta
  8. from sympy.sets.sets import Interval
  9. from sympy.physics.quantum import qapply, represent, L2, Dagger
  10. from sympy.physics.quantum import Commutator, hbar
  11. from sympy.physics.quantum.cartesian import (
  12. XOp, YOp, ZOp, PxOp, X, Y, Z, Px, XKet, XBra, PxKet, PxBra,
  13. PositionKet3D, PositionBra3D
  14. )
  15. from sympy.physics.quantum.operator import DifferentialOperator
  16. x, y, z, x_1, x_2, x_3, y_1, z_1 = symbols('x,y,z,x_1,x_2,x_3,y_1,z_1')
  17. px, py, px_1, px_2 = symbols('px py px_1 px_2')
  18. def test_x():
  19. assert X.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  20. assert Commutator(X, Px).doit() == I*hbar
  21. assert qapply(X*XKet(x)) == x*XKet(x)
  22. assert XKet(x).dual_class() == XBra
  23. assert XBra(x).dual_class() == XKet
  24. assert (Dagger(XKet(y))*XKet(x)).doit() == DiracDelta(x - y)
  25. assert (PxBra(px)*XKet(x)).doit() == \
  26. exp(-I*x*px/hbar)/sqrt(2*pi*hbar)
  27. assert represent(XKet(x)) == DiracDelta(x - x_1)
  28. assert represent(XBra(x)) == DiracDelta(-x + x_1)
  29. assert XBra(x).position == x
  30. assert represent(XOp()*XKet()) == x*DiracDelta(x - x_2)
  31. assert represent(XOp()*XKet()*XBra('y')) == \
  32. x*DiracDelta(x - x_3)*DiracDelta(x_1 - y)
  33. assert represent(XBra("y")*XKet()) == DiracDelta(x - y)
  34. assert represent(
  35. XKet()*XBra()) == DiracDelta(x - x_2) * DiracDelta(x_1 - x)
  36. rep_p = represent(XOp(), basis=PxOp)
  37. assert rep_p == hbar*I*DiracDelta(px_1 - px_2)*DifferentialOperator(px_1)
  38. assert rep_p == represent(XOp(), basis=PxOp())
  39. assert rep_p == represent(XOp(), basis=PxKet)
  40. assert rep_p == represent(XOp(), basis=PxKet())
  41. assert represent(XOp()*PxKet(), basis=PxKet) == \
  42. hbar*I*DiracDelta(px - px_2)*DifferentialOperator(px)
  43. def test_p():
  44. assert Px.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  45. assert qapply(Px*PxKet(px)) == px*PxKet(px)
  46. assert PxKet(px).dual_class() == PxBra
  47. assert PxBra(x).dual_class() == PxKet
  48. assert (Dagger(PxKet(py))*PxKet(px)).doit() == DiracDelta(px - py)
  49. assert (XBra(x)*PxKet(px)).doit() == \
  50. exp(I*x*px/hbar)/sqrt(2*pi*hbar)
  51. assert represent(PxKet(px)) == DiracDelta(px - px_1)
  52. rep_x = represent(PxOp(), basis=XOp)
  53. assert rep_x == -hbar*I*DiracDelta(x_1 - x_2)*DifferentialOperator(x_1)
  54. assert rep_x == represent(PxOp(), basis=XOp())
  55. assert rep_x == represent(PxOp(), basis=XKet)
  56. assert rep_x == represent(PxOp(), basis=XKet())
  57. assert represent(PxOp()*XKet(), basis=XKet) == \
  58. -hbar*I*DiracDelta(x - x_2)*DifferentialOperator(x)
  59. assert represent(XBra("y")*PxOp()*XKet(), basis=XKet) == \
  60. -hbar*I*DiracDelta(x - y)*DifferentialOperator(x)
  61. def test_3dpos():
  62. assert Y.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  63. assert Z.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  64. test_ket = PositionKet3D(x, y, z)
  65. assert qapply(X*test_ket) == x*test_ket
  66. assert qapply(Y*test_ket) == y*test_ket
  67. assert qapply(Z*test_ket) == z*test_ket
  68. assert qapply(X*Y*test_ket) == x*y*test_ket
  69. assert qapply(X*Y*Z*test_ket) == x*y*z*test_ket
  70. assert qapply(Y*Z*test_ket) == y*z*test_ket
  71. assert PositionKet3D() == test_ket
  72. assert YOp() == Y
  73. assert ZOp() == Z
  74. assert PositionKet3D.dual_class() == PositionBra3D
  75. assert PositionBra3D.dual_class() == PositionKet3D
  76. other_ket = PositionKet3D(x_1, y_1, z_1)
  77. assert (Dagger(other_ket)*test_ket).doit() == \
  78. DiracDelta(x - x_1)*DiracDelta(y - y_1)*DiracDelta(z - z_1)
  79. assert test_ket.position_x == x
  80. assert test_ket.position_y == y
  81. assert test_ket.position_z == z
  82. assert other_ket.position_x == x_1
  83. assert other_ket.position_y == y_1
  84. assert other_ket.position_z == z_1
  85. # TODO: Add tests for representations