Skip to content

v1.0.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 May 10:44
71e1199

functime 1.0.0

Stable release of functime. Time-series machine learning at scale, built on Polars.

This release modernizes the entire stack: Polars 1.x, Python 3.11+, uv-based builds and fixes all known bugs from the RC cycle.

Breaking Changes

  • Python >= 3.11 required (was >= 3.8)
  • Polars >= 1.0 required (was >= 0.20.8)
  • FLAML >= 2.3.0 required (was >= 2.0.2) - older versions crash on NumPy 2.x
  • Rust toolchain moved from nightly to stable (1.94); pyo3 ABI target is now abi3-py311

What's New

New APIs

  • functime.preprocessing.log1p - log(1+x) transformer with exp(x)-1 inverse, for positive-valued time series
  • functime.conversion.wide_to_long / long_to_wide - convert between wide and panel (long) DataFrame formats
  • functime.metrics.probabilistic - new module with crps, interval_coverage, and winkler_score metrics
  • Quarterly frequency support - freq_to_sp("1q") now returns [4]; "1q" accepted by all forecasters

Bug Fixes

  • Fixed circular import that made from functime.backtesting import backtest unusable (#265)
  • Fixed naive.backtest() crashing with KeyError: 'regressor' - non-autoregressive models now compute residuals correctly (#265)
  • AutoML forecasters now reject invalid kwargs (e.g. n_evals) with a clear error instead of silently passing them to sklearn (#265)

Polars 1.x Compatibility (#263)

  • Migrated to register_plugin_function (new plugin API)
  • Use collect_schema().names() instead of LazyFrame.columns
  • Handle rle struct field name changes (value/len → values/lengths)
  • Add returns_scalar=True to map_elements calls where needed
  • Avoid string replacement on categorized columns
  • Remove unsupported hourly frequency in date_range

Infrastructure (#263)

  • Build tooling switched from pip + Makefile to uv + justfile with uv.lock for reproducible environments
  • Replaced removed scipy.signal.ricker with a local implementation (removed in scipy 1.15)
  • Switched boxcox/yeojohnson/normality_test from map_elements to map_batches
  • CI test matrix: Python 3.11 / 3.12 / 3.13
  • Updated PyPI classifiers

Dependencies

Dependency Old New
Python >= 3.8 >= 3.11
Polars >= 0.20.8 >= 1.0
FLAML >= 2.0.2 >= 2.3.0
scipy == 1.14.1 >= 1.11

Test Results

407 passed, 8 skipped (optional deps: catboost, lightgbm, xgboost)

Thanks a lot for the contributors: @fabianbergermann @tjader and @baggiponte