Metadata-Version: 2.1
Name: aeon
Version: 0.8.0
Summary: A toolkit for conducting machine learning tasks with time series data
Author-email: aeon developers <contact@aeon-toolkit.org>
Maintainer-email: aeon developers <contact@aeon-toolkit.org>
License: BSD 3-Clause License
        
        Copyright (c) The aeon developers.
        
        All rights reserved.
        
        Redistribution and use in source and binary forms, with or without
        modification, are permitted provided that the following conditions are met:
        
        * Redistributions of source code must retain the above copyright notice, this
          list of conditions and the following disclaimer.
        
        * Redistributions in binary form must reproduce the above copyright notice,
          this list of conditions and the following disclaimer in the documentation
          and/or other materials provided with the distribution.
        
        * Neither the name of the copyright holder nor the names of its
          contributors may be used to endorse or promote products derived from
          this software without specific prior written permission.
        
        THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
        AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
        FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
        CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
        OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
        OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        
Project-URL: Homepage, https://www.aeon-toolkit.org
Project-URL: Repository, https://github.com/aeon-toolkit/aeon
Project-URL: Documentation, https://www.aeon-toolkit.org
Project-URL: Changelog, https://www.aeon-toolkit.org/en/stable/changelog.html
Project-URL: Download, https://pypi.org/project/aeon/#files
Project-URL: API, https://www.aeon-toolkit.org/en/stable/api_reference.html
Keywords: data-science,machine-learning,data-mining,time-series,scikit-learn,forecasting,time-series-analysis,time-series-classification,time-series-clustering,time-series-regression
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development
Classifier: Topic :: Scientific/Engineering
Classifier: Development Status :: 5 - Production/Stable
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX
Classifier: Operating System :: Unix
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: <3.13,>=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: deprecated>=1.2.13
Requires-Dist: numba<0.60.0,>=0.55
Requires-Dist: numpy<1.27.0,>=1.21.0
Requires-Dist: packaging>=20.0
Requires-Dist: pandas<2.1.0,>=1.5.3
Requires-Dist: scikit-learn<1.5.0,>=1.0.0
Requires-Dist: scipy<1.13.0,>=1.2.0
Requires-Dist: typing-extensions>=4.6.0
Provides-Extra: all-extras
Requires-Dist: cloudpickle; extra == "all-extras"
Requires-Dist: dask<2024.3.0; python_version < "3.12" and extra == "all-extras"
Requires-Dist: esig<0.9.8.3,>=0.9.7; python_version < "3.11" and extra == "all-extras"
Requires-Dist: filterpy>=1.4.5; extra == "all-extras"
Requires-Dist: gluonts>=0.12.4; extra == "all-extras"
Requires-Dist: h5py; extra == "all-extras"
Requires-Dist: hmmlearn>=0.2.7; extra == "all-extras"
Requires-Dist: imbalanced-learn; extra == "all-extras"
Requires-Dist: keras-self-attention; extra == "all-extras"
Requires-Dist: kotsu>=0.3.1; extra == "all-extras"
Requires-Dist: matplotlib>=3.3.2; extra == "all-extras"
Requires-Dist: pmdarima>=1.8.0; extra == "all-extras"
Requires-Dist: prophet>=1.1.0; extra == "all-extras"
Requires-Dist: pydot>=2.0.0; extra == "all-extras"
Requires-Dist: scikit_posthocs>=0.6.5; extra == "all-extras"
Requires-Dist: seaborn>=0.11.0; extra == "all-extras"
Requires-Dist: statsforecast>=0.5.2; extra == "all-extras"
Requires-Dist: statsmodels>=0.12.1; extra == "all-extras"
Requires-Dist: stumpy>=1.5.1; extra == "all-extras"
Requires-Dist: tbats>=1.1.0; extra == "all-extras"
Requires-Dist: tensorflow>=2.12; (python_version < "3.12" and python_version >= "3.9") and extra == "all-extras"
Requires-Dist: tensorflow-addons; python_version < "3.12" and extra == "all-extras"
Requires-Dist: torch>=1.13.1; extra == "all-extras"
Requires-Dist: tsfresh>=0.20.0; extra == "all-extras"
Requires-Dist: tslearn>=0.5.2; extra == "all-extras"
Requires-Dist: xarray; extra == "all-extras"
Requires-Dist: pyarrow<12; python_version < "3.12" and extra == "all-extras"
Requires-Dist: pyarrow-hotfix; python_version < "3.12" and extra == "all-extras"
Provides-Extra: dl
Requires-Dist: keras-self-attention; extra == "dl"
Requires-Dist: tensorflow>=2.12; (python_version < "3.12" and python_version >= "3.9") and extra == "dl"
Requires-Dist: tensorflow-addons; python_version < "3.12" and extra == "dl"
Provides-Extra: unstable-extras
Requires-Dist: mrsqm<0.1.0,>=0.0.1; platform_system == "Darwin" and extra == "unstable-extras"
Requires-Dist: pycatch22<=0.4.3; extra == "unstable-extras"
Provides-Extra: dev
Requires-Dist: backoff; extra == "dev"
Requires-Dist: httpx; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pytest-randomly; extra == "dev"
Requires-Dist: pytest-timeout; extra == "dev"
Requires-Dist: pytest-xdist; extra == "dev"
Requires-Dist: pytest-rerunfailures; extra == "dev"
Requires-Dist: wheel; extra == "dev"
Provides-Extra: binder
Requires-Dist: notebook; extra == "binder"
Requires-Dist: jupyterlab; extra == "binder"
Provides-Extra: docs
Requires-Dist: sphinx<8.0.0; extra == "docs"
Requires-Dist: sphinx-design; extra == "docs"
Requires-Dist: sphinx-version-warning; extra == "docs"
Requires-Dist: sphinx_issues; extra == "docs"
Requires-Dist: sphinx-copybutton; extra == "docs"
Requires-Dist: sphinx-remove-toctrees; extra == "docs"
Requires-Dist: sphinxext-opengraph; extra == "docs"
Requires-Dist: nbsphinx; extra == "docs"
Requires-Dist: numpydoc; extra == "docs"
Requires-Dist: myst-parser; extra == "docs"
Requires-Dist: jupyter; extra == "docs"
Requires-Dist: furo; extra == "docs"
Requires-Dist: tabulate; extra == "docs"

<p align="center">
    <a href="https://aeon-toolkit.org"><img src="https://raw.githubusercontent.com/aeon-toolkit/aeon/main/docs/images/logo/aeon-logo-blue-compact.png" width="50%" alt="aeon logo" /></a>
</p>

# ⌛ Welcome to aeon

`aeon` is an open-source toolkit for learning from time series. It is compatible with
[scikit-learn](https://scikit-learn.org) and provides access to the very latest
algorithms for time series machine learning, in addition to a range of classical
techniques for learning tasks such as forecasting and classification.

We strive to provide a broad library of time series algorithms including the
latest advances, offer efficient implementations using numba, and interfaces with other
time series packages to provide a single framework for algorithm comparison.

The latest `aeon` release is `v0.8.0`. You can view the full changelog
[here](https://www.aeon-toolkit.org/en/stable/changelog.html).

Our webpage and documentation is available at https://aeon-toolkit.org.

| Overview      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|---------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **CI/CD**     | [![github-actions-release](https://img.shields.io/github/actions/workflow/status/aeon-toolkit/aeon/release.yml?logo=github&label=build%20%28release%29)](https://github.com/aeon-toolkit/aeon/actions/workflows/release.yml) [![github-actions-main](https://img.shields.io/github/actions/workflow/status/aeon-toolkit/aeon/pr_pytest.yml?logo=github&branch=main&label=build%20%28main%29)](https://github.com/aeon-toolkit/aeon/actions/workflows/pr_pytest.yml) [![github-actions-nightly](https://img.shields.io/github/actions/workflow/status/aeon-toolkit/aeon/periodic_tests.yml?logo=github&label=build%20%28nightly%29)](https://github.com/aeon-toolkit/aeon/actions/workflows/periodic_tests.yml) [![docs-main](https://img.shields.io/readthedocs/aeon-toolkit/stable?logo=readthedocs&label=docs%20%28stable%29)](https://www.aeon-toolkit.org/en/stable/) [![docs-main](https://img.shields.io/readthedocs/aeon-toolkit/latest?logo=readthedocs&label=docs%20%28latest%29)](https://www.aeon-toolkit.org/en/latest/) [![!codecov](https://img.shields.io/codecov/c/github/aeon-toolkit/aeon?label=codecov&logo=codecov)](https://codecov.io/gh/aeon-toolkit/aeon) |
| **Code**      | [![!pypi](https://img.shields.io/pypi/v/aeon?logo=pypi&color=blue)](https://pypi.org/project/aeon/) [![!conda](https://img.shields.io/conda/vn/conda-forge/aeon?logo=anaconda&color=blue)](https://anaconda.org/conda-forge/aeon) [![!python-versions](https://img.shields.io/pypi/pyversions/aeon?logo=python)](https://www.python.org/) [![!black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![license](https://img.shields.io/badge/license-BSD%203--Clause-green?logo=style)](https://github.com/aeon-toolkit/aeon/blob/main/LICENSE) [![binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/aeon-toolkit/aeon/main?filepath=examples)                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| **Community** | [![!slack](https://img.shields.io/static/v1?logo=slack&label=Slack&message=chat&color=lightgreen)](https://join.slack.com/t/aeon-toolkit/shared_invite/zt-22vwvut29-HDpCu~7VBUozyfL_8j3dLA) [![!linkedin](https://img.shields.io/static/v1?logo=linkedin&label=LinkedIn&message=news&color=lightblue)](https://www.linkedin.com/company/aeon-toolkit/) [![!twitter](https://img.shields.io/static/v1?logo=twitter&label=Twitter&message=news&color=lightblue)](https://twitter.com/aeon_toolkit)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |

## ⚙️ Installation

`aeon` requires a Python version of 3.8 or greater. Our full installation guide is
available in our [documentation](https://www.aeon-toolkit.org/en/stable/installation.html).

The easiest way to install `aeon` is via pip:

```bash
pip install aeon
```

Some estimators require additional packages to be installed. If you want to install
the full package with all optional dependencies, you can use:

```bash
pip install aeon[all_extras]
```

Instructions for installation from the [GitHub source](https://github.com/aeon-toolkit/aeon)
can be found [here](https://www.aeon-toolkit.org/en/stable/developer_guide/dev_installation.html).

## ⏲️ Getting started

The best place to get started for all `aeon` packages is our [getting started guide](https://www.aeon-toolkit.org/en/stable/getting_started.html).

Below we provide a quick example of how to use `aeon` for forecasting,
classification and clustering.

### Forecasting

```python
import pandas as pd
from aeon.forecasting.trend import TrendForecaster

y = pd.Series([20.0, 40.0, 60.0, 80.0, 100.0])
>>> 0     20.0
>>> 1     40.0
>>> 2     60.0
>>> 3     80.0
>>> 4    100.0
>>> dtype: float64

forecaster = TrendForecaster()
forecaster.fit(y)  # fit the forecaster
>>> TrendForecaster()

pred = forecaster.predict(fh=[1, 2, 3])  # forecast the next 3 values
>>> 5    120.0
>>> 6    140.0
>>> 7    160.0
>>> dtype: float64
```

### Classification

```python
import numpy as np
from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier

X = [[[1, 2, 3, 4, 5, 5]],  # 3D array example (univariate)
     [[1, 2, 3, 4, 4, 2]],  # Three samples, one channel, six series length,
     [[8, 7, 6, 5, 4, 4]]]
y = ['low', 'low', 'high']  # class labels for each sample
X = np.array(X)
y = np.array(y)

clf = KNeighborsTimeSeriesClassifier(distance="dtw")
clf.fit(X, y)  # fit the classifier on train data
>>> KNeighborsTimeSeriesClassifier()

X_test = np.array(
    [[[2, 2, 2, 2, 2, 2]], [[5, 5, 5, 5, 5, 5]], [[6, 6, 6, 6, 6, 6]]]
)
y_pred = clf.predict(X_test)  # make class predictions on new data
>>> ['low' 'high' 'high']
```

### Clustering

```python
import numpy as np
from aeon.clustering import TimeSeriesKMeans

X = np.array([[[1, 2, 3, 4, 5, 5]],  # 3D array example (univariate)
     [[1, 2, 3, 4, 4, 2]],  # Three samples, one channel, six series length,
     [[8, 7, 6, 5, 4, 4]]])

clu = TimeSeriesKMeans(distance="dtw", n_clusters=2)
clu.fit(X)  # fit the clusterer on train data
>>> TimeSeriesKMeans(distance='dtw', n_clusters=2)

clu.labels_ # get training cluster labels
>>> array([0, 0, 1])

X_test = np.array(
    [[[2, 2, 2, 2, 2, 2]], [[5, 5, 5, 5, 5, 5]], [[6, 6, 6, 6, 6, 6]]]
)
clu.predict(X_test)  # Assign clusters to new data
>>> array([1, 0, 0])
```

## 💬 Where to ask questions

| Type                                | Platforms                        |
|-------------------------------------|----------------------------------|
| 🐛 **Bug Reports**                  | [GitHub Issue Tracker]           |
| ✨ **Feature Requests & Ideas**      | [GitHub Issue Tracker] & [Slack] |
| 💻 **Usage Questions**              | [GitHub Discussions] & [Slack]   |
| 💬 **General Discussion**           | [GitHub Discussions] & [Slack]   |
| 🏭 **Contribution & Development**   | [Slack]                          |

[GitHub Issue Tracker]: https://github.com/aeon-toolkit/aeon/issues
[GitHub Discussions]: https://github.com/aeon-toolkit/aeon/discussions
[Slack]: https://join.slack.com/t/aeon-toolkit/shared_invite/zt-22vwvut29-HDpCu~7VBUozyfL_8j3dLA
