Ugur, Welcome!
2011/11/3 Uğur Güney <[email protected]>: > Dear Sympy users, > I'm a physics PhD student, doing research on differences between classical > and quantum correlations. > I was in need of a simple calculator which works with quantum states etc. > While searching for quantum simulators in Python I came to know that there > is already a quantum module in SymPy. Because I couldn't find an explicit > documentation I looked at the source files to understand how basic > calculations can be done using the quantum module. Great, currently this is the best way to learn about how it all works. > Can you please help me in applying a projection operator on a general state. > This is the code that I tried: > from sympy import * > from sympy.physics.quantum import * > from sympy.physics.quantum.qubit import * > [c00,c01,c10,c11]=var('c00,c01,c10,c11') # coefficients > state = c00*Qubit('00')+c01*Qubit('01')+c10*Qubit('10')+c11*Qubit('11') # > most general two-qubit state > qbt=Qubit('01') # a qubit > proj = qbt*qbt.dual # projection operator > # proj*state # operator applied on the state The following will work: qapply(proj*state) The need for qapply ("quantum apply") is as follows. Because of how python/sympy handle multiplication, we are only able to detect inner products in very simple situations like Qubit('01').dual*Qubit('01'). For more complex situations, we just leave it as a general "multiplication" operation. The qapply function walks through a general quantum expression and does a couple of things: * Applies any operators to states. * Looks for <bra|*|ket> expressions and turns them into inner products. This is why you need to call qapply by hand after creating a general quantum expression. Hope this helps. Also, we would love to know how you end up using this stuff. It is pretty new, so there is a ton left to do. Also, if you are looking at classical/quantum correlations, you may be interested in the work we have done on density matrices. That has not yet been merged into sympy's master branch, but we plan on doing that....always looking for help. Cheers, Brian > # (proj*state).expand() operator applied on each term in the expansion > print (proj*state).expand().doit() # try to do the inner-products > In the last step "doit()" did not work as I expected, it did not do the > inner products. I suspect that the expression involving TensorProduct is not > converted to InnerProduct automatically. But normally > "(Qubit('01').dual*Qubit('01')).doit()" and > "(Qubit('00').dual*Qubit('01')).doit()" work as expected and give 1 and 0. > I'll be happy if you can guide me how to use this beautiful tool. > Best, > ugur guney > > -- > 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. > -- Brian E. Granger Cal Poly State University, San Luis Obispo [email protected] and [email protected] -- 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.
