See this for format of writing change logs.
For major updates, please run the auto profiler to test performance and verify correctness
- deprecate ftqec module and migrate scripts
- write book
- update 3D tool to support visualizing data structure from backend
- add SQLite support to cache intermediate results, to allow broken-point continuous simulation with a random or specified UUID
- publish
qecp
package to crate.io - add more advanced threshold evaluation script
benchmark/threshold_analyzer
- remove blossom V library in the repo to avoid license issue, now user has to download the blossom V package themselves
- both UF decoder and MWPM decoder (new) support decoding erasure errors
- start writing using
mdbook
- real-weighted union-find decoder
- make union-find algorithm generic typed to enable advanced information to be computed efficiently
- change blossom V library to use integer matching, because floating-point matching sometimes enter deadlock
- build complete model graph using customized Dijkstra's algorithm
- mwpm decoder
- tailored mwpm decoder
- remove all unnecessary .jobout, .joberror, sbatch files and clean up the git repo
- remove
mwpm_approx.rs
because we don't need it anymore - redesign the simulator for improved locality and faster simulation (the current bottleneck), use Box for optional fields, for example correlated error rate
- remove
BatchZxError
,ZxError
,ZxCorrection
,ZxMeasurement
and several obsolete types and related functions - delete unused and obsolete benchmark tools
- remove features
MWPM_reverse_order
andMWPM_shuffle
- remove feature
reordered_css_gates
because it's now the default option - remove feature
noserver
because it doesn't work as expected to speed up compilation
- design a set of profiling test cases to both test correctness of existing decoders and record performance for future optimization compares
- upgrade dependencies to latest version
Release Highlights
This project is under development for 1.5 years as an internal tool to learn, implement and benchmark quantum error correction using surface code. During this period we've made it a versatile tool that supports multiple different decoders (including
- MWPM decoder
- Offer decoder
- Union-Find decoder
- Distributed Union-Find decoder
) on several variants of surface codes (including
- standard and rotated CSS surface code
- rectangular and rotated XZZX surface code
- rotated tailored surface code
) under different error types (including
- single-qubit Pauli errors (pX, pY, pZ) and erasure errors (pE)
- two-qubit correlated Pauli errors (pXI, pXX, pXZ, pXY, pYI, pYX, ...) and erasure errors (pEI, pIE, pEE)
) with highly configurable noise model (including
- code capacity noise model (errors only on data qubits, without any measurement errors)
- phenomenological noise model (errors only on data qubits and pure measurement errors)
- circuit-level noise model (errors on both data qubits and ancilla qubits and between any gates)
- any noise model, not limited to i.i.d. ones
). But, when I tried to implement an improved MWPM decoder for tailored surface code, I found I need a major upgrade of the code structure to implement it. Also, we need to isolate the functionality of surface code simulator and decoders, for better code structure and to ease maintenance.
Release Highlights
- Integrate Fusion Blossom
- upgraded the naming of several APIs
- upgrade the dependencies, especially
clap
, for better code readability - add new
CompactSimulator
for faster simulation and also for exporting to external tools for simulation
- add new
CompactSimulatorExtender
for extending a smallT
to arbitrarily largeT
efficiently. - add new
InitializerExtender
for extending a smallT
to arbitrarily largeT
efficiently. - add new
CompactSimulatorCompressed
capable of runningT = 100000
andd = 21
with only ~5GB memory on 10 threads.