FA-80596 / Bidirectional text layout / Open access
Bracket pair identification: stack search direction · case 01
A closer pairs with the outermost matching opener.
ROOT CAUSE
The stack is searched from the bottom.
VERIFIED REPAIR
Search from the top of the stack.
Unsuccessful approach: Stopping before the bottom entry misses outer matches.
Case contract
Input [text, classes, stack limit]. Only characters of class ON take part. Openers ( [ { are pushed; on overflow of the stack limit stop and keep pairs found so far. A closer searches the stack from the top for its opener; if found it pairs and discards that entry and everything above; otherwise it is ignored. Return pairs sorted by opener.
Why this case matters
Mixed right-to-left and left-to-right text must resolve levels and visual order exactly, or words, numbers and carets land in the wrong place.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
text, classes, limit = x
OPEN = {'(': ')', '[': ']', '{': '}'}
CLOSE = {')', ']', '}'}
stack = []
pairs = []
for i, ch in enumerate(text):
if classes[i] != 'ON':
continue
if ch in OPEN:
if len(stack) >= limit:
break
stack.append((OPEN[ch], i))
elif ch in CLOSE:
for k in range(len(stack)):
if stack[k][0] == ch:
pairs.append([stack[k][1], i])
del stack[k:]
break
return sorted(pairs)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: stack search direction', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('partial-repair probe', ['a)))]a([){a{a[', ['L', 'L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON'], 4], [[6, 8]]), ('partial-repair probe', ['{(])([[', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [[1, 3]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['})({[a]}]}[([', ['R', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], 2], [[3, 7]])], [('regression: stack search direction', ['a((a](]())(]', ['R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[5, 9], [7, 8]]), ('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('partial-repair probe', ['((]]){][([[(', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R'], 1], [[0, 4]]), ('partial-repair probe', ['(){', ['ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [']]a}}a(}(((', ['ON', 'ON', 'L', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'R', 'ON'], 1], []), ('control layout', ['{aa])(', ['L', 'R', 'L', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack search direction', ['(a{{a}(([', ['ON', 'L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON'], 3], [[3, 5]]), ('regression: stack search direction', ['()a}]{{)}{({(', ['R', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'L'], 3], [[6, 8]]), ('partial-repair probe', ['a()(})a({(]}', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON', 'ON'], 1], [[1, 2], [3, 5]]), ('regression: stack search direction', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['][}({}(', ['ON', 'L', 'R', 'ON', 'L', 'ON', 'ON'], 2], []), ('control layout', ['[)aa]}{{', ['ON', 'ON', 'L', 'L', 'R', 'L', 'ON', 'ON'], 4], [])], [('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('regression: stack search direction', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('partial-repair probe', ['aa[a]aa)()[', ['R', 'R', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[2, 4], [8, 9]]), ('partial-repair probe', ['()([)]{a[([[', ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['a]}}]a[a((a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 2], [])], [('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('regression: stack search direction', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: stack search direction', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('partial-repair probe', ['(a}[aaa[({){', ['ON', 'L', 'ON', 'L', 'L', 'L', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 3], [[0, 10]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['((', ['ON', 'R'], 3], []), ('control layout', ['][(][})[', ['ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON'], 2], [])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: stack search direction | [[0, 4]] | [[0, 7], [2, 4]] | Failed |
| regression: stack search direction | [[4, 9]] | [[4, 13], [5, 10], [6, 9]] | Failed |
| partial-repair probe | [[6, 8]] | [[6, 8]] | Passed |
| partial-repair probe | [[1, 3]] | [[1, 3]] | Passed |
| mismatched inner bracket | [[0, 2]] | [[0, 2]] | Passed |
| overridden bracket ignored | [] | [] | Passed |
| control layout | [] | [] | Passed |
| control layout | [[3, 7]] | [[3, 7]] | Passed |
SHA-256 / b5f35bc0cab5beda32bf7d14a3af3e25d0919ccbd761e01785925b5c88d3ecf3
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
text, classes, limit = x
OPEN = {'(': ')', '[': ']', '{': '}'}
CLOSE = {')', ']', '}'}
stack = []
pairs = []
for i, ch in enumerate(text):
if classes[i] != 'ON':
continue
if ch in OPEN:
if len(stack) >= limit:
break
stack.append((OPEN[ch], i))
elif ch in CLOSE:
for k in range(len(stack) - 1, 0, -1):
if stack[k][0] == ch:
pairs.append([stack[k][1], i])
del stack[k:]
break
return sorted(pairs)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: stack search direction', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('partial-repair probe', ['a)))]a([){a{a[', ['L', 'L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON'], 4], [[6, 8]]), ('partial-repair probe', ['{(])([[', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [[1, 3]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['})({[a]}]}[([', ['R', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], 2], [[3, 7]])], [('regression: stack search direction', ['a((a](]())(]', ['R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[5, 9], [7, 8]]), ('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('partial-repair probe', ['((]]){][([[(', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R'], 1], [[0, 4]]), ('partial-repair probe', ['(){', ['ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [']]a}}a(}(((', ['ON', 'ON', 'L', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'R', 'ON'], 1], []), ('control layout', ['{aa])(', ['L', 'R', 'L', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack search direction', ['(a{{a}(([', ['ON', 'L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON'], 3], [[3, 5]]), ('regression: stack search direction', ['()a}]{{)}{({(', ['R', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'L'], 3], [[6, 8]]), ('partial-repair probe', ['a()(})a({(]}', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON', 'ON'], 1], [[1, 2], [3, 5]]), ('regression: stack search direction', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['][}({}(', ['ON', 'L', 'R', 'ON', 'L', 'ON', 'ON'], 2], []), ('control layout', ['[)aa]}{{', ['ON', 'ON', 'L', 'L', 'R', 'L', 'ON', 'ON'], 4], [])], [('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('regression: stack search direction', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('partial-repair probe', ['aa[a]aa)()[', ['R', 'R', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[2, 4], [8, 9]]), ('partial-repair probe', ['()([)]{a[([[', ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['a]}}]a[a((a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 2], [])], [('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('regression: stack search direction', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: stack search direction', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('partial-repair probe', ['(a}[aaa[({){', ['ON', 'L', 'ON', 'L', 'L', 'L', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 3], [[0, 10]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['((', ['ON', 'R'], 3], []), ('control layout', ['][(][})[', ['ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON'], 2], [])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: stack search direction | [[2, 4]] | [[0, 7], [2, 4]] | Failed |
| regression: stack search direction | [[5, 10], [6, 9]] | [[4, 13], [5, 10], [6, 9]] | Failed |
| partial-repair probe | [] | [[6, 8]] | Failed |
| partial-repair probe | [] | [[1, 3]] | Failed |
| mismatched inner bracket | [[1, 3]] | [[0, 2]] | Failed |
| overridden bracket ignored | [] | [] | Passed |
| control layout | [] | [] | Passed |
| control layout | [[3, 7]] | [[3, 7]] | Passed |
SHA-256 / 89d8fde629e4e19d51b9b24e1667c7700de1458d886b15698a2bc0a214ffae20
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
text, classes, limit = x
OPEN = {'(': ')', '[': ']', '{': '}'}
CLOSE = {')', ']', '}'}
stack = []
pairs = []
for i, ch in enumerate(text):
if classes[i] != 'ON':
continue
if ch in OPEN:
if len(stack) >= limit:
break
stack.append((OPEN[ch], i))
elif ch in CLOSE:
for k in range(len(stack) - 1, -1, -1):
if stack[k][0] == ch:
pairs.append([stack[k][1], i])
del stack[k:]
break
return sorted(pairs)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: stack search direction', ['{[{)}((}(((', ['ON', 'ON', 'ON', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 7], [2, 4]]), ('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('partial-repair probe', ['a)))]a([){a{a[', ['L', 'L', 'ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'R', 'R', 'ON', 'R', 'ON'], 4], [[6, 8]]), ('partial-repair probe', ['{(])([[', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L'], 2], [[1, 3]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['})({[a]}]}[([', ['R', 'R', 'ON', 'ON', 'L', 'R', 'ON', 'ON', 'L', 'ON', 'ON', 'R', 'ON'], 2], [[3, 7]])], [('regression: stack search direction', ['a((a](]())(]', ['R', 'ON', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[5, 9], [7, 8]]), ('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('partial-repair probe', ['((]]){][([[(', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'R'], 1], [[0, 4]]), ('partial-repair probe', ['(){', ['ON', 'ON', 'ON'], 4], [[0, 1]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('control layout', [']]a}}a(}(((', ['ON', 'ON', 'L', 'L', 'ON', 'L', 'L', 'ON', 'ON', 'R', 'ON'], 1], []), ('control layout', ['{aa])(', ['L', 'R', 'L', 'ON', 'ON', 'ON'], 2], [])], [('regression: stack search direction', ['(a{{a}(([', ['ON', 'L', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON'], 3], [[3, 5]]), ('regression: stack search direction', ['()a}]{{)}{({(', ['R', 'L', 'R', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'L'], 3], [[6, 8]]), ('partial-repair probe', ['a()(})a({(]}', ['L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON', 'ON'], 1], [[1, 2], [3, 5]]), ('regression: stack search direction', ['))]{{])a{})}a)', ['ON', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'ON', 'ON', 'R', 'ON'], 2], [[4, 11], [8, 9]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['][}({}(', ['ON', 'L', 'R', 'ON', 'L', 'ON', 'ON'], 2], []), ('control layout', ['[)aa]}{{', ['ON', 'ON', 'L', 'L', 'R', 'L', 'ON', 'ON'], 4], [])], [('regression: stack search direction', ['{[a){([a(][{((', ['L', 'ON', 'R', 'R', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[6, 9]]), ('regression: stack search direction', ['{a([a)([()][)]', ['L', 'R', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 5], [6, 12], [7, 10], [8, 9]]), ('partial-repair probe', ['aa[a]aa)()[', ['R', 'R', 'ON', 'L', 'ON', 'R', 'R', 'ON', 'ON', 'ON', 'ON'], 1], [[2, 4], [8, 9]]), ('partial-repair probe', ['()([)]{a[([[', ['ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'R', 'ON', 'ON', 'ON', 'ON'], 4], [[0, 1]]), ('overridden bracket ignored', ['(a)', ['R', 'L', 'ON'], 4], []), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('control layout', [')a(', ['ON', 'R', 'ON'], 3], []), ('control layout', ['a]}}]a[a((a', ['R', 'ON', 'R', 'ON', 'ON', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 2], [])], [('regression: stack search direction', [')}})((([a))}{)', ['ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'ON', 'ON', 'L', 'ON', 'ON'], 4], [[4, 13], [5, 10], [6, 9]]), ('regression: stack search direction', ['}[(]]([aa()(}]', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'ON', 'ON', 'ON', 'ON', 'ON'], 3], [[1, 3], [6, 13], [9, 10]]), ('regression: stack search direction', [')]{(()}[[', ['R', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 4], [[2, 6], [4, 5]]), ('partial-repair probe', ['(a}[aaa[({){', ['ON', 'L', 'ON', 'L', 'L', 'L', 'L', 'ON', 'R', 'ON', 'ON', 'R'], 3], [[0, 10]]), ('mismatched inner bracket', ['([)]', ['ON', 'ON', 'ON', 'ON'], 4], [[0, 2]]), ('stack overflow stops', ['((()))', ['ON', 'ON', 'ON', 'ON', 'ON', 'ON'], 2], []), ('control layout', ['((', ['ON', 'R'], 3], []), ('control layout', ['][(][})[', ['ON', 'ON', 'ON', 'L', 'ON', 'L', 'ON', 'ON'], 2], [])]]
for label, args, expected in fixtures[N - 1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: stack search direction | [[0, 7], [2, 4]] | [[0, 7], [2, 4]] | Passed |
| regression: stack search direction | [[4, 13], [5, 10], [6, 9]] | [[4, 13], [5, 10], [6, 9]] | Passed |
| partial-repair probe | [[6, 8]] | [[6, 8]] | Passed |
| partial-repair probe | [[1, 3]] | [[1, 3]] | Passed |
| mismatched inner bracket | [[0, 2]] | [[0, 2]] | Passed |
| overridden bracket ignored | [] | [] | Passed |
| control layout | [] | [] | Passed |
| control layout | [[3, 7]] | [[3, 7]] | Passed |
SHA-256 / 8ddd0d9b03d426d96f94ba17e36ecafdc75df7d2a413d799d56af194854572ce
Verification & scope
A deterministic toy bidi model over stipulated class labels and integer levels; it is inspired by, but does not claim conformance to, any published algorithm. 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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:49:55.469593+00:00.
Case digest / 166284c56150775e54ce2b27dc34182d49a3b3384feca2039594d2bd8f94f525