Google Summer of Code 2024
QuTiP has participated very successfully in Google Summer of Code for the last four years, and we are once again participating in Google Summer of Code (GSoC) 2024 under the NumFocus umbrella.
See here.
You can look at the 2020, 2021, 2022 and 2023 student project blogs to get an idea of the kinds of projects we've offered and the experience of working on them:
-
2023:
-
2022:
- QuTiP Tutorials Revamp by Christian Staufenbiel
- Continuous Benchmarks for QuTiP by Xavier Spronken
- QuTiP QIP Qiskit Backend by Shreyas Pradhan
-
2021:
- GPU (CuPy) data backend for QuTiP by Felipe Bivort Haiek
- TensorFlow data backend for QuTiP by Asier Galicia
- Quantum gate decomposition by Purva Thakre
-
2020:
The best way to learn about QuTiP is to study the lectures and tutorials on our website. If you need help, then look first in the documentation, then the Help Group - post a message if you need to.
Other resources to learn about QuTiP are:
- the two QuTiP papers, https://dml.riken.jp/?s=qutip
- some recent slides https://github.com/nathanshammah/interactive-notebooks/tree/master/slides
QuTiP participates in GSoC via NumFocus, so start by reading the NumFocus guidelines for students.
You will need to register on the Google Summer of Code website - https://summerofcode.withgoogle.com/ and make a final proposal before the deadline. You can add your draft and contact respective mentors so that we can provide feedback before the deadline.
Application deadline: March 18 - April 2
In order to demonstrate your communication, technical skills, and or, scientific knowledge, we encourage applicants to complete one or more small tasks before applying. Suitable tasks might include making a small improvement to any part of QuTiP (documentation, tutorials, the code itself, the QuTiP web site), reviewing open pull requests, debugging issues, replying to questions on the mailing list. There is no specific task checklist, but some examples are:
- Submit a pull request in QuTiP solving some issue from the issues page.
- Make some helpful suggestion of how to resolve some issue or enhance the toolkit. The more specific the better.
- Help some user who is having technical or usage problems on the Help Group
If you do complete one or more tasks, be sure to refer to them clearly in your application.
Note that there are multiple QuTiP GitHub repositories where contributions might be made:
- QuTiP core
- QuTiP QIP
- QuTiP Tutorials
- QuTiP Benchmarks
- QuTiP TensorFlow
- QuTiP CuPy
- QuTiP TensorNetwork
- QuTiP Jax
- QuTiP VrtualLab
- QuTiP Qtrl
- Website
All have open issues. Those labelled 'help wanted' and 'good first issue' are a good place to look.
Understanding of quantum dynamics, technical (programming) skills, and being helpful to users, are all highly valued by QuTiP.
Make sure to read the Contributing to QuTiP Development guidelines if you are submitting a Pull Request.
We encourage prospective students to email the admin team at qutip-admin@googlegroups.com and introduce themselves.
There is a template proposal from NumFOCUS for the student application at https://github.com/numfocus/gsoc/blob/master/templates/proposal.md and an archive of past projects, including QuTiP's, at https://summerofcode.withgoogle.com/archive/. You are welcome to deviate from the proposal template if you wish.
Here are some project ideas that have been proposed by our core development team. Note that you are welcome to submit a proposal for a project idea of your own devising that you believe fits within our organization. This could be an addition to one of our existing packages or a new complementary package. A list of project ideas can be found in qutip: just open a pull request or email the admin team at qutip-admin@googlegroups.com if you'd like to propose a new idea.
1 - QuTiP Control ML Optimization
2 - Enhanced Quantum Circuit Diagrams
3 - qutip-jax solver enhancement
The control package inside of qutip has been refactored and extended in the last 6 months. It will soon be released as a new package 'QuTiP QOC'. The new developments include global optimization methods, such as basin hopping. The aim of this project is to add machine learning (ML) based global optimization, using methods such as deep and reinforcement learning.
In practice, finding a set of control functions that maximize the desired outcome (typical fidelity of the quantum operation) becomes increasing difficult as the complexity of the system grows. For instance, as we increase the number of qubit systems in a register, finding the pulse functions to drive a computation becomes a very difficult problem. ML algorithms can learn something of the control optimization landscape such that efficiency in finding such sets of optimal functions will become more efficient.
Project size:
- 350 hours
Difficulty:
- Hard
Deliverables:
- ML optimization module(s) that can used within qutip packages
- Integration of ML modules with the qutip-qoc package
Skills:
- Familiar with Python
- Familiar with Git
- Familiar with ML methods
- Some understanding of quantum dynamics (helpful)
- A basic understand of control theory (helpful)
Mentors:
- Alex Pitchford (alex.pitchford@gmail.com)
- Simon Cross (hodgestar@gmail.com)
- Eric Giguère (eric.giguere@calculquebec.ca)
QuTiP QIP includes the ability to render quantum circuits in Jupyter notebooks using LaTeX. However, installing and rendering LaTeX is an onerously additional task for novice, and even experienced, users.
The primary goal of this project is to replace QuTiP QIP's circuit rendering with a pluggable framework and to implement both text-only and Matplotlib based renderers. The text-only rendererer should allow circuits to be rendered in terminal Python consoles and Jupyter notebooks without requiring any dependencies not included by default. The Matplotlib renderer should allow circuits to be rendered beautifully in Jupyter notebooks with only Matplotlib required as an additional dependency. The existing LaTeX renderer should be ported to the new pluggable framework and there should be a means to select the rendering backend and an intelligent, but not too intelligent, selection of a default renderer.
A secondary but important goal is to render the circuits beautifully. The existing renderer is functional, but it would be better to have circuits that users would be proud to include in their documentation, academic papers and presentations. Specific improvements which could be made include a better ability to label wires, better distinguishing of classical and quantum wires, the ability to display sub-circuits and organize the gates in the rendering, better default font choices, more useful rendering of custom gates, the addition of colour, the ability to render barriers between sets of gates, and the option to style the plot in useful ways.
The addition of the text-only and Matplotlib renderers should also enable the rendering of circuits in Try QuTiP, a version of QuTiP that runs entirely in the browser when LaTeX is not available.
Implementations in other projects:
Project size:
- 350 hours
Difficulty:
- Medium
Deliverables:
- a pluggable framework for rendering quantum circuits
- a port of the current LaTeX renderer to the new framework
- a new text-only circuit renderer
- a new Matplotlib-based circuit renderer
- a means to select the renderer and intelligent selection of the default renderer
- unit tests for all of the above
- documentation for all of the above
- example notebooks for all of the above
Skills:
- Familiar with Python, Jupyter, git and GitHub.
- Familiar with the basics of quantum circuit diagrams.
- Willing to learn a lot.
- Excited about beautiful diagrams!
Mentors:
- Boxi Li (etamin1201@gmail.com)
- Simon Cross (hodgestar@gmail.com)
- Eric Giguère (eric.giguere@calculquebec.ca)
QuTiP has recently improved its solver
module to extend its flexibility and
allow different Integrator
(ODE solvers). Integrator
in qutip are the
classes responsible for the low level computation of the evolution of a
Quantum state. These are used in the QuTiP's solvers
(see sesolve
, mesolve
, smesolve
) to provide a user friendly
interface for the computation of the time dynamics of a wide variety of
systems. QuTiP also includes a data layer to represent its main class,
Qobj
, using different array interfaces. The data layer has been
extended in previous projects (some of them GSoC) giving birth to
a family of packages (TensorFlow,
CuPy and
Jax) that allow, among other things, GPU
operation and auto-differentiation of QuTiP's Qobj
. Those data-layers open
new avenues for quantum control applications in QuTiP, where the
auto-differentiation of a system evolution may provide and improvement in
performance.
A first step to extend the auto-differentiation capabilities of qutip has recently been
carried out on qutip-jax implementing an Integrator
(DiffraxIntegrator
).
This allows sesolve
and mesolve
to support auto-differentiation.
However many other qutip's functions still do not support this feature due to the use of
numpy or cython.
Your task as part of the GSoC project will be to implement a user friendly interface
to include derivatives int the result object from the solvers, add support for jax.grad
in qutip.metrics
and create example notebook for these features, possibly in the
context of quantum control.
Project size:
- 350 hours
Difficulty:
- Medium
Deliverables:
- Design and implement a user friendly interface to use solvers together with
jax.grad
. - Add documentation showing examples of use for
jax.jit
andjax.grad
in the context ofQobj
operations and solvers. - Create example notebooks. such as converting the following notebook from qgrad:
Skills:
- Familiar with Python and Git
- Understand the concepts of Python closures and decorators (which are used widely in JAX function transformations).
- Familiar with JAX (beneficial, but not required)
Mentors:
- Eric Giguère (eric.giguere@calculquebec.ca)
- Shahnawaz Ahmed (shahnawaz.ahmed95@gmail.com)
- Asier Galicia (agalicia1221@gmail.com)