I'd say this is a bug. It looks like it's been fixed at https://github.com/sympy/sympy/pull/1053. That PR seems to have been stalled, so maybe you could see what needs to be done.
An obvious work-around is to pull out the 2 from the qapply: In [19]: print 2*qapply(tensor_product_simp(projUV*vecUV)) # the number stops the machinery 2*<u1|u2>*<v1|v2>*|u1>x|v1> You can use args_cnc to help automate this: In [22]: a = (2*projUV*vecUV) In [24]: a.args_cnc() Out[24]: [[2], [❘u₁⟩⟨u₁❘⨂ ❘v₁⟩⟨v₁❘, ❘u₂⟩⨂ ❘v₂⟩]] In [26]: c, nc = a.args_cnc() In [27]: Mul(*c)*qapply(tensor_product_simp(Mul(*nc))) Out[27]: 2⋅⟨u₁❘u₂⟩⋅⟨v₁❘v₂⟩⋅❘u₁⟩⨂ ❘v₁⟩ (by the way, we should have an as_commutative_noncommutative method) I guess that won't work if you need to do factorization, but there are other methods that can help you there too (like factor_terms). I hope someone who actually knows the quantum stuff will point it out if something I said above is wrong. Aaron Meurer On Sat, Aug 25, 2012 at 9:13 AM, Uğur Güney <[email protected]> wrote: > Hi All! > > I am working on a research problem and wanted to use sympy's quantum module > to do the calculations, because sympy has abstract Ket objects on which one > can do many operations without assigning them actual values. I come up with > a difficulty > > Say I have two Hilbert spaces U and V and on each space I have two vectors > > from sympy import * > from sympy.physics.quantum import * > > u1=Ket('u1') > u2=Ket('u2') > v1=Ket('v1') > v2=Ket('v2') > > projU = u1*u1.dual # a projection operator on u1 > print qapply(2*projU*u2) # qapply works as expected > projV = v1*v1.dual # an operator on V > projUV = TensorProduct(projU, projV) # operator on UV > vecUV = TensorProduct(u2,v2) # vector in UV > print qapply(tensor_product_simp(projUV*vecUV)) # works as expected again > print qapply(tensor_product_simp(2*projUV*vecUV)) # the number stops the > machinery > > outputs: > 2*<u1|u2>*|u1> > <u1|u2>*<v1|v2>*|u1>x|v1> > 2*(|u1><u1|*|u2>)x(|v1><v1|*|v2>) > > I'll be glad if you can tell me how I can qapply on expressions in the form > x*projUV*vecUV. > > Have a good day! > ugur > > > > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
