kumulant

RegressionSplitNode

Routes by split to either pos (true) or neg (false). The optional carryover holds aggregates that don't structurally belong to either child; the pre-split data frozen at split time, or orphans absorbed from a mixed merge. Never written by the update hot path; never read by findLeaf or predict; included by subtreeAggregate.

Constructors

RegressionSplitNode

constructor(split: Split<Row>, pos: RegressionNode<Row>, neg: RegressionNode<Row>, carryover: SeriesStat<WeightedVarianceResult>? = null)(source)

Properties

carryover

One-shot carry-over aggregate, or null if the split holds no orphan data. Mutated only under the owning RegressionTree's split lock during merges; volatile so concurrent snapshots see a consistent reference.

neg

pos

split

Predicate routing observations into pos (true) or neg (false).

Functions

findLeaf

open override fun findLeaf(row: Row): RegressionLeafNode<Row>(source)

Walk to the leaf this row resolves to.

Link copied to clipboard

Public per-node subtree aggregate over all observations routed through this node (leaves: the arm snapshot; splits: the exact Chan-merge of both children plus any RegressionSplitNode.carryover). Lets callers score internal nodes — e.g. a Thompson walk-down that picks a branch by its subtree's posterior — without the tree having to keep a live arm on every split node. Equivalent to a directly-accumulated internal arm: Chan's parallel merge is exact for weighted-variance aggregates.

Link copied to clipboard

Freeze a live VectorView tree node into an immutable, serializable snapshot. Internal split aggregates are derived from the snapshotted children so the wire format stays stable even though live splits hold no arm.