Release 0.7.0 — Unified PyO3 (abi3) FFI + complete TA-Lib surface
Date: 2026-07-13
Install: pip install quantwave or pip install "quantwave[polars]"
Headline
QuantWave 0.7.0 unifies the entire Python FFI onto a single PyO3 (abi3) extension, retiring the previous multi-crate / uniffi setup, and ships a complete classic TA-Lib surface — 161 functions, up from 8. One maturin build now produces one cp39-abi3 wheel that installs correctly across CPython 3.9–3.13.
What's new
Complete classic TA-Lib surface (quantwave.talib)
- 161 functions, up from 8 — RSI, MACD, SMA, EMA, ATR, ADX, BBANDS, STOCH, OBV, all 61 candlestick patterns, plus the math and price transforms.
- The classic array-in / array-out API (
talib.RSI(close, timeperiod=14), multi-output tuples, OHLC / candlestick inputs) delegates to the Polars.taplugins — so the values are the same talib-rs parity-tested Rust results, not a separate implementation. - Top-level native symbol access restored:
qw.FracDiff,qw.fracdiff,qw.rsi,qw.SuperTrend, … bind alongside the slug-basedqw.tanamespace.
Unified PyO3 (abi3) FFI
- Single extension, single wheel. The indicator bindings, the Polars expression plugins, and the backtest engine are now one PyO3
abi3-py39extension in a single crate (quantwave-py) producing one cdylib. A singlematurin buildyields onecp39-abi3wheel — no wheel-merge step. - Collapsed the three former PyO3 crates (
quantwave-python,quantwave-plugins,quantwave-backtest-py) intoquantwave-py; removed the custombuild_unified_wheel.pyand consolidated to onepyproject.toml. - uniffi retired in favor of PyO3 end-to-end.
Install correctness
- The published wheel is now
cp39-abi3and installs correctly on CPython 3.9–3.13. (0.6.1 had shipped apy3-nonewheel bundling CPython-3.12-only extensions, which brokepip installon 3.9 / 3.10 / 3.11 / 3.13.)
Upgrade notes
- No breaking changes to the indicator or backtest call surfaces — existing
.ta/.btcode is unchanged. - The classic
quantwave.talibnamespace is now fully populated; if you previously shimmed missing talib functions, you can drop the shims. - Reinstall to pick up the corrected wheel tag:
pip install --upgrade quantwave(or"quantwave[polars]").
Quality gates
What's next
See Roadmap. Since 0.7.0, the execution-realism epic has landed on the backtester: first-class order types (limit / stop / stop-limit / bracket / OCO), risk overlays (vol-target, inverse-vol, position-limit), portfolio rebalance policies, Bayesian (TPE) walk-forward optimization, and benchmark-relative reporting — all preserving batch ↔ streaming parity.