FA-70616 / GIS polygon topology / Open access
Sliver polygon detection by thinness ratio: hole perimeter · case 01
Thin rims around large holes are not flagged.
ROOT CAUSE
Only the exterior ring contributes to the perimeter.
VERIFIED REPAIR
At the hole perimeter step restore `perim = sum(per(r) for r in rings)`, leaving the rest of the model unchanged.
Unsuccessful approach: Only the first hole perimeter is included.
Case contract
Input [rings, threshold]: exterior then holes, closed rings in any orientation. Area = |exterior area| minus the sum of |hole areas|; perimeter = total length of all rings. If area <= 0 or perimeter == 0 return ["degenerate", 0.0]. Thinness t = 4*pi*area/perimeter**2; return ["sliver" if t < threshold else "ok", t rounded to 6 decimals].
Why this case matters
Overlay operations leave thin slivers along near-coincident boundaries; QA jobs flag them by compactness.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
rings, thresh = x
def a2(r):
return sum(p[0] * q[1] - q[0] * p[1] for p, q in zip(r, r[1:]))
def per(r):
return sum(math.hypot(q[0] - p[0], q[1] - p[1]) for p, q in zip(r, r[1:]))
area = abs(a2(rings[0])) / 2 - sum(abs(a2(h)) / 2 for h in rings[1:])
perim = per(rings[0])
if area <= 0 or perim == 0:
return ['degenerate', 0.0]
t = 4 * math.pi * area / perim ** 2
return ['sliver' if t < thresh else 'ok', round(t, 6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('control #0', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.3], ['ok', 0.785398]), ('control #1', [[[[0, 0], [100, 0], [100, 2], [0, 2], [0, 0]]], 0.3], ['sliver', 0.060392]), ('regression #2', [[[[0, 0], [20, 0], [20, 20], [0, 20], [0, 0]], [[1, 1], [1, 19], [19, 19], [19, 1], [1, 1]]], 0.3], ['sliver', 0.041337]), ('regression #3', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]]], 0.3], ['ok', 0.785398]), ('regression #4', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]], [[2, 2], [6, 2], [6, 6], [2, 6], [2, 2]]], 0.3], ['ok', 0.523599]), ('boundary #5', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.7853981633974483], ['ok', 0.785398]), ('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253])], [('regression #3', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]]], 0.3], ['ok', 0.785398]), ('regression #4', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]], [[2, 2], [6, 2], [6, 6], [2, 6], [2, 2]]], 0.3], ['ok', 0.523599]), ('boundary #5', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.7853981633974483], ['ok', 0.785398]), ('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #7', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]], [[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('control #8', [[[[0, 0], [30, 0], [15, 26], [0, 0]]], 0.5], ['ok', 0.6046]), ('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253])], [('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #7', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]], [[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('control #8', [[[[0, 0], [30, 0], [15, 26], [0, 0]]], 0.5], ['ok', 0.6046]), ('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('control #11', [[[[0, 0], [40, 0], [40, 5], [0, 5], [0, 0]]], 0.5], ['sliver', 0.310281]), ('boundary #12', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.5], ['ok', 0.502655]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652])], [('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('control #11', [[[[0, 0], [40, 0], [40, 5], [0, 5], [0, 0]]], 0.5], ['sliver', 0.310281]), ('boundary #12', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.5], ['ok', 0.502655]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652]), ('control #14', [[[[0, 0], [8, 1], [9, 9], [1, 8], [0, 0]]], 0.4], ['ok', 0.761232]), ('regression #15', [[[[0, 0], [1, 8], [9, 9], [8, 1], [0, 0]], [[3, 3], [5, 3], [5, 5], [3, 5], [3, 3]]], 0.4], ['ok', 0.457668]), ('regression #16', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.502], ['ok', 0.502655])], [('control #0', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.3], ['ok', 0.785398]), ('control #1', [[[[0, 0], [100, 0], [100, 2], [0, 2], [0, 0]]], 0.3], ['sliver', 0.060392]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652]), ('control #14', [[[[0, 0], [8, 1], [9, 9], [1, 8], [0, 0]]], 0.4], ['ok', 0.761232]), ('regression #15', [[[[0, 0], [1, 8], [9, 9], [8, 1], [0, 0]], [[3, 3], [5, 3], [5, 5], [3, 5], [3, 3]]], 0.4], ['ok', 0.457668]), ('regression #16', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.502], ['ok', 0.502655]), ('regression #17', [[[[0, 0], [30, 0], [30, 10], [0, 10], [0, 0]]], 0.587], ['ok', 0.589049])]]
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 |
|---|---|---|---|
| control #0 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| control #1 | ['sliver', 0.060392] | ['sliver', 0.060392] | Passed |
| regression #2 | ['sliver', 0.149226] | ['sliver', 0.041337] | Failed |
| regression #3 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| regression #4 | ['ok', 0.753982] | ['ok', 0.523599] | Failed |
| boundary #5 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| boundary #6 | ['degenerate', 0.0] | ['degenerate', 0.0] | Passed |
| regression #10 | ['ok', 0.523599] | ['sliver', 0.14253] | Failed |
SHA-256 / 3c96ea6742d66aa4e68fd674bac98da26a4ebd99980209a6f086264819e69285
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
rings, thresh = x
def a2(r):
return sum(p[0] * q[1] - q[0] * p[1] for p, q in zip(r, r[1:]))
def per(r):
return sum(math.hypot(q[0] - p[0], q[1] - p[1]) for p, q in zip(r, r[1:]))
area = abs(a2(rings[0])) / 2 - sum(abs(a2(h)) / 2 for h in rings[1:])
perim = sum(per(r) for r in rings[:2])
if area <= 0 or perim == 0:
return ['degenerate', 0.0]
t = 4 * math.pi * area / perim ** 2
return ['sliver' if t < thresh else 'ok', round(t, 6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('control #0', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.3], ['ok', 0.785398]), ('control #1', [[[[0, 0], [100, 0], [100, 2], [0, 2], [0, 0]]], 0.3], ['sliver', 0.060392]), ('regression #2', [[[[0, 0], [20, 0], [20, 20], [0, 20], [0, 0]], [[1, 1], [1, 19], [19, 19], [19, 1], [1, 1]]], 0.3], ['sliver', 0.041337]), ('regression #3', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]]], 0.3], ['ok', 0.785398]), ('regression #4', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]], [[2, 2], [6, 2], [6, 6], [2, 6], [2, 2]]], 0.3], ['ok', 0.523599]), ('boundary #5', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.7853981633974483], ['ok', 0.785398]), ('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253])], [('regression #3', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]]], 0.3], ['ok', 0.785398]), ('regression #4', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]], [[2, 2], [6, 2], [6, 6], [2, 6], [2, 2]]], 0.3], ['ok', 0.523599]), ('boundary #5', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.7853981633974483], ['ok', 0.785398]), ('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #7', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]], [[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('control #8', [[[[0, 0], [30, 0], [15, 26], [0, 0]]], 0.5], ['ok', 0.6046]), ('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253])], [('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #7', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]], [[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('control #8', [[[[0, 0], [30, 0], [15, 26], [0, 0]]], 0.5], ['ok', 0.6046]), ('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('control #11', [[[[0, 0], [40, 0], [40, 5], [0, 5], [0, 0]]], 0.5], ['sliver', 0.310281]), ('boundary #12', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.5], ['ok', 0.502655]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652])], [('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('control #11', [[[[0, 0], [40, 0], [40, 5], [0, 5], [0, 0]]], 0.5], ['sliver', 0.310281]), ('boundary #12', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.5], ['ok', 0.502655]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652]), ('control #14', [[[[0, 0], [8, 1], [9, 9], [1, 8], [0, 0]]], 0.4], ['ok', 0.761232]), ('regression #15', [[[[0, 0], [1, 8], [9, 9], [8, 1], [0, 0]], [[3, 3], [5, 3], [5, 5], [3, 5], [3, 3]]], 0.4], ['ok', 0.457668]), ('regression #16', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.502], ['ok', 0.502655])], [('control #0', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.3], ['ok', 0.785398]), ('control #1', [[[[0, 0], [100, 0], [100, 2], [0, 2], [0, 0]]], 0.3], ['sliver', 0.060392]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652]), ('control #14', [[[[0, 0], [8, 1], [9, 9], [1, 8], [0, 0]]], 0.4], ['ok', 0.761232]), ('regression #15', [[[[0, 0], [1, 8], [9, 9], [8, 1], [0, 0]], [[3, 3], [5, 3], [5, 5], [3, 5], [3, 3]]], 0.4], ['ok', 0.457668]), ('regression #16', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.502], ['ok', 0.502655]), ('regression #17', [[[[0, 0], [30, 0], [30, 10], [0, 10], [0, 0]]], 0.587], ['ok', 0.589049])]]
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 |
|---|---|---|---|
| control #0 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| control #1 | ['sliver', 0.060392] | ['sliver', 0.060392] | Passed |
| regression #2 | ['sliver', 0.041337] | ['sliver', 0.041337] | Passed |
| regression #3 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| regression #4 | ['ok', 0.523599] | ['ok', 0.523599] | Passed |
| boundary #5 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| boundary #6 | ['degenerate', 0.0] | ['degenerate', 0.0] | Passed |
| regression #10 | ['ok', 0.260894] | ['sliver', 0.14253] | Failed |
SHA-256 / 221e663ded6a5f7a89833140ea7b6d27429d287deeb576b5539e1de248841c2e
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
rings, thresh = x
def a2(r):
return sum(p[0] * q[1] - q[0] * p[1] for p, q in zip(r, r[1:]))
def per(r):
return sum(math.hypot(q[0] - p[0], q[1] - p[1]) for p, q in zip(r, r[1:]))
area = abs(a2(rings[0])) / 2 - sum(abs(a2(h)) / 2 for h in rings[1:])
perim = sum(per(r) for r in rings)
if area <= 0 or perim == 0:
return ['degenerate', 0.0]
t = 4 * math.pi * area / perim ** 2
return ['sliver' if t < thresh else 'ok', round(t, 6)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('control #0', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.3], ['ok', 0.785398]), ('control #1', [[[[0, 0], [100, 0], [100, 2], [0, 2], [0, 0]]], 0.3], ['sliver', 0.060392]), ('regression #2', [[[[0, 0], [20, 0], [20, 20], [0, 20], [0, 0]], [[1, 1], [1, 19], [19, 19], [19, 1], [1, 1]]], 0.3], ['sliver', 0.041337]), ('regression #3', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]]], 0.3], ['ok', 0.785398]), ('regression #4', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]], [[2, 2], [6, 2], [6, 6], [2, 6], [2, 2]]], 0.3], ['ok', 0.523599]), ('boundary #5', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.7853981633974483], ['ok', 0.785398]), ('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253])], [('regression #3', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]]], 0.3], ['ok', 0.785398]), ('regression #4', [[[[0, 0], [0, 20], [20, 20], [20, 0], [0, 0]], [[2, 2], [6, 2], [6, 6], [2, 6], [2, 2]]], 0.3], ['ok', 0.523599]), ('boundary #5', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.7853981633974483], ['ok', 0.785398]), ('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #7', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]], [[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('control #8', [[[[0, 0], [30, 0], [15, 26], [0, 0]]], 0.5], ['ok', 0.6046]), ('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253])], [('boundary #6', [[[[0, 0], [10, 0], [20, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('regression #7', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]], [[0, 0], [0, 10], [10, 10], [10, 0], [0, 0]]], 0.3], ['degenerate', 0.0]), ('control #8', [[[[0, 0], [30, 0], [15, 26], [0, 0]]], 0.5], ['ok', 0.6046]), ('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('control #11', [[[[0, 0], [40, 0], [40, 5], [0, 5], [0, 0]]], 0.5], ['sliver', 0.310281]), ('boundary #12', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.5], ['ok', 0.502655]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652])], [('regression #9', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [25, 25], [25, 5], [5, 5]]], 0.2], ['sliver', 0.15708]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('control #11', [[[[0, 0], [40, 0], [40, 5], [0, 5], [0, 0]]], 0.5], ['sliver', 0.310281]), ('boundary #12', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.5], ['ok', 0.502655]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652]), ('control #14', [[[[0, 0], [8, 1], [9, 9], [1, 8], [0, 0]]], 0.4], ['ok', 0.761232]), ('regression #15', [[[[0, 0], [1, 8], [9, 9], [8, 1], [0, 0]], [[3, 3], [5, 3], [5, 5], [3, 5], [3, 3]]], 0.4], ['ok', 0.457668]), ('regression #16', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.502], ['ok', 0.502655])], [('control #0', [[[[0, 0], [10, 0], [10, 10], [0, 10], [0, 0]]], 0.3], ['ok', 0.785398]), ('control #1', [[[[0, 0], [100, 0], [100, 2], [0, 2], [0, 0]]], 0.3], ['sliver', 0.060392]), ('regression #10', [[[[0, 0], [30, 0], [30, 30], [0, 30], [0, 0]], [[5, 5], [5, 25], [10, 25], [10, 5], [5, 5]], [[15, 5], [15, 25], [25, 25], [25, 5], [15, 5]]], 0.2], ['sliver', 0.14253]), ('regression #13', [[[[0, 0], [12, 0], [12, 12], [0, 12], [0, 0]], [[1, 1], [1, 2], [11, 2], [11, 1], [1, 1]]], 0.6], ['sliver', 0.343652]), ('control #14', [[[[0, 0], [8, 1], [9, 9], [1, 8], [0, 0]]], 0.4], ['ok', 0.761232]), ('regression #15', [[[[0, 0], [1, 8], [9, 9], [8, 1], [0, 0]], [[3, 3], [5, 3], [5, 5], [3, 5], [3, 3]]], 0.4], ['ok', 0.457668]), ('regression #16', [[[[0, 0], [40, 0], [40, 10], [0, 10], [0, 0]]], 0.502], ['ok', 0.502655]), ('regression #17', [[[[0, 0], [30, 0], [30, 10], [0, 10], [0, 0]]], 0.587], ['ok', 0.589049])]]
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 |
|---|---|---|---|
| control #0 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| control #1 | ['sliver', 0.060392] | ['sliver', 0.060392] | Passed |
| regression #2 | ['sliver', 0.041337] | ['sliver', 0.041337] | Passed |
| regression #3 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| regression #4 | ['ok', 0.523599] | ['ok', 0.523599] | Passed |
| boundary #5 | ['ok', 0.785398] | ['ok', 0.785398] | Passed |
| boundary #6 | ['degenerate', 0.0] | ['degenerate', 0.0] | Passed |
| regression #10 | ['sliver', 0.14253] | ['sliver', 0.14253] | Passed |
SHA-256 / 3572419b2a7c9abbe26826a5b50e79ba362ed6afa19a1c15832c01fa804a5192
Verification & scope
Stipulated deterministic toy contract on a bounded input domain; results are rounded as stated and no conformance with any published standard or library 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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:48:22.356935+00:00.
Case digest / 8156fc27c50e5fc2c44359c26e06e126c831e8c051c6d1ae9df03988192d409f