Skip to main content

Quantum Software:  2021-2022



Schedule C1 (CS&P)Computer Science and Philosophy

Schedule C1Computer Science

Schedule C1Mathematics and Computer Science

Schedule IIMSc in Advanced Computer Science

MSc in Mathematics and Foundations of Computer Science



In recent years, quantum computation has moved from a theoretical exercise to a practical one, as limited, small-scale quantum computers have become increasingly available. This course, which follows on from a basic course in quantum computation, addresses the practical challenges of programming these emerging devices. Toward that end, this course splits broadly into 2 topics:

  • Quantum compilation -- translating high-level descriptions of quantum algorithms into "machine code" suitable to run on quantum hardware and doing related tasks like optimisation and mapping operations on to physical memory locations
  • Quantum algorithms -- developing a deeper understanding of standard oracle-based (a.k.a. "1990s style") quantum algorithms that run on big, (distant) future quantum computers, as well as new families of hybrid classical/quantum algorithms designed to run on noisy intermediate-scale quantum (NISQ) devices, which are more like the small, limited quantum computers of today

The course will cover the following topics:

  • Quantum circuits and the ZX-calculus
  • Quantum circuit compilation and optimisation
  • Hardness and classical simulation of quantum computation
  • Cloud quantum computing
  • Hybrid/variational quantum algorithms
  • Quantum simulation and chemistry

This course will be given in person (LTA) for weeks 1-5, and online weeks 6-8.

  • Lectures will be held every Tuesday, Wednesday, and Friday 16:00-17:00 UK time (full timetable here). Recordings will appear on Panopto shortly after each lecture.
  • Problem sheets will be a mix of theoretical questions and coding assignments, with the latter given as Jupyter notebooks
  • Class info, including weekly deadlines is on Minerva
  • Everything else (problem sheets, schedule of material, etc) is here on the course website

The course consists of:

Completing Problem Sheets

Coding problem sheets are given as Jupyter notebooks. You can either either download them and do them on your own computer, or complete them in the browser using a service such as Google Colab.

If you are running on your own machine, make sure you get the latest version of PyZX by running pip install git+

If you are running on Colab, click the "open with Colab" link next to the problem sheet. The first time you save, make sure you click File > Save a copy in Drive (you will need a Google account to do this). After this, you will be working on your own copy, so you can save in the normal way.

To submit your sheet, email the .ipynb file to your teacher. If you completed the sheet with Colab, click File > Download > Download .ipynb to download this file for submission.


The following is a list of topics covered in the lectures. Since this is the first iteration of the course, topics of individual lectures haven't all be finalised yet.

The lecture notes for this course are a draft of the upcoming book Picturing Quantum Software, which will be updated regularly throughout the term. It can be downloaded from Course Materials.

Handwritten lecture notes will be updated after each lecture: part 1 | part 2 | part 3 | part 4 | part 5. Some lectures have slides, which can be downloaded by clicking the links below.

The is also a collection of Jupyter notebooks covering the last 3 weeks of material. It is strongly recommended you download these and go through them yourself before starting the miniproject.

  • Lecture 1, 18 Jan: Introduction to quantum software (slides)
  • Lecture 2, 19 Jan: Quantum theory is SCUM
  • Lecture 3, 21 Jan: Circuits and ZX-diagrams
  • Lecture 4, 25 Jan: The ZX-calculus
  • Lecture 5, 26 Jan: Phase-free ZX and CNOT circuits
  • Lecture 6, 28 Jan: Cliffords and graph states
  • Lecture 7, 1 Feb: Simplifying Clifford diagrams
  • Lecture 8, 2 Feb: Strong classical simulation of Clifford circuits
  • Lecture 9, 4 Feb: Clifford completeness of the ZX-calculus
  • Lecture 10, 8 Feb: Pauli exponentials and Pauli gadgets
  • Lecture 11, 9 Feb: Normal forms for Clifford+phase circuits
  • Lecture 12, 11 Feb: Toffoli gates and phase gadget optimisations
  • Lecture 13, 15 Feb: Measurement-based quantum computing
  • Lecture 14, 16 Feb: Generalised flow and determinism for MBQC
  • Lecture 15, 18 Feb: Circuit extraction and quantum error correction
  • Lecture 16, 22 Feb: Quantum computing in the NISQ era (slides)
  • Lecture 17, 23 Feb: Introduction to IBMQ/qiskit (slides)
  • Lecture 18, 25 Feb: Preparing and visualising states
  • Lecture 19, 1 Mar: Measurements and quantum state tomography
  • Lecture 20, 2 Mar: Quantum machine learning concepts (slides)
  • Lecture 21, 4 Mar: Variational quantum eigensolver
  • Lecture 22, 8 Mar: Quantum approximate optimisation algorithm
  • Lecture 23, 9 Mar: Applied VQC, Part 1
  • Lecture 24, 11 Mar: Applied VQC, Part 2

Learning outcomes

After studying this course, students will be able to:

  1. Fluently represent, manipulate, and simplify quantum circuits using the ZX-calculus.
  2. Apply techniques for efficiently representing and synthesising quantum circuits to perform a variety of computational tasks.
  3. Understand key transformations done by a quantum compiler to optimise circuits and account for physical constraints of quantum hardware.
  4. Understand a broader class of oracle-based quantum algorithms using graphical techniques.
  5. Use variational quantum algorithms to solve numerical optimisation and quantum simulation problems.
  6. Be ready to tackle current research topics studied by the quantum group.


Students are strongly encouraged to take Quantum Processes and Computation before this course. However, students may also take this course if they have had another first course in quantum computation (e.g. Quantum Information in CS Part A/B or Introduction to Quantum Information in Maths). In the latter case, students are encouraged to do some background reading on the diagrammatic approach to quantum computation, namely:

This material will be reviewed in the first week of the course, but some prior knowledge will help students to keep up.

Reading list

Lecture notes and slides (see above).

Related research




Students are formally asked for feedback at the end of the course. Students can also submit feedback at any point here. Feedback received here will go to the Head of Academic Administration, and will be dealt with confidentially when being passed on further. All feedback is welcome.

Taking our courses

This form is not to be used by students studying for a degree in the Department of Computer Science, or for Visiting Students who are registered for Computer Science courses

Other matriculated University of Oxford students who are interested in taking this, or other, courses in the Department of Computer Science, must complete this online form by 17.00 on Friday of 0th week of term in which the course is taught. Late requests, and requests sent by email, will not be considered. All requests must be approved by the relevant Computer Science departmental committee and can only be submitted using this form.