test_cartesian.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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.testing.pytest import XFAIL
  10. from sympy.physics.quantum import qapply, represent, L2, Dagger
  11. from sympy.physics.quantum import Commutator, hbar
  12. from sympy.physics.quantum.cartesian import (
  13. XOp, YOp, ZOp, PxOp, X, Y, Z, Px, XKet, XBra, PxKet, PxBra,
  14. PositionKet3D, PositionBra3D
  15. )
  16. from sympy.physics.quantum.operator import DifferentialOperator
  17. 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')
  18. px, py, px_1, px_2 = symbols('px py px_1 px_2')
  19. def test_x():
  20. assert X.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  21. assert Commutator(X, Px).doit() == I*hbar
  22. assert qapply(X*XKet(x)) == x*XKet(x)
  23. assert XKet(x).dual_class() == XBra
  24. assert XBra(x).dual_class() == XKet
  25. assert (Dagger(XKet(y))*XKet(x)).doit() == DiracDelta(x - y)
  26. assert (PxBra(px)*XKet(x)).doit() == \
  27. exp(-I*x*px/hbar)/sqrt(2*pi*hbar)
  28. assert represent(XKet(x)) == DiracDelta(x - x_1)
  29. assert represent(XBra(x)) == DiracDelta(-x + x_1)
  30. assert XBra(x).position == x
  31. assert represent(XOp()*XKet()) == x*DiracDelta(x - x_2)
  32. assert represent(XBra("y")*XKet()) == DiracDelta(x - y)
  33. assert represent(
  34. XKet()*XBra()) == DiracDelta(x - x_2) * DiracDelta(x_1 - x)
  35. rep_p = represent(XOp(), basis=PxOp)
  36. assert rep_p == hbar*I*DiracDelta(px_1 - px_2)*DifferentialOperator(px_1)
  37. assert rep_p == represent(XOp(), basis=PxOp())
  38. assert rep_p == represent(XOp(), basis=PxKet)
  39. assert rep_p == represent(XOp(), basis=PxKet())
  40. assert represent(XOp()*PxKet(), basis=PxKet) == \
  41. hbar*I*DiracDelta(px - px_2)*DifferentialOperator(px)
  42. @XFAIL
  43. def _text_x_broken():
  44. # represent has some broken logic that is relying in particular
  45. # forms of input, rather than a full and proper handling of
  46. # all valid quantum expressions. Marking this test as XFAIL until
  47. # we can refactor represent.
  48. assert represent(XOp()*XKet()*XBra('y')) == \
  49. x*DiracDelta(x - x_3)*DiracDelta(x_1 - y)
  50. def test_p():
  51. assert Px.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  52. assert qapply(Px*PxKet(px)) == px*PxKet(px)
  53. assert PxKet(px).dual_class() == PxBra
  54. assert PxBra(x).dual_class() == PxKet
  55. assert (Dagger(PxKet(py))*PxKet(px)).doit() == DiracDelta(px - py)
  56. assert (XBra(x)*PxKet(px)).doit() == \
  57. exp(I*x*px/hbar)/sqrt(2*pi*hbar)
  58. assert represent(PxKet(px)) == DiracDelta(px - px_1)
  59. rep_x = represent(PxOp(), basis=XOp)
  60. assert rep_x == -hbar*I*DiracDelta(x_1 - x_2)*DifferentialOperator(x_1)
  61. assert rep_x == represent(PxOp(), basis=XOp())
  62. assert rep_x == represent(PxOp(), basis=XKet)
  63. assert rep_x == represent(PxOp(), basis=XKet())
  64. assert represent(PxOp()*XKet(), basis=XKet) == \
  65. -hbar*I*DiracDelta(x - x_2)*DifferentialOperator(x)
  66. assert represent(XBra("y")*PxOp()*XKet(), basis=XKet) == \
  67. -hbar*I*DiracDelta(x - y)*DifferentialOperator(x)
  68. def test_3dpos():
  69. assert Y.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  70. assert Z.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity))
  71. test_ket = PositionKet3D(x, y, z)
  72. assert qapply(X*test_ket) == x*test_ket
  73. assert qapply(Y*test_ket) == y*test_ket
  74. assert qapply(Z*test_ket) == z*test_ket
  75. assert qapply(X*Y*test_ket) == x*y*test_ket
  76. assert qapply(X*Y*Z*test_ket) == x*y*z*test_ket
  77. assert qapply(Y*Z*test_ket) == y*z*test_ket
  78. assert PositionKet3D() == test_ket
  79. assert YOp() == Y
  80. assert ZOp() == Z
  81. assert PositionKet3D.dual_class() == PositionBra3D
  82. assert PositionBra3D.dual_class() == PositionKet3D
  83. other_ket = PositionKet3D(x_1, y_1, z_1)
  84. assert (Dagger(other_ket)*test_ket).doit() == \
  85. DiracDelta(x - x_1)*DiracDelta(y - y_1)*DiracDelta(z - z_1)
  86. assert test_ket.position_x == x
  87. assert test_ket.position_y == y
  88. assert test_ket.position_z == z
  89. assert other_ket.position_x == x_1
  90. assert other_ket.position_y == y_1
  91. assert other_ket.position_z == z_1
  92. # TODO: Add tests for representations