Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
GSoC 2015 Application Laura Domine : Developing symbolic quantum computation
Name : Laura Domine
E-mail : temigo [at] gmx [dot] com
University : Ecole Polytechnique, Palaiseau, France
GitHub : Temigo
I am a first year student at the Ecole Polytechnique, Palaiseau, France (we're admitted here after two or three years of undergraduate studies in Science). During those undergraduate studies, I've had courses both in maths and physics (Linear Algebra, Analysis, Classical mechanics, Electromagnetism, etc), as well as in Computer Science.
Although I will take my first official Quantum Mechanics course this spring, I have already studied it on my own and successfully completed two school projects (a quantum computer emulation and quantum neural networks simulation) dealing with quantum computing. Yes, I'm really passionate about this stuff !
As a matter of fact, I was surprised to see that they look very close to the SymPy quantum computing library (which I didn't knew at the time), but obviously were less developed (and written in Caml Light). Therefore I am enthusiastic to contribute to SymPy's pythonic quantum library !
I work on a Ubuntu 14.04 machine. I used to code with gedit, but since I've discovered PyCharm editor, I stick to it. I really like its intelligent features such as code completion, powerful refactoring, and "go to declaration".
I have been programming since high school (so, seven years ago). I started with a bit of C/C++, tried some Java, even played a bit with assembly, but I quickly dived into Python, which is my favorite language. It unites elegance and pseudo-code-feel together with clever structures, such as dictionaries. My sole regret so far is that it's outperformed by C/C++ in speed ! But I guess that it is the price to pay. I have also worked a lot with Caml Light at undergraduate school.
In addition, I have learned to use Git since January 2015, and even if I'm far from being experienced, it won't be a problem to use it.
Having worked with Maple at school and having hugely distasted it, it was a wonderful experience to discover SymPy. Its most remarkable feature so far, which struck me at first, was its perfect integration in Python : being able to use it in any Python code is an incredible freedom. A powerful library inside a powerful language ! It's also the first CAS I ever see which dares to offer a quantum computing environment. (Others usually have sparse plugins, nothing really developed) As I love this field, it could only appeal to me !
Contributions to SymPy
Since I discovered SymPy only at the beginning of March 2015, I couldn't contribute a lot until now. However, I managed to do a first pull request on matrices, implementing a variant of Bareiss's fraction-free algorithm to compute determinants, and an other one concerning Grover's algorithm. Of course, I'll try to do some more before the deadline.
- (Under Review) matrices: Implemented Sparse Fraction Free Algorithm
- (Under Review) physics.quantum: Implemented _represent_ZGate in Grover's algorithm
Playing around with SymPy, I also opened issue #9136 regarding
In addition, I plan to use SymPy as a first-choice CAS during the next years, and therefore to contribute regularly in the future.
Project : Developing symbolic quantum computation
The integrated quantum computing library of SymPy can be a great advantage over other CAS. Therefore, it should be further developed. Since many years, there are some important features that SymPy is lacking and that are waiting to be implemented. I wish I could help to make these at last part of SymPy.
For the moment, I plan to develop those directions :
- Implementation of other quantum algorithms
- Quantum error correction
- Solovay-Kitaev theorem
- Circuit plotting
(still reflecting on this, feedback is welcome !)
Plan of Execution
1. Implementation of other quantum algorithms
Although the most popular quantum algorithms are already implemented in SymPy (Grover and Shor's algorithms, for instance), it lacks more simple algorithms, which could be a nice first step into the field for students. I was specifically thinking of Deutsch, Deutsch-Josza and Simon's algorithms.
As these shouldn't take much time, I could go further and implement some other well-known algorithms, though a bit more complex ones, such as the Shor discrete logarithm algorithm or Ambainis's algorithm solving the element distinctness problem (see ). It could provide a useful overview of quantum algorithms, at different complexity levels.
For exemple Simon's algorithms, Shor's algorithm and the discrete logarithm algorithm are specific cases of the hidden subgroup problem. Ambaini's algorithm is based on a quantum walk which is a quite different framework from all other algorithms.
The goal is to provide an interesting overview of quantum algorithms, with different levels of difficulty, for students new at quantum computation as for others.
2. Quantum error correction
SymPy doesn't have any framework implementing some quantum error correction code. I plan to first work on Shor's code and Steane's code. I might then move on more general and complex codes (CSS codes and stabilizer codes).
3. Solovay-Kitaev theorem
This is a fundamental universality theorem that allows us to perform an arbitrary single-qubit gate using only gates from a predefined set, with a fixed precision. Implementing this operation in SymPy would be a very nice feature. To do this, I would use  and  as guides. The existing implementation in the Quantum Compiler from  may also be very useful.
4. Circuit Plotting
This is an important feature of the quantum computing module, as it allows us to better visualize the algorithm's flow. Although SymPy already has a module for this (see the work of Rick Muller ), there is still room for improvement :
- Plot a matrix as an operator
- Plot multi-qubit blocks
- Plot curly brackets
- Allow the labels to be simple text and not only kets
- Plot ellipsis (...)
(see for example Fig. 6.2 of  for the three last features)
- Plot wire with a '/'through it (to represent a set of n qubits)
- Render the figure in PS and Latex formats (as does qasm2circ)
The goal will be to pass all Qasm tests (see  and ), and hopefully to have the same (or more) functionalities.
TODO Coming soon...
Other commitments (during GSoC)
I will have courses and exams until the 4th of July, thus I think that I will be able to spend around 20h/week during this period on SymPy. I will begin to work on the project as soon as possible, not waiting for the official beginning. I intend to work mainly on theoretical aspects of the project and easily implemented stuff during this time. For this reason, courses will also be useful to my project, since I'll follow a Quantum Mechanics course. After this, I have nothing special except one or two weeks of vacation in August, and I plan to work at least 40h/week on it.
I will be updating a blog during the GSoC, to report progress and get feedback from the community.
-  IPython notebook on circuit plotting : http://nbviewer.ipython.org/gist/rpmuller/5843312
-  qasm2circ library : http://www.media.mit.edu/quanta/qasm2circ/
-  Quantum Computation and Quantum Information. Michael A. Nielsen and Isaac L. Chuang. 2011. Cambridge University Press.
-  The Solovay-Kitaev Algorithm. Dawson and Nielsen. http://arxiv.org/pdf/quant-ph/0505030.pdf
-  On an implementation of the Solovay-Kitaev algorithm, Nagy. http://arxiv.org/pdf/quant-ph/0606077.pdf
-  Quantum Compiler from ppham : http://sourceforge.net/projects/quantumcompiler/
-  Quantum walk algorithm for element distinctness. Ambainis. http://arxiv.org/pdf/quant-ph/0311001v9.pdf