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
Chebyshev series by linear combination of unitaries
Write the target function as a Chebyshev series, then implement that series as a linear combination of walk-operator powers using a PREPARE/SELECT pair on an ancilla register, and post-select. No phase factors are computed — the polynomial enters through the coefficients of the combination instead.
Open the full recordFills the slot: Matrix functionExpand it here — a map of just this
Needs an explicit decomposition of the target into implementable unitaries with a known coefficient vector, and the ability to prepare a state from those coefficients. Childs, Kothari and Somma apply this route to a sparse through its associated quantum walk, so it runs from the entry oracle without Hamiltonian simulation as an intermediate. It costs more ancillas than the QSVT route, which carries the polynomial in one qubit's worth of phase shifts.
A block-encoding of together with its subnormalisation ; a target function on ; an error budget .
Block-encoding → Block-encodingBlock-encode a matrix
Childs, Kothari and Somma block-encode for a -sparse Hermitian of dimension with , directly from oracle access to the entries of and with no Hamiltonian simulation in between. For each row they define, on , the state , and the isometry then satisfies and for the swap : carries exactly, with no subnormalization past the already folded in. assumption: the oracle is taken to return exactly nonzero entries for a given row, which the paper calls without loss of generality since zero entries can be treated as nonzero to make up the difference; and a fixed branch of the square root is used where is complex. The walk that this method's own step raises to powers costs queries to that oracle.
assumption
Block-encoding → Block-encoding of f(A)combine the Chebyshev terms, post-select
The walk operator is what makes the Chebyshev series implementable: within the invariant subspace of an eigenvector of , Childs, Kothari and Somma's Lemma 16 gives the diagonal entry , so applying the isometry , then , then implements in queries, where is annihilated by the all-zeros projector. The series is then summed by their Lemma 6: a preparation and a selection give . (The paper writes that operator as as well; it is not the walk above, and the collision is the source's, not a redefinition here.) assumption: The answer is the all-zeros branch and nothing else: measuring the first qubits and seeing leaves the second register proportional to , which happens with probability . The -norm of the coefficients, not the degree, is what that probability is paid in. No phase factors are computed anywhere in this: the polynomial enters through the coefficients loaded by , which is the whole difference from the QSVT route across the same two states.
assumption
A circuit implementing a block-encoding of to error , together with the query count in and .
- Polynomial approximation
Given a target function, a domain and an error , return a polynomial of definite parity, bounded on , that is -close to the target on that domain, with an explicit degree.
This method asks here for a Chebyshev series for , accurate to on , where is the condition number of , its sparsity and the block-encoded matrix. Childs, Kothari and Somma reach it in three steps: Lemma 17 replaces by , which is -close to on for any integer ; is then exactly representable in Chebyshev polynomials of order at most ; and Lemma 19 truncates that representation at , giving a still -close to , which the proof of Theorem 4 carries forward as . approximation: the degree handed back is , and fixes the largest walk power the selection ranges over; the coefficient -norm paid for in post-selection success obeys , which the paper gets from a term of its expansion being a probability and hence at most .
approximation
given the target function, and a sparse A through its associated quantum
walk -- the route Childs, Kothari and Somma take, which runs from
the entry oracle without Hamiltonian simulation as an intermediate
require an explicit decomposition of the target into implementable
unitaries with a known coefficient vector
require the ability to prepare a state from those coefficients
write the target function as a Chebyshev series
# no phase factors are computed: the qsp-phase-factors step is bypassed,
# and the polynomial enters through the coefficients of the combination
implement the series as a linear combination of walk-operator powers,
using a PREPARE/SELECT pair on an ancilla register
post-select
# this route costs more ancillas than the QSVT route, which carries the
# polynomial in one qubit's worth of phase shifts
# cost, as Childs, Kothari and Somma state it in their abstract's own
# comparative terms: for a sparse, well-conditioned A the
# Harrow-Hassidim-Lloyd algorithm runs in time poly(log N, 1/epsilon), and
# theirs improves this to a running time polynomial in log(1/epsilon) --
# exponentially improving the dependence on precision "while keeping
# essentially the same dependence on other parameters". That claim is for
# the complete linear-systems algorithm this transform powers, not a
# standalone cost for the LCU step. The abstract states no closed-form
# bound; the exact statements, including the condition-number dependence,
# are in the paper's full text and are not quoted here.Childs, Kothari and Somma state the improvement in their abstract's own comparative terms: for a sparse, well-conditioned , the Harrow–Hassidim–Lloyd algorithm runs in time , and theirs improves this to a running time polynomial in — exponentially improving the dependence on precision "while keeping essentially the same dependence on other parameters". The claim is for the complete linear-systems algorithm this transform powers, not a standalone cost for the LCU step. The abstract states no closed-form bound; the exact statements, including the condition-number dependence, are in the paper's full text and are not quoted here.
None found yet.
None found yet.
Qualtran's ChebyshevPolynomial and LinearCombination block-encoding bloqs
- Quantum computing enhanced computational catalysis
Vera von Burg, Guang Hao Low, Thomas Häner, Damian S. Steiger, Markus Reiher, Martin Roetteler, Matthias Troyer · 2020
- Explicit Quantum Circuits for Block Encodings of Certain Sparse Matrices
Daan Camps, Lin Lin, Roel Van Beeumen, Chao Yang · 2022
About
Google Quantum AI's Qualtran — a Python library the repository describes as "for expressing and analyzing Fault Tolerant Quantum algorithms" — ships a `ChebyshevPolynomial` block-encoding bloq whose docstring states this record's own construction: given a block encoding of a Hermitian with , "this bloq constructs with normalization factor 1." The reference it cites is not Childs, Kothari and Somma: "[Quantum computing enhanced computational catalysis](https://arxiv.org/abs/2007.14460). von Burg et al. 2007. Page 45; Theorem 1" — a paper by von Burg, Low, Häner, Steiger, Reiher, Roetteler and Troyer that arXiv's own abstract page dates 2020-07-28, not the "2007" the docstring prints, which reads the identifier's year digits as a publication year. For the case this record's own is — a block encoding whose normalization — the same module documents a second class, `ScaledChebyshevPolynomial`: "Unlike `ChebyshevPolynomial`, this bloq accepts with and constructs which is not a multiple of in general," citing a different paper again: Camps, Lin, Van Beeumen and Yang, "Explicit Quantum Circuits for Block Encodings of Certain Sparse Matrices" (arXiv:2203.10236, Section 5.1). Neither class names Childs, Kothari or Somma, and neither approximates or solves a linear system; what they implement is the walk-operator-power mechanism this record's own hops describe abstractly — repeated applications of a block encoding and its adjoint, interleaved with a reflection, producing a Chebyshev polynomial of the encoded matrix on the block's signal subspace, the same object Childs, Kothari and Somma's Lemma 16 reaches via — and then, where more than one such polynomial must be combined, the PREPARE/SELECT linear-combination-of-unitaries machinery this record's own `summary` names.
Methods
`ChebyshevPolynomial(block_encoding, order)` builds by alternating the given block encoding and its adjoint around a reflection, not by any linear combination: `build_composite_bloq` loops `order // 2` times, and each pass applies `reflection_bloq` (`ReflectionUsingPrepare.reflection_around_zero(bitsizes=(self.ancilla_bitsize,), global_phase=-1)`) to the ancilla, then `block_encoding`, then the reflection again, then `block_encoding.adjoint()`; an odd order appends one more reflection-then-`block_encoding` at the end. `build_call_graph` counts `n // 2 + n % 2` calls to `block_encoding`, `n // 2` to its adjoint, and `n - n % 2` reflections. The constructor raises unless `self.block_encoding.signal_state.prepare` is `PrepareIdentity`: "Cannot take Chebyshev polynomial of block encodings with non-zero signal state." `ScaledChebyshevPolynomial`, needed whenever , does not reuse that alternation directly for the rescaled case: its `linear_combination` property expands the target in the Chebyshev basis of — `coeffs = np.polynomial.chebyshev.cheb2poly([0] * self.order + [1])`, each term then rescaled by a power of `self.block_encoding.alpha`, and converted back with `cheb_coeffs = np.polynomial.chebyshev.poly2cheb(coeffs)` — and hands those coefficients, together with the lower-order bloqs `ChebyshevPolynomial(self.block_encoding, i) for i in range(self.order + 1)`, to `LinearCombination`. That is where the PREPARE/SELECT pair lives. `LinearCombination`'s own docstring states the object it builds in this record's own language: "Builds the block encoding given block encodings and coefficients ... Under the hood, this bloq uses LCU Prepare and Select oracles to build the block encoding." Its `prepare` property returns a `BlackBoxPrepare` wrapping `StatePreparationAliasSampling`, fed by `qualtran.linalg.lcu_util.preprocess_probabilities_for_reversible_sampling` on the rescaled ; its `select` property wraps `ApplyLthBloq` over the sign-corrected block encodings in a `BlackBoxSelect`; and `build_composite_bloq` applies `self.prepare`, then `self.select`, then `self.prepare.adjoint()` on a shared ancilla — PREPARE, SELECT, PREPARE-dagger, with the target term occupying the branch this record's own hop calls the post-selected outcome. The docstring gives the same bookkeeping this record's `conditions` and hop notes state abstractly: normalization , ancilla count , and precision . What neither class does is approximate a target function such as by a truncated Chebyshev series in the first place — the coefficients `ScaledChebyshevPolynomial` computes come from a Chebyshev-of-Chebyshev rescaling identity, a fixed classical calculation, not from this record's own `polynomial-approximation` step; a caller wanting Childs, Kothari and Somma's series would have to supply that truncated coefficient vector separately and combine the resulting `ChebyshevPolynomial` bloqs with `LinearCombination` directly, the way `ScaledChebyshevPolynomial` already demonstrates doing for a different target.
Data
No dataset and no molecule. The bloq examples are single-qubit toys: `_chebyshev_poly_even` combines an `XGate` and a `Hadamard` unitary with equal weight (`LinearCombination((Unitary(XGate()), Unitary(Hadamard())), (0.5, 0.5), lambd_bits=1)`) and raises the result to order 4; `_chebyshev_poly_odd` takes a bare `Hadamard` to order 5. `_scaled_chebyshev_poly_even` and `_scaled_chebyshev_poly_odd` are the same two constructions with (the odd case built with `evolve(Unitary(Hadamard()), alpha=3.14)`). The correctness tests go further: `test_chebyshev_matrix` and the slow-marked `test_chebyshev_matrix_random` block-encode an explicit matrix — first a fixed combination `(XGate + 3*Hadamard)/4`, then twenty Hermitian matrices drawn from `qualtran.linalg.matrix.random_hermitian_matrix` with `np.random.RandomState(1234)` — through a purpose-built `TestBlockEncoding.from_matrix`, which pads a matrix into a unitary via `MatrixGate`.
Code
`qualtran/bloqs/block_encoding/chebyshev_polynomial.py` (classes `ChebyshevPolynomial`, `ScaledChebyshevPolynomial`) and `qualtran/bloqs/block_encoding/linear_combination.py` (class `LinearCombination`) in https://github.com/quantumlib/Qualtran — Python, Apache-2.0 (the repository's licence field and the file headers, "Copyright 2023 Google LLC" and "Copyright 2024 Google LLC" respectively, agree). Distributed on PyPI as `qualtran`; version 0.7.0 was the release current on 2026-08-26, when this file was read from the `main` branch. The earliest commit the GitHub API returns for `chebyshev_polynomial.py` at its present path is pull request 997, "Move `block_encoding.py` into `block_encoding/` subpackage and split into multiple files" (2024-05-28), whose message describes moving and splitting a pre-existing `block_encoding.py` rather than creating the class; nothing checked here establishes when `ChebyshevPolynomial` was first written. Tests: `qualtran/bloqs/block_encoding/chebyshev_polynomial_test.py`.
Results
The correctness check is tensor contraction against a classical NumPy evaluation of the same Chebyshev polynomial, not execution on hardware or a named circuit simulator. Helper functions `t4(x) = 8x^4 - 8x^2 + I` and `t5(x) = 16x^5 - 20x^3 + 5x` evaluate the matrix polynomial directly; `gate_test(bloq)` builds the bloq between fixed ancilla and resource states, calls `bloq.tensor_contract()`, and rescales by `bloq.alpha`. `test_chebyshev_poly_even_tensors` (marked `@pytest.mark.slow`) checks the order-4 combination of `XGate` and `Hadamard` against `t4` at `atol=1e-14`; `test_chebyshev_poly_odd_tensors` checks order-5 `Hadamard` against `t5` at the same tolerance; `test_chebyshev_zero_order` and `test_chebyshev_first_order` check the order-0 and order-1 edge cases return the identity and the base unitary exactly (`atol=1e-14`). `test_chebyshev_matrix` block-encodes an explicit matrix through `TestBlockEncoding.from_matrix` and checks `t4` at `atol=2e-15`; the slow-marked `test_chebyshev_matrix_random` repeats this over 20 random Hermitian matrices at the looser `atol=3e-8`. For the rescaled class, `test_scaled_chebyshev_even_tensors` checks `t4` applied to `(XGate + Hadamard)` — i.e. folded into the target rather than divided out — at the much looser `atol=0.06`, while the odd-order `test_scaled_chebyshev_odd_tensors` reaches `atol=1e-14` again. `test_scaled_chebyshev_even_cost` only calls `get_cost_value(bloq, QECGatesCost())` and asserts nothing about the returned value. Of the eight tensor- or matrix-value correctness tests in this file, four are marked `@pytest.mark.slow` and need not run in a default `pytest` invocation — `test_chebyshev_poly_even_tensors`, `test_chebyshev_matrix_random`, `test_scaled_chebyshev_even_tensors` and `test_scaled_chebyshev_odd_tensors` — while `test_chebyshev_poly_odd_tensors`, `test_chebyshev_zero_order`, `test_chebyshev_first_order` and `test_chebyshev_matrix` are not; the marking tracks neither polynomial order parity nor whether the construction routes through `LinearCombination` (`test_chebyshev_matrix` is order-4 and unmarked, while `test_scaled_chebyshev_odd_tensors` is order-5, LCU-combined, and marked). The module's own `bloq_autotester` checks (`test_chebyshev_poly_even`, `test_chebyshev_poly_odd`, `test_scaled_chebyshev_poly_even`, `test_scaled_chebyshev_poly_odd`) are unmarked but check construction and resource-counting machinery, not the encoded value.
- Quantum computing enhanced computational catalysis
Linear combination of unitaries · Qiskit
From the repository — run, not written up from a paper · native
About
A block-encoding primitive that turns a weighted sum of unitary operations into one larger unitary circuit.
Methods
None found yet.
Data
None found yet.
Code
Qiskit
Results
Two-term PREPARE–SELECT–unprepare circuit checked on a one-qubit target · success branch and coefficient normalization recorded
- Linear combination of unitaries
A block-encoding primitive that turns a weighted sum of unitary operations into one larger unitary circuit.
References
- Hamiltonian Simulation Using Linear Combinations of Unitary Operations
Andrew M. Childs, Nathan Wiebe · 2012
- Quantum algorithm for systems of linear equations with exponentially improved dependence on precision
Andrew M. Childs, Robin Kothari, Rolando D. Somma · 2015
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 Matrix function. Nothing smaller is recorded inside it, so there is no object in the middle to draw.
2 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
- 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
- Matrix function
Ways through: 2
Routes that skip it
No recorded route avoids this step.
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