

# Change Log

See [this](https://keepachangelog.com/en/1.0.0/) for format of writing change logs.

For major updates, please run the [auto profiler](benchmark/auto_profiler/auto_profiler.md) 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

## 0.1.6 (2022.6.22)

- [x] publish `qecp` package to crate.io
- [x] add more advanced threshold evaluation script `benchmark/threshold_analyzer`
- [x] remove blossom V library in the repo to avoid license issue, now user has to download the blossom V package themselves
- [x] both UF decoder and MWPM decoder (new) support decoding erasure errors
- [x] start writing  using `mdbook`

## 0.1.5 (2022.4.12)

- [x] real-weighted union-find decoder
- [x] make union-find algorithm generic typed to enable advanced information to be computed efficiently
- [x] change blossom V library to use integer matching, because floating-point matching sometimes enter deadlock

## 0.1.4 (2022.3.30)

- [x] build complete model graph using customized Dijkstra's algorithm
- [x] mwpm decoder
- [x] tailored mwpm decoder
- [x] remove all unnecessary .jobout, .joberror, sbatch files and clean up the git repo

## 0.1.3 (2022.3.21)

- [x] remove `mwpm_approx.rs` because we don't need it anymore
- [x] redesign the simulator for improved locality and faster simulation (the current bottleneck), use Box for optional fields, for example correlated error rate

## 0.1.2 (2022.3.21)

- [x] remove `BatchZxError`, `ZxError`, `ZxCorrection`, `ZxMeasurement` and several obsolete types and related functions
- [x] delete unused and obsolete benchmark tools
- [x] remove features `MWPM_reverse_order` and `MWPM_shuffle`
- [x] remove feature `reordered_css_gates` because it's now the default option
- [x] remove feature `noserver` because it doesn't work as expected to speed up compilation

## 0.1.1 (2022.3.20)

- [x] design a set of profiling test cases to both test correctness of existing decoders and record performance for future optimization compares
- [x] upgrade dependencies to latest version

## 0.1.0 (2020.11.8 - 2022.3.20)

**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.

## 0.2.0 (2023.4.27)

**Release Highlights**

- Integrate [Fusion Blossom](https://github.com/yuewuo/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

## 0.2.1/0.2.2 (2023.4.29)

- add new `CompactSimulatorExtender` for extending a small `T` to arbitrarily large `T` efficiently.
- add new `InitializerExtender` for extending a small `T` to arbitrarily large `T` efficiently.
- add new `CompactSimulatorCompressed` capable of running `T = 100000` and `d = 21` with only ~5GB memory on 10 threads.
