orthonym.assembly.handlers.ring_ester#
Note
Internal API. Names and behaviour may change between releases.
a phase ring_ester handler — Tier-2 mid-tier direct-return.
Verbatim lift of composer.py:850-865 (inline dispatch branch). Body
_assemble_ring_with_ester_prefixes at composer.py:3204-3455 (254 LOC)
STAYS until Plan-03 commit 03-10 (composer.py thinning) per internal notes.
Predicate gates on:
1. principal_group == 'ester'
2. exocyclic_esters from rules.esters.detect_exocyclic_esters(features.mol)
3. not _is_complex_ring_system(features.mol)
ring_ester fires BEFORE polyfunctional + ester-family + Tier-A in the inline cascade order (composer.py:850), so no additional mutex is needed.
Byte-identical contract per internal notes (DECOMP-03): handler’s behavior on every canary fixture MUST equal the inline branch’s behavior bit-for-bit; verified by python scripts/verify_decomp_byte_identical.py –mode delta at the atomic commit gate.
IUPAC cite: (cyclic ester with exocyclic substituents).
References:
- composer.py:850-865 (inline dispatch branch; REMOVED at this commit).
- composer.py:3204-3455 (_assemble_ring_with_ester_prefixes body; STAYS
until 03-10 thinning).
composer.py:_is_complex_ring_system (mutex helper).
rules.esters.detect_exocyclic_esters (predicate helper).
internal notes-DECOMP.md row ‘ring_ester’ + Tier-2 row.
- orthonym.assembly.handlers.ring_ester.name_ring_ester(features, mol=None, style='pin')#
Direct-return ring_ester handler.
Verbatim semantics of composer.py:850-865. Returns
NamingResult(name=<stereo-injected name>, tree=None, atom_to_locant_hint=None)on success. Wraps the result in_inject_stereo_if_missingper the inline branch behavior at composer.py:865.