Unreleased¶
build¶
- Added Python 3.14 wheel builds and updated PyO3 for 3.14 support.
- Replaced poetry with uv for dependency management.
datasets¶
- Fixed download in Insects dataset. The datasets incremental_abrupt_imbalanced, incremental_imbalanced, incremental_reoccurring_imbalanced and out-of-control are not supported anymore.
- Refactored
benchmarksand added plotly dependency for interactive plots - Added the BETH dataset for labeled system process events.
- Fixed
SMTPdataset docstring: corrected the number of positive labels from 2,211 to 30 and updated the reference link.
cluster¶
- Fixed DBSTREAM including noisy micro-clusters (weight below
minimum_weight) in output clusters. They are now excluded during reclustering, matching the original paper.
forest¶
- Added
max_nodesparameter toAMFClassifier,AMFRegressor, and the underlying Mondrian tree classes. This caps the number of nodes per tree, limiting memory usage for long-running streams. Addresses #1454.
drift¶
- Optimized
ADWINCython internals (~18x speedup): replaced numpy arrays with Cmalloc/memmovearrays inBucket, replaced Pythondequewith typedlist, used bit shifts instead ofpow, inlinedvariance_in_window, and added Cython compiler directives.
dummy¶
The dummy module is now fully type-annotated.
stats¶
- Added
update_manymethod tostats.PearsonCorr. - Changed the calculation of the Kuiper statistic in
base.KolmogorovSmirnovto correspond to the reference implementation. The Kuiper statistic uses the difference between the maximum value and the minimum value. - Fixed
RollingQuantilenot storingqas an instance attribute, which causedclone()to fail. - Optimized
Var.update/revertandCov.update/revertby replacingMean.get()method calls with direct_meanattribute access and inlining property lookups (~19% speedup each). - Optimized
KolmogorovSmirnovtreap internals: replaced class-basedTreapwith__slots__nodes and module-level functions, inlined lazy propagation, and eliminated builtinmax/minoverhead. This yields a 2.65x speedup on update/revert operations.
compat¶
- Adapted sklearn compatibility layer to sklearn 1.8: replaced
_more_tagswith__sklearn_tags__, switched fromcheck_X_y/check_arraytovalidate_data, fixed mixin inheritance order, and updated binary classifier validation.
metrics¶
- Fixed
AdjustedMutualInfoto return 0.0 when only one class or one cluster exists, and to handle the 0/0 edge case for perfect matches with small samples, aligning with sklearn 1.8 behavior. - Fixed
KeyErrorinSilhouettemetric when used with clusterers that haven't initialized their centers yet (e.g.,CluStreamduring its warmup phase). - Optimized
ConfusionMatrixby inlining_updateintoupdate/revert(~10% speedup) and cachingtotal_true_positivesas an incrementally maintained counter (99% speedup on access). - Cached
requires_labelsinBinaryMetric.__init__to avoid property lookup on everyupdate/revertcall.
evaluate¶
- Optimized
progressive_val_scoreanditer_progressive_val_scorewith a fast path for the common no-delay case. The evaluation loop now iterates the dataset directly, skipping thesimulate_qagenerator and internal prediction buffer. Combined with cachingmodel._supervisedandmetric.update, this yields a 1.5x speedup on typical workloads.
stream¶
- Added a fast path in
simulate_qafor the no-delay, no-moment case, skipping the memento queue machinery.
base¶
- Added
EstimatorMetametaclass so thatisinstanceworks transparently with pipelines. For example,isinstance(scaler | log_reg, [base.Classifier](../../api/base/Classifier))now returnsTrue. This removes the need forutils.inspecthelper functions (isclassifier,isregressor, etc.), which have been removed.
proba¶
- Optimized
Gaussian.__call__by inlining property accesses, and addedGaussian.log_pdfmethod that computes log-density directly withoutexp/sqrt. This speeds up Naive Bayes prediction in all Hoeffding Tree classifiers and their ensembles by 12–22%.
tree¶
- Added
cond_log_probatoGaussianSplitterand optimizeddo_naive_bayes_predictionto use direct log-probabilities, avoiding theexp/loground-trip. - Added handling for division by zero in
tree.hoeffding_treefor leaf size estimation.
neighbors¶
- Added function in nearest-neighbor engines to gather relevant classes/targets from the window.
- Added a virtual function to the base engine class; New NN engines need to override
refresh_targetsfunction - Classifier KNN now calls this engine-specific function under
clean_up_classes()
utils¶
- The
utilsmodule is now fully type-checked. utils.VectorDictandutils.SortedWindoware now parametrised generic containers.utils.VectorDictnow implements the reflected operations of addition, subtraction and multiplication.