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.