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
Iterative phase estimation on one ancilla
Use one ancilla and measure it, over and over, least significant bit first. Each measured bit is fed back classically as a rotation angle on the next round, so the register the other route holds in superposition is replaced by a classical string that grows one bit at a time.
Open the full recordFills the slot: Estimate the eigenphase of a unitary
Dobsicek et al. state the size claim in the abstract — an iterative phase estimation "with a single ancillary qubit" — and make explicit that the qubit count does not grow with the precision: "The minimal system for implementing the iterative PEA is a two qubit system, where one qubit is a read-out ancilla, and the second qubit represents a physical system." The order of the rounds is part of the method rather than an implementation detail: "first less significant digits are evaluated and then the obtained information improves the quantum part of the search for more significant digits", carried by "an extra single qubit Z-rotation that is inserted into the circuit" whose angle is a function of the bits already measured — , with . Nothing quantum passes between rounds; the feedback is a classically computed angle.
A circuit for U that can be applied as controlled U^(2^j), a preparation routine for a state whose overlap with the target eigenvector is not negligible, the number of bits of the phase wanted, and the failure probability that may be tolerated.
Unitary whose eigenphase is wanted → Number with an error barfeed each measured bit back as a rotation
Starting from the ancilla state , built from , a single measurement gives . The iterative scheme runs on that one ancilla: Hadamard, controlled-, a feedback rotation with built from bits already measured (), then Hadamard and measurement of bit . assumption: deterministic extraction, , requires to have an exact binary expansion of at most bits. approximation: writing the true phase as with remainder , each bit is instead correct only with probability , giving overall success rather than certainty.
approximationassumption
An estimate of the eigenphase to the requested number of bits, with the failure probability it was obtained at, plus the two costs that actually differ between routes: how many ancillas were held at once, and how many sequential rounds were run.
None found yet.
given a circuit for controlled-U^(2^(k-1)), an EIGENSTATE |Psi> of U with
U|Psi> = e^(i*2*pi*phi)|Psi>, the number of bits m wanted of phi,
and ONE ancilla qubit that is reused every round -- not m of them
(Abstract; Iterative PEA, Fig. 1)
# the whole derivation below is set on a fixed eigenstate: the paper
# initialises "the lower line register to an eigenstate |Psi> of the
# operator U" and never treats any other input. It says NOTHING about
# feeding in a superposition, so nothing here should be read as a
# guarantee for one (Iterative PEA)
requires nothing quantum survives between rounds: the ancilla is measured
and reset each round, and what carries forward to round k is only the
classical bit string x_{k+1} .. x_m already measured. This is the
semiclassical-QFT substitution -- the paper calls the method the
"single ancilla QFT based PEA", citing the semiclassical QFT
(Introduction, Ref. 18)
# --- round k, run for k = m, m-1, ..., 1 -- LEAST significant bit first ----
# "Note that k is iterated backwards from m to 1." (Iterative PEA,
# body text, just before Fig. 2)
for k = m downto 1:
ancilla <- |0> # fresh each round; system reg keeps |Psi>
H on ancilla
apply controlled-U^(2^(k-1)), ancilla as control (Fig. 2)
# k = m, the FIRST round executed, applies controlled-U^(2^(m-1))
# and yields the LEAST significant bit (Iterative PEA)
omega_k = -2*pi * (0.0 x_{k+1} x_{k+2} ... x_m) (Fig. 2 caption)
# binary fraction built ONLY from bits already measured this run;
# omega_m = 0 by definition -- round m has nothing to feed back yet
Rz(omega_k) on ancilla (Fig. 2)
# this rotation IS the algorithm: "the information transfer is done
# with an extra single qubit Z-rotation that is inserted into the
# circuit", in place of the QFT register (Iterative PEA)
H on ancilla
measure ancilla -> x_k (Fig. 2)
# the paper builds the success probabilities CONDITIONALLY: "if
# phi_m was measured correctly, the probability to measure
# phi_{m-1} in the second iteration is cos^2(pi*delta/4)", and so
# on. So P_k below is conditional on every earlier (higher-k) bit
# being right; a wrong x_k enters omega for every round still to
# come (Iterative PEA, pre-Eq. 1)
return phi-tilde = 0.x_1 x_2 ... x_m, m bits total, one measurement each
# --- when the bits are exact -------------------------------------------
# assume phi = 0.phi_1 phi_2 ... phi_m 000... , i.e. an exact binary
# expansion of at most m bits. Then at round k the probability of
# outcome "0" is P0 = cos^2[pi*(0.phi_k 0 0 ...)], which is 1 for
# phi_k = 0 and 0 for phi_k = 1, so every bit is extracted
# DETERMINISTICALLY (Iterative PEA, before Eq. 1)
# --- when they are not: phi = phi-tilde + delta*2^-m, 0 <= delta < 1 ----
# P_k = cos^2(pi * 2^(k-m-1) * delta) # conditional, per round (Eq. 1)
# P(delta) = prod_{k=1..m} P_k = sin^2(pi*delta) / (2^(2*m) * sin^2(pi*2^-m*delta))
# -- "the same outcome probability as the textbook phase estimation,
# based on the QFT" (Eq. 1)
# P_k is smallest at k = m (the first round executed, least significant
# bit) and approaches 1 as k -> 1, which is why the error is dominated
# by the least significant bits (post-Eq. 1)
# P(delta) decreases monotonically in m; the bounds below are the
# m -> infinity limit, NOT finite-m values (post-Eq. 1)
# - best rounding only (error < 2^-(m+1)): lower bound P(1/2) = 4/pi^2
# - accepting BOTH phi-tilde and phi-tilde + 2^-m (accuracy 2^-m):
# success P(delta) + P(1-delta), lower bound 8/pi^2, hence error
# probability epsilon < 1 - 8/pi^2, independent of m (post-Eq. 1)
# --- optional: cut epsilon by repeating only the least significant bits --
# repeat the measurement of only the first few bits (large k) a limited
# number of times and take a simple majority vote; O(log^2(1/epsilon))
# extra measurements suffice for error below epsilon, independently of m.
# Repeating ALL m bits is called "unnecessarily expensive" for single
# systems such as superconducting qubits (Iterative PEA, closing para.)
# the alternative -- run m' = m + log(2 + 1/(2*epsilon)) rounds and keep the
# m most significant bits -- is available too, but the paper rejects it
# here because "implementing the U^(2^k) gate for large k is the
# algorithm's bottleneck in a realistically noisy environment"
# (Iterative PEA, after Eq. 1)
# --- cost note, not part of the construction above -----------------------
# m rounds, m measurements -- one per round. Against Kitaev's PEA, "each
# bit has to be measured only once, compared to log(m) times", and
# Kitaev's is "always probabilistic" where this one is deterministic
# for an exact m-bit phase (Introduction)
# depth is the price: "each round requires exponentially many applications
# of U, unless powers U^(2^k) are available by different means"
# (Introduction)
# what this method demonstrably saves is the m-1 extra ancillas of the
# textbook m-ancilla work register. Whether the TOTAL number of U
# applications is equal to the register version's is NOT a comparison
# this paper makes -- it is left unclaimed here rather than asserted
# NOT covered above, deliberately: the two-qubit superconducting benchmark
# realization (ZZ-gate, Fig. 3) and the gate-noise / dephasing robustness
# analysis (Eqs. 2-4, Figs. 4-5). Those are one hardware instance, not
# part of the general construction.Dobsicek et al. price the noiseless protocol exactly: one ancilla and rounds buy bits of the eigenphase of , i.e. accuracy , at one measurement per round -- measurements in all, where Kitaev's PEA measures each bit times. Extraction is deterministic when 's binary expansion is at most bits; otherwise the success probability never falls below , so the error probability satisfies independently of , and extra measurements push it below any , again independently of . The price is depth: round applies controlled-, exponentially many uses of unless that power is available by other means -- the paper's named bottleneck under realistic noise. On their own two-qubit superconducting benchmark it is free (one ZZ-gate plus three single-qubit gates), and simulated dephasing at (rate over qubit-qubit coupling) gives 5-8 bits in under measurements at .
None found yet.
None found yet.
Qiskit's `IterativePhaseEstimation` class
- Arbitrary accuracy iterative phase estimation algorithm as a two qubit benchmark
M. Dobsicek, G. Johansson, V. S. Shumeiko, G. Wendin · 2006
About
The class docstring names its source directly: "Run the Iterative quantum phase estimation (QPE) algorithm. Given a unitary circuit and a circuit preparing an eigenstate, return the phase of the eigenvalue as a number in [0,1) using the iterative phase estimation algorithm," citing "[1]: Dobsicek et al. (2006), Arbitrary accuracy iterative phase estimation algorithm as a two qubit benchmark" by name -- the same paper this record's own theory and cost fields are drawn from, not a different phase-estimation reference.
Methods
`IterativePhaseEstimation.__init__` takes `num_iterations` (the round count ) and a `BaseSamplerV2` sampler, raising `AlgorithmError` if no sampler is supplied. `_estimate_phase_iteratively` loops `for k in range(self._num_iterations, 0, -1)` -- down to 1 -- halving a running `omega_coef` before building each round's circuit, so the feedback angle is reconstructed bit by bit rather than passed in as a closed form. Each round's circuit (`construct_circuit`) allocates a fresh one-qubit `phase_register` (`QuantumRegister(1, name="a")`) and a fresh one-bit `ClassicalRegister`, applies a Hadamard to the phase register, composes `unitary.power(2 ** (k - 1)).control()` into the eigenstate register, applies `qc.p(omega, phase_register[0])`, a second Hadamard, then measures -- each round is built and submitted to the sampler as its own independent circuit, using only one ancilla qubit at a time rather than simultaneously. After each measurement `x`, `omega_coef = omega_coef + x / 2` before the next round's halving, which is the paper's classical-only feedback: no quantum state carries between rounds.
Data
No dataset. `unitary` and `state_preparation` are supplied by the caller as `QuantumCircuit` objects. The package's own test suite (`test/test_phase_estimator.py`, class `TestPhaseEstimation`) exercises four single- and two-qubit eigenproblems -- Pauli Z, Pauli X, an rotation, and TT -- prepared in known eigenstates with X, I, H, or no gates.
Code
`qiskit_algorithms/phase_estimators/ipe.py` in https://github.com/qiskit-community/qiskit-algorithms -- Python, Apache License 2.0, header "(C) Copyright IBM 2021, 2026". Class `IterativePhaseEstimation`, re-exported at the package's top level (`qiskit_algorithms/__init__.py`) alongside the register-based `PhaseEstimation` in the same `phase_estimators` subpackage. Distributed on PyPI as `qiskit-algorithms` 0.4.0 (uploaded 2025-08-29, seven releases total), Apache-2.0, requiring Python >= 3.9. The repository's README carries a standing warning: "Qiskit Algorithms is no longer officially supported by IBM. Like any other Apache 2 licensed code, you are free to use it or/and extend it, but please be aware that it is under your own risk." Read from `main`; this entry does not claim a release-tag diff.
Results
The package's own test suite runs `IterativePhaseEstimation(num_iterations=6, sampler=StatevectorSampler(seed=42))` -- Qiskit's noiseless statevector-simulator sampler -- against single- and two-qubit unitaries with known eigenstates, asserting the returned `.phase` equals the exact expected value (`assertEqual`, no tolerance): 0.5 for a Z unitary on an X-prepared eigenstate and 0.0 on the default all-zero state (`test_qpe_Z_sampler`); 0.0 and 0.5 for an X unitary on H- and H-then-Z-prepared eigenstates (`test_qpe_X_plus_minus_sampler`); 0.125 and 0.875 for an unitary (`test_qpe_RZ_sampler`); and 0.25 and 0.125 for a two-qubit TT unitary (`test_qpe_two_qubit_unitary`) -- all phases with an exact binary expansion of 6 bits or fewer, matching the paper's deterministic-extraction case rather than its probabilistic one.
- Arbitrary accuracy iterative phase estimation algorithm as a two qubit benchmark
Iterative phase estimation · Qiskit
From the repository — run, not written up from a paper · native
About
Estimates the eigenphase of a unitary using a single reused ancilla qubit instead of a full phase-estimation register.
Methods
None found yet.
Data
None found yet.
Code
Qiskit
Results
Construction checked against semiclassical IPE · 2-bit S-gate phase recovered exactly by hand
- Iterative phase estimation
Estimates the eigenphase of a unitary using a single reused ancilla qubit instead of a full phase-estimation register.
References
- Arbitrary accuracy iterative phase estimation algorithm as a two qubit benchmark
M. Dobsicek, G. Johansson, V. S. Shumeiko, G. Wendin · 2006
Where the routes meet
Every circle is drawn once. This step has no smaller object recorded inside it, so the strands between its two circles are the recorded ways of taking it — one strand per method.
2 recorded ways of doing Estimate the eigenphase of a unitary. Nothing smaller is recorded inside it, so there is no object in the middle to draw.
Everything on this figure that opens is open.
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
- Every line on this figure is one a recorded source takes.
Open the cardRead the full write-up
Where you are
Path
- Walk a graph to the vertex you want
- Estimate the eigenphase of a unitary
Ways through: 2
Routes that skip it
No recorded route avoids this step.
Narrower kinds
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