def flip(bits, qubit):
    return tuple(bit ^ int(i == qubit) for i, bit in enumerate(bits))
def parity_syndrome(bits):
    return bits[0] ^ bits[1], bits[1] ^ bits[2]
def operator_syndrome(bits):
    return tuple((-1) ** parity for parity in parity_syndrome(bits))
codes = ((0, 0, 0), (1, 1, 1))
baseline = {q: parity_syndrome(flip(codes[0], q)) for q in range(3)}
counterfactual = {q: operator_syndrome(flip(codes[1], q)) for q in range(3)}
correction = {(1, 0): 0, (1, 1): 1, (0, 1): 2}
assert baseline == {0: (1, 0), 1: (1, 1), 2: (0, 1)}
assert all(operator_syndrome(flip(word, q)) == tuple((-1) ** x for x in baseline[q]) for word in codes for q in range(3))
assert all(flip(flip(word, q), correction[parity_syndrome(flip(word, q))]) == word for word in codes for q in range(3))
print(f"PASS: 47 syndrome evidence parity={baseline} operator={counterfactual}")
