orthonym.rules.purine_oxo#
Note
Internal API. Names and behaviour may change between releases.
Substituted purine-2,6-dione naming retained purine parent; fixed purine numbering; dione suffix).
The purine-2,6-dione parent (the xanthine skeleton) is named systematically as
3,{X}-dihydro-1H-purine-2,6-dione, where {X} (7 or 9) is the locant of the
saturated five-membered-ring nitrogen – derived per-structure, NOT hardcoded:
the common methylxanthines (caffeine, theobromine, theophylline, paraxanthine,
the mono-methylxanthines) are the 3,7- form, but an N9-substituted isomer is the
3,9- form. A substituted member’s PIN is the substituent prefixes placed at their
fixed purine locants on that parent. All forms were verified by OPSIN round-trip
on 2026-07-17 (named family + novel 1-ethyl-3,7-dimethyl / 8-bromocaffeine /
8-alkyl / N9-substituted patterns).
This engine reads the locants from an atom-mapped substructure match (the purine numbering is unambiguous because the skeleton is asymmetric) and reuses the fused-heterocycle substituent identifier/assembler.
Accuracy-first, fail-closed: it returns None – so the caller falls through
to another handler and a wrong name is never emitted – unless every substituent
is a hydrocarbyl (alkyl/aryl, as typed ‘alkyl’ by the shared identifier) or a
halogen on a bare purine-2,6-dione ring system whose imidazole has exactly one
saturated N. Functional/heteroatom substituents, a C8=O (purine-2,6,8-trione,
i.e. the uric-acid family), extra fused rings, and the unsubstituted parent all
decline here (the unsubstituted parent keeps its retained name via another path).
This module owns the purine-2,6-DIONE (xanthine/caffeine family) only. The
-oxo case (hypoxanthine/guanine) lives in rules/purine.py::name_oxo_purine.
- orthonym.rules.purine_oxo.name_purine_26_dione(mol)#
Return the systematic PIN for a substituted purine-2,6-dione, else None.