FAILURE MAP
← Case archive

FA-15366 / Numerics / Open access

Rational row reduction: pivot column traversal · case 01

The exact rational row reduction result violates the stated contract at pivot column traversal.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The pivot column traversal step uses range(cols-1) instead of range(cols).

VERIFIED REPAIR

Use range(cols) at the pivot column traversal step.

Unsuccessful approach: The partial repair range(cols-1,-1,-1) still violates the pivot column traversal invariant.

Case contract

Input nonempty rectangular integer matrix; return RREF with each rational entry [p,q].

Why this case matters

Exact discrete arithmetic with observable algorithmic state; no floating point approximation is used.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
import itertools
from fractions import Fraction
N = 1
observations = []
def solve(x):
    a=[list(map(Fraction,r)) for r in x];rows=len(a);cols=len(a[0]);r=0
    for c in range(cols-1):
     if r==rows:break
     pivot=next((i for i in range(r,rows) if a[i][c]!=0),None)
     if pivot is None:continue
     a[r],a[pivot]=a[pivot],a[r]
     d=a[r][c]
     if not d:return None
     a[r]=[v/d for v in a[r]]
     for i in range(rows):
      if i==r:continue
      v=a[i][c]
      a[i]=[a[i][j]-v*a[r][j] for j in range(cols)]
     r=r+1
    return [[[v.numerator,v.denominator] for v in row] for row in a]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([[0, 2]], [[[0, 1], [1, 1]]]), ([[2, -1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[1, 1]], [[[1, 1], [1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[-2, 0]], [[[1, 1], [0, 1]]]), ([[0, 1]], [[[0, 1], [1, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[2, -2]], [[[1, 1], [-1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[0, 1]], [[[0, 1], [1, 1]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[0, -2]], [[[0, 1], [1, 1]]])], [([[0, -2]], [[[0, 1], [1, 1]]]), ([[-2, 1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[2, 2]], [[[1, 1], [1, 1]]]), ([[2, -1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[1, -1]], [[[1, 1], [-1, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[-1, 1], [-1, 0]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[0, 0], [-1, 2]], [[[1, 1], [-2, 1]], [[0, 1], [0, 1]]]), ([[-2, 1], [1, -2]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-1, 0], [0, 0]], [[[1, 1], [0, 1]], [[0, 1], [0, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[-2, 2]], [[[1, 1], [-1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[0, -2], [2, 0]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-1, -2], [0, 1]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-2, 0], [-2, 0]], [[[1, 1], [0, 1]], [[0, 1], [0, 1]]]), ([[0, 0], [0, -1]], [[[0, 1], [1, 1]], [[0, 1], [0, 1]]])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("explicit oracle %d" % i, 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 fixtureActualExpectedOutcome
explicit oracle 0[[[0, 1], [2, 1]]][[[0, 1], [1, 1]]]Failed
explicit oracle 1[[[1, 1], [-1, 2]]][[[1, 1], [-1, 2]]]Passed
explicit oracle 2[[[0, 1], [0, 1]]][[[0, 1], [0, 1]]]Passed
explicit oracle 3[[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]][[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]Passed
explicit oracle 4[[[1, 1], [1, 1]]][[[1, 1], [1, 1]]]Passed
explicit oracle 5[[[0, 1], [0, 1]]][[[0, 1], [0, 1]]]Passed
explicit oracle 6[[[1, 1], [0, 1]]][[[1, 1], [0, 1]]]Passed
explicit oracle 7[[[0, 1], [1, 1]]][[[0, 1], [1, 1]]]Passed

SHA-256 / c1923051d6cf3dfc635a5b41fd7db2c6bb357a3fe04ca187a06dbdab5798f270

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json
import math
import itertools
from fractions import Fraction
N = 1
observations = []
def solve(x):
    a=[list(map(Fraction,r)) for r in x];rows=len(a);cols=len(a[0]);r=0
    for c in range(cols-1,-1,-1):
     if r==rows:break
     pivot=next((i for i in range(r,rows) if a[i][c]!=0),None)
     if pivot is None:continue
     a[r],a[pivot]=a[pivot],a[r]
     d=a[r][c]
     if not d:return None
     a[r]=[v/d for v in a[r]]
     for i in range(rows):
      if i==r:continue
      v=a[i][c]
      a[i]=[a[i][j]-v*a[r][j] for j in range(cols)]
     r=r+1
    return [[[v.numerator,v.denominator] for v in row] for row in a]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([[0, 2]], [[[0, 1], [1, 1]]]), ([[2, -1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[1, 1]], [[[1, 1], [1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[-2, 0]], [[[1, 1], [0, 1]]]), ([[0, 1]], [[[0, 1], [1, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[2, -2]], [[[1, 1], [-1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[0, 1]], [[[0, 1], [1, 1]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[0, -2]], [[[0, 1], [1, 1]]])], [([[0, -2]], [[[0, 1], [1, 1]]]), ([[-2, 1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[2, 2]], [[[1, 1], [1, 1]]]), ([[2, -1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[1, -1]], [[[1, 1], [-1, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[-1, 1], [-1, 0]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[0, 0], [-1, 2]], [[[1, 1], [-2, 1]], [[0, 1], [0, 1]]]), ([[-2, 1], [1, -2]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-1, 0], [0, 0]], [[[1, 1], [0, 1]], [[0, 1], [0, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[-2, 2]], [[[1, 1], [-1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[0, -2], [2, 0]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-1, -2], [0, 1]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-2, 0], [-2, 0]], [[[1, 1], [0, 1]], [[0, 1], [0, 1]]]), ([[0, 0], [0, -1]], [[[0, 1], [1, 1]], [[0, 1], [0, 1]]])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("explicit oracle %d" % i, 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 fixtureActualExpectedOutcome
explicit oracle 0[[[0, 1], [1, 1]]][[[0, 1], [1, 1]]]Passed
explicit oracle 1[[[-2, 1], [1, 1]]][[[1, 1], [-1, 2]]]Failed
explicit oracle 2[[[0, 1], [0, 1]]][[[0, 1], [0, 1]]]Passed
explicit oracle 3[[[-1, 3], [0, 1], [0, 1], [1, 1]], [[-5, 2], [0, 1], [1, 1], [0, 1]], [[-1, 6], [1, 1], [0, 1], [0, 1]]][[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]Failed
explicit oracle 4[[[1, 1], [1, 1]]][[[1, 1], [1, 1]]]Passed
explicit oracle 5[[[0, 1], [0, 1]]][[[0, 1], [0, 1]]]Passed
explicit oracle 6[[[1, 1], [0, 1]]][[[1, 1], [0, 1]]]Passed
explicit oracle 7[[[0, 1], [1, 1]]][[[0, 1], [1, 1]]]Passed

SHA-256 / abd28a2bd012ec63e8d32f4945bc3c889150e05d128ffdaca8c89d6c9c305ff9

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json
import math
import itertools
from fractions import Fraction
N = 1
observations = []
def solve(x):
    a=[list(map(Fraction,r)) for r in x];rows=len(a);cols=len(a[0]);r=0
    for c in range(cols):
     if r==rows:break
     pivot=next((i for i in range(r,rows) if a[i][c]!=0),None)
     if pivot is None:continue
     a[r],a[pivot]=a[pivot],a[r]
     d=a[r][c]
     if not d:return None
     a[r]=[v/d for v in a[r]]
     for i in range(rows):
      if i==r:continue
      v=a[i][c]
      a[i]=[a[i][j]-v*a[r][j] for j in range(cols)]
     r=r+1
    return [[[v.numerator,v.denominator] for v in row] for row in a]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[([[0, 2]], [[[0, 1], [1, 1]]]), ([[2, -1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[1, 1]], [[[1, 1], [1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[-2, 0]], [[[1, 1], [0, 1]]]), ([[0, 1]], [[[0, 1], [1, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[2, -2]], [[[1, 1], [-1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[0, 1]], [[[0, 1], [1, 1]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[0, -2]], [[[0, 1], [1, 1]]])], [([[0, -2]], [[[0, 1], [1, 1]]]), ([[-2, 1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[2, 2]], [[[1, 1], [1, 1]]]), ([[2, -1]], [[[1, 1], [-1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[1, -1]], [[[1, 1], [-1, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[-2, -1]], [[[1, 1], [1, 2]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[-1, 1], [-1, 0]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[0, 0], [-1, 2]], [[[1, 1], [-2, 1]], [[0, 1], [0, 1]]]), ([[-2, 1], [1, -2]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-1, 0], [0, 0]], [[[1, 1], [0, 1]], [[0, 1], [0, 1]]])], [([[0, -1]], [[[0, 1], [1, 1]]]), ([[-2, 2]], [[[1, 1], [-1, 1]]]), ([[0, 0]], [[[0, 1], [0, 1]]]), ([[0, 2, 0, -1], [2, -1, -1, 2], [1, -2, 0, -2]], [[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]), ([[0, -2], [2, 0]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-1, -2], [0, 1]], [[[1, 1], [0, 1]], [[0, 1], [1, 1]]]), ([[-2, 0], [-2, 0]], [[[1, 1], [0, 1]], [[0, 1], [0, 1]]]), ([[0, 0], [0, -1]], [[[0, 1], [1, 1]], [[0, 1], [0, 1]]])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check("explicit oracle %d" % i, 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 fixtureActualExpectedOutcome
explicit oracle 0[[[0, 1], [1, 1]]][[[0, 1], [1, 1]]]Passed
explicit oracle 1[[[1, 1], [-1, 2]]][[[1, 1], [-1, 2]]]Passed
explicit oracle 2[[[0, 1], [0, 1]]][[[0, 1], [0, 1]]]Passed
explicit oracle 3[[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]][[[1, 1], [0, 1], [0, 1], [-3, 1]], [[0, 1], [1, 1], [0, 1], [-1, 2]], [[0, 1], [0, 1], [1, 1], [-15, 2]]]Passed
explicit oracle 4[[[1, 1], [1, 1]]][[[1, 1], [1, 1]]]Passed
explicit oracle 5[[[0, 1], [0, 1]]][[[0, 1], [0, 1]]]Passed
explicit oracle 6[[[1, 1], [0, 1]]][[[1, 1], [0, 1]]]Passed
explicit oracle 7[[[0, 1], [1, 1]]][[[0, 1], [1, 1]]]Passed

SHA-256 / d3bec32dc4be8c63ccb93f5b4573e2683b1c93c3d3c44337338af5f985d2ef89

Verification & scope

A deterministic bounded teaching model. Inputs are restricted to the explicit contract; this is not a production algebra library. 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:39:26.023973+00:00.

Case digest / 0339206c07c65a8d8ff484aa9cc13f8689472ccb6b7b1bba6c253753eda73981