from sympy import * init_printing() from sympy.physics.quantum import * from sympy.physics.quantum.spin import * from sympy.physics.quantum.pauli import * from sympy.physics.quantum.boson import * from sympy.physics.quantum.density import * from sympy.physics.quantum.operatorordering import * s_ops = sx, sy, sz, sp, sm = SigmaX(), SigmaY(), SigmaZ(), SigmaPlus(), SigmaMinus() #s_ops = sx, sy, sz, sp, sm = Jx, Jy, Jz, Jplus, Jminus # does not work well, many expressions unevaluated sx1, sy1, sz1 = SigmaX(1), SigmaY(1), SigmaZ(1) sx2, sy2, sz2 = SigmaX(2), SigmaY(2), SigmaZ(2) qsimplify_pauli(sx * sy) qsimplify_pauli(sx1 * sy1 * sx2 * sy2) from IPython.display import HTML def print_table(data): t_table = "\n%s\n
" t_row = "%s" t_col = "%s" table_code = t_table % "".join([t_row % "".join([t_col % ("$%s$" % latex(col)) for col in row]) for row in data]) return HTML(table_code) data = [s_ops, [represent(s) for s in s_ops]] print_table(data) data = [[r"{\rm Expression}", r"{\rm Evaluated\;value}", r"{\rm Numerical\;test}"]] + \ [[Commutator(s1, s2), Commutator(s1, s2).doit(), represent(Commutator(s1, s2)) == represent(Commutator(s1, s2).doit())] for s1 in s_ops for s2 in s_ops if s1 != s2] print_table(data) def elim_zero_matrix(e): return 0 if e == Matrix([[0, 0], [0, 0]]) else e I_op = IdentityOperator(2) data = [[r"{\rm Expression}", r"{\rm Evaluated\;value}", r"{\rm Numerical\;test}"]] + \ [[AntiCommutator(s1, s2), AntiCommutator(s1, s2).doit(), elim_zero_matrix(represent(AntiCommutator(s1, s2))) == represent(I_op * AntiCommutator(s1, s2).doit())] for s1 in s_ops for s2 in s_ops if s1 != s2] print_table(data) Dagger(sx), Dagger(sy), Dagger(sz) Dagger(sm), Dagger(sp) sm, sp s = [sx, sy, sz, sm, sp] data = [[s2] + [(qsimplify_pauli(s1 * s2), represent((qsimplify_pauli(s1 * s2) * I_op).expand()) == represent(s1) * represent(s2)) for s1 in s] for s2 in s] print_table(data) represent(sm) * represent(sm) [sx ** n for n in range(10)] [sy ** n for n in range(10)] [sz ** n for n in range(10)] [sm ** n for n in range(10)] [sp ** n for n in range(10)] up = SigmaZKet(0) down = SigmaZKet(1) ket = (up + down)/sqrt(2) ket, qapply(sx * ket), qapply(sy * ket), qapply(sz * ket) ket, qapply(sm * ket), qapply(sp * ket) represent(qapply(sx * ket)) == represent(sx) * represent(ket) represent(qapply(sy * ket)) == represent(sy) * represent(ket) represent(qapply(sz * ket)) == represent(sz) * represent(ket) represent(qapply(sm * ket)) == represent(sm) * represent(ket) represent(qapply(sp * ket)) == represent(sp) * represent(ket) from sympy_quantum_extra import * rc = recursive_commutator(sy, sz, 5).doit().expand() rc A, B = Operator("A"), Operator("B") Commutator(A, B).doit().doit() # Add.doit() - > Mul.doit() -> ... Commutator(sx, sy).doit() # sx * sy - sy * sx A = Matrix([[1, 2], [3, 4]]) B = Matrix([[1, 2], [3, 4]]) A * B, MatMul(A, B) 1 * 3 IdentityOperator(2).is_commutative qsimplify(qsimplify(rc)) represent(sx * sx) represent(sx) ** 2 == Integer(1) * represent(IdentityOperator(2)) theta = symbols("theta") U = exp((I * theta / 2)* sy) unitary_transformation(U, sx) unitary_transformation(U, sz) unitary_transformation(U, sm) unitary_transformation(U, sp) %reload_ext version_information %version_information sympy