{"abstract":"Wrong-side rows tell the knitter to knit stitches that should be purled.","category":"Knitting and sewing pattern grading","checks":8,"contract":"chart rows are listed bottom-up (row 1 first), cells left-to-right as drawn. Rounds and RS rows read right-to-left unchanged. Flat WS rows (even rows, or odd rows when start_ws) read left-to-right with swaps k<->p, k2tog->p2tog, ssk->ssp, yo stays. Runs of identical stitches merge: k/p as \"k3\", others as \"yo\" or \"yo x2\". Row outside 1..len -> error.","evaluation_group":"w2-knitting_and_sewing_pattern_grading-chart-reader","failed_approach":"Reversing the row after swapping reads WS rows in the RS direction.","family":"w2-knitting_and_sewing_pattern_grading-chart-reader-ws-swap-and-direction","id":"FA-97476","implementations":{"attempt":{"sha256":"fc0edb87d4301c479cb18dcb6e29b0595ddfbe34955b1c72fcf077e4aec0cffe","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(chart, row, in_round, start_ws):\n    SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'p2tog', 'ssk': 'ssp', 'yo': 'yo'}\n    if not 1 <= row <= len(chart):\n        return 'error: no such row'\n    cells = list(chart[row - 1])\n    ws = (not in_round) and ((row % 2 == 0) != start_ws)\n    if ws:\n        seq = [SWAP.get(c, c) for c in cells[::-1]]\n    else:\n        seq = cells[::-1]\n    out = []\n    for c in seq:\n        if out and out[-1][0] == c:\n            out[-1][1] += 1\n        else:\n            out.append([c, 1])\n    return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['regression: WS swap and direction',\n   [[['yo', 'yo', 'k', 'p', 'k', 'yo', 'yo'], ['p', 'yo', 'yo', 'yo', 'ssk', 'ssk', 'k'],\n     ['yo', 'k', 'k2tog', 'yo', 'p', 'p', 'ssk']],\n    3, False, True],\n   'yo, p1, p2tog, yo, k2, ssp'],\n  ['repair check: WS swap and direction',\n   [[['k2tog', 'yo', 'yo', 'k2tog', 'ssk', 'yo', 'ssk', 'ssk'],\n     ['p', 'k', 'yo', 'ssk', 'yo', 'k', 'yo', 'yo'],\n     ['ssk', 'ssk', 'k2tog', 'k2tog', 'ssk', 'yo', 'ssk', 'yo'],\n     ['ssk', 'k2tog', 'p', 'ssk', 'k', 'p', 'yo', 'yo']],\n    2, False, False],\n   'k1, p1, yo, ssp, yo, p1, yo x2'],\n  ['generated control 1',\n   [[['ssk', 'k2tog', 'yo', 'yo', 'k'], ['ssk', 'p', 'ssk', 'p', 'k'], ['k2tog', 'k', 'ssk', 'ssk', 'yo']], 3,\n    False, False],\n   'yo, ssk x2, k1, k2tog'],\n  ['generated control 2',\n   [[['k2tog', 'yo', 'yo', 'k', 'p', 'ssk'], ['ssk', 'k', 'p', 'p', 'p', 'k2tog'],\n     ['k2tog', 'k', 'ssk', 'yo', 'p', 'k2tog'], ['ssk', 'ssk', 'k2tog', 'p', 'ssk', 'ssk']],\n    1, False, False],\n   'ssk, p1, k1, yo x2, k2tog'],\n  ['generated control 3',\n   [[['p', 'p', 'k', 'p', 'yo', 'yo'], ['p', 'k2tog', 'yo', 'p', 'ssk', 'k2tog'],\n     ['k2tog', 'yo', 'yo', 'ssk', 'k2tog', 'k'], ['k', 'yo', 'ssk', 'yo', 'yo', 'k'],\n     ['k2tog', 'yo', 'yo', 'yo', 'k', 'k']],\n    4, False, False],\n   'p1, yo, ssp, yo x2, p1']],\n [['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['regression: WS swap and direction',\n   [[['k', 'k2tog', 'k2tog'], ['k', 'yo', 'p'], ['ssk', 'k', 'yo'], ['yo', 'ssk', 'yo'], ['yo', 'p', 'ssk']],\n    2, False, False],\n   'p1, yo, k1'],\n  ['repair check: WS swap and direction',\n   [[['ssk', 'yo', 'yo', 'k2tog'], ['ssk', 'p', 'yo', 'p']], 2, False, False], 'ssp, k1, yo, k1'],\n  ['generated control 1',\n   [[['yo', 'ssk', 'k', 'yo', 'yo', 'yo', 'k', 'ssk'],\n     ['k2tog', 'p', 'k2tog', 'yo', 'ssk', 'yo', 'yo', 'k2tog'],\n     ['k2tog', 'yo', 'p', 'ssk', 'k', 'ssk', 'ssk', 'k2tog'],\n     ['ssk', 'ssk', 'k', 'yo', 'ssk', 'k', 'k', 'p']],\n    3, True, False],\n   'k2tog, ssk x2, k1, ssk, p1, yo, k2tog'],\n  ['generated control 2',\n   [[['yo', 'k2tog', 'ssk', 'yo', 'ssk', 'p', 'k2tog', 'yo'],\n     ['p', 'k2tog', 'p', 'k', 'k2tog', 'ssk', 'ssk', 'p']],\n    1, True, True],\n   'yo, k2tog, p1, ssk, yo, ssk, k2tog, yo'],\n  ['generated control 3',\n   [[['k2tog', 'k', 'yo', 'yo', 'yo', 'k2tog', 'ssk', 'k2tog'],\n     ['yo', 'p', 'ssk', 'yo', 'k2tog', 'k2tog', 'ssk', 'p']],\n    1, False, False],\n   'k2tog, ssk, k2tog, yo x3, k1, k2tog']],\n [['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['regression: WS swap and direction',\n   [[['yo', 'yo', 'k', 'p', 'k2tog', 'p'], ['ssk', 'p', 'p', 'ssk', 'yo', 'ssk'],\n     ['yo', 'ssk', 'k', 'ssk', 'p', 'ssk'], ['p', 'p', 'ssk', 'yo', 'yo', 'k2tog'],\n     ['k2tog', 'ssk', 'p', 'p', 'p', 'ssk']],\n    2, False, False],\n   'ssp, k2, ssp, yo, ssp'],\n  ['repair check: WS swap and direction',\n   [[['yo', 'p', 'yo', 'yo', 'yo'], ['ssk', 'k2tog', 'k2tog', 'p', 'yo'],\n     ['yo', 'k2tog', 'ssk', 'k2tog', 'yo'], ['yo', 'k2tog', 'ssk', 'p', 'k'], ['p', 'ssk', 'k', 'k', 'yo'],\n     ['k2tog', 'p', 'k', 'p', 'yo']],\n    6, False, False],\n   'p2tog, k1, p1, k1, yo'],\n  ['generated control 1',\n   [[['yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'k2tog', 'p'],\n     ['ssk', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog', 'k2tog'], ['yo', 'p', 'ssk', 'ssk', 'k', 'k2tog', 'p'],\n     ['k', 'ssk', 'k', 'ssk', 'yo', 'k2tog', 'ssk']],\n    1, False, False],\n   'p1, k2tog, ssk, k2tog x2, yo x2'],\n  ['generated control 2',\n   [[['ssk', 'yo', 'k2tog', 'k', 'yo', 'yo', 'yo', 'ssk'],\n     ['k2tog', 'k2tog', 'k', 'p', 'p', 'k2tog', 'yo', 'yo'],\n     ['k2tog', 'ssk', 'k2tog', 'yo', 'k2tog', 'k', 'k2tog', 'k2tog']],\n    3, True, False],\n   'k2tog x2, k1, k2tog, yo, k2tog, ssk, k2tog'],\n  ['generated control 3',\n   [[['k2tog', 'k', 'k', 'k2tog', 'k2tog', 'k'], ['k', 'ssk', 'yo', 'ssk', 'yo', 'k'],\n     ['yo', 'k2tog', 'k2tog', 'p', 'yo', 'p'], ['p', 'k', 'ssk', 'p', 'k', 'yo']],\n    2, True, True],\n   'k1, yo, ssk, yo, ssk, k1']],\n [['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['regression: WS swap and direction',\n   [[['p', 'p', 'yo', 'yo', 'ssk', 'yo'], ['k2tog', 'ssk', 'k', 'k2tog', 'yo', 'p']], 2, False, False],\n   'p2tog, ssp, p1, p2tog, yo, k1'],\n  ['repair check: WS swap and direction',\n   [[['k2tog', 'p', 'k', 'p', 'ssk', 'p', 'p', 'yo'], ['yo', 'ssk', 'k', 'k2tog', 'ssk', 'p', 'p', 'k2tog'],\n     ['k2tog', 'k', 'ssk', 'k', 'ssk', 'k2tog', 'yo', 'k2tog']],\n    3, False, True],\n   'p2tog, p1, ssp, p1, ssp, p2tog, yo, p2tog'],\n  ['generated control 1',\n   [[['k', 'k', 'yo', 'k', 'p', 'k2tog', 'ssk'], ['yo', 'ssk', 'k', 'p', 'p', 'yo', 'k']], 2, True, False],\n   'k1, yo, p2, k1, ssk, yo'],\n  ['generated control 2',\n   [[['p', 'ssk', 'yo', 'k2tog', 'ssk', 'yo', 'yo'], ['ssk', 'p', 'p', 'p', 'k', 'k', 'p'],\n     ['k2tog', 'k', 'k', 'ssk', 'k', 'ssk', 'k'], ['k', 'p', 'ssk', 'ssk', 'k', 'yo', 'yo'],\n     ['k', 'k2tog', 'p', 'yo', 'k2tog', 'p', 'k2tog']],\n    1, False, False],\n   'yo x2, ssk, k2tog, yo, ssk, p1'],\n  ['generated control 3',\n   [[['ssk', 'k2tog', 'ssk', 'p', 'ssk', 'p'], ['ssk', 'k', 'k', 'k2tog', 'p', 'ssk'],\n     ['yo', 'yo', 'p', 'ssk', 'p', 'k']],\n    1, True, False],\n   'p1, ssk, p1, ssk, k2tog, ssk']],\n [['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['regression: WS swap and direction',\n   [[['k2tog', 'k', 'k', 'k', 'yo', 'k2tog', 'ssk', 'ssk'], ['ssk', 'k', 'ssk', 'p', 'p', 'k', 'p', 'k2tog'],\n     ['k2tog', 'p', 'k', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],\n     ['k', 'p', 'k2tog', 'k2tog', 'yo', 'k2tog', 'p', 'yo'],\n     ['ssk', 'p', 'yo', 'p', 'p', 'k2tog', 'yo', 'k2tog']],\n    1, False, True],\n   'p2tog, p3, yo, p2tog, ssp x2'],\n  ['repair check: WS swap and direction',\n   [[['ssk', 'k2tog', 'k', 'k', 'yo', 'yo', 'yo', 'yo'], ['ssk', 'p', 'p', 'yo', 'ssk', 'p', 'p', 'k'],\n     ['yo', 'k', 'ssk', 'yo', 'k2tog', 'k', 'k', 'p'],\n     ['ssk', 'p', 'p', 'ssk', 'yo', 'k2tog', 'k2tog', 'k']],\n    3, False, True],\n   'yo, p1, ssp, yo, p2tog, p2, k1'],\n  ['generated control 1',\n   [[['ssk', 'ssk', 'ssk', 'yo'], ['ssk', 'k', 'yo', 'yo'], ['k2tog', 'k', 'k2tog', 'yo'],\n     ['k', 'k', 'k', 'k2tog'], ['p', 'k', 'p', 'p']],\n    5, True, False],\n   'p2, k1, p1'],\n  ['generated control 2',\n   [[['k2tog', 'ssk', 'yo', 'k', 'yo', 'yo', 'k'], ['k2tog', 'k2tog', 'k', 'ssk', 'k', 'yo', 'k2tog'],\n     ['ssk', 'ssk', 'k', 'p', 'p', 'k2tog', 'p']],\n    2, False, False],\n   'p2tog x2, p1, ssp, p1, yo, p2tog'],\n  ['generated control 3',\n   [[['k2tog', 'p', 'p', 'p'], ['p', 'yo', 'k', 'k'], ['k2tog', 'k', 'k', 'ssk']], 1, True, False],\n   'p3, k2tog']]]\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":"c4cd459770dc59c48076aed3e6ecae218c58c15083715c8d89bc25900ca8d059","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(chart, row, in_round, start_ws):\n    SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'p2tog', 'ssk': 'ssp', 'yo': 'yo'}\n    if not 1 <= row <= len(chart):\n        return 'error: no such row'\n    cells = list(chart[row - 1])\n    ws = (not in_round) and ((row % 2 == 0) != start_ws)\n    if ws:\n        seq = list(cells)\n    else:\n        seq = cells[::-1]\n    out = []\n    for c in seq:\n        if out and out[-1][0] == c:\n            out[-1][1] += 1\n        else:\n            out.append([c, 1])\n    return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['regression: WS swap and direction',\n   [[['yo', 'yo', 'k', 'p', 'k', 'yo', 'yo'], ['p', 'yo', 'yo', 'yo', 'ssk', 'ssk', 'k'],\n     ['yo', 'k', 'k2tog', 'yo', 'p', 'p', 'ssk']],\n    3, False, True],\n   'yo, p1, p2tog, yo, k2, ssp'],\n  ['repair check: WS swap and direction',\n   [[['k2tog', 'yo', 'yo', 'k2tog', 'ssk', 'yo', 'ssk', 'ssk'],\n     ['p', 'k', 'yo', 'ssk', 'yo', 'k', 'yo', 'yo'],\n     ['ssk', 'ssk', 'k2tog', 'k2tog', 'ssk', 'yo', 'ssk', 'yo'],\n     ['ssk', 'k2tog', 'p', 'ssk', 'k', 'p', 'yo', 'yo']],\n    2, False, False],\n   'k1, p1, yo, ssp, yo, p1, yo x2'],\n  ['generated control 1',\n   [[['ssk', 'k2tog', 'yo', 'yo', 'k'], ['ssk', 'p', 'ssk', 'p', 'k'], ['k2tog', 'k', 'ssk', 'ssk', 'yo']], 3,\n    False, False],\n   'yo, ssk x2, k1, k2tog'],\n  ['generated control 2',\n   [[['k2tog', 'yo', 'yo', 'k', 'p', 'ssk'], ['ssk', 'k', 'p', 'p', 'p', 'k2tog'],\n     ['k2tog', 'k', 'ssk', 'yo', 'p', 'k2tog'], ['ssk', 'ssk', 'k2tog', 'p', 'ssk', 'ssk']],\n    1, False, False],\n   'ssk, p1, k1, yo x2, k2tog'],\n  ['generated control 3',\n   [[['p', 'p', 'k', 'p', 'yo', 'yo'], ['p', 'k2tog', 'yo', 'p', 'ssk', 'k2tog'],\n     ['k2tog', 'yo', 'yo', 'ssk', 'k2tog', 'k'], ['k', 'yo', 'ssk', 'yo', 'yo', 'k'],\n     ['k2tog', 'yo', 'yo', 'yo', 'k', 'k']],\n    4, False, False],\n   'p1, yo, ssp, yo x2, p1']],\n [['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['regression: WS swap and direction',\n   [[['k', 'k2tog', 'k2tog'], ['k', 'yo', 'p'], ['ssk', 'k', 'yo'], ['yo', 'ssk', 'yo'], ['yo', 'p', 'ssk']],\n    2, False, False],\n   'p1, yo, k1'],\n  ['repair check: WS swap and direction',\n   [[['ssk', 'yo', 'yo', 'k2tog'], ['ssk', 'p', 'yo', 'p']], 2, False, False], 'ssp, k1, yo, k1'],\n  ['generated control 1',\n   [[['yo', 'ssk', 'k', 'yo', 'yo', 'yo', 'k', 'ssk'],\n     ['k2tog', 'p', 'k2tog', 'yo', 'ssk', 'yo', 'yo', 'k2tog'],\n     ['k2tog', 'yo', 'p', 'ssk', 'k', 'ssk', 'ssk', 'k2tog'],\n     ['ssk', 'ssk', 'k', 'yo', 'ssk', 'k', 'k', 'p']],\n    3, True, False],\n   'k2tog, ssk x2, k1, ssk, p1, yo, k2tog'],\n  ['generated control 2',\n   [[['yo', 'k2tog', 'ssk', 'yo', 'ssk', 'p', 'k2tog', 'yo'],\n     ['p', 'k2tog', 'p', 'k', 'k2tog', 'ssk', 'ssk', 'p']],\n    1, True, True],\n   'yo, k2tog, p1, ssk, yo, ssk, k2tog, yo'],\n  ['generated control 3',\n   [[['k2tog', 'k', 'yo', 'yo', 'yo', 'k2tog', 'ssk', 'k2tog'],\n     ['yo', 'p', 'ssk', 'yo', 'k2tog', 'k2tog', 'ssk', 'p']],\n    1, False, False],\n   'k2tog, ssk, k2tog, yo x3, k1, k2tog']],\n [['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['regression: WS swap and direction',\n   [[['yo', 'yo', 'k', 'p', 'k2tog', 'p'], ['ssk', 'p', 'p', 'ssk', 'yo', 'ssk'],\n     ['yo', 'ssk', 'k', 'ssk', 'p', 'ssk'], ['p', 'p', 'ssk', 'yo', 'yo', 'k2tog'],\n     ['k2tog', 'ssk', 'p', 'p', 'p', 'ssk']],\n    2, False, False],\n   'ssp, k2, ssp, yo, ssp'],\n  ['repair check: WS swap and direction',\n   [[['yo', 'p', 'yo', 'yo', 'yo'], ['ssk', 'k2tog', 'k2tog', 'p', 'yo'],\n     ['yo', 'k2tog', 'ssk', 'k2tog', 'yo'], ['yo', 'k2tog', 'ssk', 'p', 'k'], ['p', 'ssk', 'k', 'k', 'yo'],\n     ['k2tog', 'p', 'k', 'p', 'yo']],\n    6, False, False],\n   'p2tog, k1, p1, k1, yo'],\n  ['generated control 1',\n   [[['yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'k2tog', 'p'],\n     ['ssk', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog', 'k2tog'], ['yo', 'p', 'ssk', 'ssk', 'k', 'k2tog', 'p'],\n     ['k', 'ssk', 'k', 'ssk', 'yo', 'k2tog', 'ssk']],\n    1, False, False],\n   'p1, k2tog, ssk, k2tog x2, yo x2'],\n  ['generated control 2',\n   [[['ssk', 'yo', 'k2tog', 'k', 'yo', 'yo', 'yo', 'ssk'],\n     ['k2tog', 'k2tog', 'k', 'p', 'p', 'k2tog', 'yo', 'yo'],\n     ['k2tog', 'ssk', 'k2tog', 'yo', 'k2tog', 'k', 'k2tog', 'k2tog']],\n    3, True, False],\n   'k2tog x2, k1, k2tog, yo, k2tog, ssk, k2tog'],\n  ['generated control 3',\n   [[['k2tog', 'k', 'k', 'k2tog', 'k2tog', 'k'], ['k', 'ssk', 'yo', 'ssk', 'yo', 'k'],\n     ['yo', 'k2tog', 'k2tog', 'p', 'yo', 'p'], ['p', 'k', 'ssk', 'p', 'k', 'yo']],\n    2, True, True],\n   'k1, yo, ssk, yo, ssk, k1']],\n [['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['regression: WS swap and direction',\n   [[['p', 'p', 'yo', 'yo', 'ssk', 'yo'], ['k2tog', 'ssk', 'k', 'k2tog', 'yo', 'p']], 2, False, False],\n   'p2tog, ssp, p1, p2tog, yo, k1'],\n  ['repair check: WS swap and direction',\n   [[['k2tog', 'p', 'k', 'p', 'ssk', 'p', 'p', 'yo'], ['yo', 'ssk', 'k', 'k2tog', 'ssk', 'p', 'p', 'k2tog'],\n     ['k2tog', 'k', 'ssk', 'k', 'ssk', 'k2tog', 'yo', 'k2tog']],\n    3, False, True],\n   'p2tog, p1, ssp, p1, ssp, p2tog, yo, p2tog'],\n  ['generated control 1',\n   [[['k', 'k', 'yo', 'k', 'p', 'k2tog', 'ssk'], ['yo', 'ssk', 'k', 'p', 'p', 'yo', 'k']], 2, True, False],\n   'k1, yo, p2, k1, ssk, yo'],\n  ['generated control 2',\n   [[['p', 'ssk', 'yo', 'k2tog', 'ssk', 'yo', 'yo'], ['ssk', 'p', 'p', 'p', 'k', 'k', 'p'],\n     ['k2tog', 'k', 'k', 'ssk', 'k', 'ssk', 'k'], ['k', 'p', 'ssk', 'ssk', 'k', 'yo', 'yo'],\n     ['k', 'k2tog', 'p', 'yo', 'k2tog', 'p', 'k2tog']],\n    1, False, False],\n   'yo x2, ssk, k2tog, yo, ssk, p1'],\n  ['generated control 3',\n   [[['ssk', 'k2tog', 'ssk', 'p', 'ssk', 'p'], ['ssk', 'k', 'k', 'k2tog', 'p', 'ssk'],\n     ['yo', 'yo', 'p', 'ssk', 'p', 'k']],\n    1, True, False],\n   'p1, ssk, p1, ssk, k2tog, ssk']],\n [['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['regression: WS swap and direction',\n   [[['k2tog', 'k', 'k', 'k', 'yo', 'k2tog', 'ssk', 'ssk'], ['ssk', 'k', 'ssk', 'p', 'p', 'k', 'p', 'k2tog'],\n     ['k2tog', 'p', 'k', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],\n     ['k', 'p', 'k2tog', 'k2tog', 'yo', 'k2tog', 'p', 'yo'],\n     ['ssk', 'p', 'yo', 'p', 'p', 'k2tog', 'yo', 'k2tog']],\n    1, False, True],\n   'p2tog, p3, yo, p2tog, ssp x2'],\n  ['repair check: WS swap and direction',\n   [[['ssk', 'k2tog', 'k', 'k', 'yo', 'yo', 'yo', 'yo'], ['ssk', 'p', 'p', 'yo', 'ssk', 'p', 'p', 'k'],\n     ['yo', 'k', 'ssk', 'yo', 'k2tog', 'k', 'k', 'p'],\n     ['ssk', 'p', 'p', 'ssk', 'yo', 'k2tog', 'k2tog', 'k']],\n    3, False, True],\n   'yo, p1, ssp, yo, p2tog, p2, k1'],\n  ['generated control 1',\n   [[['ssk', 'ssk', 'ssk', 'yo'], ['ssk', 'k', 'yo', 'yo'], ['k2tog', 'k', 'k2tog', 'yo'],\n     ['k', 'k', 'k', 'k2tog'], ['p', 'k', 'p', 'p']],\n    5, True, False],\n   'p2, k1, p1'],\n  ['generated control 2',\n   [[['k2tog', 'ssk', 'yo', 'k', 'yo', 'yo', 'k'], ['k2tog', 'k2tog', 'k', 'ssk', 'k', 'yo', 'k2tog'],\n     ['ssk', 'ssk', 'k', 'p', 'p', 'k2tog', 'p']],\n    2, False, False],\n   'p2tog x2, p1, ssp, p1, yo, p2tog'],\n  ['generated control 3',\n   [[['k2tog', 'p', 'p', 'p'], ['p', 'yo', 'k', 'k'], ['k2tog', 'k', 'k', 'ssk']], 1, True, False],\n   'p3, k2tog']]]\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":"52a028df8b2252d414d1100727e82de1f0b59c885e9a04fdaa4222f4b07b8486","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\nimport math\nfrom fractions import Fraction\nN = 1\nobservations = []\ndef solve(chart, row, in_round, start_ws):\n    SWAP = {'k': 'p', 'p': 'k', 'k2tog': 'p2tog', 'ssk': 'ssp', 'yo': 'yo'}\n    if not 1 <= row <= len(chart):\n        return 'error: no such row'\n    cells = list(chart[row - 1])\n    ws = (not in_round) and ((row % 2 == 0) != start_ws)\n    if ws:\n        seq = [SWAP.get(c, c) for c in cells]\n    else:\n        seq = cells[::-1]\n    out = []\n    for c in seq:\n        if out and out[-1][0] == c:\n            out[-1][1] += 1\n        else:\n            out.append([c, 1])\n    return ', '.join(c + str(n) if c in ('k', 'p') else (c if n == 1 else '%s x%d' % (c, n)) for c, n in out)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['regression: WS swap and direction',\n   [[['yo', 'yo', 'k', 'p', 'k', 'yo', 'yo'], ['p', 'yo', 'yo', 'yo', 'ssk', 'ssk', 'k'],\n     ['yo', 'k', 'k2tog', 'yo', 'p', 'p', 'ssk']],\n    3, False, True],\n   'yo, p1, p2tog, yo, k2, ssp'],\n  ['repair check: WS swap and direction',\n   [[['k2tog', 'yo', 'yo', 'k2tog', 'ssk', 'yo', 'ssk', 'ssk'],\n     ['p', 'k', 'yo', 'ssk', 'yo', 'k', 'yo', 'yo'],\n     ['ssk', 'ssk', 'k2tog', 'k2tog', 'ssk', 'yo', 'ssk', 'yo'],\n     ['ssk', 'k2tog', 'p', 'ssk', 'k', 'p', 'yo', 'yo']],\n    2, False, False],\n   'k1, p1, yo, ssp, yo, p1, yo x2'],\n  ['generated control 1',\n   [[['ssk', 'k2tog', 'yo', 'yo', 'k'], ['ssk', 'p', 'ssk', 'p', 'k'], ['k2tog', 'k', 'ssk', 'ssk', 'yo']], 3,\n    False, False],\n   'yo, ssk x2, k1, k2tog'],\n  ['generated control 2',\n   [[['k2tog', 'yo', 'yo', 'k', 'p', 'ssk'], ['ssk', 'k', 'p', 'p', 'p', 'k2tog'],\n     ['k2tog', 'k', 'ssk', 'yo', 'p', 'k2tog'], ['ssk', 'ssk', 'k2tog', 'p', 'ssk', 'ssk']],\n    1, False, False],\n   'ssk, p1, k1, yo x2, k2tog'],\n  ['generated control 3',\n   [[['p', 'p', 'k', 'p', 'yo', 'yo'], ['p', 'k2tog', 'yo', 'p', 'ssk', 'k2tog'],\n     ['k2tog', 'yo', 'yo', 'ssk', 'k2tog', 'k'], ['k', 'yo', 'ssk', 'yo', 'yo', 'k'],\n     ['k2tog', 'yo', 'yo', 'yo', 'k', 'k']],\n    4, False, False],\n   'p1, yo, ssp, yo x2, p1']],\n [['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['regression: WS swap and direction',\n   [[['k', 'k2tog', 'k2tog'], ['k', 'yo', 'p'], ['ssk', 'k', 'yo'], ['yo', 'ssk', 'yo'], ['yo', 'p', 'ssk']],\n    2, False, False],\n   'p1, yo, k1'],\n  ['repair check: WS swap and direction',\n   [[['ssk', 'yo', 'yo', 'k2tog'], ['ssk', 'p', 'yo', 'p']], 2, False, False], 'ssp, k1, yo, k1'],\n  ['generated control 1',\n   [[['yo', 'ssk', 'k', 'yo', 'yo', 'yo', 'k', 'ssk'],\n     ['k2tog', 'p', 'k2tog', 'yo', 'ssk', 'yo', 'yo', 'k2tog'],\n     ['k2tog', 'yo', 'p', 'ssk', 'k', 'ssk', 'ssk', 'k2tog'],\n     ['ssk', 'ssk', 'k', 'yo', 'ssk', 'k', 'k', 'p']],\n    3, True, False],\n   'k2tog, ssk x2, k1, ssk, p1, yo, k2tog'],\n  ['generated control 2',\n   [[['yo', 'k2tog', 'ssk', 'yo', 'ssk', 'p', 'k2tog', 'yo'],\n     ['p', 'k2tog', 'p', 'k', 'k2tog', 'ssk', 'ssk', 'p']],\n    1, True, True],\n   'yo, k2tog, p1, ssk, yo, ssk, k2tog, yo'],\n  ['generated control 3',\n   [[['k2tog', 'k', 'yo', 'yo', 'yo', 'k2tog', 'ssk', 'k2tog'],\n     ['yo', 'p', 'ssk', 'yo', 'k2tog', 'k2tog', 'ssk', 'p']],\n    1, False, False],\n   'k2tog, ssk, k2tog, yo x3, k1, k2tog']],\n [['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['regression: WS swap and direction',\n   [[['yo', 'yo', 'k', 'p', 'k2tog', 'p'], ['ssk', 'p', 'p', 'ssk', 'yo', 'ssk'],\n     ['yo', 'ssk', 'k', 'ssk', 'p', 'ssk'], ['p', 'p', 'ssk', 'yo', 'yo', 'k2tog'],\n     ['k2tog', 'ssk', 'p', 'p', 'p', 'ssk']],\n    2, False, False],\n   'ssp, k2, ssp, yo, ssp'],\n  ['repair check: WS swap and direction',\n   [[['yo', 'p', 'yo', 'yo', 'yo'], ['ssk', 'k2tog', 'k2tog', 'p', 'yo'],\n     ['yo', 'k2tog', 'ssk', 'k2tog', 'yo'], ['yo', 'k2tog', 'ssk', 'p', 'k'], ['p', 'ssk', 'k', 'k', 'yo'],\n     ['k2tog', 'p', 'k', 'p', 'yo']],\n    6, False, False],\n   'p2tog, k1, p1, k1, yo'],\n  ['generated control 1',\n   [[['yo', 'yo', 'k2tog', 'k2tog', 'ssk', 'k2tog', 'p'],\n     ['ssk', 'ssk', 'k2tog', 'p', 'k2tog', 'k2tog', 'k2tog'], ['yo', 'p', 'ssk', 'ssk', 'k', 'k2tog', 'p'],\n     ['k', 'ssk', 'k', 'ssk', 'yo', 'k2tog', 'ssk']],\n    1, False, False],\n   'p1, k2tog, ssk, k2tog x2, yo x2'],\n  ['generated control 2',\n   [[['ssk', 'yo', 'k2tog', 'k', 'yo', 'yo', 'yo', 'ssk'],\n     ['k2tog', 'k2tog', 'k', 'p', 'p', 'k2tog', 'yo', 'yo'],\n     ['k2tog', 'ssk', 'k2tog', 'yo', 'k2tog', 'k', 'k2tog', 'k2tog']],\n    3, True, False],\n   'k2tog x2, k1, k2tog, yo, k2tog, ssk, k2tog'],\n  ['generated control 3',\n   [[['k2tog', 'k', 'k', 'k2tog', 'k2tog', 'k'], ['k', 'ssk', 'yo', 'ssk', 'yo', 'k'],\n     ['yo', 'k2tog', 'k2tog', 'p', 'yo', 'p'], ['p', 'k', 'ssk', 'p', 'k', 'yo']],\n    2, True, True],\n   'k1, yo, ssk, yo, ssk, k1']],\n [['out of range', [[['k']], 3, False, False], 'error: no such row'],\n  ['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['regression: WS swap and direction',\n   [[['p', 'p', 'yo', 'yo', 'ssk', 'yo'], ['k2tog', 'ssk', 'k', 'k2tog', 'yo', 'p']], 2, False, False],\n   'p2tog, ssp, p1, p2tog, yo, k1'],\n  ['repair check: WS swap and direction',\n   [[['k2tog', 'p', 'k', 'p', 'ssk', 'p', 'p', 'yo'], ['yo', 'ssk', 'k', 'k2tog', 'ssk', 'p', 'p', 'k2tog'],\n     ['k2tog', 'k', 'ssk', 'k', 'ssk', 'k2tog', 'yo', 'k2tog']],\n    3, False, True],\n   'p2tog, p1, ssp, p1, ssp, p2tog, yo, p2tog'],\n  ['generated control 1',\n   [[['k', 'k', 'yo', 'k', 'p', 'k2tog', 'ssk'], ['yo', 'ssk', 'k', 'p', 'p', 'yo', 'k']], 2, True, False],\n   'k1, yo, p2, k1, ssk, yo'],\n  ['generated control 2',\n   [[['p', 'ssk', 'yo', 'k2tog', 'ssk', 'yo', 'yo'], ['ssk', 'p', 'p', 'p', 'k', 'k', 'p'],\n     ['k2tog', 'k', 'k', 'ssk', 'k', 'ssk', 'k'], ['k', 'p', 'ssk', 'ssk', 'k', 'yo', 'yo'],\n     ['k', 'k2tog', 'p', 'yo', 'k2tog', 'p', 'k2tog']],\n    1, False, False],\n   'yo x2, ssk, k2tog, yo, ssk, p1'],\n  ['generated control 3',\n   [[['ssk', 'k2tog', 'ssk', 'p', 'ssk', 'p'], ['ssk', 'k', 'k', 'k2tog', 'p', 'ssk'],\n     ['yo', 'yo', 'p', 'ssk', 'p', 'k']],\n    1, True, False],\n   'p1, ssk, p1, ssk, k2tog, ssk']],\n [['RS row', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'k', 'k']], 1, False, False],\n   'k2tog, yo, p1, k2'],\n  ['WS row swapped', [[['k', 'k', 'p', 'yo', 'k2tog'], ['p', 'p', 'k', 'ssk', 'k']], 2, False, False],\n   'k2, p1, ssp, p1'],\n  ['in the round', [[['k', 'p'], ['ssk', 'k']], 2, True, False], 'k1, ssk'],\n  ['regression: WS swap and direction',\n   [[['k2tog', 'k', 'k', 'k', 'yo', 'k2tog', 'ssk', 'ssk'], ['ssk', 'k', 'ssk', 'p', 'p', 'k', 'p', 'k2tog'],\n     ['k2tog', 'p', 'k', 'k2tog', 'k2tog', 'ssk', 'yo', 'k2tog'],\n     ['k', 'p', 'k2tog', 'k2tog', 'yo', 'k2tog', 'p', 'yo'],\n     ['ssk', 'p', 'yo', 'p', 'p', 'k2tog', 'yo', 'k2tog']],\n    1, False, True],\n   'p2tog, p3, yo, p2tog, ssp x2'],\n  ['repair check: WS swap and direction',\n   [[['ssk', 'k2tog', 'k', 'k', 'yo', 'yo', 'yo', 'yo'], ['ssk', 'p', 'p', 'yo', 'ssk', 'p', 'p', 'k'],\n     ['yo', 'k', 'ssk', 'yo', 'k2tog', 'k', 'k', 'p'],\n     ['ssk', 'p', 'p', 'ssk', 'yo', 'k2tog', 'k2tog', 'k']],\n    3, False, True],\n   'yo, p1, ssp, yo, p2tog, p2, k1'],\n  ['generated control 1',\n   [[['ssk', 'ssk', 'ssk', 'yo'], ['ssk', 'k', 'yo', 'yo'], ['k2tog', 'k', 'k2tog', 'yo'],\n     ['k', 'k', 'k', 'k2tog'], ['p', 'k', 'p', 'p']],\n    5, True, False],\n   'p2, k1, p1'],\n  ['generated control 2',\n   [[['k2tog', 'ssk', 'yo', 'k', 'yo', 'yo', 'k'], ['k2tog', 'k2tog', 'k', 'ssk', 'k', 'yo', 'k2tog'],\n     ['ssk', 'ssk', 'k', 'p', 'p', 'k2tog', 'p']],\n    2, False, False],\n   'p2tog x2, p1, ssp, p1, yo, p2tog'],\n  ['generated control 3',\n   [[['k2tog', 'p', 'p', 'p'], ['p', 'yo', 'k', 'k'], ['k2tog', 'k', 'k', 'ssk']], 1, True, False],\n   'p3, k2tog']]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic toy contract stated in full here; it is a bounded teaching model, not an authoritative reference or standards 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-knitting_and_sewing_pattern_grading-chart-reader-ws-swap-and-direction","generated_at":"2026-09-29T14:52:32.565205+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Chart readers must flip reading direction and stitch meaning on wrong-side rows.","repair":"Swap each symbol for its WS equivalent and read left-to-right.","root_cause":"WS rows are read left-to-right but symbols are not converted to their WS equivalents.","sha256":"38e95aa86841b2da8899ebab017fab38e483a6eb6a8fde5ae7411cc9e594738c","title":"Knitting chart row reader: WS swap and direction · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.89,"exit_code":1,"observations":[{"actual":"k2tog, yo, p1, k2","check":"RS row","expected":"k2tog, yo, p1, k2","passed":true},{"actual":"p1, ssp, p1, k2","check":"WS row swapped","expected":"k2, p1, ssp, p1","passed":false},{"actual":"k1, ssk","check":"in the round","expected":"k1, ssk","passed":true},{"actual":"ssp, k2, yo, p2tog, p1, yo","check":"regression: WS swap and direction","expected":"yo, p1, p2tog, yo, k2, ssp","passed":false},{"actual":"yo x2, p1, yo, ssp, yo, p1, k1","check":"repair check: WS swap and direction","expected":"k1, p1, yo, ssp, yo, p1, yo x2","passed":false},{"actual":"yo, ssk x2, k1, k2tog","check":"generated control 1","expected":"yo, ssk x2, k1, k2tog","passed":true},{"actual":"ssk, p1, k1, yo x2, k2tog","check":"generated control 2","expected":"ssk, p1, k1, yo x2, k2tog","passed":true},{"actual":"p1, yo x2, ssp, yo, p1","check":"generated control 3","expected":"p1, yo, ssp, yo x2, p1","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"RS row\", \"actual\": \"k2tog, yo, p1, k2\", \"expected\": \"k2tog, yo, p1, k2\", \"passed\": true}, {\"check\": \"WS row swapped\", \"actual\": \"p1, ssp, p1, k2\", \"expected\": \"k2, p1, ssp, p1\", \"passed\": false}, {\"check\": \"in the round\", \"actual\": \"k1, ssk\", \"expected\": \"k1, ssk\", \"passed\": true}, {\"check\": \"regression: WS swap and direction\", \"actual\": \"ssp, k2, yo, p2tog, p1, yo\", \"expected\": \"yo, p1, p2tog, yo, k2, ssp\", \"passed\": false}, {\"check\": \"repair check: WS swap and direction\", \"actual\": \"yo x2, p1, yo, ssp, yo, p1, k1\", \"expected\": \"k1, p1, yo, ssp, yo, p1, yo x2\", \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"yo, ssk x2, k1, k2tog\", \"expected\": \"yo, ssk x2, k1, k2tog\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"ssk, p1, k1, yo x2, k2tog\", \"expected\": \"ssk, p1, k1, yo x2, k2tog\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"p1, yo x2, ssp, yo, p1\", \"expected\": \"p1, yo, ssp, yo x2, p1\", \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.064,"exit_code":1,"observations":[{"actual":"k2tog, yo, p1, k2","check":"RS row","expected":"k2tog, yo, p1, k2","passed":true},{"actual":"p2, k1, ssk, k1","check":"WS row swapped","expected":"k2, p1, ssp, p1","passed":false},{"actual":"k1, ssk","check":"in the round","expected":"k1, ssk","passed":true},{"actual":"yo, k1, k2tog, yo, p2, ssk","check":"regression: WS swap and direction","expected":"yo, p1, p2tog, yo, k2, ssp","passed":false},{"actual":"p1, k1, yo, ssk, yo, k1, yo x2","check":"repair check: WS swap and direction","expected":"k1, p1, yo, ssp, yo, p1, yo x2","passed":false},{"actual":"yo, ssk x2, k1, k2tog","check":"generated control 1","expected":"yo, ssk x2, k1, k2tog","passed":true},{"actual":"ssk, p1, k1, yo x2, k2tog","check":"generated control 2","expected":"ssk, p1, k1, yo x2, k2tog","passed":true},{"actual":"k1, yo, ssk, yo x2, k1","check":"generated control 3","expected":"p1, yo, ssp, yo x2, p1","passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"RS row\", \"actual\": \"k2tog, yo, p1, k2\", \"expected\": \"k2tog, yo, p1, k2\", \"passed\": true}, {\"check\": \"WS row swapped\", \"actual\": \"p2, k1, ssk, k1\", \"expected\": \"k2, p1, ssp, p1\", \"passed\": false}, {\"check\": \"in the round\", \"actual\": \"k1, ssk\", \"expected\": \"k1, ssk\", \"passed\": true}, {\"check\": \"regression: WS swap and direction\", \"actual\": \"yo, k1, k2tog, yo, p2, ssk\", \"expected\": \"yo, p1, p2tog, yo, k2, ssp\", \"passed\": false}, {\"check\": \"repair check: WS swap and direction\", \"actual\": \"p1, k1, yo, ssk, yo, k1, yo x2\", \"expected\": \"k1, p1, yo, ssp, yo, p1, yo x2\", \"passed\": false}, {\"check\": \"generated control 1\", \"actual\": \"yo, ssk x2, k1, k2tog\", \"expected\": \"yo, ssk x2, k1, k2tog\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"ssk, p1, k1, yo x2, k2tog\", \"expected\": \"ssk, p1, k1, yo x2, k2tog\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"k1, yo, ssk, yo x2, k1\", \"expected\": \"p1, yo, ssp, yo x2, p1\", \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.8,"exit_code":0,"observations":[{"actual":"k2tog, yo, p1, k2","check":"RS row","expected":"k2tog, yo, p1, k2","passed":true},{"actual":"k2, p1, ssp, p1","check":"WS row swapped","expected":"k2, p1, ssp, p1","passed":true},{"actual":"k1, ssk","check":"in the round","expected":"k1, ssk","passed":true},{"actual":"yo, p1, p2tog, yo, k2, ssp","check":"regression: WS swap and direction","expected":"yo, p1, p2tog, yo, k2, ssp","passed":true},{"actual":"k1, p1, yo, ssp, yo, p1, yo x2","check":"repair check: WS swap and direction","expected":"k1, p1, yo, ssp, yo, p1, yo x2","passed":true},{"actual":"yo, ssk x2, k1, k2tog","check":"generated control 1","expected":"yo, ssk x2, k1, k2tog","passed":true},{"actual":"ssk, p1, k1, yo x2, k2tog","check":"generated control 2","expected":"ssk, p1, k1, yo x2, k2tog","passed":true},{"actual":"p1, yo, ssp, yo x2, p1","check":"generated control 3","expected":"p1, yo, ssp, yo x2, p1","passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"RS row\", \"actual\": \"k2tog, yo, p1, k2\", \"expected\": \"k2tog, yo, p1, k2\", \"passed\": true}, {\"check\": \"WS row swapped\", \"actual\": \"k2, p1, ssp, p1\", \"expected\": \"k2, p1, ssp, p1\", \"passed\": true}, {\"check\": \"in the round\", \"actual\": \"k1, ssk\", \"expected\": \"k1, ssk\", \"passed\": true}, {\"check\": \"regression: WS swap and direction\", \"actual\": \"yo, p1, p2tog, yo, k2, ssp\", \"expected\": \"yo, p1, p2tog, yo, k2, ssp\", \"passed\": true}, {\"check\": \"repair check: WS swap and direction\", \"actual\": \"k1, p1, yo, ssp, yo, p1, yo x2\", \"expected\": \"k1, p1, yo, ssp, yo, p1, yo x2\", \"passed\": true}, {\"check\": \"generated control 1\", \"actual\": \"yo, ssk x2, k1, k2tog\", \"expected\": \"yo, ssk x2, k1, k2tog\", \"passed\": true}, {\"check\": \"generated control 2\", \"actual\": \"ssk, p1, k1, yo x2, k2tog\", \"expected\": \"ssk, p1, k1, yo x2, k2tog\", \"passed\": true}, {\"check\": \"generated control 3\", \"actual\": \"p1, yo, ssp, yo x2, p1\", \"expected\": \"p1, yo, ssp, yo x2, p1\", \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}