FA-91036 / Quantum circuit simulation / Open access
Depth scheduler records clbit levels only for measurements · case 01
A measurement into c0 issued after a gate conditioned on c0 is placed before that read completes.
ROOT CAUSE
Clbit levels are updated only when the op is a measurement, so condition reads do not order later writes.
THE FAILURE
Clbit levels are updated only when the op is a measurement, so condition reads do not order later writes.
Unsuccessful approach: The attempted repair records reads one layer early (level - 1), still allowing overlap with the reader.
Case contract
Input [nq, nc, ops]; ops are [name, qubits], ["measure", [q], [c]], ["g", [q], "if", c] (classically conditioned), ["barrier", qubits] (empty list = all qubits) and ["id", [q]]. ASAP layering: each op lands one layer after the latest of its qubits and any clbit it reads or writes, and sets those levels; barriers align the listed qubits to their maximum without adding a layer; id costs nothing. Return [depth, qubit levels].
Why this case matters
Depth drives decoherence budgets and transpiler choices; scheduling slips misreport circuit cost.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
nq, nc, ops = x
ql = [0] * nq
cl = [0] * nc
for op in ops:
name, qs = op[0], op[1]
if name == 'barrier':
qs = qs or list(range(nq))
top = max(ql[q] for q in qs)
for q in qs:
ql[q] = top
continue
if name == 'id':
continue
cbits = []
if name == 'measure':
cbits = op[2]
elif len(op) > 2 and op[2] == 'if':
cbits = [op[3]]
level = 1 + max([ql[q] for q in qs] + [cl[c] for c in cbits])
for q in qs:
ql[q] = level
if name == 'measure':
for c in cbits:
cl[c] = level
return [max(ql + cl + [0]), ql]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: barrier aligns everything', [3, 1, [['h', [0]], ['h', [0]], ['barrier', []], ['x', [2]]]], [3, [2, 2, 3]]], ['control: partial barrier', [3, 1, [['h', [0]], ['barrier', [0, 1]], ['x', [1]], ['x', [2]]]], [2, [1, 2, 1]]], ['control: toffoli waits on all', [3, 0, [['h', [2]], ['h', [2]], ['ccx', [0, 1, 2]], ['x', [0]]]], [4, [4, 3, 3]]], ['control: cx waits on target', [2, 0, [['h', [1]], ['h', [1]], ['cx', [0, 1]]]], [3, [3, 3]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: identity is free', [1, 0, [['id', [0]], ['id', [0]], ['x', [0]]]], [1, [1]]], ['control: conditioned gate after measure', [2, 1, [['h', [0]], ['measure', [0], [0]], ['x', [1], 'if', 0]]], [3, [2, 3]]], ['control: measure after conditioned read', [2, 1, [['h', [0]], ['h', [0]], ['h', [0]], ['x', [1], 'if', 0], ['measure', [1], [0]]]], [3, [3, 2]]], ['control: empty circuit', [2, 1, []], [0, [0, 0]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: random schedule 0', [1, 2, [['x', [0]], ['rz', [0]], ['measure', [0], [0]], ['x', [0]], ['barrier', [0]], ['x', [0], 'if', 1], ['x', [0], 'if', 1], ['x', [0]], ['measure', [0], [0]]]], [8, [8]]], ['control: random schedule 1', [4, 2, [['ccx', [1, 0, 3]], ['ccx', [2, 1, 3]], ['barrier', [0, 1, 2, 3]], ['cx', [1, 0]], ['id', [1]], ['cx', [1, 2]], ['cx', [0, 2]]]], [5, [5, 4, 5, 2]]], ['control: random schedule 2', [1, 1, [['h', [0]], ['rz', [0]], ['x', [0]], ['x', [0], 'if', 0], ['x', [0]], ['x', [0]], ['x', [0], 'if', 0], ['id', [0]]]], [7, [7]]], ['control: random schedule 3', [1, 2, [['h', [0]], ['h', [0]]]], [2, [2]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: random schedule 4', [4, 1, [['measure', [3], [0]], ['ccx', [2, 1, 0]], ['ccx', [0, 2, 3]]]], [2, [2, 1, 2, 2]]], ['control: random schedule 5', [3, 2, [['ccx', [0, 1, 2]], ['ccx', [2, 1, 0]], ['barrier', [0, 1, 2]], ['x', [1]]]], [3, [2, 3, 2]]], ['control: random schedule 6', [4, 2, [['barrier', [2]], ['cx', [1, 2]], ['ccx', [2, 3, 0]]]], [2, [2, 1, 2, 2]]], ['control: random schedule 7', [4, 2, [['x', [2], 'if', 1], ['x', [1]], ['barrier', [2]], ['cx', [0, 1]], ['h', [2]]]], [2, [2, 2, 2, 0]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: random schedule 8', [1, 1, [['x', [0], 'if', 0], ['rz', [0]], ['rz', [0]], ['h', [0]], ['rz', [0]], ['h', [0]], ['measure', [0], [0]], ['rz', [0]]]], [8, [8]]], ['control: random schedule 9', [3, 1, [['cx', [2, 1]], ['h', [1]], ['barrier', [1, 2]]]], [2, [0, 2, 2]]], ['control: random schedule 10', [4, 1, [['id', [2]]]], [0, [0, 0, 0, 0]]], ['control: random schedule 11', [2, 2, [['barrier', [0]], ['barrier', [1]], ['h', [1]], ['h', [0]], ['id', [0]], ['cx', [0, 1]], ['x', [1]], ['rz', [0]]]], [3, [3, 3]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: late read then early-qubit measure | [4, [1, 4]] | [5, [5, 4]] | Failed |
| regression: read then measure other clbit writer | [3, [1, 2, 3]] | [5, [4, 5, 3]] | Failed |
| regression: random schedule 26 | [5, [3, 5]] | [6, [4, 6]] | Failed |
| control: barrier aligns everything | [3, [2, 2, 3]] | [3, [2, 2, 3]] | Passed |
| control: partial barrier | [2, [1, 2, 1]] | [2, [1, 2, 1]] | Passed |
| control: toffoli waits on all | [4, [4, 3, 3]] | [4, [4, 3, 3]] | Passed |
| control: cx waits on target | [3, [3, 3]] | [3, [3, 3]] | Passed |
SHA-256 / 3d201cdb2239ef9b08ebd28fed2d4d9ef5b4ef26e86fad5b1441abf4cdb1decb
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
nq, nc, ops = x
ql = [0] * nq
cl = [0] * nc
for op in ops:
name, qs = op[0], op[1]
if name == 'barrier':
qs = qs or list(range(nq))
top = max(ql[q] for q in qs)
for q in qs:
ql[q] = top
continue
if name == 'id':
continue
cbits = []
if name == 'measure':
cbits = op[2]
elif len(op) > 2 and op[2] == 'if':
cbits = [op[3]]
level = 1 + max([ql[q] for q in qs] + [cl[c] for c in cbits])
for q in qs:
ql[q] = level
for c in cbits:
cl[c] = level if name == 'measure' else level - 1
return [max(ql + cl + [0]), ql]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: barrier aligns everything', [3, 1, [['h', [0]], ['h', [0]], ['barrier', []], ['x', [2]]]], [3, [2, 2, 3]]], ['control: partial barrier', [3, 1, [['h', [0]], ['barrier', [0, 1]], ['x', [1]], ['x', [2]]]], [2, [1, 2, 1]]], ['control: toffoli waits on all', [3, 0, [['h', [2]], ['h', [2]], ['ccx', [0, 1, 2]], ['x', [0]]]], [4, [4, 3, 3]]], ['control: cx waits on target', [2, 0, [['h', [1]], ['h', [1]], ['cx', [0, 1]]]], [3, [3, 3]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: identity is free', [1, 0, [['id', [0]], ['id', [0]], ['x', [0]]]], [1, [1]]], ['control: conditioned gate after measure', [2, 1, [['h', [0]], ['measure', [0], [0]], ['x', [1], 'if', 0]]], [3, [2, 3]]], ['control: measure after conditioned read', [2, 1, [['h', [0]], ['h', [0]], ['h', [0]], ['x', [1], 'if', 0], ['measure', [1], [0]]]], [3, [3, 2]]], ['control: empty circuit', [2, 1, []], [0, [0, 0]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: random schedule 0', [1, 2, [['x', [0]], ['rz', [0]], ['measure', [0], [0]], ['x', [0]], ['barrier', [0]], ['x', [0], 'if', 1], ['x', [0], 'if', 1], ['x', [0]], ['measure', [0], [0]]]], [8, [8]]], ['control: random schedule 1', [4, 2, [['ccx', [1, 0, 3]], ['ccx', [2, 1, 3]], ['barrier', [0, 1, 2, 3]], ['cx', [1, 0]], ['id', [1]], ['cx', [1, 2]], ['cx', [0, 2]]]], [5, [5, 4, 5, 2]]], ['control: random schedule 2', [1, 1, [['h', [0]], ['rz', [0]], ['x', [0]], ['x', [0], 'if', 0], ['x', [0]], ['x', [0]], ['x', [0], 'if', 0], ['id', [0]]]], [7, [7]]], ['control: random schedule 3', [1, 2, [['h', [0]], ['h', [0]]]], [2, [2]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: random schedule 4', [4, 1, [['measure', [3], [0]], ['ccx', [2, 1, 0]], ['ccx', [0, 2, 3]]]], [2, [2, 1, 2, 2]]], ['control: random schedule 5', [3, 2, [['ccx', [0, 1, 2]], ['ccx', [2, 1, 0]], ['barrier', [0, 1, 2]], ['x', [1]]]], [3, [2, 3, 2]]], ['control: random schedule 6', [4, 2, [['barrier', [2]], ['cx', [1, 2]], ['ccx', [2, 3, 0]]]], [2, [2, 1, 2, 2]]], ['control: random schedule 7', [4, 2, [['x', [2], 'if', 1], ['x', [1]], ['barrier', [2]], ['cx', [0, 1]], ['h', [2]]]], [2, [2, 2, 2, 0]]]], [['regression: late read then early-qubit measure', [2, 1, [['h', [1]], ['h', [1]], ['h', [1]], ['x', [1], 'if', 0], ['measure', [0], [0]]]], [5, [5, 4]]], ['regression: read then measure other clbit writer', [3, 2, [['h', [2]], ['h', [2]], ['z', [2], 'if', 1], ['measure', [0], [1]], ['x', [1], 'if', 1]]], [5, [4, 5, 3]]], ['regression: random schedule 26', [2, 2, [['measure', [0], [0]], ['x', [1], 'if', 0], ['measure', [0], [0]], ['cx', [0, 1]], ['h', [1]], ['rz', [1]]]], [6, [4, 6]]], ['control: random schedule 8', [1, 1, [['x', [0], 'if', 0], ['rz', [0]], ['rz', [0]], ['h', [0]], ['rz', [0]], ['h', [0]], ['measure', [0], [0]], ['rz', [0]]]], [8, [8]]], ['control: random schedule 9', [3, 1, [['cx', [2, 1]], ['h', [1]], ['barrier', [1, 2]]]], [2, [0, 2, 2]]], ['control: random schedule 10', [4, 1, [['id', [2]]]], [0, [0, 0, 0, 0]]], ['control: random schedule 11', [2, 2, [['barrier', [0]], ['barrier', [1]], ['h', [1]], ['h', [0]], ['id', [0]], ['cx', [0, 1]], ['x', [1]], ['rz', [0]]]], [3, [3, 3]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: late read then early-qubit measure | [4, [4, 4]] | [5, [5, 4]] | Failed |
| regression: read then measure other clbit writer | [4, [3, 4, 3]] | [5, [4, 5, 3]] | Failed |
| regression: random schedule 26 | [5, [3, 5]] | [6, [4, 6]] | Failed |
| control: barrier aligns everything | [3, [2, 2, 3]] | [3, [2, 2, 3]] | Passed |
| control: partial barrier | [2, [1, 2, 1]] | [2, [1, 2, 1]] | Passed |
| control: toffoli waits on all | [4, [4, 3, 3]] | [4, [4, 3, 3]] | Passed |
| control: cx waits on target | [3, [3, 3]] | [3, [3, 3]] | Passed |
SHA-256 / 5ef860e64f1894a50634b3f2e913cd8317c3050eeb3a11cd1f4fa1c319d4785b
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 7 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
A deterministic bounded teaching model with a stipulated toy contract; amplitudes are rounded to fixed decimals for strict JSON output. It is not a production quantum SDK and claims no standards conformance. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:32.242196+00:00.
Case digest / 63cbdcfe5d10519a47f3b970a1f3733a53cb39f7a61a589d13922970eef47d56