schema.ops
The composition operators for the wire specs in com.eignex.kumulant.schema. Each operator is an extension on a modality-specific spec that returns another spec, so compositions stay pure data and round-trip on the wire exactly like the leaf specs they wrap. They are the spec-side mirror of the live operators in com.eignex.kumulant.operation: where the live form wraps a running stat, the form here wraps its spec, and the two produce the same behaviour once materialized.
What you can compose
The operators cover the same ground as the live package. Input-side wrappers change what a stat sees: weighting and fixed-value injection, windowing, sampling and throttling, lagging and feedback, and the adapters that move a stat between modalities (a series stat reading the x of a pair, a vector coordinate, and so on). Output-side wrappers change what it reports: folding and projecting results, the scalers, and the band around a center-scale result.
AST-backed operators
The operators that take a projection or a predicate, such as filtering, transforming, and weighting by a computed value, accept an expression tree from com.eignex.kumulant.schema.expr rather than a live lambda, so the whole composition still serializes. When a projection cannot be expressed as that AST, the operation has no spec form and stays a live-only lambda on the com.eignex.kumulant.operation side.
Functions
Adapt a series spec into a discrete spec - the discrete sees value.toLong() per update.
Adapt a discrete spec into a series spec - the series sees value.toDouble() per update.
Adapt a series spec into a vector spec by consuming the index-th coordinate of each vector.
Adapt a series spec into a paired spec by consuming the x component of each pair.
Adapt a series spec into a paired spec by consuming the y component of each pair.
Wrap this series spec to expose a [lower, upper] band of width k * scale around center.
Wrap this series spec to forward the per-second time derivative of the value stream.
Wrap this series spec to forward the k-th difference value - value[t - k].
Wrap this discrete spec so updates are forwarded only when pred evaluates true.
Wrap this paired spec so updates are forwarded only when pred evaluates true on (x, y).
Wrap this regression spec so updates are forwarded only when pred evaluates true.
Wrap this series spec so updates are forwarded only when pred evaluates true.
Wrap this vector spec so updates are forwarded only when pred evaluates true on the full vector.
Lift this series spec to a paired spec, reducing every (x, y) to a scalar via expr.
Lift this series spec into the regression modality. project reduces each (x = V, y = Y) update to a scalar that the inner series stat absorbs. Use Y for the marginal-y view.
Lift this series spec to a vector spec, reducing every vector to a scalar via expr.
Wrap this series spec to debounce its input into a 0.0/1.0 stream via two-threshold hysteresis.
Wrap this series spec to forward the value seen k updates ago.
Element-wise min-max scale a regression spec's feature vector.
Element-wise min-max scale a vector spec against a hidden per-coordinate Range primary.
Min-max scale both axes of a paired spec against per-axis Range primaries.
Wrap this series spec to forward one per-bucket summary using aggregator.
Element-wise standardise a regression spec's feature vector.
Element-wise standardise a vector spec against a hidden per-coordinate Variance primary.
Wrap this discrete spec so it only sees one in every every updates.
Wrap this paired spec so it only sees one in every every updates.
Wrap this regression spec so it only sees one in every every updates.
Wrap this series spec so it only sees one in every every updates.
Wrap this vector spec so it only sees one in every every updates.
Wrap this vector spec to apply expr to every element of each incoming vector before update.
Wrap this vector spec so each incoming vector is remapped through expr before update.
Map only the x coordinate; y stays as-is.
Wrap this regression spec so x is remapped by expr before the inner stat sees it.
Map only the y coordinate; x stays as-is.
Wrap this regression spec so y is remapped by expr before the inner stat sees it.
Lift a series spec to a vector spec by replicating it across every coordinate of an N-dim input.
Wrap this discrete spec so every update's weight is multiplied by expr.eval(value.toDouble()).
Wrap this paired spec so every update's weight is multiplied by expr.eval(x, y).
Wrap this regression spec so every update's weight is multiplied by expr.eval(0, y, v).
Wrap this series spec so every update's weight is multiplied by expr.eval(value).
Wrap this vector spec so every update's weight is multiplied by expr.eval(0, 0, vec).
Wrap this discrete spec in a sliding time window of durationMillis split into slices buckets.
Wrap this paired spec in a sliding time window of durationMillis split into slices buckets.
Wrap this series spec in a sliding time window of durationMillis split into slices buckets.
Wrap this vector spec in a sliding time window of durationMillis split into slices buckets.
Wrap this inner series spec with a feedback primary; the projection AST sees the primary snapshot.
Adapt a paired spec into a series spec by pinning x to fixedX.
Adapt a paired spec into a series spec by pinning y to fixedY.
Lift a paired spec into a series spec by self-pairing each input with the value seen k updates ago.
Adapt a paired spec into a series spec by using the update timestamp as x.
Adapt a paired spec into a series spec by using the update timestamp as y.
Wrap this discrete spec so every update applies the per-observation weight multiplier.
Wrap this paired spec so every update applies the per-observation weight multiplier.
Wrap this regression spec so every update uses weight regardless of caller input.
Wrap this series spec so every update applies the per-observation weight multiplier.
Wrap this vector spec so every update applies the per-observation weight multiplier.