FAILURE MAP
← Case archive

FA-91361 / Digital signal filters / Open access

Biquad overwrites x[n-1] before moving it to x[n-2] · case 01

The x[n-2] tap always equals x[n-1], so b2 acts on the wrong sample.

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

ROOT CAUSE

The input delay line is shifted with two sequential assignments in the wrong order.

VERIFIED REPAIR

Shift simultaneously: x2, x1 = x1, s.

Unsuccessful approach: The attempted repair swaps the tuple targets, storing the current sample in x[n-2].

Case contract

Input [[b0, b1, b2, a0, a1, a2], samples]; coefficients are rational strings, normalized by a0 ("a0-zero" if a0 == 0). y[n] = b0 x[n] + b1 x[n-1] + b2 x[n-2] - a1 y[n-1] - a2 y[n-2] with zero initial state; return outputs as exact fraction strings.

Why this case matters

The biquad is the workhorse IIR section; sign, state or normalization slips produce unstable or wrong-gain filters.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
    b0, b1, b2, a0, a1, a2 = [Fraction(v) for v in x[0]]
    if a0 == 0:
        return 'a0-zero'
    b0, b1, b2, a1, a2 = b0 / a0, b1 / a0, b2 / a0, a1 / a0, a2 / a0
    x1 = x2 = y1 = y2 = Fraction(0)
    out = []
    for s in x[1]:
        y = b0 * s + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2
        x1 = s
        x2 = x1
        y2, y1 = y1, y
        out.append(str(y))
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: fir only', [['1', '2', '1', '1', '0', '0'], [1, 2, 3]], ['1', '4', '8']], ['regression: random biquad 0', [['1/3', '3/4', '1/2', '-1', '2', '1/3'], [2, 2]], ['-2/3', '-7/2']], ['repair check: a0 not one', [['2', '1', '0', '2', '1', '1/2'], [2, 0, 0, 1]], ['2', '0', '-1/2', '5/4']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['regression: random biquad 1', [['1/8', '-1/4', '3/4', '2', '1/2', '1/8'], [-2, 1, 2, 2, 0, 2]], ['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']]], [['regression: random biquad 2', [['1/2', '5/4', '1/2', '-1', '-1/2', '-1/2'], [-2, -2, 3, -3, 1]], ['1', '3', '0', '-11/4', '25/8']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']], ['regression: random biquad 0', [['1/3', '3/4', '1/2', '-1', '2', '1/3'], [2, 2]], ['-2/3', '-7/2']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['regression: random biquad 1', [['1/8', '-1/4', '3/4', '2', '1/2', '1/8'], [-2, 1, 2, 2, 0, 2]], ['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']]], [['regression: random biquad 5', [['1/2', '0', '-1/2', '-1', '-1/2', '-3/8'], [0, 2, -2, -1, 1]], ['0', '-1', '3/2', '9/8', '-21/8']], ['regression: random biquad 6', [['1/8', '0', '5/4', '1', '-1/2', '5/4'], [1, 1, 1, 0, 3, 2]], ['1/8', '3/16', '21/16', '107/64', '105/128', '-183/128']], ['regression: random biquad 2', [['1/2', '5/4', '1/2', '-1', '-1/2', '-1/2'], [-2, -2, 3, -3, 1]], ['1', '3', '0', '-11/4', '25/8']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']]], [['regression: random biquad 9', [['3/4', '1/3', '1/2', '-1', '0', '1/8'], [-1, -1, 2]], ['3/4', '13/12', '-55/96']], ['regression: random biquad 10', [['3/4', '2', '1/2', '1', '-3/8', '1/3'], [2, 2, -3]], ['3/2', '97/16', '579/128']], ['regression: random biquad 4', [['-3/8', '1/3', '-1/2', '2', '1/3', '0'], [-1, 1]], ['3/16', '-37/96']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']]], [['regression: random biquad 13', [['1/8', '-1/4', '5/4', '2', '-1/4', '1/2'], [1, -1, 2]], ['1/16', '-23/128', '857/1024']], ['regression: random biquad 14', [['-1/4', '1/8', '-1/4', '1', '5/4', '0'], [-2, -3, -3, -2]], ['1/2', '-1/8', '33/32', '-53/128']], ['regression: random biquad 6', [['1/8', '0', '5/4', '1', '-1/2', '5/4'], [1, 1, 1, 0, 3, 2]], ['1/8', '3/16', '21/16', '107/64', '105/128', '-183/128']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['regression: random biquad 4', [['-3/8', '1/3', '-1/2', '2', '1/3', '0'], [-1, 1]], ['3/16', '-37/96']]]]
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: fir only['1', '5', '9']['1', '4', '8']Failed
regression: random biquad 0['-2/3', '-9/2']['-2/3', '-7/2']Failed
repair check: a0 not one['2', '0', '-1/2', '5/4']['2', '0', '-1/2', '5/4']Passed
control: pure feedback impulse['1', '1/2', '1/4', '1/8']['1', '1/2', '1/4', '1/8']Passed
control: second order feedback['1', '0', '-1/4', '0', '1/16']['1', '0', '-1/4', '0', '1/16']Passed
control: random biquad 7['0', '-9/8']['0', '-9/8']Passed
regression: random biquad 1['-1/8', '-13/32', '31/64', '271/512', '691/2048', '31/4096']['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']Failed

SHA-256 / 597e97b4a7873344cb56e73f6b2f37bb9d37992a8d1f6fa14156452faca8336f

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
    b0, b1, b2, a0, a1, a2 = [Fraction(v) for v in x[0]]
    if a0 == 0:
        return 'a0-zero'
    b0, b1, b2, a1, a2 = b0 / a0, b1 / a0, b2 / a0, a1 / a0, a2 / a0
    x1 = x2 = y1 = y2 = Fraction(0)
    out = []
    for s in x[1]:
        y = b0 * s + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2
        x2, x1 = s, x1
        y2, y1 = y1, y
        out.append(str(y))
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: fir only', [['1', '2', '1', '1', '0', '0'], [1, 2, 3]], ['1', '4', '8']], ['regression: random biquad 0', [['1/3', '3/4', '1/2', '-1', '2', '1/3'], [2, 2]], ['-2/3', '-7/2']], ['repair check: a0 not one', [['2', '1', '0', '2', '1', '1/2'], [2, 0, 0, 1]], ['2', '0', '-1/2', '5/4']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['regression: random biquad 1', [['1/8', '-1/4', '3/4', '2', '1/2', '1/8'], [-2, 1, 2, 2, 0, 2]], ['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']]], [['regression: random biquad 2', [['1/2', '5/4', '1/2', '-1', '-1/2', '-1/2'], [-2, -2, 3, -3, 1]], ['1', '3', '0', '-11/4', '25/8']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']], ['regression: random biquad 0', [['1/3', '3/4', '1/2', '-1', '2', '1/3'], [2, 2]], ['-2/3', '-7/2']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['regression: random biquad 1', [['1/8', '-1/4', '3/4', '2', '1/2', '1/8'], [-2, 1, 2, 2, 0, 2]], ['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']]], [['regression: random biquad 5', [['1/2', '0', '-1/2', '-1', '-1/2', '-3/8'], [0, 2, -2, -1, 1]], ['0', '-1', '3/2', '9/8', '-21/8']], ['regression: random biquad 6', [['1/8', '0', '5/4', '1', '-1/2', '5/4'], [1, 1, 1, 0, 3, 2]], ['1/8', '3/16', '21/16', '107/64', '105/128', '-183/128']], ['regression: random biquad 2', [['1/2', '5/4', '1/2', '-1', '-1/2', '-1/2'], [-2, -2, 3, -3, 1]], ['1', '3', '0', '-11/4', '25/8']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']]], [['regression: random biquad 9', [['3/4', '1/3', '1/2', '-1', '0', '1/8'], [-1, -1, 2]], ['3/4', '13/12', '-55/96']], ['regression: random biquad 10', [['3/4', '2', '1/2', '1', '-3/8', '1/3'], [2, 2, -3]], ['3/2', '97/16', '579/128']], ['regression: random biquad 4', [['-3/8', '1/3', '-1/2', '2', '1/3', '0'], [-1, 1]], ['3/16', '-37/96']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']]], [['regression: random biquad 13', [['1/8', '-1/4', '5/4', '2', '-1/4', '1/2'], [1, -1, 2]], ['1/16', '-23/128', '857/1024']], ['regression: random biquad 14', [['-1/4', '1/8', '-1/4', '1', '5/4', '0'], [-2, -3, -3, -2]], ['1/2', '-1/8', '33/32', '-53/128']], ['regression: random biquad 6', [['1/8', '0', '5/4', '1', '-1/2', '5/4'], [1, 1, 1, 0, 3, 2]], ['1/8', '3/16', '21/16', '107/64', '105/128', '-183/128']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['regression: random biquad 4', [['-3/8', '1/3', '-1/2', '2', '1/3', '0'], [-1, 1]], ['3/16', '-37/96']]]]
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: fir only['1', '3', '5']['1', '4', '8']Failed
regression: random biquad 0['-2/3', '-3']['-2/3', '-7/2']Failed
repair check: a0 not one['2', '-1', '0', '5/4']['2', '0', '-1/2', '5/4']Failed
control: pure feedback impulse['1', '1/2', '1/4', '1/8']['1', '1/2', '1/4', '1/8']Passed
control: second order feedback['1', '0', '-1/4', '0', '1/16']['1', '0', '-1/4', '0', '1/16']Passed
control: random biquad 7['0', '-9/8']['0', '-9/8']Passed
regression: random biquad 1['-1/8', '-21/32', '43/64', '383/512', '1067/2048', '-213/4096']['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']Failed

SHA-256 / 553c3beda358cd0ba05dbae8e308a07d6e47a01a44ddfb6b7e1a4abf10988c7e

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
from fractions import Fraction
N = 1
observations = []
def solve(x):
    b0, b1, b2, a0, a1, a2 = [Fraction(v) for v in x[0]]
    if a0 == 0:
        return 'a0-zero'
    b0, b1, b2, a1, a2 = b0 / a0, b1 / a0, b2 / a0, a1 / a0, a2 / a0
    x1 = x2 = y1 = y2 = Fraction(0)
    out = []
    for s in x[1]:
        y = b0 * s + b1 * x1 + b2 * x2 - a1 * y1 - a2 * y2
        x2, x1 = x1, s
        y2, y1 = y1, y
        out.append(str(y))
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: fir only', [['1', '2', '1', '1', '0', '0'], [1, 2, 3]], ['1', '4', '8']], ['regression: random biquad 0', [['1/3', '3/4', '1/2', '-1', '2', '1/3'], [2, 2]], ['-2/3', '-7/2']], ['repair check: a0 not one', [['2', '1', '0', '2', '1', '1/2'], [2, 0, 0, 1]], ['2', '0', '-1/2', '5/4']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['regression: random biquad 1', [['1/8', '-1/4', '3/4', '2', '1/2', '1/8'], [-2, 1, 2, 2, 0, 2]], ['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']]], [['regression: random biquad 2', [['1/2', '5/4', '1/2', '-1', '-1/2', '-1/2'], [-2, -2, 3, -3, 1]], ['1', '3', '0', '-11/4', '25/8']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']], ['regression: random biquad 0', [['1/3', '3/4', '1/2', '-1', '2', '1/3'], [2, 2]], ['-2/3', '-7/2']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['regression: random biquad 1', [['1/8', '-1/4', '3/4', '2', '1/2', '1/8'], [-2, 1, 2, 2, 0, 2]], ['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']]], [['regression: random biquad 5', [['1/2', '0', '-1/2', '-1', '-1/2', '-3/8'], [0, 2, -2, -1, 1]], ['0', '-1', '3/2', '9/8', '-21/8']], ['regression: random biquad 6', [['1/8', '0', '5/4', '1', '-1/2', '5/4'], [1, 1, 1, 0, 3, 2]], ['1/8', '3/16', '21/16', '107/64', '105/128', '-183/128']], ['regression: random biquad 2', [['1/2', '5/4', '1/2', '-1', '-1/2', '-1/2'], [-2, -2, 3, -3, 1]], ['1', '3', '0', '-11/4', '25/8']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']]], [['regression: random biquad 9', [['3/4', '1/3', '1/2', '-1', '0', '1/8'], [-1, -1, 2]], ['3/4', '13/12', '-55/96']], ['regression: random biquad 10', [['3/4', '2', '1/2', '1', '-3/8', '1/3'], [2, 2, -3]], ['3/2', '97/16', '579/128']], ['regression: random biquad 4', [['-3/8', '1/3', '-1/2', '2', '1/3', '0'], [-1, 1]], ['3/16', '-37/96']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['regression: random biquad 3', [['-3/8', '5/4', '1/2', '2', '5/4', '1/8'], [-2, 0, -1, 3]], ['3/8', '-95/64', '303/512', '-5999/4096']]], [['regression: random biquad 13', [['1/8', '-1/4', '5/4', '2', '-1/4', '1/2'], [1, -1, 2]], ['1/16', '-23/128', '857/1024']], ['regression: random biquad 14', [['-1/4', '1/8', '-1/4', '1', '5/4', '0'], [-2, -3, -3, -2]], ['1/2', '-1/8', '33/32', '-53/128']], ['regression: random biquad 6', [['1/8', '0', '5/4', '1', '-1/2', '5/4'], [1, 1, 1, 0, 3, 2]], ['1/8', '3/16', '21/16', '107/64', '105/128', '-183/128']], ['control: second order feedback', [['1', '0', '0', '1', '0', '1/4'], [1, 0, 0, 0, 0]], ['1', '0', '-1/4', '0', '1/16']], ['control: random biquad 7', [['-3/8', '0', '-1/4', '1', '2', '1/8'], [0, 3]], ['0', '-9/8']], ['control: pure feedback impulse', [['1', '0', '0', '1', '-1/2', '0'], [1, 0, 0, 0]], ['1', '1/2', '1/4', '1/8']], ['regression: random biquad 4', [['-3/8', '1/3', '-1/2', '2', '1/3', '0'], [-1, 1]], ['3/16', '-37/96']]]]
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: fir only['1', '4', '8']['1', '4', '8']Passed
regression: random biquad 0['-2/3', '-7/2']['-2/3', '-7/2']Passed
repair check: a0 not one['2', '0', '-1/2', '5/4']['2', '0', '-1/2', '5/4']Passed
control: pure feedback impulse['1', '1/2', '1/4', '1/8']['1', '1/2', '1/4', '1/8']Passed
control: second order feedback['1', '0', '-1/4', '0', '1/16']['1', '0', '-1/4', '0', '1/16']Passed
control: random biquad 7['0', '-9/8']['0', '-9/8']Passed
regression: random biquad 1['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']['-1/8', '11/32', '-53/64', '223/512', '907/2048', '3019/4096']Passed

SHA-256 / 896a4314d28cd8c9b4ab16e21ce0f3a3493cff09115568808f7ffedd5a05bb88

Verification & scope

A deterministic bounded teaching model with a stipulated toy contract; exact rational arithmetic or fixed-decimal rounding keeps outputs strict JSON. It is not a production DSP library 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:35.376881+00:00.

Case digest / a28f8ab94d0d1a395c70b2d5288ce929bb09b50c0e3325bdeb8206d472cdd8b6