FAILURE MAP
← Case archive

FA-91256 / Quantum circuit simulation / Open access

Bit-flip channel contracts the x and y axes · case 01

A bit flip leaves |0> at z = 1 while shrinking x.

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

ROOT CAUSE

The bit-flip channel scales x and y, the axes a phase flip would affect.

THE FAILURE

The bit-flip channel scales x and y, the axes a phase flip would affect.

Unsuccessful approach: The attempted repair scales only z and forgets y.

Case contract

Input [[x, y, z], channels] (decimal strings). Apply in order: depol p (r -> (1-p) r), dephase p (x, y scaled by 1-2p), bitflip p (y, z scaled by 1-2p), ampdamp g (x, y scaled by sqrt(1-g), z -> g + (1-g) z toward |0> at z=+1), h ((x,y,z) -> (z,-y,x)), s ((x,y) -> (-y,x)), x ((y,z) -> (-y,-z)). Return the final vector rounded to 6 decimals.

Why this case matters

Single-qubit noise channels on the Bloch ball are the standard sanity model for T1/T2 behaviour; axis or scale slips mislead calibration.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    bx, by, bz = [float(v) for v in x[0]]
    for ch in x[1]:
        kind = ch[0]
        if kind == 'depol':
            p = float(ch[1])
            bx, by, bz = (1 - p) * bx, (1 - p) * by, (1 - p) * bz
        elif kind == 'dephase':
            p = float(ch[1])
            bx, by = (1 - 2 * p) * bx, (1 - 2 * p) * by
        elif kind == 'bitflip':
            p = float(ch[1])
            bx, by = (1 - 2 * p) * bx, (1 - 2 * p) * by
        elif kind == 'ampdamp':
            g = float(ch[1])
            s = math.sqrt(1 - g)
            bx, by, bz = s * bx, s * by, g + (1 - g) * bz
        elif kind == 'h':
            bx, by, bz = bz, -by, bx
        elif kind == 's':
            bx, by = -by, bx
        elif kind == 'x':
            by, bz = -by, -bz
    return [round(v, 6) + 0.0 for v in (bx, by, bz)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: bit flip on |0>', [['0', '0', '1'], [['bitflip', '0.25']]], [0.0, 0.0, 0.5]], ['regression: random channel chain 0', [['0.0691', '-0.4004', '0.0791'], [['dephase', '0.2'], ['bitflip', '0.3'], ['s']]], [0.096096, 0.04146, 0.03164]], ['regression: random channel chain 3', [['0.2389', '-0.1722', '0.2639'], [['dephase', '0.1'], ['bitflip', '0.2'], ['x']]], [0.19112, 0.082656, -0.15834]], ['control: amplitude damping from |1>', [['0', '0', '-1'], [['ampdamp', '0.5']]], [0.0, 0.0, 0.0]], ['control: dephasing plus state', [['1', '0', '0'], [['dephase', '0.25']]], [0.5, 0.0, 0.0]], ['control: hadamard on y', [['0', '1', '0'], [['h']]], [0.0, -1.0, 0.0]], ['control: s on x', [['1', '0', '0'], [['s']]], [0.0, 1.0, 0.0]]], [['regression: random channel chain 4', [['-0.0477', '-0.2431', '-0.2391'], [['x'], ['depol', '0.5'], ['x'], ['bitflip', '0.1']]], [-0.02385, -0.09724, -0.09564]], ['regression: random channel chain 7', [['0.2531', '-0.7095', '0.5685'], [['ampdamp', '0.2'], ['bitflip', '0.1'], ['dephase', '0.2'], ['x']]], [0.135828, 0.304606, -0.52384]], ['regression: random channel chain 9', [['0.2932', '0.3716', '-0.2949'], [['x'], ['bitflip', '0.2'], ['ampdamp', '0.3']]], [0.245309, -0.186542, 0.423858]], ['control: x on |+i>', [['0', '1', '0'], [['x']]], [0.0, -1.0, 0.0]], ['control: depolarize', [['0.6', '0', '0.8'], [['depol', '0.1']]], [0.54, 0.0, 0.72]], ['control: random channel chain 1', [['0.2317', '0.4662', '-0.3393'], [['h'], ['ampdamp', '0.1'], ['h'], ['h']]], [-0.321888, -0.442276, 0.30853]], ['control: random channel chain 2', [['0.0766', '-0.6718', '0.0357'], [['s']]], [0.6718, 0.0766, 0.0357]]], [['regression: random channel chain 10', [['0.0325', '0.65', '0.2184'], [['depol', '0.2'], ['ampdamp', '0.05'], ['bitflip', '0.05'], ['h']]], [0.194386, -0.45615, 0.025342]], ['regression: random channel chain 14', [['-0.1159', '-0.3227', '0.1975'], [['bitflip', '0.3'], ['h'], ['bitflip', '0.1'], ['dephase', '0.3']]], [0.0316, 0.041306, -0.09272]], ['regression: random channel chain 9', [['0.2932', '0.3716', '-0.2949'], [['x'], ['bitflip', '0.2'], ['ampdamp', '0.3']]], [0.245309, -0.186542, 0.423858]], ['control: random channel chain 5', [['-0.4729', '-0.0797', '-0.3692'], [['h'], ['s'], ['dephase', '0.1']]], [-0.06376, -0.29536, -0.4729]], ['control: random channel chain 6', [['0.394', '0.1792', '-0.6952'], [['x']]], [0.394, -0.1792, 0.6952]], ['control: random channel chain 8', [['0.255', '-0.4128', '-0.2664'], [['x'], ['dephase', '0.05'], ['h'], ['depol', '0.05']]], [0.25308, -0.352944, 0.218025]], ['control: random channel chain 11', [['0.2608', '0.1361', '-0.2576'], [['x'], ['depol', '0.05']]], [0.24776, -0.129295, 0.24472]]], [['regression: random channel chain 22', [['-0.2189', '-0.6148', '-0.4907'], [['bitflip', '0.5'], ['h'], ['depol', '0.3']]], [0.0, 0.0, -0.15323]], ['regression: random channel chain 23', [['0.0404', '0.3288', '-0.4147'], [['depol', '0.5'], ['depol', '0.1'], ['bitflip', '0.5']]], [0.01818, 0.0, 0.0]], ['regression: random channel chain 14', [['-0.1159', '-0.3227', '0.1975'], [['bitflip', '0.3'], ['h'], ['bitflip', '0.1'], ['dephase', '0.3']]], [0.0316, 0.041306, -0.09272]], ['control: random channel chain 12', [['0.3838', '0.2434', '0.1995'], [['x'], ['s'], ['depol', '0.5'], ['dephase', '0.05']]], [0.10953, 0.17271, -0.09975]], ['control: random channel chain 13', [['-0.3842', '-0.4838', '0.2088'], [['h'], ['depol', '0.05']]], [0.19836, 0.45961, -0.36499]], ['control: random channel chain 15', [['0.2915', '0.4987', '-0.2812'], [['ampdamp', '0.1'], ['s'], ['x']]], [-0.473108, -0.276541, 0.15308]], ['control: random channel chain 16', [['0.0125', '-0.322', '0.0664'], [['h'], ['ampdamp', '0.05']]], [0.064719, 0.313847, 0.061875]]], [['regression: random channel chain 26', [['-0.4382', '0.0441', '-0.3433'], [['depol', '0.1'], ['bitflip', '0.5'], ['ampdamp', '0.2']]], [-0.352744, 0.0, 0.2]], ['regression: random channel chain 30', [['0.1688', '-0.0706', '0.2751'], [['bitflip', '0.2'], ['depol', '0.1'], ['s'], ['dephase', '0.1']]], [0.030499, 0.121536, 0.148554]], ['regression: random channel chain 22', [['-0.2189', '-0.6148', '-0.4907'], [['bitflip', '0.5'], ['h'], ['depol', '0.3']]], [0.0, 0.0, -0.15323]], ['control: random channel chain 17', [['0.1445', '-0.5422', '-0.0485'], [['s'], ['s'], ['dephase', '0.2'], ['dephase', '0.05']]], [-0.07803, 0.292788, -0.0485]], ['control: random channel chain 19', [['0.6907', '-0.2493', '0.6355'], [['depol', '0.5'], ['dephase', '0.05'], ['depol', '0.05']]], [0.295274, -0.106576, 0.301862]], ['control: random channel chain 20', [['0.1424', '0.3599', '0.436'], [['dephase', '0.3'], ['depol', '0.5']]], [0.02848, 0.07198, 0.218]], ['control: random channel chain 21', [['-0.2637', '0.1353', '-0.5641'], [['x']]], [-0.2637, -0.1353, 0.5641]]]]
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: bit flip on |0>[0.0, 0.0, 1.0][0.0, 0.0, 0.5]Failed
regression: random channel chain 0[0.096096, 0.016584, 0.0791][0.096096, 0.04146, 0.03164]Failed
regression: random channel chain 3[0.114672, 0.082656, -0.2639][0.19112, 0.082656, -0.15834]Failed
control: amplitude damping from |1>[0.0, 0.0, 0.0][0.0, 0.0, 0.0]Passed
control: dephasing plus state[0.5, 0.0, 0.0][0.5, 0.0, 0.0]Passed
control: hadamard on y[0.0, -1.0, 0.0][0.0, -1.0, 0.0]Passed
control: s on x[0.0, 1.0, 0.0][0.0, 1.0, 0.0]Passed

SHA-256 / 879a713e3023eb9561e34e37943cd9e94ec8f9fb932306204c5b1ef550314a57

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
    bx, by, bz = [float(v) for v in x[0]]
    for ch in x[1]:
        kind = ch[0]
        if kind == 'depol':
            p = float(ch[1])
            bx, by, bz = (1 - p) * bx, (1 - p) * by, (1 - p) * bz
        elif kind == 'dephase':
            p = float(ch[1])
            bx, by = (1 - 2 * p) * bx, (1 - 2 * p) * by
        elif kind == 'bitflip':
            p = float(ch[1])
            bz = (1 - 2 * p) * bz
        elif kind == 'ampdamp':
            g = float(ch[1])
            s = math.sqrt(1 - g)
            bx, by, bz = s * bx, s * by, g + (1 - g) * bz
        elif kind == 'h':
            bx, by, bz = bz, -by, bx
        elif kind == 's':
            bx, by = -by, bx
        elif kind == 'x':
            by, bz = -by, -bz
    return [round(v, 6) + 0.0 for v in (bx, by, bz)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: bit flip on |0>', [['0', '0', '1'], [['bitflip', '0.25']]], [0.0, 0.0, 0.5]], ['regression: random channel chain 0', [['0.0691', '-0.4004', '0.0791'], [['dephase', '0.2'], ['bitflip', '0.3'], ['s']]], [0.096096, 0.04146, 0.03164]], ['regression: random channel chain 3', [['0.2389', '-0.1722', '0.2639'], [['dephase', '0.1'], ['bitflip', '0.2'], ['x']]], [0.19112, 0.082656, -0.15834]], ['control: amplitude damping from |1>', [['0', '0', '-1'], [['ampdamp', '0.5']]], [0.0, 0.0, 0.0]], ['control: dephasing plus state', [['1', '0', '0'], [['dephase', '0.25']]], [0.5, 0.0, 0.0]], ['control: hadamard on y', [['0', '1', '0'], [['h']]], [0.0, -1.0, 0.0]], ['control: s on x', [['1', '0', '0'], [['s']]], [0.0, 1.0, 0.0]]], [['regression: random channel chain 4', [['-0.0477', '-0.2431', '-0.2391'], [['x'], ['depol', '0.5'], ['x'], ['bitflip', '0.1']]], [-0.02385, -0.09724, -0.09564]], ['regression: random channel chain 7', [['0.2531', '-0.7095', '0.5685'], [['ampdamp', '0.2'], ['bitflip', '0.1'], ['dephase', '0.2'], ['x']]], [0.135828, 0.304606, -0.52384]], ['regression: random channel chain 9', [['0.2932', '0.3716', '-0.2949'], [['x'], ['bitflip', '0.2'], ['ampdamp', '0.3']]], [0.245309, -0.186542, 0.423858]], ['control: x on |+i>', [['0', '1', '0'], [['x']]], [0.0, -1.0, 0.0]], ['control: depolarize', [['0.6', '0', '0.8'], [['depol', '0.1']]], [0.54, 0.0, 0.72]], ['control: random channel chain 1', [['0.2317', '0.4662', '-0.3393'], [['h'], ['ampdamp', '0.1'], ['h'], ['h']]], [-0.321888, -0.442276, 0.30853]], ['control: random channel chain 2', [['0.0766', '-0.6718', '0.0357'], [['s']]], [0.6718, 0.0766, 0.0357]]], [['regression: random channel chain 10', [['0.0325', '0.65', '0.2184'], [['depol', '0.2'], ['ampdamp', '0.05'], ['bitflip', '0.05'], ['h']]], [0.194386, -0.45615, 0.025342]], ['regression: random channel chain 14', [['-0.1159', '-0.3227', '0.1975'], [['bitflip', '0.3'], ['h'], ['bitflip', '0.1'], ['dephase', '0.3']]], [0.0316, 0.041306, -0.09272]], ['regression: random channel chain 9', [['0.2932', '0.3716', '-0.2949'], [['x'], ['bitflip', '0.2'], ['ampdamp', '0.3']]], [0.245309, -0.186542, 0.423858]], ['control: random channel chain 5', [['-0.4729', '-0.0797', '-0.3692'], [['h'], ['s'], ['dephase', '0.1']]], [-0.06376, -0.29536, -0.4729]], ['control: random channel chain 6', [['0.394', '0.1792', '-0.6952'], [['x']]], [0.394, -0.1792, 0.6952]], ['control: random channel chain 8', [['0.255', '-0.4128', '-0.2664'], [['x'], ['dephase', '0.05'], ['h'], ['depol', '0.05']]], [0.25308, -0.352944, 0.218025]], ['control: random channel chain 11', [['0.2608', '0.1361', '-0.2576'], [['x'], ['depol', '0.05']]], [0.24776, -0.129295, 0.24472]]], [['regression: random channel chain 22', [['-0.2189', '-0.6148', '-0.4907'], [['bitflip', '0.5'], ['h'], ['depol', '0.3']]], [0.0, 0.0, -0.15323]], ['regression: random channel chain 23', [['0.0404', '0.3288', '-0.4147'], [['depol', '0.5'], ['depol', '0.1'], ['bitflip', '0.5']]], [0.01818, 0.0, 0.0]], ['regression: random channel chain 14', [['-0.1159', '-0.3227', '0.1975'], [['bitflip', '0.3'], ['h'], ['bitflip', '0.1'], ['dephase', '0.3']]], [0.0316, 0.041306, -0.09272]], ['control: random channel chain 12', [['0.3838', '0.2434', '0.1995'], [['x'], ['s'], ['depol', '0.5'], ['dephase', '0.05']]], [0.10953, 0.17271, -0.09975]], ['control: random channel chain 13', [['-0.3842', '-0.4838', '0.2088'], [['h'], ['depol', '0.05']]], [0.19836, 0.45961, -0.36499]], ['control: random channel chain 15', [['0.2915', '0.4987', '-0.2812'], [['ampdamp', '0.1'], ['s'], ['x']]], [-0.473108, -0.276541, 0.15308]], ['control: random channel chain 16', [['0.0125', '-0.322', '0.0664'], [['h'], ['ampdamp', '0.05']]], [0.064719, 0.313847, 0.061875]]], [['regression: random channel chain 26', [['-0.4382', '0.0441', '-0.3433'], [['depol', '0.1'], ['bitflip', '0.5'], ['ampdamp', '0.2']]], [-0.352744, 0.0, 0.2]], ['regression: random channel chain 30', [['0.1688', '-0.0706', '0.2751'], [['bitflip', '0.2'], ['depol', '0.1'], ['s'], ['dephase', '0.1']]], [0.030499, 0.121536, 0.148554]], ['regression: random channel chain 22', [['-0.2189', '-0.6148', '-0.4907'], [['bitflip', '0.5'], ['h'], ['depol', '0.3']]], [0.0, 0.0, -0.15323]], ['control: random channel chain 17', [['0.1445', '-0.5422', '-0.0485'], [['s'], ['s'], ['dephase', '0.2'], ['dephase', '0.05']]], [-0.07803, 0.292788, -0.0485]], ['control: random channel chain 19', [['0.6907', '-0.2493', '0.6355'], [['depol', '0.5'], ['dephase', '0.05'], ['depol', '0.05']]], [0.295274, -0.106576, 0.301862]], ['control: random channel chain 20', [['0.1424', '0.3599', '0.436'], [['dephase', '0.3'], ['depol', '0.5']]], [0.02848, 0.07198, 0.218]], ['control: random channel chain 21', [['-0.2637', '0.1353', '-0.5641'], [['x']]], [-0.2637, -0.1353, 0.5641]]]]
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: bit flip on |0>[0.0, 0.0, 0.5][0.0, 0.0, 0.5]Passed
regression: random channel chain 0[0.24024, 0.04146, 0.03164][0.096096, 0.04146, 0.03164]Failed
regression: random channel chain 3[0.19112, 0.13776, -0.15834][0.19112, 0.082656, -0.15834]Failed
control: amplitude damping from |1>[0.0, 0.0, 0.0][0.0, 0.0, 0.0]Passed
control: dephasing plus state[0.5, 0.0, 0.0][0.5, 0.0, 0.0]Passed
control: hadamard on y[0.0, -1.0, 0.0][0.0, -1.0, 0.0]Passed
control: s on x[0.0, 1.0, 0.0][0.0, 1.0, 0.0]Passed

SHA-256 / d93f36332b1aa0dfec0a54ef880c364f5f4fa51c4d47a64feca591951113f744

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

Case digest / 4b0b0014a66d8900e6b9b243eb7f76fb1b38e6a26d245ca625b295bb5a016f7e