About this map
Sections
What this is
Quantum algorithms are not written from scratch. They are assembled from a small number of reusable steps, and almost every published method is a different route through the same handful of them.
This is a map of those routes. Circles are the things an algorithm can be holding. Lines are the steps that carry you from one to the next. A method is a path across.
Nothing here is generated. Every line was read out of a paper and checked against it.
How to read it
- Something you can hold — a state, a matrix, a circuit, an answer.
- The same, in the middle of a step you have opened.
- A step. Someone has published a way through it.
- A step whose way through has not been pinned to one method.
- A step nothing published fills yet.
- A step you have opened. What is drawn inside it is how it was done.
- There is a record in the repository for this one.
How to move around
- Two fingers move the map. Pinch to zoom, or hold ctrl and scroll.
- Click a step to open it in place — everything else stays where it is.
- Click a name to read the full record without leaving the map.
- Arrow keys move, plus and minus zoom, zero puts it back.
What a line is claiming
A solid line means a paper puts those two steps together and we have the citation. A long-dashed line means the route is recorded but no single method has been named for that step. A short-dashed line means nothing published fills it — the step is real, the way through is not written yet.
A count after a step's name — ×T/h, ×O(κ) — means the route walks that step that many times rather than once. It is the source's own symbol, and the card says what it stands for and what one turn costs. A step with no count is a step no source we read said is repeated, which is not the same as one taken once.
A line drawn nested under another, on the soft shaded band behind it, is a narrower version of the line above it: the same construction, re-analysed or re-tuned, filling the same step. It is why two lines can draw the identical interior and still be two entries. Lines outside the band are alternatives to their neighbours, not versions of them.
The map does not hide the gaps. An empty step is drawn as an empty step.
What is not here yet
The map covers the algorithm literature. The repository covers circuits and primitives. They overlap less than you would expect, and where a method has no record we say so on its page rather than leaving the space blank.
Where something named here does have a record, its name links straight to it.
Method
Fault-tolerant compilation (Clifford+T pipeline)
Decompose to Clifford+T, approximate every continuous rotation by a discrete gate word, optimize for T-count and T-depth, then express the result as a schedule of logical operations on encoded patches — typically Pauli-product measurements under lattice surgery.
Open the full recordFills the slot: Compile a circuit to a specific deviceExpand it here — a map of just this
Applies when the target is a surface-code architecture. The compiler does not merely sit on top of error correction: it chooses the code distance and the patch layout, which is why that layer sits beneath this route as a step rather than as a precondition. The cost model inverts relative to pre-fault-tolerant compilation: Clifford gates are cheap or free because they can be commuted into the Pauli frame, and T and Toffoli gates dominate. Routing in the SWAP sense is replaced by lattice-level layout and ancilla-bus scheduling.
An abstract circuit (arbitrary-angle rotations, arbitrary two-qubit gates, all-to-all qubit indices); a device model giving the native gate set, coupling graph and calibration data; an approximation budget .
Abstract circuit → Discrete-gate circuitApproximate a continuous rotation in a discrete gate set
This slot runs before Litinski's pipeline, not inside it: his input is the algorithm's circuit already expressed over Clifford+, and every rewrite downstream is defined on that gate set, so a continuous angle has to be discretized here first. The word that comes back is charged asymmetrically: the Cliffords inside it are commuted away by the method's own step, so a rotation costs exactly the length of its sequence. Litinski's example is Trotterized simulation, where "each small-angle rotation is translated into a series of gates via gate synthesis"; because those gates "must be executed in series", one rotation buys -depth as well as -count. approximation: "Depending on the desired precision, this can require gates for each rotation" — a figure he attributes to Ross and Selinger, at a precision he never fixes, and one he states in his section on trade-offs beyond Clifford+ rather than derives.
approximation
Discrete-gate circuit → Device circuitcommute the Cliffords out, schedule the rest
Litinski's rewrite is what turns a Clifford+T circuit into something a surface code can be scheduled against. Every gate is written as a Pauli product rotation — , , — and the Clifford rotations are then commuted rightwards past everything: a passes a commuting unchanged, and turns an anticommuting one into . "If all Clifford gates are commuted to the end of the circuit, the rotations become Pauli product rotations", and the Cliffords that arrive at the end are absorbed by the final measurements, which become Pauli product measurements. What is left is the schedule: "every -qubit circuit can be written as a number of consecutive rotations and final Pauli product measurements", the count of those rotations being the T count and the number of commuting layers the T depth. Each is then a measurement against a magic state , so "if magic states are available, the only operations required for universal quantum computing are Pauli product measurements". assumption: The accounting that makes Clifford gates cost nothing is that they need not be run at all — "Clifford gates can be treated entirely classically, and T gates require the consumption of a magic state". The space-time figures below also assume measurement and feed-forward in ; at a more conservative the fastest configuration takes 10 seconds rather than 1. The tradeoff this buys is stated on one worked circuit — 100 logical qubits, T gates over T layers, at and a code cycle: 4 hours on 55,000 physical qubits, 22 minutes on 120,000, or 1 second on 330 million. Note that the lattice-surgery gate constructions are shared with Fowler and Gidney, but this rewrite is Litinski's alone.
assumption
A native-gate instruction sequence obeying the connectivity constraint, plus the overhead it added (SWAP count, T-count, depth) and the accumulated synthesis error.
- Build logical qubits at a target logical error rate
Encode physical qubits whose error rate sits below a code- and decoder-specific threshold into logical qubits meeting a target logical error rate per round, by spending qubits and time on redundancy and decoding syndromes in real time. Which code sits underneath reaches the layers above only as a physical-qubit count and a demand on connectivity.
What the schedule asks of the code is a supply of tiles: at code distance , "each tile corresponds to physical data qubits", and one step of the compiled schedule "roughly corresponds to code cycles". Its Pauli product measurements are executed as two-patch and multi-patch lattice surgery, which "both require code cycles to account for measurement errors", so every duration is a multiple of . Litinski fixes from the computation's own operation count: for 164 logical qubits, gates and physical error rate , the condition rejects at a 19.8% final error and settles on at 0.2%. approximation: is an approximation "for circuit-level noise", taken from Fowler and Gidney. assumption: that 1% is only half the budget — it bounds a logical error on any of the 164 patches, while a separate 1% on the gates is met by the distillation protocol, for "a 2% chance that the quantum computation will yield a wrong result".
approximationassumption
given a circuit, and a surface-code architecture as the target
decompose to Clifford+T
approximate every continuous rotation by a discrete gate word
# hand the discrete synthesis to the layer below
optimize for T-count and T-depth
# the cost model inverts relative to pre-fault-tolerant compilation:
# Clifford gates are cheap or free because they can be commuted into
# the Pauli frame, and T and Toffoli gates dominate
choose the code distance and the patch layout
# the compiler does not merely sit on top of error correction, which is
# why that layer sits beneath this route as a step rather than as a
# precondition -- hand the chosen distance and layout to it
express the result as a schedule of logical operations on encoded patches
# typically Pauli-product measurements under lattice surgery
# routing in the SWAP sense does not appear in this pipeline: it is
# replaced by lattice-level layout and ancilla-bus scheduling
return that schedule
# costed in T-count, T-depth, logical qubit count and lattice area rather
# than gate count
# Litinski's worked tradeoff, transcribed as the record states it: at
# p = 1e-4 with a 1 microsecond code cycle, a 100-logical-qubit computation
# with T-count 1e8 and T-depth 1e6 runs in
# 4 hours using 55,000 qubits
# 22 minutes using 120,000 qubits
# 1 second using 330,000,000 qubitsCosted in T-count, T-depth, logical qubit count and lattice area rather than gate count. Litinski's worked tradeoff: at with a 1 μs code cycle, a 100-logical-qubit computation with T-count 1e8 and T-depth 1e6 runs in 4 hours using 55,000 qubits, in 22 minutes using 120,000 qubits, or in 1 second using 330,000,000 qubits.
None found yet.
None found yet.
Qualtran's surface-code physical cost model (`qualtran.surface_code`)
- Expressing and Analyzing Quantum Algorithms with Qualtran
Matthew P. Harrigan, Tanuj Khattar, Charles Yuan, Anurudh Peduri, Noureldin Yosri, Fionn D. Malone, Ryan Babbush, Nicholas C. Rubin · 2024
About
Qualtran devotes its own Section VII to exactly the step this method names: turning architecture-agnostic logical costs into a surface-code physical estimate. Its abstract states the handoff directly — "Architecture-independent resource counts output by Qualtran can be forwarded to our implementation of cost models to estimate physical costs like wall-clock time and number of physical qubits assuming a surface-code architecture" — and names two pre-built pipelines: "we provide the gidney_fowler model based on Gidney and Fowler (2019) and related works; as well as the beverland model based on Beverland et. al. (2023), which takes heavy inspiration from Litinski (2019)" — the same Litinski and Fowler-Gidney papers this method's own citations list.
Methods
A `PhysicalCostModel` (`qualtran/surface_code/physical_cost_model.py`) combines four components the paper names directly: `PhysicalParameters` (physical error rate and code-cycle time), `DataBlock` (how algorithm qubits are laid out in tiles), `MagicStateFactory` (how T/CCZ magic states are produced), and `QECScheme` (the logical-error-rate formula) — matching the paper's own division: "the execution protocol's description is further factored into the data block design for storing algorithm qubits, the magic state factory construction for executing gates, and the error suppression ability of the code." Two classmethods assemble complete pipelines: `PhysicalCostModel.make_gidney_fowler` pairs a `SimpleDataBlock` with a `CCZ2TFactory` and `QECScheme.make_gidney_fowler()`; `PhysicalCostModel.make_beverland_et_al` instead selects one of three data-block layouts by name — `CompactDataBlock`, `IntermediateDataBlock`, `FastDataBlock` — whose docstrings credit them respectively to "[A Game of Surface Codes], Litinski (2019). Page 7, figure 9" and "Page 9, figure 13a" / "Page 9, figure 13b", i.e. the same space-time tradeoff this method's own `error-correction` hop describes as tiles and code cycles. `QECScheme.make_gidney_fowler` sets `error_rate_scaler=0.1, error_rate_threshold=0.01` in the class's own formula , so its `logical_error_rate(d, p)` reduces to — algebraically the same this method's `error-correction` hop attributes to Fowler and Gidney — and the class's own docstring cites the identical source: "Low overhead quantum computation using lattice surgery. Fowler and Gidney (2018)... See section XV for introduction of this formula." A separate `beverland_et_al_model.py` implements the rotation-synthesis and code-distance search of Beverland et al.'s Equations D3/D4, calling a `RotationCostModel` for T-gate counts and `FastDataBlock.get_n_tiles` for the tile count entering the code-distance search.
Data
None found yet.
Code
Verified directly against `github.com/quantumlib/Qualtran` on the `main` branch: `qualtran/surface_code/physical_cost_model.py` (class `PhysicalCostModel`), `data_block.py` (`DataBlock`, `SimpleDataBlock`, `CompactDataBlock`, `IntermediateDataBlock`, `FastDataBlock`), `qec_scheme.py` (`QECScheme`, `LogicalErrorModel`), `magic_state_factory.py` (`MagicStateFactory`), `ccz2t_factory.py` (`CCZ2TFactory`), `gidney_fowler_model.py` (`get_ccz2t_costs`, `get_ccz2t_costs_from_error_budget`, `get_ccz2t_costs_from_grid_search`), `beverland_et_al_model.py` (`minimum_time_steps`, `code_distance`, `t_states`), and `physical_parameters.py` (`PhysicalParameters`, whose `make_beverland_et_al` classmethod takes a `qubit_modality` of "superconducting", "ion", or "majorana").
Results
None found yet.
- Expressing and Analyzing Quantum Algorithms with Qualtran
The Lattice Surgery Compiler (latticesurgery-com): a two-stage Clifford+T-to-lattice-surgery pipeline
- A High Performance Compiler for Very Large Scale Surface Code Computations
George Watkins, Hoang Minh Nguyen, Keelan Watkins, Steven Pearce, Hoi-Kwan Lau, Alexandru Paler · 2023
About
This is the pipeline this method's own pseudocode names, built end to end and run at scale. The paper's abstract states the target directly: "We present the first high performance compiler for very large scale quantum error correction: it translates an arbitrary quantum circuit to surface code operations based on lattice surgery." It reuses Litinski's own time-structuring concept by name: a "slice" is "a temporally discretized partition of the computation (clock timesteps in Litinski [31]... terminology, for example)" — the same Litinski paper this method cites.
Methods
The pipeline has two stages joined by an intermediate representation the paper calls logical lattice instructions (LLI): "The two stages communicate through an intermediate representation we refer to as logical lattice instructions (LLI)... The LLI contains all the information about the logical operations happening on the lattice, but none about the physical locations of the patches." Stage one ("gate level processing") parses a restricted OpenQASM 2.0 circuit with "Qiskit, PyZX, a custom parser or a combination of the three", then reduces controlled gates to CNOTs and single-qubit rotations and approximates single-qubit rotations smaller than to Clifford+T gates. Separately, the small-angle rotations produced by decomposing controlled-rotation gates are approximated to Clifford+T by "the Gridsynth package" — the same Ross-Selinger implementation this capability's own `ross-selinger-synthesis` record documents — after which a `T` gate is applied as a Pauli rotation, matching this method's own theory. An alternative "Pauli rotation compression" mode instead reinterprets a whole Gridsynth output word as a sequence of Pauli-product rotations of varying angle. Stage two ("the slicer") combines LLI with a hand-written layout specification and produces a sequence of "slices", each "a snapshot of the... LLIs that are happening simultaneously on the lattice"; two slicer implementations exist, "one written in Python, geared towards the verification of small scale circuits... and a high performance one written in C++ for large scale circuits", the C++ one placing routing and distillation regions with an in-place implementation of Dijkstra's algorithm plus a cached-routes optimization. A separate resource-estimation module, built on "the Qentiana... software", computes the code distance a random circuit needs for a target success rate.
Data
The headline benchmark is a synthetic circuit, not experimental data: a 128-qubit Quantum Fourier Transform expressed over Clifford+T, chosen because "the fault-tolerant implementation of the QFT is challenging because of the presence of small angle controlled rotations", with Gridsynth's precision set to . The separate resource-estimation figure sweeps "random H, T and CNOT circuits" over circuit width and depth.
Code
Two repositories under `github.com/latticesurgery-com`: `lattice-surgery-compiler` (Python; QASM front end, the on-the-fly verified slicer, and a web API, default branch `dev`) and `liblsqecc` (C++; GitHub's own description reads "A C++ Library implementing some tools for the Lattice Surgery Compiler", default branch `main`) — this is the high-performance slicer the paper benchmarks. Verified directly against both repositories: `liblsqecc/include/lsqecc/` holds separate directories named `ls_instructions`, `pauli_rotations`, `layout`, `scheduler`, `pipelines`, `patches`, `dag` and `gates`, matching the paper's own division of the pipeline into gate-level processing, an LLI intermediate representation, and layout/routing. The Python repository's README credits the same Litinski paper this method cites, for "the idea of using Pauli rotations as an intermediate representation to get to abstract lattice surgery instructions and to remove stabilizer operations"; `liblsqecc`'s own README independently cites the same paper for its default layout generator, described in its `--layoutgenerator` option as: "compact (default): Uses Litinski's Game of Surface Code compact layout (https://arxiv.org/abs/1808.02892)".
Results
"We compiled within seconds 80 million logical surface code instructions, corresponding to a high precision Clifford+T implementation of the 128-qubit Quantum Fourier Transform (QFT)." More precisely: "at 128 qubits and after small angle rotation approximation, the QFT circuit has more than 80 Million LLI without gate to Pauli compression", and using the C++ slicer, "laying out the slices for the roughly 80 million LLI of the 128-qubit QFT takes less than 15 minutes on an ordinary laptop", with LLI generation itself taking "negligible time (under 10s on a laptop)". The authors call this "the largest-scale compilation of this kind" to their knowledge. The separate resource-estimation experiment (Figure 9) reports only a heatmap, with no tabulated values: "The vertical axis shows the code distance required to execute the desired circuit with a success rate of 99%. The colour scale represents the space-time volume of the computation, which relates closely with code distance."
- A High Performance Compiler for Very Large Scale Surface Code Computations
None found yet.
References
- A Game of Surface Codes: Large-Scale Quantum Computing with Lattice Surgery
Daniel Litinski · 2018
- Low overhead quantum computation using lattice surgery
Austin G. Fowler, Craig Gidney · 2018
Where the routes meet
11 problems nothing else needs — the places a reader arrives. Open a line to see what is recorded inside it, or click its name to go there.
13 lines have something recorded inside that you have not opened.
Of the routes that have been taken apart, 15 are built entirely from named slots, 15 hand off part of the work and finish the rest themselves, and 20 are one undivided act. None of the three is a defect; they are different things to reuse.
Every line on this figure, in words
The lines on this figure
Solve a nonlinear ODE dy/dt = F(y)
- Embed a nonlinear system into a linear one — opens into 6 · a way across — click it to open it here
- Solve a linear ODE du/dt = A(t)u + b(t) — opens into 9 · a way across — click it to open it here
- Choose a time discretization or propagator approximation → Quantum linear solve — open
- Choose a time discretization or propagator approximation — opens into 6 · a way across — click it to open it here
- Quantum linear solve — opens into 5 · a way across — click it to open it here
- Simulate Hamiltonian evolution → Estimate an observable — open
- Simulate Hamiltonian evolution — opens into 3 · a way across — click it to open it here
- Estimate an observable — opens into 4 · a way across — click it to open it here
Estimate an excited-state energy
- Variational quantum deflation — opens into 3 · a way across — click it to open it here
- Subspace-search variational eigensolver — opens into 3 · a way across — click it to open it here
- Quantum subspace expansion
- Quantum equation of motion
- Folded-spectrum variational eigensolver — opens into 3 · a way across — click it to open it here
- Penalty-constrained variational eigensolver — opens into 3 · a way across — click it to open it here
- Multistate contracted variational eigensolver — opens into 3 · a way across — click it to open it here
Every step you can open
1 of these have an object recorded in the middle; the rest open into the methods that fill them.
- Solve a nonlinear ODE dy/dt = F(y)
- Replace a spatial domain with a finite grid
- Discretize a PDE into one linear system
- Embed a nonlinear system into a linear one
- Solve a linear ODE du/dt = A(t)u + b(t)
- Recast a non-Hermitian generator as Hamiltonian evolution
- Choose a time discretization or propagator approximation
- Quantum linear solve
- Matrix function
- QSP phase factors
- Polynomial approximation
- Block-encode a matrix
- Prepare an input state
- Amplify a success branch
- Simulate Hamiltonian evolution
- Estimate an observable
- Compile a circuit to a specific device
- Satisfy the hardware connectivity constraint
- Approximate a continuous rotation in a discrete gate set
- Recover a noiseless expectation value by post-processing
- Build logical qubits at a target logical error rate
- Estimate a Hamiltonian's ground-state energy
- Choose a parameterised trial state
- Minimise the objective over the parameters
- Estimate an excited-state energy
- Measure what the machine can actually do
- Recover the period of a periodic function
- Estimate the eigenphase of a unitary
- Find the item a check accepts
- Walk a graph to the vertex you want
- Search a cost Hamiltonian for the assignment it minimises
What is on this map, counted
What is here, counted
147 nodes — 31 slots and 116 methods.
76 of the 147 link to a record in the Atlas, between them naming 89 records. The rest name papers and nothing else: this graph describes work the catalogue has not got yet, and the nodes with no record are the list of what a corpus pass has to go and read.
0 slots have no method recorded, and 32 methods have not been taken apart. Both are shown as what they are rather than left blank.
Every claim here rests on a source. This graph cites 140 papers; they and the 172 the Atlas cites alone are registered in one place, with what each reports and everywhere it is cited from. Papers