Open-source SDK for neutral atom quantum computing

← All posts

Introducing PPVM: A Step Toward a Quantum Digital Twin

Quantum computers are advancing toward utility scale, and fault-tolerant quantum computation (FTQC) is the enabler that will get them there. At that scale, we will need to operate and understand quantum systems of unprecedented complexity. An FTQC system operating with more than 10,000 physical qubits will require highly dynamic operations, some of them asynchronous. Our computational tools must evolve alongside the hardware.

We recently announced our roadmap for a Libra-class machine with 256 logical qubits and more than 10,000 physical qubits. A machine of this scale introduces an entirely new level of complexity, not only in its quantum hardware, but also in its control systems, underlying physics, and computer architecture.

QuEra quantum roadmap

The path to fault-tolerant quantum computing

  1. Launched 2022AquilaNISQ system
  2. Launched 2025GeminiNISQ system & QEC testbed
  3. Launching 2028LibraMegaquop fault tolerant
  4. Coming 2028/29Next GenGigaquop fault tolerant
A simplified view of QuEra’s roadmap, highlighting fault-tolerant milestones.Explore the full, current roadmap

Historically, much of the work on emulating quantum computers has focused on a fundamental question: how many qubits can a classical computer simulate? Tensor-network simulators have, for example, challenged the classical-runtime claims around Google’s Sycamore experiment and surpassed results from IBM’s Eagle kicked-Ising experiment; LOWESA also used Pauli propagation to reproduce the IBM experiment.[14] This challenge has driven important progress in areas such as decision diagrams, ZX calculus, and stabilizer-rank decomposition.[57] For many large-scale circuits, practical simulation has therefore required either approximation or restriction to Clifford operations, supported by specialized tools such as Stim, the de facto tableau simulator for Clifford circuits.[8] More recently, simulators such as SOFT, Tsim, and Clifft have targeted the near-Clifford regime, incorporating the non-Clifford operations needed to study protocols such as magic-state cultivation.[911]

These methods are valuable for studying quantum circuits and validating claims of quantum advantage. But reproducing an idealized quantum circuit is not enough to understand how a large quantum computer behaves as a complete system. At fault-tolerant scale, quantum operations, noise, atom loss, error correction, and classical control logic all interact.

An emulator is more than its circuit

Missing system layerTraditional simulator
ControllerCPU · runtime orchestrationCoordinates classical decisions and hardware commands.
OpticsAOD · SLM · lasersRepresents the physical control interface.
QuantumCircuit simulatorModels quantum operations, noise, and measurements.
DecoderDEM · manager · decoding algorithmBuilds the error model, manages decoding, and returns likely corrections.
Traditional simulators stop at the quantum module. A complete machine emulator integrates classical control, optics, quantum execution, DEM management, and a decoder.

We therefore need something broader than a circuit simulator: a digital twin that can reproduce the behavior of the entire system, including its noise, controllers, optics, and classical runtime. Such a model would help us address the practical questions that emerge at this scale: How does active decoding behave on real hardware? Will a decoder remain effective in the presence of atom loss, or can atom loss information even be harnessed to decode better? How does atom loss affect a logical trotter circuit? Our goal is to build this software counterpart of a quantum computer so that we can better understand, develop, and ultimately interact with increasingly complex quantum systems.

Today, we are introducing the first public component of that effort: the Pauli Propagation Virtual Machine (PPVM).

Starting with PPVM

PPVM is a circuit-level virtual machine designed to emulate noisy quantum devices together with the classical controllers that operate them. This combination matters: a large-scale quantum computer is not simply a collection of qubits executing a fixed circuit. Its behavior also depends on classical decisions made during execution: responding to measurements, tracking atom loss, running error-correction procedures, and determining what should happen next. Under the hood, PPVM is not a single simulation method but four: stabilizer tableaus, generalized tableaus, mixtures of tableaus, and Pauli propagation.

Like its name suggests, PPVM is a virtual machine in the traditional sense: it maintains a state that can be manipulated by a set of instructions. What makes it different from a classical virtual machine is that part of its state is quantum, represented by “Pauli” operators (as Pauli sum, generalized tableau or mixture of tableau). It supports familiar classical concepts such as variables, call frames, and control flow alongside quantum operations.

Hardware-realistic simulation in PPVM

A virtual quantum machine backed by 4 state representations

Exact
tableaulost
d₁d₂d₃d₄d₅s₁s₂s₃s₄s₅bool
q₀Pauli ZidentityidentityidentityidentityPauli XPauli ZPauli ZPauli ZPauli Zfalse
q₁identityPauli XidentityidentityidentityPauli XPauli Zidentityidentityidentityfalse
q₂identityidentityPauli XidentityidentityPauli XidentityPauli Zidentityidentityfalse
q₃identityidentityidentityPauli XidentityPauli XidentityidentityPauli Zidentityfalse
q₄identityidentityidentityidentityPauli XPauli XidentityidentityidentityPauli Ztrue
The five-qubit GHZ tableau: one column per generator, one row per qubit, sign bits not drawn. Atom loss adds exactly the last column, here with gone.
Exact for
Clifford circuits
Cost grows with
Qubits — memory
Reads out
A bitstring per shot
Atom loss
One bool per qubit

All four run as step-wise algorithms behind the same bytecode, so the machine state stays inspectable at every instruction, and all four carry the noise channels below, each in the way its own representation allows.

Faithful emulation also means faithful noise. PPVM models the error processes that are dominant in neutral-atom hardware, starting with atom loss: independent loss during single-qubit gates, correlated loss when two atoms share an entangling gate, the altered dynamics an atom sees when its partner is already gone, and the reset that returns a leaked atom to the computational subspace.

Hardware noise in PPVM

Noise channels PPVM models

Select a channel to see how it is modeled. Kraus operators for the loss channels are extracted from full simulations of the underlying atom dynamics.
ChannelActs onParameters
Single-qubit gates
Two-qubit gates
Two-qubit gates
Reset operations
Measurement
One- and two-qubit gates
Anywhere in a circuit
Anywhere in a circuit

That makes it possible to build and explore far more realistic execution scenarios. For example, we have integrated PPVM with deq, Microsoft’s recent QEC decoding system.[12] In this setup, PPVM runs alongside a control-flow scheduler and real-time decoder, enabling system-level simulation of adaptive, non-Clifford quantum programs.

A magic-state distillation protocol running as a live PPVM emulation. Encoded states feed a Distill round, and the MeasureZ outcome drives a classical branch that repeats the whole block until it succeeds; the quantum operations and the control flow deciding whether to retry are executing in the same virtual machine. Click to interact, then step through a shot with the transport controls. This widget is one view from QEC Studio, where you can build error-correcting codes and analyze the latency of your decoding infrastructure.

Open QEC Studio

PPVM is useful as a standalone tool today, but it also establishes one of the foundations needed for a larger quantum digital twin: before we can construct a faithful software counterpart of a quantum computer, we need a way to represent and execute the interaction between quantum operations, noise, and classical control. PPVM is our first step toward that capability.

Rethinking How We Build Scientific Software

The scale of this ambition also led us to reconsider how scientific software should be built in the age of AI agents. Traditionally, a project like this begins with months spent designing a fast algorithm in theory, followed by more time translating it into code and hand-optimizing details such as memory layout and SIMD behavior. PPVM is one of our first substantial packages built a different way, with an agent-assisted methodology also known as harness engineering.[13]

The first version of PPVM was built by human engineers in 2025. Rather than optimizing every part of its performance manually, we later developed an agent called autotune, inspired by Andrej Karpathy’s autoresearch experiment.[14] Its purpose is not simply to generate code: it works within an engineering harness that provides explicit goals, automated evaluation, enforced logic, and persistent state. Within those boundaries, the agent can propose changes, measure their effects, retain useful findings, and continue searching for better implementations.

Selected PPVM experiment ledgers

What autotune found

This process produced significant performance improvements over the first, hand-written version of PPVM for all its backends. The chart below runs the same Trotter propagation through PPVM and the four other single-threaded Pauli-propagation engines we know of, on the transverse-field Ising and Heisenberg workloads; the harness diffs every engine’s propagated support term-for-term against PPVM’s before it reports a timing.

Below we show one of the most interesting results: the performance of PPVM’s Pauli propagation backend against existing open-source implementations.

Cross-library Pauli-propagation benchmark

How close does a searched implementation get to hand-tuned C++?

Not a speed claim. Pauli propagation is one of PPVM's four backends, and nobody hand-tuned it: autotune searched its memory layout, hashing and vectorization. Against monoprop, hand-written C++, that costs 3.1× on Ising and 1.9× on Heisenberg.

Trotter propagation, single-threaded on one Apple M4 Pro. Lower is faster; the logarithmic time axis is shared by both panels. Hover or focus a panel for exact times.

monoprop and Qiskit's pauli-prop prune each term as it is created, a different approximation, so neither is a like-for-like curve. The section folded in below plots where the two rules come apart.

  • PPVM
  • monoprop
  • pauli-prop (Qiskit)
  • PauliPropagation.jl
  • PauliStrings.jl

Transverse-field Ising — magnetization

1 ms10 ms100 ms1 s10 s100 s816243240485664QubitsWall-clock time (log)

64 qubits

PPVM143 ms
monoprop46.9 ms
pauli-prop (Qiskit)817 ms
PauliPropagation.jl1.61 s
PauliStrings.jl1.88 s

Isotropic Heisenberg — autocorrelator

1 ms10 ms100 ms1 s10 s100 s68101214QubitsWall-clock time (log)

14 qubits

PPVM6.09 s
monoprop3.27 s
pauli-prop (Qiskit)5.33 s
PauliPropagation.jl13.6 s
PauliStrings.jl43.2 s
Accuracy — where the two truncation rules actually diverge

A Pauli rotation sends Q → cos θ·Q + sin θ·(iPQ), so every word receives at most two contributions: itself, scaled by cos, and its partner, scaled by sin. PPVM thresholds the sum; monoprop and pauli-prop threshold each contribution as it is emitted. The consequence is sharp: they drop a child whenever |c|·sin θ < atol even though its parent survives, so they lose every child of a parent in the band atol < |c| < atol/sin θ, a band whose width is 1/sin θ, set by the rotation angle alone.

Seeing that cost the difference needs three things at once: small angles to widen the band, depth to populate it, and a circuit with no lattice and no conserved quantity, so the loss shows up in the answer instead of averaging out. The first two panels are that instance at two angle scales, five circuit seeds each, median line with a min-to-max band: 8 qubits, random all-to-all two-qubit rotations, the Z₀ autocorrelator. The third is the Trotter circuit the timing panels above measure, at the same width and the same observable, which has none of the three and is the control. Everything is diffed against an untruncated reference propagation of the same circuit (atol = 1e-16), and the vertical axis is the L2 norm of the coefficient error over it, so it weighs the whole propagated operator rather than a single expectation value.

  • PPVM
  • monoprop
  • pauli-prop (Qiskit)

Scramble, small angles — 3,200 rotations, θ ≤ 0.1

11e-11e-21e-31e-41e-51e-31e-41e-5Truncation threshold (400 steps, dt = 0.05)Coefficient error (log)

Threshold |c| < 1e-5 · monoprop 2.43× PPVM

PPVM8.0e-3 · 65,376 terms
monoprop1.9e-2 · 65,378 terms

Scramble, large angles — 80 rotations, θ ≤ π/2

11e-11e-21e-31e-41e-51e-31e-41e-5Truncation threshold (10 steps, dt = π/4)Coefficient error (log)

Threshold |c| < 1e-5 · monoprop 0.85× PPVM

PPVM1.0e-3 · 65,366 terms
monoprop9.6e-4 · 65,362 terms

Heisenberg Trotter — nearest-neighbour, uniform angle

11e-11e-21e-31e-41e-51e-31e-41e-51e-61e-7Truncation threshold (10 steps, dt = 0.1)Coefficient error (log)

Threshold |c| < 1e-7

PPVM1.5e-5 · 16,377 terms
monoprop1.5e-5 · 16,558 terms
pauli-prop (Qiskit)3.0e-5 · 16,528 terms

The Trotter panel is the control, and it is close to a null result: monoprop lands within 7% of PPVM at every threshold, and PPVM, PauliPropagation.jl and PauliStrings.jl agree to 13 digits and share that violet line exactly. Only pauli-prop separates, at 1.2–2.0×, and it has no scramble runner so it appears on this panel alone. TFIM behaves the same way and is not plotted; its numbers are in the harness CSV.

At small angles the gap is real and it is systematic: monoprop carries 2.96× PPVM's coefficient error at 1e-4 (2.90–3.06× across the five seeds) and 2.43× at 1e-5, with the two engines holding supports that differ by less than 0.1%. Nothing is hiding in the seed band on that panel; it is narrower than the lines are thick, which is the point. That is the rejection band being populated and compounded over 3,200 gates, not a difference in how much state each keeps. Read the 1e-3 column as a floor rather than a result: both engines are at ‖Δc‖₂ ≈ 0.95 out of a total norm of 1, holding about 7,300 of 65,535 words, so the operator is gone for both and the ratio there means nothing.

The middle panel is the one that catches people out: large angles favour monoprop, by 1.06–1.18× (median ratios 0.96, 0.89 and 0.85 as the threshold tightens). At θ = π/4 the rejection band is only 1.41× wide, the narrowest it can be, and this is where PPVM's own rule has its failure mode, since truncating after each gate permanently deletes a term whose merged coefficient has transiently cancelled below the threshold, where monoprop keeps the row and lets a later gate revive it. Flat amplitudes and a wide band are mutually exclusive: you only get the band from small angles, and small angles force the geometric spread that makes amplitudes non-uniform.

Neither engine's error can run away from the other's, though. A sum of two terms exceeds its larger member by at most 2×, so the mass PPVM rescues is O(atol) per word: both errors are anchored to the same threshold, and driving atol low enough that PPVM is accurate makes monoprop accurate too. And none of this is visible in the observable: at a fixed 1e-4 on the small-angle circuit PPVM's own autocorrelator error ranges over two decades across the five seeds, from 7.2e-6 to 2.1e-3, because a single scalar's truncation error changes sign. On the Trotter panel it misleads in the other direction: at 1e-6 the monoprop autocorrelator lands 1.9e-9 from exact against 1.9e-7 for PPVM, two decades better than its coefficients are, and 1e-13 for the two Julia engines is a forgiving observable, not matching operators. Compare coefficient vectors, not readouts.

Show every number
Scramble, small angles — 3,200 rotations, θ ≤ 0.1 — 8 qubits, 400 steps, dt = 0.05, observable Z₀, reference 65,535 terms carrying ‖c‖₂ = 1, median of 5 seeds
ThresholdEngineTermsCoefficient error ‖Δc‖₂‖Δc‖₂ across seedsObservable error |Δ⟨O⟩|
1e-3
1.02×
PPVM7,2779.5e-19.5e-1–9.6e-16.4e-3
monoprop8,0269.7e-19.6e-1–9.7e-12.0e-2
1e-4
2.96×
PPVM63,9041.4e-11.4e-1–1.4e-16.5e-4
monoprop63,9504.2e-14.1e-1–4.2e-14.2e-3
1e-5
2.43×
PPVM65,3768.0e-37.8e-3–8.7e-32.6e-5
monoprop65,3781.9e-21.9e-2–2.0e-29.8e-5
Scramble, large angles — 80 rotations, θ ≤ π/2 — 8 qubits, 10 steps, dt = π/4, observable Z₀, reference 65,535 terms carrying ‖c‖₂ = 1, median of 5 seeds
ThresholdEngineTermsCoefficient error ‖Δc‖₂‖Δc‖₂ across seedsObservable error |Δ⟨O⟩|
1e-3
0.96×
PPVM46,5192.5e-11.5e-1–3.1e-19.2e-4
monoprop47,0752.4e-11.4e-1–2.7e-15.0e-4
1e-4
0.89×
PPVM63,8001.7e-21.5e-2–1.7e-21.4e-5
monoprop63,8171.4e-21.3e-2–1.6e-25.6e-5
1e-5
0.85×
PPVM65,3661.0e-38.2e-4–1.2e-36.5e-7
monoprop65,3629.6e-46.3e-4–9.7e-41.7e-6
Heisenberg Trotter — nearest-neighbour, uniform angle — 8 qubits, 10 steps, dt = 0.1, observable Z₀, reference 16,384 terms
ThresholdEngineTermsCoefficient error ‖Δc‖₂Observable error |Δ⟨O⟩|
1e-3PPVM4,5661.9e-17.9e-4
monoprop5,1061.9e-16.2e-4
pauli-prop (Qiskit)5,0722.4e-12.5e-3
1e-4PPVM11,9232.6e-21.1e-4
monoprop13,1432.7e-24.1e-5
pauli-prop (Qiskit)13,6284.5e-26.8e-5
1e-5PPVM16,1012.4e-32.3e-6
monoprop17,2232.6e-32.3e-6
pauli-prop (Qiskit)17,8034.5e-33.0e-6
1e-6PPVM16,3241.9e-41.9e-7
monoprop16,9102.0e-41.9e-9
pauli-prop (Qiskit)17,0043.8e-44.3e-8
1e-7PPVM16,3771.5e-56.9e-9
monoprop16,5581.5e-54.3e-10
pauli-prop (Qiskit)16,5283.0e-51.9e-9
Run details — machine, versions, protocol
Machine
Apple M4 Pro (Mac16,7), 10 performance + 4 efficiency cores, 48 GB unified memory, macOS 26.6 (build 25G72), otherwise idle.
Threads
Single-threaded end to end: PPVM is built without Rayon, Julia runs under julia -t1, and pauli-prop is single-threaded by design.monoprop is the one that has to be held down: left alone it takes one serial partition per physical core, which reports a wall time about 3× faster than its serial one on this machine, so it runs under monoprop_NUM_THREADS=1 and monoprop_PARTITIONS=off. Because those are read once into a cached C++ static and go stale silently, its runner also measures its own CPU-per-wall-second around the timed region and fails the run if the cap did not take; every point here reported 1.00. No engine is given more cores than another.
Engines
PPVM ppvm-pauli-sum 0.1.0, release build, rustc 1.96.0 · monoprop 0.8.0 (Algorithmiq; C++ with Python bindings) · PauliPropagation.jl 0.7.3 and PauliStrings.jl 1.10.1, both on Julia 1.12.6 · pauli-prop 0.2.0 on Qiskit 2.5.1.
Workload
10 first-order Trotter steps, dt = 0.1, J = 1, h = 1, truncation |c| < 1e-6. TFIM sweeps 8 → 64 qubits with observable Σᵢ Zᵢ; Heisenberg sweeps 6 → 14 qubits with the Z₀ autocorrelator.
Timing
Two timed repeats per point, the minimum reported. Julia is timed after a warm-up call so JIT compilation is excluded, and circuit construction sits outside the timed region for every engine.
Agreement check
Every engine runs the same gate list in the same order, and before any timing each one dumps its whole propagated support at n = 4, steps = 3, atol = 1e-14, a threshold small enough that the two pruning rules coincide. The driver diffs that support term-for-term against PPVM's and aborts on any missing or extra term, or any coefficient off by more than 1e-10. At the benchmark's own threshold the three accumulate-then-truncate engines still match exactly, and the Terms column below is that shared support. The two branch-pruning engines diverge from it in both directions: pauli-prop runs 11–36% under it on TFIM, the gap widening with the register, and up to 15% over it on Heisenberg; monoprop stays within 1% on TFIM and runs up to 12% over on Heisenberg.
Engine caveats
monoprop keeps monomials whose coefficient has cancelled to exactly zero, so it tracks more rows than it reports: 7,355,928 at Heisenberg n = 14 against the 3,204,697 terms it holds above threshold. It and PPVM are therefore not making the same space/time trade. It also takes a mandatory Pauli-weight cutoff, set to the whole register here so that it never binds. pauli-prop has a mandatory max_terms cap, set to 2²²; the harness fails the run if the support ever reaches it, rather than quietly reporting a differently-truncated number.
Source
Harness, per-engine runners and the raw CSV live in benchmarks/cross-library.
Show every number
Transverse-field Ising — magnetization
QubitsTermsPPVMmonoproppauli-prop (Qiskit)PauliPropagation.jlPauliStrings.jl
84,7012.83 ms2.77 ms31.5 ms6.84 ms13.9 ms
1619,52912.2 ms8.45 ms67.6 ms37.8 ms76.5 ms
2434,35326 ms14 ms138 ms150 ms209 ms
3249,17743.1 ms19.4 ms304 ms215 ms362 ms
4064,00165.7 ms28.3 ms347 ms416 ms604 ms
4878,82589.9 ms35.5 ms482 ms658 ms811 ms
5693,649119 ms41.3 ms633 ms1.24 s1.17 s
64108,473143 ms46.9 ms817 ms1.61 s1.88 s
Isotropic Heisenberg — autocorrelator
QubitsTermsPPVMmonoproppauli-prop (Qiskit)PauliPropagation.jlPauliStrings.jl
61,0222.75 ms2.83 ms13.8 ms11.8 ms18.6 ms
816,32450.5 ms42.1 ms102 ms173 ms316 ms
10225,353529 ms408 ms797 ms1.64 s3.59 s
121,174,8492.75 s1.84 s3.12 s7.12 s17.9 s
142,915,8796.09 s3.27 s5.33 s13.6 s43.2 s

No human hand-picked PPVM’s memory layout, its hashing strategy, or where it vectorizes. autotune searched for those decisions in a few long-running iterations, and the harness timed, validated, and rejected candidates on its own, where the usual route is months of manual optimization, is the result worth reporting.

The agent also discovered implementation strategies human engineers could inspect, test, and keep. Faster code is not automatically correct code, though, so PPVM uses theorem provers in its harness as well: during a recent refactor we formalized core concepts such as Pauli propagation and generalized tableaus, and those definitions caught correctness bugs and now guard the implementation as it evolves. From what we have learned so far, the formalism is a lot more important than the implementation itself: formalism defines the search space of agents, once formalism is in place, the agent can explore the space and find the best possible implementation.

This is an early shift in methodology. Think of an agent as a new stage in the compiler: a traditional compiler lowers formal language to assembly, and an agent lowers natural language to formal language. That moves the human work to the front of the pipeline: working out the algorithm and building the harness that judges the output. Harness engineering is a new kind of engineering, and in our experience it does not only make scientific software faster to build. It makes the software better. The implementation strategies autotune kept are ones we had not thought to try, and the formal definitions we wrote to keep it honest are now permanent guardrails on the code.

Summary

PPVM is the first public component of our quantum digital twin effort. It gives us a foundation for studying how quantum hardware and classical control interact as these systems grow in scale and complexity. It is also our first substantial test of an agent-assisted methodology for developing scientific software. The experience has already changed how we think about performance optimization, correctness, and the role of human engineers in the development loop.

We hope that PPVM does not only help the community understand the behavior of large-scale quantum computers, but also convey a new direction of circuit emulation towards realistic hardware emulation and a new methodology for building scientific software in the age of AI agents.

PPVM · Python and Rust

Start building with PPVM

Explore the quick start, hardware-aware noise models, developer guide, and API reference.

Read the documentation

Discuss These Ideas at CEVNAC 2026

These challenges extend well beyond any one project. The Compilation, Emulation and Verification of Neutral Atom Computing (CEVNAC 2026) workshop will bring researchers and developers together to discuss open problems across compilation, realistic emulation, programming languages, and formal verification. The workshop is co-located with IEEE Quantum Week 2026 in Toronto.

Authors

Xiu-Zhe Luo, David Plankensteiner, Rafael Haenel, Kai-Hsin Wu, Neelay Fruitwala, Alexander Schuckert, Oriol Rubies-Bigorda, Refaat Ismail, Stefan Ostermann, and Shengtao Wang

Acknowledgements

We thank Manuel Rudolph, Tyson Jones, Danylo Lykov, and Chen Zhao.

Cite this post

@misc{luo2026introducing,
  author         = {Xiu-Zhe Luo and David Plankensteiner and Rafael Haenel
                    and Kai-Hsin Wu and Neelay Fruitwala
                    and Alexander Schuckert and Oriol Rubies-Bigorda
                    and Refaat Ismail and Stefan Ostermann
                    and Shengtao Wang},
  title          = {Introducing {PPVM}: A Step Toward a Quantum Digital Twin},
  howpublished   = {Bloqade blog, QuEra Computing},
  year           = {2026},
  month          = {aug},
  url            = {https://bloqade.quera.com/blog/introducing-ppvm-a-step-toward-a-quantum-digital-twin/},
}

References

  1. C. Huang et al., “Classical Simulation of Quantum Supremacy Circuits,” arXiv:2005.06787 (2020).
  2. F. Pan and P. Zhang, “Simulation of Quantum Circuits Using the Big-Batch Tensor Network Method,” Physical Review Letters 128, 030501 (2022).
  3. J. Tindall, M. Fishman, E. M. Stoudenmire, and D. Sels, “Efficient Tensor Network Simulation of IBM’s Eagle Kicked Ising Experiment,” PRX Quantum 5, 010308 (2024).
  4. M. S. Rudolph, E. Fontana, Z. Holmes, and L. Cincio, “Classical Surrogate Simulation of Quantum Systems with LOWESA,” arXiv:2308.09109 (2023).
  5. R. Wille, S. Hillmich, and L. Burgholzer, “Tools for Quantum Computing Based on Decision Diagrams,” ACM Transactions on Quantum Computing 3(3), Article 13 (2022).
  6. M. Sutcliffe and A. Kissinger, “Fast Classical Simulation of Quantum Circuits via Parametric Rewriting in the ZX-Calculus,” EPTCS 426, 247–269 (2025).
  7. S. Bravyi et al., “Simulation of Quantum Circuits by Low-Rank Stabilizer Decompositions,” Quantum 3, 181 (2019).
  8. C. Gidney, “Stim: A Fast Stabilizer Circuit Simulator,” Quantum 5, 497 (2021).
  9. R. Li et al., “SOFT: A High-Performance Simulator for Universal Fault-Tolerant Quantum Circuits,” arXiv:2512.23037 (2025).
  10. R. Haenel, X.-Z. Luo, and C. Zhao, “Tsim: Fast Universal Simulator for Quantum Error Correction,” arXiv:2604.01059 (2026).
  11. B. A. Chase and F. Labib, “Clifft: Fast Exact Simulation of Near-Clifford Quantum Circuits,” arXiv:2604.27058 (2026).
  12. Microsoft, “deq: a dynamic and generic QEC decoding system,” Quantum Development Kit for Error Correction, GitHub repository.
  13. R. Lopopolo, “Harness Engineering: Leveraging Codex in an Agent-First World,” OpenAI Engineering (2026).
  14. A. Karpathy, “autoresearch,” GitHub repository (2026).