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

Uploaded Python 3.12macOS 11.0+ ARM64

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

Uploaded Python 3.11macOS 11.0+ ARM64

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

Uploaded Python 3.10macOS 11.0+ ARM64

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 21d17cc0eb3280fd51107a69d1b6b1bb777837b935fadc627f4081341902ccb3
MD5 00426827f097eedd836ae602a246aba9
BLAKE2b-256 58205635685905d3eb15a4d475338f875c4c4443e4e9e736ec14a98b8594137b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eb8d62961089253017f05033cbf913309c921b64489fe9ce1923a92484de9638
MD5 109151614bfae85dd55c6bf42dc523df
BLAKE2b-256 8fc9d36974a62d8e5961d81bb2459dc7d6fc674ee3623bbb05f13216bb97ca6c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4112a6317438b8980a7ab46ba437fcc1455104f4150c8c07045d5e617a481a88
MD5 070e073eddb63a2d84c83f1195424693
BLAKE2b-256 d048c978a9ccb9df28fbd2b35b656c70851f3333bfd29b396baf333821842622

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 db6ceffb9aa1987f558e6d6e25726d5ecfdeda664ced838ee51201d27959ce29
MD5 8f3896a3d113020c1df0de76c71becbe
BLAKE2b-256 63fa5f6557b741708396dfffbce1b5e014bfad746f4c1fbe3b93bc665ab38734

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7db63b28166edafd3fc8b42ea2c25675b8d4b1434c225d1618f06c4bb8a8e84c
MD5 40cd75f059598f3b8bac3bda57c0ff32
BLAKE2b-256 1dd8f8aee6b10004bf37061362937afab636ca4e45ce149580a6de16161bb327

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 90c93400aecdedd2e6de6091b62b465d2643f808b36822ef359f17ad178be48c
MD5 2a707d0ac0e325a92a8355613a29bd38
BLAKE2b-256 fce8fc88829ae06afc5f272bc87d0486caa9169ce5bcc6f2b152e5d0848236ff

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0fcd6e25c5b7f098b3e6c98e1b9b4b66b37f307bed3c7cd02505424fd741ff89
MD5 57d34ab47bbab05580aada100ead0124
BLAKE2b-256 50bcd52f619e1ed4a58ea3917b17bfa8cd15f857a5267e8445cb92c8f68a5036

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c13c612a2df78053cda3efc9b69a0a0dd6e4fd440ea786829171b2baaaaadecf
MD5 ceb84aaf4ab26cf439a8d75135d625a3
BLAKE2b-256 60a3fb494e1e9c834de0bbe551ba834655c1e478db82da5a6547b3b7b40f1ab4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd9a1aaa49bf3be2afa908087f3718bd4adc010f536cc56e4bbdace1663a3e83
MD5 d5d219effc616bff712688e47244fedf
BLAKE2b-256 e6ff0ec81de59ed185f8beb961e1310f024909dbca02dfbb3105c7ceddbe16d0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3bbd1a429e777ffddf0b4c9b2249519a2ce9fbad2c2b918566c55d19412fa801
MD5 f32a878de1709d4e0e244d1683a714e5
BLAKE2b-256 a7b4a662a66aea5d60d1f41f58f6841103b3cd7a51e0778fd249f1fc038f21fc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72e89bfebea4ed4dcf91b763c0745607e9956f4b9e5da231f8956b0d34fbd5aa
MD5 a40be594578fef30d2e7dd5abd3acda7
BLAKE2b-256 761d7db5eedfa69eeca42c8608366ca39815868707696f73fa73f7dbbc3d0463

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 86a8773c68184004e6e48abf310da0f1994173888cd819ccffde123432bdd6df
MD5 04a79228a0373fd5f894d36fac886f70
BLAKE2b-256 3894d9d5d80f31004bdf0efb1a5e5e040ed09566b2fa5befc292f0a401832817

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