Moving-Average Smoothing
stats.describe summarises a whole sample and timeseries rolls counters
into rates, but nothing smoothed a noisy signal or weighted recent points. This
adds trailing simple / weighted / exponentially-weighted moving averages and a
generic rolling reducer.
Pure standard library; imports no PySide6. Every function is pure (values
in, list out), so it is fully deterministic in CI.
Headless API
from je_auto_control import sma, wma, ewma, rolling
sma([1, 2, 3, 4], 2) # [1.0, 1.5, 2.5, 3.5]
ewma([1, 2, 3], alpha=0.5) # [1.0, 1.5, 2.25]
wma(values, [1, 2, 3]) # weights align to the latest points
rolling(values, 5, max) # generic trailing-window reduction
sma averages each trailing window of window points; wma applies the
given weights (latest-aligned); ewma smooths with factor alpha in
(0, 1]; rolling applies any reducer over each trailing window. All
return a same-length list, so the result lines up with the input timeline (a
resource_profiler FPS/CPU series, a latency stream, etc.).
Executor commands
AC_sma returns {series} for values over a window; AC_ewma
returns {series} for an alpha. Both are exposed as MCP tools (ac_sma
/ ac_ewma) and as Script Builder commands under Data.