Skip to main content

A search-based decoder for quantum error correction (QEC).

Project description

Tesseract Decoder

A Search-Based Decoder for Quantum Error Correction.

Licensed under the Apache 2.0 open-source license C++

InstallationUsagePaperHelpCitationContact

Tesseract is a Most Likely Error decoder designed for Low Density Parity Check (LDPC) quantum error-correcting codes. It applies pruning heuristics and manifold orientation techniques during a search over the error subsets to identify the most likely error configuration consistent with the observed syndrome. Tesseract achieves significant speed improvements over traditional integer programming-based decoders while maintaining comparable accuracy at moderate physical error rates.

We tested the Tesseract decoder for:

  • Surface codes
  • Color codes
  • Bivariate-bicycle codes
  • Transversal CNOT protocols for surface codes

Features

  • A* search: deploys A* search while running a Dijkstra algorithm with early stop for high performance.
  • Stim and DEM Support: processes Stim circuit files and Detector Error Model (DEM) files with arbitrary error models. Zero-probability error instructions are automatically removed when a DEM is loaded.
  • Parallel Decoding: uses multithreading to accelerate the decoding process, making it suitable for large-scale simulations.
  • Efficient Beam Search: implements a beam search algorithm to minimize decoding cost and enhance efficiency. Sampling and Shot Range Processing: supports sampling shots from circuits. When a detection error model is provided without an accompanying circuit, Tesseract requires detection events from files using --in. The decoder can also process specific shot ranges for flexible experiment setups.
  • Detailed Statistics: provides comprehensive statistics output, including shot counts, error counts, and processing times.
  • Heuristics: includes flexible heuristic options: --beam, --det-penalty, --beam-climbing, --no-revisit-dets, --at-most-two-errors-per-detector, and --pqlimit to improve performance while maintaining a low logical error rate. To learn more about these options, use ./bazel-bin/src/tesseract --help
  • Visualization tool: open the viz directory in your browser to view decoding results. See viz/README.md for instructions on generating the visualization JSON.

Installation

Tesseract relies on the following external libraries:

  • argparse: For command-line argument parsing.
  • nlohmann/json: For JSON handling (used for statistics output).
  • Stim: For quantum circuit simulation and error model handling.

Build Instructions

Tesseract uses Bazel as its build system. To build the decoder:

bazel build src:all

Running Tests

Unit tests are executed with Bazel. Run the quick test suite using:

bazel test //src:all

By default the tests use reduced parameters and finish in under 30 seconds. To run a more exhaustive suite with additional shots and larger distances, set:

TESSERACT_LONG_TESTS=1 bazel test //src:all

Usage

The file tesseract_main.cc provides the main entry point for Tesseract Decoder. It can decode error events from Stim circuits, DEM files, and pre-existing detection event files.

Basic Usage:

./tesseract --circuit CIRCUIT_FILE.stim --sample-num-shots N --print-stats

To decode pre-generated detection events, provide the input file using --in SHOTS_FILE --in-format FORMAT.

Example with Advanced Options:

./tesseract \
        --pqlimit 1000000 \
        --at-most-two-errors-per-detector \
        --det-order-seed 232852747 \
        --circuit circuit_file.stim \
        --sample-seed 232856747 \
        --sample-num-shots 10000 \
        --threads 32 \
        --print-stats \
        --beam 23 \
        --num-det-orders 1 \
        --shot-range-begin 582 \
        --shot-range-end 583

Example Usage

Sampling Shots from a Circuit:

./tesseract --circuit surface_code.stim --sample-num-shots 1000 --out predictions.01 --out-format 01

Using a Detection Event File:

./tesseract --in events.01 --in-format 01 --dem surface_code.dem --out decoded.txt

Using a Detection Event File and Observable Flips:

./tesseract --in events.01 --in-format 01 --obs_in obs.01 --obs-in-format 01 --dem surface_code.dem --out decoded.txt

Tesseract supports reading and writing from all of Stim's standard output formats.

Performance Optimization

Here are some tips for improving performance:

  • Parallelism over shots: increase --threads to leverage multicore processors for faster decoding.
  • Beam Search: use --beam to control the trade-off between accuracy and speed. Smaller beam sizes result in faster decoding but potentially lower accuracy.
  • Beam Climbing: enable --beam-climbing for enhanced cost-based decoding.
  • At most two errors per detector: enable --at-most-two-errors-per-detector to improve performance.
  • Priority Queue limit: use --pqlimit to limit the size of the priority queue.

Output Formats

  • Observable flips output: predictions of logical errors.
  • DEM usage frequency output: if --dem-out is specified, outputs estimated error frequencies.
  • Statistics output: includes number of shots, errors, low confidence shots, and processing time.

Help

We are committed to providing a friendly, safe, and welcoming environment for all. Please read and respect our Code of Conduct.

Citation

When publishing articles or otherwise writing about Tesseract Decoder, please cite the following:

@misc{beni2025tesseractdecoder,
    title={Tesseract: A Search-Based Decoder for Quantum Error Correction},
    author = {Aghababaie Beni, Laleh and Higgott, Oscar and Shutty, Noah},
    year={2025},
    eprint={2503.10988},
    archivePrefix={arXiv},
    primaryClass={quant-ph},
    doi = {10.48550/arXiv.2503.10988},
    url={https://arxiv.org/abs/2503.10988},
}

Contact

For any questions or concerns not addressed here, please email quantum-oss-maintainers@google.com.

Disclaimer

Tesseract Decoder is not an officially supported Google product. This project is not eligible for the Google Open Source Software Vulnerability Rewards Program.

Copyright 2025 Google LLC.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tesseract_decoder-0.1.1.dev20250807055606-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded Python 3.12manylinux: glibc 2.39+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded Python 3.12manylinux: glibc 2.35+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py312-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3.12macOS 11.0+ ARM64

tesseract_decoder-0.1.1.dev20250807055606-py312-none-macosx_10_13_x86_64.whl (2.9 MB view details)

Uploaded Python 3.12macOS 10.13+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded Python 3.11manylinux: glibc 2.39+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded Python 3.11manylinux: glibc 2.35+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py311-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3.11macOS 11.0+ ARM64

tesseract_decoder-0.1.1.dev20250807055606-py311-none-macosx_10_13_x86_64.whl (2.9 MB view details)

Uploaded Python 3.11macOS 10.13+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded Python 3.10manylinux: glibc 2.39+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl (3.4 MB view details)

Uploaded Python 3.10manylinux: glibc 2.35+ x86-64

tesseract_decoder-0.1.1.dev20250807055606-py310-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3.10macOS 11.0+ ARM64

tesseract_decoder-0.1.1.dev20250807055606-py310-none-macosx_10_13_x86_64.whl (2.9 MB view details)

Uploaded Python 3.10macOS 10.13+ x86-64

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 286103e8ce2231fe2588e7c98356fe97b40827ba9732aa313c75156eee799e5d
MD5 8927e0c6b53d9f8bbfa933f0b8359061
BLAKE2b-256 988f5b35d2691b5111b46d74a51b97129bc115e70fa9c9c76e759af02e219068

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 52072010080deac14067bde7b8e6bc2ea781be9a0d362a1c2d3d07ddbfc2ca91
MD5 4da9e4c1855e07bbd66ef4e951182dde
BLAKE2b-256 714f76b587f158878a50ee45f7031adae0b2529f580fb4b65762676ae1309ebe

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py312-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py312-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eb24c444bf5bb1c63bd239aed19a621fcefee46de013b9ce7eaaf50499d330a3
MD5 e82ee22c61eb07d6c4ab0fdd3de5954d
BLAKE2b-256 ea0cb6ee879e4083ad1aff27c100c6f891021c9015b301de08ee9fef444e1154

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py312-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py312-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 2a421cc77cafa951ee547f687055dcdbc577a121cb23dfb04dee45b61f2792df
MD5 3951afebf0957e121221753602e0fc79
BLAKE2b-256 e891ea9c52478672f59d6d6cf49d3c79b01b3c515517254dc894c57893ca61e9

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c120376adcbafed1c16474db4af89d7c62ad36906a3195aa61a39715e4df2a6e
MD5 e470c68fd0c541cfd38ab803345dabf4
BLAKE2b-256 306ad1be2ce0c68ecb2dc92b3eb08f9d942b66e6cae9122bbb4d66349a692b99

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 81284aa0f82783f89a2fed902b39ba4094b862af6e8fdfc76bad7bb16ddf3570
MD5 54c6afee3bad393ab23bc60f86011111
BLAKE2b-256 95ef720bebd2dfc2d754e3afed324f72c67ca3ac9fbd141f8ca25c416dae5303

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py311-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py311-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1086af3266a5a5661e0fc373cf6dd74592796fb7de894c5c5cdcc1fdcac9e65e
MD5 a532c3e04044e89b7599363434c9639c
BLAKE2b-256 bd9466e1099c28a2875022b5c6dab82908778468ffa0106846fe21c82f2cf63e

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py311-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py311-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 7f7fa83ed2348c126612d0c3b26b253038235e56e8ad1764a2b7f2d15a8b3a92
MD5 5465f4e1030316935f09d3d331370df6
BLAKE2b-256 1918a6e7dab7ef5309e738eeefec7b0c5cbe361a834db96758b58fc76bb6deaa

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 15e5b09dbd4ba6cdfca74d55456ae37391443e8810f26083a5d7ccfe35ac6102
MD5 8b42d87acb684b2d3c796266a862b98e
BLAKE2b-256 6e071c3149fbd95c1aa9c94fb91fe5c481a714df0f2e5f472a8aef098044edc6

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 af33ce6fd713de202502571848cfa3299e16d660ab051aff012876753df615e9
MD5 76b54c262c072dbf306412b70c481eb2
BLAKE2b-256 110ec30160a262be00abf7af03d44a358a035559156ef60fd6abdcfa4a2e4025

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py310-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py310-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce9985735897b0db3c499d8ce34e94e4a3ce8dabd258482a32b95f59eaf086f9
MD5 2c74b9dc3de260f335e89d235e61059d
BLAKE2b-256 1c79cb12119de6517c763d7daa9bf8787da66200b45c75d62e4b3d5598533d50

See more details on using hashes here.

File details

Details for the file tesseract_decoder-0.1.1.dev20250807055606-py310-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807055606-py310-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 1caba00cc1d7f64fd0bdeef16c476c4f27369c8291603bd4f43eb32269393a18
MD5 56d36ee69ce37673c63103dc2e660203
BLAKE2b-256 492df52845b070ab48d41fd1e54565160c1f0547c302f15fd53ae91cd93f0349

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page