2011/11/4 Uğur Güney <[email protected]>

> On Fri, Nov 4, 2011 at 12:56 PM, Brian Granger <[email protected]>wrote:
>
>> 2011/11/4 Uğur Güney <[email protected]>:
>> > Now, I can ask my second question. :-)
>> > Are the states and operators aware of their Hilbert spaces? For example,
>> > say, I'm working on a two particle system. I'm only looking at their
>> spin
>> > states, described by qubits. First particle lives in Hilbert space H1,
>> and
>> > second one in H2. So the combined state lives in H1xH2. I want to apply
>> > projection operators which works on either H1 or H2 to this state.
>> > I tried this:
>>
>> All of the Hilbert space stuff is implicit, but you can still do what you
>> want.
>>
>> > H1=HilbertSpace() # Hilbert space for first particle
>> > H2=HilbertSpace() # Hilbert space for second particle
>> > qb1 = Qubit('0') # first particle's state
>> > qb2 = Qubit('1') # second particle's state
>> > state = TensorProduct(qb1,qb2) # state of combined system
>> > # state.hilbert_space # gave an error: no such attribute
>> > proj = qb2*qb2.dual # projection operator which works on H2
>>
>> proj = TensorProduct(1, qb2*qb2.dual)
>> qapply(tensor_product_simp(proj*state))
>>
>> The extra tensor_product_simp turns a product of TPs into a TP of
>> products.
>>
>
> So, adding these lines to the code above
> qb1.hilbert_space = H1
> qb2.hilbert_space = H2
> can not make the system differentiate between two different Hilbert
> spaces. But I have to keep the order of the objects in the tensor products
> to indicate the space they belong, such as "1" operator on so-called "H1"
> and "proj" operator on "H2". I think this is a simple and robust solution.
>
> But, unforunately, when I tried "proj=TensorProduct(1,qb2*qb2.dual)" I got
> this error:
> AttributeError: 'int' object has no attribute 'is_commutative'
>
> I think 1 is an integer an does not behaved as an identity operator. Are
> there any identity operators in Sympy?
>

Without a general abstract identity object, I tried this, by using the
property: "Identity = sum over all projection operators"

id=Qubit(0)*Qubit(0).dual+Qubit(1)*Qubit(1).dual # identity operator on a
qubit. I can live with this.
proj2=TensorProduct(id,proj) # projection operator which affect only the
hilbert space on the right, "H2"
tensor_product_simp(proj2*state) # this function worked exactly as you
described!
qapply(tensor_product_simp(proj2*state))

Unfortunately the last line gave the same error:
AttributeError: 'int' object has no attribute 'is_commutative'

Sorry for bombarding you with emails. I get abit excited.

Best,
vug


> vug
>
>
>> But the main point is that you have to be careful about creating
>> tensor products explicitly.  This is another place where we tend to be
>> very sneaky when writing Dirac notation by hand.  We keep track of
>> which Hilbert space each operator is acting in but don't express it in
>> our notation.  As you can imagine, it was quite difficult to teach
>> SymPy Dirac notation and we have tried to strike a balance between
>> Mathematical accuracy and easy of use.
>>
>> Cheers,
>>
>> Brian
>>
>> > proj*state
>> > (proj*state).doit()
>> > qapply(proj*state)
>> > The result was: "|1><1|*|0>x|1>" Is it possible to convert this
>> expression
>> > into "|0>x(|1><1|1>)" which can be further simplified to "|0>x|1>"?
>> > vug
>> > 2011/11/4 Uğur Güney <[email protected]>
>> >>
>> >> Hi!
>> >> Thanks for the clear explanation!
>> >>
>> >> On Fri, Nov 4, 2011 at 1:27 AM, Brian Granger <[email protected]>
>> wrote:
>> >>>
>> >>> 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.
>> >>
>> >> Now I realized that even the simplest calculation that is made with
>> pencil
>> >> and paper involves these kind of background processes that we
>> >> do unconsciously. Dirac notation is too intuitive for a computer. :-)
>> >>>
>> >>> 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.
>> >>
>> >> Thanks! OK, I will inform the group about how and where I used Sympy.
>> I'll
>> >> definitely look at density matrices because I want to work on both pure
>> >> states and mixed states.
>> >> vug
>> >>>
>> >>> 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.
>> >>>
>> >>
>> >
>> > --
>> > 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.
>>
>>
>

-- 
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.

Reply via email to