FAILURE MAP
← Case archive

FA-12486 / Molecular graph representation / Open access

An unspecified query charge becomes a neutral-only constraint · case 01

An unspecified query charge becomes a neutral-only constraint.

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

ROOT CAUSE

Missing query charge is defaulted to zero.

VERIFIED REPAIR

Implement the explicit toy representation contract: Query has element string or * wildcard and charge integer or None wildcard. Match target element and charge conjunctively, with only None disabling charge constraint.

Unsuccessful approach: Using truthiness makes an explicit neutral charge behave as a wildcard.

Case contract

Query has element string or * wildcard and charge integer or None wildcard. Match target element and charge conjunctively, with only None disabling charge constraint.

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, charge, query_element, query_charge):
    return (query_element == "*" or element == query_element) and charge == (query_charge or 0)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('wildcard charge', solve('N',N,'N',None), True)
check('explicit neutral rejects ion', solve('N',N,'N',0), False)
check('neutral matches', solve('N',0,'N',0), True)
check('element mismatch', solve('O',0,'N',None), False)
check('wildcard element exact charge', solve('O',-N,'*',-N), True)
check('wrong signed charge', solve('O',N,'*',-N), False)
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
wildcard chargeFalseTrueFailed
explicit neutral rejects ionFalseFalsePassed
neutral matchesTrueTruePassed
element mismatchFalseFalsePassed
wildcard element exact chargeTrueTruePassed
wrong signed chargeFalseFalsePassed

SHA-256 / 46cf09f619399c50f4000139744c70184291bd59b32c143e5217bf594412656f

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(element, charge, query_element, query_charge):
    return (query_element == "*" or element == query_element) and (not query_charge or charge == query_charge)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('wildcard charge', solve('N',N,'N',None), True)
check('explicit neutral rejects ion', solve('N',N,'N',0), False)
check('neutral matches', solve('N',0,'N',0), True)
check('element mismatch', solve('O',0,'N',None), False)
check('wildcard element exact charge', solve('O',-N,'*',-N), True)
check('wrong signed charge', solve('O',N,'*',-N), False)
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
wildcard chargeTrueTruePassed
explicit neutral rejects ionTrueFalseFailed
neutral matchesTrueTruePassed
element mismatchFalseFalsePassed
wildcard element exact chargeTrueTruePassed
wrong signed chargeFalseFalsePassed

SHA-256 / 4185754e7393e97cd754ee9e6aebe83a2267852137692993091394d6a8a20498

3 / The verified repair

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

N = 1
observations = []
def solve(element, charge, query_element, query_charge):
    return (query_element == "*" or element == query_element) and (query_charge is None or charge == query_charge)
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
check('wildcard charge', solve('N',N,'N',None), True)
check('explicit neutral rejects ion', solve('N',N,'N',0), False)
check('neutral matches', solve('N',0,'N',0), True)
check('element mismatch', solve('O',0,'N',None), False)
check('wildcard element exact charge', solve('O',-N,'*',-N), True)
check('wrong signed charge', solve('O',N,'*',-N), False)
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
wildcard chargeTrueTruePassed
explicit neutral rejects ionFalseFalsePassed
neutral matchesTrueTruePassed
element mismatchFalseFalsePassed
wildcard element exact chargeTrueTruePassed
wrong signed chargeFalseFalsePassed

SHA-256 / f044a9535b0b536fb5ee5a9773aeb1cb97f3264c3c941328f117498030857cbe

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

Case digest / 79131f4a619fe65e492e049fd47f49d5d8529247bbaf2210616a26bd90ae42bb