{"abstract":"The table inclusive row end result violates the stipulated table rectangular selection projection contract.","category":"Table interactions","checks":6,"contract":"A rectangular cell selection is inclusive on both axes and independent of drag direction; hidden rows and columns are omitted, locked cells remain selected but are not editable, and outline edges follow visible surviving cells.","evaluation_group":"s3-table-interactions-cell-rectangle","failed_approach":"The attempted repair 'len(rows)' still loses a required part of the table contract.","family":"s3-table-interactions-cell-rectangle-inclusive-row-end","id":"FA-37101","implementations":{"attempt":{"sha256":"12bd24d1614ca1c4cdaaaa3f6aed66428c823f3d7a4100c2523d61f00bbb2fb7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, cols, start, end, hidden_rows, hidden_cols, locked):\n    ri=sorted([rows.index(start[0]),rows.index(end[0])])\n    ci=sorted([cols.index(start[1]),cols.index(end[1])])\n    rr=[r for r in rows[ri[0]:len(rows)] if r not in hidden_rows]\n    cc=[c for c in cols[ci[0]:ci[1]+1] if c not in hidden_cols]\n    cells=[(r,c) for r in rr for c in cc]\n    return {'cells':cells,'editable':[x for x in cells if x not in locked],'top':[(rr[0],c) for c in cc] if rr else [],'bottom':[(rr[-1],c) for c in cc] if rr else [],'left':[(r,cc[0]) for r in rr] if cc else [],'right':[(r,cc[-1]) for r in rr] if cc else [],'rows':rr,'cols':cc}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(1),'b'], ['x','y'], ('a'+str(1),'x'), ('a'+str(1),'x'), [], [], []), {'cells': [('a1', 'x')], 'editable': [('a1', 'x')], 'top': [('a1', 'x')], 'bottom': [('a1', 'x')], 'left': [('a1', 'x')], 'right': [('a1', 'x')], 'rows': ['a1'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 2:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(2),'b'], ['x','y'], ('a'+str(2),'x'), ('a'+str(2),'x'), [], [], []), {'cells': [('a2', 'x')], 'editable': [('a2', 'x')], 'top': [('a2', 'x')], 'bottom': [('a2', 'x')], 'left': [('a2', 'x')], 'right': [('a2', 'x')], 'rows': ['a2'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 3:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(3),'b'], ['x','y'], ('a'+str(3),'x'), ('a'+str(3),'x'), [], [], []), {'cells': [('a3', 'x')], 'editable': [('a3', 'x')], 'top': [('a3', 'x')], 'bottom': [('a3', 'x')], 'left': [('a3', 'x')], 'right': [('a3', 'x')], 'rows': ['a3'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 4:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(4),'b'], ['x','y'], ('a'+str(4),'x'), ('a'+str(4),'x'), [], [], []), {'cells': [('a4', 'x')], 'editable': [('a4', 'x')], 'top': [('a4', 'x')], 'bottom': [('a4', 'x')], 'left': [('a4', 'x')], 'right': [('a4', 'x')], 'rows': ['a4'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 5:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(5),'b'], ['x','y'], ('a'+str(5),'x'), ('a'+str(5),'x'), [], [], []), {'cells': [('a5', 'x')], 'editable': [('a5', 'x')], 'top': [('a5', 'x')], 'bottom': [('a5', 'x')], 'left': [('a5', 'x')], 'right': [('a5', 'x')], 'rows': ['a5'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\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":"23f12268b9ed4c03d3acd73f8f5d02800985b33a52e72e7d7b696358c029cb9d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, cols, start, end, hidden_rows, hidden_cols, locked):\n    ri=sorted([rows.index(start[0]),rows.index(end[0])])\n    ci=sorted([cols.index(start[1]),cols.index(end[1])])\n    rr=[r for r in rows[ri[0]:ri[1]] if r not in hidden_rows]\n    cc=[c for c in cols[ci[0]:ci[1]+1] if c not in hidden_cols]\n    cells=[(r,c) for r in rr for c in cc]\n    return {'cells':cells,'editable':[x for x in cells if x not in locked],'top':[(rr[0],c) for c in cc] if rr else [],'bottom':[(rr[-1],c) for c in cc] if rr else [],'left':[(r,cc[0]) for r in rr] if cc else [],'right':[(r,cc[-1]) for r in rr] if cc else [],'rows':rr,'cols':cc}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(1),'b'], ['x','y'], ('a'+str(1),'x'), ('a'+str(1),'x'), [], [], []), {'cells': [('a1', 'x')], 'editable': [('a1', 'x')], 'top': [('a1', 'x')], 'bottom': [('a1', 'x')], 'left': [('a1', 'x')], 'right': [('a1', 'x')], 'rows': ['a1'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 2:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(2),'b'], ['x','y'], ('a'+str(2),'x'), ('a'+str(2),'x'), [], [], []), {'cells': [('a2', 'x')], 'editable': [('a2', 'x')], 'top': [('a2', 'x')], 'bottom': [('a2', 'x')], 'left': [('a2', 'x')], 'right': [('a2', 'x')], 'rows': ['a2'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 3:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(3),'b'], ['x','y'], ('a'+str(3),'x'), ('a'+str(3),'x'), [], [], []), {'cells': [('a3', 'x')], 'editable': [('a3', 'x')], 'top': [('a3', 'x')], 'bottom': [('a3', 'x')], 'left': [('a3', 'x')], 'right': [('a3', 'x')], 'rows': ['a3'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 4:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(4),'b'], ['x','y'], ('a'+str(4),'x'), ('a'+str(4),'x'), [], [], []), {'cells': [('a4', 'x')], 'editable': [('a4', 'x')], 'top': [('a4', 'x')], 'bottom': [('a4', 'x')], 'left': [('a4', 'x')], 'right': [('a4', 'x')], 'rows': ['a4'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 5:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(5),'b'], ['x','y'], ('a'+str(5),'x'), ('a'+str(5),'x'), [], [], []), {'cells': [('a5', 'x')], 'editable': [('a5', 'x')], 'top': [('a5', 'x')], 'bottom': [('a5', 'x')], 'left': [('a5', 'x')], 'right': [('a5', 'x')], 'rows': ['a5'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\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":"e07afc2b6d8fbf2b17391c8fe70a86b7c99a886c12290e02e12055168b347691","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(rows, cols, start, end, hidden_rows, hidden_cols, locked):\n    ri=sorted([rows.index(start[0]),rows.index(end[0])])\n    ci=sorted([cols.index(start[1]),cols.index(end[1])])\n    rr=[r for r in rows[ri[0]:ri[1]+1] if r not in hidden_rows]\n    cc=[c for c in cols[ci[0]:ci[1]+1] if c not in hidden_cols]\n    cells=[(r,c) for r in rr for c in cc]\n    return {'cells':cells,'editable':[x for x in cells if x not in locked],'top':[(rr[0],c) for c in cc] if rr else [],'bottom':[(rr[-1],c) for c in cc] if rr else [],'left':[(r,cc[0]) for r in rr] if cc else [],'right':[(r,cc[-1]) for r in rr] if cc else [],'rows':rr,'cols':cc}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nif N == 1:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(1),'b'], ['x','y'], ('a'+str(1),'x'), ('a'+str(1),'x'), [], [], []), {'cells': [('a1', 'x')], 'editable': [('a1', 'x')], 'top': [('a1', 'x')], 'bottom': [('a1', 'x')], 'left': [('a1', 'x')], 'right': [('a1', 'x')], 'rows': ['a1'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 2:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(2),'b'], ['x','y'], ('a'+str(2),'x'), ('a'+str(2),'x'), [], [], []), {'cells': [('a2', 'x')], 'editable': [('a2', 'x')], 'top': [('a2', 'x')], 'bottom': [('a2', 'x')], 'left': [('a2', 'x')], 'right': [('a2', 'x')], 'rows': ['a2'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 3:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(3),'b'], ['x','y'], ('a'+str(3),'x'), ('a'+str(3),'x'), [], [], []), {'cells': [('a3', 'x')], 'editable': [('a3', 'x')], 'top': [('a3', 'x')], 'bottom': [('a3', 'x')], 'left': [('a3', 'x')], 'right': [('a3', 'x')], 'rows': ['a3'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 4:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(4),'b'], ['x','y'], ('a'+str(4),'x'), ('a'+str(4),'x'), [], [], []), {'cells': [('a4', 'x')], 'editable': [('a4', 'x')], 'top': [('a4', 'x')], 'bottom': [('a4', 'x')], 'left': [('a4', 'x')], 'right': [('a4', 'x')], 'rows': ['a4'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\nif N == 5:\n    check('forward rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('c','z'), [], [], [('b','y')]), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('reverse rectangle', solve(['a','b','c','d'], ['x','y','z','w'], ('c','z'), ('a','x'), [], [], []), {'cells': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'editable': [('a', 'x'), ('a', 'y'), ('a', 'z'), ('b', 'x'), ('b', 'y'), ('b', 'z'), ('c', 'x'), ('c', 'y'), ('c', 'z')], 'top': [('a', 'x'), ('a', 'y'), ('a', 'z')], 'bottom': [('c', 'x'), ('c', 'y'), ('c', 'z')], 'left': [('a', 'x'), ('b', 'x'), ('c', 'x')], 'right': [('a', 'z'), ('b', 'z'), ('c', 'z')], 'rows': ['a', 'b', 'c'], 'cols': ['x', 'y', 'z']})\n    check('hidden edges', solve(['a','b','c','d'], ['x','y','z','w'], ('a','x'), ('d','w'), ['a','d'], ['x','w'], []), {'cells': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'editable': [('b', 'y'), ('b', 'z'), ('c', 'y'), ('c', 'z')], 'top': [('b', 'y'), ('b', 'z')], 'bottom': [('c', 'y'), ('c', 'z')], 'left': [('b', 'y'), ('c', 'y')], 'right': [('b', 'z'), ('c', 'z')], 'rows': ['b', 'c'], 'cols': ['y', 'z']})\n    check('singleton', solve(['a'+str(5),'b'], ['x','y'], ('a'+str(5),'x'), ('a'+str(5),'x'), [], [], []), {'cells': [('a5', 'x')], 'editable': [('a5', 'x')], 'top': [('a5', 'x')], 'bottom': [('a5', 'x')], 'left': [('a5', 'x')], 'right': [('a5', 'x')], 'rows': ['a5'], 'cols': ['x']})\n    check('hidden complete', solve(['a','b'], ['x','y'], ('a','x'), ('b','y'), ['a','b'], ['x','y'], []), {'cells': [], 'editable': [], 'top': [], 'bottom': [], 'left': [], 'right': [], 'rows': [], 'cols': []})\n    check('mixed reversed axes', solve(['a','b','c'], ['x','y','z'], ('a','z'), ('b','y'), [], [], []), {'cells': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'editable': [('a', 'y'), ('a', 'z'), ('b', 'y'), ('b', 'z')], 'top': [('a', 'y'), ('a', 'z')], 'bottom': [('b', 'y'), ('b', 'z')], 'left': [('a', 'y'), ('b', 'y')], 'right': [('a', 'z'), ('b', 'z')], 'rows': ['a', 'b'], 'cols': ['y', 'z']})\n\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":"Both endpoints exist in unique source axes; lock entries are row-column pairs. Deterministic offline table UI model; no browser, DOM, framework, or standards conformance is claimed. 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":"s3-table-interactions-cell-rectangle-inclusive-row-end","generated_at":"2026-09-29T14:42:57.917473+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"An offline table UI model isolates table rectangular selection projection, including adversarial row/column relationships.","repair":"Apply the complete inclusive row end rule: ri[1]+1.","root_cause":"The inclusive row end decision uses 'ri[1]' instead of 'ri[1]+1'.","sha256":"0bcbb8e157b6eafdba46e40b47434061b3cbebad0f420ba8eb95424c3addca2a","title":"Table rectangular selection projection: inclusive row end · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":45.576,"exit_code":1,"observations":[{"actual":{"bottom":[["d","x"],["d","y"],["d","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"],["d","x"],["d","y"],["d","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","z"],["c","x"],["c","y"],["c","z"],["d","x"],["d","y"],["d","z"]],"left":[["a","x"],["b","x"],["c","x"],["d","x"]],"right":[["a","z"],["b","z"],["c","z"],["d","z"]],"rows":["a","b","c","d"],"top":[["a","x"],["a","y"],["a","z"]]},"check":"forward rectangle","expected":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"passed":false},{"actual":{"bottom":[["d","x"],["d","y"],["d","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"],["d","x"],["d","y"],["d","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"],["d","x"],["d","y"],["d","z"]],"left":[["a","x"],["b","x"],["c","x"],["d","x"]],"right":[["a","z"],["b","z"],["c","z"],["d","z"]],"rows":["a","b","c","d"],"top":[["a","x"],["a","y"],["a","z"]]},"check":"reverse rectangle","expected":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"passed":false},{"actual":{"bottom":[["c","y"],["c","z"]],"cells":[["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["b","y"],["c","y"]],"right":[["b","z"],["c","z"]],"rows":["b","c"],"top":[["b","y"],["b","z"]]},"check":"hidden edges","expected":{"bottom":[["c","y"],["c","z"]],"cells":[["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["b","y"],["c","y"]],"right":[["b","z"],["c","z"]],"rows":["b","c"],"top":[["b","y"],["b","z"]]},"passed":true},{"actual":{"bottom":[["b","x"]],"cells":[["a1","x"],["b","x"]],"cols":["x"],"editable":[["a1","x"],["b","x"]],"left":[["a1","x"],["b","x"]],"right":[["a1","x"],["b","x"]],"rows":["a1","b"],"top":[["a1","x"]]},"check":"singleton","expected":{"bottom":[["a1","x"]],"cells":[["a1","x"]],"cols":["x"],"editable":[["a1","x"]],"left":[["a1","x"]],"right":[["a1","x"]],"rows":["a1"],"top":[["a1","x"]]},"passed":false},{"actual":{"bottom":[],"cells":[],"cols":[],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"check":"hidden complete","expected":{"bottom":[],"cells":[],"cols":[],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"passed":true},{"actual":{"bottom":[["c","y"],["c","z"]],"cells":[["a","y"],["a","z"],["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["a","y"],["a","z"],["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["a","y"],["b","y"],["c","y"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","y"],["a","z"]]},"check":"mixed reversed axes","expected":{"bottom":[["b","y"],["b","z"]],"cells":[["a","y"],["a","z"],["b","y"],["b","z"]],"cols":["y","z"],"editable":[["a","y"],["a","z"],["b","y"],["b","z"]],"left":[["a","y"],["b","y"]],"right":[["a","z"],["b","z"]],"rows":["a","b"],"top":[["a","y"],["a","z"]]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"forward rectangle\", \"actual\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"], [\"d\", \"x\"], [\"d\", \"y\"], [\"d\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"], [\"d\", \"x\"], [\"d\", \"y\"], [\"d\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"d\", \"x\"], [\"d\", \"y\"], [\"d\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"], [\"d\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"], [\"d\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\", \"d\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"passed\": false}, {\"check\": \"reverse rectangle\", \"actual\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"], [\"d\", \"x\"], [\"d\", \"y\"], [\"d\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"], [\"d\", \"x\"], [\"d\", \"y\"], [\"d\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"d\", \"x\"], [\"d\", \"y\"], [\"d\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"], [\"d\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"], [\"d\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\", \"d\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"passed\": false}, {\"check\": \"hidden edges\", \"actual\": {\"cells\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"expected\": {\"cells\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"passed\": true}, {\"check\": \"singleton\", \"actual\": {\"cells\": [[\"a1\", \"x\"], [\"b\", \"x\"]], \"editable\": [[\"a1\", \"x\"], [\"b\", \"x\"]], \"top\": [[\"a1\", \"x\"]], \"bottom\": [[\"b\", \"x\"]], \"left\": [[\"a1\", \"x\"], [\"b\", \"x\"]], \"right\": [[\"a1\", \"x\"], [\"b\", \"x\"]], \"rows\": [\"a1\", \"b\"], \"cols\": [\"x\"]}, \"expected\": {\"cells\": [[\"a1\", \"x\"]], \"editable\": [[\"a1\", \"x\"]], \"top\": [[\"a1\", \"x\"]], \"bottom\": [[\"a1\", \"x\"]], \"left\": [[\"a1\", \"x\"]], \"right\": [[\"a1\", \"x\"]], \"rows\": [\"a1\"], \"cols\": [\"x\"]}, \"passed\": false}, {\"check\": \"hidden complete\", \"actual\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": []}, \"expected\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": []}, \"passed\": true}, {\"check\": \"mixed reversed axes\", \"actual\": {\"cells\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"y\"], [\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"editable\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"top\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"left\": [[\"a\", \"y\"], [\"b\", \"y\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"]], \"rows\": [\"a\", \"b\"], \"cols\": [\"y\", \"z\"]}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":45.073,"exit_code":1,"observations":[{"actual":{"bottom":[["b","x"],["b","y"],["b","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","z"]],"left":[["a","x"],["b","x"]],"right":[["a","z"],["b","z"]],"rows":["a","b"],"top":[["a","x"],["a","y"],["a","z"]]},"check":"forward rectangle","expected":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"passed":false},{"actual":{"bottom":[["b","x"],["b","y"],["b","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"]],"left":[["a","x"],["b","x"]],"right":[["a","z"],["b","z"]],"rows":["a","b"],"top":[["a","x"],["a","y"],["a","z"]]},"check":"reverse rectangle","expected":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"passed":false},{"actual":{"bottom":[["c","y"],["c","z"]],"cells":[["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["b","y"],["c","y"]],"right":[["b","z"],["c","z"]],"rows":["b","c"],"top":[["b","y"],["b","z"]]},"check":"hidden edges","expected":{"bottom":[["c","y"],["c","z"]],"cells":[["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["b","y"],["c","y"]],"right":[["b","z"],["c","z"]],"rows":["b","c"],"top":[["b","y"],["b","z"]]},"passed":true},{"actual":{"bottom":[],"cells":[],"cols":["x"],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"check":"singleton","expected":{"bottom":[["a1","x"]],"cells":[["a1","x"]],"cols":["x"],"editable":[["a1","x"]],"left":[["a1","x"]],"right":[["a1","x"]],"rows":["a1"],"top":[["a1","x"]]},"passed":false},{"actual":{"bottom":[],"cells":[],"cols":[],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"check":"hidden complete","expected":{"bottom":[],"cells":[],"cols":[],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"passed":true},{"actual":{"bottom":[["a","y"],["a","z"]],"cells":[["a","y"],["a","z"]],"cols":["y","z"],"editable":[["a","y"],["a","z"]],"left":[["a","y"]],"right":[["a","z"]],"rows":["a"],"top":[["a","y"],["a","z"]]},"check":"mixed reversed axes","expected":{"bottom":[["b","y"],["b","z"]],"cells":[["a","y"],["a","z"],["b","y"],["b","z"]],"cols":["y","z"],"editable":[["a","y"],["a","z"],["b","y"],["b","z"]],"left":[["a","y"],["b","y"]],"right":[["a","z"],["b","z"]],"rows":["a","b"],"top":[["a","y"],["a","z"]]},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"forward rectangle\", \"actual\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"]], \"rows\": [\"a\", \"b\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"passed\": false}, {\"check\": \"reverse rectangle\", \"actual\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"]], \"rows\": [\"a\", \"b\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"passed\": false}, {\"check\": \"hidden edges\", \"actual\": {\"cells\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"expected\": {\"cells\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"passed\": true}, {\"check\": \"singleton\", \"actual\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": [\"x\"]}, \"expected\": {\"cells\": [[\"a1\", \"x\"]], \"editable\": [[\"a1\", \"x\"]], \"top\": [[\"a1\", \"x\"]], \"bottom\": [[\"a1\", \"x\"]], \"left\": [[\"a1\", \"x\"]], \"right\": [[\"a1\", \"x\"]], \"rows\": [\"a1\"], \"cols\": [\"x\"]}, \"passed\": false}, {\"check\": \"hidden complete\", \"actual\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": []}, \"expected\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": []}, \"passed\": true}, {\"check\": \"mixed reversed axes\", \"actual\": {\"cells\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"editable\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"top\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"left\": [[\"a\", \"y\"]], \"right\": [[\"a\", \"z\"]], \"rows\": [\"a\"], \"cols\": [\"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"editable\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"top\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"left\": [[\"a\", \"y\"], [\"b\", \"y\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"]], \"rows\": [\"a\", \"b\"], \"cols\": [\"y\", \"z\"]}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":46.168,"exit_code":0,"observations":[{"actual":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"check":"forward rectangle","expected":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"passed":true},{"actual":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"check":"reverse rectangle","expected":{"bottom":[["c","x"],["c","y"],["c","z"]],"cells":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"cols":["x","y","z"],"editable":[["a","x"],["a","y"],["a","z"],["b","x"],["b","y"],["b","z"],["c","x"],["c","y"],["c","z"]],"left":[["a","x"],["b","x"],["c","x"]],"right":[["a","z"],["b","z"],["c","z"]],"rows":["a","b","c"],"top":[["a","x"],["a","y"],["a","z"]]},"passed":true},{"actual":{"bottom":[["c","y"],["c","z"]],"cells":[["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["b","y"],["c","y"]],"right":[["b","z"],["c","z"]],"rows":["b","c"],"top":[["b","y"],["b","z"]]},"check":"hidden edges","expected":{"bottom":[["c","y"],["c","z"]],"cells":[["b","y"],["b","z"],["c","y"],["c","z"]],"cols":["y","z"],"editable":[["b","y"],["b","z"],["c","y"],["c","z"]],"left":[["b","y"],["c","y"]],"right":[["b","z"],["c","z"]],"rows":["b","c"],"top":[["b","y"],["b","z"]]},"passed":true},{"actual":{"bottom":[["a1","x"]],"cells":[["a1","x"]],"cols":["x"],"editable":[["a1","x"]],"left":[["a1","x"]],"right":[["a1","x"]],"rows":["a1"],"top":[["a1","x"]]},"check":"singleton","expected":{"bottom":[["a1","x"]],"cells":[["a1","x"]],"cols":["x"],"editable":[["a1","x"]],"left":[["a1","x"]],"right":[["a1","x"]],"rows":["a1"],"top":[["a1","x"]]},"passed":true},{"actual":{"bottom":[],"cells":[],"cols":[],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"check":"hidden complete","expected":{"bottom":[],"cells":[],"cols":[],"editable":[],"left":[],"right":[],"rows":[],"top":[]},"passed":true},{"actual":{"bottom":[["b","y"],["b","z"]],"cells":[["a","y"],["a","z"],["b","y"],["b","z"]],"cols":["y","z"],"editable":[["a","y"],["a","z"],["b","y"],["b","z"]],"left":[["a","y"],["b","y"]],"right":[["a","z"],["b","z"]],"rows":["a","b"],"top":[["a","y"],["a","z"]]},"check":"mixed reversed axes","expected":{"bottom":[["b","y"],["b","z"]],"cells":[["a","y"],["a","z"],["b","y"],["b","z"]],"cols":["y","z"],"editable":[["a","y"],["a","z"],["b","y"],["b","z"]],"left":[["a","y"],["b","y"]],"right":[["a","z"],["b","z"]],"rows":["a","b"],"top":[["a","y"],["a","z"]]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"forward rectangle\", \"actual\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"passed\": true}, {\"check\": \"reverse rectangle\", \"actual\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"x\"], [\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"a\", \"x\"], [\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"c\", \"x\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"a\", \"x\"], [\"b\", \"x\"], [\"c\", \"x\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"a\", \"b\", \"c\"], \"cols\": [\"x\", \"y\", \"z\"]}, \"passed\": true}, {\"check\": \"hidden edges\", \"actual\": {\"cells\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"expected\": {\"cells\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"editable\": [[\"b\", \"y\"], [\"b\", \"z\"], [\"c\", \"y\"], [\"c\", \"z\"]], \"top\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"bottom\": [[\"c\", \"y\"], [\"c\", \"z\"]], \"left\": [[\"b\", \"y\"], [\"c\", \"y\"]], \"right\": [[\"b\", \"z\"], [\"c\", \"z\"]], \"rows\": [\"b\", \"c\"], \"cols\": [\"y\", \"z\"]}, \"passed\": true}, {\"check\": \"singleton\", \"actual\": {\"cells\": [[\"a1\", \"x\"]], \"editable\": [[\"a1\", \"x\"]], \"top\": [[\"a1\", \"x\"]], \"bottom\": [[\"a1\", \"x\"]], \"left\": [[\"a1\", \"x\"]], \"right\": [[\"a1\", \"x\"]], \"rows\": [\"a1\"], \"cols\": [\"x\"]}, \"expected\": {\"cells\": [[\"a1\", \"x\"]], \"editable\": [[\"a1\", \"x\"]], \"top\": [[\"a1\", \"x\"]], \"bottom\": [[\"a1\", \"x\"]], \"left\": [[\"a1\", \"x\"]], \"right\": [[\"a1\", \"x\"]], \"rows\": [\"a1\"], \"cols\": [\"x\"]}, \"passed\": true}, {\"check\": \"hidden complete\", \"actual\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": []}, \"expected\": {\"cells\": [], \"editable\": [], \"top\": [], \"bottom\": [], \"left\": [], \"right\": [], \"rows\": [], \"cols\": []}, \"passed\": true}, {\"check\": \"mixed reversed axes\", \"actual\": {\"cells\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"editable\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"top\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"left\": [[\"a\", \"y\"], [\"b\", \"y\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"]], \"rows\": [\"a\", \"b\"], \"cols\": [\"y\", \"z\"]}, \"expected\": {\"cells\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"editable\": [[\"a\", \"y\"], [\"a\", \"z\"], [\"b\", \"y\"], [\"b\", \"z\"]], \"top\": [[\"a\", \"y\"], [\"a\", \"z\"]], \"bottom\": [[\"b\", \"y\"], [\"b\", \"z\"]], \"left\": [[\"a\", \"y\"], [\"b\", \"y\"]], \"right\": [[\"a\", \"z\"], [\"b\", \"z\"]], \"rows\": [\"a\", \"b\"], \"cols\": [\"y\", \"z\"]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}