test_kind.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. """Tests for sympy.physics.quantum.kind."""
  2. from sympy.core.kind import NumberKind, UndefinedKind
  3. from sympy.core.symbol import symbols
  4. from sympy.physics.quantum.kind import (
  5. OperatorKind, KetKind, BraKind
  6. )
  7. from sympy.physics.quantum.anticommutator import AntiCommutator
  8. from sympy.physics.quantum.commutator import Commutator
  9. from sympy.physics.quantum.dagger import Dagger
  10. from sympy.physics.quantum.operator import Operator
  11. from sympy.physics.quantum.state import Ket, Bra
  12. from sympy.physics.quantum.tensorproduct import TensorProduct
  13. k = Ket('k')
  14. b = Bra('k')
  15. A = Operator('A')
  16. B = Operator('B')
  17. x, y, z = symbols('x y z', integer=True)
  18. def test_bra_ket():
  19. assert k.kind == KetKind
  20. assert b.kind == BraKind
  21. assert (b*k).kind == NumberKind # inner product
  22. assert (x*k).kind == KetKind
  23. assert (x*b).kind == BraKind
  24. def test_operator_kind():
  25. assert A.kind == OperatorKind
  26. assert (A*B).kind == OperatorKind
  27. assert (x*A).kind == OperatorKind
  28. assert (x*A*B).kind == OperatorKind
  29. assert (x*k*b).kind == OperatorKind # outer product
  30. def test_undefind_kind():
  31. # Because of limitations in the kind dispatcher API, we are currently
  32. # unable to have OperatorKind*KetKind -> KetKind (and similar for bras).
  33. assert (A*k).kind == UndefinedKind
  34. assert (b*A).kind == UndefinedKind
  35. assert (x*b*A*k).kind == UndefinedKind
  36. def test_dagger_kind():
  37. assert Dagger(k).kind == BraKind
  38. assert Dagger(b).kind == KetKind
  39. assert Dagger(A).kind == OperatorKind
  40. def test_commutator_kind():
  41. assert Commutator(A, B).kind == OperatorKind
  42. assert Commutator(A, x*B).kind == OperatorKind
  43. assert Commutator(x*A, B).kind == OperatorKind
  44. assert Commutator(x*A, x*B).kind == OperatorKind
  45. def test_anticommutator_kind():
  46. assert AntiCommutator(A, B).kind == OperatorKind
  47. assert AntiCommutator(A, x*B).kind == OperatorKind
  48. assert AntiCommutator(x*A, B).kind == OperatorKind
  49. assert AntiCommutator(x*A, x*B).kind == OperatorKind
  50. def test_tensorproduct_kind():
  51. assert TensorProduct(k,k).kind == KetKind
  52. assert TensorProduct(b,b).kind == BraKind
  53. assert TensorProduct(x*k,y*k).kind == KetKind
  54. assert TensorProduct(x*b,y*b).kind == BraKind
  55. assert TensorProduct(x*b*k, y*b*k).kind == NumberKind
  56. assert TensorProduct(x*k*b, y*k*b).kind == OperatorKind
  57. assert TensorProduct(A, B).kind == OperatorKind
  58. assert TensorProduct(A, x*B).kind == OperatorKind
  59. assert TensorProduct(x*A, B).kind == OperatorKind