{"abstract":"Radii are wrong on every parallel so equal areas are lost.","category":"Map projection transforms","checks":8,"contract":"Input [lon, lat, lon0, lat0, lat1, lat2] degrees, sphere R = 6371000, lat1 != -lat2. n = (sin p1 + sin p2)/2; C = cos(p1)**2 + 2*n*sin(p1); rho = R*sqrt(C - 2*n*sin(phi))/n; rho0 likewise at lat0; theta = n*dlon with dlon wrapped to [-180, 180). x = rho*sin(theta), y = rho0 - rho*cos(theta), rounded to 2 decimals.","contract_signature":"x","evaluation_group":"w2-map-projection-transforms-albers-equal-area-conic","failed_approach":"The square is restored but the 2n sin(lat1) term lost its factor of two.","family":"w2-map-projection-transforms-albers-equal-area-conic-area-constant-term","id":"FA-70131","implementations":{"attempt":{"sha256":"f0602dfdb6fc5863773060ec318685a9b5ac0bffd3ad5a61023e005d5d62f5d3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lon, lat, lon0, lat0, lat1, lat2 = x\n    R = 6371000.0\n    p0, p1, p2, phi = [math.radians(v) for v in (lat0, lat1, lat2, lat)]\n    n = (math.sin(p1) + math.sin(p2)) / 2\n    C = math.cos(p1) ** 2 + n * math.sin(p1)\n    rho = R * math.sqrt(C - 2 * n * math.sin(phi)) / n\n    rho0 = R * math.sqrt(C - 2 * n * math.sin(p0)) / n\n    dl = math.radians(((lon - lon0 + 180.0) % 360.0) - 180.0)\n    theta = n * dl\n    return [round(rho * math.sin(theta), 2), round(rho0 - rho * math.cos(theta), 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-74.411, 16.812, -96.0, 23.0, 33.0, 45.0], [2405679.11, -375515.8]), ('control #2', [163.654, -41.81, 132.0, 0.0, -18.0, -36.0], [2661851.12, -4920407.16]), ('control #3', [-52.492, -45.412, -60.0, -32.0, -5.0, -42.0], [601606.86, -1530950.07]), ('control #4', [-26.25, -1.472, 0.0, 40.0, 40.0, 40.0], [-3459655.33, -3813601.11]), ('control #5', [24.242, -15.571, 20.0, -45.0, -45.0, -45.0], [499045.1, 3152788.69]), ('control #6', [95.34, 51.232, 100.0, 30.0, 25.0, 47.0], [-331403.06, 2390895.63]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #2', [163.654, -41.81, 132.0, 0.0, -18.0, -36.0], [2661851.12, -4920407.16]), ('control #3', [-52.492, -45.412, -60.0, -32.0, -5.0, -42.0], [601606.86, -1530950.07]), ('control #6', [95.34, 51.232, 100.0, 30.0, 25.0, 47.0], [-331403.06, 2390895.63]), ('control #7', [-119.961, 31.565, -96.0, 23.0, 33.0, 45.0], [-2250314.51, 1235327.67]), ('control #9', [128.053, -60.735, 132.0, 0.0, -18.0, -36.0], [-277286.95, -6470938.42]), ('control #10', [-40.992, -24.699, -60.0, -32.0, -5.0, -42.0], [1816236.48, 739740.04]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #3', [-52.492, -45.412, -60.0, -32.0, -5.0, -42.0], [601606.86, -1530950.07]), ('control #4', [-26.25, -1.472, 0.0, 40.0, 40.0, 40.0], [-3459655.33, -3813601.11]), ('control #10', [-40.992, -24.699, -60.0, -32.0, -5.0, -42.0], [1816236.48, 739740.04]), ('control #11', [25.244, 44.637, 0.0, 40.0, 40.0, 40.0], [1977746.83, 796959.72]), ('control #12', [-19.298, -12.334, 20.0, -45.0, -45.0, -45.0], [-4597338.48, 2353100.16]), ('control #13', [99.747, 65.471, 100.0, 30.0, 25.0, 47.0], [-14324.17, 3825527.6]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #4', [-26.25, -1.472, 0.0, 40.0, 40.0, 40.0], [-3459655.33, -3813601.11]), ('control #5', [24.242, -15.571, 20.0, -45.0, -45.0, -45.0], [499045.1, 3152788.69]), ('control #13', [99.747, 65.471, 100.0, 30.0, 25.0, 47.0], [-14324.17, 3825527.6]), ('control #14', [-128.991, 27.029, -96.0, 23.0, 33.0, 45.0], [-3243071.92, 1029568.66]), ('control #16', [154.974, -67.172, 132.0, 0.0, -18.0, -36.0], [1514049.99, -7114831.09]), ('control #17', [-37.667, -43.269, -60.0, -32.0, -5.0, -42.0], [1818158.31, -1416145.5]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #5', [24.242, -15.571, 20.0, -45.0, -45.0, -45.0], [499045.1, 3152788.69]), ('control #6', [95.34, 51.232, 100.0, 30.0, 25.0, 47.0], [-331403.06, 2390895.63]), ('control #17', [-37.667, -43.269, -60.0, -32.0, -5.0, -42.0], [1818158.31, -1416145.5]), ('control #21', [-59.567, 18.585, -96.0, 23.0, 33.0, 45.0], [3917697.15, 316916.45]), ('control #23', [126.973, -74.14, 132.0, 0.0, -18.0, -36.0], [-315615.61, -7426531.53]), ('control #24', [-22.139, -46.424, -60.0, -32.0, -5.0, -42.0], [2976538.67, -1998953.15]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])]]\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":"bdb31f9812a0947182b5752fc5d3056a92fa90169828ecd16a995e4ae5d50fb5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lon, lat, lon0, lat0, lat1, lat2 = x\n    R = 6371000.0\n    p0, p1, p2, phi = [math.radians(v) for v in (lat0, lat1, lat2, lat)]\n    n = (math.sin(p1) + math.sin(p2)) / 2\n    C = math.cos(p1) + 2 * n * math.sin(p1)\n    rho = R * math.sqrt(C - 2 * n * math.sin(phi)) / n\n    rho0 = R * math.sqrt(C - 2 * n * math.sin(p0)) / n\n    dl = math.radians(((lon - lon0 + 180.0) % 360.0) - 180.0)\n    theta = n * dl\n    return [round(rho * math.sin(theta), 2), round(rho0 - rho * math.cos(theta), 2)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-74.411, 16.812, -96.0, 23.0, 33.0, 45.0], [2405679.11, -375515.8]), ('control #2', [163.654, -41.81, 132.0, 0.0, -18.0, -36.0], [2661851.12, -4920407.16]), ('control #3', [-52.492, -45.412, -60.0, -32.0, -5.0, -42.0], [601606.86, -1530950.07]), ('control #4', [-26.25, -1.472, 0.0, 40.0, 40.0, 40.0], [-3459655.33, -3813601.11]), ('control #5', [24.242, -15.571, 20.0, -45.0, -45.0, -45.0], [499045.1, 3152788.69]), ('control #6', [95.34, 51.232, 100.0, 30.0, 25.0, 47.0], [-331403.06, 2390895.63]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #2', [163.654, -41.81, 132.0, 0.0, -18.0, -36.0], [2661851.12, -4920407.16]), ('control #3', [-52.492, -45.412, -60.0, -32.0, -5.0, -42.0], [601606.86, -1530950.07]), ('control #6', [95.34, 51.232, 100.0, 30.0, 25.0, 47.0], [-331403.06, 2390895.63]), ('control #7', [-119.961, 31.565, -96.0, 23.0, 33.0, 45.0], [-2250314.51, 1235327.67]), ('control #9', [128.053, -60.735, 132.0, 0.0, -18.0, -36.0], [-277286.95, -6470938.42]), ('control #10', [-40.992, -24.699, -60.0, -32.0, -5.0, -42.0], [1816236.48, 739740.04]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #3', [-52.492, -45.412, -60.0, -32.0, -5.0, -42.0], [601606.86, -1530950.07]), ('control #4', [-26.25, -1.472, 0.0, 40.0, 40.0, 40.0], [-3459655.33, -3813601.11]), ('control #10', [-40.992, -24.699, -60.0, -32.0, -5.0, -42.0], [1816236.48, 739740.04]), ('control #11', [25.244, 44.637, 0.0, 40.0, 40.0, 40.0], [1977746.83, 796959.72]), ('control #12', [-19.298, -12.334, 20.0, -45.0, -45.0, -45.0], [-4597338.48, 2353100.16]), ('control #13', [99.747, 65.471, 100.0, 30.0, 25.0, 47.0], [-14324.17, 3825527.6]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #4', [-26.25, -1.472, 0.0, 40.0, 40.0, 40.0], [-3459655.33, -3813601.11]), ('control #5', [24.242, -15.571, 20.0, -45.0, -45.0, -45.0], [499045.1, 3152788.69]), ('control #13', [99.747, 65.471, 100.0, 30.0, 25.0, 47.0], [-14324.17, 3825527.6]), ('control #14', [-128.991, 27.029, -96.0, 23.0, 33.0, 45.0], [-3243071.92, 1029568.66]), ('control #16', [154.974, -67.172, 132.0, 0.0, -18.0, -36.0], [1514049.99, -7114831.09]), ('control #17', [-37.667, -43.269, -60.0, -32.0, -5.0, -42.0], [1818158.31, -1416145.5]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])], [('control #5', [24.242, -15.571, 20.0, -45.0, -45.0, -45.0], [499045.1, 3152788.69]), ('control #6', [95.34, 51.232, 100.0, 30.0, 25.0, 47.0], [-331403.06, 2390895.63]), ('control #17', [-37.667, -43.269, -60.0, -32.0, -5.0, -42.0], [1818158.31, -1416145.5]), ('control #21', [-59.567, 18.585, -96.0, 23.0, 33.0, 45.0], [3917697.15, 316916.45]), ('control #23', [126.973, -74.14, 132.0, 0.0, -18.0, -36.0], [-315615.61, -7426531.53]), ('control #24', [-22.139, -46.424, -60.0, -32.0, -5.0, -42.0], [2976538.67, -1998953.15]), ('boundary #28', [-96.0, 23.0, -96.0, 23.0, 33.0, 45.0], [0.0, 0.0]), ('boundary #29', [5.0, 40.0, 5.0, 40.0, 40.0, 40.0], [0.0, 0.0])]]\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":"Stipulated deterministic toy contract on a bounded input domain; results are rounded as stated and no conformance with any published standard or library is claimed. 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-map-projection-transforms-albers-equal-area-conic-area-constant-term","generated_at":"2026-09-29T14:48:17.713456+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Continental statistics maps use Albers because it preserves area; a wrong constant silently biases area totals.","root_cause":"The constant C uses cos(lat1) rather than its square.","sha256":"75fff03154eddab60464cfd3facadc3ae8fed65834bf8550fe8c94694021948e","title":"Spherical Albers equal-area conic forward: area constant term · 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":40.818,"exit_code":1,"observations":[{"actual":[1964443.88,-590498.98],"check":"control #0","expected":[2405679.11,-375515.8],"passed":false},{"actual":[2324575.85,-5320133.27],"check":"control #2","expected":[2661851.12,-4920407.16],"passed":false},{"actual":[582219.11,-1575111.05],"check":"control #3","expected":[601606.86,-1530950.07],"passed":false},{"actual":[-2923976.64,-5509925.34],"check":"control #4","expected":[-3459655.33,-3813601.11],"passed":false},{"actual":[371352.14,7086892.95],"check":"control #5","expected":[499045.1,3152788.69],"passed":false},{"actual":[-210722.77,3228428.64],"check":"control #6","expected":[-331403.06,2390895.63],"passed":false},{"actual":[0.0,0.0],"check":"boundary #28","expected":[0.0,0.0],"passed":true},{"actual":[0.0,0.0],"check":"boundary #29","expected":[0.0,0.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [1964443.88, -590498.98], \"expected\": [2405679.11, -375515.8], \"passed\": false}, {\"check\": \"control #2\", \"actual\": [2324575.85, -5320133.27], \"expected\": [2661851.12, -4920407.16], \"passed\": false}, {\"check\": \"control #3\", \"actual\": [582219.11, -1575111.05], \"expected\": [601606.86, -1530950.07], \"passed\": false}, {\"check\": \"control #4\", \"actual\": [-2923976.64, -5509925.34], \"expected\": [-3459655.33, -3813601.11], \"passed\": false}, {\"check\": \"control #5\", \"actual\": [371352.14, 7086892.95], \"expected\": [499045.1, 3152788.69], \"passed\": false}, {\"check\": \"control #6\", \"actual\": [-210722.77, 3228428.64], \"expected\": [-331403.06, 2390895.63], \"passed\": false}, {\"check\": \"boundary #28\", \"actual\": [0.0, 0.0], \"expected\": [0.0, 0.0], \"passed\": true}, {\"check\": \"boundary #29\", \"actual\": [0.0, 0.0], \"expected\": [0.0, 0.0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.77,"exit_code":1,"observations":[{"actual":[2559817.64,-315019.16],"check":"control #0","expected":[2405679.11,-375515.8],"passed":false},{"actual":[2765939.68,-4810132.05],"check":"control #2","expected":[2661851.12,-4920407.16],"passed":false},{"actual":[603796.96,-1526112.71],"check":"control #3","expected":[601606.86,-1530950.07],"passed":false},{"actual":[-3667764.96,-3417435.23],"check":"control #4","expected":[-3459655.33,-3813601.11],"passed":false},{"actual":[543215.62,2790301.24],"check":"control #5","expected":[499045.1,3152788.69],"passed":false},{"actual":[-364157.29,2226314.12],"check":"control #6","expected":[-331403.06,2390895.63],"passed":false},{"actual":[0.0,0.0],"check":"boundary #28","expected":[0.0,0.0],"passed":true},{"actual":[0.0,0.0],"check":"boundary #29","expected":[0.0,0.0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [2559817.64, -315019.16], \"expected\": [2405679.11, -375515.8], \"passed\": false}, {\"check\": \"control #2\", \"actual\": [2765939.68, -4810132.05], \"expected\": [2661851.12, -4920407.16], \"passed\": false}, {\"check\": \"control #3\", \"actual\": [603796.96, -1526112.71], \"expected\": [601606.86, -1530950.07], \"passed\": false}, {\"check\": \"control #4\", \"actual\": [-3667764.96, -3417435.23], \"expected\": [-3459655.33, -3813601.11], \"passed\": false}, {\"check\": \"control #5\", \"actual\": [543215.62, 2790301.24], \"expected\": [499045.1, 3152788.69], \"passed\": false}, {\"check\": \"control #6\", \"actual\": [-364157.29, 2226314.12], \"expected\": [-331403.06, 2390895.63], \"passed\": false}, {\"check\": \"boundary #28\", \"actual\": [0.0, 0.0], \"expected\": [0.0, 0.0], \"passed\": true}, {\"check\": \"boundary #29\", \"actual\": [0.0, 0.0], \"expected\": [0.0, 0.0], \"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."}}