FAILURE MAP
← Case archive

FA-11346 / Spreadsheet calculation semantics / Open access

Range SUM coerces text and logical cells into numbers · case 01

A range sum includes numeric-looking labels and logical cells.

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

ROOT CAUSE

Scalar coercion rules are reused for range members.

VERIFIED REPAIR

Sum only exact int or float cell values.

Unsuccessful approach: Using isinstance for numbers still admits booleans in Python.

Case contract

A range contains finite ints, floats, strings, booleans or None. Return SUM of numeric cells only; strings, booleans and blanks are ignored.

Why this case matters

This isolated spreadsheet model makes cell semantics explicit; it does not claim compatibility with every workbook engine.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(cells):
    total = 0
    for cell in cells:
        try:
            total += float(cell) if cell is not None else 0
        except ValueError:
            pass
    return total
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('numeric text ignored', solve([N, str(N)]), N)
check('logical true ignored', solve([N, True]), N)
check('blank range', solve([None, '']), 0)
check('zero retained', solve([0, N]), N)
check('negative cells', solve([-N, N/2]), -N/2)
check('empty range', solve([]), 0)
check('labels ignored', solve(['item', False, N]), N)
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
numeric text ignored2.01Failed
logical true ignored2.01Failed
blank range00Passed
zero retained1.01Passed
negative cells-0.5-0.5Passed
empty range00Passed
labels ignored1.01Passed

SHA-256 / 05a13a1ab58bf46e99dcbe310fea1cc1cbe5d7106ac921681e92cfa996019276

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(cells):
    return sum(cell for cell in cells if isinstance(cell, (int, float)))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('numeric text ignored', solve([N, str(N)]), N)
check('logical true ignored', solve([N, True]), N)
check('blank range', solve([None, '']), 0)
check('zero retained', solve([0, N]), N)
check('negative cells', solve([-N, N/2]), -N/2)
check('empty range', solve([]), 0)
check('labels ignored', solve(['item', False, N]), N)
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
numeric text ignored11Passed
logical true ignored21Failed
blank range00Passed
zero retained11Passed
negative cells-0.5-0.5Passed
empty range00Passed
labels ignored11Passed

SHA-256 / c1c4d3a63d5a461684204cefb57dbe9e35f06ebdbc43c3aa0b48fb1e8944fd6b

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(cells):
    return sum(cell for cell in cells if type(cell) in (int, float))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('numeric text ignored', solve([N, str(N)]), N)
check('logical true ignored', solve([N, True]), N)
check('blank range', solve([None, '']), 0)
check('zero retained', solve([0, N]), N)
check('negative cells', solve([-N, N/2]), -N/2)
check('empty range', solve([]), 0)
check('labels ignored', solve(['item', False, N]), N)
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
numeric text ignored11Passed
logical true ignored11Passed
blank range00Passed
zero retained11Passed
negative cells-0.5-0.5Passed
empty range00Passed
labels ignored11Passed

SHA-256 / 3cad63eb071230a398ea7675cfc75645477a703a0651f985e9b01af7c1fe6441

Verification & scope

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:38:47.154695+00:00.

Case digest / f69f0ff7dbce9d478dd45496a55f4349ad8891a97a47659f04630032622d7570