{"abstract":"Points in the 12-degree band X above 80N are labelled C.","category":"Map projection transforms","checks":8,"contract":"Input [lon, lat]. zone = floor((lon+180)/6)+1, with lon=180 mapped to zone 60. Exceptions: lat in [56, 64) and lon in [3, 12) is zone 32; lat in [72, 84] uses zone 31 for lon in [0, 9), 33 for [9, 21), 35 for [21, 33) and 37 for [33, 42). Band letters \"CDEFGHJKLMNPQRSTUVWX\" (no I or O) cover 8 degrees each from -80; band X also covers up to 84 inclusive. Outside [-80, 84] the band is None. Return [zone, band].","evaluation_group":"w2-map-projection-transforms-utm-zone-band","failed_approach":"Saturating at index 18 labels every point north of 72N as band W.","family":"w2-map-projection-transforms-utm-zone-band-band-x-extension","id":"FA-70006","implementations":{"attempt":{"sha256":"bf77b875c37500d93a5596d76d52fd8ff701c38a1e61c54abd20f4cda0a0f26d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lon, lat = x\n    zone = int(math.floor((lon + 180.0) / 6.0)) + 1\n    if zone > 60:\n        zone = 60\n    if 56.0 <= lat < 64.0 and 3.0 <= lon < 12.0:\n        zone = 32\n    if 72.0 <= lat <= 84.0 and 0.0 <= lon < 42.0:\n        if lon < 9.0:\n            zone = 31\n        elif lon < 21.0:\n            zone = 33\n        elif lon < 33.0:\n            zone = 35\n        else:\n            zone = 37\n    letters = 'CDEFGHJKLMNPQRSTUVWX'\n    if lat < -80.0 or lat > 84.0:\n        band = None\n    else:\n        band = letters[min(int((lat + 80.0) // 8), 18)]\n    return [zone, band]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-63.1, 21.44], [20, 'Q']), ('control #1', [-175.96, 80.22], [1, 'X']), ('control #2', [115.33, 82.84], [50, 'X']), ('control #3', [-84.72, -46.68], [16, 'G']), ('control #4', [-159.4, -47.6], [4, 'G']), ('control #5', [-170.34, 33.06], [2, 'S']), ('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K'])], [('control #2', [115.33, 82.84], [50, 'X']), ('control #4', [-159.4, -47.6], [4, 'G']), ('control #5', [-170.34, 33.06], [2, 'S']), ('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K']), ('control #8', [-119.29, -22.68], [11, 'K']), ('control #9', [-168.15, 26.03], [2, 'R']), ('regression #19', [8.0, 78.0], [31, 'X'])], [('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K']), ('control #8', [-119.29, -22.68], [11, 'K']), ('control #9', [-168.15, 26.03], [2, 'R']), ('control #10', [-111.05, -54.91], [12, 'F']), ('control #11', [139.05, -8.2], [54, 'L']), ('regression #19', [8.0, 78.0], [31, 'X']), ('boundary #21', [20.9, 80.0], [33, 'X'])], [('control #9', [-168.15, 26.03], [2, 'R']), ('control #10', [-111.05, -54.91], [12, 'F']), ('control #11', [139.05, -8.2], [54, 'L']), ('boundary #12', [180.0, 10.0], [60, 'P']), ('boundary #13', [-180.0, -10.0], [1, 'L']), ('regression #14', [5.0, 60.0], [32, 'V']), ('boundary #20', [9.0, 75.0], [33, 'X']), ('boundary #23', [41.9, 83.0], [37, 'X'])], [('boundary #12', [180.0, 10.0], [60, 'P']), ('boundary #13', [-180.0, -10.0], [1, 'L']), ('regression #14', [5.0, 60.0], [32, 'V']), ('boundary #15', [3.0, 56.0], [32, 'V']), ('boundary #16', [2.99, 60.0], [31, 'V']), ('boundary #17', [11.99, 63.99], [32, 'V']), ('boundary #21', [20.9, 80.0], [33, 'X']), ('boundary #24', [10.0, 84.0], [33, 'X'])]]\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":"38217a4e41e11ff76791a4d81196ebff3bb61cb0f1d59b852deb9bb9b6fe696f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lon, lat = x\n    zone = int(math.floor((lon + 180.0) / 6.0)) + 1\n    if zone > 60:\n        zone = 60\n    if 56.0 <= lat < 64.0 and 3.0 <= lon < 12.0:\n        zone = 32\n    if 72.0 <= lat <= 84.0 and 0.0 <= lon < 42.0:\n        if lon < 9.0:\n            zone = 31\n        elif lon < 21.0:\n            zone = 33\n        elif lon < 33.0:\n            zone = 35\n        else:\n            zone = 37\n    letters = 'CDEFGHJKLMNPQRSTUVWX'\n    if lat < -80.0 or lat > 84.0:\n        band = None\n    else:\n        band = letters[int((lat + 80.0) // 8) % 20]\n    return [zone, band]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-63.1, 21.44], [20, 'Q']), ('control #1', [-175.96, 80.22], [1, 'X']), ('control #2', [115.33, 82.84], [50, 'X']), ('control #3', [-84.72, -46.68], [16, 'G']), ('control #4', [-159.4, -47.6], [4, 'G']), ('control #5', [-170.34, 33.06], [2, 'S']), ('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K'])], [('control #2', [115.33, 82.84], [50, 'X']), ('control #4', [-159.4, -47.6], [4, 'G']), ('control #5', [-170.34, 33.06], [2, 'S']), ('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K']), ('control #8', [-119.29, -22.68], [11, 'K']), ('control #9', [-168.15, 26.03], [2, 'R']), ('regression #19', [8.0, 78.0], [31, 'X'])], [('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K']), ('control #8', [-119.29, -22.68], [11, 'K']), ('control #9', [-168.15, 26.03], [2, 'R']), ('control #10', [-111.05, -54.91], [12, 'F']), ('control #11', [139.05, -8.2], [54, 'L']), ('regression #19', [8.0, 78.0], [31, 'X']), ('boundary #21', [20.9, 80.0], [33, 'X'])], [('control #9', [-168.15, 26.03], [2, 'R']), ('control #10', [-111.05, -54.91], [12, 'F']), ('control #11', [139.05, -8.2], [54, 'L']), ('boundary #12', [180.0, 10.0], [60, 'P']), ('boundary #13', [-180.0, -10.0], [1, 'L']), ('regression #14', [5.0, 60.0], [32, 'V']), ('boundary #20', [9.0, 75.0], [33, 'X']), ('boundary #23', [41.9, 83.0], [37, 'X'])], [('boundary #12', [180.0, 10.0], [60, 'P']), ('boundary #13', [-180.0, -10.0], [1, 'L']), ('regression #14', [5.0, 60.0], [32, 'V']), ('boundary #15', [3.0, 56.0], [32, 'V']), ('boundary #16', [2.99, 60.0], [31, 'V']), ('boundary #17', [11.99, 63.99], [32, 'V']), ('boundary #21', [20.9, 80.0], [33, 'X']), ('boundary #24', [10.0, 84.0], [33, 'X'])]]\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":"131dc4c0ebba6b88358392c17a845b7efebeb0cdd824706d0ffd528d70950104","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nN = 1\nobservations = []\ndef solve(x):\n    lon, lat = x\n    zone = int(math.floor((lon + 180.0) / 6.0)) + 1\n    if zone > 60:\n        zone = 60\n    if 56.0 <= lat < 64.0 and 3.0 <= lon < 12.0:\n        zone = 32\n    if 72.0 <= lat <= 84.0 and 0.0 <= lon < 42.0:\n        if lon < 9.0:\n            zone = 31\n        elif lon < 21.0:\n            zone = 33\n        elif lon < 33.0:\n            zone = 35\n        else:\n            zone = 37\n    letters = 'CDEFGHJKLMNPQRSTUVWX'\n    if lat < -80.0 or lat > 84.0:\n        band = None\n    else:\n        band = letters[min(int((lat + 80.0) // 8), 19)]\n    return [zone, band]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('control #0', [-63.1, 21.44], [20, 'Q']), ('control #1', [-175.96, 80.22], [1, 'X']), ('control #2', [115.33, 82.84], [50, 'X']), ('control #3', [-84.72, -46.68], [16, 'G']), ('control #4', [-159.4, -47.6], [4, 'G']), ('control #5', [-170.34, 33.06], [2, 'S']), ('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K'])], [('control #2', [115.33, 82.84], [50, 'X']), ('control #4', [-159.4, -47.6], [4, 'G']), ('control #5', [-170.34, 33.06], [2, 'S']), ('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K']), ('control #8', [-119.29, -22.68], [11, 'K']), ('control #9', [-168.15, 26.03], [2, 'R']), ('regression #19', [8.0, 78.0], [31, 'X'])], [('control #6', [-48.09, 53.12], [22, 'U']), ('control #7', [93.32, -22.41], [46, 'K']), ('control #8', [-119.29, -22.68], [11, 'K']), ('control #9', [-168.15, 26.03], [2, 'R']), ('control #10', [-111.05, -54.91], [12, 'F']), ('control #11', [139.05, -8.2], [54, 'L']), ('regression #19', [8.0, 78.0], [31, 'X']), ('boundary #21', [20.9, 80.0], [33, 'X'])], [('control #9', [-168.15, 26.03], [2, 'R']), ('control #10', [-111.05, -54.91], [12, 'F']), ('control #11', [139.05, -8.2], [54, 'L']), ('boundary #12', [180.0, 10.0], [60, 'P']), ('boundary #13', [-180.0, -10.0], [1, 'L']), ('regression #14', [5.0, 60.0], [32, 'V']), ('boundary #20', [9.0, 75.0], [33, 'X']), ('boundary #23', [41.9, 83.0], [37, 'X'])], [('boundary #12', [180.0, 10.0], [60, 'P']), ('boundary #13', [-180.0, -10.0], [1, 'L']), ('regression #14', [5.0, 60.0], [32, 'V']), ('boundary #15', [3.0, 56.0], [32, 'V']), ('boundary #16', [2.99, 60.0], [31, 'V']), ('boundary #17', [11.99, 63.99], [32, 'V']), ('boundary #21', [20.9, 80.0], [33, 'X']), ('boundary #24', [10.0, 84.0], [33, 'X'])]]\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-utm-zone-band-band-x-extension","generated_at":"2026-09-29T14:48:16.613935+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Grid references, MGRS labels and CRS selection rely on the zone and band, including the Norway and Svalbard exceptions.","repair":"At the band x extension step restore `min(int((lat + 80.0) // 8), 19)`, leaving the rest of the model unchanged.","root_cause":"The band index wraps modulo 20 instead of saturating, so the extended band X becomes band C.","sha256":"d5a2906356d6af117eee11b3085281410f60f9021fe4e281292c5ca10e49cdb8","title":"UTM zone and latitude band lookup: band x extension · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.03,"exit_code":1,"observations":[{"actual":[20,"Q"],"check":"control #0","expected":[20,"Q"],"passed":true},{"actual":[1,"W"],"check":"control #1","expected":[1,"X"],"passed":false},{"actual":[50,"W"],"check":"control #2","expected":[50,"X"],"passed":false},{"actual":[16,"G"],"check":"control #3","expected":[16,"G"],"passed":true},{"actual":[4,"G"],"check":"control #4","expected":[4,"G"],"passed":true},{"actual":[2,"S"],"check":"control #5","expected":[2,"S"],"passed":true},{"actual":[22,"U"],"check":"control #6","expected":[22,"U"],"passed":true},{"actual":[46,"K"],"check":"control #7","expected":[46,"K"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [20, \"Q\"], \"expected\": [20, \"Q\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [1, \"W\"], \"expected\": [1, \"X\"], \"passed\": false}, {\"check\": \"control #2\", \"actual\": [50, \"W\"], \"expected\": [50, \"X\"], \"passed\": false}, {\"check\": \"control #3\", \"actual\": [16, \"G\"], \"expected\": [16, \"G\"], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [4, \"G\"], \"expected\": [4, \"G\"], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [2, \"S\"], \"expected\": [2, \"S\"], \"passed\": true}, {\"check\": \"control #6\", \"actual\": [22, \"U\"], \"expected\": [22, \"U\"], \"passed\": true}, {\"check\": \"control #7\", \"actual\": [46, \"K\"], \"expected\": [46, \"K\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.03,"exit_code":1,"observations":[{"actual":[20,"Q"],"check":"control #0","expected":[20,"Q"],"passed":true},{"actual":[1,"C"],"check":"control #1","expected":[1,"X"],"passed":false},{"actual":[50,"C"],"check":"control #2","expected":[50,"X"],"passed":false},{"actual":[16,"G"],"check":"control #3","expected":[16,"G"],"passed":true},{"actual":[4,"G"],"check":"control #4","expected":[4,"G"],"passed":true},{"actual":[2,"S"],"check":"control #5","expected":[2,"S"],"passed":true},{"actual":[22,"U"],"check":"control #6","expected":[22,"U"],"passed":true},{"actual":[46,"K"],"check":"control #7","expected":[46,"K"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [20, \"Q\"], \"expected\": [20, \"Q\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [1, \"C\"], \"expected\": [1, \"X\"], \"passed\": false}, {\"check\": \"control #2\", \"actual\": [50, \"C\"], \"expected\": [50, \"X\"], \"passed\": false}, {\"check\": \"control #3\", \"actual\": [16, \"G\"], \"expected\": [16, \"G\"], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [4, \"G\"], \"expected\": [4, \"G\"], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [2, \"S\"], \"expected\": [2, \"S\"], \"passed\": true}, {\"check\": \"control #6\", \"actual\": [22, \"U\"], \"expected\": [22, \"U\"], \"passed\": true}, {\"check\": \"control #7\", \"actual\": [46, \"K\"], \"expected\": [46, \"K\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.456,"exit_code":0,"observations":[{"actual":[20,"Q"],"check":"control #0","expected":[20,"Q"],"passed":true},{"actual":[1,"X"],"check":"control #1","expected":[1,"X"],"passed":true},{"actual":[50,"X"],"check":"control #2","expected":[50,"X"],"passed":true},{"actual":[16,"G"],"check":"control #3","expected":[16,"G"],"passed":true},{"actual":[4,"G"],"check":"control #4","expected":[4,"G"],"passed":true},{"actual":[2,"S"],"check":"control #5","expected":[2,"S"],"passed":true},{"actual":[22,"U"],"check":"control #6","expected":[22,"U"],"passed":true},{"actual":[46,"K"],"check":"control #7","expected":[46,"K"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"control #0\", \"actual\": [20, \"Q\"], \"expected\": [20, \"Q\"], \"passed\": true}, {\"check\": \"control #1\", \"actual\": [1, \"X\"], \"expected\": [1, \"X\"], \"passed\": true}, {\"check\": \"control #2\", \"actual\": [50, \"X\"], \"expected\": [50, \"X\"], \"passed\": true}, {\"check\": \"control #3\", \"actual\": [16, \"G\"], \"expected\": [16, \"G\"], \"passed\": true}, {\"check\": \"control #4\", \"actual\": [4, \"G\"], \"expected\": [4, \"G\"], \"passed\": true}, {\"check\": \"control #5\", \"actual\": [2, \"S\"], \"expected\": [2, \"S\"], \"passed\": true}, {\"check\": \"control #6\", \"actual\": [22, \"U\"], \"expected\": [22, \"U\"], \"passed\": true}, {\"check\": \"control #7\", \"actual\": [46, \"K\"], \"expected\": [46, \"K\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}