Time spent in each zone, bucketing values by the ascending edges and
summing per-sample dt. pond byColumn({ edges, inclusive: '(]' }) over the
value axis — Coggan-style inclusive-upper bins natively (a sample exactly
on a boundary counts in the lower zone), no ε-nudge. Non-finite values are
dropped (can't be placed); sub-zero clamps to the bottom zone. pond 0.30 made
the floor edge of '(]' inclusive (the include_lowest convention), so a 0
sample (a stop / coast) lands in zone 1 with the edges passed as-is — no
floor-push needed (F-inclusive-floor, resolved in 0.30).
Time spent in each zone, bucketing
valuesby the ascendingedgesand summing per-sampledt. pondbyColumn({ edges, inclusive: '(]' })over the value axis — Coggan-style inclusive-upper bins natively (a sample exactly on a boundary counts in the lower zone), no ε-nudge. Non-finite values are dropped (can't be placed); sub-zero clamps to the bottom zone. pond 0.30 made the floor edge of'(]'inclusive (theinclude_lowestconvention), so a 0 sample (a stop / coast) lands in zone 1 with the edges passed as-is — no floor-push needed (F-inclusive-floor, resolved in 0.30).