Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Tesseract Decoder

A Search-Based Decoder for Quantum Error Correction.

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

Installation – Usage – Paper – Help – Citation – Contact

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.

Metadata

Release files for tesseract-decoder 0.1.1.dev20250807063041

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for tesseract-decoder 0.1.1.dev20250807063041
File
tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl Python 3.12 none Linux glibc 2.39+ x86-64, Linux glibc 2.17+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl Python 3.12 none Linux glibc 2.35+ x86-64, Linux glibc 2.17+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_11_0_arm64.whl Python 3.12 none macOS 11.0+ ARM64 Details
tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_10_13_x86_64.whl Python 3.12 none macOS 10.13+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl Python 3.11 none Linux glibc 2.17+ x86-64, Linux glibc 2.39+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl Python 3.11 none Linux glibc 2.35+ x86-64, Linux glibc 2.17+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_11_0_arm64.whl Python 3.11 none macOS 11.0+ ARM64 Details
tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_10_13_x86_64.whl Python 3.11 none macOS 10.13+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl Python 3.10 none Linux glibc 2.17+ x86-64, Linux glibc 2.39+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl Python 3.10 none Linux glibc 2.35+ x86-64, Linux glibc 2.17+ x86-64 Details
tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_11_0_arm64.whl Python 3.10 none macOS 11.0+ ARM64 Details
tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_10_13_x86_64.whl Python 3.10 none macOS 10.13+ x86-64 Details

Total release size: 38.2 MB

Release files / tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.39+ x86-64 Python 3.12
SHA-256 checksum
How to use checksums
21d17cc0eb3280fd51107a69d1b6b1bb777837b935fadc627f4081341902ccb3
BLAKE2b-256 checksum
How to use checksums
58205635685905d3eb15a4d475338f875c4c4443e4e9e736ec14a98b8594137b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.35+ x86-64 Python 3.12
SHA-256 checksum
How to use checksums
eb8d62961089253017f05033cbf913309c921b64489fe9ce1923a92484de9638
BLAKE2b-256 checksum
How to use checksums
8fc9d36974a62d8e5961d81bb2459dc7d6fc674ee3623bbb05f13216bb97ca6c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_11_0_arm64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_11_0_arm64.whl
Size 3.0 MB
Tags Python 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4112a6317438b8980a7ab46ba437fcc1455104f4150c8c07045d5e617a481a88
BLAKE2b-256 checksum
How to use checksums
d048c978a9ccb9df28fbd2b35b656c70851f3333bfd29b396baf333821842622
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_10_13_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py312-none-macosx_10_13_x86_64.whl
Size 2.9 MB
Tags Python 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
db6ceffb9aa1987f558e6d6e25726d5ecfdeda664ced838ee51201d27959ce29
BLAKE2b-256 checksum
How to use checksums
63fa5f6557b741708396dfffbce1b5e014bfad746f4c1fbe3b93bc665ab38734
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.39+ x86-64 Python 3.11
SHA-256 checksum
How to use checksums
7db63b28166edafd3fc8b42ea2c25675b8d4b1434c225d1618f06c4bb8a8e84c
BLAKE2b-256 checksum
How to use checksums
1dd8f8aee6b10004bf37061362937afab636ca4e45ce149580a6de16161bb327
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.35+ x86-64 Python 3.11
SHA-256 checksum
How to use checksums
90c93400aecdedd2e6de6091b62b465d2643f808b36822ef359f17ad178be48c
BLAKE2b-256 checksum
How to use checksums
fce8fc88829ae06afc5f272bc87d0486caa9169ce5bcc6f2b152e5d0848236ff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_11_0_arm64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_11_0_arm64.whl
Size 3.0 MB
Tags Python 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0fcd6e25c5b7f098b3e6c98e1b9b4b66b37f307bed3c7cd02505424fd741ff89
BLAKE2b-256 checksum
How to use checksums
50bcd52f619e1ed4a58ea3917b17bfa8cd15f857a5267e8445cb92c8f68a5036
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_10_13_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py311-none-macosx_10_13_x86_64.whl
Size 2.9 MB
Tags Python 3.11 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
c13c612a2df78053cda3efc9b69a0a0dd6e4fd440ea786829171b2baaaaadecf
BLAKE2b-256 checksum
How to use checksums
60a3fb494e1e9c834de0bbe551ba834655c1e478db82da5a6547b3b7b40f1ab4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.39+ x86-64 Python 3.10
SHA-256 checksum
How to use checksums
fd9a1aaa49bf3be2afa908087f3718bd4adc010f536cc56e4bbdace1663a3e83
BLAKE2b-256 checksum
How to use checksums
e6ff0ec81de59ed185f8beb961e1310f024909dbca02dfbb3105c7ceddbe16d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Size 3.4 MB
Tags Linux glibc 2.17+ x86-64 Linux glibc 2.35+ x86-64 Python 3.10
SHA-256 checksum
How to use checksums
3bbd1a429e777ffddf0b4c9b2249519a2ce9fbad2c2b918566c55d19412fa801
BLAKE2b-256 checksum
How to use checksums
a7b4a662a66aea5d60d1f41f58f6841103b3cd7a51e0778fd249f1fc038f21fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_11_0_arm64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_11_0_arm64.whl
Size 3.0 MB
Tags Python 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
72e89bfebea4ed4dcf91b763c0745607e9956f4b9e5da231f8956b0d34fbd5aa
BLAKE2b-256 checksum
How to use checksums
761d7db5eedfa69eeca42c8608366ca39815868707696f73fa73f7dbbc3d0463
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release files / tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_10_13_x86_64.whl

Download URL tesseract_decoder-0.1.1.dev20250807063041-py310-none-macosx_10_13_x86_64.whl
Size 2.9 MB
Tags Python 3.10 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
86a8773c68184004e6e48abf310da0f1994173888cd819ccffde123432bdd6df
BLAKE2b-256 checksum
How to use checksums
3894d9d5d80f31004bdf0efb1a5e5e040ed09566b2fa5befc292f0a401832817
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.9.23

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page