# QEC-Playground A research tool to explore Quantum Error Correction (QEC), primarily surface codes. ![](visualize/demo.jpg) [Error] we're working on the documentation of this project, please wait for a formal release (1.0.0) before you want to use this project. ## Installation See the [QEC-Playground Documentation: Installation](https://yuewuo.github.io/QEC-Playground/guide/installation.html) for the detailed instructions. A brief example is below. ```bash # Download the Blossom V Library [Optional] wget -c https://pub.ist.ac.at/~vnk/software/blossom5-v2.05.src.tar.gz -O - | tar -xz cp -r blossom5-v2.05.src/* backend/blossomV/ rm -r blossom5-v2.05.src # Install the Python Dependencies [Optional] sudo apt install python3 python3-pip pip3 install networkx # Install the Rust Toolchain curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source ~/.bashrc # this will add `~/.cargo/bin` to path cd backend/rust/ cargo build --release cd ../../ ``` ## Command-line Interface See the [QEC-Playground Documentation: CLI](https://yuewuo.github.io/QEC-Playground/guide/cli.html) for the detailed instructions. A brief example use case is below. Run `cargo run --release -- --help` under `backend/rust/` folder to get all provided commands of backend program. The option `--help` prints out the information of this command, which can be helpful to find subcommands as well as to understand the purpose of each option. An example output is below. ```init QECPlayground 0.1.6 Yue Wu , Namitha Liyanage (namitha.liyanage@yale.edu) Quantum Error Correction Playground USAGE: qecp OPTIONS: -h, --help Print help information -V, --version Print version information SUBCOMMANDS: fpga_generator fpga_generator help Print this message or the help of the given subcommand(s) server HTTP server for decoding information test testing features tool tools ``` To run a simulation to benchmark the logical error rate of decoder, run `cargo run --release -- tool benchmark --help`. An example output is below. ```bash qecp-tool-benchmark 0.1.6 benchmark surface code decoders USAGE: qecp tool benchmark [OPTIONS] ARGS: [di1,di2,di3,...,din] code distance of vertical axis [nm1,nm2,nm3,...,nmn] number of noisy measurement rounds, must have exactly the same length as `dis`; note that a perfect measurement is always capped at the end, so to simulate a single round of perfect measurement you should set this to 0 [p1,p2,p3,...,pm] p = px + py + pz unless noise model has special interpretation of this value OPTIONS: --bias_eta bias_eta = pz / (px + py) and px = py, px + py + pz = p. default to 1/2, which means px = pz = py [default: 0.5] ...... ``` For example, to test code-distance-3 standard CSS surface code with depolarizing physical error rates 3%, 2% and 1% only on data qubits (i.e. perfect stabilizer measurements) using the default decoder (MWPM decoder), run: ```bash cargo run --release -- tool benchmark [3] [0] [3e-2,2e-2,1e-2] ``` An example result is below. ```init format:

0.03 3 0 567712 10000 0.01761456513161603 3 1.9e-2 0 0.02 3 0 1255440 10000 0.007965334862677627 3 2.0e-2 0 0.01 3 0 4705331 10000 0.002125248999485902 3 2.0e-2 0 ``` ## Change Log See [CHANGELOG.md](CHANGELOG.md) ## Contributions Yue Wu (yue.wu@yale.edu): implement 3D GUI. design and implement interactive tutorial. propose and implement naïve decoder. implement MWPM decoder. Implement different variants of surface code and different decoders (see change log 2020.11.8 - 2022.3.20). The major developer and maintainer of this repository. Guojun Chen: collaborator of CPSC 559 course project: design GUI. design and implement machine learning based weight optimized MWPM decoder. Namitha Godawatte Liyanage: implement approximate MWPM decoder and FPGA related functionalities. Neil He: bind library to Python. ## Attribution When using QEC-Playground for research, please cite: ``` TODO: arXiv link for related papers (probably the fusion blossom paper) ```