Hi,

if you guys are generally open to the idea, I would very much like to 
integrate/refactor most of the symbolic code from my own quantum optical 
circuit package QNET [1] into SymPy over the next few months.
Specifically, this would probably lead to some completely new modules to 
handle quantum optical circuits (these are very different from the circuit 
representation used in quantum information algorithms, for more information 
see this paper [2] or the documentation [1] or my brief intro below) as 
well as contributions to sympy.physics.quantum and 
sympy.physics.secondquant.py

I guess, to get started, it would be very helpful for me to know who I 
could ask questions about the existing code (Brian and Aaron, you might 
still remember me from this year's SciPy) and what the general policy is on 
extending existing classes, and perhaps even modifying some of the design 
decisions/philosophy.

First off, I know that a lot of people have put _tons_ of work into this 
and that the design decisions that were made so far were made for good 
reasons. I certainly don't wish to step on people's toes, but rather try to 
find a way in which I can contribute useful code to what I believe is an 
awesome project. 

So, to start off, let me very briefly describe what sort of systems we 
study and what our workflow looks like.

We generally study interconnected networks of open quantum systems where 
the connections are realized by freely propagating 1-d bosonic quantum 
fields. 
A particular node in a network analyzed in isolation would have some 
internal Hilbert space H_j and its ensemble averaged dynamics would be 
computed through a Lindblad-type master equation.

Now the math behind the circuit algebra that we use allows to combine 
multiple such systems and derive the model for the composite system.
This beast now has as its internal Hilbert space the tensor product of its 
components H_1 (x) H_2 (x) ... (x) H_n and it could in principle be 
embedded into an even larger circuit.

As a consequence, the quantum operators appearing in the overall circuit 
models are usually polynomials in operators that act non-trivially only on 
specific degrees of freedom.
E.g. if component j were an optical cavity that contains a single harmonic 
oscillator degree of freedom, then there would be an associated pair of 
creation and annihilation operators a_j, Dagger(a_j).

If we consider a single product M_1 (x) N_2, i.e. an operator M acting on 
the degree of freedom labelled 1 and N acting on 2,  there are two basic 
ways to implement operators on such a tensor space structure. 


   1. For any single degree of freedom operator M_1 to be considered in a 
   composite system, it needs to be explicitly lifted to the whole tensor 
   space by tensor-multiplying it with identity operators for all remaining 
   degrees of freedom:
      M_1 -> M_1 (x) Id_2
      N_2 -> id_1 (x) N_2
   2. Each single degree of freedom operator only keeps track of its 
   associated Hilbert space and commutes with operators acting on other 
   degrees of freedom.
   M_1 stays M_1, N_2 stays N_2 and only when they are multiplied, their 
   product is considered to act non-trivially on both 1 and 2.
   Their product would simply be written as
   M_1 * N_2 
   with the fact that this is a tensor product being implicit in their 
   acting on different degrees of freedom.

As it stands, the classes and methods within sympy.physics.quantum 
basically follow approach 1) whereas sympy.physics.secondquant appears to 
follow 2).

The advantages of 1) are:

- It's very simple to resolve commutation issues for operators on 
independent degrees of freedom
- The normal form, e.g. for the above example is given naturally
- It is trivial to resolve how such an operator acts on a given Hilbert 
space vector because that vector needs to be defined as a sum over similar 
tensor products.
- It is very easy to compute the numerical representation in a given basis 
and do things like interfacing with QuTiP [3].

The advantages of 2) are:

- It is very easy to scale up to very many degrees of freedom without 
cluttering your expressions
- The notation is much more like most people write quantum operator 
expressions by hand
- There need not be two different operations for multiplications (within a 
degree of freedom) and tensor products
- Even when working with a many component system it is trivially easy to 
obtain operator expressions that are restricted to only subsets of the 
overall system, i.e. each operator implicitly is defined on ANY additional 
degrees of freedom you might still add to your problem

I guess my main question is, is there any chance you would be open to 
making everything effectively follow the second approach? 
Or is there some way you can see to make sympy.quantum.operator types 
optionally have a Hilbert space property that would me to re-use everything 
defined in that module?

I know this must sound pretty drastic, but if we could find an approach to 
this that works for everybody, you would gain at least one (probably more) 
very motivated contributors to this part of SymPy.
Obviously I would be happy to do all the work myself to prepare these 
changes.

QNET also has some additional features you might find useful, there are 
some capabilities for recursive pattern matching / replacement with 
wildcards that can stand for single, zero or more or one or more operands. 
Similar to x_, x__, x___ in mathematica. It also supports limiting the 
types of matched symbols and can handle where a matched symbol must appear 
multiple times. Like Add(x_, Times(5, x_)) matches q+(5*q) but not q+(5*r).
If this doesn't already exist, I'd be happy to contribute these things to 
SymPy over time or maybe at least help whoever else is working on these.

Brian has already asked me to re-license QNET under MIT/BSD which I intend 
to do with the next full release (which, if we can agree on the above might 
be the last release of QNET that still features the general purpose quantum 
operator algebra code).

Thanks!

Nikolas


[1] QNET: http://mabuchilab.github.io/QNET/
[2] SLH models and networks of quantum optical systems 
http://arxiv.org/abs/0707.0048
[3] QuTiP: http://qutip.org/

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/6ee17ea7-30bd-491e-837d-6e9041145f66%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to