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.dev20250805012258-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded Python 3.12manylinux: glibc 2.39+ x86-64

tesseract_decoder-0.1.1.dev20250805012258-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.dev20250805012258-py312-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3.12macOS 11.0+ ARM64

tesseract_decoder-0.1.1.dev20250805012258-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.dev20250805012258-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded Python 3.11manylinux: glibc 2.39+ x86-64

tesseract_decoder-0.1.1.dev20250805012258-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.dev20250805012258-py311-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3.11macOS 11.0+ ARM64

tesseract_decoder-0.1.1.dev20250805012258-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.dev20250805012258-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl (3.3 MB view details)

Uploaded Python 3.10manylinux: glibc 2.39+ x86-64

tesseract_decoder-0.1.1.dev20250805012258-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.dev20250805012258-py310-none-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded Python 3.10macOS 11.0+ ARM64

tesseract_decoder-0.1.1.dev20250805012258-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.dev20250805012258-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e681a7ae8539359e68481654aa8f44c77ada1c311e73fb0ec28ffadb48b83340
MD5 a5a8d0ce4eaa418cc2e6f0531ba38bc5
BLAKE2b-256 14e5cd8684e38118ce3be092f4f4d75e36bec1bb7e2291382c550150dbd05738

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 637b3974d7d5d145dd1632e66c184da638db67bc3349ffa022819643458b79c7
MD5 871acae1890224c28db7f7d2d3688d93
BLAKE2b-256 2628b1c9da527a356a2026d9b4bfb618c106163485a84236fd7378c631a77bfb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py312-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 00dcf6aa14720bed267ad7b4b57bb4aa3f7513b218f504a40221e0d70e074e9c
MD5 e71c53e466c9a09752a5d56ea8473d06
BLAKE2b-256 a8351735f01d2da0839b99d3c0344e4f4165e1ff2694359ddaafc26cf61aff49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py312-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 bbc2a74147cfa784fb8cf292c7fdc099d5812f30b259bebc8c282b5aa5e24f32
MD5 ec2bdca5d475344c619d25dab600b744
BLAKE2b-256 98e94a74e97a8f87756d24a46bc88ae1af30feef965db1cc6acea1a8473569b7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b6fb53481ca8745013eed3017a113b73f049571779b2f53d19e7c8f45a1be013
MD5 2c16a2c94fe54c6d867f3d91950ade40
BLAKE2b-256 e45a565ccb5b8a4bd18807fa08333feb5bc609e9d299e27bd58abdfdd003a5ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d23b9723d0c5fc74fe916317ff2331e212f2fe7e31ea644a63b50886ee644d09
MD5 2b7b9adc205a93e87d00a68b1f8bf05c
BLAKE2b-256 4683f57ab434f9cf57df905f09c30a46e24fdab58d9c89365c1640f885701c14

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py311-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4a8db21da1d37579e351ab376142d488f7e40dd061d5d1647a7a8c156e16f87a
MD5 a8debe2847ab9d2b5c4da59de02394d0
BLAKE2b-256 1e6cfdab2ea2085dff09c6fe38cecc7227d6476b477cd71fa9cb536773774e56

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py311-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0894fa7729371e5a4c208545617e44b14486ef77aca5973bdebfb9890877c9c9
MD5 3d846fe422abaca65f58596e70b23b15
BLAKE2b-256 4a2267a2e7805abb948e567695232f29de5bd017e19a892a5bf0d09052d08f21

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e9b57123e814c80c42d005246007b5576cf5b4cc039b9888e744cc5ed335c15e
MD5 5e1d79744d8c1aa3ddf721821956f16a
BLAKE2b-256 e3681e291ed0b6296c43a4d89c327e4a2c0217aff591978a4460fe2b99d3a133

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f83091a880b6e44c4a788c91a906326e0b4c61902426490d28ae54910d46a46
MD5 b1b5a5a193ed08546efd1c300f1062e8
BLAKE2b-256 f2b231250a162402dc28eb7c5165a8d632086aa9cc88648b23906757766d9f30

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py310-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 272c3cf3c15bb776c89d80f970511302ca903ba2e9d92e332ecfc0463097bcba
MD5 cd2408947334026f5945c3f41785b234
BLAKE2b-256 8872bf8034f92d3a293e892610df23ad907adc03dec90acd0621e33d487f7da3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805012258-py310-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 386e3622376b172e3c2529488caee5f53d9d0fd08791786dff8b807c217a13ae
MD5 ead3b056f93d3bf6a19f34be8709cd63
BLAKE2b-256 2f8f1e561d75804223ed96cc649bcfe9bc266680a3dcf86347431b86fd33676f

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