starplast.organisms
The organism registry: one declaration per species space, instead of literals in fifty files.
Starplast grew from one organism to two by copying: slots.SPECIES_TABLES, app.SPECIES,
strategies.Context.shipped, the calibration targets, the slot generator's stages and the
localization abbreviations each carry their own "Tg"/"Pf" table. Adding the next species -- a
host, a vector, another apicomplexan -- would have meant editing every one of them, and missing one
fails silently (several lookups default to Toxoplasma). This module is the one place a space is
declared; everything else is to read from it (instruction 53, step R0 onward).
A space is one species' own gene table, graph, slots and calibration. Spaces are never merged: orthology and host-pathogen interfaces are bridges between them, declared per space.
One species' space: what it is, how its genes are named, and where its tables live.
Add a space. A code used twice, or a kind outside parasite/host/vector, is refused.
One space by code, or a KeyError naming the ones that exist.
Space codes in registry order, optionally of one kind or only those whose table is present.
The space whose species is name (as the menus show it).
Where a space's node table lives (honouring STARPLAST_CACHE, as every table does).
Where a space's edge layers live.
code -> node table file: what slots.SPECIES_TABLES holds.
code -> accession prefixes: what slots.SPECIES_PREFIXES holds.
The space whose canonical ids MOST of gene_ids fully match; None if none reaches half.
A majority of full matches rather than the first prefix that appears anywhere: one stray accession from another species must not decide what a whole table is.