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

Uploaded Python 3.12macOS 11.0+ ARM64

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

Uploaded Python 3.11macOS 11.0+ ARM64

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

Uploaded Python 3.10macOS 11.0+ ARM64

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py312-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e70316ae0263b85309c3cbbd980da090e1e993919f8f87795bb61d41e163f1c5
MD5 7fea2110f8c060e718499dd76018408c
BLAKE2b-256 12d8651f354a63079b4727305716c2b1567dd67874466f6d914fad598117614a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py312-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e09cbaf6afbe328981b8860af7cd1b5935404a795f4f3397ccaa4c7220a2b4f2
MD5 70f68731e909e28b27a9a960eecb4c34
BLAKE2b-256 095e89768b324509f0ffaf6719bde4b8c4a3cf175e489f2ff5791d4e97ba2a8d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py312-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f3c71afaed02bc368ab6add48654517561bf2dc76f8a6ea0c30290a087bc8aaf
MD5 8933eed3b46141aa44e71b229f2b5404
BLAKE2b-256 f77bbf5decea631618521e9465b647d25687a7798deaf62309b0b837bf2ebe74

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py312-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 b9a433df4dc2bdc43e2fb8fbd38c2138f10f2e02f58d61102b7bc2bc6b2a3696
MD5 d0d5278c8be8d4657b8665278e4bd0f0
BLAKE2b-256 86fa86d92ef0d6954bdf32e5d2ce3305305b8abf3608a53ff357329a1c39f9ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py311-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a334e238d08c903f82887efca5018da1155ed61686976e3edf0966aa74254fa4
MD5 ec704a74797f03629adfc337554f43dd
BLAKE2b-256 8860a45800f68e775a123315b1c89d449a7c0b03ce46cc3d61b93506bb756ef8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py311-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a2ac5ae3123af794d977d3b580ca5aad3ca240e0a827bd475fe6d8963a17d79e
MD5 63c71b667b26e90c5147b74de86b82a7
BLAKE2b-256 ad319d5d37aaa4bea61897f508872efc3f1ff20cf794618b66948912eaf3bb8b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py311-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89678b72f807c8e1c73c929c4e280979b4133b94bb044be29c549fe0aa61fa59
MD5 ca10d5b53284de3b31f7d30c12efc816
BLAKE2b-256 e579dc341d53fca0d919e85dc2f612c35127759eba0234196c95b0ef3fa911c0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py311-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 759bd67c93edad53048894cfa0bbe945c6dba759bb183302f72a50398817668e
MD5 becd296c90dc840c2da326b707765a05
BLAKE2b-256 db378681a357c46f8e907b249b7e15afb5d5d9167fcdd936d712ce6036f0031e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py310-none-manylinux_2_39_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4c56eb4aa745fd05e6177e498c46d5a9110ebb812ef630fb393e696184ab46ca
MD5 28e11d2408429be4e868cb8b34996817
BLAKE2b-256 34b9734846eaff8ba97ae06a896794e1d1c3aecdecdde11d918fc15a81321053

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py310-none-manylinux_2_35_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 514b934dd653be200e5351d9a3599eedf7e1e235f1b0f3a949a64998b017c0b3
MD5 e531873309e355eb17279e53df1490f2
BLAKE2b-256 611872bc03743e318f51772a8c01c56b620b27bac09a8244ba3da93fdcdbe0ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py310-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 374716556a832df9760c9a6cf48cf7f36b397bee0a0de6f441859769b85b19fe
MD5 0abd483e790493e2825b4627ad52d683
BLAKE2b-256 62bbb043af3384fbde6903d72c9478d2f8e3f6d4d1595addfac4605ba413d2c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tesseract_decoder-0.1.1.dev20250805223733-py310-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0234ff7231d55fd85923485226e57bf33f47bbd79ebc0734c123acf6a2f5a77c
MD5 650e84b21ed4dd1a0725695fd7622959
BLAKE2b-256 5fe063810382d0992d12754a95118ef6d93dc5c9d374f1e20db2c4896a8978da

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