{"abstract":"f = 1/2 (half Nyquist) is evaluated at Nyquist.","category":"Digital signal filters","checks":7,"contract":"Input [b, a, freqs]; coefficients and frequencies are numbers or rational strings, frequencies are fractions of Nyquist. For w = pi f evaluate H = B(e^{jw})/A(e^{jw}) with z^-k = e^{-jwk}; return per frequency [20 log10 |H| rounded to 4, phase in degrees rounded to 3], \"pole\" if |A| < 1e-12, \"zero\" if |H| < 1e-9.","contract_signature":"x","evaluation_group":"w2-digital_signal_filters-frequency-response-db","failed_approach":"The attempted repair uses pi f / 2, halving the frequency instead.","family":"w2-digital_signal_filters-frequency-response-db-normalized-frequency-scale","id":"FA-91516","implementations":{"attempt":{"sha256":"8c961449f65949fc54f392cc0a2ab849d7576eb618ea06a755b8a276945326f8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport cmath\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    b, a, fs = x\n    b = [float(Fraction(v)) for v in b]\n    a = [float(Fraction(v)) for v in a]\n    out = []\n    for f in fs:\n        w = math.pi * float(Fraction(f)) / 2\n        B = sum(c * cmath.exp(-1j * w * k) for k, c in enumerate(b))\n        A = sum(c * cmath.exp(-1j * w * k) for k, c in enumerate(a))\n        if abs(A) < 1e-12:\n            out.append('pole')\n            continue\n        H = B / A\n        mag = abs(H)\n        if mag < 1e-9:\n            out.append('zero')\n            continue\n        out.append([round(20 * math.log10(mag), 4) + 0.0, round(math.degrees(cmath.phase(H)), 3) + 0.0])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: two-tap average at nyquist', [[1, 1], [1], ['1']], ['zero']], ['regression: first difference', [[1, -1], [1], ['0', '1/2', '1']], ['zero', [3.0103, 45.0], [6.0206, 0.0]]], ['regression: one pole', [[1], [1, '-1/2'], ['0', '1/4', '1/2']], [[6.0206, 0.0], [2.6529, -28.675], [-0.9691, -26.565]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: deep notch', [[1, 0, 1], [1], ['1/2', '0.49']], ['zero', [-24.0378, -88.2]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]]], [['regression: deep notch', [[1, 0, 1], [1], ['1/2', '0.49']], ['zero', [-24.0378, -88.2]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]], ['regression: one pole', [[1], [1, '-1/2'], ['0', '1/4', '1/2']], [[6.0206, 0.0], [2.6529, -28.675], [-0.9691, -26.565]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]], ['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]]], [['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]], ['regression: random response 2', [['1/2', '-1/4', 0, 2], [1, '1/2', '1/2'], ['1/2', '1/2', '1/2']], [[10.2633, 122.471], [10.2633, 122.471], [10.2633, 122.471]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: deep notch', [[1, 0, 1], [1], ['1/2', '0.49']], ['zero', [-24.0378, -88.2]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]]], [['regression: random response 4', [[-1], [1, '1/2'], ['3/4', '1', '0']], [[2.6529, -151.325], [6.0206, -180.0], [-3.5218, 180.0]]], ['regression: random response 5', [[1], [1, '1/2', '1/2'], ['1/4', '1', '1/8']], [[-4.0835, 32.236], [0.0, 0.0], [-5.5545, 16.706]]], ['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]]], [['regression: random response 7', [[2, -1], [1, '1/2'], ['3/4', '1/3', '1/3']], [[11.5896, 43.314], [2.3408, 49.107], [2.3408, 49.107]]], ['regression: random response 8', [[1, 2, -1, 1], [1, '-1/4', 0], ['1', '1/4', '0']], [[7.6042, -180.0], [7.6969, -45.419], [12.0412, 0.0]]], ['regression: random response 3', [[0, 0, -1], [1], ['1/2', '1/8', '1']], [[0.0, 0.0], [0.0, 135.0], [0.0, -180.0]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]], ['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]]]]\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":"21faf7b159a152045c516f09ea470a62d29af74134c479469ec6d8c412cc73f1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nimport cmath\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    b, a, fs = x\n    b = [float(Fraction(v)) for v in b]\n    a = [float(Fraction(v)) for v in a]\n    out = []\n    for f in fs:\n        w = 2 * math.pi * float(Fraction(f))\n        B = sum(c * cmath.exp(-1j * w * k) for k, c in enumerate(b))\n        A = sum(c * cmath.exp(-1j * w * k) for k, c in enumerate(a))\n        if abs(A) < 1e-12:\n            out.append('pole')\n            continue\n        H = B / A\n        mag = abs(H)\n        if mag < 1e-9:\n            out.append('zero')\n            continue\n        out.append([round(20 * math.log10(mag), 4) + 0.0, round(math.degrees(cmath.phase(H)), 3) + 0.0])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: two-tap average at nyquist', [[1, 1], [1], ['1']], ['zero']], ['regression: first difference', [[1, -1], [1], ['0', '1/2', '1']], ['zero', [3.0103, 45.0], [6.0206, 0.0]]], ['regression: one pole', [[1], [1, '-1/2'], ['0', '1/4', '1/2']], [[6.0206, 0.0], [2.6529, -28.675], [-0.9691, -26.565]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: deep notch', [[1, 0, 1], [1], ['1/2', '0.49']], ['zero', [-24.0378, -88.2]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]]], [['regression: deep notch', [[1, 0, 1], [1], ['1/2', '0.49']], ['zero', [-24.0378, -88.2]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]], ['regression: one pole', [[1], [1, '-1/2'], ['0', '1/4', '1/2']], [[6.0206, 0.0], [2.6529, -28.675], [-0.9691, -26.565]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]], ['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]]], [['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]], ['regression: random response 2', [['1/2', '-1/4', 0, 2], [1, '1/2', '1/2'], ['1/2', '1/2', '1/2']], [[10.2633, 122.471], [10.2633, 122.471], [10.2633, 122.471]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: deep notch', [[1, 0, 1], [1], ['1/2', '0.49']], ['zero', [-24.0378, -88.2]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]]], [['regression: random response 4', [[-1], [1, '1/2'], ['3/4', '1', '0']], [[2.6529, -151.325], [6.0206, -180.0], [-3.5218, 180.0]]], ['regression: random response 5', [[1], [1, '1/2', '1/2'], ['1/4', '1', '1/8']], [[-4.0835, 32.236], [0.0, 0.0], [-5.5545, 16.706]]], ['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: pure delay phase', [[0, 1], [1], ['1/4', '1/2']], [[0.0, -45.0], [0.0, -90.0]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]]], [['regression: random response 7', [[2, -1], [1, '1/2'], ['3/4', '1/3', '1/3']], [[11.5896, 43.314], [2.3408, 49.107], [2.3408, 49.107]]], ['regression: random response 8', [[1, 2, -1, 1], [1, '-1/4', 0], ['1', '1/4', '0']], [[7.6042, -180.0], [7.6969, -45.419], [12.0412, 0.0]]], ['regression: random response 3', [[0, 0, -1], [1], ['1/2', '1/8', '1']], [[0.0, 0.0], [0.0, 135.0], [0.0, -180.0]]], ['control: pole on unit circle', [[1], [1, -1], ['0']], ['pole']], ['control: small magnitude', [[1, '-0.9999'], [1], ['0']], [[-80.0, 0.0]]], ['regression: random response 0', [['-1/4', 1], [1, 0], ['1/3', '1/8', '1/8']], [[-0.9018, -73.898], [-2.2144, -29.591], [-2.2144, -29.591]]], ['regression: random response 1', [[0, -1, 1, 0], [1, '1/3', '1/3'], ['1/2', '3/4', '1/8']], [[5.563, 161.565], [7.5974, 60.22], [-12.1798, -110.508]]]]]\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-frequency-response-db-normalized-frequency-scale","generated_at":"2026-09-29T14:51:36.799327+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Magnitude and phase plots are how filters are verified; unit or sign slips misreport cutoff and delay.","root_cause":"The angular frequency is 2 pi f instead of pi f.","sha256":"75c4e51762f63a6867c2d4c7d8979b6017e19a5926546d555d5802714f1fd30b","title":"Frequency response treats Nyquist-relative input as sample-rate-relative · 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":43.281,"exit_code":1,"observations":[{"actual":[[3.0103,-45.0]],"check":"regression: two-tap average at nyquist","expected":["zero"],"passed":false},{"actual":["zero",[-2.3226,67.5],[3.0103,45.0]],"check":"regression: first difference","expected":["zero",[3.0103,45.0],[6.0206,0.0]],"passed":false},{"actual":[[6.0206,0.0],[4.8662,-19.576],[2.6529,-28.675]],"check":"regression: one pole","expected":[[6.0206,0.0],[2.6529,-28.675],[-0.9691,-26.565]],"passed":false},{"actual":["pole"],"check":"control: pole on unit circle","expected":["pole"],"passed":true},{"actual":[[-80.0,0.0]],"check":"control: small magnitude","expected":[[-80.0,0.0]],"passed":true},{"actual":[[3.0103,-45.0],[3.1446,-44.1]],"check":"regression: deep notch","expected":["zero",[-24.0378,-88.2]],"passed":false},{"actual":[[0.0,-22.5],[0.0,-45.0]],"check":"regression: pure delay phase","expected":[[0.0,-45.0],[0.0,-90.0]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: two-tap average at nyquist\", \"actual\": [[3.0103, -45.0]], \"expected\": [\"zero\"], \"passed\": false}, {\"check\": \"regression: first difference\", \"actual\": [\"zero\", [-2.3226, 67.5], [3.0103, 45.0]], \"expected\": [\"zero\", [3.0103, 45.0], [6.0206, 0.0]], \"passed\": false}, {\"check\": \"regression: one pole\", \"actual\": [[6.0206, 0.0], [4.8662, -19.576], [2.6529, -28.675]], \"expected\": [[6.0206, 0.0], [2.6529, -28.675], [-0.9691, -26.565]], \"passed\": false}, {\"check\": \"control: pole on unit circle\", \"actual\": [\"pole\"], \"expected\": [\"pole\"], \"passed\": true}, {\"check\": \"control: small magnitude\", \"actual\": [[-80.0, 0.0]], \"expected\": [[-80.0, 0.0]], \"passed\": true}, {\"check\": \"regression: deep notch\", \"actual\": [[3.0103, -45.0], [3.1446, -44.1]], \"expected\": [\"zero\", [-24.0378, -88.2]], \"passed\": false}, {\"check\": \"regression: pure delay phase\", \"actual\": [[0.0, -22.5], [0.0, -45.0]], \"expected\": [[0.0, -45.0], [0.0, -90.0]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.417,"exit_code":1,"observations":[{"actual":[[6.0206,0.0]],"check":"regression: two-tap average at nyquist","expected":["zero"],"passed":false},{"actual":["zero",[6.0206,0.0],"zero"],"check":"regression: first difference","expected":["zero",[3.0103,45.0],[6.0206,0.0]],"passed":false},{"actual":[[6.0206,0.0],[-0.9691,-26.565],[-3.5218,0.0]],"check":"regression: one pole","expected":[[6.0206,0.0],[2.6529,-28.675],[-0.9691,-26.565]],"passed":false},{"actual":["pole"],"check":"control: pole on unit circle","expected":["pole"],"passed":true},{"actual":[[-80.0,0.0]],"check":"control: small magnitude","expected":[[-80.0,0.0]],"passed":true},{"actual":[[6.0206,0.0],[6.0034,3.6]],"check":"regression: deep notch","expected":["zero",[-24.0378,-88.2]],"passed":false},{"actual":[[0.0,-90.0],[0.0,-180.0]],"check":"regression: pure delay phase","expected":[[0.0,-45.0],[0.0,-90.0]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: two-tap average at nyquist\", \"actual\": [[6.0206, 0.0]], \"expected\": [\"zero\"], \"passed\": false}, {\"check\": \"regression: first difference\", \"actual\": [\"zero\", [6.0206, 0.0], \"zero\"], \"expected\": [\"zero\", [3.0103, 45.0], [6.0206, 0.0]], \"passed\": false}, {\"check\": \"regression: one pole\", \"actual\": [[6.0206, 0.0], [-0.9691, -26.565], [-3.5218, 0.0]], \"expected\": [[6.0206, 0.0], [2.6529, -28.675], [-0.9691, -26.565]], \"passed\": false}, {\"check\": \"control: pole on unit circle\", \"actual\": [\"pole\"], \"expected\": [\"pole\"], \"passed\": true}, {\"check\": \"control: small magnitude\", \"actual\": [[-80.0, 0.0]], \"expected\": [[-80.0, 0.0]], \"passed\": true}, {\"check\": \"regression: deep notch\", \"actual\": [[6.0206, 0.0], [6.0034, 3.6]], \"expected\": [\"zero\", [-24.0378, -88.2]], \"passed\": false}, {\"check\": \"regression: pure delay phase\", \"actual\": [[0.0, -90.0], [0.0, -180.0]], \"expected\": [[0.0, -45.0], [0.0, -90.0]], \"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."}}