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
Fixed-point amplification
Replace the reflections of textbook amplification with tuned phase shifts, so the iteration converges on the target instead of rotating past it — which is what happens when the initial success amplitude is known only as a lower bound.
Open the full recordFills the slot: Amplify a success branch
Needs a reliable lower bound on the fraction of the initial state made up of target states, rather than itself. Grover's earlier construction achieves fixed-point convergence but, as Yoder, Low and Chuang put it, such algorithms "lose the very quadratic advantage that makes Grover's algorithm so appealing". Their own construction is described by them as "the first version of amplitude amplification that achieves fixed-point behavior without sacrificing the quantum speedup", and it carries an adjustable bound on the failure probability.
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 routineset each reflection phase from Chebyshev
Grover's fixed reflections are replaced by tuned generalized iterates — the paper constructs "for any odd integer ", with , so an even has no construction at all — with , whose phases are read off Chebyshev polynomials: with . assumption: the whole construction lives in "the two-dimensional subspace spanned by and ", so the generalized reflections built from , and must preserve it. The resulting overlap is exactly , so the failure probability never exceeds however large turns out to be. approximation: the exact threshold is approximated for large and small as , and that is what yields the clean sufficient query count .
approximationassumption
A routine that produces the wanted branch with a stated failure probability, together with the query count and the maximum sequential depth consumed.
- Prepare an input state
Map to a state whose amplitudes are proportional to a specified vector , to within . The cost is set by which description of you hold, not by the algorithm that consumes it.
This method asks the slot for "the state preparation and oracle ", and runs "a quantum circuit consisting of , and efficiently implementable -qubit gates". enters only through the reflection about the prepared state, , whose circuit (Fig. 2) conjugates a multiply-controlled phase on one reusable ancilla with then : forward once, inverse once, per iterate . The target-side reflection needs no — it is two calls to alone. So a length- sequence of iterates, which the paper prices at queries to , spends forward and inverse calls to . assumption: must be supplied as a circuit that can be run in reverse; a source that only emits cannot build .
assumption
given the preparation unitary A and its inverse, a reflection S_0 about |0>,
and a reflection S_chi marking the good subspace, so that
Q = - A S_0 A^{-1} S_chi can be applied at arbitrary powers;
and a reliable lower bound on the fraction lambda of the initial
state made up of target states
# a lower bound, not lambda itself -- that is all this variant of the layer
# asks for. A is the state-preparation step below this method.
choose the bound on the failure probability -- it is adjustable
replace the +/-1 reflections of textbook amplification with tuned phase
shifts, and run the resulting iteration for the number of oracle
queries fixed by the lower bound on lambda and the failure tolerance
# so the iteration converges on the target instead of rotating past it;
# rotating past it is what happens when the success amplitude is known only
# as a lower bound
return the wanted branch with the chosen failure probability, together with
the query count and the maximum sequential depth consumed
# neither the tuned phase shifts nor the query count as a function of
# lambda's lower bound and the failure tolerance is quoted on this record:
# the query count is in the paper's full text, and the record stops at the
# abstract on purpose
# the optimality in their title has exactly this shape: for a given number
# of oracle queries, the adjustable failure bound is guaranteed over "the
# broadest possible range" of lambda
# do not build this: Grover's earlier pi/3 construction also achieves
# fixed-point convergence, but such algorithms "lose the very quadratic
# advantage that makes Grover's algorithm so appealing" -- the construction
# above is described by its authors as the first to reach fixed-point
# behavior without sacrificing the quantum speedupThe abstract states no query-count formula; its cost claims are comparative. The construction keeps the quadratic quantum speedup that fixed-point predecessors gave up, and the optimality named in the title is of exactly this shape: for a given number of oracle queries, the adjustable failure-probability bound is guaranteed, as Yoder, Low and Chuang put it, over "the broadest possible range" of the target fraction . The explicit query count as a function of 's lower bound and the failure tolerance is in the paper's full text and is not quoted here.
None found yet.
None found yet.
PennyLane's `qml.AmplitudeAmplification` template, `fixed_point=True`
- Fixed-point quantum search with an optimal number of queries
Theodore J. Yoder, Guang Hao Low, Isaac L. Chuang · 2014
About
PennyLane's single `AmplitudeAmplification` operation implements textbook amplitude amplification by default, and its class docstring states "the implementation of the algorithm is based on" Brassard, Hoyer, Mosca and Tapp, then adds that "the template also unlocks advanced techniques such as fixed-point quantum search [arXiv:1409.3305] ... by reflecting on a subset of wires" -- the same Yoder-Low-Chuang paper this method's own citations name. The fixed-point branch is a mode of the one class rather than a separate one: the constructor takes a boolean `fixed_point` (default `False`) and a `work_wire` the docstring calls required "if fixed_point == True", which the code enforces by raising `WireError("work_wire must be specified if fixed_point == True.")` when it is missing.
Methods
`_get_fixed_point_angles(iters, p_min)` sets `delta = np.sqrt(1 - p_min)` and `gamma = np.cos(np.arccos(1 / delta, dtype=np.complex128) / iters, dtype=np.complex128) ** -1`, a complex-valued route to the same fractional-Chebyshev quantity this record's own hop calls : because , taking `arccos` of the complex `1/delta` and dividing by `iters` computes what `arccosh(1/delta)/iters` would compute directly. It returns `alphas = [np.real(2 * np.arctan(1 / (np.tan(2 * np.pi * j / iters) * np.sqrt(1 - gamma**2)))) for j in range(1, iters // 2 + 1)]` and `betas = [-alphas[-j] for j in range(1, iters // 2 + 1)]` -- the palindromic pairing this record states as . `compute_decomposition` then builds, for each of `iters // 2` generalized iterates, a Hadamard-controlled(`O`)-Hadamard-`PhaseShift(betas[it])`-Hadamard-controlled(`O`)-Hadamard sandwich on the caller-supplied `work_wire` -- an ancilla construction of the target-side reflection from calls to the oracle `O` alone -- followed by `Reflection(U, -alphas[it], reflection_wires=reflection_wires)` for the state-side reflection built from the preparation operator `U`. The `fixed_point=False` branch it falls back to instead applies `O` directly and `Reflection(U, np.pi, ...)`, the textbook reflections this record's `conditions` contrasts the construction against.
Data
None found yet.
Code
`pennylane/templates/subroutines/amplitude_amplification.py` in https://github.com/PennyLaneAI/pennylane -- Python, Apache License 2.0, header "Copyright 2018-2024 Xanadu Quantum Technologies Inc.", 294 lines on `main` at commit `45622b173b686ee0ea37915f4cc7bf4291af2e6f`, read 2026-08-27. The class is `AmplitudeAmplification(Operation)`, exported from `pennylane/templates/subroutines/__init__.py` as `from .amplitude_amplification import AmplitudeAmplification`. Constructor: `__init__(self, U, O, iters=1, fixed_point=False, work_wire=None, p_min=0.9, reflection_wires=None)`. Neither `__init__` nor `_get_fixed_point_angles` checks that `iters` is odd, though this record's own hop states the paper constructs the sequence "for any odd integer ... so an even has no construction at all" -- an even `iters` is accepted and silently halved by `iters // 2` rather than rejected.
Results
The class docstring's own worked example amplifies on 3 qubits, with `U` a Hadamard-built uniform superposition and `O = qp.FlipSign(2, wires=range(3))`, run as `qp.AmplitudeAmplification(U, O, iters=5, fixed_point=True, work_wire=3)` inside a `qp.qnode` on `qp.device("default.qubit")`, PennyLane's state-vector simulator. The printed output, `print(np.round(circuit(),3))`, is `[0.013 0.013 0.91 0.013 0.013 0.013 0.013 0.013]` -- probability 0.91 on the marked index 2.
- Fixed-point quantum search with an optimal number of queries
`ampamp`'s `FixedPointEngine`
- Fixed-point quantum search with an optimal number of queries
Theodore J. Yoder, Guang Hao Low, Isaac L. Chuang · 2014
- Amplitude Amplification Algorithms
Mithilesh Kumar, Yusuf Tahir, Varun Daiya · 2026
About
`ampamp` is a Python "research library for building quantum amplification circuits, inspecting their mathematical behavior, profiling compilation cost, and validating ideal/noisy backend behavior from one compact API" (its README), maintained by the GitHub org `QuantumAmplification` under the MIT licence and distributed on PyPI. It is organised one engine per amplification variant rather than one generic amplifier: the README's own capability table lists "Fixed-point AA" against `FixedPointEngine` in a row separate from "Variable-time AA" against `VTAAEngine`, and its section headers likewise separate "### Fixed-point amplification" from a later "### Variable-time branch analysis" -- this record's artefact is the former module only. A companion survey article by the same three authors, "Amplitude Amplification Algorithms" (Zenodo, 2026), states in its abstract that it follows "the progression through oblivious, fixed-point, and distributed amplification schemes" and lists "Fixed-Point Amplification" among its own keywords.
Methods
`FixedPointEngine.__init__(self, L, delta)` requires `L` odd -- it raises `ValueError("L must be an odd integer for FPAA.")` when `L % 2 == 0` -- and sets `self.num_grover_iterates = (L - 1) // 2`, this record's own . `_compute_gamma` returns `1.0 / np.cosh(np.arccosh(1.0 / self.delta) / self.L)`, documented as computing "gamma through gamma^{-1} = T_{1/L}(1 / delta)". `_generate_phase_pairs` then sets, for `j` from 1 to `num_grover_iterates`, `alphas[j-1] = 2.0 * np.arctan2(1.0, np.tan(2.0 * np.pi * j / self.L) * sq_term)` with `sq_term = sqrt(1 - gamma**2)`, and `betas = -alphas[::-1]` -- this record's . `success_probability(lambda_val)` evaluates `1 - delta**2 * T_L((1/gamma) * sqrt(1-lambda_val))**2` through its own `_chebyshev_polynomial`, this record's closed form . `build_fixed_point_circuit(num_qubits, marked_indices)` synthesizes the circuit directly in Qiskit: it Hadamards every qubit, then for each `(a_j, b_j)` pair applies a `DiagonalGate` placing phase on the marked computational-basis indices (the target-side reflection, built from the oracle alone), Hadamards, a `DiagonalGate` placing phase on index 0 (the reflection about the Hadamard-prepared source state), and Hadamards again to close the sandwich.
Data
None found yet.
Code
`src/ampamp/fixed_point.py` in https://github.com/QuantumAmplification/ampamp -- Python, MIT licence, 176 lines on `main` at commit `a482ee2eea80a53db02ff33d6bbace7f529fcee2`, read 2026-08-27. Distributed on PyPI as `ampamp`; `pyproject.toml` at that commit records `version = "0.1.4"`. The README's own usage example imports it at top level, `from ampamp import FixedPointEngine`, and the class depends on `from qiskit import QuantumCircuit` plus, inside `build_fixed_point_circuit`, `from qiskit.circuit.library import DiagonalGate as Diagonal` with a fallback `from qiskit.circuit.library import Diagonal` for older Qiskit releases.
Results
The library's own test suite checks the synthesized circuit against the closed form on a state-vector simulator. `tests/test_core_engines.py`'s `test_fixed_point_engine_generates_phases_and_circuit` builds `FixedPointEngine(L=5, delta=0.1)` -- 2 generalized iterates -- and asserts `engine.success_probability(engine.lambda_min) == pytest.approx(1.0 - engine.delta**2)`, and, for a synthesized one-qubit circuit with `marked_indices=[1]`, that `Statevector.from_instruction(one_qubit_circuit).probabilities()[1] == pytest.approx(engine.success_probability(0.5))` -- Qiskit's `Statevector` state-vector simulator, not hardware. A separate parametrized test, `test_fixed_point_engine_rejects_invalid_parameters`, checks that invalid `(L, delta)` pairs raise `ValueError` rather than silently building a circuit.
- Fixed-point quantum search with an optimal number of queries
pyqsp's `FPSearch` phase generator (`fpsearch`)
- Fixed-point quantum search with an optimal number of queries
Theodore J. Yoder, Guang Hao Low, Isaac L. Chuang · 2014
About
pyqsp is a quantum-signal-processing phase-finding package maintained on GitHub under the username `ichuang`; its own `CITATION` file's primary reference, "Grand Unification of Quantum Algorithms", is coauthored by Isaac L. Chuang, the third author of the fixed-point paper this method records. `pyqsp/phases.py`'s module docstring describes the file as "Known QSP phases for specific responses", a library of precomputed sequences rather than a general numerical solver, and one entry in it, the `FPSearch` class, is documented as returning "phases for fixed point quantum search, following https://arxiv.org/abs/1409.3305" -- this method's own citation.
Methods
`FPSearch.generate(self, d, delta=None, gamma=None, return_alpha=False)` sets `L = 2 * d + 1`, this record's odd length with `d` its , and, when `gamma` is not supplied, computes it from `delta` (default 0.1) as `gamma = 1 / np.cosh((1 / L) * np.arccosh(1 / delta))` -- the same quantity this record names. With `sg = np.sqrt(1 - gamma**2)`, it sets `avec = 2 * np.arctan2(1, (np.tan(2 * np.pi * kvec / L) * sg))` for `kvec = np.arange(1, d + 1)` -- this record's , since `arctan2(1, x)` equals for -- and `bvec = - avec[::-1]`, the same palindromic pairing. Unless `return_alpha=True` is passed, `generate` does not return `avec`/`bvec` directly: it repacks them into a length-`2*d` array `phivec`, via `phivec[2*k] = -avec[d-k-1] / 2` and `phivec[2*k+1] = bvec[d-k-1] / 2`, because pyqsp's own output convention is a single QSP phase sequence in what its README calls the " convention" rather than the two per-iterate reflection angles this record lists separately.
Data
None found yet.
Code
`pyqsp/phases.py` in https://github.com/ichuang/pyqsp -- Python, 109 lines at commit `4436bb63d4aea0f636015ace26bb5453c77b999c`, read 2026-08-27; distributed on PyPI as `pyqsp`, version 0.2.0. `FPSearch(PhaseGenerator)` is registered under the string key `'fpsearch'` in the module-level dict `phase_generators`. `pyqsp/main.py` reaches it from the command line: its `elif args.cmd == "fpsearch":` branch instantiates `pg = pyqsp.phases.FPSearch()` and calls `pg.generate(*args.seqargs)`, and the tool's own help text gives a worked invocation, `pyqsp --plot-npts=4000 --plot-positive-only --plot-magnitude --plot --seqargs=1000,1.0e-20 --seqname fpsearch angles` -- , .
Results
The package's own continuous-integration test suite exercises this path end to end rather than only unit-testing the class: `pyqsp/test/test_main.py` includes `"--plot-positive-only --plot-magnitude --plot-npts=400 --seqargs=10,0.01 fpsearch"` in its list of `test_cmds`, run through `pyqsp.main` -- , -- and plotted as a magnitude response. The test asserts only that the command completes; it makes no numeric assertion on the phases `generate` returns.
- Fixed-point quantum search with an optimal number of queries
None found yet.
References
- Fixed-point quantum search with an optimal number of queries
Theodore J. Yoder, Guang Hao Low, Isaac L. Chuang · 2014
- A different kind of quantum search
Lov K. Grover · 2005
- Quantum Amplitude Amplification and Estimation
Gilles Brassard, Peter Hoyer, Michele Mosca, Alain Tapp · 2000
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