v1.10.0
[1.10.0] — 2026-07-27
The dense-grid fill primitive (ADR-026) — unblocks pandas-free FAO ingestion (#203).
Additive MINOR; CONFORMANCE_FLOOR stays 1.0.0.
Added
frame.reindex_fill(other, *, fill_value)on all three sibling frames
(PredictionFrame/FeatureFrame/TargetFrame, WET per ADR-011): align toother's
rows with no superset requirement — present rows pass through bit-exact, absent
rows get the caller'sfill_valuebroadcast across the trailing axes (NaNlegal;
keyword-only and required — no silent default, ADR-009). The result's index is
other; metadata (andfeature_names) preserved. Owns the-1-sentinel scatter once:
a consumer hand-rollingvalues[pos]silently picks the last row for absent cells.
Inherits the C-21 row-uniqueness stance (unique rows assumed in self; duplicate
target rows allowed and repeat).SpatioTemporalIndex.cartesian(times, units, level): the dense product-index
constructor — every(time, unit)combination in canonical time-major order, from
explicit arrays only (deriving them, e.g. "units of the last time step", is
consumer policy). Fails loud on duplicated input values (a duplicated product input
manufactures duplicate rows → undefined same-level joins, C-21).assert_reindex_fill_lawin the published conformance suite (ADR-016): result
index equals the target row-for-row; present rows bit-exact; absent rows equal the
fill (NaN-safe); on a superset frame the fill degenerates toreindex.- Consumer note: faoapi's
dense_grid.pycan now delegate (its last-step-entity rule +
C-87 dropped-entity check stay consumer-side) and drop its pandas implementation
(faoapi #242). Densification allocates the full dense buffer — a deliberate, costly
act at grid scale (documented on both symbols).