FA-12441 / Molecular graph representation / Open access
Explicit isotope labels disappear from atom keys · case 01
Explicit isotope labels disappear from atom keys.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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