{"abstract":"Candidates whose exam moved day and venue are told only about the venue.","category":"Exam timetabling constraints","checks":8,"contract":"old/new timetables map exam -> [period, room]; rooms room -> venue; enrol [student, exam] rows (may repeat). Reasons: added, removed, moved (period changed; takes precedence), venue (same period, different venue). A room change within the same venue needs no notice. Return distinct [student, exam, reason] rows sorted by student, exam.","contract_signature":"old, new, rooms, enrol","evaluation_group":"w2-exam-timetabling-constraints-republish-change-notifications","failed_approach":"Comparing whole entries reports room-only changes as moves.","family":"w2-exam-timetabling-constraints-republish-change-notifications-moved-precedence","id":"FA-94736","implementations":{"attempt":{"sha256":"355c2d8a72d1abdde140de1fa4958864178987f54a3de8b1001e101d162e4f27","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(old, new, rooms, enrol):\n    reasons = {}\n    for ex in set(old) | set(new):\n        if ex not in old:\n            reasons[ex] = 'added'\n        elif ex not in new:\n            reasons[ex] = 'removed'\n        elif old[ex] != new[ex]:\n            reasons[ex] = 'moved'\n        elif rooms[old[ex][1]] != rooms[new[ex][1]]:\n            reasons[ex] = 'venue'\n    out = sorted(set((st, ex, reasons[ex]) for st, ex in enrol if ex in reasons))\n    return [list(t) for t in out]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: moved precedence 1',\n   [{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   [['s1', 'A', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [0, 'L2'], 'MATH101H': [2, 'G1'], 'CHEM120': [0, 'L1'], 'BIO130': [3, 'G1']},\n    {'MATH101': [0, 'L2'],\n     'MATH101H': [2, 'G1'],\n     'PHYS110': [2, 'H2'],\n     'CHEM120': [0, 'L1'],\n     'BIO130': [2, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'HIST140'], ['s3', 'BIO130'], ['s2', 'BIO130'], ['s1', 'MATH101H'], ['s5', 'ECON150'],\n     ['s1', 'HIST140'], ['s4', 'MATH101'], ['s1', 'BIO130'], ['s4', 'HIST140'], ['s2', 'PHYS110']]],\n   [['s1', 'BIO130', 'moved'], ['s2', 'BIO130', 'moved'], ['s2', 'PHYS110', 'added'],\n    ['s3', 'BIO130', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [0, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'H2']},\n    {'MATH101': [2, 'L1'], 'MATH101H': [0, 'H1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'G1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'ECON150'], ['s2', 'BIO130'], ['s2', 'PHYS110']]],\n   []),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A'], ['s1', 'A']]],\n   []),\n  ('normal control 5',\n   [{'PHYS110': [0, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [2, 'H2']},\n    {'MATH101': [2, 'L2'], 'PHYS110': [3, 'G1'], 'CHEM120': [1, 'H2'], 'BIO130': [2, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'HIST140'],\n     ['s4', 'BIO130'], ['s2', 'HIST140'], ['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'MATH101'],\n     ['s3', 'BIO130'], ['s5', 'MATH101']]],\n   [['s1', 'MATH101', 'added'], ['s1', 'PHYS110', 'moved'], ['s2', 'MATH101', 'added'],\n    ['s3', 'BIO130', 'venue'], ['s3', 'MATH101', 'added'], ['s4', 'BIO130', 'venue'],\n    ['s5', 'MATH101', 'added']]),\n  ('normal control 6',\n   [{'MATH101': [0, 'L2'], 'MATH101H': [3, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},\n    {'MATH101': [0, 'L2'], 'PHYS110': [1, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'ECON150']]],\n   []),\n  ('normal control 7',\n   [{'MATH101': [1, 'L2'],\n     'MATH101H': [1, 'L2'],\n     'PHYS110': [2, 'G1'],\n     'CHEM120': [0, 'L2'],\n     'BIO130': [3, 'L2']},\n    {'MATH101': [1, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [2, 'G1'], 'BIO130': [3, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'ECON150'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'PHYS110'],\n     ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'CHEM120']]],\n   [['s4', 'CHEM120', 'removed'], ['s5', 'CHEM120', 'removed']]),\n  ('normal control 8',\n   [{'MATH101': [3, 'H1'],\n     'MATH101H': [2, 'H2'],\n     'PHYS110': [0, 'L2'],\n     'CHEM120': [0, 'G1'],\n     'BIO130': [2, 'H2']},\n    {'MATH101': [3, 'H1'], 'PHYS110': [0, 'L2'], 'CHEM120': [1, 'H1'], 'BIO130': [3, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'MATH101H'], ['s2', 'MATH101H'],\n     ['s4', 'HIST140'], ['s3', 'PHYS110'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101'],\n     ['s2', 'ECON150']]],\n   [['s2', 'CHEM120', 'moved'], ['s2', 'MATH101H', 'removed'], ['s4', 'CHEM120', 'moved'],\n    ['s4', 'MATH101H', 'removed'], ['s5', 'CHEM120', 'moved']])],\n [('regression: moved precedence 1',\n   [{'MATH101H': [0, 'L1'], 'BIO130': [2, 'H2']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [2, 'L2'],\n     'CHEM120': [2, 'L2'],\n     'BIO130': [2, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'BIO130'], ['s2', 'MATH101H'], ['s1', 'BIO130'], ['s2', 'HIST140'], ['s2', 'MATH101'],\n     ['s5', 'CHEM120'], ['s5', 'HIST140'], ['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'CHEM120'],\n     ['s4', 'HIST140'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s5', 'CHEM120']]],\n   [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added'], ['s2', 'MATH101', 'added'],\n    ['s2', 'MATH101H', 'moved'], ['s4', 'MATH101', 'added'], ['s4', 'MATH101H', 'moved'],\n    ['s5', 'CHEM120', 'added']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [2, 'L1'], 'MATH101H': [3, 'L1'], 'BIO130': [3, 'G1']},\n    {'MATH101': [2, 'L1'],\n     'MATH101H': [0, 'G1'],\n     'PHYS110': [3, 'G1'],\n     'CHEM120': [1, 'G1'],\n     'BIO130': [3, 'G1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'MATH101'], ['s1', 'CHEM120'], ['s5', 'MATH101H'], ['s2', 'ECON150'], ['s3', 'HIST140'],\n     ['s3', 'CHEM120'], ['s4', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'HIST140'], ['s1', 'MATH101'],\n     ['s3', 'MATH101H'], ['s3', 'MATH101']]],\n   [['s1', 'CHEM120', 'added'], ['s3', 'CHEM120', 'added'], ['s3', 'MATH101H', 'moved'],\n    ['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [0, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'CHEM120': [3, 'H1']},\n    {'MATH101': [2, 'G1'],\n     'MATH101H': [2, 'H2'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [3, 'H2'],\n     'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'CHEM120'], ['s5', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'CHEM120'],\n     ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'HIST140'],\n     ['s2', 'MATH101'], ['s3', 'PHYS110']]],\n   [['s2', 'MATH101', 'moved'], ['s4', 'BIO130', 'added']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   [['s1', 'A', 'moved']]),\n  ('normal control 5',\n   [{'MATH101': [2, 'H2'], 'MATH101H': [0, 'L1'], 'CHEM120': [1, 'G1']},\n    {'MATH101': [2, 'H2'],\n     'MATH101H': [3, 'L2'],\n     'PHYS110': [1, 'L1'],\n     'CHEM120': [1, 'G1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'CHEM120'], ['s4', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'BIO130'], ['s4', 'MATH101'],\n     ['s2', 'HIST140'], ['s5', 'PHYS110'], ['s4', 'CHEM120']]],\n   [['s4', 'BIO130', 'added'], ['s4', 'MATH101H', 'moved'], ['s5', 'PHYS110', 'added']]),\n  ('normal control 6',\n   [{'MATH101': [3, 'H1'], 'MATH101H': [3, 'G1'], 'PHYS110': [0, 'L1'], 'CHEM120': [2, 'H2']},\n    {'MATH101': [1, 'L2'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [0, 'G1'],\n     'CHEM120': [1, 'G1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'PHYS110'], ['s2', 'PHYS110'], ['s5', 'CHEM120'], ['s2', 'MATH101H'], ['s1', 'MATH101H'],\n     ['s3', 'MATH101'], ['s3', 'ECON150'], ['s3', 'BIO130'], ['s5', 'ECON150'], ['s2', 'PHYS110'],\n     ['s1', 'HIST140'], ['s1', 'ECON150']]],\n   [['s2', 'PHYS110', 'venue'], ['s3', 'BIO130', 'added'], ['s3', 'MATH101', 'moved'],\n    ['s3', 'PHYS110', 'venue'], ['s5', 'CHEM120', 'moved']]),\n  ('normal control 7',\n   [{'MATH101': [2, 'L2'], 'MATH101H': [2, 'L2'], 'CHEM120': [3, 'H2'], 'BIO130': [3, 'H1']},\n    {'MATH101': [0, 'H1'], 'MATH101H': [2, 'L2'], 'CHEM120': [3, 'H2'], 'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'HIST140'], ['s3', 'CHEM120'], ['s3', 'MATH101H']]],\n   []),\n  ('normal control 8',\n   [{'MATH101H': [3, 'G1'], 'PHYS110': [2, 'L2'], 'CHEM120': [0, 'H2']},\n    {'MATH101': [2, 'H2'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [2, 'L2'],\n     'CHEM120': [3, 'H1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'CHEM120'], ['s2', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s1', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'ECON150'], ['s5', 'MATH101'],\n     ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'CHEM120'], ['s1', 'MATH101H']]],\n   [['s1', 'CHEM120', 'moved'], ['s2', 'CHEM120', 'moved'], ['s3', 'BIO130', 'added'],\n    ['s3', 'CHEM120', 'moved'], ['s5', 'CHEM120', 'moved'], ['s5', 'MATH101', 'added']])],\n [('regression: moved precedence 1',\n   [{'MATH101': [1, 'H1'],\n     'MATH101H': [3, 'H1'],\n     'PHYS110': [0, 'H2'],\n     'CHEM120': [1, 'H2'],\n     'BIO130': [0, 'H1']},\n    {'MATH101': [1, 'H1'],\n     'MATH101H': [3, 'H1'],\n     'PHYS110': [3, 'L2'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'HIST140'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'MATH101H'], ['s3', 'PHYS110'],\n     ['s5', 'MATH101'], ['s5', 'CHEM120'], ['s3', 'PHYS110'], ['s3', 'MATH101H']]],\n   [['s3', 'PHYS110', 'moved'], ['s5', 'CHEM120', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [1, 'L1'],\n     'MATH101H': [0, 'L1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [3, 'H1']},\n    {'MATH101': [2, 'H1'],\n     'MATH101H': [2, 'H2'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'ECON150'], ['s1', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s4', 'MATH101H'],\n     ['s1', 'ECON150'], ['s5', 'CHEM120'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s4', 'HIST140']]],\n   [['s2', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [2, 'H2'],\n     'MATH101H': [0, 'H1'],\n     'PHYS110': [2, 'L1'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'L2']},\n    {'MATH101': [2, 'H2'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [2, 'L1'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'ECON150'], ['s1', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'HIST140'], ['s1', 'PHYS110'],\n     ['s1', 'MATH101'], ['s1', 'HIST140'], ['s3', 'CHEM120']]],\n   [['s3', 'MATH101H', 'venue']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1'], 'B': [1, 'L1']}, {'A': [2, 'H1'], 'B': [1, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'A'], ['s1', 'B'], ['s1', 'A']]],\n   [['s1', 'A', 'moved'], ['s1', 'B', 'venue'], ['s2', 'A', 'moved']]),\n  ('normal control 5',\n   [{'MATH101': [0, 'H1'], 'MATH101H': [2, 'L1'], 'CHEM120': [3, 'L2'], 'BIO130': [0, 'G1']},\n    {'MATH101': [0, 'H1'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [2, 'L2'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'MATH101H'], ['s4', 'ECON150'], ['s5', 'MATH101H'],\n     ['s3', 'PHYS110']]],\n   [['s3', 'PHYS110', 'added'], ['s4', 'MATH101H', 'moved'], ['s4', 'PHYS110', 'added'],\n    ['s5', 'MATH101H', 'moved']]),\n  ('normal control 6',\n   [{'MATH101': [1, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [0, 'L1'], 'CHEM120': [3, 'L2']},\n    {'MATH101': [0, 'L1'],\n     'MATH101H': [1, 'G1'],\n     'PHYS110': [0, 'L2'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s5', 'PHYS110']]],\n   []),\n  ('normal control 7',\n   [{'MATH101': [2, 'H2'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [2, 'H2'],\n     'CHEM120': [0, 'L1'],\n     'BIO130': [2, 'L1']},\n    {'MATH101': [3, 'L1'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [1, 'H1'],\n     'CHEM120': [1, 'L2'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'HIST140'], ['s5', 'PHYS110'], ['s5', 'PHYS110'], ['s5', 'MATH101H']]],\n   [['s5', 'PHYS110', 'moved']]),\n  ('normal control 8',\n   [{'MATH101': [3, 'L1'], 'MATH101H': [0, 'G1'], 'CHEM120': [0, 'G1']},\n    {'MATH101': [3, 'L1'],\n     'MATH101H': [0, 'G1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [2, 'L2'],\n     'BIO130': [1, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'PHYS110'], ['s2', 'PHYS110'],\n     ['s1', 'MATH101'], ['s2', 'ECON150']]],\n   [['s1', 'CHEM120', 'moved'], ['s1', 'PHYS110', 'added'], ['s2', 'PHYS110', 'added'],\n    ['s5', 'PHYS110', 'added']])],\n [('regression: moved precedence 1',\n   [{'MATH101': [1, 'L1'],\n     'MATH101H': [2, 'H1'],\n     'PHYS110': [3, 'H1'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [1, 'G1']},\n    {'MATH101': [1, 'L1'],\n     'MATH101H': [2, 'H1'],\n     'PHYS110': [3, 'H1'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [0, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'BIO130'], ['s3', 'CHEM120'], ['s5', 'HIST140'], ['s2', 'PHYS110'], ['s2', 'BIO130'],\n     ['s1', 'MATH101H'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s1', 'MATH101'], ['s1', 'BIO130'],\n     ['s3', 'HIST140'], ['s2', 'MATH101H']]],\n   [['s1', 'BIO130', 'moved'], ['s2', 'BIO130', 'moved'], ['s3', 'BIO130', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [1, 'H1'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [3, 'L1'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'L2']},\n    {'MATH101': [1, 'H1'], 'MATH101H': [3, 'H1'], 'CHEM120': [2, 'G1'], 'BIO130': [3, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'MATH101H'], ['s4', 'HIST140'], ['s4', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'CHEM120']]],\n   [['s1', 'CHEM120', 'moved'], ['s1', 'MATH101H', 'moved'], ['s4', 'CHEM120', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [3, 'G1'], 'BIO130': [1, 'L1']},\n    {'MATH101': [3, 'L1'], 'MATH101H': [2, 'G1'], 'PHYS110': [3, 'L1'], 'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'BIO130'], ['s1', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'HIST140'], ['s5', 'MATH101H'],\n     ['s4', 'HIST140'], ['s5', 'HIST140'], ['s2', 'PHYS110'], ['s1', 'ECON150'], ['s3', 'PHYS110'],\n     ['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'BIO130']]],\n   [['s1', 'MATH101', 'venue'], ['s1', 'PHYS110', 'added'], ['s2', 'PHYS110', 'added'],\n    ['s3', 'MATH101H', 'added'], ['s3', 'PHYS110', 'added'], ['s4', 'PHYS110', 'added'],\n    ['s5', 'MATH101H', 'added']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   [['s1', 'A', 'removed']]),\n  ('normal control 5',\n   [{'CHEM120': [0, 'L2'], 'BIO130': [0, 'L2']},\n    {'MATH101': [2, 'L1'],\n     'MATH101H': [2, 'L2'],\n     'PHYS110': [0, 'H1'],\n     'CHEM120': [3, 'L2'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'PHYS110'], ['s1', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'CHEM120'], ['s1', 'MATH101H'],\n     ['s3', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'MATH101H'],\n     ['s5', 'MATH101']]],\n   [['s1', 'BIO130', 'venue'], ['s1', 'MATH101H', 'added'], ['s1', 'PHYS110', 'added'],\n    ['s3', 'MATH101H', 'added'], ['s4', 'CHEM120', 'moved'], ['s4', 'MATH101H', 'added'],\n    ['s5', 'CHEM120', 'moved'], ['s5', 'MATH101', 'added'], ['s5', 'PHYS110', 'added']]),\n  ('normal control 6',\n   [{'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H2'],\n     'PHYS110': [0, 'H2'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [3, 'L1']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H2'],\n     'PHYS110': [0, 'H2'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [0, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'MATH101H'], ['s2', 'HIST140'], ['s2', 'PHYS110'], ['s1', 'MATH101']]],\n   []),\n  ('normal control 7',\n   [{'MATH101': [3, 'G1'],\n     'MATH101H': [1, 'L2'],\n     'PHYS110': [0, 'L1'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [1, 'G1']},\n    {'MATH101': [3, 'G1'], 'PHYS110': [0, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'CHEM120'], ['s3', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'ECON150'], ['s4', 'CHEM120'], ['s5', 'MATH101'],\n     ['s4', 'MATH101'], ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'BIO130']]],\n   [['s1', 'BIO130', 'removed'], ['s1', 'MATH101H', 'removed'], ['s2', 'CHEM120', 'removed'],\n    ['s2', 'MATH101H', 'removed'], ['s3', 'CHEM120', 'removed'], ['s4', 'CHEM120', 'removed'],\n    ['s5', 'CHEM120', 'removed']]),\n  ('normal control 8',\n   [{'MATH101': [1, 'L2'],\n     'MATH101H': [3, 'H1'],\n     'PHYS110': [3, 'L2'],\n     'CHEM120': [0, 'L1'],\n     'BIO130': [0, 'H1']},\n    {'MATH101': [1, 'L1'], 'PHYS110': [3, 'L2'], 'CHEM120': [2, 'L1'], 'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s3', 'CHEM120']]],\n   [['s3', 'CHEM120', 'moved']])],\n [('regression: moved precedence 1',\n   [{'MATH101': [1, 'H2'],\n     'MATH101H': [3, 'H2'],\n     'PHYS110': [0, 'H1'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [0, 'G1']},\n    {'MATH101': [1, 'H2'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [1, 'L2'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'BIO130'], ['s3', 'MATH101H'], ['s4', 'PHYS110'], ['s2', 'BIO130'], ['s2', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'MATH101'],\n     ['s2', 'CHEM120'], ['s4', 'MATH101H'], ['s3', 'MATH101']]],\n   [['s2', 'BIO130', 'moved'], ['s2', 'MATH101H', 'moved'], ['s2', 'PHYS110', 'moved'],\n    ['s3', 'BIO130', 'moved'], ['s3', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],\n    ['s4', 'PHYS110', 'moved'], ['s5', 'BIO130', 'moved'], ['s5', 'MATH101H', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'H1']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [1, 'L2'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s4', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'BIO130']]],\n   [['s4', 'CHEM120', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101H': [0, 'H2'], 'PHYS110': [3, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'H2']},\n    {'MATH101': [0, 'L1'],\n     'MATH101H': [0, 'G1'],\n     'PHYS110': [1, 'G1'],\n     'CHEM120': [1, 'H2'],\n     'BIO130': [3, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'HIST140'], ['s4', 'CHEM120'], ['s1', 'MATH101'], ['s5', 'MATH101H'], ['s2', 'HIST140'],\n     ['s2', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s2', 'MATH101H'], ['s1', 'BIO130'],\n     ['s1', 'PHYS110'], ['s3', 'MATH101H']]],\n   [['s1', 'BIO130', 'moved'], ['s1', 'MATH101', 'added'], ['s1', 'PHYS110', 'moved'],\n    ['s3', 'BIO130', 'moved']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   []),\n  ('normal control 5',\n   [{'MATH101': [2, 'L2'], 'MATH101H': [2, 'L2'], 'PHYS110': [1, 'H1'], 'CHEM120': [2, 'H2']},\n    {'MATH101': [0, 'L2'],\n     'MATH101H': [2, 'L2'],\n     'PHYS110': [1, 'H1'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'HIST140'], ['s3', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'CHEM120']]],\n   []),\n  ('normal control 6',\n   [{'MATH101H': [0, 'L2'], 'PHYS110': [2, 'H1'], 'CHEM120': [0, 'L1'], 'BIO130': [0, 'H1']},\n    {'MATH101': [3, 'L2'], 'MATH101H': [0, 'L2'], 'PHYS110': [2, 'H1'], 'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'PHYS110'], ['s3', 'BIO130'], ['s5', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s1', 'BIO130'], ['s3', 'PHYS110'], ['s1', 'HIST140']]],\n   [['s1', 'CHEM120', 'removed']]),\n  ('normal control 7',\n   [{'MATH101': [2, 'G1'],\n     'MATH101H': [1, 'L1'],\n     'PHYS110': [3, 'H1'],\n     'CHEM120': [2, 'L1'],\n     'BIO130': [0, 'H1']},\n    {'MATH101': [2, 'G1'], 'PHYS110': [3, 'H1'], 'CHEM120': [1, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s5', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'HIST140'],\n     ['s3', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'ECON150'],\n     ['s3', 'PHYS110']]],\n   [['s1', 'CHEM120', 'moved'], ['s3', 'MATH101H', 'removed'], ['s4', 'CHEM120', 'moved'],\n    ['s4', 'MATH101H', 'removed']]),\n  ('normal control 8',\n   [{'MATH101': [3, 'H1'], 'MATH101H': [1, 'H2'], 'PHYS110': [0, 'G1'], 'CHEM120': [2, 'H2']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [2, 'H1'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [1, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'HIST140'], ['s1', 'HIST140']]],\n   [])]]\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":"ed2e171026f77363a61fc10ea389e5a3095617c53eaa40153eec4b0fee1f5096","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(old, new, rooms, enrol):\n    reasons = {}\n    for ex in set(old) | set(new):\n        if ex not in old:\n            reasons[ex] = 'added'\n        elif ex not in new:\n            reasons[ex] = 'removed'\n        elif rooms[old[ex][1]] != rooms[new[ex][1]]:\n            reasons[ex] = 'venue'\n        elif old[ex][0] != new[ex][0]:\n            reasons[ex] = 'moved'\n    out = sorted(set((st, ex, reasons[ex]) for st, ex in enrol if ex in reasons))\n    return [list(t) for t in out]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: moved precedence 1',\n   [{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   [['s1', 'A', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [0, 'L2'], 'MATH101H': [2, 'G1'], 'CHEM120': [0, 'L1'], 'BIO130': [3, 'G1']},\n    {'MATH101': [0, 'L2'],\n     'MATH101H': [2, 'G1'],\n     'PHYS110': [2, 'H2'],\n     'CHEM120': [0, 'L1'],\n     'BIO130': [2, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'HIST140'], ['s3', 'BIO130'], ['s2', 'BIO130'], ['s1', 'MATH101H'], ['s5', 'ECON150'],\n     ['s1', 'HIST140'], ['s4', 'MATH101'], ['s1', 'BIO130'], ['s4', 'HIST140'], ['s2', 'PHYS110']]],\n   [['s1', 'BIO130', 'moved'], ['s2', 'BIO130', 'moved'], ['s2', 'PHYS110', 'added'],\n    ['s3', 'BIO130', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [0, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'H2']},\n    {'MATH101': [2, 'L1'], 'MATH101H': [0, 'H1'], 'PHYS110': [1, 'L1'], 'BIO130': [2, 'G1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'ECON150'], ['s2', 'BIO130'], ['s2', 'PHYS110']]],\n   []),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {'A': [0, 'G1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A'], ['s1', 'A']]],\n   []),\n  ('normal control 5',\n   [{'PHYS110': [0, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [2, 'H2']},\n    {'MATH101': [2, 'L2'], 'PHYS110': [3, 'G1'], 'CHEM120': [1, 'H2'], 'BIO130': [2, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'HIST140'],\n     ['s4', 'BIO130'], ['s2', 'HIST140'], ['s3', 'CHEM120'], ['s1', 'MATH101'], ['s2', 'MATH101'],\n     ['s3', 'BIO130'], ['s5', 'MATH101']]],\n   [['s1', 'MATH101', 'added'], ['s1', 'PHYS110', 'moved'], ['s2', 'MATH101', 'added'],\n    ['s3', 'BIO130', 'venue'], ['s3', 'MATH101', 'added'], ['s4', 'BIO130', 'venue'],\n    ['s5', 'MATH101', 'added']]),\n  ('normal control 6',\n   [{'MATH101': [0, 'L2'], 'MATH101H': [3, 'L1'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},\n    {'MATH101': [0, 'L2'], 'PHYS110': [1, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s1', 'ECON150']]],\n   []),\n  ('normal control 7',\n   [{'MATH101': [1, 'L2'],\n     'MATH101H': [1, 'L2'],\n     'PHYS110': [2, 'G1'],\n     'CHEM120': [0, 'L2'],\n     'BIO130': [3, 'L2']},\n    {'MATH101': [1, 'L2'], 'MATH101H': [1, 'L2'], 'PHYS110': [2, 'G1'], 'BIO130': [3, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'ECON150'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s1', 'PHYS110'], ['s5', 'PHYS110'],\n     ['s4', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'CHEM120']]],\n   [['s4', 'CHEM120', 'removed'], ['s5', 'CHEM120', 'removed']]),\n  ('normal control 8',\n   [{'MATH101': [3, 'H1'],\n     'MATH101H': [2, 'H2'],\n     'PHYS110': [0, 'L2'],\n     'CHEM120': [0, 'G1'],\n     'BIO130': [2, 'H2']},\n    {'MATH101': [3, 'H1'], 'PHYS110': [0, 'L2'], 'CHEM120': [1, 'H1'], 'BIO130': [3, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'CHEM120'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'MATH101H'], ['s2', 'MATH101H'],\n     ['s4', 'HIST140'], ['s3', 'PHYS110'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101'],\n     ['s2', 'ECON150']]],\n   [['s2', 'CHEM120', 'moved'], ['s2', 'MATH101H', 'removed'], ['s4', 'CHEM120', 'moved'],\n    ['s4', 'MATH101H', 'removed'], ['s5', 'CHEM120', 'moved']])],\n [('regression: moved precedence 1',\n   [{'MATH101H': [0, 'L1'], 'BIO130': [2, 'H2']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [2, 'L2'],\n     'CHEM120': [2, 'L2'],\n     'BIO130': [2, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'BIO130'], ['s2', 'MATH101H'], ['s1', 'BIO130'], ['s2', 'HIST140'], ['s2', 'MATH101'],\n     ['s5', 'CHEM120'], ['s5', 'HIST140'], ['s4', 'MATH101H'], ['s4', 'BIO130'], ['s2', 'CHEM120'],\n     ['s4', 'HIST140'], ['s4', 'MATH101'], ['s1', 'CHEM120'], ['s5', 'CHEM120']]],\n   [['s1', 'CHEM120', 'added'], ['s2', 'CHEM120', 'added'], ['s2', 'MATH101', 'added'],\n    ['s2', 'MATH101H', 'moved'], ['s4', 'MATH101', 'added'], ['s4', 'MATH101H', 'moved'],\n    ['s5', 'CHEM120', 'added']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [2, 'L1'], 'MATH101H': [3, 'L1'], 'BIO130': [3, 'G1']},\n    {'MATH101': [2, 'L1'],\n     'MATH101H': [0, 'G1'],\n     'PHYS110': [3, 'G1'],\n     'CHEM120': [1, 'G1'],\n     'BIO130': [3, 'G1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'MATH101'], ['s1', 'CHEM120'], ['s5', 'MATH101H'], ['s2', 'ECON150'], ['s3', 'HIST140'],\n     ['s3', 'CHEM120'], ['s4', 'MATH101H'], ['s1', 'ECON150'], ['s1', 'HIST140'], ['s1', 'MATH101'],\n     ['s3', 'MATH101H'], ['s3', 'MATH101']]],\n   [['s1', 'CHEM120', 'added'], ['s3', 'CHEM120', 'added'], ['s3', 'MATH101H', 'moved'],\n    ['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [0, 'H2'], 'MATH101H': [2, 'H2'], 'PHYS110': [3, 'H2'], 'CHEM120': [3, 'H1']},\n    {'MATH101': [2, 'G1'],\n     'MATH101H': [2, 'H2'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [3, 'H2'],\n     'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'CHEM120'], ['s5', 'ECON150'], ['s2', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'CHEM120'],\n     ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s1', 'PHYS110'], ['s2', 'PHYS110'], ['s3', 'HIST140'],\n     ['s2', 'MATH101'], ['s3', 'PHYS110']]],\n   [['s2', 'MATH101', 'moved'], ['s4', 'BIO130', 'added']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {'A': [1, 'L1']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   [['s1', 'A', 'moved']]),\n  ('normal control 5',\n   [{'MATH101': [2, 'H2'], 'MATH101H': [0, 'L1'], 'CHEM120': [1, 'G1']},\n    {'MATH101': [2, 'H2'],\n     'MATH101H': [3, 'L2'],\n     'PHYS110': [1, 'L1'],\n     'CHEM120': [1, 'G1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'CHEM120'], ['s4', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'BIO130'], ['s4', 'MATH101'],\n     ['s2', 'HIST140'], ['s5', 'PHYS110'], ['s4', 'CHEM120']]],\n   [['s4', 'BIO130', 'added'], ['s4', 'MATH101H', 'moved'], ['s5', 'PHYS110', 'added']]),\n  ('normal control 6',\n   [{'MATH101': [3, 'H1'], 'MATH101H': [3, 'G1'], 'PHYS110': [0, 'L1'], 'CHEM120': [2, 'H2']},\n    {'MATH101': [1, 'L2'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [0, 'G1'],\n     'CHEM120': [1, 'G1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'PHYS110'], ['s2', 'PHYS110'], ['s5', 'CHEM120'], ['s2', 'MATH101H'], ['s1', 'MATH101H'],\n     ['s3', 'MATH101'], ['s3', 'ECON150'], ['s3', 'BIO130'], ['s5', 'ECON150'], ['s2', 'PHYS110'],\n     ['s1', 'HIST140'], ['s1', 'ECON150']]],\n   [['s2', 'PHYS110', 'venue'], ['s3', 'BIO130', 'added'], ['s3', 'MATH101', 'moved'],\n    ['s3', 'PHYS110', 'venue'], ['s5', 'CHEM120', 'moved']]),\n  ('normal control 7',\n   [{'MATH101': [2, 'L2'], 'MATH101H': [2, 'L2'], 'CHEM120': [3, 'H2'], 'BIO130': [3, 'H1']},\n    {'MATH101': [0, 'H1'], 'MATH101H': [2, 'L2'], 'CHEM120': [3, 'H2'], 'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'HIST140'], ['s3', 'CHEM120'], ['s3', 'MATH101H']]],\n   []),\n  ('normal control 8',\n   [{'MATH101H': [3, 'G1'], 'PHYS110': [2, 'L2'], 'CHEM120': [0, 'H2']},\n    {'MATH101': [2, 'H2'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [2, 'L2'],\n     'CHEM120': [3, 'H1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'CHEM120'], ['s2', 'PHYS110'], ['s2', 'CHEM120'],\n     ['s1', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'ECON150'], ['s5', 'MATH101'],\n     ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'CHEM120'], ['s1', 'MATH101H']]],\n   [['s1', 'CHEM120', 'moved'], ['s2', 'CHEM120', 'moved'], ['s3', 'BIO130', 'added'],\n    ['s3', 'CHEM120', 'moved'], ['s5', 'CHEM120', 'moved'], ['s5', 'MATH101', 'added']])],\n [('regression: moved precedence 1',\n   [{'MATH101': [1, 'H1'],\n     'MATH101H': [3, 'H1'],\n     'PHYS110': [0, 'H2'],\n     'CHEM120': [1, 'H2'],\n     'BIO130': [0, 'H1']},\n    {'MATH101': [1, 'H1'],\n     'MATH101H': [3, 'H1'],\n     'PHYS110': [3, 'L2'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'HIST140'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'MATH101H'], ['s3', 'PHYS110'],\n     ['s5', 'MATH101'], ['s5', 'CHEM120'], ['s3', 'PHYS110'], ['s3', 'MATH101H']]],\n   [['s3', 'PHYS110', 'moved'], ['s5', 'CHEM120', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [1, 'L1'],\n     'MATH101H': [0, 'L1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [3, 'H1']},\n    {'MATH101': [2, 'H1'],\n     'MATH101H': [2, 'H2'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'ECON150'], ['s1', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s4', 'MATH101H'],\n     ['s1', 'ECON150'], ['s5', 'CHEM120'], ['s5', 'BIO130'], ['s2', 'HIST140'], ['s4', 'HIST140']]],\n   [['s2', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'], ['s5', 'MATH101H', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [2, 'H2'],\n     'MATH101H': [0, 'H1'],\n     'PHYS110': [2, 'L1'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'L2']},\n    {'MATH101': [2, 'H2'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [2, 'L1'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'ECON150'], ['s1', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'HIST140'], ['s1', 'PHYS110'],\n     ['s1', 'MATH101'], ['s1', 'HIST140'], ['s3', 'CHEM120']]],\n   [['s3', 'MATH101H', 'venue']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1'], 'B': [1, 'L1']}, {'A': [2, 'H1'], 'B': [1, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'A'], ['s1', 'B'], ['s1', 'A']]],\n   [['s1', 'A', 'moved'], ['s1', 'B', 'venue'], ['s2', 'A', 'moved']]),\n  ('normal control 5',\n   [{'MATH101': [0, 'H1'], 'MATH101H': [2, 'L1'], 'CHEM120': [3, 'L2'], 'BIO130': [0, 'G1']},\n    {'MATH101': [0, 'H1'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [2, 'L2'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'MATH101H'], ['s4', 'ECON150'], ['s5', 'MATH101H'],\n     ['s3', 'PHYS110']]],\n   [['s3', 'PHYS110', 'added'], ['s4', 'MATH101H', 'moved'], ['s4', 'PHYS110', 'added'],\n    ['s5', 'MATH101H', 'moved']]),\n  ('normal control 6',\n   [{'MATH101': [1, 'L2'], 'MATH101H': [1, 'G1'], 'PHYS110': [0, 'L1'], 'CHEM120': [3, 'L2']},\n    {'MATH101': [0, 'L1'],\n     'MATH101H': [1, 'G1'],\n     'PHYS110': [0, 'L2'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s5', 'PHYS110']]],\n   []),\n  ('normal control 7',\n   [{'MATH101': [2, 'H2'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [2, 'H2'],\n     'CHEM120': [0, 'L1'],\n     'BIO130': [2, 'L1']},\n    {'MATH101': [3, 'L1'],\n     'MATH101H': [3, 'G1'],\n     'PHYS110': [1, 'H1'],\n     'CHEM120': [1, 'L2'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'HIST140'], ['s5', 'PHYS110'], ['s5', 'PHYS110'], ['s5', 'MATH101H']]],\n   [['s5', 'PHYS110', 'moved']]),\n  ('normal control 8',\n   [{'MATH101': [3, 'L1'], 'MATH101H': [0, 'G1'], 'CHEM120': [0, 'G1']},\n    {'MATH101': [3, 'L1'],\n     'MATH101H': [0, 'G1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [2, 'L2'],\n     'BIO130': [1, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'PHYS110'], ['s2', 'PHYS110'],\n     ['s1', 'MATH101'], ['s2', 'ECON150']]],\n   [['s1', 'CHEM120', 'moved'], ['s1', 'PHYS110', 'added'], ['s2', 'PHYS110', 'added'],\n    ['s5', 'PHYS110', 'added']])],\n [('regression: moved precedence 1',\n   [{'MATH101': [1, 'L1'],\n     'MATH101H': [2, 'H1'],\n     'PHYS110': [3, 'H1'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [1, 'G1']},\n    {'MATH101': [1, 'L1'],\n     'MATH101H': [2, 'H1'],\n     'PHYS110': [3, 'H1'],\n     'CHEM120': [2, 'G1'],\n     'BIO130': [0, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'BIO130'], ['s3', 'CHEM120'], ['s5', 'HIST140'], ['s2', 'PHYS110'], ['s2', 'BIO130'],\n     ['s1', 'MATH101H'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s1', 'MATH101'], ['s1', 'BIO130'],\n     ['s3', 'HIST140'], ['s2', 'MATH101H']]],\n   [['s1', 'BIO130', 'moved'], ['s2', 'BIO130', 'moved'], ['s3', 'BIO130', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [1, 'H1'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [3, 'L1'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'L2']},\n    {'MATH101': [1, 'H1'], 'MATH101H': [3, 'H1'], 'CHEM120': [2, 'G1'], 'BIO130': [3, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'MATH101H'], ['s4', 'HIST140'], ['s4', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'CHEM120']]],\n   [['s1', 'CHEM120', 'moved'], ['s1', 'MATH101H', 'moved'], ['s4', 'CHEM120', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101': [3, 'G1'], 'BIO130': [1, 'L1']},\n    {'MATH101': [3, 'L1'], 'MATH101H': [2, 'G1'], 'PHYS110': [3, 'L1'], 'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'BIO130'], ['s1', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'HIST140'], ['s5', 'MATH101H'],\n     ['s4', 'HIST140'], ['s5', 'HIST140'], ['s2', 'PHYS110'], ['s1', 'ECON150'], ['s3', 'PHYS110'],\n     ['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s3', 'BIO130']]],\n   [['s1', 'MATH101', 'venue'], ['s1', 'PHYS110', 'added'], ['s2', 'PHYS110', 'added'],\n    ['s3', 'MATH101H', 'added'], ['s3', 'PHYS110', 'added'], ['s4', 'PHYS110', 'added'],\n    ['s5', 'MATH101H', 'added']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   [['s1', 'A', 'removed']]),\n  ('normal control 5',\n   [{'CHEM120': [0, 'L2'], 'BIO130': [0, 'L2']},\n    {'MATH101': [2, 'L1'],\n     'MATH101H': [2, 'L2'],\n     'PHYS110': [0, 'H1'],\n     'CHEM120': [3, 'L2'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'PHYS110'], ['s1', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'CHEM120'], ['s1', 'MATH101H'],\n     ['s3', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'MATH101H'],\n     ['s5', 'MATH101']]],\n   [['s1', 'BIO130', 'venue'], ['s1', 'MATH101H', 'added'], ['s1', 'PHYS110', 'added'],\n    ['s3', 'MATH101H', 'added'], ['s4', 'CHEM120', 'moved'], ['s4', 'MATH101H', 'added'],\n    ['s5', 'CHEM120', 'moved'], ['s5', 'MATH101', 'added'], ['s5', 'PHYS110', 'added']]),\n  ('normal control 6',\n   [{'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H2'],\n     'PHYS110': [0, 'H2'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [3, 'L1']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H2'],\n     'PHYS110': [0, 'H2'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [0, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s2', 'MATH101H'], ['s2', 'HIST140'], ['s2', 'PHYS110'], ['s1', 'MATH101']]],\n   []),\n  ('normal control 7',\n   [{'MATH101': [3, 'G1'],\n     'MATH101H': [1, 'L2'],\n     'PHYS110': [0, 'L1'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [1, 'G1']},\n    {'MATH101': [3, 'G1'], 'PHYS110': [0, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'CHEM120'], ['s3', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'ECON150'], ['s4', 'CHEM120'], ['s5', 'MATH101'],\n     ['s4', 'MATH101'], ['s2', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'BIO130']]],\n   [['s1', 'BIO130', 'removed'], ['s1', 'MATH101H', 'removed'], ['s2', 'CHEM120', 'removed'],\n    ['s2', 'MATH101H', 'removed'], ['s3', 'CHEM120', 'removed'], ['s4', 'CHEM120', 'removed'],\n    ['s5', 'CHEM120', 'removed']]),\n  ('normal control 8',\n   [{'MATH101': [1, 'L2'],\n     'MATH101H': [3, 'H1'],\n     'PHYS110': [3, 'L2'],\n     'CHEM120': [0, 'L1'],\n     'BIO130': [0, 'H1']},\n    {'MATH101': [1, 'L1'], 'PHYS110': [3, 'L2'], 'CHEM120': [2, 'L1'], 'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'}, [['s3', 'CHEM120']]],\n   [['s3', 'CHEM120', 'moved']])],\n [('regression: moved precedence 1',\n   [{'MATH101': [1, 'H2'],\n     'MATH101H': [3, 'H2'],\n     'PHYS110': [0, 'H1'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [0, 'G1']},\n    {'MATH101': [1, 'H2'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [1, 'L2'],\n     'CHEM120': [1, 'H1'],\n     'BIO130': [1, 'L1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s5', 'BIO130'], ['s3', 'MATH101H'], ['s4', 'PHYS110'], ['s2', 'BIO130'], ['s2', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s4', 'MATH101'],\n     ['s2', 'CHEM120'], ['s4', 'MATH101H'], ['s3', 'MATH101']]],\n   [['s2', 'BIO130', 'moved'], ['s2', 'MATH101H', 'moved'], ['s2', 'PHYS110', 'moved'],\n    ['s3', 'BIO130', 'moved'], ['s3', 'MATH101H', 'moved'], ['s4', 'MATH101H', 'moved'],\n    ['s4', 'PHYS110', 'moved'], ['s5', 'BIO130', 'moved'], ['s5', 'MATH101H', 'moved']]),\n  ('regression variant: moved precedence 2',\n   [{'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [0, 'H1'],\n     'BIO130': [3, 'H1']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'H1'],\n     'PHYS110': [3, 'H2'],\n     'CHEM120': [1, 'L2'],\n     'BIO130': [3, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s4', 'MATH101H'], ['s4', 'CHEM120'], ['s4', 'BIO130']]],\n   [['s4', 'CHEM120', 'moved']]),\n  ('partial repair guard 3',\n   [{'MATH101H': [0, 'H2'], 'PHYS110': [3, 'L2'], 'CHEM120': [1, 'H2'], 'BIO130': [1, 'H2']},\n    {'MATH101': [0, 'L1'],\n     'MATH101H': [0, 'G1'],\n     'PHYS110': [1, 'G1'],\n     'CHEM120': [1, 'H2'],\n     'BIO130': [3, 'H2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'HIST140'], ['s4', 'CHEM120'], ['s1', 'MATH101'], ['s5', 'MATH101H'], ['s2', 'HIST140'],\n     ['s2', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s2', 'MATH101H'], ['s1', 'BIO130'],\n     ['s1', 'PHYS110'], ['s3', 'MATH101H']]],\n   [['s1', 'BIO130', 'moved'], ['s1', 'MATH101', 'added'], ['s1', 'PHYS110', 'moved'],\n    ['s3', 'BIO130', 'moved']]),\n  ('boundary control 4',\n   [{'A': [0, 'H1']}, {'A': [0, 'H2']}, {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'A']]],\n   []),\n  ('normal control 5',\n   [{'MATH101': [2, 'L2'], 'MATH101H': [2, 'L2'], 'PHYS110': [1, 'H1'], 'CHEM120': [2, 'H2']},\n    {'MATH101': [0, 'L2'],\n     'MATH101H': [2, 'L2'],\n     'PHYS110': [1, 'H1'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s3', 'HIST140'], ['s3', 'ECON150'], ['s4', 'PHYS110'], ['s3', 'CHEM120']]],\n   []),\n  ('normal control 6',\n   [{'MATH101H': [0, 'L2'], 'PHYS110': [2, 'H1'], 'CHEM120': [0, 'L1'], 'BIO130': [0, 'H1']},\n    {'MATH101': [3, 'L2'], 'MATH101H': [0, 'L2'], 'PHYS110': [2, 'H1'], 'BIO130': [0, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'PHYS110'], ['s3', 'BIO130'], ['s5', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s1', 'BIO130'], ['s3', 'PHYS110'], ['s1', 'HIST140']]],\n   [['s1', 'CHEM120', 'removed']]),\n  ('normal control 7',\n   [{'MATH101': [2, 'G1'],\n     'MATH101H': [1, 'L1'],\n     'PHYS110': [3, 'H1'],\n     'CHEM120': [2, 'L1'],\n     'BIO130': [0, 'H1']},\n    {'MATH101': [2, 'G1'], 'PHYS110': [3, 'H1'], 'CHEM120': [1, 'L2']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s5', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'HIST140'],\n     ['s3', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'ECON150'],\n     ['s3', 'PHYS110']]],\n   [['s1', 'CHEM120', 'moved'], ['s3', 'MATH101H', 'removed'], ['s4', 'CHEM120', 'moved'],\n    ['s4', 'MATH101H', 'removed']]),\n  ('normal control 8',\n   [{'MATH101': [3, 'H1'], 'MATH101H': [1, 'H2'], 'PHYS110': [0, 'G1'], 'CHEM120': [2, 'H2']},\n    {'MATH101': [3, 'H1'],\n     'MATH101H': [0, 'L2'],\n     'PHYS110': [2, 'H1'],\n     'CHEM120': [2, 'H2'],\n     'BIO130': [1, 'H1']},\n    {'H1': 'hall', 'H2': 'hall', 'G1': 'hall', 'L1': 'lib', 'L2': 'lib'},\n    [['s1', 'HIST140'], ['s1', 'HIST140']]],\n   [])]]\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 exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. 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-exam-timetabling-constraints-republish-change-notifications-moved-precedence","generated_at":"2026-09-29T14:52:07.170415+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Republishing a timetable must notify exactly the affected candidates.","root_cause":"The venue check runs before the period check.","sha256":"75875dccad40a9b8fa57e18212a5dbb0dcc2b8742b4fc27908e3d814eccab67d","title":"Venue change reported instead of a period move · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":43.37,"exit_code":1,"observations":[{"actual":[["s1","A","moved"]],"check":"regression: moved precedence 1","expected":[["s1","A","moved"]],"passed":true},{"actual":[["s1","BIO130","moved"],["s2","BIO130","moved"],["s2","PHYS110","added"],["s3","BIO130","moved"]],"check":"regression variant: moved precedence 2","expected":[["s1","BIO130","moved"],["s2","BIO130","moved"],["s2","PHYS110","added"],["s3","BIO130","moved"]],"passed":true},{"actual":[["s2","BIO130","moved"]],"check":"partial repair guard 3","expected":[],"passed":false},{"actual":[["s1","A","moved"]],"check":"boundary control 4","expected":[],"passed":false},{"actual":[["s1","MATH101","added"],["s1","PHYS110","moved"],["s2","MATH101","added"],["s3","BIO130","moved"],["s3","MATH101","added"],["s4","BIO130","moved"],["s5","MATH101","added"]],"check":"normal control 5","expected":[["s1","MATH101","added"],["s1","PHYS110","moved"],["s2","MATH101","added"],["s3","BIO130","venue"],["s3","MATH101","added"],["s4","BIO130","venue"],["s5","MATH101","added"]],"passed":false},{"actual":[],"check":"normal control 6","expected":[],"passed":true},{"actual":[["s4","CHEM120","removed"],["s5","CHEM120","removed"]],"check":"normal control 7","expected":[["s4","CHEM120","removed"],["s5","CHEM120","removed"]],"passed":true},{"actual":[["s2","CHEM120","moved"],["s2","MATH101H","removed"],["s4","CHEM120","moved"],["s4","MATH101H","removed"],["s5","CHEM120","moved"]],"check":"normal control 8","expected":[["s2","CHEM120","moved"],["s2","MATH101H","removed"],["s4","CHEM120","moved"],["s4","MATH101H","removed"],["s5","CHEM120","moved"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: moved precedence 1\", \"actual\": [[\"s1\", \"A\", \"moved\"]], \"expected\": [[\"s1\", \"A\", \"moved\"]], \"passed\": true}, {\"check\": \"regression variant: moved precedence 2\", \"actual\": [[\"s1\", \"BIO130\", \"moved\"], [\"s2\", \"BIO130\", \"moved\"], [\"s2\", \"PHYS110\", \"added\"], [\"s3\", \"BIO130\", \"moved\"]], \"expected\": [[\"s1\", \"BIO130\", \"moved\"], [\"s2\", \"BIO130\", \"moved\"], [\"s2\", \"PHYS110\", \"added\"], [\"s3\", \"BIO130\", \"moved\"]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"s2\", \"BIO130\", \"moved\"]], \"expected\": [], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"s1\", \"A\", \"moved\"]], \"expected\": [], \"passed\": false}, {\"check\": \"normal control 5\", \"actual\": [[\"s1\", \"MATH101\", \"added\"], [\"s1\", \"PHYS110\", \"moved\"], [\"s2\", \"MATH101\", \"added\"], [\"s3\", \"BIO130\", \"moved\"], [\"s3\", \"MATH101\", \"added\"], [\"s4\", \"BIO130\", \"moved\"], [\"s5\", \"MATH101\", \"added\"]], \"expected\": [[\"s1\", \"MATH101\", \"added\"], [\"s1\", \"PHYS110\", \"moved\"], [\"s2\", \"MATH101\", \"added\"], [\"s3\", \"BIO130\", \"venue\"], [\"s3\", \"MATH101\", \"added\"], [\"s4\", \"BIO130\", \"venue\"], [\"s5\", \"MATH101\", \"added\"]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"s4\", \"CHEM120\", \"removed\"], [\"s5\", \"CHEM120\", \"removed\"]], \"expected\": [[\"s4\", \"CHEM120\", \"removed\"], [\"s5\", \"CHEM120\", \"removed\"]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"s2\", \"CHEM120\", \"moved\"], [\"s2\", \"MATH101H\", \"removed\"], [\"s4\", \"CHEM120\", \"moved\"], [\"s4\", \"MATH101H\", \"removed\"], [\"s5\", \"CHEM120\", \"moved\"]], \"expected\": [[\"s2\", \"CHEM120\", \"moved\"], [\"s2\", \"MATH101H\", \"removed\"], [\"s4\", \"CHEM120\", \"moved\"], [\"s4\", \"MATH101H\", \"removed\"], [\"s5\", \"CHEM120\", \"moved\"]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.48,"exit_code":1,"observations":[{"actual":[["s1","A","venue"]],"check":"regression: moved precedence 1","expected":[["s1","A","moved"]],"passed":false},{"actual":[["s1","BIO130","venue"],["s2","BIO130","venue"],["s2","PHYS110","added"],["s3","BIO130","venue"]],"check":"regression variant: moved precedence 2","expected":[["s1","BIO130","moved"],["s2","BIO130","moved"],["s2","PHYS110","added"],["s3","BIO130","moved"]],"passed":false},{"actual":[],"check":"partial repair guard 3","expected":[],"passed":true},{"actual":[],"check":"boundary control 4","expected":[],"passed":true},{"actual":[["s1","MATH101","added"],["s1","PHYS110","venue"],["s2","MATH101","added"],["s3","BIO130","venue"],["s3","MATH101","added"],["s4","BIO130","venue"],["s5","MATH101","added"]],"check":"normal control 5","expected":[["s1","MATH101","added"],["s1","PHYS110","moved"],["s2","MATH101","added"],["s3","BIO130","venue"],["s3","MATH101","added"],["s4","BIO130","venue"],["s5","MATH101","added"]],"passed":false},{"actual":[],"check":"normal control 6","expected":[],"passed":true},{"actual":[["s4","CHEM120","removed"],["s5","CHEM120","removed"]],"check":"normal control 7","expected":[["s4","CHEM120","removed"],["s5","CHEM120","removed"]],"passed":true},{"actual":[["s2","CHEM120","moved"],["s2","MATH101H","removed"],["s4","CHEM120","moved"],["s4","MATH101H","removed"],["s5","CHEM120","moved"]],"check":"normal control 8","expected":[["s2","CHEM120","moved"],["s2","MATH101H","removed"],["s4","CHEM120","moved"],["s4","MATH101H","removed"],["s5","CHEM120","moved"]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: moved precedence 1\", \"actual\": [[\"s1\", \"A\", \"venue\"]], \"expected\": [[\"s1\", \"A\", \"moved\"]], \"passed\": false}, {\"check\": \"regression variant: moved precedence 2\", \"actual\": [[\"s1\", \"BIO130\", \"venue\"], [\"s2\", \"BIO130\", \"venue\"], [\"s2\", \"PHYS110\", \"added\"], [\"s3\", \"BIO130\", \"venue\"]], \"expected\": [[\"s1\", \"BIO130\", \"moved\"], [\"s2\", \"BIO130\", \"moved\"], [\"s2\", \"PHYS110\", \"added\"], [\"s3\", \"BIO130\", \"moved\"]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [[\"s1\", \"MATH101\", \"added\"], [\"s1\", \"PHYS110\", \"venue\"], [\"s2\", \"MATH101\", \"added\"], [\"s3\", \"BIO130\", \"venue\"], [\"s3\", \"MATH101\", \"added\"], [\"s4\", \"BIO130\", \"venue\"], [\"s5\", \"MATH101\", \"added\"]], \"expected\": [[\"s1\", \"MATH101\", \"added\"], [\"s1\", \"PHYS110\", \"moved\"], [\"s2\", \"MATH101\", \"added\"], [\"s3\", \"BIO130\", \"venue\"], [\"s3\", \"MATH101\", \"added\"], [\"s4\", \"BIO130\", \"venue\"], [\"s5\", \"MATH101\", \"added\"]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"s4\", \"CHEM120\", \"removed\"], [\"s5\", \"CHEM120\", \"removed\"]], \"expected\": [[\"s4\", \"CHEM120\", \"removed\"], [\"s5\", \"CHEM120\", \"removed\"]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"s2\", \"CHEM120\", \"moved\"], [\"s2\", \"MATH101H\", \"removed\"], [\"s4\", \"CHEM120\", \"moved\"], [\"s4\", \"MATH101H\", \"removed\"], [\"s5\", \"CHEM120\", \"moved\"]], \"expected\": [[\"s2\", \"CHEM120\", \"moved\"], [\"s2\", \"MATH101H\", \"removed\"], [\"s4\", \"CHEM120\", \"moved\"], [\"s4\", \"MATH101H\", \"removed\"], [\"s5\", \"CHEM120\", \"moved\"]], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}