# QEC-Playground
A research tool to explore Quantum Error Correction (QEC), primarily surface codes.
![](visualize/demo.jpg)
<strong style="color:red;">[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.</strong>
## 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 <yue.wu@yale.edu>, Namitha Liyanage (namitha.liyanage@yale.edu)
Quantum Error Correction Playground
USAGE:
qecp <SUBCOMMAND>
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] <dis> <nms> <ps>
ARGS:
<dis> [di1,di2,di3,...,din] code distance of vertical axis
<nms> [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
<ps> [p1,p2,p3,...,pm] p = px + py + pz unless noise model has special interpretation of
this value
OPTIONS:
--bias_eta <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: <p> <di> <nm> <total_repeats> <qec_failed> <error_rate> <dj> <confidence_interval_95_percent> <pe>
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)
```
Raw data
{
"_id": null,
"home_page": "https://yuewuo.github.io/QEC-Playground/",
"name": "qecp",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "QEC,quantum-computing,error-correction,simulation,visualization",
"author": "Yue Wu <yue.wu@yale.edu>, Namitha Liyanage <namitha.liyanage@yale.edu>, Neil He <neilhe6345@gmail.com>",
"author_email": "Yue Wu <yue.wu@yale.edu>, Namitha Liyanage <namitha.liyanage@yale.edu>, Neil He <neilhe6345@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/69/7f/aafe3c478eb43a8b5d79d463ef5a55ece0b5c4634654e6fdc2a217696b01/qecp-0.2.3.tar.gz",
"platform": null,
"description": "# QEC-Playground\n\nA research tool to explore Quantum Error Correction (QEC), primarily surface codes.\n\n![](visualize/demo.jpg)\n\n<strong style=\"color:red;\">[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.</strong>\n\n## Installation\n\nSee the [QEC-Playground Documentation: Installation](https://yuewuo.github.io/QEC-Playground/guide/installation.html) for the detailed instructions.\nA brief example is below.\n\n```bash\n# Download the Blossom V Library [Optional]\nwget -c https://pub.ist.ac.at/~vnk/software/blossom5-v2.05.src.tar.gz -O - | tar -xz\ncp -r blossom5-v2.05.src/* backend/blossomV/\nrm -r blossom5-v2.05.src\n\n# Install the Python Dependencies [Optional]\nsudo apt install python3 python3-pip\npip3 install networkx\n\n# Install the Rust Toolchain\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource ~/.bashrc # this will add `~/.cargo/bin` to path\ncd backend/rust/\ncargo build --release\ncd ../../\n```\n\n\n## Command-line Interface\n\nSee the [QEC-Playground Documentation: CLI](https://yuewuo.github.io/QEC-Playground/guide/cli.html) for the detailed instructions.\nA brief example use case is below.\n\nRun `cargo run --release -- --help` under `backend/rust/` folder to get all provided commands of backend program.\nThe 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.\nAn example output is below.\n\n```init\nQECPlayground 0.1.6\nYue Wu <yue.wu@yale.edu>, Namitha Liyanage (namitha.liyanage@yale.edu)\nQuantum Error Correction Playground\n\nUSAGE:\n qecp <SUBCOMMAND>\n\nOPTIONS:\n -h, --help Print help information\n -V, --version Print version information\n\nSUBCOMMANDS:\n fpga_generator fpga_generator\n help Print this message or the help of the given subcommand(s)\n server HTTP server for decoding information\n test testing features\n tool tools\n```\n\nTo run a simulation to benchmark the logical error rate of decoder, run `cargo run --release -- tool benchmark --help`. An example output is below.\n\n```bash\nqecp-tool-benchmark 0.1.6\nbenchmark surface code decoders\n\nUSAGE:\n qecp tool benchmark [OPTIONS] <dis> <nms> <ps>\n\nARGS:\n <dis> [di1,di2,di3,...,din] code distance of vertical axis\n <nms> [nm1,nm2,nm3,...,nmn] number of noisy measurement rounds, must have exactly the\n same length as `dis`; note that a perfect measurement is always capped at the end,\n so to simulate a single round of perfect measurement you should set this to 0\n <ps> [p1,p2,p3,...,pm] p = px + py + pz unless noise model has special interpretation of\n this value\n\nOPTIONS:\n --bias_eta <bias_eta>\n bias_eta = pz / (px + py) and px = py, px + py + pz = p. default to 1/2, which means px\n = pz = py [default: 0.5]\n ......\n```\n\nFor 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:\n\n```bash\ncargo run --release -- tool benchmark [3] [0] [3e-2,2e-2,1e-2]\n```\n\nAn example result is below.\n\n```init\nformat: <p> <di> <nm> <total_repeats> <qec_failed> <error_rate> <dj> <confidence_interval_95_percent> <pe>\n0.03 3 0 567712 10000 0.01761456513161603 3 1.9e-2 0\n0.02 3 0 1255440 10000 0.007965334862677627 3 2.0e-2 0\n0.01 3 0 4705331 10000 0.002125248999485902 3 2.0e-2 0\n```\n\n\n## Change Log\n\nSee [CHANGELOG.md](CHANGELOG.md)\n\n## Contributions\n\nYue Wu (yue.wu@yale.edu): implement 3D GUI. design and implement interactive tutorial. propose and implement na\u00efve 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.\n\nGuojun Chen: collaborator of CPSC 559 course project: design GUI. design and implement machine learning based weight optimized MWPM decoder.\n\nNamitha Godawatte Liyanage: implement approximate MWPM decoder and FPGA related functionalities.\n\nNeil He: bind library to Python.\n\n## Attribution\n\nWhen using QEC-Playground for research, please cite:\n\n```\nTODO: arXiv link for related papers (probably the fusion blossom paper)\n```\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Quantum Error Correction Playground for Surface Code Research",
"version": "0.2.3",
"project_urls": {
"Homepage": "https://yuewuo.github.io/QEC-Playground/",
"Source Code": "https://github.com/yuewuo/QEC-Playground"
},
"split_keywords": [
"qec",
"quantum-computing",
"error-correction",
"simulation",
"visualization"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "d5961e810d7e3c5092bd4aa983327a7e03a1f7f28c2d6d99ac087142039dd0f0",
"md5": "59fee531f5bd82690552d0a058296cd6",
"sha256": "3d04db979a1a8513c5b96e195c8248b6b3724660c868dc3ced6937cf5a3f7550"
},
"downloads": -1,
"filename": "qecp-0.2.3-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "59fee531f5bd82690552d0a058296cd6",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 3119225,
"upload_time": "2023-05-13T01:49:30",
"upload_time_iso_8601": "2023-05-13T01:49:30.476375Z",
"url": "https://files.pythonhosted.org/packages/d5/96/1e810d7e3c5092bd4aa983327a7e03a1f7f28c2d6d99ac087142039dd0f0/qecp-0.2.3-cp37-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "004dac344afbafaeb13d921d7f21df5e455c110c1bcb3975b0dc06bff2308cb3",
"md5": "42cbdbbc8d84e175a18d3dd1469a9c06",
"sha256": "7ec1dc81e6eef9956f6ebb4df6e9a3ec905e3d3624d045afb69b81766d8b0c7a"
},
"downloads": -1,
"filename": "qecp-0.2.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "42cbdbbc8d84e175a18d3dd1469a9c06",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 18573188,
"upload_time": "2023-05-13T01:50:11",
"upload_time_iso_8601": "2023-05-13T01:50:11.533681Z",
"url": "https://files.pythonhosted.org/packages/00/4d/ac344afbafaeb13d921d7f21df5e455c110c1bcb3975b0dc06bff2308cb3/qecp-0.2.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d255180d13b16812375a474690fd1aa741d046d15a170f898e0859e310c6d761",
"md5": "9142948f257c1a3d932c53d1d001cb5f",
"sha256": "f64c24ce9fd015f6302b12da911bfd70b425a8c9e940130aff432d89de5cee47"
},
"downloads": -1,
"filename": "qecp-0.2.3-cp37-abi3-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "9142948f257c1a3d932c53d1d001cb5f",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 18617714,
"upload_time": "2023-05-13T01:50:48",
"upload_time_iso_8601": "2023-05-13T01:50:48.406912Z",
"url": "https://files.pythonhosted.org/packages/d2/55/180d13b16812375a474690fd1aa741d046d15a170f898e0859e310c6d761/qecp-0.2.3-cp37-abi3-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bd634b6436f506fd4cbf5b477447d6fe45cad5a9c52514998ea28b763f791770",
"md5": "c312cb133277844007ce9e601be72fce",
"sha256": "17da15fc69cda26899e861b9e1cc82229af11e36d8a09ffbe0af03fddbe04121"
},
"downloads": -1,
"filename": "qecp-0.2.3-cp37-abi3-win32.whl",
"has_sig": false,
"md5_digest": "c312cb133277844007ce9e601be72fce",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 1210007,
"upload_time": "2023-05-13T01:50:56",
"upload_time_iso_8601": "2023-05-13T01:50:56.877976Z",
"url": "https://files.pythonhosted.org/packages/bd/63/4b6436f506fd4cbf5b477447d6fe45cad5a9c52514998ea28b763f791770/qecp-0.2.3-cp37-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3ad19ef81d8174dd214674a86937db99a870632ac29a4702944a746d4a73ea92",
"md5": "880f8bf783d3d710a921cb24f46fe2e7",
"sha256": "6fa5d674c3fce20cdee087cfff5d0793846651b0a571b200b55474dc3bd7979d"
},
"downloads": -1,
"filename": "qecp-0.2.3-cp37-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "880f8bf783d3d710a921cb24f46fe2e7",
"packagetype": "bdist_wheel",
"python_version": "cp37",
"requires_python": ">=3.7",
"size": 1246839,
"upload_time": "2023-05-13T01:51:01",
"upload_time_iso_8601": "2023-05-13T01:51:01.802641Z",
"url": "https://files.pythonhosted.org/packages/3a/d1/9ef81d8174dd214674a86937db99a870632ac29a4702944a746d4a73ea92/qecp-0.2.3-cp37-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "697faafe3c478eb43a8b5d79d463ef5a55ece0b5c4634654e6fdc2a217696b01",
"md5": "c8fcbc58841de076f229d55f05a0b92a",
"sha256": "3c6e110def6622fbe5df03a2b42bf4bdd902eceb7b31525a923288ee1ffc37f8"
},
"downloads": -1,
"filename": "qecp-0.2.3.tar.gz",
"has_sig": false,
"md5_digest": "c8fcbc58841de076f229d55f05a0b92a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 611131,
"upload_time": "2023-05-13T01:53:55",
"upload_time_iso_8601": "2023-05-13T01:53:55.427891Z",
"url": "https://files.pythonhosted.org/packages/69/7f/aafe3c478eb43a8b5d79d463ef5a55ece0b5c4634654e6fdc2a217696b01/qecp-0.2.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-05-13 01:53:55",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yuewuo",
"github_project": "QEC-Playground",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "qecp"
}