FAILURE MAP
← Case archive

FA-91181 / Quantum circuit simulation / Open access

Dynamic circuit measure swaps qubit and clbit operands · case 01

measure 0 -> c1 copies qubit 1 into clbit 0.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The measure op is unpacked as (clbit, qubit) though the contract lists (qubit, clbit).

THE FAILURE

The measure op is unpacked as (clbit, qubit) though the contract lists (qubit, clbit).

Unsuccessful approach: The attempted repair unpacks correctly but writes to the clbit with the same index as the qubit.

Case contract

Input [nq, nc, ops] on computational basis states only: ["x", q], ["cx", c, t], ["ccx", a, b, t], ["swap", a, b], ["measure", q, c], ["reset", q], ["x_if", q, value] (flip q when the classical register value, clbit 0 = LSB, equals value). Return {"qubits": bits with qubit nq-1 leftmost, "clbits": bits with clbit nc-1 leftmost}.

Why this case matters

Feed-forward and reset semantics are central to dynamic circuits; register-value or reset slips change control flow.

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
    q = [0] * nq
    c = [0] * nc
    for op in ops:
        name = op[0]
        if name == 'x':
            q[op[1]] ^= 1
        elif name == 'cx':
            if q[op[1]]:
                q[op[2]] ^= 1
        elif name == 'ccx':
            if q[op[1]] and q[op[2]]:
                q[op[3]] ^= 1
        elif name == 'swap':
            a, b = op[1], op[2]
            q[a], q[b] = q[b], q[a]
        elif name == 'measure':
            _, cb, qb = op
            c[cb] = q[qb]
        elif name == 'reset':
            q[op[1]] = 0
        elif name == 'x_if':
            creg = sum(bit << i for i, bit in enumerate(c))
            if creg == op[2]:
                q[op[1]] ^= 1
    return {'qubits': ''.join(str(b) for b in reversed(q)), 'clbits': ''.join(str(b) for b in reversed(c))}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: measure into other clbit', [2, 2, [['x', 0], ['measure', 0, 1]]], {'qubits': '01', 'clbits': '10'}], ['regression: random dynamic 5', [4, 4, [['x_if', 1, 4], ['reset', 1], ['x_if', 1, 10], ['x', 0], ['measure', 2, 1], ['measure', 1, 0]]], {'qubits': '0001', 'clbits': '0000'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['control: feed-forward on register value 2', [2, 2, [['x', 1], ['measure', 1, 1], ['x_if', 0, 2]]], {'qubits': '11', 'clbits': '10'}], ['control: reset excited qubit', [1, 1, [['x', 0], ['reset', 0], ['measure', 0, 0]]], {'qubits': '0', 'clbits': '0'}], ['control: toffoli one control', [3, 3, [['x', 0], ['ccx', 0, 1, 2]]], {'qubits': '001', 'clbits': '000'}], ['control: toffoli no controls', [3, 3, [['ccx', 0, 1, 2]]], {'qubits': '000', 'clbits': '000'}]], [['regression: random dynamic 24', [2, 2, [['measure', 1, 0], ['swap', 1, 0], ['x', 0], ['cx', 0, 1], ['x_if', 0, 0], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '01', 'clbits': '00'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['regression: random dynamic 43', [3, 3, [['x', 1], ['swap', 1, 2], ['x_if', 2, 6], ['measure', 2, 0], ['measure', 2, 0], ['x', 2]]], {'qubits': '000', 'clbits': '001'}], ['control: swap excitation', [2, 2, [['x', 0], ['swap', 0, 1]]], {'qubits': '10', 'clbits': '00'}], ['control: asymmetric output', [3, 3, [['x', 0], ['measure', 0, 0]]], {'qubits': '001', 'clbits': '001'}], ['control: random dynamic 0', [4, 4, [['cx', 2, 1], ['reset', 2], ['x_if', 1, 5], ['x_if', 3, 6], ['reset', 2], ['cx', 3, 1], ['swap', 1, 2], ['x', 0]]], {'qubits': '0001', 'clbits': '0000'}], ['control: random dynamic 1', [2, 2, [['cx', 1, 0], ['x_if', 0, 2], ['x', 1], ['swap', 0, 1], ['reset', 1], ['cx', 1, 0], ['x', 1]]], {'qubits': '11', 'clbits': '00'}]], [['regression: random dynamic 59', [3, 3, [['cx', 2, 1], ['x', 1], ['measure', 1, 0], ['x_if', 0, 1], ['reset', 2]]], {'qubits': '011', 'clbits': '001'}], ['regression: measure into other clbit', [2, 2, [['x', 0], ['measure', 0, 1]]], {'qubits': '01', 'clbits': '10'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['control: random dynamic 2', [3, 3, [['cx', 2, 1], ['x', 1], ['measure', 1, 1], ['x', 0], ['x_if', 2, 5], ['reset', 1], ['cx', 2, 0], ['swap', 1, 0], ['cx', 1, 0]]], {'qubits': '011', 'clbits': '010'}], ['control: random dynamic 3', [4, 4, [['ccx', 3, 0, 2], ['x_if', 1, 8], ['x_if', 1, 10], ['measure', 0, 3], ['reset', 0], ['measure', 0, 1]]], {'qubits': '0000', 'clbits': '0000'}], ['control: random dynamic 4', [2, 2, [['x', 0], ['measure', 1, 1]]], {'qubits': '01', 'clbits': '00'}], ['control: random dynamic 6', [2, 2, [['reset', 0], ['x', 1], ['swap', 1, 0], ['reset', 0], ['measure', 1, 0], ['x_if', 0, 1], ['cx', 0, 1], ['swap', 1, 0], ['cx', 1, 0]]], {'qubits': '00', 'clbits': '00'}]], [['regression: random dynamic 22', [4, 4, [['swap', 3, 1], ['x', 2], ['measure', 1, 2], ['ccx', 0, 1, 2]]], {'qubits': '0100', 'clbits': '0000'}], ['regression: random dynamic 24', [2, 2, [['measure', 1, 0], ['swap', 1, 0], ['x', 0], ['cx', 0, 1], ['x_if', 0, 0], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '01', 'clbits': '00'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['control: random dynamic 7', [4, 4, [['ccx', 1, 0, 2], ['x_if', 1, 6]]], {'qubits': '0000', 'clbits': '0000'}], ['control: random dynamic 8', [3, 3, [['reset', 2], ['x', 1], ['ccx', 0, 2, 1], ['measure', 1, 1], ['reset', 2]]], {'qubits': '010', 'clbits': '010'}], ['control: random dynamic 9', [2, 2, [['cx', 0, 1], ['cx', 0, 1], ['measure', 0, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 0, 1], ['measure', 0, 1], ['measure', 0, 0], ['swap', 1, 0]]], {'qubits': '00', 'clbits': '00'}], ['control: random dynamic 10', [3, 3, [['x', 2], ['measure', 2, 2], ['ccx', 2, 1, 0], ['swap', 0, 2], ['cx', 2, 0], ['x', 1], ['ccx', 2, 0, 1], ['cx', 2, 0], ['x', 1]]], {'qubits': '001', 'clbits': '100'}]], [['regression: random dynamic 43', [3, 3, [['x', 1], ['swap', 1, 2], ['x_if', 2, 6], ['measure', 2, 0], ['measure', 2, 0], ['x', 2]]], {'qubits': '000', 'clbits': '001'}], ['regression: random dynamic 59', [3, 3, [['cx', 2, 1], ['x', 1], ['measure', 1, 0], ['x_if', 0, 1], ['reset', 2]]], {'qubits': '011', 'clbits': '001'}], ['repair check: random dynamic 52', [3, 3, [['x', 2], ['ccx', 0, 2, 1], ['cx', 1, 2], ['measure', 1, 2], ['x_if', 2, 3], ['measure', 2, 1], ['x', 2], ['x', 1]]], {'qubits': '010', 'clbits': '010'}], ['control: random dynamic 11', [3, 3, [['reset', 2], ['x', 2]]], {'qubits': '100', 'clbits': '000'}], ['control: random dynamic 12', [3, 3, [['x', 1], ['x', 2]]], {'qubits': '110', 'clbits': '000'}], ['control: random dynamic 13', [2, 2, [['x_if', 1, 0], ['x', 0], ['swap', 1, 0], ['x', 1], ['cx', 1, 0], ['x_if', 1, 3], ['measure', 1, 1], ['swap', 1, 0], ['x', 1]]], {'qubits': '00', 'clbits': '00'}], ['control: random dynamic 14', [2, 2, [['measure', 1, 0], ['reset', 0], ['measure', 0, 1], ['x_if', 1, 3], ['cx', 1, 0], ['cx', 0, 1], ['x_if', 1, 1], ['swap', 1, 0]]], {'qubits': '00', 'clbits': '00'}]]]
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 fixtureActualExpectedOutcome
regression: measure into other clbit{'clbits': '00', 'qubits': '01'}{'clbits': '10', 'qubits': '01'}Failed
regression: random dynamic 5{'clbits': '0010', 'qubits': '0001'}{'clbits': '0000', 'qubits': '0001'}Failed
regression: random dynamic 38{'clbits': '01', 'qubits': '11'}{'clbits': '10', 'qubits': '11'}Failed
control: feed-forward on register value 2{'clbits': '10', 'qubits': '11'}{'clbits': '10', 'qubits': '11'}Passed
control: reset excited qubit{'clbits': '0', 'qubits': '0'}{'clbits': '0', 'qubits': '0'}Passed
control: toffoli one control{'clbits': '000', 'qubits': '001'}{'clbits': '000', 'qubits': '001'}Passed
control: toffoli no controls{'clbits': '000', 'qubits': '000'}{'clbits': '000', 'qubits': '000'}Passed

SHA-256 / 049e3e46883c0ad4a4c2c7cf7949129fa84c03a95e66a10c6425e866c8f4e51d

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
    q = [0] * nq
    c = [0] * nc
    for op in ops:
        name = op[0]
        if name == 'x':
            q[op[1]] ^= 1
        elif name == 'cx':
            if q[op[1]]:
                q[op[2]] ^= 1
        elif name == 'ccx':
            if q[op[1]] and q[op[2]]:
                q[op[3]] ^= 1
        elif name == 'swap':
            a, b = op[1], op[2]
            q[a], q[b] = q[b], q[a]
        elif name == 'measure':
            _, qb, cb = op
            c[qb] = q[qb]
        elif name == 'reset':
            q[op[1]] = 0
        elif name == 'x_if':
            creg = sum(bit << i for i, bit in enumerate(c))
            if creg == op[2]:
                q[op[1]] ^= 1
    return {'qubits': ''.join(str(b) for b in reversed(q)), 'clbits': ''.join(str(b) for b in reversed(c))}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: measure into other clbit', [2, 2, [['x', 0], ['measure', 0, 1]]], {'qubits': '01', 'clbits': '10'}], ['regression: random dynamic 5', [4, 4, [['x_if', 1, 4], ['reset', 1], ['x_if', 1, 10], ['x', 0], ['measure', 2, 1], ['measure', 1, 0]]], {'qubits': '0001', 'clbits': '0000'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['control: feed-forward on register value 2', [2, 2, [['x', 1], ['measure', 1, 1], ['x_if', 0, 2]]], {'qubits': '11', 'clbits': '10'}], ['control: reset excited qubit', [1, 1, [['x', 0], ['reset', 0], ['measure', 0, 0]]], {'qubits': '0', 'clbits': '0'}], ['control: toffoli one control', [3, 3, [['x', 0], ['ccx', 0, 1, 2]]], {'qubits': '001', 'clbits': '000'}], ['control: toffoli no controls', [3, 3, [['ccx', 0, 1, 2]]], {'qubits': '000', 'clbits': '000'}]], [['regression: random dynamic 24', [2, 2, [['measure', 1, 0], ['swap', 1, 0], ['x', 0], ['cx', 0, 1], ['x_if', 0, 0], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '01', 'clbits': '00'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['regression: random dynamic 43', [3, 3, [['x', 1], ['swap', 1, 2], ['x_if', 2, 6], ['measure', 2, 0], ['measure', 2, 0], ['x', 2]]], {'qubits': '000', 'clbits': '001'}], ['control: swap excitation', [2, 2, [['x', 0], ['swap', 0, 1]]], {'qubits': '10', 'clbits': '00'}], ['control: asymmetric output', [3, 3, [['x', 0], ['measure', 0, 0]]], {'qubits': '001', 'clbits': '001'}], ['control: random dynamic 0', [4, 4, [['cx', 2, 1], ['reset', 2], ['x_if', 1, 5], ['x_if', 3, 6], ['reset', 2], ['cx', 3, 1], ['swap', 1, 2], ['x', 0]]], {'qubits': '0001', 'clbits': '0000'}], ['control: random dynamic 1', [2, 2, [['cx', 1, 0], ['x_if', 0, 2], ['x', 1], ['swap', 0, 1], ['reset', 1], ['cx', 1, 0], ['x', 1]]], {'qubits': '11', 'clbits': '00'}]], [['regression: random dynamic 59', [3, 3, [['cx', 2, 1], ['x', 1], ['measure', 1, 0], ['x_if', 0, 1], ['reset', 2]]], {'qubits': '011', 'clbits': '001'}], ['regression: measure into other clbit', [2, 2, [['x', 0], ['measure', 0, 1]]], {'qubits': '01', 'clbits': '10'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['control: random dynamic 2', [3, 3, [['cx', 2, 1], ['x', 1], ['measure', 1, 1], ['x', 0], ['x_if', 2, 5], ['reset', 1], ['cx', 2, 0], ['swap', 1, 0], ['cx', 1, 0]]], {'qubits': '011', 'clbits': '010'}], ['control: random dynamic 3', [4, 4, [['ccx', 3, 0, 2], ['x_if', 1, 8], ['x_if', 1, 10], ['measure', 0, 3], ['reset', 0], ['measure', 0, 1]]], {'qubits': '0000', 'clbits': '0000'}], ['control: random dynamic 4', [2, 2, [['x', 0], ['measure', 1, 1]]], {'qubits': '01', 'clbits': '00'}], ['control: random dynamic 6', [2, 2, [['reset', 0], ['x', 1], ['swap', 1, 0], ['reset', 0], ['measure', 1, 0], ['x_if', 0, 1], ['cx', 0, 1], ['swap', 1, 0], ['cx', 1, 0]]], {'qubits': '00', 'clbits': '00'}]], [['regression: random dynamic 22', [4, 4, [['swap', 3, 1], ['x', 2], ['measure', 1, 2], ['ccx', 0, 1, 2]]], {'qubits': '0100', 'clbits': '0000'}], ['regression: random dynamic 24', [2, 2, [['measure', 1, 0], ['swap', 1, 0], ['x', 0], ['cx', 0, 1], ['x_if', 0, 0], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '01', 'clbits': '00'}], ['regression: random dynamic 38', [2, 2, [['x_if', 0, 1], ['measure', 1, 0], ['x_if', 1, 0], ['cx', 1, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 1, 0]]], {'qubits': '11', 'clbits': '10'}], ['control: random dynamic 7', [4, 4, [['ccx', 1, 0, 2], ['x_if', 1, 6]]], {'qubits': '0000', 'clbits': '0000'}], ['control: random dynamic 8', [3, 3, [['reset', 2], ['x', 1], ['ccx', 0, 2, 1], ['measure', 1, 1], ['reset', 2]]], {'qubits': '010', 'clbits': '010'}], ['control: random dynamic 9', [2, 2, [['cx', 0, 1], ['cx', 0, 1], ['measure', 0, 0], ['swap', 0, 1], ['measure', 0, 1], ['swap', 0, 1], ['measure', 0, 1], ['measure', 0, 0], ['swap', 1, 0]]], {'qubits': '00', 'clbits': '00'}], ['control: random dynamic 10', [3, 3, [['x', 2], ['measure', 2, 2], ['ccx', 2, 1, 0], ['swap', 0, 2], ['cx', 2, 0], ['x', 1], ['ccx', 2, 0, 1], ['cx', 2, 0], ['x', 1]]], {'qubits': '001', 'clbits': '100'}]], [['regression: random dynamic 43', [3, 3, [['x', 1], ['swap', 1, 2], ['x_if', 2, 6], ['measure', 2, 0], ['measure', 2, 0], ['x', 2]]], {'qubits': '000', 'clbits': '001'}], ['regression: random dynamic 59', [3, 3, [['cx', 2, 1], ['x', 1], ['measure', 1, 0], ['x_if', 0, 1], ['reset', 2]]], {'qubits': '011', 'clbits': '001'}], ['repair check: random dynamic 52', [3, 3, [['x', 2], ['ccx', 0, 2, 1], ['cx', 1, 2], ['measure', 1, 2], ['x_if', 2, 3], ['measure', 2, 1], ['x', 2], ['x', 1]]], {'qubits': '010', 'clbits': '010'}], ['control: random dynamic 11', [3, 3, [['reset', 2], ['x', 2]]], {'qubits': '100', 'clbits': '000'}], ['control: random dynamic 12', [3, 3, [['x', 1], ['x', 2]]], {'qubits': '110', 'clbits': '000'}], ['control: random dynamic 13', [2, 2, [['x_if', 1, 0], ['x', 0], ['swap', 1, 0], ['x', 1], ['cx', 1, 0], ['x_if', 1, 3], ['measure', 1, 1], ['swap', 1, 0], ['x', 1]]], {'qubits': '00', 'clbits': '00'}], ['control: random dynamic 14', [2, 2, [['measure', 1, 0], ['reset', 0], ['measure', 0, 1], ['x_if', 1, 3], ['cx', 1, 0], ['cx', 0, 1], ['x_if', 1, 1], ['swap', 1, 0]]], {'qubits': '00', 'clbits': '00'}]]]
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 fixtureActualExpectedOutcome
regression: measure into other clbit{'clbits': '01', 'qubits': '01'}{'clbits': '10', 'qubits': '01'}Failed
regression: random dynamic 5{'clbits': '0000', 'qubits': '0001'}{'clbits': '0000', 'qubits': '0001'}Passed
regression: random dynamic 38{'clbits': '01', 'qubits': '11'}{'clbits': '10', 'qubits': '11'}Failed
control: feed-forward on register value 2{'clbits': '10', 'qubits': '11'}{'clbits': '10', 'qubits': '11'}Passed
control: reset excited qubit{'clbits': '0', 'qubits': '0'}{'clbits': '0', 'qubits': '0'}Passed
control: toffoli one control{'clbits': '000', 'qubits': '001'}{'clbits': '000', 'qubits': '001'}Passed
control: toffoli no controls{'clbits': '000', 'qubits': '000'}{'clbits': '000', 'qubits': '000'}Passed

SHA-256 / 96def8a7306676fcddf1bce95c94b54031ed84ebd4ce82745f68c1e526b7c844

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:33.618151+00:00.

Case digest / 96e8a3668ad8155befcf702cac5de080928efaf133003f91089547e124c6a291