Public QEC datasets, hash verified

Every group working on decoding wrangles the same handful of public releases by hand, and every one of them writes the same paragraph about which files they used. qbc corpus holds a pinned manifest so that paragraph can say something checkable.

Nothing is redistributed here. These are other people’s datasets, published under their own terms. The manifest records where the publisher put the file, the sha256 of a copy fetched from there, the size, the date it was fetched, and the citation the publisher asks for.

$ qbc corpus list
NAME                     PUBLISHER                      SIZE  DOI
----------------------------------------------------------------------------------------
quera-surface-code       QuEra Computing         996,799,635  10.5281/zenodo.15685795
willow-105q-d3-d5-d7     Google Quantum AI     5,716,907,033  10.5281/zenodo.13273331

Nothing is mirrored here. Fetch from the publisher, then run qbc corpus verify.
$ qbc corpus show willow-105q-d3-d5-d7
willow-105q-d3-d5-d7
  Surface code memory experiments at distances 3, 5 and 7 on a 105 qubit device, with detection
  events and observable flips per shot.
  publisher : Google Quantum AI
  doi       : 10.5281/zenodo.13273331
  file      : google_105Q_surface_code_d3_d5_d7.zip (5,716,907,033 bytes)
  url       : https://zenodo.org/records/13273331/files/google_105Q_surface_code_d3_d5_d7.zip
  sha256    : 1e8e3b4f5f35ba4fd9b4a8448473f37a7090b404fd6eff0c00188092876070dd
  fetched   : 2026-05-31
  licence   : as stated on the Zenodo record
  cite      : Google Quantum AI and Collaborators, Quantum error correction below the surface
              code threshold, Nature (2025). Dataset: https://doi.org/10.5281/zenodo.13273331

Check your copy

$ qbc corpus verify willow-105q-d3-d5-d7 ~/data/google_105Q_surface_code_d3_d5_d7.zip
VERIFIED: google_105Q_surface_code_d3_d5_d7.zip matches the pinned digest for
willow-105q-d3-d5-d7 (5,716,907,033 bytes). Cite: Google Quantum AI and Collaborators, Quantum
error correction below the surface code threshold, Nature (2025).
Dataset: https://doi.org/10.5281/zenodo.13273331
  expected: 1e8e3b4f5f35ba4fd9b4a8448473f37a7090b404fd6eff0c00188092876070dd
  actual  : 1e8e3b4f5f35ba4fd9b4a8448473f37a7090b404fd6eff0c00188092876070dd

Exit 0 means the bytes match. Exit 2 means they do not, and the two digests are printed. Exit 1 means the file is not there or the name is not in the manifest.

A truncated download and an edited file look identical to every other tool in the stack, and both change a decoder benchmark silently. The message says which of the two it looks like: a size mismatch is usually a transfer that stopped, a size match with a different digest is different content.

from qb_compiler.corpus import load_corpus, corpus_citation

path = load_corpus("willow-105q-d3-d5-d7", "~/data/google_105Q_surface_code_d3_d5_d7.zip")
print(corpus_citation("willow-105q-d3-d5-d7"))

load_corpus raises rather than returning a path when the digest does not match. A benchmark run on unverified bytes is worse than one that did not run, because the number it produces looks the same.

What a digest does and does not tell you

It says your copy is byte for byte the copy that was fetched on the date in the entry. It does not say the publisher has not re-released since under the same DOI, which happens and is legitimate. A mismatch is information to chase, not an accusation: check the record’s version history first.

Why this is not a downloader

There is no qbc corpus fetch. These archives run to gigabytes, the publishers already serve them properly, and a half implemented resumable download inside a compiler package is a liability rather than a feature. Fetch with whatever you already trust, then verify.

Coming

qbcal-2026-02 is being archived. Archive record and DOI to follow, at which point it gets a manifest entry with a real digest like every other row. It is named here rather than listed, because a manifest entry whose digest and DOI are placeholders is worse than no entry: it looks checkable and is not. Grep DOI_QBCAL_2026_02_PENDING for the one place that changes when the record lands.

What is not listed

Everything else in the manifest is somebody else’s public release. A dataset of ours belongs there once it has been archived and has a record a reader can fetch it from, and not before.