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
Variable-time amplification
When the branches of the amplified routine stop at different times, amplify in nested stages so branches that finish early are not charged at the worst-case depth.
Open the full recordFills the slot: Amplify a success branch
Requires the amplified algorithm to decompose into stages carrying a per-branch stopping flag; a routine with a single uniform stopping time gains nothing from it. Its natural position is above a solver whose branches differ in cost — which is where the dependence of a linear-system solve actually lives — rather than above a bare preparation.
The preparation unitary and its inverse, a reflection about , and a reflection marking the good subspace — the Grover operator must be applicable at arbitrary powers. Individual variants additionally require a lower bound on , or a per-branch stopping flag.
Routine with a good branch → Reliable routineamplify stage by stage, skip the stopped
The routine is allowed to stop at different times on different branches, and the amplification follows it. At each stopping time the state decomposes as , flagging each branch stopped-bad, stopped-good, or still running. assumption: a branch that has stopped must not move again — and , so that "the part of the state where the computation stopped at time should not change after that". A nested sequence then amplifies each stage separately, approximation: only far enough to reach rather than , which is what keeps nested amplifications from compounding, giving and a total against for amplifying the routine as one block, where .
approximationassumption
A routine that produces the wanted branch with a stated failure probability, together with the query count and the maximum sequential depth consumed.
None found yet.
given the routine to be amplified, decomposed into stages that carry a
per-branch stopping flag; and A, its inverse, the reflection S_0
about |0> and the reflection S_chi marking the good subspace
# a routine with a single uniform stopping time gains nothing from this
amplify in nested stages, so that branches which finish early are not
charged at the worst-case depth
# how the stages nest is not stated on this record and is not invented here
return the wanted branch with a stated failure probability, together with
the query count and the maximum sequential depth consumed
# the depth is the line to read: it is the resource a coherence-limited
# device actually runs out of first
# its natural position is above a solver whose branches differ in cost --
# which is where the kappa dependence of a linear-system solve actually
# lives -- rather than above a bare preparation
# Ambainis generalizes amplitude amplification to the case when parts of the
# algorithm being amplified stop at different times, improving the Harrow
# et al. linear-systems running time from O(kappa^2 log N) to
# O(kappa log^3 kappa log N), kappa the condition number of the system
# Chakraborty, Gilyen and Jeffery build variable-time amplitude estimation
# directly on this techniqueAmbainis states his generalization of amplitude amplification "to the case when parts of the quantum algorithm that is being amplified stop at different times" improves the running time of the Harrow et al. linear-systems algorithm "from O(kappa^2 log N) to O(kappa log^3 kappa log N) where kappa is the condition number of the system of equations". Chakraborty, Gilyén and Jeffery build on it directly: they "develop a technique of variable-time amplitude estimation, based on Ambainis' variable-time amplitude amplification technique".
None found yet.
None found yet.
No standalone implementation of Ambainis's variable-time amplitude amplification was found, and the two general amplitude-amplification libraries checked for its natural home -- a variable-time quantum linear-system solver -- do not carry it either. Qualtran (quantumlib/Qualtran, commit 096a2d0, fetched 2026-08-26) has no amplitude-amplification bloq of any kind: a recursive listing of the full repository tree (1240 paths, not truncated) contains zero paths matching 'amplitude', 'amplify', 'grover', 'variable_time' or 'hhl'. pyLIQTR (isi-usc-edu/pyLIQTR, commit 0465e1d, fetched 2026-08-26) shows the same absence: its recursive tree (500 paths, not truncated) has no amplitude-amplification, Grover, or variable-time file; every 'amp' match is the unrelated substring in 'Examples' or 'example'. Two libraries that do implement a variable-time quantum linear-system solver implement a different one, not Ambainis's: Eclipse Qrisp shipped Childs-Kothari-Somma's algorithm in v0.8 as a standalone module (its own changelog: 'It uses LCU with qubitization and a Chebyshev polynomial approximation of 1/x'), which is a route to the exponentially-improved-precision result that does not go through variable-time amplitude amplification at all -- 'Ambainis' and 'variable time' appear nowhere in Qrisp's 1581-file tree. Classiq's HHL tutorial notebook cites Ambainis's paper only as background prose in a Technical Notes cell ('Ambainis introduced a generalization of amplitude amplification, which allows reducing the quadratic kappa dependence to linear'); the notebook's own circuit runs textbook QPE-based HHL with plain postselection over repeated measurement shots -- amplitude amplification, ordinary or variable-time, is not invoked anywhere in the notebook's code, only named in the Technical Notes cell as a possible, unimplemented speedup. Two more repositories name-check the technique but do not build it: tsotchke/quantum_geometric_tensor (450-star C library, commit 770994a) declares a `use_variable_time` boolean in its `amp_config_t` struct and lists 'Variable time amplitude amplification' among the header's stated Applications, but the flag is set to `false` in the one default-config line that mentions it and is never read or branched on anywhere else in the 888-line implementation file -- unlike the adjacent `fixed_point` flag, which does drive real code (`compute_fixed_point_angles`, `amp_run_fixed_point`). xpclove/qblas (commit 59ee43e) has a file named `q_svd_vartime.qs` whose header cites 'Variable-time amplitude estimation: Childs et al.', but `q_svd_vartime_core` is a plain loop of repeated phase-estimation calls at shrinking precision with no per-branch stopping flag and no nested amplification stage -- it does not implement the cited technique's mechanism, and the same repository's separate amplitude-amplification file cites a 'Zahournaded et al., "Interactive QAA" 2020' that could not be located anywhere else in a GitHub-wide code search, which is reason not to trust its other citations as accurate labels for what its code does. Variable-time amplitude amplification is a technique that lives inside other algorithms' proofs rather than as a library routine, and no artefact surfaced that actually runs it.
Every paper cited here has been read in full, and none reports a run.
None found yet.
References
- Variable time amplitude amplification and a faster quantum algorithm for solving systems of linear equations
Andris Ambainis · 2010
- The power of block-encoded matrix powers: improved regression techniques via faster Hamiltonian simulation
Shantanav Chakraborty, András Gilyén, Stacey Jeffery · 2018
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 Amplify a success branch. 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
- Solve a nonlinear ODE dy/dt = F(y)
- Quantum linear solve
- Amplify a success branch
Ways through: 2
Routes that skip it
Narrower kinds
Nothing recorded is a narrower kind of this.
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