{"abstract":"The car position drifts or barely moves with encoder pulses.","category":"Elevator dispatch scheduling","checks":8,"contract":"Car position is tracked in micrometres: start_mm*1000, pulses add count*um_per_pulse, a door-zone magnet at floor k resets the position to floor_mm[k]*1000. After every event the position in mm is floor(um/1000); the car is at the nearest floor (ties to the lower index) if within zone_mm inclusive, otherwise None (between floors).","evaluation_group":"w2-elevator_dispatch_scheduling-encoder-door-zone","failed_approach":"Dividing the pulse count first discards all counts below 1000.","family":"w2-elevator_dispatch_scheduling-encoder-door-zone-pulse-unit-conversion","id":"FA-67821","implementations":{"attempt":{"sha256":"6ce9f146b8ad3d5b3d43436d36d0eccb9b0feb6a92cd541e1c49f4e289af6744","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    table = x['floor_mm']\n    pos = x['start_mm'] * 1000\n    out = []\n    for kind, v in x['events']:\n        if kind == 'pulses':\n            pos += v // 1000 * x['um_per_pulse']\n        else:\n            pos = table[v] * 1000\n        mm = pos // 1000\n        best = min(range(len(table)), key=lambda k: (abs(table[k] - mm), k))\n        out.append(best if abs(table[best] - mm) <= x['zone_mm'] else None)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: encoder slip accumulates', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3000], ['pulses', 3000]]}, [1, 2]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('sampled regression 1', {'floor_mm': [0, 4200, 8400, 11400, 14900], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 5000], ['magnet', 4], ['pulses', 2999], ['pulses', 4200], ['pulses', 2999], ['magnet', 4]]}, [3, None, 4, None, None, None, 4]), ('sampled regression 4', {'floor_mm': [0, 3000, 6500, 10000, 13500, 16500, 20000], 'start_mm': 2990, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 1000], ['pulses', 100]]}, [None, None]), ('sampled regression 7', {'floor_mm': [0, 3500, 7700, 10700, 14200, 17200, 21400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 1000], ['pulses', 100], ['magnet', 2], ['pulses', 3000]]}, [0, None, None, None, 2, 3])], [('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('sampled regression 6', {'floor_mm': [0, 3000, 6000, 9000, 12500, 16000, 19000, 22500, 26700], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 2], ['pulses', 3000], ['pulses', 4200], ['magnet', 2], ['pulses', 5000], ['pulses', 2999], ['pulses', 3500]]}, [2, 3, None, 2, None, None, None]), ('sampled regression 1', {'floor_mm': [0, 4200, 8400, 11400, 14900], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 5000], ['magnet', 4], ['pulses', 2999], ['pulses', 4200], ['pulses', 2999], ['magnet', 4]]}, [3, None, 4, None, None, None, 4]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 12', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 3499], ['pulses', 1000], ['pulses', 3500], ['pulses', 100], ['magnet', 2], ['pulses', 3500]]}, [0, None, None, None, None, 2, None]), ('sampled regression 15', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19100], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 2999], ['pulses', 3499]]}, [1, None]), ('sampled regression 18', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19100], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 75, 'events': [['pulses', 3499], ['pulses', 3000], ['pulses', 3000]]}, [None, None, None])], [('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('sampled regression 13', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400, 20900, 25100], 'start_mm': 20, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 5000], ['pulses', 3499], ['pulses', 4200], ['pulses', 5000]]}, [None, None, None, None]), ('sampled regression 7', {'floor_mm': [0, 3500, 7700, 10700, 14200, 17200, 21400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 1000], ['pulses', 100], ['magnet', 2], ['pulses', 3000]]}, [0, None, None, None, 2, 3]), ('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('regression: fractional millimetre below a floor', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 1003, 'zone_mm': 75, 'events': [['pulses', 1]]}, [1]), ('sampled regression 23', {'floor_mm': [0, 4200, 7700, 11200, 15400, 18400, 22600, 25600, 28600], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3500], ['pulses', 3000]]}, [None, None]), ('sampled regression 26', {'floor_mm': [0, 4200, 7200, 11400, 14900, 17900, 21400, 25600], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['pulses', 4200], ['pulses', 4200], ['pulses', 3500], ['pulses', 2999], ['pulses', 3499], ['pulses', 2999], ['pulses', 4200]]}, [1, None, None, 4, None, 6, None]), ('sampled regression 29', {'floor_mm': [0, 4200, 8400, 12600, 16100, 20300, 23800, 27300], 'start_mm': 20, 'um_per_pulse': 600, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 2999], ['pulses', 3499], ['pulses', 5000], ['magnet', 1], ['pulses', 100]]}, [3, None, None, None, 1, None])], [('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 20', {'floor_mm': [0, 3500, 7000, 11200, 14700, 17700], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3499], ['pulses', 2999], ['pulses', 1000], ['pulses', 3500]]}, [1, None, None, None]), ('sampled regression 12', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 3499], ['pulses', 1000], ['pulses', 3500], ['pulses', 100], ['magnet', 2], ['pulses', 3500]]}, [0, None, None, None, None, 2, None]), ('regression: encoder slip accumulates', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3000], ['pulses', 3000]]}, [1, 2]), ('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('sampled regression 34', {'floor_mm': [0, 4200, 7700, 10700, 14200, 17700, 20700, 23700], 'start_mm': 2990, 'um_per_pulse': 600, 'zone_mm': 50, 'events': [['magnet', 5], ['pulses', 5000]]}, [5, 6]), ('sampled regression 37', {'floor_mm': [0, 4200, 7200, 10700, 14200, 17700, 20700], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 2999], ['pulses', 1000], ['pulses', 100], ['magnet', 2]]}, [None, None, None, 2]), ('sampled regression 40', {'floor_mm': [0, 4200, 7700, 11900, 15400, 19600, 22600, 26800, 29800], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 0], ['magnet', 8], ['pulses', 5000], ['pulses', 3000], ['pulses', 5000], ['magnet', 4]]}, [None, 0, 8, None, None, None, 4])], [('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('sampled regression 28', {'floor_mm': [0, 4200, 7200, 10700, 14200, 17200, 20700, 24900, 28400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 4200], ['pulses', 3000], ['pulses', 3500]]}, [0, 1, 2, 3]), ('sampled regression 17', {'floor_mm': [0, 3500, 7700, 11200, 14700, 17700], 'start_mm': 20, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3500], ['pulses', 3000], ['pulses', 3499], ['pulses', 2999], ['magnet', 2], ['pulses', 4200]]}, [1, None, None, None, 2, None]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 45', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19800, 22800, 26300], 'start_mm': 2990, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['magnet', 3], ['pulses', 3500], ['pulses', 3500]]}, [3, None, 4]), ('sampled regression 48', {'floor_mm': [0, 3000, 6000, 9000, 13200, 16200, 20400, 23400, 26400], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['magnet', 0], ['pulses', 1000], ['magnet', 2]]}, [0, None, 2]), ('sampled regression 51', {'floor_mm': [0, 4200, 7200, 10700, 14900, 19100], 'start_mm': 2990, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 100]]}, [0, None, 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":"5c8452b8f444b91f869438f835566ef27465490a0cf51b9f4b738b89286a6bed","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    table = x['floor_mm']\n    pos = x['start_mm'] * 1000\n    out = []\n    for kind, v in x['events']:\n        if kind == 'pulses':\n            pos += v * x['um_per_pulse'] // 1000\n        else:\n            pos = table[v] * 1000\n        mm = pos // 1000\n        best = min(range(len(table)), key=lambda k: (abs(table[k] - mm), k))\n        out.append(best if abs(table[best] - mm) <= x['zone_mm'] else None)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: encoder slip accumulates', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3000], ['pulses', 3000]]}, [1, 2]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('sampled regression 1', {'floor_mm': [0, 4200, 8400, 11400, 14900], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 5000], ['magnet', 4], ['pulses', 2999], ['pulses', 4200], ['pulses', 2999], ['magnet', 4]]}, [3, None, 4, None, None, None, 4]), ('sampled regression 4', {'floor_mm': [0, 3000, 6500, 10000, 13500, 16500, 20000], 'start_mm': 2990, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 1000], ['pulses', 100]]}, [None, None]), ('sampled regression 7', {'floor_mm': [0, 3500, 7700, 10700, 14200, 17200, 21400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 1000], ['pulses', 100], ['magnet', 2], ['pulses', 3000]]}, [0, None, None, None, 2, 3])], [('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('sampled regression 6', {'floor_mm': [0, 3000, 6000, 9000, 12500, 16000, 19000, 22500, 26700], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 2], ['pulses', 3000], ['pulses', 4200], ['magnet', 2], ['pulses', 5000], ['pulses', 2999], ['pulses', 3500]]}, [2, 3, None, 2, None, None, None]), ('sampled regression 1', {'floor_mm': [0, 4200, 8400, 11400, 14900], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 5000], ['magnet', 4], ['pulses', 2999], ['pulses', 4200], ['pulses', 2999], ['magnet', 4]]}, [3, None, 4, None, None, None, 4]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 12', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 3499], ['pulses', 1000], ['pulses', 3500], ['pulses', 100], ['magnet', 2], ['pulses', 3500]]}, [0, None, None, None, None, 2, None]), ('sampled regression 15', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19100], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 2999], ['pulses', 3499]]}, [1, None]), ('sampled regression 18', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19100], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 75, 'events': [['pulses', 3499], ['pulses', 3000], ['pulses', 3000]]}, [None, None, None])], [('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('sampled regression 13', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400, 20900, 25100], 'start_mm': 20, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 5000], ['pulses', 3499], ['pulses', 4200], ['pulses', 5000]]}, [None, None, None, None]), ('sampled regression 7', {'floor_mm': [0, 3500, 7700, 10700, 14200, 17200, 21400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 1000], ['pulses', 100], ['magnet', 2], ['pulses', 3000]]}, [0, None, None, None, 2, 3]), ('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('regression: fractional millimetre below a floor', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 1003, 'zone_mm': 75, 'events': [['pulses', 1]]}, [1]), ('sampled regression 23', {'floor_mm': [0, 4200, 7700, 11200, 15400, 18400, 22600, 25600, 28600], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3500], ['pulses', 3000]]}, [None, None]), ('sampled regression 26', {'floor_mm': [0, 4200, 7200, 11400, 14900, 17900, 21400, 25600], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['pulses', 4200], ['pulses', 4200], ['pulses', 3500], ['pulses', 2999], ['pulses', 3499], ['pulses', 2999], ['pulses', 4200]]}, [1, None, None, 4, None, 6, None]), ('sampled regression 29', {'floor_mm': [0, 4200, 8400, 12600, 16100, 20300, 23800, 27300], 'start_mm': 20, 'um_per_pulse': 600, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 2999], ['pulses', 3499], ['pulses', 5000], ['magnet', 1], ['pulses', 100]]}, [3, None, None, None, 1, None])], [('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 20', {'floor_mm': [0, 3500, 7000, 11200, 14700, 17700], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3499], ['pulses', 2999], ['pulses', 1000], ['pulses', 3500]]}, [1, None, None, None]), ('sampled regression 12', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 3499], ['pulses', 1000], ['pulses', 3500], ['pulses', 100], ['magnet', 2], ['pulses', 3500]]}, [0, None, None, None, None, 2, None]), ('regression: encoder slip accumulates', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3000], ['pulses', 3000]]}, [1, 2]), ('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('sampled regression 34', {'floor_mm': [0, 4200, 7700, 10700, 14200, 17700, 20700, 23700], 'start_mm': 2990, 'um_per_pulse': 600, 'zone_mm': 50, 'events': [['magnet', 5], ['pulses', 5000]]}, [5, 6]), ('sampled regression 37', {'floor_mm': [0, 4200, 7200, 10700, 14200, 17700, 20700], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 2999], ['pulses', 1000], ['pulses', 100], ['magnet', 2]]}, [None, None, None, 2]), ('sampled regression 40', {'floor_mm': [0, 4200, 7700, 11900, 15400, 19600, 22600, 26800, 29800], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 0], ['magnet', 8], ['pulses', 5000], ['pulses', 3000], ['pulses', 5000], ['magnet', 4]]}, [None, 0, 8, None, None, None, 4])], [('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('sampled regression 28', {'floor_mm': [0, 4200, 7200, 10700, 14200, 17200, 20700, 24900, 28400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 4200], ['pulses', 3000], ['pulses', 3500]]}, [0, 1, 2, 3]), ('sampled regression 17', {'floor_mm': [0, 3500, 7700, 11200, 14700, 17700], 'start_mm': 20, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3500], ['pulses', 3000], ['pulses', 3499], ['pulses', 2999], ['magnet', 2], ['pulses', 4200]]}, [1, None, None, None, 2, None]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 45', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19800, 22800, 26300], 'start_mm': 2990, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['magnet', 3], ['pulses', 3500], ['pulses', 3500]]}, [3, None, 4]), ('sampled regression 48', {'floor_mm': [0, 3000, 6000, 9000, 13200, 16200, 20400, 23400, 26400], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['magnet', 0], ['pulses', 1000], ['magnet', 2]]}, [0, None, 2]), ('sampled regression 51', {'floor_mm': [0, 4200, 7200, 10700, 14900, 19100], 'start_mm': 2990, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 100]]}, [0, None, 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":"eb92fd145de5576a745b669e0049afe8cf01928bf6bae79554a24f15dee3d617","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    table = x['floor_mm']\n    pos = x['start_mm'] * 1000\n    out = []\n    for kind, v in x['events']:\n        if kind == 'pulses':\n            pos += v * x['um_per_pulse']\n        else:\n            pos = table[v] * 1000\n        mm = pos // 1000\n        best = min(range(len(table)), key=lambda k: (abs(table[k] - mm), k))\n        out.append(best if abs(table[best] - mm) <= x['zone_mm'] else None)\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: encoder slip accumulates', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3000], ['pulses', 3000]]}, [1, 2]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('sampled regression 1', {'floor_mm': [0, 4200, 8400, 11400, 14900], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 5000], ['magnet', 4], ['pulses', 2999], ['pulses', 4200], ['pulses', 2999], ['magnet', 4]]}, [3, None, 4, None, None, None, 4]), ('sampled regression 4', {'floor_mm': [0, 3000, 6500, 10000, 13500, 16500, 20000], 'start_mm': 2990, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 1000], ['pulses', 100]]}, [None, None]), ('sampled regression 7', {'floor_mm': [0, 3500, 7700, 10700, 14200, 17200, 21400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 1000], ['pulses', 100], ['magnet', 2], ['pulses', 3000]]}, [0, None, None, None, 2, 3])], [('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('sampled regression 6', {'floor_mm': [0, 3000, 6000, 9000, 12500, 16000, 19000, 22500, 26700], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 2], ['pulses', 3000], ['pulses', 4200], ['magnet', 2], ['pulses', 5000], ['pulses', 2999], ['pulses', 3500]]}, [2, 3, None, 2, None, None, None]), ('sampled regression 1', {'floor_mm': [0, 4200, 8400, 11400, 14900], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 5000], ['magnet', 4], ['pulses', 2999], ['pulses', 4200], ['pulses', 2999], ['magnet', 4]]}, [3, None, 4, None, None, None, 4]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 12', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 3499], ['pulses', 1000], ['pulses', 3500], ['pulses', 100], ['magnet', 2], ['pulses', 3500]]}, [0, None, None, None, None, 2, None]), ('sampled regression 15', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19100], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 2999], ['pulses', 3499]]}, [1, None]), ('sampled regression 18', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19100], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 75, 'events': [['pulses', 3499], ['pulses', 3000], ['pulses', 3000]]}, [None, None, None])], [('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('sampled regression 13', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400, 20900, 25100], 'start_mm': 20, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 5000], ['pulses', 3499], ['pulses', 4200], ['pulses', 5000]]}, [None, None, None, None]), ('sampled regression 7', {'floor_mm': [0, 3500, 7700, 10700, 14200, 17200, 21400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 1000], ['pulses', 100], ['magnet', 2], ['pulses', 3000]]}, [0, None, None, None, 2, 3]), ('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('regression: fractional millimetre below a floor', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 1003, 'zone_mm': 75, 'events': [['pulses', 1]]}, [1]), ('sampled regression 23', {'floor_mm': [0, 4200, 7700, 11200, 15400, 18400, 22600, 25600, 28600], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3500], ['pulses', 3000]]}, [None, None]), ('sampled regression 26', {'floor_mm': [0, 4200, 7200, 11400, 14900, 17900, 21400, 25600], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['pulses', 4200], ['pulses', 4200], ['pulses', 3500], ['pulses', 2999], ['pulses', 3499], ['pulses', 2999], ['pulses', 4200]]}, [1, None, None, 4, None, 6, None]), ('sampled regression 29', {'floor_mm': [0, 4200, 8400, 12600, 16100, 20300, 23800, 27300], 'start_mm': 20, 'um_per_pulse': 600, 'zone_mm': 50, 'events': [['magnet', 3], ['pulses', 2999], ['pulses', 3499], ['pulses', 5000], ['magnet', 1], ['pulses', 100]]}, [3, None, None, None, 1, None])], [('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 20', {'floor_mm': [0, 3500, 7000, 11200, 14700, 17700], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3499], ['pulses', 2999], ['pulses', 1000], ['pulses', 3500]]}, [1, None, None, None]), ('sampled regression 12', {'floor_mm': [0, 3000, 6000, 10200, 13200, 17400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 3499], ['pulses', 1000], ['pulses', 3500], ['pulses', 100], ['magnet', 2], ['pulses', 3500]]}, [0, None, None, None, None, 2, None]), ('regression: encoder slip accumulates', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3000], ['pulses', 3000]]}, [1, 2]), ('regression: magnet correction', {'floor_mm': [0, 3000, 6000], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 1], ['pulses', 3000]]}, [1, 1, 2]), ('sampled regression 34', {'floor_mm': [0, 4200, 7700, 10700, 14200, 17700, 20700, 23700], 'start_mm': 2990, 'um_per_pulse': 600, 'zone_mm': 50, 'events': [['magnet', 5], ['pulses', 5000]]}, [5, 6]), ('sampled regression 37', {'floor_mm': [0, 4200, 7200, 10700, 14200, 17700, 20700], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 2999], ['pulses', 1000], ['pulses', 100], ['magnet', 2]]}, [None, None, None, 2]), ('sampled regression 40', {'floor_mm': [0, 4200, 7700, 11900, 15400, 19600, 22600, 26800, 29800], 'start_mm': 20, 'um_per_pulse': 1000, 'zone_mm': 50, 'events': [['pulses', 3000], ['magnet', 0], ['magnet', 8], ['pulses', 5000], ['pulses', 3000], ['pulses', 5000], ['magnet', 4]]}, [None, 0, 8, None, None, None, 4])], [('regression: six-tenths of a millimetre short of the zone', {'floor_mm': [0, 3000], 'start_mm': 2924, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['pulses', 1], ['pulses', 1]]}, [None, 1]), ('sampled regression 28', {'floor_mm': [0, 4200, 7200, 10700, 14200, 17200, 20700, 24900, 28400], 'start_mm': 2990, 'um_per_pulse': 997, 'zone_mm': 75, 'events': [['magnet', 0], ['pulses', 4200], ['pulses', 3000], ['pulses', 3500]]}, [0, 1, 2, 3]), ('sampled regression 17', {'floor_mm': [0, 3500, 7700, 11200, 14700, 17700], 'start_mm': 20, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 3500], ['pulses', 3000], ['pulses', 3499], ['pulses', 2999], ['magnet', 2], ['pulses', 4200]]}, [1, None, None, None, 2, None]), ('regression: zone edge', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 1000, 'zone_mm': 75, 'events': [['pulses', 2925], ['pulses', 1]]}, [1, 1]), ('regression: sub-millimetre pulses', {'floor_mm': [0, 3000], 'start_mm': 0, 'um_per_pulse': 997, 'zone_mm': 50, 'events': [['pulses', 999], ['pulses', 2]]}, [None, None]), ('sampled regression 45', {'floor_mm': [0, 3000, 7200, 11400, 15600, 19800, 22800, 26300], 'start_mm': 2990, 'um_per_pulse': 600, 'zone_mm': 75, 'events': [['magnet', 3], ['pulses', 3500], ['pulses', 3500]]}, [3, None, 4]), ('sampled regression 48', {'floor_mm': [0, 3000, 6000, 9000, 13200, 16200, 20400, 23400, 26400], 'start_mm': 0, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['magnet', 0], ['pulses', 1000], ['magnet', 2]]}, [0, None, 2]), ('sampled regression 51', {'floor_mm': [0, 4200, 7200, 10700, 14900, 19100], 'start_mm': 2990, 'um_per_pulse': 1003, 'zone_mm': 50, 'events': [['magnet', 0], ['pulses', 100], ['pulses', 100]]}, [0, None, 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 toy lift-control contract for a bounded teaching model; it makes no claim of conformance to any lift code or vendor dispatcher and omits real safety cases. 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-elevator_dispatch_scheduling-encoder-door-zone-pulse-unit-conversion","generated_at":"2026-09-29T14:47:56.495024+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Lift group controllers make these decisions many times per minute; a wrong answer strands passengers, wastes trips or overrides a safety rule.","repair":"Accumulate pulse travel in micrometres.","root_cause":"Pulse travel is converted to millimetres and then added to a micrometre position.","sha256":"ad5978fcbb94a78af1ed2fcc296fc4f7368facbad841d864cf898f8dc612e3c3","title":"Encoder position and door zone detection: pulse unit conversion · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.88,"exit_code":1,"observations":[{"actual":[0,0],"check":"regression: encoder slip accumulates","expected":[1,2],"passed":false},{"actual":[0,0],"check":"regression: sub-millimetre pulses","expected":[null,null],"passed":false},{"actual":[0,1,1],"check":"regression: magnet correction","expected":[1,1,2],"passed":false},{"actual":[0,0],"check":"regression: zone edge","expected":[1,1],"passed":false},{"actual":[null,null],"check":"regression: six-tenths of a millimetre short of the zone","expected":[null,1],"passed":false},{"actual":[3,3,4,4,4,4,4],"check":"sampled regression 1","expected":[3,null,4,null,null,null,4],"passed":false},{"actual":[1,1],"check":"sampled regression 4","expected":[null,null],"passed":false},{"actual":[0,0,0,0,2,2],"check":"sampled regression 7","expected":[0,null,null,null,2,3],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: encoder slip accumulates\", \"actual\": [0, 0], \"expected\": [1, 2], \"passed\": false}, {\"check\": \"regression: sub-millimetre pulses\", \"actual\": [0, 0], \"expected\": [null, null], \"passed\": false}, {\"check\": \"regression: magnet correction\", \"actual\": [0, 1, 1], \"expected\": [1, 1, 2], \"passed\": false}, {\"check\": \"regression: zone edge\", \"actual\": [0, 0], \"expected\": [1, 1], \"passed\": false}, {\"check\": \"regression: six-tenths of a millimetre short of the zone\", \"actual\": [null, null], \"expected\": [null, 1], \"passed\": false}, {\"check\": \"sampled regression 1\", \"actual\": [3, 3, 4, 4, 4, 4, 4], \"expected\": [3, null, 4, null, null, null, 4], \"passed\": false}, {\"check\": \"sampled regression 4\", \"actual\": [1, 1], \"expected\": [null, null], \"passed\": false}, {\"check\": \"sampled regression 7\", \"actual\": [0, 0, 0, 0, 2, 2], \"expected\": [0, null, null, null, 2, 3], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.614,"exit_code":1,"observations":[{"actual":[0,0],"check":"regression: encoder slip accumulates","expected":[1,2],"passed":false},{"actual":[0,0],"check":"regression: sub-millimetre pulses","expected":[null,null],"passed":false},{"actual":[0,1,1],"check":"regression: magnet correction","expected":[1,1,2],"passed":false},{"actual":[0,0],"check":"regression: zone edge","expected":[1,1],"passed":false},{"actual":[null,null],"check":"regression: six-tenths of a millimetre short of the zone","expected":[null,1],"passed":false},{"actual":[3,3,4,4,4,4,4],"check":"sampled regression 1","expected":[3,null,4,null,null,null,4],"passed":false},{"actual":[1,1],"check":"sampled regression 4","expected":[null,null],"passed":false},{"actual":[0,0,0,0,2,2],"check":"sampled regression 7","expected":[0,null,null,null,2,3],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: encoder slip accumulates\", \"actual\": [0, 0], \"expected\": [1, 2], \"passed\": false}, {\"check\": \"regression: sub-millimetre pulses\", \"actual\": [0, 0], \"expected\": [null, null], \"passed\": false}, {\"check\": \"regression: magnet correction\", \"actual\": [0, 1, 1], \"expected\": [1, 1, 2], \"passed\": false}, {\"check\": \"regression: zone edge\", \"actual\": [0, 0], \"expected\": [1, 1], \"passed\": false}, {\"check\": \"regression: six-tenths of a millimetre short of the zone\", \"actual\": [null, null], \"expected\": [null, 1], \"passed\": false}, {\"check\": \"sampled regression 1\", \"actual\": [3, 3, 4, 4, 4, 4, 4], \"expected\": [3, null, 4, null, null, null, 4], \"passed\": false}, {\"check\": \"sampled regression 4\", \"actual\": [1, 1], \"expected\": [null, null], \"passed\": false}, {\"check\": \"sampled regression 7\", \"actual\": [0, 0, 0, 0, 2, 2], \"expected\": [0, null, null, null, 2, 3], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.957,"exit_code":0,"observations":[{"actual":[1,2],"check":"regression: encoder slip accumulates","expected":[1,2],"passed":true},{"actual":[null,null],"check":"regression: sub-millimetre pulses","expected":[null,null],"passed":true},{"actual":[1,1,2],"check":"regression: magnet correction","expected":[1,1,2],"passed":true},{"actual":[1,1],"check":"regression: zone edge","expected":[1,1],"passed":true},{"actual":[null,1],"check":"regression: six-tenths of a millimetre short of the zone","expected":[null,1],"passed":true},{"actual":[3,null,4,null,null,null,4],"check":"sampled regression 1","expected":[3,null,4,null,null,null,4],"passed":true},{"actual":[null,null],"check":"sampled regression 4","expected":[null,null],"passed":true},{"actual":[0,null,null,null,2,3],"check":"sampled regression 7","expected":[0,null,null,null,2,3],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: encoder slip accumulates\", \"actual\": [1, 2], \"expected\": [1, 2], \"passed\": true}, {\"check\": \"regression: sub-millimetre pulses\", \"actual\": [null, null], \"expected\": [null, null], \"passed\": true}, {\"check\": \"regression: magnet correction\", \"actual\": [1, 1, 2], \"expected\": [1, 1, 2], \"passed\": true}, {\"check\": \"regression: zone edge\", \"actual\": [1, 1], \"expected\": [1, 1], \"passed\": true}, {\"check\": \"regression: six-tenths of a millimetre short of the zone\", \"actual\": [null, 1], \"expected\": [null, 1], \"passed\": true}, {\"check\": \"sampled regression 1\", \"actual\": [3, null, 4, null, null, null, 4], \"expected\": [3, null, 4, null, null, null, 4], \"passed\": true}, {\"check\": \"sampled regression 4\", \"actual\": [null, null], \"expected\": [null, null], \"passed\": true}, {\"check\": \"sampled regression 7\", \"actual\": [0, null, null, null, 2, 3], \"expected\": [0, null, null, null, 2, 3], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}