Status: private engine infrastructure, first admitted by the VED-011 marriage performance work. This standard governs exact reuse within one owned computation scope. It does not establish a public cache API or cross-request service.
A memo retains the immutable result of one deterministic computation for the same exact inputs and the same bound dependencies. Reuse removes duplicate execution; it neither interpolates a result nor substitutes a nearby epoch, smaller interval, different source or different numerical regime.
moira/_bounded_memo.py provides bounded_memo(function, key=..., maxsize=...)
and binary64_key. The module depends only on the standard library and has no
marriage, reader, calendar, frame or policy dependency. Every wrapper owns its
own bounded LRU, creating-thread identity and statistics. No global result
store retains finished requests or borrowed resources.
cache_clear; the helper cannot infer scientific equivalence.maxsize=0 retains no results;
positive capacities evict the least recently used entry. This is an entry
bound, not a claim of a universal process-memory limit.None may be a legitimate immutable result when the
owning computation explicitly gives it that meaning.cache_info() returns detached hit/miss/capacity/size observations;
cache_clear() releases entries and resets those observations. __wrapped__
retains the original callable for scoped differential validation. No runtime
configuration, optional dependency or public selector is introduced.
The marriage request owns five pure-computation memos:
| Owner | Reused object | Capacity |
|---|---|---|
AstronomyEnclosures |
TT differential to TDB differential | 4,096 |
AstronomyEnclosures |
TDB differential and record layout to all admitted record arguments | 8,192 |
FrameEnclosures |
TT differential to frame precession polynomials | 4,096 |
FrameEnclosures |
TT differential plus coarse/precise mode to full frame angles | 4,096 |
FrameEnclosures |
Angle differential to its ordered cosine/sine pair | 4,096 |
All rounded arithmetic schedules, branch families and source-domain checks are retained. Coarse and precise modes share the same precession polynomials only; their nutation enclosures remain distinct. Frame rotations still perform the same ordered operations with the exact original trigonometric results.
The serving pair() owner still selects the reader/descriptor, checks source
identity and seams, and charges its work meter before asking for record
arguments. Public evaluation/reader/root counters keep their existing meaning.
These new memos remove unmetered duplicate arithmetic, not accounted work.
Another engine owner may use the same helper after declaring its own stable
dependencies, exact key, immutable result and finite capacity. A tested example
outside marriage wraps the existing julian.tt_to_tdb calculation with an
exact binary64 epoch key. That demonstrates independence from marriage; it does
not enable persistent caching of arbitrary ephemeris results.
Before another production admission, verify key distinctions, dependency isolation, eviction/recomputation, failure retry, ownership/lifetime, budget placement and exact output equivalence against the uncached computation. Keep that product’s independent authority and invariant tests. Regression identity demonstrates preservation; it is not a new external astronomical oracle.
See the marriage reuse validation receipt for measurements, source fingerprints and the executed acceptance corpus.