Skip to content

Add GARI support to decoder CLIs - #277

Open
arshpreetmaan wants to merge 9 commits into
quantumlib:mainfrom
arshpreetmaan:gari-pr269-B-cpp
Open

Add GARI support to decoder CLIs#277
arshpreetmaan wants to merge 9 commits into
quantumlib:mainfrom
arshpreetmaan:gari-pr269-B-cpp

Conversation

@arshpreetmaan

@arshpreetmaan arshpreetmaan commented Jul 27, 2026

Copy link
Copy Markdown
Collaborator

Summary

This PR adds C++ CLI support for consuming the GARI matrix and layout files produced by the Python utilities in #273.

  • Add --gari-layout support to Tesseract and Simplex.
  • Validate the GARI layout schema, detector counts, detector mapping, and observable counts.
  • Map physical detector events from circuits or shot files into the corresponding GARI matrix rows.
  • Treat virtual detector rows as zero when constructing decoder shots.
  • Use physical-then-virtual detector traversal by default in Tesseract when specified by the layout. Explicit detector-order options continue to override this default.
  • Record GARI layout information in the statistics output.

Simplex consumes the detector mapping but does not interpret or change detector ordering.

This is the C++ CLI portion split from the broader implementation previously proposed in #269. The GARI transformation itself remains in the Python utility PR #273.

Example

Using

python src/py/_tesseract_py_util/gari.py \
    --circuit circuit_file.stim \
    --prior xor \
    --out-dir gari_output

which produces:

gari_output/circuit_file_gari_xor.dem
gari_output/circuit_file_gari_xor_layout.json

Tesseract can sample from the original circuit and decode using the GARI matrix:

./bazel-bin/src/tesseract \
    --circuit circuit_file.stim \
    --dem gari_output/circuit_file_gari_xor.dem \
    --gari-layout gari_output/circuit_file_gari_xor_layout.json \
    --sample-num-shots 100 \
    --sample-seed 1234 \
    --threads 1 \
    --pqlimit 1000000 \
    --beam 5 \
    --beam-climbing \
    --print-stats \
    --stats-out gari-stats.json

Detector-order options are intentionally omitted: a physical_then_virtual GARI layout makes Tesseract process the matrix rows in their stored order (recommended). Supplying explicit detector-order options overrides this behavior.

@arshpreetmaan
arshpreetmaan requested review from LalehB and noajshu July 27, 2026 07:58
@arshpreetmaan
arshpreetmaan requested a review from a team as a code owner July 27, 2026 07:58
Comment thread src/tesseract_main.cc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants