orthonym.assembly.handlers.general_acyclic#
Note
Internal API. Names and behaviour may change between releases.
a phase general_acyclic catch-all handler (DECOMP-01 closure).
Per internal notes + -02 + internal notes RESEARCH: explicit catch-all (priority 99999, predicate=lambda *_: True) closing the Plan-02 fallthrough gap so dispatch_inner first-match-AND-succeeds-wins (-04) ALWAYS returns a non-None InnerDispatchResult.
LIFT SOURCE: composer.py:951-1055 chain-fallback section (verbatim, with
helper calls re-routed from local composer scope to
from._handler_shared import _generate_chain_parent, _generate_ring_parent,
_generate_suffix, _generate_prefixes, _generate_stereodescriptors,
_assemble_fragments; final return candidate_name replaced by a
pool-carried NamingResult(name=best.name, tree=best.tree,...)).
IUPAC cite: + + (catch-all substitutive nomenclature).
a phase SCORE-01: emits a STRUCTURED NameTreeNode derived from its own
fragment list via fragments_to_tree (Path A), attached through the
CandidatePool tree= carry. The returned tree is read off the winning
candidate (best.tree) so a higher-priority handler’s win is never
mislabelled with a general_acyclic tree.
CRITICAL: this handler lifts ONLY the chain-fallback section. The cycloalkane stereo backstop at composer.py:1057-1097 STAYS in _assemble_name_impl (orchestrator applies it AFTER dispatch_inner returns) per internal notes.
- orthonym.assembly.handlers.general_acyclic.name_general_acyclic(features, mol=None, style='pin')#
General catch-all chain/ring fallback (DECOMP-01 closure; a phase).
Verbatim lift of composer.py:951-1055 (chain-fallback section). Helper calls re-routed from composer.py local scope to
_handler_sharedimports. String output MUST be byte-identical per DECOMP-03 contract.Returns NamingResult(name=…, tree=<structured NameTreeNode>, atom_to_locant_hint=None); the tree is read off the winning pool candidate (a phase SCORE-01).