Skip to content

Commit fe6cd12

Browse files
Release v0.2.0 (#414)
* release prep * oops, better revoke that. * changelog link * dashes? * changelog * highlights * change to v0.2.0 * Update v0.2.md
1 parent bb2e72f commit fe6cd12

File tree

9 files changed

+147
-37
lines changed

9 files changed

+147
-37
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Changelog
2+
3+
You can find the aeon changelog on our [website](https://www.aeon-toolkit.org/en/latest/changelog.html).

ESTIMATOR_OVERVIEW.md

-5
This file was deleted.

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ We strive to provide a broad library of time series algorithms including the
1313
latest advances, offer efficient implementations using numba, and interfaces with other
1414
time series packages to provide a single framework for algorithm comparison.
1515

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

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

aeon/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
"""aeon."""
44

5-
__version__ = "0.1.0"
5+
__version__ = "0.2.0"
66

77
__all__ = ["show_versions"]
88

build_tools/changelog.py

+27-26
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
"""RestructuredText changelog generator."""
2+
"""Myst Markdown changelog generator."""
33

44
import os
55
from collections import defaultdict
@@ -19,9 +19,8 @@
1919
REPO = "aeon"
2020
GITHUB_REPOS = "https://api.github.com/repos"
2121

22-
2322
def fetch_merged_pull_requests(page: int = 1) -> List[Dict]: # noqa
24-
"Fetch a page of pull requests"
23+
"""Fetch a page of pull requests"""
2524
params = {
2625
"base": "main",
2726
"state": "closed",
@@ -50,8 +49,7 @@ def fetch_latest_release(): # noqa
5049

5150

5251
def fetch_pull_requests_since_last_release() -> List[Dict]: # noqa
53-
"Fetch pull requests and filter based on merged date"
54-
52+
"""Fetch pull requests and filter based on merged date"""
5553
release = fetch_latest_release()
5654
published_at = parser.parse(release["published_at"])
5755
print( # noqa
@@ -72,7 +70,7 @@ def fetch_pull_requests_since_last_release() -> List[Dict]: # noqa
7270

7371

7472
def github_compare_tags(tag_left: str, tag_right: str = "HEAD"): # noqa
75-
"Compare commit between two tags"
73+
"""Compare commit between two tags"""
7674
response = httpx.get(
7775
f"{GITHUB_REPOS}/{OWNER}/{REPO}/compare/{tag_left}...{tag_right}"
7876
)
@@ -82,58 +80,60 @@ def github_compare_tags(tag_left: str, tag_right: str = "HEAD"): # noqa
8280
raise ValueError(response.text, response.status_code)
8381

8482

85-
def render_contributors(prs: List, fmt: str = "rst"): # noqa
86-
"Find unique authors and print a list in given format"
83+
EXCLUDED_USERS = ["github-actions[bot]"]
84+
85+
def render_contributors(prs: List, fmt: str = "myst"): # noqa
86+
"""Find unique authors and print a list in given format"""
8787
authors = sorted({pr["user"]["login"] for pr in prs}, key=lambda x: x.lower())
8888

89-
header = "Contributors"
89+
header = "Contributors\n"
9090
if fmt == "github":
9191
print(f"### {header}") # noqa
92-
print(", ".join(f"@{user}" for user in authors)) # noqa
93-
elif fmt == "rst":
94-
print(header) # noqa
95-
print("~" * len(header), end="\n\n") # noqa
96-
print(",\n".join(f":user:`{user}`" for user in authors)) # noqa
92+
print(", ".join(f"@{user}" for user in authors if user not in EXCLUDED_USERS)) # noqa
93+
elif fmt == "myst":
94+
print(f"## {header}") # noqa
95+
print(",\n".join("{user}" + f"`{user}`" for user in authors if user not in EXCLUDED_USERS)) # noqa
9796

9897

9998
def assign_prs(prs, categs: List[Dict[str, List[str]]]): # noqa
100-
"Assign PR to categories based on labels"
99+
"""Assign PR to categories based on labels"""
101100
assigned = defaultdict(list)
102101

103102
for i, pr in enumerate(prs):
104103
for cat in categs:
105104
pr_labels = [label["name"] for label in pr["labels"]]
105+
if cat["title"] != "Not Included" and "no changelog" in pr_labels:
106+
continue
106107
if not set(cat["labels"]).isdisjoint(set(pr_labels)):
107108
assigned[cat["title"]].append(i)
108109

109-
# if any(l.startswith("module") for l in pr_labels):
110-
# print(i, pr_labels)
111-
112110
assigned["Other"] = list(
113111
set(range(len(prs))) - {i for _, l in assigned.items() for i in l}
114112
)
115113

114+
if "Not Included" in assigned:
115+
assigned.pop("Not Included")
116+
116117
return assigned
117118

118119

119120
def render_row(pr): # noqa
120-
"Render a single row with PR in restructuredText format"
121+
"""Render a single row with PR in Myst Markdown format"""
121122
print( # noqa
122-
"*",
123-
pr["title"].replace("`", "``"),
124-
f"(:pr:`{pr['number']}`)",
125-
f":user:`{pr['user']['login']}`",
123+
"-",
124+
pr["title"],
125+
"({pr}" + f"`{pr['number']}`)",
126+
"{user}" + f"`{pr['user']['login']}`",
126127
)
127128

128129

129130
def render_changelog(prs, assigned): # noqa
130131
# sourcery skip: use-named-expression
131-
"Render changelog"
132+
"""Render changelog"""
132133
for title, _ in assigned.items():
133134
pr_group = [prs[i] for i in assigned[title]]
134135
if pr_group:
135-
print(f"\n{title}") # noqa
136-
print("~" * len(title), end="\n\n") # noqa
136+
print(f"\n## {title}\n") # noqa
137137

138138
for pr in sorted(pr_group, key=lambda x: parser.parse(x["merged_at"])):
139139
render_row(pr)
@@ -146,6 +146,7 @@ def render_changelog(prs, assigned): # noqa
146146
{"title": "Maintenance", "labels": ["maintenance"]},
147147
{"title": "Refactored", "labels": ["refactor"]},
148148
{"title": "Documentation", "labels": ["documentation"]},
149+
{"title": "Not Included", "labels": ["no changelog"]}, # this is deleted
149150
]
150151

151152
pulls = fetch_pull_requests_since_last_release()

docs/changelog.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ To stay up-to-date with aeon releases, subscribe to aeon [here](https://librarie
66

77
For upcoming changes and next releases, see our [milestones](https://github.com/aeon-toolkit/aeon/milestones). For our long-term plan, see our [roadmap](roadmap).
88

9-
- [Version 0.1.0](changelogs/v0.1)
9+
- [Version 0.2.0](changelogs/v0.2.md)
10+
- [Version 0.1.0](changelogs/v0.1.md)

docs/changelogs/v0.1.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ Following this release the deprecation policy remains suspended. Future releases
88

99
## Highlights
1010

11-
- ``aeon`` is now available on PyPI!
12-
- ``pandas`` 2 support is available for core functionality
11+
- `aeon` is now available on PyPI!
12+
- `pandas` 2 support is available for core functionality
1313
- Deep learning approaches in the classification module have been reworked and are more configurable
1414
- New estimators for classification in Inception Time ({user}`hadifawaz1999`) and WEASEL 2.0 ({user}`patrickzib`)
1515
- Improved transformers for selecting channels of multivariate time series ({user}`haskarb`)

docs/changelogs/v0.2.md

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# v0.2.0
2+
3+
May 2023
4+
5+
Following this release the deprecation policy remains suspended. Future releases may have breaking changes, so it may be wise to set an upper bound on the package version.
6+
7+
## Highlights
8+
9+
- `aeon` now supports Python 3.11!
10+
- New estimators are available in the regression package, including `InceptionTime` ({user}`hadifawaz1999`) and `FreshPRINCE` ({user}`dguijo`)
11+
- The distances module has been reworked, and the distances available are now faster ({user}`chrisholder`)
12+
- The `RandomDilatedShapeletTransform` for collections of series is now available ({user}`baraline`)
13+
- The 'Getting Started' page on the documentation has been rewitten with clearer introductions to each module
14+
15+
## Enhancements
16+
17+
- [ENH] remove regression mentions of nested_univ ({pr}`279`) {user}`TonyBagnall`
18+
- [ENH] Bounding matrix for distances module ({pr}`305`) {user}`chrisholder`
19+
- [ENH] added inceptionTime as regressor ({pr}`260`) {user}`hadifawaz1999`
20+
- [ENH] Convert Catch22 and Catch22Wrapper to use numpy internally ({pr}`294`) {user}`TonyBagnall`
21+
- [ENH] Update euclidean and squared distance ({pr}`308`) {user}`chrisholder`
22+
- [ENH] Update distance alignment paths ({pr}`309`) {user}`chrisholder`
23+
- [ENH] Convert HOG1DTransformer and DerivativeSlopeTransformer to use numpy arrays internally ({pr}`261`) {user}`TonyBagnall`
24+
- [ENH] Convert DWTTransformer to use numpy format internally ({pr}`293`) {user}`TonyBagnall`
25+
- [ENH] RDST transformer ({pr}`310`) {user}`baraline`
26+
- [ENH] Update dtw distance ({pr}`316`) {user}`chrisholder`
27+
- [ENH] added ReduceLROnPlateau callback by default to InceptionTime deep classifier ({pr}`327`) {user}`hadifawaz1999`
28+
- [ENH] Introduce list of numpy arrays data type for classification/regression/clustering ({pr}`296`) {user}`TonyBagnall`
29+
- [ENH] refactor param_est to live in forecasting module ({pr}`330`) {user}`TonyBagnall`
30+
- [ENH] Removes nested dataframes from shape dtw ({pr}`329`) {user}`TonyBagnall`
31+
- [ENH] Add reduce on plateau learning rate decay for FCN ResNet and MLP deep classifiers ({pr}`351`) {user}`hadifawaz1999`
32+
- [ENH] Refactor pairwise distance ({pr}`357`) {user}`chrisholder`
33+
- [ENH] purge mentions of Panel in classification ({pr}`331`) {user}`TonyBagnall`
34+
- [ENH] Update ddtw distance ({pr}`319`) {user}`chrisholder`
35+
- [ENH] Update wdtw distance ({pr}`322`) {user}`chrisholder`
36+
- [ENH] Update wddtw distance ({pr}`323`) {user}`chrisholder`
37+
- [ENH] Update lcss distance ({pr}`332`) {user}`chrisholder`
38+
- [ENH] Update erp distance ({pr}`333`) {user}`chrisholder`
39+
- [ENH] Update edr distance ({pr}`366`) {user}`chrisholder`
40+
- [ENH] add model checkpoint to inceptionTime deep classifier ({pr}`362`) {user}`hadifawaz1999`
41+
- [ENH] Update twe distance ({pr}`367`) {user}`chrisholder`
42+
- [ENH] Update msm distance ({pr}`369`) {user}`chrisholder`
43+
- [ENH] Distance module cleanup ({pr}`372`) {user}`chrisholder`
44+
- [MNT] Remove any reference of pykalman ({pr}`380`) {user}`hadifawaz1999`
45+
- [ENH] removes the param_est package ({pr}`356`) {user}`TonyBagnall`
46+
- [ENH] added modelcheckpoint and reduce learning rate to inceptionTime regressor ({pr}`397`) {user}`hadifawaz1999`
47+
- [ENH] Add model checkpoint for the rest of the deep learning classifiers ({pr}`394`) {user}`hadifawaz1999`
48+
- [ENH] convert TSInterpolator to np-list/numpy3D ({pr}`388`) {user}`TonyBagnall`
49+
- [ENH] Adapt PlateauFinder to use numpy3D ({pr}`392`) {user}`TonyBagnall
50+
- [ENH] FreshPRINCERegressor, RotationForestRegressor and minor changes to FreshPRINCEClassifier ({pr}`384`) {user}`dguijo`
51+
- [ENH] remove more mentions of nested_univ ({pr}`295`) {user}`TonyBagnall`
52+
- [ENH] combine test_returns_self with test_fit_updates_state ({pr}`300`) {user}`TonyBagnall`
53+
- [ENH] Change data loaders and writers to minimize use of "nested_univ" input type ({pr}`355`) {user}`TonyBagnall`
54+
- [ENH] TruncationTransformer, PaddingTransformer and TSFresh internal type to np-list ({pr}`364`) {user}`TonyBagnall`
55+
-
56+
## Fixes
57+
58+
- [BUG] Fix test overwrite inception time classifier ({pr}`315`) {user}`hadifawaz1999`
59+
- [ENH] Update distance alignment paths ({pr}`309`) {user}`chrisholder`
60+
- [BUG] Forecasting base circular import ({pr}`328`) {user}`MatthewMiddlehurst`
61+
- [BUG] Fixes `show_versions` error ({pr}`353`) {user}`GuiArcencio`
62+
- [BUG] Fixes `load_covid_3month` returning a non-numeric `y` ({pr}`354`) {user}`GuiArcencio`
63+
- [ENH] Update twe distance ({pr}`367`) {user}`chrisholder`
64+
- [MNT] Remove any reference of pykalman ({pr}`380`) {user}`hadifawaz1999`
65+
- [BUG] fix tsfresh "kind" feature extractor ({pr}`400`) {user}`TonyBagnall`
66+
- [BUG] fix all_estimators to work with tags that are lists of strings not just single strings ({pr}`399`) {user}`TonyBagnall`
67+
68+
## Documentation
69+
70+
- [DOC] Change web documentation colours ({pr}`301`) {user}`MatthewMiddlehurst`
71+
- [DOC] New `aeon` logo and replacement for current usage ({pr}`298`) {user}`MatthewMiddlehurst`
72+
- [DOC] Update README ({pr}`303`) {user}`MatthewMiddlehurst`
73+
- [DOC] Fix rocket examples imports ({pr}`325`) {user}`hadifawaz1999`
74+
- [DOC] Remove meetup and sponsor cards from get involved ({pr}`344`) {user}`MatthewMiddlehurst`
75+
- & TonyBagnall [DOC] Remake `get_started` page ({pr}`346`) {user}`MatthewMiddlehurst`
76+
- [DOC] Add contrib.rocks image to `contributors.md` and lower all-contributors table/image size ({pr}`352`) {user}`MatthewMiddlehurst`
77+
- [MNT] docs update to fix readthedocs fail ({pr}`386`) {user}`TonyBagnall`
78+
- [DOC] Tidy up classification docs ({pr}`398`) {user}`TonyBagnall`
79+
- [DOC] Update section names in examples.md ({pr}`404`) {user}`GuzalBulatova`
80+
81+
## Maintenance
82+
83+
- [MNT] Update issue templates to use issue forms ({pr}`311`) {user}`MatthewMiddlehurst`
84+
- [MNT] Fix Binder Dockerfile ({pr}`306`) {user}`MatthewMiddlehurst`
85+
- [MNT] Update contributors.md ({pr}`312`) {user}`MatthewMiddlehurst`
86+
- [MNT] Cleanup the forecasting tests ({pr}`192`) {user}`lmmentel`
87+
- [MNT] Update file change action and cancel workflow ({pr}`339`) {user}`MatthewMiddlehurst`
88+
- [MNT] Remove test_fit_does_not_overwrite_hyper_params and test_methods_have_no_side_effects from config for most deep learners CNN MLP Encoder and FCN classifiers ({pr}`348`) {user}`hadifawaz1999`
89+
- [MNT] Remove the test_methods_have_no_side_effects for inceptionTime classifier from _config ({pr}`338`) {user}`hadifawaz1999`
90+
- [MNT] Fix workflow concurrency ({pr}`350`) {user}`MatthewMiddlehurst`
91+
- [MNT] Change `update_contributors.yml` to create PRs ({pr}`349`) {user}`MatthewMiddlehurst`
92+
- [MNT] Changes repo owner to aeon-toolkit in `.all-contributorsrc` ({pr}`359`) {user}`GuiArcencio`
93+
- [MNT] docs update to fix readthedocs fail ({pr}`386`) {user}`TonyBagnall`
94+
- [MNT] Add python 3.11 support ({pr}`191`) {user}`lmmentel`
95+
- [MNT] Remove any reference of pykalman ({pr}`380`) {user}`hadifawaz1999`
96+
- [MNT] Unstable extras ({pr}`365`) {user}`MatthewMiddlehurst`
97+
- [MNT] Remove the test_methods_have_no_side_effects for inceptionTime classifier from _config ({pr}`338`) {user}`hadifawaz1999`
98+
- [MNT] Cleanup the forecasting tests ({pr}`192`) {user}`lmmentel`
99+
100+
## Contributors
101+
102+
{user}`baraline`,
103+
{user}`chrisholder`,
104+
{user}`dguijo`,
105+
{user}`GuiArcencio`,
106+
{user}`GuzalBulatova`,
107+
{user}`hadifawaz1999`,
108+
{user}`lmmentel`,
109+
{user}`MatthewMiddlehurst`,
110+
{user}`TonyBagnall`

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "aeon"
3-
version = "0.1.0"
3+
version = "0.2.0"
44
description = "A unified framework for machine learning with time series"
55
authors = [
66
{name = "aeon developers", email = "[email protected]"},

0 commit comments

Comments
 (0)