Mutation report for check_pauli_rotation_gap.py: 32 single-point mutants; each must exit nonzero.
baseline (unmutated): exit 0, FAIL lines 0, stdout identical to expected_stdout.txt: yes

M01 [B1] Baer-Haah lower bound: numerator 4^n+16 -> 4^n+15
    edit: 'return Fr(q + 16, 16 * (q - 1))' -> 'return Fr(q + 15, 16 * (q - 1))'
    exit 1 | FAIL lines 3 | failing: [B1] [C1] [T]
M02 [W1] witness: one of the 30 hyperplane wedges dropped
    edit: 'W = {HM[h]: 1 for h in HYP}' -> 'W = {HM[h]: 1 for h in HYP[1:]}'
    exit 1 | FAIL lines 7 | failing: [W1] [W2] [W6] [W8] [W9] [N1] [T]
M03 [W1] affine-flat test uses OR instead of XOR
    edit: 'if all((lm >> (u ^ v)) & 1 for u in lin for v in lin):' -> 'if all((lm >> (u | v)) & 1 for u in lin for v in lin):'
    exit 1 | FAIL lines 2 | failing: [W1] [T]
M04 [W2] Z-charge: factor 2 dropped (c_s = |m| - |m & odd_s|)
    edit: 'return popc(m) - 2 * popc(m & ODD[s])' -> 'return popc(m) - popc(m & ODD[s])'
    exit 1 | FAIL lines 4 | failing: [W2] [W8] [N3] [T]
M05 [W3] echelon coordinates: delete the highest instead of the lowest set bit of s
    edit: 'p = (s & -s).bit_length() - 1  # lowest set bit' -> 'p = s.bit_length() - 1  # lowest set bit'
    exit 1 | FAIL lines 2 | failing: [W3] [T]
M06 [W3] GL(3,2) enumeration admits singular matrices (c2 = c0 + c1)
    edit: 'if c1 == c0 or c2 in (c0, c1, c0 ^ c1):' -> 'if c1 == c0 or c2 in (c0, c1):'
    exit 1 | FAIL lines 2 | failing: [W3] [T]
M07 [W4] wedge-sign parity test inv & 1 -> inv & 2
    edit: 'if inv & 1:' -> 'if inv & 2:'
    exit 1 | FAIL lines 2 | failing: [W4] [T]
M08 [W5] RM(1,3) built from half of the linear parts
    edit: 'for s in range(8) for c in (0, 1)})' -> 'for s in range(4) for c in (0, 1)})'
    exit 1 | FAIL lines 2 | failing: [W5] [T]
M09 [W6] Hadamard sign dropped (sqrt2 H -> all-ones block)
    edit: '(x | bj, (-1, 0) if x & bj else (1, 0))' -> '(x | bj, (1, 0) if x & bj else (1, 0))'
    exit 1 | FAIL lines 3 | failing: [W6] [S2] [T]
M10 [W6] wedge sorting sign ignored (every permutation even)
    edit: 'return (-1 if inv & 1 else 1), tuple(sorted(seq))' -> 'return (1 if inv & 1 else 1), tuple(sorted(seq))'
    exit 1 | FAIL lines 4 | failing: [W6] [W9] [N2] [T]
M11 [W6] CNOT_ct replaced by a Toffoli gate (a non-affine permutation) for most pairs
    edit: 'return lambda x: [(x ^ (((x >> c) & 1) << t), (1, 0))]' -> 'return lambda x: [(x ^ (((x >> c) & (x >> (3 - t)) & 1) << t), (1, 0))]'
    exit 1 | FAIL lines 3 | failing: [W6] [S2] [T]
M12 [W7] local reduction of Y uses sqrt2 H only (S omitted)
    edit: '(1, 1): "HS"}' -> '(1, 1): "H"}'
    exit 1 | FAIL lines 2 | failing: [W7] [T]
M13 [W7] Pauli phase i^{a.b} dropped in P_{a,b} (Y -> XZ, not Hermitian)
    edit: 'return x ^ a, (popc(a & b) + 2 * dot(b, x)) & 3' -> 'return x ^ a, (2 * dot(b, x)) & 3'
    exit 1 | FAIL lines 5 | failing: [W7] [W10] [S2] [E1] [T]
M14 [W8] neutral count uses charge >= 0 instead of charge == 0
    edit: 'neutral = {s: sum(1 for h in HYP if charge(s, HM[h]) == 0)' -> 'neutral = {s: sum(1 for h in HYP if charge(s, HM[h]) >= 0)'
    exit 1 | FAIL lines 2 | failing: [W8] [T]
M15 [W9] fermionic hopping sign dropped in H_P
    edit: 's = (popc(m & ((1 << hi) - (1 << (lo + 1)))) + dot(b, x)) & 1' -> 's = dot(b, x) & 1'
    exit 1 | FAIL lines 2 | failing: [W9] [T]
M16 [W9] H_P^2 = (-1)^{a.b} H'^2: the sign (-1)^{a.b} dropped
    edit: '    sg = -1 if popc(a & b) & 1 else 1\n    y = vec' -> '    sg = 1\n    y = vec'
    exit 1 | FAIL lines 5 | failing: [W9] [S3] [N1] [N2] [T]
M17 [W9] Pi_0 polynomial lacks the charge +-8 factor (c = 2, 4, 6 only)
    edit: 'CSQ8 = (4, 16, 36, 64)' -> 'CSQ8 = (4, 16, 36)'
    exit 1 | FAIL lines 3 | failing: [W9] [N1] [T]
M18 [W9] claimed eigenvalue 238/255 -> 237/255
    edit: 'total == {m: 147456 * 238 for m in W}' -> 'total == {m: 147456 * 237 for m in W}'
    exit 1 | FAIL lines 2 | failing: [W9] [T]
M19 [W10] claimed Casimir value 1088 -> 1089
    edit: '== {m: 1088}' -> '== {m: 1089}'
    exit 1 | FAIL lines 2 | failing: [W10] [T]
M20 [S1] divisibility modulus 2^m -> 2^(m+1)
    edit: 'all(k % 2 ** m == 0 for zm' -> 'all(k % 2 ** (m + 1) == 0 for zm'
    exit 1 | FAIL lines 2 | failing: [S1] [T]
M21 [S2] Bose-Burton: forbidden subspace dimension shifted by one
    edit: 'for v in range(dm, n):' -> 'for v in range(dm + 1, n):'
    exit 1 | FAIL lines 2 | failing: [S2] [T]
M22 [S2] S_j replaced by Z_j (phase i -> -1)
    edit: '[(x, (0, 1) if x & bj else (1, 0))]' -> '[(x, (-1, 0) if x & bj else (1, 0))]'
    exit 1 | FAIL lines 2 | failing: [S2] [T]
M23 [S3] Lambda^4 C^8 constant 3456 (= 64*63*6/7) -> 3455
    edit: '(3456 if i == j else 0) - T[i][j]' -> '(3455 if i == j else 0) - T[i][j]'
    exit 1 | FAIL lines 1 | failing: [S3]
M24 [S4] corollary margin (4^n - 3*2^n - 8) -> (4^n - 3*2^n - 7)
    edit: 'top - b2 == Fr(d * d - 3 * d - 8,' -> 'top - b2 == Fr(d * d - 3 * d - 7,'
    exit 1 | FAIL lines 1 | failing: [S4]
M25 [C1] code wedges selected by a 3-element XOR test
    edit: 'if el[0] ^ el[1] ^ el[2] ^ el[3]:' -> 'if el[0] ^ el[1] ^ el[2]:'
    exit 1 | FAIL lines 2 | failing: [C1] [C2]
M26 [N1] random sign patterns degenerate to all +1 (the witness itself)
    edit: 'qs.append(rq_lie({HM[h]: (-1 if (bits >> i) & 1 else 1)' -> 'qs.append(rq_lie({HM[h]: (1 if (bits >> i) & 1 else 1)'
    exit 1 | FAIL lines 1 | failing: [N1]
M27 [N2] weight-then-binary order degenerates to the binary order
    edit: '("weight-then-binary", [(popc(x), x) for x in range(D)])' -> '("weight-then-binary", [(0, x) for x in range(D)])'
    exit 1 | FAIL lines 1 | failing: [N2]
M28 [N3] neutrality test == 0 -> != 0
    edit: 'z = sum(1 for s in range(1, D) if charge(s, m) == 0)' -> 'z = sum(1 for s in range(1, D) if charge(s, m) != 0)'
    exit 1 | FAIL lines 1 | failing: [N3]
M29 [E1] theta grid 17 -> 8 angles (aliases the frequency-8 terms)
    edit: 'E1_THETAS = 17' -> 'E1_THETAS = 8'
    exit 1 | FAIL lines 1 | failing: [E1]
M30 [E1] eigenvalue 14/15 -> 13/15
    edit: 'abs(Kf - (14 / 15) * f0)' -> 'abs(Kf - (13 / 15) * f0)'
    exit 1 | FAIL lines 1 | failing: [E1]
M31 [E1] f(1) evaluated with B0 = {1,...,8} (not a hyperplane)
    edit: '[[1.0 if r == c else 0.0 for c in range(8)]' -> '[[1.0 if r == c + 1 else 0.0 for c in range(8)]'
    exit 1 | FAIL lines 1 | failing: [E1]
M32 [T] claimed norm 14/15 -> 13/15
    edit: 'norm = Fr(14, 15)' -> 'norm = Fr(13, 15)'
    exit 1 | FAIL lines 1 | failing: [T]

summary: 32/32 mutants exit nonzero; survivors: none

Notes.
- The round-49 frozen checker's surviving mutant (fermionic hopping sign dropped) is killed here (the hopping-sign
  mutant above): [W9] pins the hopping signs against the Leibniz-rule wedge expansion of drho(P).
- Equivalent edits, which no correct checker can detect, were deliberately not included: e^{i theta P} ->
  e^{-i theta P} in [E1] (the theta-average is symmetric); any other grid of N equally spaced angles with N not
  dividing 2, 4, 6 or 8 (N = 5, 7 or N >= 9; only the frequencies +-2, +-4, +-6, +-8 occur); a global sign on a
  Clifford generator (Lambda^8(-C) = Lambda^8(C)); the bit-reversed or Gray-code order in place of the binary order
  (shown to give the same w in [W4]); re-listing the 30 hyperplanes in another order.
