FAILURE MAP
← Case archive

FA-12441 / Molecular graph representation / Open access

Explicit isotope labels disappear from atom keys · case 01

Explicit isotope labels disappear from atom keys.

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

ROOT CAUSE

Element-only keys erase explicit isotope tags.

VERIFIED REPAIR

Implement the explicit toy representation contract: Return [element, isotope] exactly; None means unspecified and integer zero means an explicit model sentinel.

Unsuccessful approach: A truthiness fallback conflates explicit zero sentinel with absent isotope.

Case contract

Return [element, isotope] exactly; None means unspecified and integer zero means an explicit model sentinel.

Why this case matters

Controlled molecular graph interchange model; tests isolate atom or bond representation errors without claiming chemical validity or production toolkit equivalence.

1 / The failure

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

N = 1
observations = []
def solve(element, isotope):
    return [element, None]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('varying isotope', solve('C', 12+N), ['C',12+N])
check('unspecified', solve('C', None), ['C',None])
check('zero sentinel', solve('X', 0), ['X',0])
check('hydrogen isotope', solve('H', 2), ['H',2])
check('different element', solve('N', 15), ['N',15])
check('large label', solve('X', 100+N), ['X',100+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
varying isotope['C', None]['C', 13]Failed
unspecified['C', None]['C', None]Passed
zero sentinel['X', None]['X', 0]Failed
hydrogen isotope['H', None]['H', 2]Failed
different element['N', None]['N', 15]Failed
large label['X', None]['X', 101]Failed

SHA-256 / 2d8d5694b428fd26906d2f0bb8ece0e6bab775bc8f7e08a4df69a378f99c0f4d

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(element, isotope):
    return [element, isotope or None]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('varying isotope', solve('C', 12+N), ['C',12+N])
check('unspecified', solve('C', None), ['C',None])
check('zero sentinel', solve('X', 0), ['X',0])
check('hydrogen isotope', solve('H', 2), ['H',2])
check('different element', solve('N', 15), ['N',15])
check('large label', solve('X', 100+N), ['X',100+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
varying isotope['C', 13]['C', 13]Passed
unspecified['C', None]['C', None]Passed
zero sentinel['X', None]['X', 0]Failed
hydrogen isotope['H', 2]['H', 2]Passed
different element['N', 15]['N', 15]Passed
large label['X', 101]['X', 101]Passed

SHA-256 / cfa26602dbe21250520d37f66dba765f9111fe4793c37cc900106b65dd8755ab

3 / The verified repair

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

N = 1
observations = []
def solve(element, isotope):
    return [element, isotope]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('varying isotope', solve('C', 12+N), ['C',12+N])
check('unspecified', solve('C', None), ['C',None])
check('zero sentinel', solve('X', 0), ['X',0])
check('hydrogen isotope', solve('H', 2), ['H',2])
check('different element', solve('N', 15), ['N',15])
check('large label', solve('X', 100+N), ['X',100+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
varying isotope['C', 13]['C', 13]Passed
unspecified['C', None]['C', None]Passed
zero sentinel['X', 0]['X', 0]Passed
hydrogen isotope['H', 2]['H', 2]Passed
different element['N', 15]['N', 15]Passed
large label['X', 101]['X', 101]Passed

SHA-256 / 2dbeb106376b34bd35e0233ce0db8db8fa3134917bf155e84a3a2ea93faa4b10

Verification & scope

Toy representation only; no valence inference, chemical sanitization, synthesis, or real molecular identity determination. 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:56.853672+00:00.

Case digest / 0e8dacc663417a2ef1629766895bd2f5a79db28e668cdb6ad94955b137b92c34