def syndrome(qubit, pauli):
    bit = tuple(int(i == qubit and pauli in "XY") for i in range(3))
    phase = tuple(int(i == qubit and pauli in "ZY") for i in range(3))
    parity = lambda v: (v[0] ^ v[1], v[1] ^ v[2])
    return parity(bit), parity(phase)
def decode(bits):
    return int(sum(bits) >= 2)
baseline = {(q, p): syndrome(q, p) for q in range(3) for p in "XYZ"}
counterfactual = decode((1, 1, 0))
single_x = [decode(tuple(logical ^ int(i == q) for i in range(3))) for logical in (0, 1) for q in range(3)]
assert single_x == [0, 0, 0, 1, 1, 1] and counterfactual == 1
assert all(baseline[q, "Y"] == (baseline[q, "X"][0], baseline[q, "Z"][1]) for q in range(3))
assert all(syndrome(q, "Z")[1] == syndrome(q, "X")[0] for q in range(3))
print(f"PASS: 48 code evidence classes={len(set(baseline.values()))} single_X={single_x} double_X={counterfactual}")
