{"abstract":"A multi-stage CIC behaves like a single-stage one with a scaled gain.","category":"Digital signal filters","checks":7,"contract":"Input [N, R, M, samples]: N integrator stages at the input rate, keep the integrator output at indices R-1, 2R-1, ... (whole blocks only), then N comb stages y = v - v[k-M] at the low rate with zero initial state; divide by the gain (R M)^N and return exact fraction strings.","contract_signature":"x","evaluation_group":"w2-digital_signal_filters-cic-decimator","failed_approach":"The attempted repair accumulates the stage output into the running value instead of replacing it.","family":"w2-digital_signal_filters-cic-decimator-integrator-cascade-chaining","id":"FA-91431","implementations":{"attempt":{"sha256":"bafa70bf2a3bda9302df8b64d479063f0e05d7b9570c9334c8c1cfecebd49dd4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    N, R, M, xs = x\n    ints = [0] * N\n    dec = []\n    for i, v in enumerate(xs):\n        acc = v\n        for k in range(N):\n            ints[k] += acc\n            acc += ints[k]\n        if i % R == R - 1:\n            dec.append(acc)\n    combs = [[0] * M for _ in range(N)]\n    out = []\n    for v in dec:\n        for k in range(N):\n            d = combs[k]\n            prev = d.pop(0)\n            d.append(v)\n            v = v - prev\n        out.append(str(Fraction(v, (R * M) ** N)))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: one stage R=2 M=1', [1, 2, 1, [1, 2, 3, 4, 5, 6]], ['3/2', '7/2', '11/2']], ['regression: two stages R=3 M=2', [2, 3, 2, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], ['1/12', '1/6', '1/12', '0']], ['regression: partial final block', [1, 3, 1, [3, 3, 3, 3, 3]], ['3']], ['regression: step three stages', [3, 2, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], ['1/2', '1', '1', '1', '1']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']]], [['regression: step three stages', [3, 2, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], ['1/2', '1', '1', '1', '1']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: partial final block', [1, 3, 1, [3, 3, 3, 3, 3]], ['3']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']]], [['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: step three stages', [3, 2, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], ['1/2', '1', '1', '1', '1']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']], ['regression: random cic 5', [3, 2, 2, [-2, 2, -3, 2, -2, -3, 3, -3, -1]], ['-1/16', '-15/64', '-27/64', '-9/16']]], [['regression: random cic 5', [3, 2, 2, [-2, 2, -3, 2, -2, -3, 3, -3, -1]], ['-1/16', '-15/64', '-27/64', '-9/16']], ['regression: random cic 6', [1, 4, 1, [-2, 5, 3, -2, 5, -2, 1, 3, 0, -2, -3, 4, -2, -1, 5, 4, 2, 0, -2, 1]], ['1', '7/4', '-1/4', '3/2', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']]], [['regression: random cic 8', [3, 3, 1, [-1, 1, 5, 5, 3, 3, 0, -2, 2, 2, 1, 1, 1, -3]], ['2/27', '80/27', '55/27', '7/9']], ['regression: random cic 9', [3, 2, 2, [5, 2, 5, -2, 0, 0, 0, 3, 5, 1, 2]], ['17/64', '75/64', '61/32', '89/64', '55/64']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 5', [3, 2, 2, [-2, 2, -3, 2, -2, -3, 3, -3, -1]], ['-1/16', '-15/64', '-27/64', '-9/16']]]]\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":"d9b7f972cd039ff343c197508e5b7d660614b691bed367f88e06e01c34c8c508","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    N, R, M, xs = x\n    ints = [0] * N\n    dec = []\n    for i, v in enumerate(xs):\n        acc = v\n        for k in range(N):\n            ints[k] += acc\n        if i % R == R - 1:\n            dec.append(acc)\n    combs = [[0] * M for _ in range(N)]\n    out = []\n    for v in dec:\n        for k in range(N):\n            d = combs[k]\n            prev = d.pop(0)\n            d.append(v)\n            v = v - prev\n        out.append(str(Fraction(v, (R * M) ** N)))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: one stage R=2 M=1', [1, 2, 1, [1, 2, 3, 4, 5, 6]], ['3/2', '7/2', '11/2']], ['regression: two stages R=3 M=2', [2, 3, 2, [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], ['1/12', '1/6', '1/12', '0']], ['regression: partial final block', [1, 3, 1, [3, 3, 3, 3, 3]], ['3']], ['regression: step three stages', [3, 2, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], ['1/2', '1', '1', '1', '1']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']]], [['regression: step three stages', [3, 2, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], ['1/2', '1', '1', '1', '1']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: partial final block', [1, 3, 1, [3, 3, 3, 3, 3]], ['3']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']]], [['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: step three stages', [3, 2, 1, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], ['1/2', '1', '1', '1', '1']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']], ['regression: random cic 5', [3, 2, 2, [-2, 2, -3, 2, -2, -3, 3, -3, -1]], ['-1/16', '-15/64', '-27/64', '-9/16']]], [['regression: random cic 5', [3, 2, 2, [-2, 2, -3, 2, -2, -3, 3, -3, -1]], ['-1/16', '-15/64', '-27/64', '-9/16']], ['regression: random cic 6', [1, 4, 1, [-2, 5, 3, -2, 5, -2, 1, 3, 0, -2, -3, 4, -2, -1, 5, 4, 2, 0, -2, 1]], ['1', '7/4', '-1/4', '3/2', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 0', [1, 3, 2, [4, 1, 1, 5, -2, 4, -1, 4, 5]], ['1', '13/6', '5/2']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']]], [['regression: random cic 8', [3, 3, 1, [-1, 1, 5, 5, 3, 3, 0, -2, 2, 2, 1, 1, 1, -3]], ['2/27', '80/27', '55/27', '7/9']], ['regression: random cic 9', [3, 2, 2, [5, 2, 5, -2, 0, 0, 0, 3, 5, 1, 2]], ['17/64', '75/64', '61/32', '89/64', '55/64']], ['regression: random cic 4', [1, 2, 2, [-3, 1, 4, 2, 4, 2, -3, 5]], ['-1/2', '1', '3', '2']], ['regression: random cic 1', [1, 4, 1, [2, -1, 3, 4, 5, -3, 5, -2, 3, -1, 2, -3, -3, 0, 4, 0, 2, 4, 1]], ['2', '5/4', '1/4', '1/4']], ['regression: random cic 2', [1, 3, 1, [2, 2, 3, -2, 1, -2, 3, 1, -3]], ['7/3', '-1', '1/3']], ['regression: random cic 3', [3, 2, 2, [3, -3, 3, 5, -2, 3, 2, 4, 2, 2, 0]], ['3/32', '13/32', '57/64', '23/16', '63/32']], ['regression: random cic 5', [3, 2, 2, [-2, 2, -3, 2, -2, -3, 3, -3, -1]], ['-1/16', '-15/64', '-27/64', '-9/16']]]]\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-cic-decimator-integrator-cascade-chaining","generated_at":"2026-09-29T14:51:36.050130+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"CIC decimators front most digital down-converters; decimation phase, delay or gain slips distort the passband level.","root_cause":"Inside the stage loop the running value is not replaced by the stage output, so each stage sees the input.","sha256":"3cfd565d6ac2dea508a81f1cc24ffdaa1c317c46abb45e3e922a70bc3364fb55","title":"CIC integrators all integrate the raw input · 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":44.15,"exit_code":1,"observations":[{"actual":["5/2","9/2","13/2"],"check":"regression: one stage R=2 M=1","expected":["3/2","7/2","11/2"],"passed":false},{"actual":["5/36","2/9","1/36","-1/18"],"check":"regression: two stages R=3 M=2","expected":["1/12","1/6","1/12","0"],"passed":false},{"actual":["4"],"check":"regression: partial final block","expected":["3"],"passed":false},{"actual":["5/2","3/8","9/8","1","1"],"check":"regression: step three stages","expected":["1/2","1","1","1","1"],"passed":false},{"actual":["7/6","17/6","19/6"],"check":"regression: random cic 0","expected":["1","13/6","5/2"],"passed":false},{"actual":["3","-1/4","0","1"],"check":"regression: random cic 1","expected":["2","5/4","1/4","1/4"],"passed":false},{"actual":["10/3","-8/3","0"],"check":"regression: random cic 2","expected":["7/3","-1","1/3"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: one stage R=2 M=1\", \"actual\": [\"5/2\", \"9/2\", \"13/2\"], \"expected\": [\"3/2\", \"7/2\", \"11/2\"], \"passed\": false}, {\"check\": \"regression: two stages R=3 M=2\", \"actual\": [\"5/36\", \"2/9\", \"1/36\", \"-1/18\"], \"expected\": [\"1/12\", \"1/6\", \"1/12\", \"0\"], \"passed\": false}, {\"check\": \"regression: partial final block\", \"actual\": [\"4\"], \"expected\": [\"3\"], \"passed\": false}, {\"check\": \"regression: step three stages\", \"actual\": [\"5/2\", \"3/8\", \"9/8\", \"1\", \"1\"], \"expected\": [\"1/2\", \"1\", \"1\", \"1\", \"1\"], \"passed\": false}, {\"check\": \"regression: random cic 0\", \"actual\": [\"7/6\", \"17/6\", \"19/6\"], \"expected\": [\"1\", \"13/6\", \"5/2\"], \"passed\": false}, {\"check\": \"regression: random cic 1\", \"actual\": [\"3\", \"-1/4\", \"0\", \"1\"], \"expected\": [\"2\", \"5/4\", \"1/4\", \"1/4\"], \"passed\": false}, {\"check\": \"regression: random cic 2\", \"actual\": [\"10/3\", \"-8/3\", \"0\"], \"expected\": [\"7/3\", \"-1\", \"1/3\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.622,"exit_code":1,"observations":[{"actual":["1","1","1"],"check":"regression: one stage R=2 M=1","expected":["3/2","7/2","11/2"],"passed":false},{"actual":["0","0","0","0"],"check":"regression: two stages R=3 M=2","expected":["1/12","1/6","1/12","0"],"passed":false},{"actual":["1"],"check":"regression: partial final block","expected":["3"],"passed":false},{"actual":["1/8","-1/4","1/8","0","0"],"check":"regression: step three stages","expected":["1/2","1","1","1","1"],"passed":false},{"actual":["1/6","2/3","2/3"],"check":"regression: random cic 0","expected":["1","13/6","5/2"],"passed":false},{"actual":["1","-3/2","-1/4","3/4"],"check":"regression: random cic 1","expected":["2","5/4","1/4","1/4"],"passed":false},{"actual":["1","-5/3","-1/3"],"check":"regression: random cic 2","expected":["7/3","-1","1/3"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: one stage R=2 M=1\", \"actual\": [\"1\", \"1\", \"1\"], \"expected\": [\"3/2\", \"7/2\", \"11/2\"], \"passed\": false}, {\"check\": \"regression: two stages R=3 M=2\", \"actual\": [\"0\", \"0\", \"0\", \"0\"], \"expected\": [\"1/12\", \"1/6\", \"1/12\", \"0\"], \"passed\": false}, {\"check\": \"regression: partial final block\", \"actual\": [\"1\"], \"expected\": [\"3\"], \"passed\": false}, {\"check\": \"regression: step three stages\", \"actual\": [\"1/8\", \"-1/4\", \"1/8\", \"0\", \"0\"], \"expected\": [\"1/2\", \"1\", \"1\", \"1\", \"1\"], \"passed\": false}, {\"check\": \"regression: random cic 0\", \"actual\": [\"1/6\", \"2/3\", \"2/3\"], \"expected\": [\"1\", \"13/6\", \"5/2\"], \"passed\": false}, {\"check\": \"regression: random cic 1\", \"actual\": [\"1\", \"-3/2\", \"-1/4\", \"3/4\"], \"expected\": [\"2\", \"5/4\", \"1/4\", \"1/4\"], \"passed\": false}, {\"check\": \"regression: random cic 2\", \"actual\": [\"1\", \"-5/3\", \"-1/3\"], \"expected\": [\"7/3\", \"-1\", \"1/3\"], \"passed\": false}], \"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."}}