FA-80456 / Bidirectional text layout / Open access
Implicit level runs: level parity test · case 01
Deep even embeddings are treated like odd ones.
ROOT CAUSE
Only level 0 is considered even.
VERIFIED REPAIR
Test level parity with modulo two.
Unsuccessful approach: Treating levels below two as even misclassifies level 1.
Case contract
Input [resolved classes L/R/EN/AN, embedding levels]. At even levels R goes up one and AN/EN up two; at odd levels L, EN and AN go up one. Return level runs [start, end exclusive, level] of equal final levels.
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):
types, levels = x
out = []
for c, lv in zip(types, levels):
if lv == 0:
if c == 'R':
out.append(lv + 1)
elif c in ('AN', 'EN'):
out.append(lv + 2)
else:
out.append(lv)
else:
if c in ('L', 'EN', 'AN'):
out.append(lv + 1)
else:
out.append(lv)
runs = []
for i, lv in enumerate(out):
if runs and runs[-1][2] == lv:
runs[-1][1] = i + 1
else:
runs.append([i, i + 1, lv])
return runs
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('level two embedding', [['R', 'L'], [2, 2]], [[0, 1, 3], [1, 2, 2]]), ('regression: level parity test', [['AN', 'EN', 'L', 'R', 'L', 'L', 'AN', 'R', 'EN', 'EN', 'R', 'EN'], [3, 3, 3, 1, 1, 2, 2, 1, 1, 2, 2, 3]], [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]]), ('regression: level parity test', [['EN', 'EN', 'L', 'R', 'AN', 'EN', 'R', 'R', 'AN'], [2, 2, 2, 2, 2, 3, 3, 3, 1]], [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]]), ('partial-repair probe', [['AN', 'AN', 'R', 'L', 'AN', 'L', 'EN', 'R'], [1, 3, 3, 3, 3, 1, 1, 1]], [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('control layout', [['EN', 'R', 'R', 'EN', 'L', 'AN'], [0, 0, 0, 0, 0, 0]], [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]]), ('control layout', [['AN', 'AN', 'R', 'AN'], [0, 0, 0, 0]], [[0, 2, 2], [2, 3, 1], [3, 4, 2]])], [('regression: level parity test', [['EN', 'AN', 'AN', 'L', 'AN', 'EN', 'R'], [4, 2, 4, 4, 4, 2, 2]], [[0, 1, 6], [1, 2, 4], [2, 3, 6], [3, 4, 4], [4, 5, 6], [5, 6, 4], [6, 7, 3]]), ('regression: level parity test', [['R', 'L', 'R', 'EN', 'L', 'L', 'AN', 'L'], [2, 2, 1, 1, 0, 0, 0, 0]], [[0, 1, 3], [1, 2, 2], [2, 3, 1], [3, 4, 2], [4, 6, 0], [6, 7, 2], [7, 8, 0]]), ('regression: level parity test', [['R', 'AN', 'EN', 'AN'], [2, 2, 2, 2]], [[0, 1, 3], [1, 4, 4]]), ('regression: level parity test', [['L'], [2]], [[0, 1, 2]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('control layout', [['AN', 'AN', 'AN', 'EN', 'AN', 'AN', 'R', 'EN'], [3, 3, 3, 3, 0, 0, 0, 0]], [[0, 4, 4], [4, 6, 2], [6, 7, 1], [7, 8, 2]]), ('control layout', [['R'], [3]], [[0, 1, 3]])], [('regression: level parity test', [['L', 'EN', 'EN', 'EN', 'L', 'EN', 'L', 'R'], [2, 2, 2, 3, 3, 3, 2, 1]], [[0, 1, 2], [1, 6, 4], [6, 7, 2], [7, 8, 1]]), ('regression: level parity test', [['EN', 'L', 'AN', 'L', 'EN', 'EN', 'L'], [1, 1, 1, 2, 2, 4, 4]], [[0, 4, 2], [4, 5, 4], [5, 6, 6], [6, 7, 4]]), ('regression: level parity test', [['L', 'EN', 'AN', 'R', 'R', 'AN', 'AN', 'AN', 'EN', 'L'], [4, 4, 3, 3, 2, 1, 1, 4, 2, 2]], [[0, 1, 4], [1, 2, 6], [2, 3, 4], [3, 5, 3], [5, 7, 2], [7, 8, 6], [8, 9, 4], [9, 10, 2]]), ('regression: level parity test', [['R', 'R'], [4, 4]], [[0, 2, 5]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('control layout', [['R', 'AN', 'L'], [3, 3, 3]], [[0, 1, 3], [1, 3, 4]]), ('control layout', [['L', 'R', 'AN', 'AN'], [3, 3, 3, 3]], [[0, 1, 4], [1, 2, 3], [2, 4, 4]])], [('regression: level parity test', [['AN', 'R', 'EN', 'R', 'EN', 'EN', 'AN', 'AN'], [2, 2, 2, 2, 2, 2, 2, 2]], [[0, 1, 4], [1, 2, 3], [2, 3, 4], [3, 4, 3], [4, 8, 4]]), ('regression: level parity test', [['R', 'EN', 'AN', 'L', 'AN', 'L', 'EN', 'R', 'L', 'R', 'R'], [3, 4, 4, 4, 4, 2, 2, 4, 4, 4, 2]], [[0, 1, 3], [1, 3, 6], [3, 4, 4], [4, 5, 6], [5, 6, 2], [6, 7, 4], [7, 8, 5], [8, 9, 4], [9, 10, 5], [10, 11, 3]]), ('regression: level parity test', [['R', 'AN'], [2, 2]], [[0, 1, 3], [1, 2, 4]]), ('regression: level parity test', [['L', 'L', 'EN', 'L', 'L', 'L', 'L', 'AN', 'EN'], [2, 2, 3, 3, 3, 2, 3, 3, 3]], [[0, 2, 2], [2, 5, 4], [5, 6, 2], [6, 9, 4]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('control layout', [['R'], [3]], [[0, 1, 3]]), ('control layout', [['R', 'EN'], [0, 0]], [[0, 1, 1], [1, 2, 2]])], [('regression: level parity test', [['AN', 'L', 'AN', 'AN', 'EN', 'L', 'EN', 'L', 'R'], [4, 4, 2, 2, 1, 1, 1, 2, 2]], [[0, 1, 6], [1, 4, 4], [4, 8, 2], [8, 9, 3]]), ('regression: level parity test', [['R', 'L', 'EN', 'L', 'AN', 'AN'], [2, 2, 2, 2, 2, 1]], [[0, 1, 3], [1, 2, 2], [2, 3, 4], [3, 4, 2], [4, 5, 4], [5, 6, 2]]), ('partial-repair probe', [['EN', 'L', 'AN', 'AN', 'EN', 'EN'], [1, 1, 1, 0, 0, 1]], [[0, 6, 2]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('level two embedding', [['R', 'L'], [2, 2]], [[0, 1, 3], [1, 2, 2]]), ('control layout', [['R', 'AN', 'L'], [3, 3, 3]], [[0, 1, 3], [1, 3, 4]]), ('control layout', [['L', 'AN', 'R', 'R', 'R', 'L', 'EN'], [0, 0, 3, 3, 3, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 5, 3], [5, 6, 0], [6, 7, 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 |
|---|---|---|---|
| level two embedding | [[0, 1, 2], [1, 2, 3]] | [[0, 1, 3], [1, 2, 2]] | Failed |
| regression: level parity test | [[0, 3, 4], [3, 4, 1], [4, 5, 2], [5, 7, 3], [7, 8, 1], [8, 9, 2], [9, 10, 3], [10, 11, 2], [11, 12, 4]] | [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]] | Failed |
| regression: level parity test | [[0, 3, 3], [3, 4, 2], [4, 5, 3], [5, 6, 4], [6, 8, 3], [8, 9, 2]] | [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]] | Failed |
| partial-repair probe | [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]] | [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]] | Passed |
| number in RTL text | [[0, 1, 1], [1, 2, 2], [2, 3, 1]] | [[0, 1, 1], [1, 2, 2], [2, 3, 1]] | Passed |
| number in LTR text | [[0, 1, 0], [1, 2, 2], [2, 3, 0]] | [[0, 1, 0], [1, 2, 2], [2, 3, 0]] | Passed |
| control layout | [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]] | [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]] | Passed |
| control layout | [[0, 2, 2], [2, 3, 1], [3, 4, 2]] | [[0, 2, 2], [2, 3, 1], [3, 4, 2]] | Passed |
SHA-256 / f3f4d5025f803103d7bdbcaa204a0f4a6137df6f7e58046b1608f08232fc9d4e
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
types, levels = x
out = []
for c, lv in zip(types, levels):
if lv < 2:
if c == 'R':
out.append(lv + 1)
elif c in ('AN', 'EN'):
out.append(lv + 2)
else:
out.append(lv)
else:
if c in ('L', 'EN', 'AN'):
out.append(lv + 1)
else:
out.append(lv)
runs = []
for i, lv in enumerate(out):
if runs and runs[-1][2] == lv:
runs[-1][1] = i + 1
else:
runs.append([i, i + 1, lv])
return runs
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('level two embedding', [['R', 'L'], [2, 2]], [[0, 1, 3], [1, 2, 2]]), ('regression: level parity test', [['AN', 'EN', 'L', 'R', 'L', 'L', 'AN', 'R', 'EN', 'EN', 'R', 'EN'], [3, 3, 3, 1, 1, 2, 2, 1, 1, 2, 2, 3]], [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]]), ('regression: level parity test', [['EN', 'EN', 'L', 'R', 'AN', 'EN', 'R', 'R', 'AN'], [2, 2, 2, 2, 2, 3, 3, 3, 1]], [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]]), ('partial-repair probe', [['AN', 'AN', 'R', 'L', 'AN', 'L', 'EN', 'R'], [1, 3, 3, 3, 3, 1, 1, 1]], [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('control layout', [['EN', 'R', 'R', 'EN', 'L', 'AN'], [0, 0, 0, 0, 0, 0]], [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]]), ('control layout', [['AN', 'AN', 'R', 'AN'], [0, 0, 0, 0]], [[0, 2, 2], [2, 3, 1], [3, 4, 2]])], [('regression: level parity test', [['EN', 'AN', 'AN', 'L', 'AN', 'EN', 'R'], [4, 2, 4, 4, 4, 2, 2]], [[0, 1, 6], [1, 2, 4], [2, 3, 6], [3, 4, 4], [4, 5, 6], [5, 6, 4], [6, 7, 3]]), ('regression: level parity test', [['R', 'L', 'R', 'EN', 'L', 'L', 'AN', 'L'], [2, 2, 1, 1, 0, 0, 0, 0]], [[0, 1, 3], [1, 2, 2], [2, 3, 1], [3, 4, 2], [4, 6, 0], [6, 7, 2], [7, 8, 0]]), ('regression: level parity test', [['R', 'AN', 'EN', 'AN'], [2, 2, 2, 2]], [[0, 1, 3], [1, 4, 4]]), ('regression: level parity test', [['L'], [2]], [[0, 1, 2]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('control layout', [['AN', 'AN', 'AN', 'EN', 'AN', 'AN', 'R', 'EN'], [3, 3, 3, 3, 0, 0, 0, 0]], [[0, 4, 4], [4, 6, 2], [6, 7, 1], [7, 8, 2]]), ('control layout', [['R'], [3]], [[0, 1, 3]])], [('regression: level parity test', [['L', 'EN', 'EN', 'EN', 'L', 'EN', 'L', 'R'], [2, 2, 2, 3, 3, 3, 2, 1]], [[0, 1, 2], [1, 6, 4], [6, 7, 2], [7, 8, 1]]), ('regression: level parity test', [['EN', 'L', 'AN', 'L', 'EN', 'EN', 'L'], [1, 1, 1, 2, 2, 4, 4]], [[0, 4, 2], [4, 5, 4], [5, 6, 6], [6, 7, 4]]), ('regression: level parity test', [['L', 'EN', 'AN', 'R', 'R', 'AN', 'AN', 'AN', 'EN', 'L'], [4, 4, 3, 3, 2, 1, 1, 4, 2, 2]], [[0, 1, 4], [1, 2, 6], [2, 3, 4], [3, 5, 3], [5, 7, 2], [7, 8, 6], [8, 9, 4], [9, 10, 2]]), ('regression: level parity test', [['R', 'R'], [4, 4]], [[0, 2, 5]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('control layout', [['R', 'AN', 'L'], [3, 3, 3]], [[0, 1, 3], [1, 3, 4]]), ('control layout', [['L', 'R', 'AN', 'AN'], [3, 3, 3, 3]], [[0, 1, 4], [1, 2, 3], [2, 4, 4]])], [('regression: level parity test', [['AN', 'R', 'EN', 'R', 'EN', 'EN', 'AN', 'AN'], [2, 2, 2, 2, 2, 2, 2, 2]], [[0, 1, 4], [1, 2, 3], [2, 3, 4], [3, 4, 3], [4, 8, 4]]), ('regression: level parity test', [['R', 'EN', 'AN', 'L', 'AN', 'L', 'EN', 'R', 'L', 'R', 'R'], [3, 4, 4, 4, 4, 2, 2, 4, 4, 4, 2]], [[0, 1, 3], [1, 3, 6], [3, 4, 4], [4, 5, 6], [5, 6, 2], [6, 7, 4], [7, 8, 5], [8, 9, 4], [9, 10, 5], [10, 11, 3]]), ('regression: level parity test', [['R', 'AN'], [2, 2]], [[0, 1, 3], [1, 2, 4]]), ('regression: level parity test', [['L', 'L', 'EN', 'L', 'L', 'L', 'L', 'AN', 'EN'], [2, 2, 3, 3, 3, 2, 3, 3, 3]], [[0, 2, 2], [2, 5, 4], [5, 6, 2], [6, 9, 4]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('control layout', [['R'], [3]], [[0, 1, 3]]), ('control layout', [['R', 'EN'], [0, 0]], [[0, 1, 1], [1, 2, 2]])], [('regression: level parity test', [['AN', 'L', 'AN', 'AN', 'EN', 'L', 'EN', 'L', 'R'], [4, 4, 2, 2, 1, 1, 1, 2, 2]], [[0, 1, 6], [1, 4, 4], [4, 8, 2], [8, 9, 3]]), ('regression: level parity test', [['R', 'L', 'EN', 'L', 'AN', 'AN'], [2, 2, 2, 2, 2, 1]], [[0, 1, 3], [1, 2, 2], [2, 3, 4], [3, 4, 2], [4, 5, 4], [5, 6, 2]]), ('partial-repair probe', [['EN', 'L', 'AN', 'AN', 'EN', 'EN'], [1, 1, 1, 0, 0, 1]], [[0, 6, 2]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('level two embedding', [['R', 'L'], [2, 2]], [[0, 1, 3], [1, 2, 2]]), ('control layout', [['R', 'AN', 'L'], [3, 3, 3]], [[0, 1, 3], [1, 3, 4]]), ('control layout', [['L', 'AN', 'R', 'R', 'R', 'L', 'EN'], [0, 0, 3, 3, 3, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 5, 3], [5, 6, 0], [6, 7, 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 |
|---|---|---|---|
| level two embedding | [[0, 1, 2], [1, 2, 3]] | [[0, 1, 3], [1, 2, 2]] | Failed |
| regression: level parity test | [[0, 3, 4], [3, 4, 2], [4, 5, 1], [5, 7, 3], [7, 8, 2], [8, 10, 3], [10, 11, 2], [11, 12, 4]] | [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]] | Failed |
| regression: level parity test | [[0, 3, 3], [3, 4, 2], [4, 5, 3], [5, 6, 4], [6, 9, 3]] | [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]] | Failed |
| partial-repair probe | [[0, 1, 3], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 6, 1], [6, 7, 3], [7, 8, 2]] | [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]] | Failed |
| number in RTL text | [[0, 1, 2], [1, 2, 3], [2, 3, 2]] | [[0, 1, 1], [1, 2, 2], [2, 3, 1]] | Failed |
| number in LTR text | [[0, 1, 0], [1, 2, 2], [2, 3, 0]] | [[0, 1, 0], [1, 2, 2], [2, 3, 0]] | Passed |
| control layout | [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]] | [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]] | Passed |
| control layout | [[0, 2, 2], [2, 3, 1], [3, 4, 2]] | [[0, 2, 2], [2, 3, 1], [3, 4, 2]] | Passed |
SHA-256 / 81661c588c659b2556f62c890e68d3bf1dfb35fbecd063a4d1b110a4ed18821b
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
types, levels = x
out = []
for c, lv in zip(types, levels):
if lv % 2 == 0:
if c == 'R':
out.append(lv + 1)
elif c in ('AN', 'EN'):
out.append(lv + 2)
else:
out.append(lv)
else:
if c in ('L', 'EN', 'AN'):
out.append(lv + 1)
else:
out.append(lv)
runs = []
for i, lv in enumerate(out):
if runs and runs[-1][2] == lv:
runs[-1][1] = i + 1
else:
runs.append([i, i + 1, lv])
return runs
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('level two embedding', [['R', 'L'], [2, 2]], [[0, 1, 3], [1, 2, 2]]), ('regression: level parity test', [['AN', 'EN', 'L', 'R', 'L', 'L', 'AN', 'R', 'EN', 'EN', 'R', 'EN'], [3, 3, 3, 1, 1, 2, 2, 1, 1, 2, 2, 3]], [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]]), ('regression: level parity test', [['EN', 'EN', 'L', 'R', 'AN', 'EN', 'R', 'R', 'AN'], [2, 2, 2, 2, 2, 3, 3, 3, 1]], [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]]), ('partial-repair probe', [['AN', 'AN', 'R', 'L', 'AN', 'L', 'EN', 'R'], [1, 3, 3, 3, 3, 1, 1, 1]], [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('control layout', [['EN', 'R', 'R', 'EN', 'L', 'AN'], [0, 0, 0, 0, 0, 0]], [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]]), ('control layout', [['AN', 'AN', 'R', 'AN'], [0, 0, 0, 0]], [[0, 2, 2], [2, 3, 1], [3, 4, 2]])], [('regression: level parity test', [['EN', 'AN', 'AN', 'L', 'AN', 'EN', 'R'], [4, 2, 4, 4, 4, 2, 2]], [[0, 1, 6], [1, 2, 4], [2, 3, 6], [3, 4, 4], [4, 5, 6], [5, 6, 4], [6, 7, 3]]), ('regression: level parity test', [['R', 'L', 'R', 'EN', 'L', 'L', 'AN', 'L'], [2, 2, 1, 1, 0, 0, 0, 0]], [[0, 1, 3], [1, 2, 2], [2, 3, 1], [3, 4, 2], [4, 6, 0], [6, 7, 2], [7, 8, 0]]), ('regression: level parity test', [['R', 'AN', 'EN', 'AN'], [2, 2, 2, 2]], [[0, 1, 3], [1, 4, 4]]), ('regression: level parity test', [['L'], [2]], [[0, 1, 2]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('control layout', [['AN', 'AN', 'AN', 'EN', 'AN', 'AN', 'R', 'EN'], [3, 3, 3, 3, 0, 0, 0, 0]], [[0, 4, 4], [4, 6, 2], [6, 7, 1], [7, 8, 2]]), ('control layout', [['R'], [3]], [[0, 1, 3]])], [('regression: level parity test', [['L', 'EN', 'EN', 'EN', 'L', 'EN', 'L', 'R'], [2, 2, 2, 3, 3, 3, 2, 1]], [[0, 1, 2], [1, 6, 4], [6, 7, 2], [7, 8, 1]]), ('regression: level parity test', [['EN', 'L', 'AN', 'L', 'EN', 'EN', 'L'], [1, 1, 1, 2, 2, 4, 4]], [[0, 4, 2], [4, 5, 4], [5, 6, 6], [6, 7, 4]]), ('regression: level parity test', [['L', 'EN', 'AN', 'R', 'R', 'AN', 'AN', 'AN', 'EN', 'L'], [4, 4, 3, 3, 2, 1, 1, 4, 2, 2]], [[0, 1, 4], [1, 2, 6], [2, 3, 4], [3, 5, 3], [5, 7, 2], [7, 8, 6], [8, 9, 4], [9, 10, 2]]), ('regression: level parity test', [['R', 'R'], [4, 4]], [[0, 2, 5]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('control layout', [['R', 'AN', 'L'], [3, 3, 3]], [[0, 1, 3], [1, 3, 4]]), ('control layout', [['L', 'R', 'AN', 'AN'], [3, 3, 3, 3]], [[0, 1, 4], [1, 2, 3], [2, 4, 4]])], [('regression: level parity test', [['AN', 'R', 'EN', 'R', 'EN', 'EN', 'AN', 'AN'], [2, 2, 2, 2, 2, 2, 2, 2]], [[0, 1, 4], [1, 2, 3], [2, 3, 4], [3, 4, 3], [4, 8, 4]]), ('regression: level parity test', [['R', 'EN', 'AN', 'L', 'AN', 'L', 'EN', 'R', 'L', 'R', 'R'], [3, 4, 4, 4, 4, 2, 2, 4, 4, 4, 2]], [[0, 1, 3], [1, 3, 6], [3, 4, 4], [4, 5, 6], [5, 6, 2], [6, 7, 4], [7, 8, 5], [8, 9, 4], [9, 10, 5], [10, 11, 3]]), ('regression: level parity test', [['R', 'AN'], [2, 2]], [[0, 1, 3], [1, 2, 4]]), ('regression: level parity test', [['L', 'L', 'EN', 'L', 'L', 'L', 'L', 'AN', 'EN'], [2, 2, 3, 3, 3, 2, 3, 3, 3]], [[0, 2, 2], [2, 5, 4], [5, 6, 2], [6, 9, 4]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('control layout', [['R'], [3]], [[0, 1, 3]]), ('control layout', [['R', 'EN'], [0, 0]], [[0, 1, 1], [1, 2, 2]])], [('regression: level parity test', [['AN', 'L', 'AN', 'AN', 'EN', 'L', 'EN', 'L', 'R'], [4, 4, 2, 2, 1, 1, 1, 2, 2]], [[0, 1, 6], [1, 4, 4], [4, 8, 2], [8, 9, 3]]), ('regression: level parity test', [['R', 'L', 'EN', 'L', 'AN', 'AN'], [2, 2, 2, 2, 2, 1]], [[0, 1, 3], [1, 2, 2], [2, 3, 4], [3, 4, 2], [4, 5, 4], [5, 6, 2]]), ('partial-repair probe', [['EN', 'L', 'AN', 'AN', 'EN', 'EN'], [1, 1, 1, 0, 0, 1]], [[0, 6, 2]]), ('number in RTL text', [['R', 'AN', 'R'], [1, 1, 1]], [[0, 1, 1], [1, 2, 2], [2, 3, 1]]), ('number in LTR text', [['L', 'EN', 'L'], [0, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 3, 0]]), ('level two embedding', [['R', 'L'], [2, 2]], [[0, 1, 3], [1, 2, 2]]), ('control layout', [['R', 'AN', 'L'], [3, 3, 3]], [[0, 1, 3], [1, 3, 4]]), ('control layout', [['L', 'AN', 'R', 'R', 'R', 'L', 'EN'], [0, 0, 3, 3, 3, 0, 0]], [[0, 1, 0], [1, 2, 2], [2, 5, 3], [5, 6, 0], [6, 7, 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 |
|---|---|---|---|
| level two embedding | [[0, 1, 3], [1, 2, 2]] | [[0, 1, 3], [1, 2, 2]] | Passed |
| regression: level parity test | [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]] | [[0, 3, 4], [3, 4, 1], [4, 6, 2], [6, 7, 4], [7, 8, 1], [8, 9, 2], [9, 10, 4], [10, 11, 3], [11, 12, 4]] | Passed |
| regression: level parity test | [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]] | [[0, 2, 4], [2, 3, 2], [3, 4, 3], [4, 6, 4], [6, 8, 3], [8, 9, 2]] | Passed |
| partial-repair probe | [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]] | [[0, 1, 2], [1, 2, 4], [2, 3, 3], [3, 5, 4], [5, 7, 2], [7, 8, 1]] | Passed |
| number in RTL text | [[0, 1, 1], [1, 2, 2], [2, 3, 1]] | [[0, 1, 1], [1, 2, 2], [2, 3, 1]] | Passed |
| number in LTR text | [[0, 1, 0], [1, 2, 2], [2, 3, 0]] | [[0, 1, 0], [1, 2, 2], [2, 3, 0]] | Passed |
| control layout | [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]] | [[0, 1, 2], [1, 3, 1], [3, 4, 2], [4, 5, 0], [5, 6, 2]] | Passed |
| control layout | [[0, 2, 2], [2, 3, 1], [3, 4, 2]] | [[0, 2, 2], [2, 3, 1], [3, 4, 2]] | Passed |
SHA-256 / a9ae2ddfd7c24068387a9957f204791eb84342b5dba85bea254148ec9a294420
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:54.138698+00:00.
Case digest / b64b9d5d28b8bcf6f66d4db7f2448ef8531e994ac167a1a896712d74dcd4ffa4