{"abstract":"Every offbeat is treated as a downbeat of its own, so swing never delays anything and positions double.","category":"MIDI event timing","checks":8,"contract":"Input [ticks, ppq, swing] with even ppq > 0 and swing 50..75 percent. Within each beat, positions in the first half [0, ppq/2) scale linearly onto [0, split) and positions in the second half onto [split, ppq), where split = ppq*swing/100. The remapped position is floored. Invalid parameters return None.","evaluation_group":"w2-midi-event-timing-swing-remap","failed_approach":"Taking the beat from ppq but the position modulo half a beat never reaches the second-half branch.","family":"w2-midi-event-timing-swing-remap-beat-decomposition","id":"FA-81561","implementations":{"attempt":{"sha256":"0ac1d0f5907c1af76bac3d4e7877785aef0ad32b578ad4d0d02a45690be23ec9","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    ticks, ppq, swing = x\n    if ppq <= 0 or ppq % 2 or not 50 <= swing <= 75:\n        return None\n    half = ppq // 2\n    split = Fraction(ppq * swing, 100)\n    out = []\n    for t in ticks:\n        beat, pos = (t // ppq, t % half)\n        if pos < half:\n            new = pos * split / half\n        else:\n            new = split + (pos - half) * (ppq - split) / half\n        out.append(beat * ppq + int(new))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None)], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318])], [([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67])], [([[120, 360], 480, 60], [144, 384]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])], [([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[100, 300], 480, 55], [110, 318]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"oracle %d\" % i, 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":"9c748af361f5836d3b4514894ece978033d90a679e74d9b437a5c0a755a758bf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    ticks, ppq, swing = x\n    if ppq <= 0 or ppq % 2 or not 50 <= swing <= 75:\n        return None\n    half = ppq // 2\n    split = Fraction(ppq * swing, 100)\n    out = []\n    for t in ticks:\n        beat, pos = divmod(t, half)\n        if pos < half:\n            new = pos * split / half\n        else:\n            new = split + (pos - half) * (ppq - split) / half\n        out.append(beat * ppq + int(new))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None)], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318])], [([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67])], [([[120, 360], 480, 60], [144, 384]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])], [([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[100, 300], 480, 55], [110, 318]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"oracle %d\" % i, 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":"57cd2be83e9c3467654e1da13eda88bdd3aee8230edc375a7b7aedbfb5c711eb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(x):\n    if not isinstance(x, list) or len(x) != 3:\n        return None\n    ticks, ppq, swing = x\n    if ppq <= 0 or ppq % 2 or not 50 <= swing <= 75:\n        return None\n    half = ppq // 2\n    split = Fraction(ppq * swing, 100)\n    out = []\n    for t in ticks:\n        beat, pos = divmod(t, ppq)\n        if pos < half:\n            new = pos * split / half\n        else:\n            new = split + (pos - half) * (ppq - split) / half\n        out.append(beat * ppq + int(new))\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[0, 240], 481, 60], None)], [([[0, 240, 480, 720], 480, 50], [0, 240, 480, 720]), ([[0, 240, 480, 720], 480, 66], [0, 316, 480, 796]), ([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318])], [([[240, 300, 479], 480, 66], [316, 357, 479]), ([[120, 360], 480, 60], [144, 384]), ([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67])], [([[120, 360], 480, 60], [144, 384]), ([[1, 239, 241], 480, 70], [1, 334, 336]), ([[0, 60], 120, 58], [0, 69]), ([[100, 300], 480, 55], [110, 318]), ([[90], 120, 62], [97]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])], [([[960, 1200, 1320], 480, 75], [960, 1320, 1380]), ([[0, 60], 120, 58], [0, 69]), ([[0, 240], 480, 49], None), ([[0, 240], 480, 76], None), ([[100, 300], 480, 55], [110, 318]), ([[5, 55], 100, 64], [6, 67]), ([[250, 470], 480, 50], [250, 470]), ([[30, 100], 120, 67], [40, 106])]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"oracle %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic bounded teaching model with a stipulated toy contract; it is not a complete Standard MIDI File or MIDI 1.0/2.0 implementation. 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-midi-event-timing-swing-remap-beat-decomposition","generated_at":"2026-09-29T14:50:04.095328+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"MIDI sequencers, file readers and synth drivers depend on exact event ordering and tick/time arithmetic.","repair":"Restore the beat decomposition step so that it reads `divmod(t, ppq)`.","root_cause":"The tick is decomposed by half-beats instead of beats.","sha256":"41bbf1f604b684b32ad42d9fba2dcdc60b45a3fed72d90219b11fd9835de49cc","title":"Eighth-note swing time remapping: beats split at eighth-note boundaries · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.659,"exit_code":1,"observations":[{"actual":[0,0,480,480],"check":"oracle 0","expected":[0,240,480,720],"passed":false},{"actual":[0,0,480,480],"check":"oracle 1","expected":[0,316,480,796],"passed":false},{"actual":[0,79,315],"check":"oracle 2","expected":[316,357,479],"passed":false},{"actual":[144,144],"check":"oracle 3","expected":[144,384],"passed":false},{"actual":[960,960,1140],"check":"oracle 4","expected":[960,1320,1380],"passed":false},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 0, 480, 480], \"expected\": [0, 240, 480, 720], \"passed\": false}, {\"check\": \"oracle 1\", \"actual\": [0, 0, 480, 480], \"expected\": [0, 316, 480, 796], \"passed\": false}, {\"check\": \"oracle 2\", \"actual\": [0, 79, 315], \"expected\": [316, 357, 479], \"passed\": false}, {\"check\": \"oracle 3\", \"actual\": [144, 144], \"expected\": [144, 384], \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": [960, 960, 1140], \"expected\": [960, 1320, 1380], \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.047,"exit_code":1,"observations":[{"actual":[0,480,960,1440],"check":"oracle 0","expected":[0,240,480,720],"passed":false},{"actual":[0,480,960,1440],"check":"oracle 1","expected":[0,316,480,796],"passed":false},{"actual":[480,559,795],"check":"oracle 2","expected":[316,357,479],"passed":false},{"actual":[144,624],"check":"oracle 3","expected":[144,384],"passed":false},{"actual":[1920,2400,2580],"check":"oracle 4","expected":[960,1320,1380],"passed":false},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 480, 960, 1440], \"expected\": [0, 240, 480, 720], \"passed\": false}, {\"check\": \"oracle 1\", \"actual\": [0, 480, 960, 1440], \"expected\": [0, 316, 480, 796], \"passed\": false}, {\"check\": \"oracle 2\", \"actual\": [480, 559, 795], \"expected\": [316, 357, 479], \"passed\": false}, {\"check\": \"oracle 3\", \"actual\": [144, 624], \"expected\": [144, 384], \"passed\": false}, {\"check\": \"oracle 4\", \"actual\": [1920, 2400, 2580], \"expected\": [960, 1320, 1380], \"passed\": false}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.011,"exit_code":0,"observations":[{"actual":[0,240,480,720],"check":"oracle 0","expected":[0,240,480,720],"passed":true},{"actual":[0,316,480,796],"check":"oracle 1","expected":[0,316,480,796],"passed":true},{"actual":[316,357,479],"check":"oracle 2","expected":[316,357,479],"passed":true},{"actual":[144,384],"check":"oracle 3","expected":[144,384],"passed":true},{"actual":[960,1320,1380],"check":"oracle 4","expected":[960,1320,1380],"passed":true},{"actual":null,"check":"oracle 5","expected":null,"passed":true},{"actual":null,"check":"oracle 6","expected":null,"passed":true},{"actual":null,"check":"oracle 7","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"oracle 0\", \"actual\": [0, 240, 480, 720], \"expected\": [0, 240, 480, 720], \"passed\": true}, {\"check\": \"oracle 1\", \"actual\": [0, 316, 480, 796], \"expected\": [0, 316, 480, 796], \"passed\": true}, {\"check\": \"oracle 2\", \"actual\": [316, 357, 479], \"expected\": [316, 357, 479], \"passed\": true}, {\"check\": \"oracle 3\", \"actual\": [144, 384], \"expected\": [144, 384], \"passed\": true}, {\"check\": \"oracle 4\", \"actual\": [960, 1320, 1380], \"expected\": [960, 1320, 1380], \"passed\": true}, {\"check\": \"oracle 5\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 6\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"oracle 7\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}