{"abstract":"A percentile depends on input order or jumps to a nearest-rank value instead of the specified interpolated value.","category":"Statistics","checks":9,"contract":"For an integer sample and integer percentile p from 0 through 100, return the reduced Fraction string for linear interpolation at h=(n-1)*p/100 in sorted order. Empty samples and out-of-range p return None.","evaluation_group":"model-49355e3c20c1b814","failed_approach":"Adding interpolation while assuming input was already sorted leaves valid unordered samples with incorrect quantiles.","family":"num-linear-percentile-order","id":"FA-336","implementations":{"attempt":{"sha256":"eefc5f1324fcd4ef9d472f024605c0fe86a0b24c8bc321c29b1c6d0c88657876","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(values, percent):\n    if not values or not 0 <= percent <= 100:\n        return None\n    rank = Fraction((len(values) - 1) * percent, 100)\n    index = rank.numerator // rank.denominator\n    upper = min(index + 1, len(values) - 1)\n    return str(Fraction(values[index]) + (rank - index) * (values[upper] - values[index]))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nvalues = [3 * N, 0, N, 2 * N]\ncheck('unordered even-sample median', solve(values, 50), str(Fraction(3 * N, 2)))\ncheck('quarter percentile interpolates', solve([0, N, 2 * N, 3 * N], 25), str(Fraction(3 * N, 4)))\ncheck('zeroth percentile is minimum', solve(values, 0), '0')\ncheck('hundredth percentile is maximum', solve(values, 100), str(3 * N))\ncheck('duplicate observations stay weighted by count', solve([0, 0, N, N], 50), str(Fraction(N, 2)))\ncheck('negative values interpolate', solve([-N, 0, N], 25), str(Fraction(-N, 2)))\ncheck('single observation', solve([N], 73), str(N))\ncheck('invalid percentile rejected', solve(values, 101), None)\ncheck('empty sample', solve([], 50), None)\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":"7d3abb93954fa551955be424f3cf6bc8d09ad2d2e654e2bbcd9ffb8cbcb6cf48","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(values, percent):\n    if not values or not 0 <= percent <= 100:\n        return None\n    ordered = sorted(values)\n    index = max(0, math.ceil(len(values) * percent / 100) - 1)\n    return str(ordered[index])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nvalues = [3 * N, 0, N, 2 * N]\ncheck('unordered even-sample median', solve(values, 50), str(Fraction(3 * N, 2)))\ncheck('quarter percentile interpolates', solve([0, N, 2 * N, 3 * N], 25), str(Fraction(3 * N, 4)))\ncheck('zeroth percentile is minimum', solve(values, 0), '0')\ncheck('hundredth percentile is maximum', solve(values, 100), str(3 * N))\ncheck('duplicate observations stay weighted by count', solve([0, 0, N, N], 50), str(Fraction(N, 2)))\ncheck('negative values interpolate', solve([-N, 0, N], 25), str(Fraction(-N, 2)))\ncheck('single observation', solve([N], 73), str(N))\ncheck('invalid percentile rejected', solve(values, 101), None)\ncheck('empty sample', solve([], 50), None)\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"},"fixed":{"sha256":"64d853195212f7244c218e380022d14595e9b43979d0ba320dbb18c0a7c6ef0f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nimport math\nN = 1\nobservations = []\ndef solve(values, percent):\n    if not values or not 0 <= percent <= 100:\n        return None\n    ordered = sorted(values)\n    rank = Fraction((len(ordered) - 1) * percent, 100)\n    index = rank.numerator // rank.denominator\n    upper = min(index + 1, len(ordered) - 1)\n    return str(Fraction(ordered[index]) + (rank - index) * (ordered[upper] - ordered[index]))\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nvalues = [3 * N, 0, N, 2 * N]\ncheck('unordered even-sample median', solve(values, 50), str(Fraction(3 * N, 2)))\ncheck('quarter percentile interpolates', solve([0, N, 2 * N, 3 * N], 25), str(Fraction(3 * N, 4)))\ncheck('zeroth percentile is minimum', solve(values, 0), '0')\ncheck('hundredth percentile is maximum', solve(values, 100), str(3 * N))\ncheck('duplicate observations stay weighted by count', solve([0, 0, N, N], 50), str(Fraction(N, 2)))\ncheck('negative values interpolate', solve([-N, 0, N], 25), str(Fraction(-N, 2)))\ncheck('single observation', solve([N], 73), str(N))\ncheck('invalid percentile rejected', solve(values, 101), None)\ncheck('empty sample', solve([], 50), None)\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":" 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":"num-linear-percentile-order","generated_at":"2026-09-29T14:36:52.118149+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Percentile definitions differ across libraries. This case specifies one convention and tests order independence instead of treating all percentile algorithms as interchangeable.","repair":"Sort the observations and linearly interpolate at rank (n-1)*p/100 using exact rational arithmetic.","root_cause":"The implementation changes the percentile definition or interpolates before sorting the sample.","sha256":"659948f51f1652c566c70bb3d6cd65c5f8a7d4fea06274b1d0c906461b062d9d","title":"Percentile interpolation uses unsorted observation positions · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.104,"exit_code":1,"observations":[{"actual":"1/2","check":"unordered even-sample median","expected":"3/2","passed":false},{"actual":"3/4","check":"quarter percentile interpolates","expected":"3/4","passed":true},{"actual":"3","check":"zeroth percentile is minimum","expected":"0","passed":false},{"actual":"2","check":"hundredth percentile is maximum","expected":"3","passed":false},{"actual":"1/2","check":"duplicate observations stay weighted by count","expected":"1/2","passed":true},{"actual":"-1/2","check":"negative values interpolate","expected":"-1/2","passed":true},{"actual":"1","check":"single observation","expected":"1","passed":true},{"actual":null,"check":"invalid percentile rejected","expected":null,"passed":true},{"actual":null,"check":"empty sample","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unordered even-sample median\", \"actual\": \"1/2\", \"expected\": \"3/2\", \"passed\": false}, {\"check\": \"quarter percentile interpolates\", \"actual\": \"3/4\", \"expected\": \"3/4\", \"passed\": true}, {\"check\": \"zeroth percentile is minimum\", \"actual\": \"3\", \"expected\": \"0\", \"passed\": false}, {\"check\": \"hundredth percentile is maximum\", \"actual\": \"2\", \"expected\": \"3\", \"passed\": false}, {\"check\": \"duplicate observations stay weighted by count\", \"actual\": \"1/2\", \"expected\": \"1/2\", \"passed\": true}, {\"check\": \"negative values interpolate\", \"actual\": \"-1/2\", \"expected\": \"-1/2\", \"passed\": true}, {\"check\": \"single observation\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"invalid percentile rejected\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"empty sample\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.382,"exit_code":1,"observations":[{"actual":"1","check":"unordered even-sample median","expected":"3/2","passed":false},{"actual":"0","check":"quarter percentile interpolates","expected":"3/4","passed":false},{"actual":"0","check":"zeroth percentile is minimum","expected":"0","passed":true},{"actual":"3","check":"hundredth percentile is maximum","expected":"3","passed":true},{"actual":"0","check":"duplicate observations stay weighted by count","expected":"1/2","passed":false},{"actual":"-1","check":"negative values interpolate","expected":"-1/2","passed":false},{"actual":"1","check":"single observation","expected":"1","passed":true},{"actual":null,"check":"invalid percentile rejected","expected":null,"passed":true},{"actual":null,"check":"empty sample","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unordered even-sample median\", \"actual\": \"1\", \"expected\": \"3/2\", \"passed\": false}, {\"check\": \"quarter percentile interpolates\", \"actual\": \"0\", \"expected\": \"3/4\", \"passed\": false}, {\"check\": \"zeroth percentile is minimum\", \"actual\": \"0\", \"expected\": \"0\", \"passed\": true}, {\"check\": \"hundredth percentile is maximum\", \"actual\": \"3\", \"expected\": \"3\", \"passed\": true}, {\"check\": \"duplicate observations stay weighted by count\", \"actual\": \"0\", \"expected\": \"1/2\", \"passed\": false}, {\"check\": \"negative values interpolate\", \"actual\": \"-1\", \"expected\": \"-1/2\", \"passed\": false}, {\"check\": \"single observation\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"invalid percentile rejected\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"empty sample\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.613,"exit_code":0,"observations":[{"actual":"3/2","check":"unordered even-sample median","expected":"3/2","passed":true},{"actual":"3/4","check":"quarter percentile interpolates","expected":"3/4","passed":true},{"actual":"0","check":"zeroth percentile is minimum","expected":"0","passed":true},{"actual":"3","check":"hundredth percentile is maximum","expected":"3","passed":true},{"actual":"1/2","check":"duplicate observations stay weighted by count","expected":"1/2","passed":true},{"actual":"-1/2","check":"negative values interpolate","expected":"-1/2","passed":true},{"actual":"1","check":"single observation","expected":"1","passed":true},{"actual":null,"check":"invalid percentile rejected","expected":null,"passed":true},{"actual":null,"check":"empty sample","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"unordered even-sample median\", \"actual\": \"3/2\", \"expected\": \"3/2\", \"passed\": true}, {\"check\": \"quarter percentile interpolates\", \"actual\": \"3/4\", \"expected\": \"3/4\", \"passed\": true}, {\"check\": \"zeroth percentile is minimum\", \"actual\": \"0\", \"expected\": \"0\", \"passed\": true}, {\"check\": \"hundredth percentile is maximum\", \"actual\": \"3\", \"expected\": \"3\", \"passed\": true}, {\"check\": \"duplicate observations stay weighted by count\", \"actual\": \"1/2\", \"expected\": \"1/2\", \"passed\": true}, {\"check\": \"negative values interpolate\", \"actual\": \"-1/2\", \"expected\": \"-1/2\", \"passed\": true}, {\"check\": \"single observation\", \"actual\": \"1\", \"expected\": \"1\", \"passed\": true}, {\"check\": \"invalid percentile rejected\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"empty sample\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}