{"abstract":"An asymmetric impulse response comes out time-reversed.","category":"Digital signal filters","checks":7,"contract":"Input [taps, blocks] of integers. Filter the concatenated stream with y[n] = sum_k taps[k] x[n-k] (zero initial history) while processing block by block; return the outputs grouped per input block.","contract_signature":"x","evaluation_group":"w2-digital_signal_filters-streaming-fir-blocks","failed_approach":"The attempted repair reverses the delay line instead, which is the same correlation.","family":"w2-digital_signal_filters-streaming-fir-blocks-convolution-tap-alignment","id":"FA-91351","implementations":{"attempt":{"sha256":"64772681a41b64efa791ec32aedf1cbefb1ed42b554e127ef578062d0a7ff623","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b, blocks = x\n    hist = [0] * (len(b) - 1)\n    outs = []\n    for blk in blocks:\n        ys = []\n        for s in blk:\n            taps = [s] + hist\n            ys.append(sum(c * v for c, v in zip(b, reversed(taps))))\n            hist = taps[:len(b) - 1]\n        outs.append(ys)\n    return outs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: short blocks spanning history', [[1, 2, 3, 4], [[1], [0], [0, 5], [2]]], [[1], [2], [3, 9], [12]]], ['regression: asymmetric taps one block', [[1, -1, 2], [[1, 0, 0, 0]]], [[1, -1, 2, 0]]], ['regression: empty block in stream', [[2, 1], [[1, 2], [], [3]]], [[2, 5], [], [8]]], ['control: single tap', [[3], [[1, 2], [3]]], [[3, 6], [9]]], ['control: random stream 2', [[1, -3], [[]]], [[]]], ['control: random stream 3', [[-2], [[-5, 2, 0, 2], [-2, 3, -2, 5]]], [[10, -4, 0, -4], [4, -6, 4, -10]]], ['control: random stream 6', [[-3, 3, -1, 0], [[]]], [[]]]], [['regression: random stream 0', [[3, 1, 3, 3], [[3, 4, -2], [3], [5, 4, -3], []]], [[9, 15, 7], [28], [24, 20, 19], []]], ['regression: random stream 1', [[-1, -2, -3, 1], [[1, 2, 5, 4]]], [[-1, -4, -12, -19]]], ['regression: empty block in stream', [[2, 1], [[1, 2], [], [3]]], [[2, 5], [], [8]]], ['control: random stream 7', [[-2], [[], [1, 1, 1]]], [[], [-2, -2, -2]]], ['control: random stream 8', [[1], [[0, -4], [0, -5]]], [[0, -4], [0, -5]]], ['control: random stream 9', [[3, -3, -2, -2], [[]]], [[]]], ['control: random stream 10', [[0], [[5], [-2, 2, 3, -2], [1], [-4, 1, 1]]], [[0], [0, 0, 0, 0], [0], [0, 0, 0]]]], [['regression: random stream 5', [[3, -3, 2, -1, -1], [[-1, -5, -4, 4], []]], [[-3, -12, 1, 15], []]], ['regression: random stream 11', [[-3, -1], [[], [-3], [4, 5, 4]]], [[], [9], [-9, -19, -17]]], ['regression: random stream 1', [[-1, -2, -3, 1], [[1, 2, 5, 4]]], [[-1, -4, -12, -19]]], ['control: random stream 12', [[-3], [[2], [-5, 4]]], [[-6], [15, -12]]], ['control: random stream 13', [[3, -1, 0], [[]]], [[]]], ['control: random stream 14', [[-2], [[], [0, 0, 4, 2]]], [[], [0, 0, -8, -4]]], ['control: random stream 17', [[-3], [[1], [1, 4], [-1, 3, -3]]], [[-3], [-3, -12], [3, -9, 9]]]], [['regression: random stream 16', [[2, -2], [[-2, 5, 1, 2], [-4, 1, -5, -4]]], [[-4, 14, -8, 2], [-12, 10, -12, 2]]], ['regression: random stream 20', [[1, 1, -2], [[-3, 2]]], [[-3, -1]]], ['regression: random stream 5', [[3, -3, 2, -1, -1], [[-1, -5, -4, 4], []]], [[-3, -12, 1, 15], []]], ['control: random stream 18', [[-2], [[3, 5, 4], [-4, -1, -2, -2]]], [[-6, -10, -8], [8, 2, 4, 4]]], ['control: random stream 19', [[-3], [[2, -2, -5], [], [-1]]], [[-6, 6, 15], [], [3]]], ['control: random stream 21', [[2, 2, 2], [[-5, -5, 2, 0], [-5, -5]]], [[-10, -20, -16, -6], [-6, -20]]], ['control: random stream 22', [[2, -3, 0, -3, 2], [[-3, -4], [], [3, 0, -5]]], [[-6, 1], [], [18, 0, -4]]]], [['regression: random stream 26', [[2, 2, 1, 0], [[3, -4, 3], [-5, -1, 4, -4], [-5, -2, -4], [4, 5, 2]]], [[6, -2, 1], [-8, -9, 1, -1], [-14, -18, -17], [-2, 14, 18]]], ['regression: random stream 27', [[-3, -1, -1], [[-2, 3, -3, 0], [2, -2, 0]]], [[6, -7, 8, 0], [-3, 4, 0]]], ['regression: random stream 15', [[1, 0], [[-3, 5, -3], [-2, 4]]], [[-3, 5, -3], [-2, 4]]], ['control: random stream 24', [[0, 1, -3, 1], [[]]], [[]]], ['control: random stream 25', [[2], [[1, 0]]], [[2, 0]]], ['control: random stream 38', [[3, 3], [[-5, -3, 3]]], [[-15, -24, 0]]], ['control: random stream 41', [[1, 1], [[2, -2, 1, 3], [], [-5, 4, 1, -5]]], [[2, 0, -1, 4], [], [-2, -1, 5, -4]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"6f7ba9398f66e06beecfee004cb67e714472c08d32de59ce36f8dae2b67b6b50","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    b, blocks = x\n    hist = [0] * (len(b) - 1)\n    outs = []\n    for blk in blocks:\n        ys = []\n        for s in blk:\n            taps = [s] + hist\n            ys.append(sum(c * v for c, v in zip(reversed(b), taps)))\n            hist = taps[:len(b) - 1]\n        outs.append(ys)\n    return outs\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: short blocks spanning history', [[1, 2, 3, 4], [[1], [0], [0, 5], [2]]], [[1], [2], [3, 9], [12]]], ['regression: asymmetric taps one block', [[1, -1, 2], [[1, 0, 0, 0]]], [[1, -1, 2, 0]]], ['regression: empty block in stream', [[2, 1], [[1, 2], [], [3]]], [[2, 5], [], [8]]], ['control: single tap', [[3], [[1, 2], [3]]], [[3, 6], [9]]], ['control: random stream 2', [[1, -3], [[]]], [[]]], ['control: random stream 3', [[-2], [[-5, 2, 0, 2], [-2, 3, -2, 5]]], [[10, -4, 0, -4], [4, -6, 4, -10]]], ['control: random stream 6', [[-3, 3, -1, 0], [[]]], [[]]]], [['regression: random stream 0', [[3, 1, 3, 3], [[3, 4, -2], [3], [5, 4, -3], []]], [[9, 15, 7], [28], [24, 20, 19], []]], ['regression: random stream 1', [[-1, -2, -3, 1], [[1, 2, 5, 4]]], [[-1, -4, -12, -19]]], ['regression: empty block in stream', [[2, 1], [[1, 2], [], [3]]], [[2, 5], [], [8]]], ['control: random stream 7', [[-2], [[], [1, 1, 1]]], [[], [-2, -2, -2]]], ['control: random stream 8', [[1], [[0, -4], [0, -5]]], [[0, -4], [0, -5]]], ['control: random stream 9', [[3, -3, -2, -2], [[]]], [[]]], ['control: random stream 10', [[0], [[5], [-2, 2, 3, -2], [1], [-4, 1, 1]]], [[0], [0, 0, 0, 0], [0], [0, 0, 0]]]], [['regression: random stream 5', [[3, -3, 2, -1, -1], [[-1, -5, -4, 4], []]], [[-3, -12, 1, 15], []]], ['regression: random stream 11', [[-3, -1], [[], [-3], [4, 5, 4]]], [[], [9], [-9, -19, -17]]], ['regression: random stream 1', [[-1, -2, -3, 1], [[1, 2, 5, 4]]], [[-1, -4, -12, -19]]], ['control: random stream 12', [[-3], [[2], [-5, 4]]], [[-6], [15, -12]]], ['control: random stream 13', [[3, -1, 0], [[]]], [[]]], ['control: random stream 14', [[-2], [[], [0, 0, 4, 2]]], [[], [0, 0, -8, -4]]], ['control: random stream 17', [[-3], [[1], [1, 4], [-1, 3, -3]]], [[-3], [-3, -12], [3, -9, 9]]]], [['regression: random stream 16', [[2, -2], [[-2, 5, 1, 2], [-4, 1, -5, -4]]], [[-4, 14, -8, 2], [-12, 10, -12, 2]]], ['regression: random stream 20', [[1, 1, -2], [[-3, 2]]], [[-3, -1]]], ['regression: random stream 5', [[3, -3, 2, -1, -1], [[-1, -5, -4, 4], []]], [[-3, -12, 1, 15], []]], ['control: random stream 18', [[-2], [[3, 5, 4], [-4, -1, -2, -2]]], [[-6, -10, -8], [8, 2, 4, 4]]], ['control: random stream 19', [[-3], [[2, -2, -5], [], [-1]]], [[-6, 6, 15], [], [3]]], ['control: random stream 21', [[2, 2, 2], [[-5, -5, 2, 0], [-5, -5]]], [[-10, -20, -16, -6], [-6, -20]]], ['control: random stream 22', [[2, -3, 0, -3, 2], [[-3, -4], [], [3, 0, -5]]], [[-6, 1], [], [18, 0, -4]]]], [['regression: random stream 26', [[2, 2, 1, 0], [[3, -4, 3], [-5, -1, 4, -4], [-5, -2, -4], [4, 5, 2]]], [[6, -2, 1], [-8, -9, 1, -1], [-14, -18, -17], [-2, 14, 18]]], ['regression: random stream 27', [[-3, -1, -1], [[-2, 3, -3, 0], [2, -2, 0]]], [[6, -7, 8, 0], [-3, 4, 0]]], ['regression: random stream 15', [[1, 0], [[-3, 5, -3], [-2, 4]]], [[-3, 5, -3], [-2, 4]]], ['control: random stream 24', [[0, 1, -3, 1], [[]]], [[]]], ['control: random stream 25', [[2], [[1, 0]]], [[2, 0]]], ['control: random stream 38', [[3, 3], [[-5, -3, 3]]], [[-15, -24, 0]]], ['control: random stream 41', [[1, 1], [[2, -2, 1, 3], [], [-5, 4, 1, -5]]], [[2, 0, -1, 4], [], [-2, -1, 5, -4]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-digital_signal_filters-streaming-fir-blocks-convolution-tap-alignment","generated_at":"2026-09-29T14:51:35.093366+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Block-based FIR processing must carry history across buffer boundaries or every block edge glitches.","root_cause":"Coefficients are paired with the delay line in reversed order.","sha256":"ab13f146da56cc57d16a03a0eee2c0418ee3ca64fbddc9d2b7690db7b2e16564","title":"Streaming FIR correlates instead of convolving · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":38.18,"exit_code":1,"observations":[{"actual":[[4],[3],[2,21],[23]],"check":"regression: short blocks spanning history","expected":[[1],[2],[3,9],[12]],"passed":false},{"actual":[[2,-1,1,0]],"check":"regression: asymmetric taps one block","expected":[[1,-1,2,0]],"passed":false},{"actual":[[1,4],[],[7]],"check":"regression: empty block in stream","expected":[[2,5],[],[8]],"passed":false},{"actual":[[3,6],[9]],"check":"control: single tap","expected":[[3,6],[9]],"passed":true},{"actual":[[]],"check":"control: random stream 2","expected":[[]],"passed":true},{"actual":[[10,-4,0,-4],[4,-6,4,-10]],"check":"control: random stream 3","expected":[[10,-4,0,-4],[4,-6,4,-10]],"passed":true},{"actual":[[]],"check":"control: random stream 6","expected":[[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: short blocks spanning history\", \"actual\": [[4], [3], [2, 21], [23]], \"expected\": [[1], [2], [3, 9], [12]], \"passed\": false}, {\"check\": \"regression: asymmetric taps one block\", \"actual\": [[2, -1, 1, 0]], \"expected\": [[1, -1, 2, 0]], \"passed\": false}, {\"check\": \"regression: empty block in stream\", \"actual\": [[1, 4], [], [7]], \"expected\": [[2, 5], [], [8]], \"passed\": false}, {\"check\": \"control: single tap\", \"actual\": [[3, 6], [9]], \"expected\": [[3, 6], [9]], \"passed\": true}, {\"check\": \"control: random stream 2\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"control: random stream 3\", \"actual\": [[10, -4, 0, -4], [4, -6, 4, -10]], \"expected\": [[10, -4, 0, -4], [4, -6, 4, -10]], \"passed\": true}, {\"check\": \"control: random stream 6\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.083,"exit_code":1,"observations":[{"actual":[[4],[3],[2,21],[23]],"check":"regression: short blocks spanning history","expected":[[1],[2],[3,9],[12]],"passed":false},{"actual":[[2,-1,1,0]],"check":"regression: asymmetric taps one block","expected":[[1,-1,2,0]],"passed":false},{"actual":[[1,4],[],[7]],"check":"regression: empty block in stream","expected":[[2,5],[],[8]],"passed":false},{"actual":[[3,6],[9]],"check":"control: single tap","expected":[[3,6],[9]],"passed":true},{"actual":[[]],"check":"control: random stream 2","expected":[[]],"passed":true},{"actual":[[10,-4,0,-4],[4,-6,4,-10]],"check":"control: random stream 3","expected":[[10,-4,0,-4],[4,-6,4,-10]],"passed":true},{"actual":[[]],"check":"control: random stream 6","expected":[[]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: short blocks spanning history\", \"actual\": [[4], [3], [2, 21], [23]], \"expected\": [[1], [2], [3, 9], [12]], \"passed\": false}, {\"check\": \"regression: asymmetric taps one block\", \"actual\": [[2, -1, 1, 0]], \"expected\": [[1, -1, 2, 0]], \"passed\": false}, {\"check\": \"regression: empty block in stream\", \"actual\": [[1, 4], [], [7]], \"expected\": [[2, 5], [], [8]], \"passed\": false}, {\"check\": \"control: single tap\", \"actual\": [[3, 6], [9]], \"expected\": [[3, 6], [9]], \"passed\": true}, {\"check\": \"control: random stream 2\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}, {\"check\": \"control: random stream 3\", \"actual\": [[10, -4, 0, -4], [4, -6, 4, -10]], \"expected\": [[10, -4, 0, -4], [4, -6, 4, -10]], \"passed\": true}, {\"check\": \"control: random stream 6\", \"actual\": [[]], \"expected\": [[]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}