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
Truncated Chebyshev expansion
Expand the target in Chebyshev polynomials and truncate once the coefficients have fallen below the error budget. For the expansion is taken of the odd function ; for the Jacobi-Anger identity supplies Bessel coefficients that decay super-exponentially once the order passes about .
Open the full recordFills the slot: Polynomial approximation
For the construction with , accuracy is claimed only on \ — a gap of width around the origin, which is where the condition-number assumption enters — and requires and . The polynomial must be rescaled to satisfy before QSVT will accept it, and that rescaling is what makes amplification mandatory downstream. On attribution: this polynomial is Childs, Kothari and Somma's Lemmas 17-19; Gilyén, Su, Low and Wiebe reuse it as their Lemma 40 after adjustments, and the form quoted here is that restatement.
A target function (, sign, and so on); a domain such as ; an error ; the required parity.
Target function → Polynomial approximationregularise 1/x, then cut the series
is not expanded directly. For Hermitian with spectrum in assumption: is Hermitian and its eigenvalues are bounded away from by a known — a condition-number bound on the -sparse , the target is regularised as , which is -close to on that domain for any integer , and which on is exactly the Chebyshev sum — each bracketed weight "the probability of seeing more than heads on flipping fair coins". approximation: that sum is truncated at , an order polynomial, and a Chernoff bound on the discarded tail gives . The record's `conditions` quotes the later restatement in terms of a bare ; the form here is the original, in .
approximationassumption
Chebyshev coefficients of the polynomial and its degree , plus the bound on over before any rescaling.
None found yet.
given the target function and an error budget e
for 1/x also the condition number k > 1, with e in (0, 1/2)
choose the function actually expanded:
for 1/x : f(x) = (1 - (1 - x^2)^b) / x with b = ceil(k^2 log(k/e))
# odd, and accurate only on [-1,1] minus (-1/k, 1/k) --
# a gap of width 1/k around the origin, which is where
# the condition-number assumption enters
for e^{-ixt} : the Jacobi-Anger identity, whose Bessel coefficients
decay super-exponentially once the order passes about t
expand in Chebyshev polynomials and truncate:
keep the terms whose coefficients have not yet fallen below e
rescale so that |P(x)| <= 1 on the interval
# QSVT will not accept the polynomial otherwise, and this rescaling is
# what makes amplification mandatory downstream
return the truncated, rescaled polynomialDegree for the odd real polynomial, with on the interval before rescaling. For Hamiltonian simulation, Low and Chuang give the resulting query complexity as for a -sparse Hamiltonian ( here is the sparsity, not the polynomial degree above), matching lower bounds in all parameters.
None found yet.
None found yet.
pyqsp's Chebyshev-truncated target-polynomial generators
- Quantum algorithm for systems of linear equations with exponentially improved dependence on precision
Andrew M. Childs, Robin Kothari, Rolando D. Somma · 2015
- Optimal Hamiltonian Simulation by Quantum Signal Processing
Guang Hao Low, Isaac L. Chuang · 2016
About
pyqsp (github.com/ichuang/pyqsp, 140 stars, actively maintained) is a Python package for quantum signal processing and QSVT. Its `pyqsp/poly.py` module holds the `PolyGenerator` subclasses that build the classical target polynomial a QSP phase-finding routine consumes before any circuit is generated; three of those subclasses expand a target in Chebyshev polynomials, matching this method's own description of the first step, and two of the three (`PolyCosineTX`, `PolySineTX`) then cut that series at a computed truncation order, matching the second step — the third (`PolyOneOverX`) instead runs a closed-form regularization in its executed code path, with the truncated-sum form present only as dead code (see `methods`).
Methods
`PolyOneOverX.generate(kappa, epsilon)` sets and , its own comment citing this as "following analytic form of Lemma 18" of the Childs-Kothari-Somma paper (arXiv id given as 1511.02306v2); is computed and printed but the branch that actually runs does not cap the sum there — it builds directly, by repeated Chebyshev-basis multiplication by (written `Chebyshev([0.5, 0, -0.5])`) followed by a `chebdiv` against , so the executed polynomial has degree and is not truncated at all; a degree- truncated sum exists in the file only inside a triple-quoted, non-executed block. The result is then rescaled by , found by `scipy.optimize.minimize`, so that on the fitted interval. `PolyCosineTX.generate(tau, epsilon)` and `PolySineTX.generate(tau, epsilon)`, both citing Low and Chuang's paper by name and URL in their docstrings, instead solve from via `scipy.optimize.fsolve`, set the truncation order , and build the series from Bessel-weighted Chebyshev terms — cosine sums an initial term from `scipy.special.jv(0, tau)` plus from `scipy.special.jv(2k, tau)`, reaching degree ; sine sums from `scipy.special.jv(2k+1, tau)`, reaching degree — here the loop bound really is the computed truncation order, unlike `PolyOneOverX` above.
Data
None found yet.
Code
`pyqsp/poly.py` on the `master` branch of github.com/ichuang/pyqsp (HEAD pushed 2026-05-22): `class PolyOneOverX(PolyGenerator)` at line 194, `generate` at line 199, the executed construction at lines 238-252, rescaling at lines 254-263; `class PolyCosineTX(PolyGenerator)` at line 82 and `class PolySineTX(PolyGenerator)` at line 138, each with its Bessel-coefficient loop at lines 111-116 and 167-172 respectively.
Results
None found yet.
- Quantum algorithm for systems of linear equations with exponentially improved dependence on precision
NumPy's `numpy.polynomial.chebyshev` expansion and trimming primitives
About
`numpy.polynomial.chebyshev` is NumPy's general-purpose, non-quantum submodule for Chebyshev series. It supplies the two primitives this method composes — computing a target's Chebyshev expansion, then cutting the resulting series by coefficient size — as separate, independently documented public functions rather than one combined routine, and needs no quantum-specific package to run.
Methods
`Chebyshev.interpolate(func, deg, domain)` returns the degree-`deg` Chebyshev series that interpolates `func` at the Chebyshev points of the first kind on `domain`; its own docstring states the result "tends to a minmax approximation of `func`" when `func` is continuous on `domain`. `chebfit(x, y, deg)` is the least-squares alternative when only sampled data, not a callable target function, are available. Neither function truncates by itself: truncation is a separate call, `chebtrim(c, tol)` — a public module-level alias for `numpy.polynomial.polyutils.trimcoef` — which removes an already-computed series' trailing (highest-order) coefficients whose absolute value is at or below `tol`, i.e. it trims by coefficient magnitude and states no accuracy guarantee of its own.
Data
None found yet.
Code
`numpy/polynomial/chebyshev.py` on the `main` branch of github.com/numpy/numpy (read 2026-08-26): `chebfit` at line 1554, `class Chebyshev(ABCPolyBase)` at line 1970 with `interpolate` at line 2011, and the module-level alias `chebtrim = pu.trimcoef` at line 125 (listed in `__all__` at line 120, and in the module docstring's function index at line 77).
Results
None found yet.
None found yet.
References
- Quantum algorithm for systems of linear equations with exponentially improved dependence on precision
Andrew M. Childs, Robin Kothari, Rolando D. Somma · 2015
- Quantum singular value transformation and beyond: exponential improvements for quantum matrix arithmetics
András Gilyén, Yuan Su, Guang Hao Low, Nathan Wiebe · 2018
- Optimal Hamiltonian Simulation by Quantum Signal Processing
Guang Hao Low, Isaac L. Chuang · 2016
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 Polynomial approximation. 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
- Matrix function
- Polynomial approximation
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