Skip to content

Commit

Permalink
Merge branch 'main' into quick-soft-dep-check
Browse files Browse the repository at this point in the history
  • Loading branch information
fkiraly committed Jun 20, 2024
2 parents b75fc82 + 6fb8161 commit b3c164c
Show file tree
Hide file tree
Showing 121 changed files with 4,089 additions and 1,435 deletions.
31 changes: 31 additions & 0 deletions .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -2842,6 +2842,37 @@
"code",
"doc"
]
},
{
"login": "gareth-brown-86",
"name": "Gareth Brown",
"avatar_url": "https://avatars.githubusercontent.com/u/89069265?s=400&u=f6dc19c786a1762fcb7cdbb04f7f30bee9bd0240&v=4",
"profile": "https://github.com/gareth-brown-86",
"contributions": [
"code",
"bug"
]
},
{
"login": "duydl",
"name": "Duy Do Le",
"avatar_url": "https://avatars.githubusercontent.com/u/56506156?v=4",
"profile": "https://github.com/duydl",
"contributions": [
"code",
"doc",
"maintenance"
]
},
{
"login": "ksharma6",
"name": "Kishen Sharma",
"avatar_url": "https://avatars.githubusercontent.com/u/142558351?v=4",
"profile": "https://github.com/ksharma6",
"contributions": [
"bug",
"code"
]
}
]
}
8 changes: 4 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ jobs:
run: python -m pip list

- name: Run tests
run: make PYTESTOPTIONS="--cov --cov-report=xml --timeout=600" test_softdeps
run: make test_softdeps

test-nosoftdeps-full:
needs: test-nosoftdeps
Expand Down Expand Up @@ -156,7 +156,7 @@ jobs:
run: python -m pip list

- name: Run tests
run: make PYTESTOPTIONS="--cov --cov-report=xml --timeout=600" test_softdeps_full
run: make PYTESTOPTIONS="--cov --matrixdesign=False --timeout=600" test_softdeps_full

test-mlflow:
needs: test-nosoftdeps
Expand All @@ -178,7 +178,7 @@ jobs:
run: python -m pip list

- name: Run tests
run: make PYTESTOPTIONS="--cov --cov-report=xml --timeout=600" test_mlflow
run: make test_mlflow

test-cython-estimators:
needs: test-nosoftdeps
Expand Down Expand Up @@ -208,7 +208,7 @@ jobs:
run: python -m pip list

- name: Run tests
run: make PYTESTOPTIONS="--cov --cov-report=xml --only_cython_estimators=True --matrixdesign=False --timeout=600" test_check_suite
run: make PYTESTOPTIONS="--only_cython_estimators=True --matrixdesign=False --timeout=600" test_check_suite

- name: Publish code coverage
uses: codecov/codecov-action@v4
Expand Down
2 changes: 1 addition & 1 deletion .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ python:
build:
os: ubuntu-22.04
tools:
python: "3.11"
python: "3.12"

sphinx:
configuration: docs/source/conf.py
Expand Down
95 changes: 50 additions & 45 deletions CONTRIBUTORS.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

> A unified interface for machine learning with time series
:rocket: **Version 0.29.1 out now!** [Check out the release notes here](https://www.sktime.net/en/latest/changelog.html).
:rocket: **Version 0.30.1 out now!** [Check out the release notes here](https://www.sktime.net/en/latest/changelog.html).

sktime is a library for time series analysis in Python. It provides a unified interface for multiple time series learning tasks. Currently, this includes time series classification, regression, clustering, annotation, and forecasting. It comes with [time series algorithms](https://www.sktime.net/en/stable/estimator_overview.html) and [scikit-learn] compatible tools to build, tune and validate time series models.

Expand All @@ -15,7 +15,7 @@ sktime is a library for time series analysis in Python. It provides a unified in
| **Open Source** | [![BSD 3-clause](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/sktime/sktime/blob/main/LICENSE) |
| **Tutorials** | [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/sktime/sktime/main?filepath=examples) [![!youtube](https://img.shields.io/static/v1?logo=youtube&label=YouTube&message=tutorials&color=red)](https://www.youtube.com/playlist?list=PLKs3UgGjlWHqNzu0LEOeLKvnjvvest2d0) |
| **Community** | [![!discord](https://img.shields.io/static/v1?logo=discord&label=discord&message=chat&color=lightgreen)](https://discord.com/invite/54ACzaFsn7) [![!slack](https://img.shields.io/static/v1?logo=linkedin&label=LinkedIn&message=news&color=lightblue)](https://www.linkedin.com/company/scikit-time/) |
| **CI/CD** | [![github-actions](https://img.shields.io/github/actions/workflow/status/sktime/sktime/wheels.yml?logo=github)](https://github.com/sktime/sktime/actions/workflows/wheels.yml) [![!codecov](https://img.shields.io/codecov/c/github/sktime/sktime?label=codecov&logo=codecov)](https://codecov.io/gh/sktime/sktime) [![readthedocs](https://img.shields.io/readthedocs/sktime?logo=readthedocs)](https://www.sktime.net/en/latest/?badge=latest) [![platform](https://img.shields.io/conda/pn/conda-forge/sktime)](https://github.com/sktime/sktime) |
| **CI/CD** | [![github-actions](https://img.shields.io/github/actions/workflow/status/sktime/sktime/wheels.yml?logo=github)](https://github.com/sktime/sktime/actions/workflows/wheels.yml) [![readthedocs](https://img.shields.io/readthedocs/sktime?logo=readthedocs)](https://www.sktime.net/en/latest/?badge=latest) [![platform](https://img.shields.io/conda/pn/conda-forge/sktime)](https://github.com/sktime/sktime) |
| **Code** | [![!pypi](https://img.shields.io/pypi/v/sktime?color=orange)](https://pypi.org/project/sktime/) [![!conda](https://img.shields.io/conda/vn/conda-forge/sktime)](https://anaconda.org/conda-forge/sktime) [![!python-versions](https://img.shields.io/pypi/pyversions/sktime)](https://www.python.org/) [![!black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) |
| **Downloads** | ![PyPI - Downloads](https://img.shields.io/pypi/dw/sktime) ![PyPI - Downloads](https://img.shields.io/pypi/dm/sktime) [![Downloads](https://static.pepy.tech/personalized-badge/sktime?period=total&units=international_system&left_color=grey&right_color=blue&left_text=cumulative%20(pypi))](https://pepy.tech/project/sktime) |
| **Citation** | [![!zenodo](https://zenodo.org/badge/DOI/10.5281/zenodo.3749000.svg)](https://doi.org/10.5281/zenodo.3749000) |
Expand Down
29 changes: 27 additions & 2 deletions docs/source/api_reference/tags.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Tags are key-value pairs, where the key is a string with the name of the tag.
The value of the tag can have arbitrary type, and describes a property, capability,
or controls behaviour of the object, depending on the value.

For instance, a forecaster may have the tag ``capability:pred_int: True`` if it can
For instance, a forecaster may have the tag ``"capability:pred_int": True`` if it can
make probabilistic predictions.
Users can find all forecasters that can make probabilistic predictions by filtering
for this tag.
Expand All @@ -25,7 +25,7 @@ Inspecting tags, retrieving by tags

* to get the tags of an object, use the ``get_tags`` method.
An object's tags can depend on its hyper-parameters.
* to get the tags of a class, use the ``get_tags`` method of the class.
* to get the tags of a class, use the ``get_class_tags`` method of the class.
A class's tags are static and do not depend on its hyper-parameters.
By default, class tags that may vary for instances take the most "capable" value,
in the case of capabilities.
Expand Down Expand Up @@ -113,6 +113,7 @@ these types of objects.
capability__multioutput
capability__missing_values
capability__unequal_length
capability__predict_proba
capability__feature_importance
capability__contractable
capability__train_estimate
Expand Down Expand Up @@ -145,3 +146,27 @@ transform a single time series object (``"transformer"`` type).
capability__inverse_transform__range
fit_is_empty
transform_returns_same_time_index


.. _dev_common_tags:

Common developer tags
---------------------

This section lists tags that are used to control internal behaviour of objects,
e.g., the boilerplate layer.

These are primarily useful for power users using the extension
templates to create ``sktime`` compatible objects.

The tags below have limited use in retrieval or inspection of objects.

.. currentmodule:: sktime.registry._tags

.. autosummary::
:toctree: auto_generated/
:template: function.rst
:nosignatures:

x_inner_mtype
y_inner_mtype
153 changes: 153 additions & 0 deletions docs/source/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,159 @@ For upcoming changes and next releases, see our `milestones <https://github.com/
For our long-term plan, see our :ref:`roadmap`.


Version 0.30.1 - 2024-06-04
---------------------------

Minimal maintenance update with actions consolidating onboard packages.

For last major feature update, see 0.29.1.

Contents
~~~~~~~~

* [MNT] reorganization of onboard libs - ``pykalman``, ``vmdpy`` (:pr:`6535`) :user:`fkiraly`
* [MNT] differential testing for ``split`` module (:pr:`6532`) :user:`fkiraly`


Version 0.30.0 - 2024-06-03
---------------------------

Major upgrade to the time series anomaly, changepoints, segmentation API (:user:`Alex-JG3`).
Users should review the section in the release notes.

Kindly also note the python 3.8 End-of-life warning below.

Also includes scheduled deprecations and change actions.

For last major feature update, see 0.29.1.

Dependency changes
~~~~~~~~~~~~~~~~~~

* ``joblib`` is now an explicit core dependency, with bounds ``<1.5,>=1.2.0``.
Previously, ``joblib`` was an indirect core dependency, via ``scikit-learn``.
Due to direct imports, this was changed to an explicit dependency.

* ``scikit-learn`` (core dependency) bounds have been updated to ``>=0.24,<1.6.0``

* ``scikit-base`` (core dependency) bounds have been updated to ``>=0.6.1,<0.9.0``

* ``skpro`` (soft dependency) bounds have been updated to ``>=2,<2.4.0``

* ``kotsu`` is not longer a soft dependency required by the forecasting benchmarking
framework. The ``kotsu`` package is no longer maintained,
and its necessary imports have beend moved
to ``sktime`` as private utilities until refactor. See :pr:`6514`.

* ``pykalman`` (transformations soft dependency) has been forked into ``sktime``,
as ``sktime.libs.pykalman``, as the original package is no longer maintained,
see ``sktime`` issue 5414 or ``pykalman`` issue 109.

* The package fork will be maintained in ``sktime``.
* Direct users of ``pykalman`` can replace imports ``from pykalman import x``
with equivalent imports ``from sktime.libs.pykalman import x``.
* Indirect users via the transformer ``KalmanFilterTransformerPK`` will not be
impacted as APIs do not change, except that they no longer require
the original ``pykalman`` package in their python environment.

* ``dask`` (data container and parallelization back-end) bounds have been updated to ``<2024.5.3``

* ``holidays`` (transformations soft dependency) bounds have been updated to ``>=0.29,<0.51``

Core interface changes
~~~~~~~~~~~~~~~~~~~~~~

The time series annotation, anomalies, changepoints, segmentation API has been
fully reworked to be in line with ``scikit-base`` patterns, ``sktime`` tags,
and to provide a more consistent and flexible interface.

* the API provides ``predict`` methods for annotation labels, e.g., segments,
outlier points, and a ``transform`` method for indicator series, for instance
1/0 indicator whether an anomaly is present at the time stamp.
* the ``fmt`` argument used in some estimators is now deprecated,
in favour of using ``predict`` or ``transform``.
* The type of annotation, e.g., change points or segmentation, is
encoded by the new tag ``task`` used in time series annotators,
with values ``anomaly_detection``, ``segmentation``, ``changepoint_detection``.
* Low-level methods allow polymorphic use of annotators, e.g., a changepoint detector
to be used for segmentation, via ``predict_points`` or ``predict_segments``.
The ``predict`` method defaults to the type of annotation defined by ``task``.

A full tutorial with examples will be created over the next release cycles,
and further enhancements are planned.

Deprecations and removals
~~~~~~~~~~~~~~~~~~~~~~~~~

Python 3.8 End-of-life
^^^^^^^^^^^^^^^^^^^^^^

``sktime`` now requires Python version ``>=3.9``.
No errors will be raised on Python 3.8, but test coverage and support for
Python 3.8 has been dropped.

Kindly note for context: python 3.8 will reach end of life
in October 2024, and multiple ``sktime`` core dependencies,
including ``scikit-learn``, have already dropped support for 3.8.

Forecasting
^^^^^^^^^^^

``cINNForecaster`` has been renamed to ``CINNForecaster``.
The estimator is no longer available under its old name,
after the deprecation period.
Users should replace any imports of ``cINNForecaster``
with imports of ``CINNForecaster``.

Enhancements
~~~~~~~~~~~~

* [ENH] Rework of base series annotator API (:pr:`6265`) :user:`Alex-JG3`
* [ENH] upgrade ``is_module_changed`` test utility for paths (:pr:`6518`) :user:`fkiraly`

Documentation
~~~~~~~~~~~~~

* [DOC] updated ``all_estimators`` docstring for ``re.Pattern`` support (:pr:`6478`) :user:`fkiraly`

Maintenance
~~~~~~~~~~~

* [MNT] [Dependabot](deps): Update skpro requirement from ``<2.3.0,>=2`` to ``>=2,<2.4.0`` (:pr:`6443`) :user:`dependabot[bot]`
* [MNT] [Dependabot](deps): Update scikit-learn requirement from ``<1.5.0,>=0.24`` to ``>=0.24,<1.6.0`` (:pr:`6462`) :user:`dependabot[bot]`
* [MNT] [Dependabot](deps): Update scikit-base requirement from ``<0.8.0,>=0.6.1`` to ``>=0.6.1,<0.9.0`` (:pr:`6488`) :user:`dependabot[bot]`
* [MNT] [Dependabot](deps): Update ``dask`` requirement from ``<2024.5.2`` to ``<2024.5.3`` (:pr:`6526`) :user:`dependabot[bot]`
* [MNT] [Dependabot](deps): Update ``holidays`` requirement from ``<0.50,>=0.29`` to ``>=0.29,<0.51`` (:pr:`6525`) :user:`dependabot[bot]`
* [MNT] drop test coverage on python 3.8 in CI (:pr:`6329`) :user:`yarnabrina`
* [MNT] final change cycle (0.30.0) for renaming ``cINNForecaster`` to ``CINNForecaster`` (:pr:`6367`) :user:`geetu040`
* [MNT] added ``joblib`` as core dependency (:pr:`6384`) :user:`yarnabrina`
* [MNT] 0.30.0 deprecations and change actions (:pr:`6468`) :user:`fkiraly`
* [MNT] modified CRLF line endings to LF line endings (:pr:`6512`) :user:`yarnabrina`
* [MNT] Move dependency checkers to separate module in ``utils`` (:pr:`6354`) :user:`fkiraly`
* [MNT] resolution to ``pykalman`` issue - ``sktime`` local pykalman fork (:pr:`6188`) :user:`fkiraly`
* [MNT] add systematic differential test switch to low-level tests (:pr:`6511`) :user:`fkiraly`
* [MNT] isolate ``utils`` module init and ``sktime`` init from external imports (:pr:`6516`) :user:`fkiraly`
* [MNT] preparing refactor of benchmark framework: folding minimal ``kotsu`` library into ``sktime`` (:pr:`6514`) :user:`fkiraly`
* [MNT] run tests in ``distances`` module only if it has changed (:pr:`6517`) :user:`fkiraly`
* [MNT] refactor ``pykalman`` tests to ``pytest`` and conditional execution (:pr:`6519`) :user:`fkiraly`
* [MNT] conditional execution of tests in ``datatypes`` module (:pr:`6520`) :user:`fkiraly`

Fixes
~~~~~

* [BUG] Remove dict unpacking on list in tuning skopt (:pr:`6521`) :user:`gareth-brown-86`

Contributors
~~~~~~~~~~~~

:user:`Alex-JG3`,
:user:`dependabot[bot]`,
:user:`fkiraly`,
:user:`gareth-brown-86`,
:user:`geetu040`,
:user:`yarnabrina`


Version 0.29.1 - 2024-05-30
---------------------------

Expand Down
Loading

0 comments on commit b3c164c

Please sign in to comment.