Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/fast_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
retention-days: 5

upload-wheels:
needs: build-project
runs-on: ubuntu-24.04

environment:
Expand Down
20 changes: 18 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@ jobs:
python -m pip install build
python -m build

- name: Check tag matches built version
if: github.ref_type == 'tag'
shell: bash
env:
RELEASE_TAG: ${{ github.ref_name }}
run: |
if ! ls dist/aeon-"${RELEASE_TAG#v}"-*.whl > /dev/null 2>&1; then
echo "::error::Tag ${RELEASE_TAG} does not match the built distribution."
ls dist/
exit 1
fi

- name: Store build files
uses: actions/upload-artifact@v7
with:
Expand Down Expand Up @@ -116,8 +128,12 @@ jobs:
- name: Show dependencies
run: python -m pip list

- name: Tests
run: python -m pytest -n logical
- name: Test installed wheel
shell: bash
run: |
mkdir wheel-test && cd wheel-test
python -c "import aeon; print(aeon.__file__); assert 'site-packages' in aeon.__file__, 'not the installed wheel'"
python -m pytest -c ../pyproject.toml -n logical --pyargs aeon

upload-wheels:
needs: test-wheels
Expand Down
52 changes: 34 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
</p>

`aeon` is a scikit-learn compatible Python library for learning from time series.
It covers classification, regression, clustering, forecasting, anomaly detection, distances,
segmentation, similarity search, transformations and benchmarking.
It covers classification, regression, clustering, forecasting, anomaly detection,
distances, segmentation, similarity search, transformations and benchmarking.

Many implementations in `aeon` are contributed and maintained by the researchers who developed the original methods. These include state-of-the-art models for forecasting, classification, regression, and clustering, including deep learning approaches.
Many implementations in `aeon` are contributed and maintained by the researchers who
developed the original methods. These include state-of-the-art models for forecasting,
classification, regression, and clustering, including deep learning approaches.

[Documentation](https://www.aeon-toolkit.org/) ·
[Examples](https://www.aeon-toolkit.org/en/stable/examples.html) ·
Expand Down Expand Up @@ -54,7 +56,6 @@ evaluate new methods. That means:
- **State of the art, sooner.** New methods often land in `aeon` alongside publication.
- **Evidence-based defaults.** What's included — and what's recommended — is grounded in published comparative studies.


A selection of algorithms available in `aeon` written by `aeon` core developers or contributors:

| Method | Reference | Task |
Expand All @@ -70,7 +71,6 @@ A selection of algorithms available in `aeon` written by `aeon` core developers

Code in `aeon` and related toolkits has been used in a wide range of benchmarking studies:


| Study | Reference | Area |
|-----------------------------------|-------------------------------------------------------------------------------------------|--------------|
| Clustering | [Holder et al., 2024](https://link.springer.com/article/10.1007/s10115-023-01952-0) | Benchmarking |
Expand Down Expand Up @@ -102,8 +102,12 @@ pip install aeon[all_extras]
For development installs and platform-specific notes, see the
[installation guide](https://www.aeon-toolkit.org/en/stable/installation.html).

The latest version of `aeon` is v1.6.0.

## Quick start

Fit a classifier on a standard UCR dataset:

```python
from aeon.classification.convolution_based import RocketClassifier
from aeon.datasets import load_gunpoint
Expand Down Expand Up @@ -136,9 +140,13 @@ Ten task areas, one consistent API:

## Getting started examples

For more examples across tasks, visit the
[examples gallery](https://www.aeon-toolkit.org/en/stable/examples.html).

### Classification

Time series classification predicts class labels for unseen series using a model fitted on a collection of labelled time series.
Time series classification predicts class labels for unseen series using a model fitted
on a collection of labelled time series.

```python
import numpy as np
Expand All @@ -165,7 +173,6 @@ print(y_pred)
# ['low' 'low' 'high']
```


### Clustering

Time series clustering groups similar time series together from an unlabelled collection.
Expand Down Expand Up @@ -197,7 +204,8 @@ pred = forecaster.forecast(y)

print(pred)
```
For more advanced forecasting, `aeon` also includes deep learning and machine learning methods not available elsewhere in Python, such as `SETARTree` and `SETARForest`.
For more advanced forecasting, `aeon` also includes deep learning and machine learning
methods not available elsewhere in Python, such as `SETARTree` and `SETARForest`.

### Deep learning

Expand Down Expand Up @@ -227,9 +235,6 @@ print(clf.score(X_test, y_test))
See the [examples gallery](https://www.aeon-toolkit.org/en/stable/examples.html)
for GPU usage, custom architectures, and benchmarking against classical methods.

For more examples across tasks, visit the
[examples gallery](https://www.aeon-toolkit.org/en/stable/examples.html).

## Support aeon

There are several ways to engage with the project:
Expand All @@ -255,7 +260,8 @@ Useful links:
- [Governance](https://github.com/aeon-toolkit/aeon/blob/main/GOVERNANCE.md)
- [Project website](https://www.aeon-toolkit.org/)

The `aeon` developers are volunteers, so please be patient with issue triage and pull request review.
The `aeon` developers are volunteers, so please be patient with issue triage and
pull request review.

## Citation

Expand All @@ -274,16 +280,26 @@ If you use `aeon` in academic work, please cite the project:
}
```

If you let us know about your paper using `aeon`, we will happily list it on the [project website](https://www.aeon-toolkit.org/en/latest/papers_using_aeon.html).
If you let us know about your paper using `aeon`, we will happily list it on
the [project website](https://www.aeon-toolkit.org/en/latest/papers_using_aeon.html).

## Project history

`aeon` was forked from `sktime` `v0.16.0` in 2022 by an initial group of eight core developers, and has since been substantially rewritten and extended.
Our core development team of 13 spans academia and industry, representing seven nationalities across the globe.
You can read more about the project's history, values, and governance on the [About Us page](https://www.aeon-toolkit.org/en/stable/about.html).
`aeon` was forked from `sktime` `v0.16.0` in 2022 by an initial group of eight core
developers, and has since been substantially rewritten and extended.
Our core development team of 13 spans academia and industry, representing seven
nationalities across the globe.
You can read more about the project's history, values, and governance on the
[About Us page](https://www.aeon-toolkit.org/en/stable/about.html).

## Project status

`aeon` is under active development. The core package is stable and widely used. The following modules are currently considered in development, and the deprecation policy does not necessarily apply (although we only rarely make non-compatible changes): `anomaly_detection`, `forecasting`, `segmentation`, `similarity_search`, `visualisation`, `transformations.collection.self_supervised`, `transformations.collection.imbalance`.
`aeon` is under active development. The core package is stable and widely used.
The following modules are currently considered in development, and the deprecation
policy does not necessarily apply (although we only rarely make non-compatible changes):
`anomaly_detection`, `forecasting`, `segmentation`, `similarity_search`,
`visualisation`, `transformations.collection.self_supervised`,
`transformations.collection.imbalance`.

Please check the documentation for task-specific capabilities, limitations, and current status.
Please check the documentation for task-specific capabilities, limitations, and
current status.
2 changes: 1 addition & 1 deletion aeon/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""aeon toolkit."""

__version__ = "1.5.0"
__version__ = "1.6.0"
1 change: 1 addition & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ To stay up to date with `aeon` releases, subscribe to aeon
[here](https://libraries.io/pypi/aeon) or follow us on
[LinkedIn](https://www.linkedin.com/company/aeon-toolkit/).

- [Version 1.6.0](changelogs/v1.6.md)
- [Version 1.5.0](changelogs/v1.5.md)
- [Version 1.4.0](changelogs/v1.4.md)
- [Version 1.3.0](changelogs/v1.3.md)
Expand Down
9 changes: 9 additions & 0 deletions docs/changelogs/v1.6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# v1.6.0

July 2026

## Classification

### Deprecation

- Removed `LearningShapeletClassifier` as scheduled after its deprecation in v1.5.0.
24 changes: 17 additions & 7 deletions docs/developer_guide/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,29 @@ The release process is as follows, on high-level:

## `pypi` release and release validation

Creation of the GitHub release trigger the `pypi` release workflow.
Publishing the GitHub release triggers the `pypi` release workflow. The workflow builds
from the released tag, checks that the tag matches the version of the built
distribution, and runs the test suite against the built wheel rather than the source
tree.

5. **Approve the release workflow.**
The release workflow will be automatically created in the GitHub Actions tab. This
must be approved by a member of the release management workgroup before it will run.

6. **Wait for the ``pypi`` release CI/CD to finish.**
If tests fail due to sporadic unrelated failure, restart. If tests fail genuinely,
something went wrong in the above steps, investigate, fix, and repeat. If the bug
is known and sporadic (i.e. failure to read data from an external source), the release
workflow can be restarted. It is not necessary to create a new GitHub release, and
the workflow can be manually run from the GitHub Actions tab if more PRs are
required.
If tests fail due to a sporadic unrelated failure (i.e. failure to read data from an
external source), re-run the failed jobs. It is not necessary to create a new GitHub
release, and the workflow can also be run manually from the GitHub Actions tab by
selecting the release tag.

If tests fail genuinely, something went wrong in the above steps. Nothing has been
uploaded to `pypi` at this point, so the version number is still free to use: delete
the GitHub release and its tag, merge the necessary fixes, then create the release
and tag again with the same version number.

Once the `pypi` upload has succeeded the version is fixed, as `pypi` does not allow a
version to be re-uploaded. Any problem found after that point requires a new patch
version and a new release.

7. **Release workflow completion tasks.**
Once the release workflow has passed, check `aeon` version on `pypi`, this should be
Expand Down
4 changes: 2 additions & 2 deletions examples/classification/shapelet_based.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
{
"data": {
"text/plain": [
" ('RDSTClassifier', aeon.classification.shapelet_based._rdst.RDSTClassifier),\n",
"[('RDSTClassifier', aeon.classification.shapelet_based._rdst.RDSTClassifier),\n",
" ('RSASTClassifier',\n",
" aeon.classification.shapelet_based._rsast.RSASTClassifier),\n",
" ('SASTClassifier', aeon.classification.shapelet_based._sast.SASTClassifier),\n",
Expand Down Expand Up @@ -487,7 +487,7 @@
" - Others such as `SAST`[4] only select a small number of \"reference\" time series in the training data where all subsequences will be considered as shapelets without evaluating their quality. This leaves the \"feature selection\" step to the classifier that will use the transformation. `RSAST`[5] uses the same approach but also uses some statistical criteria to further reduce the number of candidates extracted from these reference time series.\n",
" - Another approach used in `RandomDilatedShapeletTransform` is to use a semi-random extraction which is guided by a masking of the input space. Once a shapelet has been randomly sampled from a time series, the neighboring points around the sampling point are removed from the list of available sampling points. This avoids extracting self-similar shapelets and improves the diversity of the extracted shapelet set. The number of neighboring points affected by this process is controlled with the `alpha_similarity` parameter.\n",
"\n",
"- **Shapelet generation**: This last approach takes another view at the problem: What if the best shapelets for my dataset are not present in the training data ? The goal is to use optimization methods, such as gradient descent or evolutionary algorithm, to generate shapelet values instead of extracting them from the input. The first shapelet generation method was Learning Shapelet [6], which is not currently implemented in aeon.\n",
"- **Shapelet generation**: This last approach takes another view at the problem: What if the best shapelets for my dataset are not present in the training data ? The goal is to use optimization methods, such as gradient descent or evolutionary algorithm, to generate shapelet values instead of extracting them from the input. The first shapelet generation method was Learning Shapelet [6], which is not currently implemented in aeon.\n",
"\n",
"\n",
"## Shapelet \"self-similarity\"\n",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "aeon"
version = "1.5.0"
version = "1.6.0"
description = "A toolkit for time series machine learning"
authors = [
{name = "aeon developers", email = "contact@aeon-toolkit.org"},
Expand Down
Loading