{"abstract":"A pickup reported as \"air\" is metered and skips the airport fee.","category":"Ride-hailing fare and surge pricing","checks":7,"contract":"Zone names are case-insensitive (normalized upper case). A flat fare table keyed \"A|B\" applies in both directions; a flat fare (0 is a valid promotional flat) is never surged. Otherwise the metered fare is surged (tenths, half up). Airport fees apply separately: the pickup fee of the pickup zone and the dropoff fee of the dropoff zone. Tolls are added last. Return [fare, flat|metered].","evaluation_group":"w2-ride-hailing-fare-surge-flat-zone-fares","failed_approach":"Normalizing only the pickup zone still misses mixed-case dropoffs.","family":"w2-ride-hailing-fare-surge-flat-zone-fares-zone-name-normalization","id":"FA-85636","implementations":{"attempt":{"sha256":"14ec966e6029b974aeb2aaecb876e57f2e5ee7a9a9f20d549a2214cf38123374","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(table, pickup_zone, drop_zone, metered, tolls, surge, airport_fees):\n    p, d = pickup_zone.upper(), drop_zone\n    flat = table.get(p + '|' + d, table.get(d + '|' + p))\n    if flat is not None:\n        fare, kind = flat, 'flat'\n    else:\n        fare, kind = (metered * surge * 2 + 10) // 20, 'metered'\n    fare += airport_fees.get(p, {}).get('pickup', 0) + airport_fees.get(d, {}).get('dropoff', 0)\n    return [fare + tolls, kind]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'MID', 'air', 2818, 600, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5127, 'metered']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 5170, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6570, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 803, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2203, 'metered']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'MID', 2204, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2954, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'UNI', 5858, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6458, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'UNI', 4561, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4650, 'flat']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'UNI', 2316, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4400, 'flat'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'air', 1509, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4200, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'air', 1624, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5400, 'flat']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'MID', 3754, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6381, 'metered']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'SHUT', 'SHUT', 1127, 600, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2854, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'MID', 2529, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2779, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'SHUT', 1706, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2559, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'MID', 'AIR', 3897, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4797, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'AIR', 5997, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4800, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 2722, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3522, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'AIR', 5836, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4800, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'DT', 3292, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3542, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'DT', 5622, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5872, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'SHUT', 'SHUT', 2719, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4079, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 3755, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5883, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'Dt', 3694, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5250, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'air', 2965, 250, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6980, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'UNI', 2911, 0, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4400, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 2503, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4005, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 2587, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4131, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'UNI', 2720, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4080, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'Dt', 3004, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3254, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'air', 3508, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5050, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'air', 5235, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5400, 'flat']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'Dt', 3354, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5000, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'AIR', 1957, 0, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4714, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'UNI', 2918, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2918, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'MID', 2209, 600, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3914, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'MID', 4348, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4348, 'metered'])]]\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":"8b94cdd2e1f0774ad98e52fe23f36464b81cbf2ed94cde2578fdb3aba3a32bd2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(table, pickup_zone, drop_zone, metered, tolls, surge, airport_fees):\n    p, d = pickup_zone, drop_zone\n    flat = table.get(p + '|' + d, table.get(d + '|' + p))\n    if flat is not None:\n        fare, kind = flat, 'flat'\n    else:\n        fare, kind = (metered * surge * 2 + 10) // 20, 'metered'\n    fare += airport_fees.get(p, {}).get('pickup', 0) + airport_fees.get(d, {}).get('dropoff', 0)\n    return [fare + tolls, kind]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'MID', 'air', 2818, 600, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5127, 'metered']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 5170, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6570, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 803, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2203, 'metered']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'MID', 2204, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2954, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'UNI', 5858, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6458, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'UNI', 4561, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4650, 'flat']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'UNI', 2316, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4400, 'flat'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'air', 1509, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4200, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'air', 1624, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5400, 'flat']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'MID', 3754, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6381, 'metered']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'SHUT', 'SHUT', 1127, 600, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2854, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'MID', 2529, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2779, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'SHUT', 1706, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2559, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'MID', 'AIR', 3897, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4797, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'AIR', 5997, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4800, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 2722, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3522, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'AIR', 5836, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4800, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'DT', 3292, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3542, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'DT', 5622, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5872, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'SHUT', 'SHUT', 2719, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4079, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 3755, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5883, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'Dt', 3694, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5250, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'air', 2965, 250, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6980, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'UNI', 2911, 0, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4400, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 2503, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4005, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 2587, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4131, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'UNI', 2720, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4080, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'Dt', 3004, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3254, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'air', 3508, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5050, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'air', 5235, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5400, 'flat']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'Dt', 3354, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5000, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'AIR', 1957, 0, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4714, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'UNI', 2918, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2918, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'MID', 2209, 600, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3914, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'MID', 4348, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4348, 'metered'])]]\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":"803e0432d5add98ee4daa3a443ad5ed511509da2fd98d3dcd214ac03ec1a4ed0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(table, pickup_zone, drop_zone, metered, tolls, surge, airport_fees):\n    p, d = pickup_zone.upper(), drop_zone.upper()\n    flat = table.get(p + '|' + d, table.get(d + '|' + p))\n    if flat is not None:\n        fare, kind = flat, 'flat'\n    else:\n        fare, kind = (metered * surge * 2 + 10) // 20, 'metered'\n    fare += airport_fees.get(p, {}).get('pickup', 0) + airport_fees.get(d, {}).get('dropoff', 0)\n    return [fare + tolls, kind]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'MID', 'air', 2818, 600, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5127, 'metered']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 5170, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6570, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 803, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2203, 'metered']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'MID', 2204, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2954, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'UNI', 5858, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6458, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'UNI', 4561, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4650, 'flat']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'UNI', 2316, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4400, 'flat'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'air', 1509, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4200, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'air', 1624, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5400, 'flat']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'MID', 3754, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6381, 'metered']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'SHUT', 'SHUT', 1127, 600, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2854, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'MID', 2529, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2779, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'SHUT', 1706, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2559, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'MID', 'AIR', 3897, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4797, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'AIR', 5997, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4800, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'air', 2722, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3522, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'AIR', 5836, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4800, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'DT', 3292, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3542, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'DT', 5622, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5872, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'SHUT', 'SHUT', 2719, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4079, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 3755, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5883, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'Dt', 3694, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5250, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'air', 2965, 250, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [6980, 'metered']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'air', 'UNI', 2911, 0, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4400, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 2503, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4005, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'MID', 2587, 250, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4131, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'UNI', 'UNI', 2720, 0, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4080, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'Dt', 3004, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3254, 'metered'])],\n [('regression: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'air', 3508, 250, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5050, 'flat']),\n  ('partial repair probe: zone name normalization',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'air', 5235, 600, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5400, 'flat']),\n  ('second regression',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'Dt', 3354, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [5000, 'flat']),\n  ('normal control 1',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'AIR', 'AIR', 1957, 0, 20,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4714, 'metered']),\n  ('normal control 2',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'UNI', 2918, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [2918, 'metered']),\n  ('normal control 3',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'DT', 'MID', 2209, 600, 15,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [3914, 'metered']),\n  ('normal control 4',\n   [{'AIR|DT': 4500, 'AIR|UNI': 3900, 'DT|SHUT': 0}, 'Dt', 'MID', 4348, 0, 10,\n    {'AIR': {'dropoff': 300, 'pickup': 500}}],\n   [4348, 'metered'])]]\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 toy pricing contract stipulated for this example; it does not reproduce the pricing of any real ride-hailing operator or regulator. 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-ride-hailing-fare-surge-flat-zone-fares-zone-name-normalization","generated_at":"2026-09-29T14:50:42.226079+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ride-hailing prices are computed per trip at scale; ordering, unit and boundary slips become systematic over- or under-charging.","repair":"Upper-case both zone names before lookups.","root_cause":"Zone names are not normalized before lookup.","sha256":"918a77c850242f6b8dc6836f68881a9f87033d4cdd2b2d18bfa557854f782cff","title":"Lower-case zone names miss the flat table · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.945,"exit_code":1,"observations":[{"actual":[4827,"metered"],"check":"regression: zone name normalization","expected":[5127,"metered"],"passed":false},{"actual":[6270,"metered"],"check":"partial repair probe: zone name normalization","expected":[6570,"metered"],"passed":false},{"actual":[1903,"metered"],"check":"second regression","expected":[2203,"metered"],"passed":false},{"actual":[2954,"metered"],"check":"normal control 1","expected":[2954,"metered"],"passed":true},{"actual":[6458,"metered"],"check":"normal control 2","expected":[6458,"metered"],"passed":true},{"actual":[4650,"flat"],"check":"normal control 3","expected":[4650,"flat"],"passed":true},{"actual":[4400,"flat"],"check":"normal control 4","expected":[4400,"flat"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: zone name normalization\", \"actual\": [4827, \"metered\"], \"expected\": [5127, \"metered\"], \"passed\": false}, {\"check\": \"partial repair probe: zone name normalization\", \"actual\": [6270, \"metered\"], \"expected\": [6570, \"metered\"], \"passed\": false}, {\"check\": \"second regression\", \"actual\": [1903, \"metered\"], \"expected\": [2203, \"metered\"], \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": [2954, \"metered\"], \"expected\": [2954, \"metered\"], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [6458, \"metered\"], \"expected\": [6458, \"metered\"], \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": [4650, \"flat\"], \"expected\": [4650, \"flat\"], \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": [4400, \"flat\"], \"expected\": [4400, \"flat\"], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.341,"exit_code":1,"observations":[{"actual":[4827,"metered"],"check":"regression: zone name normalization","expected":[5127,"metered"],"passed":false},{"actual":[6270,"metered"],"check":"partial repair probe: zone name normalization","expected":[6570,"metered"],"passed":false},{"actual":[1903,"metered"],"check":"second regression","expected":[2203,"metered"],"passed":false},{"actual":[2954,"metered"],"check":"normal control 1","expected":[2954,"metered"],"passed":true},{"actual":[6458,"metered"],"check":"normal control 2","expected":[6458,"metered"],"passed":true},{"actual":[4650,"flat"],"check":"normal control 3","expected":[4650,"flat"],"passed":true},{"actual":[4400,"flat"],"check":"normal control 4","expected":[4400,"flat"],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: zone name normalization\", \"actual\": [4827, \"metered\"], \"expected\": [5127, \"metered\"], \"passed\": false}, {\"check\": \"partial repair probe: zone name normalization\", \"actual\": [6270, \"metered\"], \"expected\": [6570, \"metered\"], \"passed\": false}, {\"check\": \"second regression\", \"actual\": [1903, \"metered\"], \"expected\": [2203, \"metered\"], \"passed\": false}, {\"check\": \"normal control 1\", \"actual\": [2954, \"metered\"], \"expected\": [2954, \"metered\"], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [6458, \"metered\"], \"expected\": [6458, \"metered\"], \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": [4650, \"flat\"], \"expected\": [4650, \"flat\"], \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": [4400, \"flat\"], \"expected\": [4400, \"flat\"], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.62,"exit_code":0,"observations":[{"actual":[5127,"metered"],"check":"regression: zone name normalization","expected":[5127,"metered"],"passed":true},{"actual":[6570,"metered"],"check":"partial repair probe: zone name normalization","expected":[6570,"metered"],"passed":true},{"actual":[2203,"metered"],"check":"second regression","expected":[2203,"metered"],"passed":true},{"actual":[2954,"metered"],"check":"normal control 1","expected":[2954,"metered"],"passed":true},{"actual":[6458,"metered"],"check":"normal control 2","expected":[6458,"metered"],"passed":true},{"actual":[4650,"flat"],"check":"normal control 3","expected":[4650,"flat"],"passed":true},{"actual":[4400,"flat"],"check":"normal control 4","expected":[4400,"flat"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: zone name normalization\", \"actual\": [5127, \"metered\"], \"expected\": [5127, \"metered\"], \"passed\": true}, {\"check\": \"partial repair probe: zone name normalization\", \"actual\": [6570, \"metered\"], \"expected\": [6570, \"metered\"], \"passed\": true}, {\"check\": \"second regression\", \"actual\": [2203, \"metered\"], \"expected\": [2203, \"metered\"], \"passed\": true}, {\"check\": \"normal control 1\", \"actual\": [2954, \"metered\"], \"expected\": [2954, \"metered\"], \"passed\": true}, {\"check\": \"normal control 2\", \"actual\": [6458, \"metered\"], \"expected\": [6458, \"metered\"], \"passed\": true}, {\"check\": \"normal control 3\", \"actual\": [4650, \"flat\"], \"expected\": [4650, \"flat\"], \"passed\": true}, {\"check\": \"normal control 4\", \"actual\": [4400, \"flat\"], \"expected\": [4400, \"flat\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}