{"abstract":"Rows beyond the poles are decoded as valid latitudes.","category":"Map projection transforms","checks":8,"contract":"Input [x, y, lon0] metres on a sphere R = 6371007. lat = y/R radians; if |lat| > pi/2 return None. If cos(lat) < 1e-12 (a pole) return [lon0, +/-90]. Otherwise dl = x/(R*cos(lat)); if |dl| > pi the point is outside the map outline and None is returned. lon = lon0 + deg(dl) wrapped to [-180, 180). Return [lon, lat] degrees rounded to 6 decimals.","evaluation_group":"w2-map-projection-transforms-sinusoidal-inverse","failed_approach":"Only the northern limit is checked, so rows below the south pole slip through.","family":"w2-map-projection-transforms-sinusoidal-inverse-latitude-domain-check","id":"FA-70086","implementations":{"attempt":{"sha256":"d67d664f66cf9e8f18862a026b31759a88c1ad537925ad1108624edc4b936127","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    px, py, lon0 = x\n    R = 6371007.0\n    lat_r = py / R\n    if lat_r > math.pi / 2:\n        return None\n    c = math.cos(lat_r)\n    if c < 1e-12:\n        return [round(lon0, 6), round(math.degrees(lat_r), 6)]\n    dl = px / (R * c)\n    if abs(dl) > math.pi:\n        return None\n    lon = ((lon0 + math.degrees(dl) + 180.0) % 360.0) - 180.0\n    return [round(lon, 6), round(math.degrees(lat_r), 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-6456860.5, 6184557.0, 100.0], [-2.830805, 55.618996]), ('control #1', [-4076169.5, -114936.6, -60.0], [-96.663799, -1.033649]), ('control #2', [7301979.2, 2452334.2, -60.0], [10.852625, 22.054347]), ('control #3', [-869092.1, -5986427.5, 170.0], [156.75451, -53.837177]), ('control #4', [-3900713.2, 4055798.9, 100.0], [56.374778, 36.474636]), ('control #5', [-18585422.9, -1353.5, -60.0], [132.857456, -0.012172]), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #3', [-869092.1, -5986427.5, 170.0], [156.75451, -53.837177]), ('control #4', [-3900713.2, 4055798.9, 100.0], [56.374778, 36.474636]), ('control #5', [-18585422.9, -1353.5, -60.0], [132.857456, -0.012172]), ('control #6', [-775892.3, 7364756.8, 0.0], [-17.313602, 66.232776]), ('control #7', [4713150.3, 7011518.5, 0.0], [93.543502, 63.056031]), ('control #8', [-5244799.8, -3910343.5, -60.0], [-117.698632, -35.166525]), ('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #6', [-775892.3, 7364756.8, 0.0], [-17.313602, 66.232776]), ('control #7', [4713150.3, 7011518.5, 0.0], [93.543502, 63.056031]), ('control #8', [-5244799.8, -3910343.5, -60.0], [-117.698632, -35.166525]), ('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('control #10', [-2612435.3, 3809472.3, 100.0], [71.573824, 34.25937]), ('control #11', [-517878.4, 4527351.0, 170.0], [163.855358, 40.715401]), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('control #10', [-2612435.3, 3809472.3, 100.0], [71.573824, 34.25937]), ('control #11', [-517878.4, 4527351.0, 170.0], [163.855358, 40.715401]), ('control #12', [455295.0, 8282288.4, -60.0], [-44.693339, 74.484327]), ('control #13', [-3490805.5, 8855899.7, 170.0], [-4.619905, 79.642932]), ('boundary #14', [0.0, 10007554.393584574, 20.0], [20.0, 90.0]), ('boundary #15', [1000.0, -10007554.393584574, -45.0], [-45.0, -90.0]), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #12', [455295.0, 8282288.4, -60.0], [-44.693339, 74.484327]), ('control #13', [-3490805.5, 8855899.7, 170.0], [-4.619905, 79.642932]), ('boundary #14', [0.0, 10007554.393584574, 20.0], [20.0, 90.0]), ('boundary #15', [1000.0, -10007554.393584574, -45.0], [-45.0, -90.0]), ('regression #16', [9000000.0, 8000000.0, 0.0], None), ('regression #17', [15000000.0, 6000000.0, 10.0], None), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)]]\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":"8645f79a8185c97010c79286ee6062a3f7e484cbd79ea48111938c3569bd0f49","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    px, py, lon0 = x\n    R = 6371007.0\n    lat_r = py / R\n    if abs(lat_r) > math.pi:\n        return None\n    c = math.cos(lat_r)\n    if c < 1e-12:\n        return [round(lon0, 6), round(math.degrees(lat_r), 6)]\n    dl = px / (R * c)\n    if abs(dl) > math.pi:\n        return None\n    lon = ((lon0 + math.degrees(dl) + 180.0) % 360.0) - 180.0\n    return [round(lon, 6), round(math.degrees(lat_r), 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-6456860.5, 6184557.0, 100.0], [-2.830805, 55.618996]), ('control #1', [-4076169.5, -114936.6, -60.0], [-96.663799, -1.033649]), ('control #2', [7301979.2, 2452334.2, -60.0], [10.852625, 22.054347]), ('control #3', [-869092.1, -5986427.5, 170.0], [156.75451, -53.837177]), ('control #4', [-3900713.2, 4055798.9, 100.0], [56.374778, 36.474636]), ('control #5', [-18585422.9, -1353.5, -60.0], [132.857456, -0.012172]), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #3', [-869092.1, -5986427.5, 170.0], [156.75451, -53.837177]), ('control #4', [-3900713.2, 4055798.9, 100.0], [56.374778, 36.474636]), ('control #5', [-18585422.9, -1353.5, -60.0], [132.857456, -0.012172]), ('control #6', [-775892.3, 7364756.8, 0.0], [-17.313602, 66.232776]), ('control #7', [4713150.3, 7011518.5, 0.0], [93.543502, 63.056031]), ('control #8', [-5244799.8, -3910343.5, -60.0], [-117.698632, -35.166525]), ('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #6', [-775892.3, 7364756.8, 0.0], [-17.313602, 66.232776]), ('control #7', [4713150.3, 7011518.5, 0.0], [93.543502, 63.056031]), ('control #8', [-5244799.8, -3910343.5, -60.0], [-117.698632, -35.166525]), ('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('control #10', [-2612435.3, 3809472.3, 100.0], [71.573824, 34.25937]), ('control #11', [-517878.4, 4527351.0, 170.0], [163.855358, 40.715401]), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('control #10', [-2612435.3, 3809472.3, 100.0], [71.573824, 34.25937]), ('control #11', [-517878.4, 4527351.0, 170.0], [163.855358, 40.715401]), ('control #12', [455295.0, 8282288.4, -60.0], [-44.693339, 74.484327]), ('control #13', [-3490805.5, 8855899.7, 170.0], [-4.619905, 79.642932]), ('boundary #14', [0.0, 10007554.393584574, 20.0], [20.0, 90.0]), ('boundary #15', [1000.0, -10007554.393584574, -45.0], [-45.0, -90.0]), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #12', [455295.0, 8282288.4, -60.0], [-44.693339, 74.484327]), ('control #13', [-3490805.5, 8855899.7, 170.0], [-4.619905, 79.642932]), ('boundary #14', [0.0, 10007554.393584574, 20.0], [20.0, 90.0]), ('boundary #15', [1000.0, -10007554.393584574, -45.0], [-45.0, -90.0]), ('regression #16', [9000000.0, 8000000.0, 0.0], None), ('regression #17', [15000000.0, 6000000.0, 10.0], None), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)]]\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"},"fixed":{"sha256":"1a2417b9299124eb556df218076f6f6b82595cd3ee7fe44278747e0ccb855957","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    px, py, lon0 = x\n    R = 6371007.0\n    lat_r = py / R\n    if abs(lat_r) > math.pi / 2:\n        return None\n    c = math.cos(lat_r)\n    if c < 1e-12:\n        return [round(lon0, 6), round(math.degrees(lat_r), 6)]\n    dl = px / (R * c)\n    if abs(dl) > math.pi:\n        return None\n    lon = ((lon0 + math.degrees(dl) + 180.0) % 360.0) - 180.0\n    return [round(lon, 6), round(math.degrees(lat_r), 6)]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-6456860.5, 6184557.0, 100.0], [-2.830805, 55.618996]), ('control #1', [-4076169.5, -114936.6, -60.0], [-96.663799, -1.033649]), ('control #2', [7301979.2, 2452334.2, -60.0], [10.852625, 22.054347]), ('control #3', [-869092.1, -5986427.5, 170.0], [156.75451, -53.837177]), ('control #4', [-3900713.2, 4055798.9, 100.0], [56.374778, 36.474636]), ('control #5', [-18585422.9, -1353.5, -60.0], [132.857456, -0.012172]), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #3', [-869092.1, -5986427.5, 170.0], [156.75451, -53.837177]), ('control #4', [-3900713.2, 4055798.9, 100.0], [56.374778, 36.474636]), ('control #5', [-18585422.9, -1353.5, -60.0], [132.857456, -0.012172]), ('control #6', [-775892.3, 7364756.8, 0.0], [-17.313602, 66.232776]), ('control #7', [4713150.3, 7011518.5, 0.0], [93.543502, 63.056031]), ('control #8', [-5244799.8, -3910343.5, -60.0], [-117.698632, -35.166525]), ('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #6', [-775892.3, 7364756.8, 0.0], [-17.313602, 66.232776]), ('control #7', [4713150.3, 7011518.5, 0.0], [93.543502, 63.056031]), ('control #8', [-5244799.8, -3910343.5, -60.0], [-117.698632, -35.166525]), ('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('control #10', [-2612435.3, 3809472.3, 100.0], [71.573824, 34.25937]), ('control #11', [-517878.4, 4527351.0, 170.0], [163.855358, 40.715401]), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #9', [13447778.9, -3010314.0, 0.0], [135.820143, -27.072374]), ('control #10', [-2612435.3, 3809472.3, 100.0], [71.573824, 34.25937]), ('control #11', [-517878.4, 4527351.0, 170.0], [163.855358, 40.715401]), ('control #12', [455295.0, 8282288.4, -60.0], [-44.693339, 74.484327]), ('control #13', [-3490805.5, 8855899.7, 170.0], [-4.619905, 79.642932]), ('boundary #14', [0.0, 10007554.393584574, 20.0], [20.0, 90.0]), ('boundary #15', [1000.0, -10007554.393584574, -45.0], [-45.0, -90.0]), ('boundary #19', [0.0, -12000000.0, 0.0], None)], [('control #12', [455295.0, 8282288.4, -60.0], [-44.693339, 74.484327]), ('control #13', [-3490805.5, 8855899.7, 170.0], [-4.619905, 79.642932]), ('boundary #14', [0.0, 10007554.393584574, 20.0], [20.0, 90.0]), ('boundary #15', [1000.0, -10007554.393584574, -45.0], [-45.0, -90.0]), ('regression #16', [9000000.0, 8000000.0, 0.0], None), ('regression #17', [15000000.0, 6000000.0, 10.0], None), ('boundary #18', [0.0, 10100000.0, 0.0], None), ('boundary #19', [0.0, -12000000.0, 0.0], None)]]\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-sinusoidal-inverse-latitude-domain-check","generated_at":"2026-09-29T14:48:17.324067+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"MODIS-style sinusoidal grids are inverted to label pixels; outside-outline pixels must be recognised as fill.","repair":"At the latitude domain check step restore `if abs(lat_r) > math.pi / 2:`, leaving the rest of the model unchanged.","root_cause":"The latitude domain limit is pi instead of pi/2.","sha256":"abd9ea11a86031239c41c43bf226278fe4b518913221a1de166f8d8c38d48d41","title":"Sinusoidal equal-area inverse: latitude domain check · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.609,"exit_code":1,"observations":[{"actual":[-2.830805,55.618996],"check":"control #0","expected":[-2.830805,55.618996],"passed":true},{"actual":[-96.663799,-1.033649],"check":"control #1","expected":[-96.663799,-1.033649],"passed":true},{"actual":[10.852625,22.054347],"check":"control #2","expected":[10.852625,22.054347],"passed":true},{"actual":[156.75451,-53.837177],"check":"control #3","expected":[156.75451,-53.837177],"passed":true},{"actual":[56.374778,36.474636],"check":"control #4","expected":[56.374778,36.474636],"passed":true},{"actual":[132.857456,-0.012172],"check":"control #5","expected":[132.857456,-0.012172],"passed":true},{"actual":null,"check":"boundary #18","expected":null,"passed":true},{"actual":[0.0,-107.918474],"check":"boundary #19","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [-2.830805, 55.618996], \"expected\": [-2.830805, 55.618996], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [-96.663799, -1.033649], \"expected\": [-96.663799, -1.033649], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [10.852625, 22.054347], \"expected\": [10.852625, 22.054347], \"passed\": true}, {\"check\": \"control #3\", \"actual\": [156.75451, -53.837177], \"expected\": [156.75451, -53.837177], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [56.374778, 36.474636], \"expected\": [56.374778, 36.474636], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [132.857456, -0.012172], \"expected\": [132.857456, -0.012172], \"passed\": true}, {\"check\": \"boundary #18\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary #19\", \"actual\": [0.0, -107.918474], \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.032,"exit_code":1,"observations":[{"actual":[-2.830805,55.618996],"check":"control #0","expected":[-2.830805,55.618996],"passed":true},{"actual":[-96.663799,-1.033649],"check":"control #1","expected":[-96.663799,-1.033649],"passed":true},{"actual":[10.852625,22.054347],"check":"control #2","expected":[10.852625,22.054347],"passed":true},{"actual":[156.75451,-53.837177],"check":"control #3","expected":[156.75451,-53.837177],"passed":true},{"actual":[56.374778,36.474636],"check":"control #4","expected":[56.374778,36.474636],"passed":true},{"actual":[132.857456,-0.012172],"check":"control #5","expected":[132.857456,-0.012172],"passed":true},{"actual":[0.0,90.831382],"check":"boundary #18","expected":null,"passed":false},{"actual":[0.0,-107.918474],"check":"boundary #19","expected":null,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [-2.830805, 55.618996], \"expected\": [-2.830805, 55.618996], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [-96.663799, -1.033649], \"expected\": [-96.663799, -1.033649], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [10.852625, 22.054347], \"expected\": [10.852625, 22.054347], \"passed\": true}, {\"check\": \"control #3\", \"actual\": [156.75451, -53.837177], \"expected\": [156.75451, -53.837177], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [56.374778, 36.474636], \"expected\": [56.374778, 36.474636], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [132.857456, -0.012172], \"expected\": [132.857456, -0.012172], \"passed\": true}, {\"check\": \"boundary #18\", \"actual\": [0.0, 90.831382], \"expected\": null, \"passed\": false}, {\"check\": \"boundary #19\", \"actual\": [0.0, -107.918474], \"expected\": null, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.243,"exit_code":0,"observations":[{"actual":[-2.830805,55.618996],"check":"control #0","expected":[-2.830805,55.618996],"passed":true},{"actual":[-96.663799,-1.033649],"check":"control #1","expected":[-96.663799,-1.033649],"passed":true},{"actual":[10.852625,22.054347],"check":"control #2","expected":[10.852625,22.054347],"passed":true},{"actual":[156.75451,-53.837177],"check":"control #3","expected":[156.75451,-53.837177],"passed":true},{"actual":[56.374778,36.474636],"check":"control #4","expected":[56.374778,36.474636],"passed":true},{"actual":[132.857456,-0.012172],"check":"control #5","expected":[132.857456,-0.012172],"passed":true},{"actual":null,"check":"boundary #18","expected":null,"passed":true},{"actual":null,"check":"boundary #19","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [-2.830805, 55.618996], \"expected\": [-2.830805, 55.618996], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [-96.663799, -1.033649], \"expected\": [-96.663799, -1.033649], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [10.852625, 22.054347], \"expected\": [10.852625, 22.054347], \"passed\": true}, {\"check\": \"control #3\", \"actual\": [156.75451, -53.837177], \"expected\": [156.75451, -53.837177], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [56.374778, 36.474636], \"expected\": [56.374778, 36.474636], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [132.857456, -0.012172], \"expected\": [132.857456, -0.012172], \"passed\": true}, {\"check\": \"boundary #18\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"boundary #19\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}