Skip to content

πŸ₯³ Brand New Algorithm & Zensical Migration

Latest

Choose a tag to compare

@simonprovost simonprovost released this 22 Apr 09:19
· 11 commits to main since this release

Hi folks!

We are pleased to announce that Scikit-Longitudinal is now available as 0.1.9 πŸŽ‰

PyPI: https://pypi.org/project/Scikit-longitudinal/0.1.9/

❝ In a nutshell, what's new in 0.1.9?

A brand-new algorithm β€” Time-Penalised Trees (TpT). Thanks to the long-awaited external contribution by @MathiasValla (#80, paired with scikit-lexicographical-trees#1), Sklong now ships TpTDecisionTreeClassifier: a depth-first, Gini-criterion tree-based learner aware of time-varying covariates, with its own Cython splitter aligned with the existing tree stack.

➜ Long ⇄ Wide on LongitudinalDataset. Long-to-wide and wide-to-long reshaping are now a class feature of LongitudinalDataset (#88, closing #64). This removes the temporary in-tree path that TpT was carrying, yet motivated this #88 very much to be honest, and comes with edge-case test coverage, andwith a full Long ⇄ Wide reshape tutorial walkthrough.

➜ Multi-class everywhere. 0.1.9 (well, since 0.1.8 strictly speaking) brings end-to-end multi-class support across the Sklong stack (#83, closing #75): Lexicographical Decision Tree / Random Forest / Deep Forest / Gradient Boosting classifiers, Nested Trees, and the SepWav voting and stacking meta-learners. Alongside this, we expose a true AUPRC metric with multi-class support in scikit_longitudinal.metrics, and a new Binary vs. Multiclass tutorial.

➜ Goodbye mkdocs-material, hello Zensical. The whole documentation stack has been migrated to Zensical: a new zensical.toml at the repo root (no more mkdocs.yml), reorganised guides and API reference, dedicated estimator reference pages for trees and ensembles, refreshed homepage interactions, refreshed branding/badges/banner assets, FAQ rewritten as collapsible guidance, Read the Docs config aligned with Zensical, and tutorials animated with Manim-rendered light/dark AVIFs (#89). Zensical was needed, it's a miles away improvement on Material for MKDocs in our humble opinions.

➜ Python 3.10 β†’ 3.13. Since v0.1.0 we extended the supported Python range to 3.10–3.13 (#74, #76), with a dedicated 3.13 publish CI job. Python 3.13 was made possible thanks to deep_forest_py310#2, and Python 3.13 was suggested by @manuelmenendezgonzalez from @Fundacion-de-Neurociencias β€” thank you for that!

➜ Sample-weight & class-weight propagation. Sample weights now flow correctly through Sklong primitives, including SepWav and the CFS transform handler (#67, #68), and class_weight is propagated through estimators and SepWav meta-learners (#69, #70, #71).

➜ OSS hygiene. Refreshed MIT LICENSE, brand-new Code of Conduct, Contributing & Security policies (#79), and a switch from Markdown to YAML issue templates.

Note

❝ Open-Source Contribution, More Than Welcome! ❞
A massive thanks to @MathiasValla for landing TpT; after myself being quite long at reviewing it all! this is exactly the kind of external, literature-backed estimator that we want Sklong to attract more of. New primitives are very welcome from external contributors: please open an issue first to discuss, and we will help you wire it through the templates / discovery / docs.

❝ I guess it's now time for tech-ish changelog!

[v0.1.9] - 2026-04-22 - Time-Penalised Trees, Multi-class, Long ⇄ Wide, and the Zensical migration

Added

  • TpT Decision Tree Classifier and supporting Cython splitter / depth-first builder β€” #80, thanks to @MathiasValla.
  • Long ⇄ Wide reshape API on LongitudinalDataset β€” #88, closing #64.
  • True multi-class AUPRC metric (auprc_score) β€” #83.
  • AggrFunc pipeline transform handler.
  • Multi-class support in: Lexico tree / forest / deep-forest / gradient-boosting classifiers, Nested Trees, SepWav voting & stacking β€” #83, closing #75.
  • Sample-weight propagation through Sklong primitives, including SepWav and CFS transform handler β€” #67, #68.
  • Class-weight propagation through estimators and SepWav meta-learners β€” #69, #70, #71.
  • Python 3.13 support, including a 3.13 publish CI workflow β€” #76.
  • Python 3.10+ range officially supported, with optional Ray parallelisation module β€” #74.
  • Open-source best practices: MIT LICENSE refresh, Code of Conduct, Contributing & Security policies β€” #79.
  • New API reference landing pages and per-estimator reference pages for trees and ensembles β€” #87.
  • New tutorials: Advanced temporal features-group setup (#82), Long ⇄ Wide reshape, Binary vs. Multiclass.
  • Multi-language podcast player on the homepage and Atlas of Longitudinal Datasets in related projects.
  • Manim-rendered light/dark AVIFs for tutorial animations β€” #89.

Enhanced

  • Documentation: full migration to Zensical (zensical.toml replaces mkdocs.yml), refreshed homepage / navbar / search bar / theme (#84), MathJax integration, refreshed README branding and visuals, refreshed community hub pages, getting-started flow rewritten for 0.1.8+, FAQ rewritten as collapsible guidance, troubleshooting moved into developer docs (#78).
  • Templates: documented public fit / predict / transform wrappers, clarified the _fit / _predict / _transform overrides expected on subclasses.
  • Estimator and data-preparation docstrings tidied and unified across the codebase; CFS / CFS-per-group docstrings trimmed.
  • Discovery: TpT estimators registered in the allow-lists.
  • Build: pinned setuptools<81, refreshed uv.lock, removed pylint from dev tooling, switched issue templates from Markdown to YAML, inlined coverage config, dropped legacy mkdocs / RTD overrides, RTD custom-jobs install dependencies.
  • TpT: removed the temporary in-tree long-to-wide preprocessing path now that LongitudinalDataset owns it.
  • CI: added the Python 3.13 publish job; tests are still triggered via the [cd tests] commit-message marker.
  • Upgraded Zensical to 0.0.33 and scikit-lexicographical-trees to its latest fork release.

Resolved

  • SepWav sample-weight not passing through wrapper decorators β€” #68.
  • Pipelines now correctly support resampling transformers and SepWav handling.
  • Multi-class regressions previously blocking #75.
  • Docs: removed the auto max_features option from the tuning tutorial, fixed broken hyperlinks, normalised the document-dates cache, fixed Read the Docs build Python version, MkDocStrings option-rule fixes prior to the Zensical migration.

Removed / Migrated

  • mkdocs.yml and mkdocs-material configuration (replaced by zensical.toml).
  • experiments/ folder (work now lives in dedicated branches for reproducibility).
  • Legacy Getting Started page and unused image assets.

❝ Versions folded into this release

These were published to PyPI between v0.1.0 and 0.1.9 without a GitHub release of their own. We are summarising them here for completeness:

Version Theme Key PRs
0.1.1 Sample-weight support #67
0.1.2 Sample-weight pass-through fix #68
0.1.3 class_weight propagation #69
0.1.4 SepWav class_weight propagation #70
0.1.5 SepWav meta-learner class_weight propagation #71
0.1.6 Python 3.10+ support, optional Ray module #74
0.1.7 Python 3.13 support #76
0.1.8 Multi-class everywhere, new tutorials, new homepage UI / navbar / search bar, MathJax #82, #83, #84
0.1.9 TpT, Long ⇄ Wide, Zensical migration, refreshed API reference, animated tutorials #80, #87, #88, #89

Cheers! πŸ’œ