Repository: aeon-toolkit/aeon
Pull request #319 (2023-04-22 01:29:47)

[ENH] Update ddtw distance
<!--
Thanks for contributing a pull request! Please ensure you have taken a look at our contribution guide: https://github.com/aeon-toolkit/aeon/blob/main/CONTRIBUTING.md

Feel free to delete sections of this template if they do not apply to your PR, avoid submitting a blank template or empty sections.
-->

#### Reference Issues/PRs
This pr depends on pr #357 

<!--
Example: Fixes #1234. See also #3456.

Please use keywords (e.g., Fixes) to create link to the issues or pull requests you resolved, so that they will automatically be closed when your pull request is merged. See https://github.com/blog/1506-closing-issues-via-pull-requests
-->

#### What does this implement/fix? Explain your changes.
This pr updates ddtw to the new format for distances. In addition in doing so it makes optimisations for computing the distances between multiple time series. 

<!--
A clear and concise description of what you have implemented.
-->

#### Does your contribution introduce a new dependency? If yes, which one?

<!--
If your contribution does add a dependency, we may suggest adding it as an optional/soft dependency to keep external dependencies of the core aeon package to a minimum.
-->

#### What should a reviewer concentrate their feedback on?

<!--
This section is particularly useful if you have a pull request that is still in development. You can guide the reviews to focus on the parts that are ready for their comments. We suggest using bullets (indicated by * or -) and filled checkboxes [x] here
-->

#### Did you add any tests for the change?
There are two new test files that extend testing to cost matrix and alignment paths.

<!--
This section is useful if you have added a test in addition to the existing ones. This will ensure that further changes to these files won't introduce the same kind of bug. It is considered good practice to add tests with newly added code to enforce the fact that the code actually works. This will reduce the chance of introducing logical bugs.
-->

#### Any other comments?

<!--
Please be aware that we are a loose team of volunteers so patience is necessary; assistance handling other issues is very welcome. We value all user contributions, no matter how minor they are. If we are slow to review, either the pull request needs some benchmarking, tinkering, convincing, etc. or more likely the reviewers are simply busy. In either case, we ask for your understanding during the review process.
-->

### PR checklist

<!--
Please go through the checklist below. Please feel free to remove points if they are not applicable.
-->

##### For all contributions
- [x] I've added myself to the [list of contributors](https://github.com/aeon-toolkit/aeon/blob/main/.all-contributorsrc).
- [x] Optionally, I've updated aeon's [CODEOWNERS](https://github.com/aeon-toolkit/aeon/blob/main/CODEOWNERS) to receive notifications about future changes to these files.
- [x] The PR title starts with either [ENH], [MNT], [DOC], or [BUG] indicating whether the PR topic is related to enhancement, maintenance, documentation, or bug.
- [x] For new estimators, I've added the estimator to the online documentation.


<!--
Thanks for contributing!
-->



Patch:
diff --git a/.all-contributorsrc b/.all-contributorsrc
index b9f366d4..679417c9 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1,6 +1,6 @@
 {
   "projectName": "aeon",
-  "projectOwner": "aeon",
+  "projectOwner": "aeon-toolkit",
   "repoType": "github",
   "repoHost": "https://github.com",
   "commitConvention": "none",
@@ -160,14 +160,19 @@
       "login": "MatthewMiddlehurst",
       "name": "Matthew Middlehurst",
       "avatar_url": "https://avatars0.githubusercontent.com/u/25731235?v=4",
-      "profile": "http://www.timeseriesclassification.com",
+      "profile": "https://github.com/MatthewMiddlehurst",
       "contributions": [
+        "bug",
         "code",
+        "data",
         "doc",
+        "design",
+        "example",
+        "infra",
+        "maintenance",
         "test",
         "tutorial",
-        "review",
-        "bug"
+        "review"
       ]
     },
     {
@@ -1255,6 +1260,7 @@
     {
       "login": "xloem",
       "name": "patiently pending world peace",
+      "avatar_url": "https://avatars.githubusercontent.com/u/279585?v=4",
       "profile": "https://github.com/xloem",
       "contributions": [
         "code"
@@ -1693,6 +1699,7 @@
     {
       "login": "mariamjabara",
       "name": "Mariam Jabara",
+      "avatar_url": "https://avatars.githubusercontent.com/u/38568292?v=4",
       "profile": "https://github.com/mariamjabara",
       "contributions": [
         "code"
@@ -1729,6 +1736,7 @@
     {
       "login": "jelc53",
       "name": "Julian Cooper",
+      "avatar_url": "https://avatars.githubusercontent.com/u/30467615?v=4",
       "profile": "https://github.com/jelc53",
       "contributions": [
         "code",
@@ -1738,6 +1746,7 @@
     {
       "login": "benheid",
       "name": "Benedikt Heidrich",
+      "avatar_url": "https://avatars.githubusercontent.com/u/9725296?v=4",
       "profile": "https://github.com/benheid",
       "contributions": [
         "code"
@@ -1746,6 +1755,7 @@
     {
       "login": "AnH0ang",
       "name": "An Hoang",
+      "avatar_url": "https://avatars.githubusercontent.com/u/46025351?v=4",
       "profile": "https://github.com/AnH0ang",
       "contributions": [
         "bug",
@@ -1765,6 +1775,7 @@
     {
       "login": "kcc-lion",
       "name": "Kai Lion",
+      "avatar_url": "https://avatars.githubusercontent.com/u/54307609?v=4",
       "profile": "https://github.com/kcc-lion",
       "contributions": [
         "code",
@@ -1775,6 +1786,7 @@
     {
       "login": "bugslayer-332",
       "name": "Arepalli Yashwanth Reddy",
+      "avatar_url": "https://avatars.githubusercontent.com/u/89122324?v=4",
       "profile": "https://github.com/bugslayer-332",
       "contributions": [
         "code",
@@ -1794,6 +1806,7 @@
     {
       "login": "jasmineliaw",
       "name": "Jasmine Liaw",
+      "avatar_url": "https://avatars.githubusercontent.com/u/93530957?v=4",
       "profile": "https://github.com/jasmineliaw",
       "contributions": [
         "code"
@@ -1802,6 +1815,7 @@
     {
       "login": "topher-lo",
       "name": "Christopher Lo",
+      "avatar_url": "https://avatars.githubusercontent.com/u/46541035?v=4",
       "profile": "https://github.com/topher-lo",
       "contributions": [
         "code",
@@ -1811,6 +1825,7 @@
     {
       "login": "arampuria19",
       "name": "Akshat Rampuria",
+      "avatar_url": "https://avatars.githubusercontent.com/u/85577835?v=4",
       "profile": "https://github.com/arampuria19",
       "contributions": [
         "doc"
@@ -1856,6 +1871,7 @@
     {
       "login": "jorenham",
       "name": "Joren Hammudoglu",
+      "avatar_url": "https://avatars.githubusercontent.com/u/6208662?v=4",
       "profile": "https://github.com/jorenham",
       "contributions": [
         "infra"
@@ -1864,6 +1880,7 @@
     {
       "login": "wolph",
       "name": "Rick van Hattem",
+      "avatar_url": "https://avatars.githubusercontent.com/u/270571?v=4",
       "profile": "https://github.com/wolph",
       "contributions": [
         "infra"
@@ -1917,6 +1934,7 @@
     {
       "login": "benjaminbluhm",
       "name": "Benjamin Bluhm",
+      "avatar_url": "https://avatars.githubusercontent.com/u/40917599?v=4",
       "profile": "https://github.com/benjaminbluhm",
       "contributions": [
         "code",
@@ -1927,6 +1945,7 @@
     {
       "login": "VyomkeshVyas",
       "name": "Vyomkesh Vyas",
+      "avatar_url": "https://avatars.githubusercontent.com/u/110027694?v=4",
       "profile": "https://github.com/VyomkeshVyas",
       "contributions": [
         "code",
@@ -2035,7 +2054,7 @@
     {
       "login": "mgorlin",
       "name": "Margaret Gorlin",
-      "avatar_url": "",
+      "avatar_url": "https://avatars.githubusercontent.com/u/23091594?v=4",
       "profile": "https://www.linkedin.com/in/margaret-gorlin/",
       "contributions": [
         "code",
diff --git a/.github/workflows/update_contributors.yml b/.github/workflows/update_contributors.yml
index 629df68e..261af5fa 100644
--- a/.github/workflows/update_contributors.yml
+++ b/.github/workflows/update_contributors.yml
@@ -12,22 +12,22 @@ jobs:
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
-      - name: Set up Node
-        uses: actions/setup-node@v3
+
+      - uses: actions/setup-node@v3
         with:
           node-version: 18
-      - name: Set up tool
+
+      - name: Setup all-contributors-cli
         run: npm install -g all-contributors-cli@6.24.0
-      - name: Generate file
+
+      - name: Generate CONTRIBUTORS.md
         id: generate
         run: npx all-contributors generate
-      - name: commit-and-push
-        id: candp
-        uses: stefanzweifel/git-auto-commit-action@v4
+
+      - uses: peter-evans/create-pull-request@v5
         with:
-          commit_message: '[AUTOMATED] update CONTRIBUTORS.md'
-          file_pattern: 'CONTRIBUTORS.md'
-          commit_user_name: github-actions[bot]
-      - name: Echo Results
-        if: steps.candp.outputs.changes_detected == 'true'
-        run: echo "changes detected and committed."
+          commit-message: "Automated CONTRIBUTORS.md update"
+          branch: update_contributors
+          title: "[MNT] Automated CONTRIBUTORS.md update"
+          body: "Automated update to CONTRIBUTORS.md caused by an update to the .all-contributorsrc file."
+          labels: maintenance, no changelog
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 4367d629..af9b3385 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -1,7 +1,7 @@
 # Contributors
 
 <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-203-orange.svg)](#contributors)
+[![All Contributors](https://img.shields.io/badge/all_contributors-204-orange.svg)](#contributors)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 
 This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
@@ -33,9 +33,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/AnH0ang"><img src="?s=100" width="100px;" alt="An Hoang"/><br /><sub><b>An Hoang</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3AAnH0ang" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=AnH0ang" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/akanz1"><img src="https://avatars3.githubusercontent.com/u/51492342?v=4?s=100" width="100px;" alt="Andreas Kanz"/><br /><sub><b>Andreas Kanz</b></sub></a><br /><a href="#tutorial-akanz1" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/angus924"><img src="https://avatars0.githubusercontent.com/u/55837131?v=4?s=100" width="100px;" alt="Angus Dempster"/><br /><sub><b>Angus Dempster</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=angus924" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=angus924" title="Tests">⚠️</a> <a href="#tutorial-angus924" title="Tutorials">✅</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/yard1/"><img src="https://avatars.githubusercontent.com/u/10364161?v=4?s=100" width="100px;" alt="Antoni Baum"/><br /><sub><b>Antoni Baum</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Yard1" title="Code">💻</a></td>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/baraline"><img src="https://avatars.githubusercontent.com/u/10759117?s=100" width="100px;" alt="Antoine Guillaume"/><br /><sub><b>Antoine Guillaume</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=baraline" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=baraline" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/yard1/"><img src="https://avatars.githubusercontent.com/u/10364161?v=4?s=100" width="100px;" alt="Antoni Baum"/><br /><sub><b>Antoni Baum</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Yard1" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://aparna-sakshi.github.io/"><img src="https://avatars.githubusercontent.com/u/44149689?v=4?s=100" width="100px;" alt="Aparna Sakshi"/><br /><sub><b>Aparna Sakshi</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Aparna-Sakshi" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/AreloTanoh"><img src="https://avatars.githubusercontent.com/AreloTanoh?s=100" width="100px;" alt="Arelo Tanoh"/><br /><sub><b>Arelo Tanoh</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=AreloTanoh" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/bugslayer-332"><img src="?s=100" width="100px;" alt="Arepalli Yashwanth Reddy"/><br /><sub><b>Arepalli Yashwanth Reddy</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=bugslayer-332" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Abugslayer-332" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=bugslayer-332" title="Documentation">📖</a></td>
@@ -44,9 +45,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/ayushmaan-seth-4a96364a/"><img src="https://avatars1.githubusercontent.com/u/29939762?v=4?s=100" width="100px;" alt="Ayushmaan Seth"/><br /><sub><b>Ayushmaan Seth</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Ayushmaanseth" title="Code">💻</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3AAyushmaanseth" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon/aeon/commits?author=Ayushmaanseth" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/commits?author=Ayushmaanseth" title="Documentation">📖</a> <a href="#eventOrganizing-Ayushmaanseth" title="Event Organizing">📋</a> <a href="#tutorial-Ayushmaanseth" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/BandaSaiTejaReddy"><img src="https://avatars0.githubusercontent.com/u/31387911?v=4?s=100" width="100px;" alt="BANDASAITEJAREDDY"/><br /><sub><b>BANDASAITEJAREDDY</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=BandaSaiTejaReddy" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=BandaSaiTejaReddy" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/badrmarani"><img src="https://avatars.githubusercontent.com/badrmarani?s=100" width="100px;" alt="Badr-Eddine Marani"/><br /><sub><b>Badr-Eddine Marani</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=badrmarani" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/benheid"><img src="?s=100" width="100px;" alt="Benedikt Heidrich"/><br /><sub><b>Benedikt Heidrich</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=benheid" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/benheid"><img src="?s=100" width="100px;" alt="Benedikt Heidrich"/><br /><sub><b>Benedikt Heidrich</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=benheid" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/benjaminbluhm"><img src="?s=100" width="100px;" alt="Benjamin Bluhm"/><br /><sub><b>Benjamin Bluhm</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=benjaminbluhm" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=benjaminbluhm" title="Documentation">📖</a> <a href="#example-benjaminbluhm" title="Examples">💡</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://haskarb.github.io/"><img src="https://avatars.githubusercontent.com/u/20501023?v=4?s=100" width="100px;" alt="Bhaskar Dhariyal"/><br /><sub><b>Bhaskar Dhariyal</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=haskarb" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=haskarb" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/BINAYKUMAR943"><img src="https://avatars.githubusercontent.com/u/38756834?v=4?s=100" width="100px;" alt="Binay Kumar"/><br /><sub><b>Binay Kumar</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=BINAYKUMAR943" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=BINAYKUMAR943" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=BINAYKUMAR943" title="Tests">⚠️</a></td>
@@ -55,9 +56,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://bmurphyportfolio.netlify.com/"><img src="https://avatars2.githubusercontent.com/u/32182553?v=4?s=100" width="100px;" alt="Brian Murphy"/><br /><sub><b>Brian Murphy</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=bmurdata" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Carlosbogo"><img src="https://avatars.githubusercontent.com/u/84228424?v=4?s=100" width="100px;" alt="Carlos Borrajo"/><br /><sub><b>Carlos Borrajo</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Carlosbogo" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Carlosbogo" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vnmabus"><img src="https://avatars1.githubusercontent.com/u/2364173?v=4?s=100" width="100px;" alt="Carlos Ramos Carreño"/><br /><sub><b>Carlos Ramos Carreño</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=vnmabus" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ChangWeiTan"><img src="https://avatars.githubusercontent.com/u/570744?v=4?s=100" width="100px;" alt="Chang Wei Tan"/><br /><sub><b>Chang Wei Tan</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ChangWeiTan" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ChangWeiTan"><img src="https://avatars.githubusercontent.com/u/570744?v=4?s=100" width="100px;" alt="Chang Wei Tan"/><br /><sub><b>Chang Wei Tan</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ChangWeiTan" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://cheuk.dev"><img src="https://avatars1.githubusercontent.com/u/28761465?v=4?s=100" width="100px;" alt="Cheuk Ting Ho"/><br /><sub><b>Cheuk Ting Ho</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Cheukting" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ckastner"><img src="https://avatars.githubusercontent.com/u/15859947?v=4?s=100" width="100px;" alt="Christian Kastner"/><br /><sub><b>Christian Kastner</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ckastner" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Ackastner" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/cdahlin"><img src="https://avatars.githubusercontent.com/u/1567780?v=4?s=100" width="100px;" alt="Christopher Dahlin"/><br /><sub><b>Christopher Dahlin</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=cdahlin" title="Code">💻</a></td>
@@ -66,9 +67,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ClaudiaSanches"><img src="https://avatars3.githubusercontent.com/u/28742178?v=4?s=100" width="100px;" alt="ClaudiaSanches"/><br /><sub><b>ClaudiaSanches</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ClaudiaSanches" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=ClaudiaSanches" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://sites.google.com/view/corvinpaul/"><img src="https://lh3.googleusercontent.com/zMvwkuxyIsRN1I0-HLojbcbbHaERXa-b9eztZ23z_C2m7cXdMiU4z36ekS5-cgBmikPhZA=w1280?s=100" width="100px;" alt="Corvin Paul"/><br /><sub><b>Corvin Paul</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=corvusrabus" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/daniel-martin-martinez"><img src="https://avatars.githubusercontent.com/dainelli98?s=100" width="100px;" alt="Daniel Martín Martínez"/><br /><sub><b>Daniel Martín Martínez</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=dainelli98" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Adainelli98" title="Bug reports">🐛</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://dhirschfeld.github.io/"><img src="https://avatars1.githubusercontent.com/u/881019?v=4?s=100" width="100px;" alt="Dave Hirschfeld"/><br /><sub><b>Dave Hirschfeld</b></sub></a><br /><a href="#infra-dhirschfeld" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://dhirschfeld.github.io/"><img src="https://avatars1.githubusercontent.com/u/881019?v=4?s=100" width="100px;" alt="Dave Hirschfeld"/><br /><sub><b>Dave Hirschfeld</b></sub></a><br /><a href="#infra-dhirschfeld" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/davidbp"><img src="https://avatars3.githubusercontent.com/u/4223580?v=4?s=100" width="100px;" alt="David Buchaca Prats"/><br /><sub><b>David Buchaca Prats</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=davidbp" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.uco.es/grupos/ayrna/index.php/es/publicaciones/articulos?publications_view_all=1&theses_view_all=0&projects_view_all=0&task=show&view=member&id=22"><img src="https://avatars1.githubusercontent.com/u/47889499?v=4?s=100" width="100px;" alt="David Guijo Rubio"/><br /><sub><b>David Guijo Rubio</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=dguijo" title="Code">💻</a> <a href="#ideas-dguijo" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/DmitriyValetov"><img src="https://avatars0.githubusercontent.com/u/27976850?v=4?s=100" width="100px;" alt="Dmitriy Valetov"/><br /><sub><b>Dmitriy Valetov</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=DmitriyValetov" title="Code">💻</a> <a href="#tutorial-DmitriyValetov" title="Tutorials">✅</a></td>
@@ -77,9 +78,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/dsherry"><img src="https://avatars.githubusercontent.com/dsherry?s=100" width="100px;" alt="Dylan Sherry"/><br /><sub><b>Dylan Sherry</b></sub></a><br /><a href="#infra-dsherry" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Emiliathewolf"><img src="https://avatars2.githubusercontent.com/u/22026218?v=4?s=100" width="100px;" alt="Emilia Rose"/><br /><sub><b>Emilia Rose</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Emiliathewolf" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Emiliathewolf" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/erjieyong"><img src="https://avatars.githubusercontent.com/u/109052378?v=4?s=100" width="100px;" alt="Er Jie Yong"/><br /><sub><b>Er Jie Yong</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3Aerjieyong" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=erjieyong" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/evanmiller29"><img src="https://avatars2.githubusercontent.com/u/8062590?v=4?s=100" width="100px;" alt="Evan Miller"/><br /><sub><b>Evan Miller</b></sub></a><br /><a href="#tutorial-evanmiller29" title="Tutorials">✅</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/evanmiller29"><img src="https://avatars2.githubusercontent.com/u/8062590?v=4?s=100" width="100px;" alt="Evan Miller"/><br /><sub><b>Evan Miller</b></sub></a><br /><a href="#tutorial-evanmiller29" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/eyalshafran"><img src="https://avatars.githubusercontent.com/u/16999574?v=4?s=100" width="100px;" alt="Eyal Shafran"/><br /><sub><b>Eyal Shafran</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=eyalshafran" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/FedericoGarza"><img src="https://avatars.githubusercontent.com/u/10517170?v=4?s=100" width="100px;" alt="Federico Garza"/><br /><sub><b>Federico Garza</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=FedericoGarza" title="Code">💻</a> <a href="#example-FedericoGarza" title="Examples">💡</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/flix6x"><img src="https://avatars.githubusercontent.com/u/30658763?v=4?s=100" width="100px;" alt="Felix Claessen"/><br /><sub><b>Felix Claessen</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Flix6x" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Flix6x" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=Flix6x" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/issues?q=author%3AFlix6x" title="Bug reports">🐛</a></td>
@@ -88,9 +89,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/freddyaboulton"><img src="https://avatars.githubusercontent.com/u/41651716?v=4?s=100" width="100px;" alt="Freddy A Boulton"/><br /><sub><b>Freddy A Boulton</b></sub></a><br /><a href="#infra-freddyaboulton" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/aeon/aeon/commits?author=freddyaboulton" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/chernika158"><img src="https://avatars.githubusercontent.com/u/43787741?s=400&v=4?s=100" width="100px;" alt="Galina Chernikova"/><br /><sub><b>Galina Chernikova</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=chernika158" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/goastler"><img src="https://avatars0.githubusercontent.com/u/7059456?v=4?s=100" width="100px;" alt="George Oastler"/><br /><sub><b>George Oastler</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=goastler" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=goastler" title="Tests">⚠️</a> <a href="#platform-goastler" title="Packaging/porting to new platform">📦</a> <a href="#example-goastler" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/commits?author=goastler" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/gracewgao/"><img src="https://avatars0.githubusercontent.com/u/38268331?v=4?s=100" width="100px;" alt="Grace Gao"/><br /><sub><b>Grace Gao</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=gracewgao" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Agracewgao" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/gracewgao/"><img src="https://avatars0.githubusercontent.com/u/38268331?v=4?s=100" width="100px;" alt="Grace Gao"/><br /><sub><b>Grace Gao</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=gracewgao" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Agracewgao" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/GuiArcencio"><img src="https://avatars.githubusercontent.com/u/47733489?s=100" width="100px;" alt="Guilherme Arcencio"/><br /><sub><b>Guilherme Arcencio</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=GuiArcencio" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/GuzalBulatova"><img src="https://avatars.githubusercontent.com/GuzalBulatova?s=100" width="100px;" alt="Guzal Bulatova"/><br /><sub><b>Guzal Bulatova</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3AGuzalBulatova" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=GuzalBulatova" title="Code">💻</a> <a href="#eventOrganizing-GuzalBulatova" title="Event Organizing">📋</a> <a href="#mentoring-GuzalBulatova" title="Mentoring">🧑‍🏫</a> <a href="#projectManagement-GuzalBulatova" title="Project Management">📆</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3AGuzalBulatova" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon/aeon/commits?author=GuzalBulatova" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/HYang1996"><img src="https://avatars0.githubusercontent.com/u/44179303?v=4?s=100" width="100px;" alt="HYang1996"/><br /><sub><b>HYang1996</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=HYang1996" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=HYang1996" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/commits?author=HYang1996" title="Documentation">📖</a> <a href="#tutorial-HYang1996" title="Tutorials">✅</a></td>
@@ -99,9 +100,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/iljamaurer"><img src="https://avatars.githubusercontent.com/u/45882103?v=4?s=100" width="100px;" alt="Ilja Maurer"/><br /><sub><b>Ilja Maurer</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=iljamaurer" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/IlyasMoutawwakil"><img src="https://avatars.githubusercontent.com/IlyasMoutawwakil?s=100" width="100px;" alt="Ilyas Moutawwakil"/><br /><sub><b>Ilyas Moutawwakil</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=IlyasMoutawwakil" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=IlyasMoutawwakil" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/ireoluwatomiwa-sanusi/"><img src="https://avatars.githubusercontent.com/u/61966277?v=4?s=100" width="100px;" alt="Ireoluwatomiwa"/><br /><sub><b>Ireoluwatomiwa</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Tomiiwa" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ishannangia001"><img src="https://avatars.githubusercontent.com/u/29480389?v=4?s=100" width="100px;" alt="Ishan Nangia"/><br /><sub><b>Ishan Nangia</b></sub></a><br /><a href="#ideas-ishannangia001" title="Ideas, Planning, & Feedback">🤔</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ishannangia001"><img src="https://avatars.githubusercontent.com/u/29480389?v=4?s=100" width="100px;" alt="Ishan Nangia"/><br /><sub><b>Ishan Nangia</b></sub></a><br /><a href="#ideas-ishannangia001" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jnrusson1"><img src="https://avatars.githubusercontent.com/u/51986332?v=4?s=100" width="100px;" alt="Jack Russon"/><br /><sub><b>Jack Russon</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=jnrusson1" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com/"><img src="https://avatars0.githubusercontent.com/u/44509982?v=4?s=100" width="100px;" alt="James Large"/><br /><sub><b>James Large</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=James-Large" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=James-Large" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=James-Large" title="Tests">⚠️</a> <a href="#infra-James-Large" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-James-Large" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jambo6"><img src="https://https://avatars.githubusercontent.com/jambo6?s=100" width="100px;" alt="James Morrill"/><br /><sub><b>James Morrill</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=jambo6" title="Code">💻</a></td>
@@ -110,9 +111,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/whackteachers"><img src="https://avatars0.githubusercontent.com/u/33785383?v=4?s=100" width="100px;" alt="Jason Pong"/><br /><sub><b>Jason Pong</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=whackteachers" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=whackteachers" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/mateuja"><img src="https://avatars.githubusercontent.com/mateuja?s=100" width="100px;" alt="Jaume Mateu"/><br /><sub><b>Jaume Mateu</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=mateuja" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/JonathanBechtel"><img src="https://avatars.githubusercontent.com/u/481696?v=4?s=100" width="100px;" alt="JonathanBechtel"/><br /><sub><b>JonathanBechtel</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=JonathanBechtel" title="Code">💻</a> <a href="#ideas-JonathanBechtel" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon/aeon/commits?author=JonathanBechtel" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/jorenham"><img src="?s=100" width="100px;" alt="Joren Hammudoglu"/><br /><sub><b>Joren Hammudoglu</b></sub></a><br /><a href="#infra-jorenham" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/jorenham"><img src="?s=100" width="100px;" alt="Joren Hammudoglu"/><br /><sub><b>Joren Hammudoglu</b></sub></a><br /><a href="#infra-jorenham" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://juanitorduz.github.io/"><img src="https://avatars1.githubusercontent.com/u/22996444?v=4?s=100" width="100px;" alt="Juan Orduz"/><br /><sub><b>Juan Orduz</b></sub></a><br /><a href="#tutorial-juanitorduz" title="Tutorials">✅</a> <a href="https://github.com/aeon/aeon/commits?author=juanitorduz" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jelc53"><img src="?s=100" width="100px;" alt="Julian Cooper"/><br /><sub><b>Julian Cooper</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=jelc53" title="Code">💻</a> <a href="#ideas-jelc53" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/julianarn/"><img src="https://avatars.githubusercontent.com/u/19613567?v=4?s=100" width="100px;" alt="Juliana"/><br /><sub><b>Juliana</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=julramos" title="Code">💻</a></td>
@@ -121,9 +122,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kanand77"><img src="https://avatars.githubusercontent.com/kanand77?s=100" width="100px;" alt="Kavin Anand"/><br /><sub><b>Kavin Anand</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=kanand77" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://kejsitake.com/"><img src="https://avatars.githubusercontent.com/u/23707808?v=4?s=100" width="100px;" alt="Kejsi Take"/><br /><sub><b>Kejsi Take</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=kejsitake" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/kevinlam2"><img src="https://avatars.githubusercontent.com/u/114420932?s=400&v=4?s=100" width="100px;" alt="Kevin Lam"/><br /><sub><b>Kevin Lam</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=klam-data" title="Code">💻</a> <a href="#example-klam-data" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/commits?author=klam-data" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://whitakerlab.github.io/"><img src="https://avatars1.githubusercontent.com/u/3626306?v=4?s=100" width="100px;" alt="Kirstie Whitaker"/><br /><sub><b>Kirstie Whitaker</b></sub></a><br /><a href="#ideas-KirstieJane" title="Ideas, Planning, & Feedback">🤔</a> <a href="#fundingFinding-KirstieJane" title="Funding Finding">🔍</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://whitakerlab.github.io/"><img src="https://avatars1.githubusercontent.com/u/3626306?v=4?s=100" width="100px;" alt="Kirstie Whitaker"/><br /><sub><b>Kirstie Whitaker</b></sub></a><br /><a href="#ideas-KirstieJane" title="Ideas, Planning, & Feedback">🤔</a> <a href="#fundingFinding-KirstieJane" title="Funding Finding">🔍</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kishmanani"><img src="https://avatars.githubusercontent.com/u/30973056?v=4?s=100" width="100px;" alt="Kishan Manani"/><br /><sub><b>Kishan Manani</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=KishManani" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=KishManani" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=KishManani" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/issues?q=author%3AKishManani" title="Bug reports">🐛</a> <a href="#ideas-KishManani" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/krumeto"><img src="https://avatars3.githubusercontent.com/u/11272436?v=4?s=100" width="100px;" alt="Krum Arnaudov"/><br /><sub><b>Krum Arnaudov</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3Akrumeto" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=krumeto" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/koralturkk"><img src="https://avatars2.githubusercontent.com/u/18037789?s=460&v=4?s=100" width="100px;" alt="Kutay Koralturk"/><br /><sub><b>Kutay Koralturk</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=koralturkk" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Akoralturkk" title="Bug reports">🐛</a></td>
@@ -132,9 +133,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/chillerobscuro"><img src="https://avatars.githubusercontent.com/u/5232872?v=4?s=100" width="100px;" alt="Logan Duffy"/><br /><sub><b>Logan Duffy</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=chillerobscuro" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=chillerobscuro" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=chillerobscuro" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Achillerobscuro" title="Bug reports">🐛</a> <a href="#ideas-chillerobscuro" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://lpantano.github.io/"><img src="https://avatars2.githubusercontent.com/u/1621788?v=4?s=100" width="100px;" alt="Lorena Pantano"/><br /><sub><b>Lorena Pantano</b></sub></a><br /><a href="#ideas-lpantano" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ltoniazzi"><img src="https://avatars.githubusercontent.com/u/61414566?s=100" width="100px;" alt="Lorenzo Toniazzi"/><br /><sub><b>Lorenzo Toniazzi</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ltoniazzi" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Lovkush-A"><img src="https://avatars.githubusercontent.com/u/25344832?v=4?s=100" width="100px;" alt="Lovkush"/><br /><sub><b>Lovkush</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Lovkush-A" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Lovkush-A" title="Tests">⚠️</a> <a href="#ideas-Lovkush-A" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-Lovkush-A" title="Mentoring">🧑‍🏫</a> <a href="#projectManagement-Lovkush-A" title="Project Management">📆</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Lovkush-A"><img src="https://avatars.githubusercontent.com/u/25344832?v=4?s=100" width="100px;" alt="Lovkush"/><br /><sub><b>Lovkush</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Lovkush-A" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Lovkush-A" title="Tests">⚠️</a> <a href="#ideas-Lovkush-A" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-Lovkush-A" title="Mentoring">🧑‍🏫</a> <a href="#projectManagement-Lovkush-A" title="Project Management">📆</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lbventura"><img src="https://avatars.githubusercontent.com/u/68004282?s=96&v=4?s=100" width="100px;" alt="Luis Ventura"/><br /><sub><b>Luis Ventura</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=lbventura" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/luiszugasti"><img src="https://avatars.githubusercontent.com/u/11198457?s=460&u=0645b72683e491824aca16db9702f1d3eb990389&v=4?s=100" width="100px;" alt="Luis Zugasti"/><br /><sub><b>Luis Zugasti</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=luiszugasti" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lmmentel"><img src="https://avatars.githubusercontent.com/u/8989838?v=4?s=100" width="100px;" alt="Lukasz Mentel"/><br /><sub><b>Lukasz Mentel</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=lmmentel" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=lmmentel" title="Documentation">📖</a> <a href="#infra-lmmentel" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/aeon/aeon/commits?author=lmmentel" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Almmentel" title="Bug reports">🐛</a> <a href="#maintenance-lmmentel" title="Maintenance">🚧</a> <a href="#mentoring-lmmentel" title="Mentoring">🧑‍🏫</a></td>
@@ -143,9 +144,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/margaret-gorlin/"><img src="?s=100" width="100px;" alt="Margaret Gorlin"/><br /><sub><b>Margaret Gorlin</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=mgorlin" title="Code">💻</a> <a href="#example-mgorlin" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/commits?author=mgorlin" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/mariamjabara"><img src="?s=100" width="100px;" alt="Mariam Jabara"/><br /><sub><b>Mariam Jabara</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=mariamjabara" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://twitter.com/marielli"><img src="https://avatars2.githubusercontent.com/u/13499809?v=4?s=100" width="100px;" alt="Marielle"/><br /><sub><b>Marielle</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=marielledado" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=marielledado" title="Code">💻</a> <a href="#ideas-marielledado" title="Ideas, Planning, & Feedback">🤔</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/mloning"><img src="https://avatars3.githubusercontent.com/u/21020482?v=4?s=100" width="100px;" alt="Markus Löning"/><br /><sub><b>Markus Löning</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=mloning" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=mloning" title="Tests">⚠️</a> <a href="#maintenance-mloning" title="Maintenance">🚧</a> <a href="#platform-mloning" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3Amloning" title="Reviewed Pull Requests">👀</a> <a href="#infra-mloning" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#example-mloning" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Amloning" title="Bug reports">🐛</a> <a href="#tutorial-mloning" title="Tutorials">✅</a> <a href="#business-mloning" title="Business development">💼</a> <a href="https://github.com/aeon/aeon/commits?author=mloning" title="Documentation">📖</a> <a href="#design-mloning" title="Design">🎨</a> <a href="#eventOrganizing-mloning" title="Event Organizing">📋</a> <a href="#fundingFinding-mloning" title="Funding Finding">🔍</a> <a href="#ideas-mloning" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-mloning" title="Project Management">📆</a> <a href="#question-mloning" title="Answering Questions">💬</a> <a href="#talk-mloning" title="Talks">📢</a> <a href="#mentoring-mloning" title="Mentoring">🧑‍🏫</a> <a href="#video-mloning" title="Videos">📹</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/mloning"><img src="https://avatars3.githubusercontent.com/u/21020482?v=4?s=100" width="100px;" alt="Markus Löning"/><br /><sub><b>Markus Löning</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=mloning" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=mloning" title="Tests">⚠️</a> <a href="#maintenance-mloning" title="Maintenance">🚧</a> <a href="#platform-mloning" title="Packaging/porting to new platform">📦</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3Amloning" title="Reviewed Pull Requests">👀</a> <a href="#infra-mloning" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#example-mloning" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Amloning" title="Bug reports">🐛</a> <a href="#tutorial-mloning" title="Tutorials">✅</a> <a href="#business-mloning" title="Business development">💼</a> <a href="https://github.com/aeon/aeon/commits?author=mloning" title="Documentation">📖</a> <a href="#design-mloning" title="Design">🎨</a> <a href="#eventOrganizing-mloning" title="Event Organizing">📋</a> <a href="#fundingFinding-mloning" title="Funding Finding">🔍</a> <a href="#ideas-mloning" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-mloning" title="Project Management">📆</a> <a href="#question-mloning" title="Answering Questions">💬</a> <a href="#talk-mloning" title="Talks">📢</a> <a href="#mentoring-mloning" title="Mentoring">🧑‍🏫</a> <a href="#video-mloning" title="Videos">📹</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/martin-walter-1a33b3114/"><img src="https://avatars0.githubusercontent.com/u/29627036?v=4?s=100" width="100px;" alt="Martin Walter"/><br /><sub><b>Martin Walter</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=aiwalter" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Aaiwalter" title="Bug reports">🐛</a> <a href="#projectManagement-aiwalter" title="Project Management">📆</a> <a href="#fundingFinding-aiwalter" title="Funding Finding">🔍</a> <a href="#mentoring-aiwalter" title="Mentoring">🧑‍🏫</a> <a href="#ideas-aiwalter" title="Ideas, Planning, & Feedback">🤔</a> <a href="#design-aiwalter" title="Design">🎨</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3Aaiwalter" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon/aeon/commits?author=aiwalter" title="Documentation">📖</a> <a href="#talk-aiwalter" title="Talks">📢</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/martinagvilas"><img src="https://avatars2.githubusercontent.com/u/37339384?v=4?s=100" width="100px;" alt="Martina G. Vilas"/><br /><sub><b>Martina G. Vilas</b></sub></a><br /><a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3Amartinagvilas" title="Reviewed Pull Requests">👀</a> <a href="#ideas-martinagvilas" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars0.githubusercontent.com/u/25731235?v=4?s=100" width="100px;" alt="Matthew Middlehurst"/><br /><sub><b>Matthew Middlehurst</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=MatthewMiddlehurst" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=MatthewMiddlehurst" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=MatthewMiddlehurst" title="Tests">⚠️</a> <a href="#tutorial-MatthewMiddlehurst" title="Tutorials">✅</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3AMatthewMiddlehurst" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon/aeon/issues?q=author%3AMatthewMiddlehurst" title="Bug reports">🐛</a></td>
@@ -154,9 +155,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="michaelfeil.eu"><img src="https://avatars.githubusercontent.com/u/63565275?v=4?s=100" width="100px;" alt="Michael Feil"/><br /><sub><b>Michael Feil</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=michaelfeil" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=michaelfeil" title="Tests">⚠️</a> <a href="#ideas-michaelfeil" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MichalChromcak"><img src="https://avatars1.githubusercontent.com/u/12393430?v=4?s=100" width="100px;" alt="Michal Chromcak"/><br /><sub><b>Michal Chromcak</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=MichalChromcak" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=MichalChromcak" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=MichalChromcak" title="Tests">⚠️</a> <a href="#tutorial-MichalChromcak" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/miraep8"><img src="https://avatars.githubusercontent.com/u/10511777?s=400&u=10a774fd4be767fa3b23a82a98bbfe102c17f0f3&v=4?s=100" width="100px;" alt="Mirae Parker"/><br /><sub><b>Mirae Parker</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=miraep8" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=miraep8" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://mo-saif.github.io/"><img src="https://avatars0.githubusercontent.com/u/27867617?v=4?s=100" width="100px;" alt="Mohammed Saif Kazamel"/><br /><sub><b>Mohammed Saif Kazamel</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3AMo-Saif" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://mo-saif.github.io/"><img src="https://avatars0.githubusercontent.com/u/27867617?v=4?s=100" width="100px;" alt="Mohammed Saif Kazamel"/><br /><sub><b>Mohammed Saif Kazamel</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3AMo-Saif" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://moradisten.github.io/"><img src="https://avatars.githubusercontent.com/u/29915156?v=4?s=100" width="100px;" alt="Morad :)"/><br /><sub><b>Morad :)</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=moradabaz" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=moradabaz" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/commits?author=moradabaz" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Multivin12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=100" width="100px;" alt="Multivin12"/><br /><sub><b>Multivin12</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Multivin12" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Multivin12" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/marcio55afr"><img src="https://avatars.githubusercontent.com/u/42646282?v=4?s=100" width="100px;" alt="Márcio A. Freitas Jr"/><br /><sub><b>Márcio A. Freitas Jr</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=marcio55afr" title="Documentation">📖</a></td>
@@ -165,9 +166,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/nshahpazov/"><img src="https://avatars.githubusercontent.com/nshahpazov?s=100" width="100px;" alt="Nikola Shahpazov"/><br /><sub><b>Nikola Shahpazov</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=nshahpazov" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/nilesh05apr"><img src="https://avatars.githubusercontent.com/u/65773314?v=4?s=100" width="100px;" alt="Nilesh Kumar"/><br /><sub><b>Nilesh Kumar</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=nilesh05apr" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ninfueng"><img src="https://avatars2.githubusercontent.com/u/28499769?v=4?s=100" width="100px;" alt="Ninnart Fuengfusin"/><br /><sub><b>Ninnart Fuengfusin</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ninfueng" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/NoaBenAmi"><img src="https://avatars.githubusercontent.com/u/37590002?v=4?s=100" width="100px;" alt="Noa Ben Ami"/><br /><sub><b>Noa Ben Ami</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=NoaBenAmi" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=NoaBenAmi" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/commits?author=NoaBenAmi" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/NoaBenAmi"><img src="https://avatars.githubusercontent.com/u/37590002?v=4?s=100" width="100px;" alt="Noa Ben Ami"/><br /><sub><b>Noa Ben Ami</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=NoaBenAmi" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=NoaBenAmi" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/commits?author=NoaBenAmi" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/shchur"><img src="https://avatars.githubusercontent.com/u/6944857?v=4?s=100" width="100px;" alt="Oleksandr Shchur"/><br /><sub><b>Oleksandr Shchur</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3Ashchur" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=shchur" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kachayev"><img src="https://avatars.githubusercontent.com/u/485647?v=4?s=100" width="100px;" alt="Oleksii Kachaiev"/><br /><sub><b>Oleksii Kachaiev</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=kachayev" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=kachayev" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/olivermatthews"><img src="https://avatars.githubusercontent.com/u/31141490?v=4?s=100" width="100px;" alt="Oliver Matthews"/><br /><sub><b>Oliver Matthews</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=OliverMatthews" title="Code">💻</a></td>
@@ -176,9 +177,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://ber.gp"><img src="https://avatars1.githubusercontent.com/u/9824244?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Pangoraw" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/paulyim97/"><img src="https://avatars.githubusercontent.com/pyyim?s=100" width="100px;" alt="Paul Yim"/><br /><sub><b>Paul Yim</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=pyyim" title="Code">💻</a> <a href="#example-pyyim" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/commits?author=pyyim" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.imes.uni-hannover.de/de/institut/team/m-sc-karl-philipp-kortmann/"><img src="https://avatars.githubusercontent.com/u/20466981?v=4?s=100" width="100px;" alt="Philipp Kortmann"/><br /><sub><b>Philipp Kortmann</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=MrPr3ntice" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=MrPr3ntice" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Piyush1729"><img src="https://avatars2.githubusercontent.com/u/64950012?v=4?s=100" width="100px;" alt="Piyush Gade"/><br /><sub><b>Piyush Gade</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Piyush1729" title="Code">💻</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3APiyush1729" title="Reviewed Pull Requests">👀</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Piyush1729"><img src="https://avatars2.githubusercontent.com/u/64950012?v=4?s=100" width="100px;" alt="Piyush Gade"/><br /><sub><b>Piyush Gade</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Piyush1729" title="Code">💻</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3APiyush1729" title="Reviewed Pull Requests">👀</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/pul95"><img src="https://avatars.githubusercontent.com/pul95?s=100" width="100px;" alt="Pulkit Verma"/><br /><sub><b>Pulkit Verma</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=pul95" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Quaterion"><img src="https://avatars2.githubusercontent.com/u/23200273?v=4?s=100" width="100px;" alt="Quaterion"/><br /><sub><b>Quaterion</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3AQuaterion" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/rakshitha123"><img src="https://avatars.githubusercontent.com/u/7654679?v=4?s=100" width="100px;" alt="Rakshitha Godahewa"/><br /><sub><b>Rakshitha Godahewa</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=rakshitha123" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=rakshitha123" title="Documentation">📖</a></td>
@@ -187,9 +188,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Ris-Bali"><img src="https://avatars.githubusercontent.com/u/81592570?v=4?s=100" width="100px;" alt="Rishabh Bali"/><br /><sub><b>Rishabh Bali</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Ris-Bali" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/RishiKumarRay"><img src="https://avatars.githubusercontent.com/u/87641376?v=4?s=100" width="100px;" alt="Rishi Kumar Ray"/><br /><sub><b>Rishi Kumar Ray</b></sub></a><br /><a href="#infra-RishiKumarRay" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Riyabelle25"><img src="https://avatars.githubusercontent.com/u/55790848?v=4?s=100" width="100px;" alt="Riya Elizabeth John"/><br /><sub><b>Riya Elizabeth John</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=Riyabelle25" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=Riyabelle25" title="Tests">⚠️</a> <a href="https://github.com/aeon/aeon/commits?author=Riyabelle25" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ronnie-llamado"><img src="https://avatars.githubusercontent.com/ronnie-llamado?s=100" width="100px;" alt="Ronnie Llamado"/><br /><sub><b>Ronnie Llamado</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ronnie-llamado" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ronnie-llamado"><img src="https://avatars.githubusercontent.com/ronnie-llamado?s=100" width="100px;" alt="Ronnie Llamado"/><br /><sub><b>Ronnie Llamado</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ronnie-llamado" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/rnkuhns"><img src="https://avatars0.githubusercontent.com/u/26907244?v=4?s=100" width="100px;" alt="Ryan Kuhns"/><br /><sub><b>Ryan Kuhns</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=RNKuhns" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=RNKuhns" title="Documentation">📖</a> <a href="#tutorial-RNKuhns" title="Tutorials">✅</a> <a href="#example-RNKuhns" title="Examples">💡</a> <a href="#ideas-RNKuhns" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3ARNKuhns" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon/aeon/commits?author=RNKuhns" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/achieveordie"><img src="https://avatars.githubusercontent.com/u/54197164?v=4?s=100" width="100px;" alt="Sagar Mishra"/><br /><sub><b>Sagar Mishra</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=achieveordie" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://sajay.online"><img src="https://avatars2.githubusercontent.com/u/25329624?v=4?s=100" width="100px;" alt="Sajaysurya Ganesh"/><br /><sub><b>Sajaysurya Ganesh</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=sajaysurya" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=sajaysurya" title="Documentation">📖</a> <a href="#design-sajaysurya" title="Design">🎨</a> <a href="#example-sajaysurya" title="Examples">💡</a> <a href="#ideas-sajaysurya" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon/aeon/commits?author=sajaysurya" title="Tests">⚠️</a> <a href="#tutorial-sajaysurya" title="Tutorials">✅</a></td>
@@ -198,9 +199,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/dasgupsa"><img src="https://avatars2.githubusercontent.com/u/10398956?v=4?s=100" width="100px;" alt="Saurabh Dasgupta"/><br /><sub><b>Saurabh Dasgupta</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=dasgupsa" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/SebasKoel"><img src="https://avatars3.githubusercontent.com/u/66252156?v=4?s=100" width="100px;" alt="Sebastiaan Koel"/><br /><sub><b>Sebastiaan Koel</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=SebasKoel" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=SebasKoel" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/shagn"><img src="https://avatars.githubusercontent.com/u/16029092?v=4?s=100" width="100px;" alt="Sebastian Hagn"/><br /><sub><b>Sebastian Hagn</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=shagn" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/AurumnPegasus"><img src="https://avatars.githubusercontent.com/u/54315149?v=4?s=100" width="100px;" alt="Shivansh Subramanian"/><br /><sub><b>Shivansh Subramanian</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=AurumnPegasus" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=AurumnPegasus" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/AurumnPegasus"><img src="https://avatars.githubusercontent.com/u/54315149?v=4?s=100" width="100px;" alt="Shivansh Subramanian"/><br /><sub><b>Shivansh Subramanian</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=AurumnPegasus" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=AurumnPegasus" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/solomon-botchway-a1383821b/"><img src="https://avatars.githubusercontent.com/u/62394255?v=4?s=100" width="100px;" alt="Solomon Botchway"/><br /><sub><b>Solomon Botchway</b></sub></a><br /><a href="#maintenance-snnbotchway" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/khrapovs"><img src="https://avatars.githubusercontent.com/u/3774663?v=4?s=100" width="100px;" alt="Stanislav Khrapov"/><br /><sub><b>Stanislav Khrapov</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=khrapovs" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/SveaMeyer13"><img src="https://avatars.githubusercontent.com/u/46671894?v=4?s=100" width="100px;" alt="Svea Marie Meyer"/><br /><sub><b>Svea Marie Meyer</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=SveaMeyer13" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=SveaMeyer13" title="Code">💻</a></td>
@@ -209,9 +210,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lnthach"><img src="https://avatars0.githubusercontent.com/u/7788363?v=4?s=100" width="100px;" alt="Thach Le Nguyen"/><br /><sub><b>Thach Le Nguyen</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=lnthach" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=lnthach" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/mathco-wf"><img src="https://avatars.githubusercontent.com/mathco-wf?s=100" width="100px;" alt="TheMathcompay Widget Factory Team"/><br /><sub><b>TheMathcompay Widget Factory Team</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=mathco-wf" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tombh"><img src="https://avatars.githubusercontent.com/u/160835?s=80&v=4?s=100" width="100px;" alt="Thomas Buckley-Houston"/><br /><sub><b>Thomas Buckley-Houston</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3Atombh" title="Bug reports">🐛</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/xxl4tomxu98"><img src="https://avatars.githubusercontent.com/u/62292177?s=40&v=4?s=100" width="100px;" alt="Tom Xu"/><br /><sub><b>Tom Xu</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=xxl4tomxu98" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=xxl4tomxu98" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/xxl4tomxu98"><img src="https://avatars.githubusercontent.com/u/62292177?s=40&v=4?s=100" width="100px;" alt="Tom Xu"/><br /><sub><b>Tom Xu</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=xxl4tomxu98" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=xxl4tomxu98" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tch"><img src="https://avatars3.githubusercontent.com/u/184076?v=4?s=100" width="100px;" alt="Tomasz Chodakowski"/><br /><sub><b>Tomasz Chodakowski</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=tch" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=tch" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Atch" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars1.githubusercontent.com/u/9594042?v=4?s=100" width="100px;" alt="Tony Bagnall"/><br /><sub><b>Tony Bagnall</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=TonyBagnall" title="Code">💻</a> <a href="#business-TonyBagnall" title="Business development">💼</a> <a href="https://github.com/aeon/aeon/commits?author=TonyBagnall" title="Documentation">📖</a> <a href="#design-TonyBagnall" title="Design">🎨</a> <a href="#eventOrganizing-TonyBagnall" title="Event Organizing">📋</a> <a href="#fundingFinding-TonyBagnall" title="Funding Finding">🔍</a> <a href="#ideas-TonyBagnall" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-TonyBagnall" title="Project Management">📆</a> <a href="#question-TonyBagnall" title="Answering Questions">💬</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3ATonyBagnall" title="Reviewed Pull Requests">👀</a> <a href="#talk-TonyBagnall" title="Talks">📢</a> <a href="#data-TonyBagnall" title="Data">🔣</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/utsavcoding"><img src="https://avatars3.githubusercontent.com/u/55446385?v=4?s=100" width="100px;" alt="Utsav Kumar Tiwari"/><br /><sub><b>Utsav Kumar Tiwari</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=utsavcoding" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=utsavcoding" title="Documentation">📖</a></td>
@@ -220,9 +221,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/VyomkeshVyas"><img src="?s=100" width="100px;" alt="Vyomkesh Vyas"/><br /><sub><b>Vyomkesh Vyas</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=VyomkeshVyas" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=VyomkeshVyas" title="Documentation">📖</a> <a href="#example-VyomkeshVyas" title="Examples">💡</a> <a href="https://github.com/aeon/aeon/commits?author=VyomkeshVyas" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/templierw/"><img src="https://github.com/templierw.png?s=100" width="100px;" alt="William Templier"/><br /><sub><b>William Templier</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=templierw" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/magittan"><img src="https://avatars0.githubusercontent.com/u/14024202?v=4?s=100" width="100px;" alt="William Zheng"/><br /><sub><b>William Zheng</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=magittan" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=magittan" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/yairbeer"><img src="https://avatars.githubusercontent.com/yairbeer?s=100" width="100px;" alt="Yair Beer"/><br /><sub><b>Yair Beer</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=yairbeer" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/yairbeer"><img src="https://avatars.githubusercontent.com/yairbeer?s=100" width="100px;" alt="Yair Beer"/><br /><sub><b>Yair Beer</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=yairbeer" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/yashlamba"><img src="https://avatars.githubusercontent.com/u/44164398?v=4?s=100" width="100px;" alt="Yash Lamba"/><br /><sub><b>Yash Lamba</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=yashlamba" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xuyxu"><img src="https://avatars2.githubusercontent.com/u/22359569?v=4?s=100" width="100px;" alt="Yi-Xuan Xu"/><br /><sub><b>Yi-Xuan Xu</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=xuyxu" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=xuyxu" title="Tests">⚠️</a> <a href="#maintenance-xuyxu" title="Maintenance">🚧</a> <a href="https://github.com/aeon/aeon/commits?author=xuyxu" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ZiyaoWei"><img src="https://avatars.githubusercontent.com/u/940823?v=4?s=100" width="100px;" alt="Ziyao Wei"/><br /><sub><b>Ziyao Wei</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=ZiyaoWei" title="Code">💻</a></td>
@@ -231,9 +232,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/adoherty21"><img src="https://avatars.githubusercontent.com/u/52799751?s=400&v=4?s=100" width="100px;" alt="adoherty21"/><br /><sub><b>adoherty21</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3Aadoherty21" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/bethrice44"><img src="https://avatars.githubusercontent.com/u/11226988?v=4?s=100" width="100px;" alt="bethrice44"/><br /><sub><b>bethrice44</b></sub></a><br /><a href="https://github.com/aeon/aeon/issues?q=author%3Abethrice44" title="Bug reports">🐛</a> <a href="https://github.com/aeon/aeon/commits?author=bethrice44" title="Code">💻</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3Abethrice44" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon/aeon/commits?author=bethrice44" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/big-o"><img src="https://avatars1.githubusercontent.com/u/1134151?v=4?s=100" width="100px;" alt="big-o"/><br /><sub><b>big-o</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=big-o" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=big-o" title="Tests">⚠️</a> <a href="#design-big-o" title="Design">🎨</a> <a href="#ideas-big-o" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon/aeon/pulls?q=is%3Apr+reviewed-by%3Abig-o" title="Reviewed Pull Requests">👀</a> <a href="#tutorial-big-o" title="Tutorials">✅</a> <a href="#mentoring-big-o" title="Mentoring">🧑‍🏫</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/bobbys-dev"><img src="https://avatars.githubusercontent.com/bobbys-dev?s=100" width="100px;" alt="bobbys"/><br /><sub><b>bobbys</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=bobbys-dev" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/bobbys-dev"><img src="https://avatars.githubusercontent.com/bobbys-dev?s=100" width="100px;" alt="bobbys"/><br /><sub><b>bobbys</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=bobbys-dev" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/brettkoonce"><img src="https://avatars2.githubusercontent.com/u/11281814?v=4?s=100" width="100px;" alt="brett koonce"/><br /><sub><b>brett koonce</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=brettkoonce" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/btrtts"><img src="https://avatars3.githubusercontent.com/u/66252156?v=4?s=100" width="100px;" alt="btrtts"/><br /><sub><b>btrtts</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=btrtts" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/chizzi25"><img src="https://avatars3.githubusercontent.com/u/67911243?v=4?s=100" width="100px;" alt="chizzi25"/><br /><sub><b>chizzi25</b></sub></a><br /><a href="#blog-chizzi25" title="Blogposts">📝</a></td>
@@ -242,9 +243,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hamzahiqb"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=100" width="100px;" alt="hamzahiqb"/><br /><sub><b>hamzahiqb</b></sub></a><br /><a href="#infra-hamzahiqb" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hiqbal2"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=100" width="100px;" alt="hiqbal2"/><br /><sub><b>hiqbal2</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=hiqbal2" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jesellier"><img src="https://avatars0.githubusercontent.com/u/51952076?v=4?s=100" width="100px;" alt="jesellier"/><br /><sub><b>jesellier</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=jesellier" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/jschemm"><img src="https://avatars.githubusercontent.com/u/81151346?v=4?s=100" width="100px;" alt="jschemm"/><br /><sub><b>jschemm</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=jschemm" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/jschemm"><img src="https://avatars.githubusercontent.com/u/81151346?v=4?s=100" width="100px;" alt="jschemm"/><br /><sub><b>jschemm</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=jschemm" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kkoziara"><img src="https://avatars1.githubusercontent.com/u/4346849?v=4?s=100" width="100px;" alt="kkoziara"/><br /><sub><b>kkoziara</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=kkoziara" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Akkoziara" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/matteogales"><img src="https://avatars0.githubusercontent.com/u/9269326?v=4?s=100" width="100px;" alt="matteogales"/><br /><sub><b>matteogales</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=matteogales" title="Code">💻</a> <a href="#design-matteogales" title="Design">🎨</a> <a href="#ideas-matteogales" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/oleskiewicz"><img src="https://avatars1.githubusercontent.com/u/5682158?v=4?s=100" width="100px;" alt="oleskiewicz"/><br /><sub><b>oleskiewicz</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=oleskiewicz" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=oleskiewicz" title="Documentation">📖</a> <a href="https://github.com/aeon/aeon/commits?author=oleskiewicz" title="Tests">⚠️</a></td>
@@ -253,9 +254,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/raishubham1"><img src="https://avatars3.githubusercontent.com/u/29356417?v=4?s=100" width="100px;" alt="raishubham1"/><br /><sub><b>raishubham1</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=raishubham1" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/simone-pignotti"><img src="https://avatars1.githubusercontent.com/u/44410066?v=4?s=100" width="100px;" alt="simone-pignotti"/><br /><sub><b>simone-pignotti</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=simone-pignotti" title="Code">💻</a> <a href="https://github.com/aeon/aeon/issues?q=author%3Asimone-pignotti" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sophijka"><img src="https://avatars2.githubusercontent.com/u/47450591?v=4?s=100" width="100px;" alt="sophijka"/><br /><sub><b>sophijka</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=sophijka" title="Documentation">📖</a> <a href="#maintenance-sophijka" title="Maintenance">🚧</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/sri1419"><img src="https://avatars2.githubusercontent.com/u/65078278?v=4?s=100" width="100px;" alt="sri1419"/><br /><sub><b>sri1419</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=sri1419" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/sri1419"><img src="https://avatars2.githubusercontent.com/u/65078278?v=4?s=100" width="100px;" alt="sri1419"/><br /><sub><b>sri1419</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=sri1419" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tensorflow-as-tf"><img src="https://avatars.githubusercontent.com/u/51345718?v=4?s=100" width="100px;" alt="tensorflow-as-tf"/><br /><sub><b>tensorflow-as-tf</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=tensorflow-as-tf" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vedazeren"><img src="https://avatars3.githubusercontent.com/u/63582874?v=4?s=100" width="100px;" alt="vedazeren"/><br /><sub><b>vedazeren</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=vedazeren" title="Code">💻</a> <a href="https://github.com/aeon/aeon/commits?author=vedazeren" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vincent-nich12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=100" width="100px;" alt="vincent-nich12"/><br /><sub><b>vincent-nich12</b></sub></a><br /><a href="https://github.com/aeon/aeon/commits?author=vincent-nich12" title="Code">💻</a></td>
diff --git a/aeon/annotation/adapters/_pyod.py b/aeon/annotation/adapters/_pyod.py
index 497eb362..cf7e6e68 100644
--- a/aeon/annotation/adapters/_pyod.py
+++ b/aeon/annotation/adapters/_pyod.py
@@ -25,11 +25,11 @@ class PyODAnnotator(BaseSeriesAnnotator):
         See ``https://pyod.readthedocs.io/en/latest/`` documentation for a detailed
         description of all options.
     fmt : str {"dense", "sparse"}, optional (default="dense")
-        Annotation output format:
+        annotation output format:
         * If "sparse", a sub-series of labels for only the outliers in X is returned,
         * If "dense", a series of labels for all values in X is returned.
     labels : str {"indicator", "score"}, optional (default="indicator")
-        Annotation output labels:
+        annotation output labels:
         * If "indicator", returned values are boolean, indicating whether a value is an
         outlier,
         * If "score", returned values are floats, giving the outlier score.
diff --git a/aeon/annotation/base/_base.py b/aeon/annotation/base/_base.py
index 9aa3e1f8..30f06c85 100644
--- a/aeon/annotation/base/_base.py
+++ b/aeon/annotation/base/_base.py
@@ -33,11 +33,11 @@ class BaseSeriesAnnotator(BaseEstimator):
     Parameters
     ----------
     fmt : str {"dense", "sparse"}, optional (default="dense")
-        Annotation output format:
+        annotation output format:
         * If "sparse", a sub-series of labels for only the outliers in X is returned,
         * If "dense", a series of labels for all values in X is returned.
     labels : str {"indicator", "score"}, optional (default="indicator")
-        Annotation output labels:
+        annotation output labels:
         * If "indicator", returned values are boolean, indicating whether a value is an
         outlier,
         * If "score", returned values are floats, giving the outlier score.
diff --git a/aeon/annotation/clasp.py b/aeon/annotation/clasp.py
index aff9c561..09ea982b 100644
--- a/aeon/annotation/clasp.py
+++ b/aeon/annotation/clasp.py
@@ -198,7 +198,7 @@ class ClaSPSegmentation(BaseSeriesAnnotator):
     n_cps :                 int, default = 1
         the number of change points to search
     fmt :                  str {"dense", "sparse"}, optional (default="sparse")
-        Annotation output format:
+        annotation output format:
         * If "sparse", a pd.Series of the found Change Points is returned
         * If "dense", a pd.IndexSeries with the Segmenation of X is returned
     exclusion_radius : int
diff --git a/aeon/annotation/hmm.py b/aeon/annotation/hmm.py
index 09a1e30a..1e76270e 100644
--- a/aeon/annotation/hmm.py
+++ b/aeon/annotation/hmm.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-HMM Annotation Estimator.
+HMM annotation Estimator.
 
 Implements a basic Hidden Markov Model (HMM) as an annotation estimator.
 To read more about the algorithm, check out the `HMM wikipedia page
diff --git a/aeon/classification/base.py b/aeon/classification/base.py
index 9471f39c..69a68e6e 100644
--- a/aeon/classification/base.py
+++ b/aeon/classification/base.py
@@ -376,11 +376,11 @@ class BaseClassifier(BaseEstimator, ABC):
         Parameters
         ----------
         X : any object (to check/convert)
-            should be of a supported Panel mtype or 2D numpy.ndarray
+            should be of a supported Collection type or 2D numpy.ndarray
 
         Returns
         -------
-        X: an object of a supported Panel mtype, numpy3D if X was a 2D numpy.ndarray
+        X: an object of a supported Collection type, numpy3D if X was a 2D numpy.ndarray
 
         Raises
         ------
diff --git a/aeon/classification/dictionary_based/_weasel_v2.py b/aeon/classification/dictionary_based/_weasel_v2.py
index 773d6ced..965bff23 100644
--- a/aeon/classification/dictionary_based/_weasel_v2.py
+++ b/aeon/classification/dictionary_based/_weasel_v2.py
@@ -311,18 +311,6 @@ class WEASELTransformerV2:
         Seed for random, integer
     """
 
-    # _tags = {
-    #     "univariate-only": True,
-    #     "scitype:transform-input": "Series",
-    #     # what is the scitype of X: Series, or Panel
-    #     "scitype:transform-output": "Series",
-    #     # what scitype is returned: Primitives, Series, Panel
-    #     "scitype:instancewise": False,  # is this an instance-wise transform?
-    #     "X_inner_mtype": "numpy3D",  # which mtypes do _fit/_predict support for X?
-    #     "y_inner_mtype": "pd_Series_Table",  # which mtypes does y require?
-    #     "requires_y": True,  # does y need to be passed in fit?
-    # }
-
     def __init__(
         self,
         min_window=4,
diff --git a/aeon/classification/distance_based/_time_series_neighbors.py b/aeon/classification/distance_based/_time_series_neighbors.py
index 03ff8233..405dd2d8 100644
--- a/aeon/classification/distance_based/_time_series_neighbors.py
+++ b/aeon/classification/distance_based/_time_series_neighbors.py
@@ -95,9 +95,10 @@ class KNeighborsTimeSeriesClassifier(BaseClassifier):
 
         Parameters
         ----------
-        X : aeon-compatible Panel data format, with n_samples series
-        y : {array-like, sparse matrix}
-            Class labels of shape = [n_samples]
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
+        y : array-like, shape = [n_instances]
+            The class labels.
         """
         if isinstance(self.distance, str):
             if self.distance_params is None:
@@ -116,11 +117,12 @@ class KNeighborsTimeSeriesClassifier(BaseClassifier):
 
         Parameters
         ----------
-        X : aeon-compatible Panel data format, with n_samples series
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
 
         Returns
         -------
-        p : array of shape = [n_samples, n_classes]
+        p : array of shape = [n_instances, n_classes]
             The class probabilities of the input samples. Classes are ordered
             by lexicographic order.
         """
@@ -142,11 +144,12 @@ class KNeighborsTimeSeriesClassifier(BaseClassifier):
 
         Parameters
         ----------
-        X : aeon-compatible Panel data format, with n_samples series
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
 
         Returns
         -------
-        y : array of shape [n_samples] or [n_samples, n_outputs]
+        y : array of shape [n_instances]
             Class labels for each data sample.
         """
         self.check_is_fitted()
@@ -170,7 +173,8 @@ class KNeighborsTimeSeriesClassifier(BaseClassifier):
 
         Parameters
         ----------
-        X : aeon-compatible data format, Panel or Series, with n_samples series
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
 
         Returns
         -------
diff --git a/aeon/classification/early_classification/base.py b/aeon/classification/early_classification/base.py
index 524af46e..ecacd05f 100644
--- a/aeon/classification/early_classification/base.py
+++ b/aeon/classification/early_classification/base.py
@@ -530,11 +530,11 @@ class BaseEarlyClassifier(BaseEstimator, ABC):
         Parameters
         ----------
         X : any object (to check/convert)
-            should be of a supported Panel mtype or 2D numpy.ndarray
+            should be of a supported input type or 2D numpy.ndarray
 
         Returns
         -------
-        X: an object of a supported Panel mtype, numpy3D if X was a 2D numpy.ndarray
+        X: an object of a supported input type, numpy3D if X was a 2D numpy.ndarray
 
         Raises
         ------
@@ -584,7 +584,7 @@ class BaseEarlyClassifier(BaseEstimator, ABC):
 
         Parameters
         ----------
-        X : check whether conformant with any aeon Panel mtype specification
+        X : check whether conformant with any aeon input type specification
         y : check whether a pd.Series or np.array
         enforce_min_cases : int, optional (default=1)
             check there are a minimum number of instances.
@@ -609,12 +609,12 @@ class BaseEarlyClassifier(BaseEstimator, ABC):
 
         Parameters
         ----------
-        X : an object of a supported Panel mtype, or 2D numpy.ndarray
+        X : an object of a supported input type including 2D numpy.ndarray
         y : np.ndarray or pd.Series
 
         Returns
         -------
-        X: an object of a supported Panel mtype, numpy3D if X was a 2D numpy.ndarray
+        X: an object of a supported input type, numpy3D if X was a 2D numpy.ndarray
         y: np.ndarray
         """
         _internal_convert = BaseClassifier._internal_convert
diff --git a/aeon/clustering/partitioning/_lloyds.py b/aeon/clustering/partitioning/_lloyds.py
index 9b5b371b..bee4e8bc 100644
--- a/aeon/clustering/partitioning/_lloyds.py
+++ b/aeon/clustering/partitioning/_lloyds.py
@@ -12,7 +12,7 @@ from sklearn.utils.extmath import stable_cumsum
 from aeon.clustering.base import BaseClusterer
 from aeon.clustering.metrics.averaging import mean_average
 from aeon.distances import distance_factory, pairwise_distance
-from aeon.distances._ddtw import average_of_slope_transform
+from aeon.distances._ddtw import average_of_slope
 
 
 def _forgy_center_initializer(
@@ -301,8 +301,11 @@ class TimeSeriesLloyds(BaseClusterer, ABC):
             Fitted estimator.
         """
         self._check_params(X)
-        if self.metric == "ddtw" or self.metric == "wddtw":
-            X = average_of_slope_transform(X)
+        if self.metric == "wddtw" or self.metric == "ddtw":
+            derivative_X = np.zeros((X.shape[0], X.shape[1], X.shape[2] - 2))
+            for i in range(X.shape[0]):
+                derivative_X[i] = average_of_slope(X[i])
+            X = derivative_X
             if self.metric == "ddtw":
                 self._distance_metric = distance_factory(
                     X[0], X[1], metric="dtw", **self._distance_params
@@ -349,7 +352,10 @@ class TimeSeriesLloyds(BaseClusterer, ABC):
             Index of the cluster each time series in X belongs to.
         """
         if self.metric == "ddtw" or self.metric == "wddtw":
-            X = average_of_slope_transform(X)
+            derivative_X = np.zeros((X.shape[0], X.shape[1], X.shape[2] - 2))
+            for i in range(X.shape[0]):
+                derivative_X[i] = average_of_slope(X[i])
+            X = derivative_X
         return self._assign_clusters(X, self.cluster_centers_)[0]
 
     def _fit_one_init(self, X) -> Tuple[np.ndarray, np.ndarray, float, int]:
diff --git a/aeon/distances/__init__.py b/aeon/distances/__init__.py
index 982e4edb..03149473 100644
--- a/aeon/distances/__init__.py
+++ b/aeon/distances/__init__.py
@@ -11,12 +11,15 @@ __all__ = [
     "dtw_pairwise_distance",
     "dtw_cost_matrix",
     "dtw_alignment_path",
+    "ddtw_distance",
+    "ddtw_pairwise_distance",
+    "ddtw_alignment_path",
+    "ddtw_cost_matrix",
     "distance",
     "distance_factory",
     "pairwise_distance",
     "euclidean_distance",
     "squared_distance",
-    "ddtw_distance",
     "wdtw_distance",
     "wddtw_distance",
     "edr_distance",
@@ -24,9 +27,7 @@ __all__ = [
     "msm_distance",
     "lcss_distance",
     "twe_distance",
-    "ddtw_alignment_path",
     "wdtw_alignment_path",
-    "wddtw_alignment_path",
     "lcss_alignment_path",
     "msm_alignment_path",
     "erp_alignment_path",
@@ -34,12 +35,17 @@ __all__ = [
     "distance_alignment_path_factory",
     "distance_alignment_path",
     "twe_alignment_path",
+    "wddtw_alignment_path",
 ]
 
 from aeon.distances._bounding_matrix import create_bounding_matrix
-from aeon.distances._distance import (
+from aeon.distances._ddtw import (
     ddtw_alignment_path,
+    ddtw_cost_matrix,
     ddtw_distance,
+    ddtw_pairwise_distance,
+)
+from aeon.distances._distance import (
     distance,
     distance_alignment_path,
     distance_alignment_path_factory,
diff --git a/aeon/distances/_ddtw.py b/aeon/distances/_ddtw.py
index 0e8cce55..bbf732eb 100644
--- a/aeon/distances/_ddtw.py
+++ b/aeon/distances/_ddtw.py
@@ -1,47 +1,344 @@
 # -*- coding: utf-8 -*-
-__author__ = ["chrisholder", "TonyBagnall"]
+r"""Derivative Dynamic Time Warping (DDTW) distance.
 
+DDTW is an adaptation of DTW originally proposed in [1]_. DDTW attempts to
+improve on dtw by better account for the 'shape' of the time series.
+This is done by considering y axis data points as higher level features of 'shape'.
+To do this the first derivative of the sequence is taken, and then using this
+derived sequence a dtw computation is done.
+The default derivative used is:
 
-import warnings
-from typing import Any, Callable, List, Tuple
+.. math::
+    D_{x}[q] = \frac{{}(q_{i} - q_{i-1} + ((q_{i+1} - q_{i-1}/2)}{2}
+
+Where q is the original time series and d_q is the derived time series.
+
+References
+----------
+.. [1] Keogh, Eamonn & Pazzani, Michael. (2002). Derivative Dynamic Time Warping.
+    First SIAM International Conference on Data Mining.
+    1. 10.1137/1.9781611972719.1.
+"""
+__author__ = ["chrisholder", "tonybagnall"]
+
+from typing import List, Tuple
 
 import numpy as np
 from numba import njit
-from numba.core.errors import NumbaWarning
 
 from aeon.distances._alignment_paths import compute_min_return_path
-from aeon.distances._bounding_matrix import create_bounding_matrix
-from aeon.distances._dtw import _dtw_cost_matrix
-from aeon.distances.base import (
-    DistanceAlignmentPathCallable,
-    DistanceCallable,
-    NumbaDistance,
-)
+from aeon.distances._dtw import _dtw_cost_matrix, _dtw_distance, create_bounding_matrix
+
+
+@njit(cache=True, fastmath=True)
+def ddtw_distance(x: np.ndarray, y: np.ndarray, window: float = None) -> float:
+    r"""Compute the ddtw distance between two time series.
+
+    Parameters
+    ----------
+    x: np.ndarray, of shape (n_channels, n_timepoints) or (n_timepoints,) or
+            (n_instances, n_channels, n_timepoints)
+        First time series.
+    y: np.ndarray, of shape (m_channels, m_timepoints) or (m_timepoints,) or
+            (m_instances, m_channels, m_timepoints)
+        Second time series.
+    window: float, default=None
+        The window to use for the bounding matrix. If None, no bounding matrix
+        is used.
+
+    Returns
+    -------
+    float
+        ddtw distance between x and y.
+
+    Raises
+    ------
+    ValueError
+        If x and y are not 1D, 2D, or 3D arrays.
+        If n_timepoints or m_timepoints are less than 2.
+
+    Examples
+    --------
+    >>> import numpy as np
+    >>> from aeon.distances import ddtw_distance
+    >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
+    >>> y = np.array([[42, 23, 21, 55, 1, 19, 33, 34, 29, 19]])
+    >>> ddtw_distance(x, y)
+    2179.9375
+    """
+    if x.ndim == 1 and y.ndim == 1:
+        _x = average_of_slope(x.reshape((1, x.shape[0])))
+        _y = average_of_slope(y.reshape((1, y.shape[0])))
+        bounding_matrix = create_bounding_matrix(_x.shape[1], _y.shape[1], window)
+        return _dtw_distance(_x, _y, bounding_matrix)
+    if x.ndim == 2 and y.ndim == 2:
+        _x = average_of_slope(x)
+        _y = average_of_slope(y)
+        bounding_matrix = create_bounding_matrix(_x.shape[1], _y.shape[1], window)
+        return _dtw_distance(_x, _y, bounding_matrix)
+    if x.ndim == 3 and y.ndim == 3:
+        distance = 0
+        bounding_matrix = create_bounding_matrix(x.shape[2] - 2, y.shape[2] - 2, window)
+        for curr_x, curr_y in zip(x, y):
+            _x = average_of_slope(curr_x)
+            _y = average_of_slope(curr_y)
+            distance += _dtw_distance(_x, _y, bounding_matrix)
+        return distance
+    raise ValueError("x and y must be 1D, 2D, or 3D arrays")
+
+
+@njit(cache=True, fastmath=True)
+def ddtw_cost_matrix(x: np.ndarray, y: np.ndarray, window: float = None) -> np.ndarray:
+    r"""Compute the ddtw cost matrix between two time series.
+
+    Parameters
+    ----------
+    x: np.ndarray, of shape (n_channels, n_timepoints) or (n_timepoints,) or
+            (n_instances, n_channels, n_timepoints)
+        First time series.
+    y: np.ndarray, of shape (m_channels, m_timepoints) or (m_timepoints,) or
+            (m_instances, m_channels, m_timepoints)
+        Second time series.
+    window: float, default=None
+        The window to use for the bounding matrix. If None, no bounding matrix
+        is used.
+
+    Returns
+    -------
+    np.ndarray (n_timepoints, m_timepoints)
+        ddtw cost matrix between x and y.
+
+    Raises
+    ------
+    ValueError
+        If x and y are not 1D, 2D, or 3D arrays.
+        If n_timepoints or m_timepoints are less than 2.
+
+    Examples
+    --------
+    >>> import numpy as np
+    >>> from aeon.distances import ddtw_cost_matrix
+    >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
+    >>> y = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
+    >>> ddtw_cost_matrix(x, y)
+    array([[0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.],
+           [0., 0., 0., 0., 0., 0., 0., 0.]])
+    """
+    if x.ndim == 1 and y.ndim == 1:
+        _x = average_of_slope(x.reshape((1, x.shape[0])))
+        _y = average_of_slope(y.reshape((1, y.shape[0])))
+        bounding_matrix = create_bounding_matrix(_x.shape[1], _y.shape[1], window)
+        return _dtw_cost_matrix(_x, _y, bounding_matrix)
+    if x.ndim == 2 and y.ndim == 2:
+        _x = average_of_slope(x)
+        _y = average_of_slope(y)
+        bounding_matrix = create_bounding_matrix(_x.shape[1], _y.shape[1], window)
+        return _dtw_cost_matrix(_x, _y, bounding_matrix)
+    if x.ndim == 3 and y.ndim == 3:
+        bounding_matrix = create_bounding_matrix(x.shape[2] - 2, y.shape[2] - 2, window)
+        cost_matrix = np.zeros((x.shape[2] - 2, y.shape[2] - 2))
+        for curr_x, curr_y in zip(x, y):
+            _x = average_of_slope(curr_x)
+            _y = average_of_slope(curr_y)
+            cost_matrix = np.add(cost_matrix, _dtw_cost_matrix(_x, _y, bounding_matrix))
+        return cost_matrix
+    raise ValueError("x and y must be 1D, 2D, or 3D arrays")
+
+
+@njit(cache=True, fastmath=True)
+def ddtw_pairwise_distance(
+    X: np.ndarray, y: np.ndarray = None, window: float = None
+) -> np.ndarray:
+    """Compute the ddtw pairwise distance between a set of time series.
+
+    Parameters
+    ----------
+    X: np.ndarray, of shape (n_instances, n_channels, n_timepoints) or
+            (n_instances, n_timepoints)
+        A collection of time series instances.
+    y: np.ndarray, of shape (m_instances, m_channels, m_timepoints) or
+            (m_instances, m_timepoints) or (m_timepoints,), default=None
+        A collection of time series instances.
+    window: float, default=None
+        The window to use for the bounding matrix. If None, no bounding matrix
+        is used.
+
+    Returns
+    -------
+    np.ndarray (n_instances, n_instances)
+        ddtw pairwise matrix between the instances of X.
+
+    Raises
+    ------
+    ValueError
+        If X is not 2D or 3D array when only passing X.
+        If X and y are not 1D, 2D or 3D arrays when passing both X and y.
+        If n_timepoints is less than 2.
+
+    Examples
+    --------
+    >>> import numpy as np
+    >>> from aeon.distances import ddtw_pairwise_distance
+    >>> # Distance between each time series in a collection of time series
+    >>> X = np.array([[[1, 2, 3]],[[49, 58, 61]], [[73, 82, 99]]])
+    >>> ddtw_pairwise_distance(X)
+    array([[  0.  ,  42.25, 100.  ],
+           [ 42.25,   0.  ,  12.25],
+           [100.  ,  12.25,   0.  ]])
+
+    >>> # Distance between two collections of time series
+    >>> X = np.array([[[19, 12, 39]],[[40, 51, 69]], [[79, 28, 91]]])
+    >>> y = np.array([[[110, 15, 123]],[[14, 150, 116]], [[9917, 118, 29]]])
+    >>> ddtw_pairwise_distance(X, y)
+    array([[2.09306250e+03, 8.46400000e+03, 5.43611290e+07],
+           [3.24900000e+03, 6.52056250e+03, 5.45271481e+07],
+           [4.73062500e+02, 1.34560000e+04, 5.40078010e+07]])
+
+    >>> X = np.array([[[10, 22, 399]],[[41, 500, 1316]], [[117, 18, 9]]])
+    >>> y_univariate = np.array([[100, 11, 199],[10, 15, 26], [170, 108, 1119]])
+    >>> ddtw_pairwise_distance(X, y_univariate)
+    array([[ 15129.    ],
+           [322624.    ],
+           [  3220.5625]])
+    """
+    if y is None:
+        # To self
+        if X.ndim == 3:
+            return _ddtw_pairwise_distance(X, window)
+        if X.ndim == 2:
+            _X = X.reshape((X.shape[0], 1, X.shape[1]))
+            return _ddtw_pairwise_distance(_X, window)
+        raise ValueError("x and y must be 2D or 3D arrays")
+    elif y.ndim == X.ndim:
+        # Multiple to multiple
+        if y.ndim == 3 and X.ndim == 3:
+            return _ddtw_from_multiple_to_multiple_distance(X, y, window)
+        if y.ndim == 2 and X.ndim == 2:
+            _x = X.reshape((X.shape[0], 1, X.shape[1]))
+            _y = y.reshape((y.shape[0], 1, y.shape[1]))
+            return _ddtw_from_multiple_to_multiple_distance(_x, _y, window)
+        if y.ndim == 1 and X.ndim == 1:
+            _x = X.reshape((1, 1, X.shape[0]))
+            _y = y.reshape((1, 1, y.shape[0]))
+            return _ddtw_from_multiple_to_multiple_distance(_x, _y, window)
+        raise ValueError("x and y must be 1D, 2D, or 3D arrays")
+    else:
+        # Single to multiple
+        if X.ndim == 3 and y.ndim == 2:
+            _y = y.reshape((1, y.shape[0], y.shape[1]))
+            return _ddtw_from_multiple_to_multiple_distance(X, _y, window)
+        if y.ndim == 3 and X.ndim == 2:
+            _x = X.reshape((1, X.shape[0], X.shape[1]))
+            return _ddtw_from_multiple_to_multiple_distance(_x, y, window)
+        if X.ndim == 2 and y.ndim == 1:
+            _x = X.reshape((X.shape[0], 1, X.shape[1]))
+            _y = y.reshape((1, 1, y.shape[0]))
+            return _ddtw_from_multiple_to_multiple_distance(_x, _y, window)
+        if y.ndim == 2 and X.ndim == 1:
+            _x = X.reshape((1, 1, X.shape[0]))
+            _y = y.reshape((y.shape[0], 1, y.shape[1]))
+            return _ddtw_from_multiple_to_multiple_distance(_x, _y, window)
+        else:
+            raise ValueError("x and y must be 2D or 3D arrays")
+
+
+@njit(cache=True, fastmath=True)
+def _ddtw_pairwise_distance(X: np.ndarray, window: float) -> np.ndarray:
+    n_instances = X.shape[0]
+    distances = np.zeros((n_instances, n_instances))
+    bounding_matrix = create_bounding_matrix(X.shape[2] - 2, X.shape[2] - 2, window)
+
+    X_average_of_slope = np.zeros((n_instances, X.shape[1], X.shape[2] - 2))
+    for i in range(n_instances):
+        X_average_of_slope[i] = average_of_slope(X[i])
+
+    for i in range(n_instances):
+        for j in range(i + 1, n_instances):
+            distances[i, j] = _dtw_distance(
+                X_average_of_slope[i], X_average_of_slope[j], bounding_matrix
+            )
+            distances[j, i] = distances[i, j]
+
+    return distances
+
+
+@njit(cache=True, fastmath=True)
+def _ddtw_from_multiple_to_multiple_distance(
+    x: np.ndarray, y: np.ndarray, window: float
+) -> np.ndarray:
+    n_instances = x.shape[0]
+    m_instances = y.shape[0]
+    distances = np.zeros((n_instances, m_instances))
+    bounding_matrix = create_bounding_matrix(x.shape[2], y.shape[2], window)
+
+    # Derive the arrays before so that we dont have to redo every iteration
+    derive_x = np.zeros((x.shape[0], x.shape[1], x.shape[2] - 2))
+    for i in range(x.shape[0]):
+        derive_x[i] = average_of_slope(x[i])
 
-# Warning occurs when using large time series (i.e. 1000x1000)
-warnings.simplefilter("ignore", category=NumbaWarning)
+    derive_y = np.zeros((y.shape[0], y.shape[1], y.shape[2] - 2))
+    for i in range(y.shape[0]):
+        derive_y[i] = average_of_slope(y[i])
 
-DerivativeCallable = Callable[[np.ndarray], np.ndarray]
+    for i in range(n_instances):
+        for j in range(m_instances):
+            distances[i, j] = _dtw_distance(derive_x[i], derive_y[j], bounding_matrix)
+    return distances
 
 
-def average_of_slope_transform(X: np.ndarray) -> np.ndarray:
-    """Compute the average of a slope between points for multiple series.
+@njit(cache=True, fastmath=True)
+def ddtw_alignment_path(
+    x: np.ndarray, y: np.ndarray, window: float = None
+) -> Tuple[List[Tuple[int, int]], float]:
+    """Compute the ddtw alignment path between two time series.
 
     Parameters
     ----------
-    X: np.ndarray (of shape (d, m) where d is the dimensions and m is the timepoints.
-        A time series.
+    x: np.ndarray, of shape (n_channels, n_timepoints) or (n_timepoints,) or
+            (n_instances, n_channels, n_timepoints)
+        First time series.
+    y: np.ndarray, of shape (m_channels, m_timepoints) or (m_timepoints,) or
+            (m_instances, m_channels, m_timepoints)
+        Second time series.
+    window: float, default=None
+        The window to use for the bounding matrix. If None, no bounding matrix
+        is used.
 
     Returns
     -------
-    np.ndarray (2d array of shape nxm where n is len(q.shape[0]-2) and m is
-                len(q.shape[1]))
-        The derviative of the time series X.
+    List[Tuple[int, int]]
+        The alignment path between the two time series where each element is a tuple
+        of the index in x and the index in y that have the best alignment according
+        to the cost matrix.
+    float
+        The ddtw distance betweeen the two time series.
+
+    Raises
+    ------
+    ValueError
+        If x and y are not 1D, 2D, or 3D arrays.
+        If n_timepoints or m_timepoints are less than 2.
+
+    Examples
+    --------
+    >>> import numpy as np
+    >>> from aeon.distances import ddtw_alignment_path
+    >>> x = np.array([[1, 2, 3, 6]])
+    >>> y = np.array([[1, 2, 3, 4]])
+    >>> ddtw_alignment_path(x, y)
+    ([(0, 0), (1, 1)], 0.25)
     """
-    derivative_X = []
-    for val in X:
-        derivative_X.append(average_of_slope(val))
-    return np.array(derivative_X)
+    cost_matrix = ddtw_cost_matrix(x, y, window)
+    return (
+        compute_min_return_path(cost_matrix),
+        cost_matrix[x.shape[-1] - 3, y.shape[-1] - 3],
+    )
 
 
 @njit(cache=True, fastmath=True)
@@ -51,166 +348,39 @@ def average_of_slope(q: np.ndarray) -> np.ndarray:
     Computes the average of the slope of the line through the point in question and
     its left neighbour, and the slope of the line through the left neighbour and the
     right neighbour. proposed in [1] for use in this context.
-
     .. math::
     q'_(i) = \frac{{}(q_{i} - q_{i-1} + ((q_{i+1} - q_{i-1}/2)}{2}
-
     Where q is the original time series and q' is the derived time series.
 
     Parameters
     ----------
-    q: np.ndarray (of shape (d, m) where d is the dimensions and m is the timepoints.
-        A time series.
+    q: np.ndarray (n_channels, n_timepoints)
+        Time series to take derivative of.
 
     Returns
     -------
-    np.ndarray (2d array of shape nxm where n is len(q.shape[0]-2) and m is
-                len(q.shape[1]))
+    np.ndarray  (n_channels, n_timepoints - 2)
         Array containing the derivative of q.
 
-    References
-    ----------
-    .. [1] Keogh E, Pazzani M Derivative dynamic time warping. In: proceedings of 1st
-    SIAM International Conference on Data Mining, 2001
-    """
-    q = q.transpose()
-    q2 = 0.25 * q[2:] + 0.5 * q[1:-1] - 0.75 * q[:-2]
-    q2 = q2.transpose()
-    return q2
-
-
-class _DdtwDistance(NumbaDistance):
-    """Derivative dynamic time warping (ddtw) between two time series.
-
-    Takes the slope based derivative of the series (using compute_derivative),
-    then applies DTW (using the _cost_matrix from _DtwDistance)
+    Raises
+    ------
+    ValueError
+        If the time series has less than 3 points.
+
+    Examples
+    --------
+    >>> import numpy as np
+    >>> from aeon.distances._ddtw import average_of_slope
+    >>> q = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
+    >>> average_of_slope(q)
+    array([[1., 1., 1., 1., 1., 1., 1., 1.]])
     """
-
-    def _distance_alignment_path_factory(
-        self,
-        x: np.ndarray,
-        y: np.ndarray,
-        return_cost_matrix: bool = False,
-        window: float = None,
-        compute_derivative: DerivativeCallable = average_of_slope,
-        **kwargs: Any,
-    ) -> DistanceAlignmentPathCallable:
-        """Create a no_python compiled ddtw distance alignment path callable.
-
-        Series should be shape (d, m), where d is the number of dimensions, m the series
-        length. Series can be different lengths.
-
-        Parameters
-        ----------
-        x: np.ndarray (2d array of shape (d,m1)).
-            First time series.
-        y: np.ndarray (2d array of shape (d,m2)).
-            Second time series.
-        return_cost_matrix: bool, defaults = False
-            Boolean that when true will also return the cost matrix.
-        window: float, defaults = None
-            Float that is the radius of the Sakoe-Chiba window (if using Sakoe-Chiba
-            lower bounding). Must be between 0 and 1.
-        compute_derivative: Callable[[np.ndarray], np.ndarray],
-                                defaults = average slope difference
-            Callable that computes the derivative. If none is provided the average of
-            the slope between two points used.
-        kwargs: any
-            extra kwargs.
-
-        Returns
-        -------
-        Callable[[np.ndarray, np.ndarray], tuple[np.ndarray, float]]
-            No_python compiled wdtw distance path callable.
-
-        Raises
-        ------
-        ValueError
-            If the input time series is not a numpy array.
-            If the input time series doesn't have exactly 2 dimensions.
-            If the compute derivative callable is not no_python compiled.
-        """
-        _bounding_matrix = create_bounding_matrix(x.shape[1], y.shape[1], window)
-
-        if return_cost_matrix is True:
-
-            @njit(cache=True)
-            def numba_ddtw_distance_alignment_path(
-                _x: np.ndarray,
-                _y: np.ndarray,
-            ) -> Tuple[List, float, np.ndarray]:
-                _x = compute_derivative(_x)
-                _y = compute_derivative(_y)
-                cost_matrix = _dtw_cost_matrix(_x, _y, _bounding_matrix)
-                path = compute_min_return_path(cost_matrix)
-                return path, cost_matrix[-1, -1], cost_matrix
-
-        else:
-
-            @njit(cache=True)
-            def numba_ddtw_distance_alignment_path(
-                _x: np.ndarray,
-                _y: np.ndarray,
-            ) -> Tuple[List, float]:
-                _x = compute_derivative(_x)
-                _y = compute_derivative(_y)
-                cost_matrix = _dtw_cost_matrix(_x, _y, _bounding_matrix)
-                path = compute_min_return_path(cost_matrix)
-                return path, cost_matrix[-1, -1]
-
-        return numba_ddtw_distance_alignment_path
-
-    def _distance_factory(
-        self,
-        x: np.ndarray,
-        y: np.ndarray,
-        window: float = None,
-        compute_derivative: DerivativeCallable = average_of_slope,
-        **kwargs: Any,
-    ) -> DistanceCallable:
-        """Create a no_python compiled ddtw distance callable.
-
-        Series should be shape (d, m), where d is the number of dimensions, m the series
-        length. Series can be different lengths.
-
-        Parameters
-        ----------
-        x: np.ndarray (2d array of shape (d,m1)).
-            First time series.
-        y: np.ndarray (2d array of shape (d,m2)).
-            Second time series.
-        window: float, defaults = None
-            Float that is the radius of the Sakoe-Chiba window (if using Sakoe-Chiba
-            lower bounding). Must be between 0 and 1.
-        compute_derivative: Callable[[np.ndarray], np.ndarray],
-                                defaults = average slope difference
-            Callable that computes the derivative. If none is provided the average of
-            the slope between two points used.
-        kwargs: any
-            extra kwargs.
-
-        Returns
-        -------
-        Callable[[np.ndarray, np.ndarray], float]
-            No_python compiled ddtw distance callable.
-
-        Raises
-        ------
-        ValueError
-            If the input time series is not a numpy array.
-            If the input time series doesn't have exactly 2 dimensions.
-            If the compute derivative callable is not no_python compiled.
-        """
-        _bounding_matrix = create_bounding_matrix(x.shape[1], y.shape[1], window)
-
-        @njit(cache=True)
-        def numba_ddtw_distance(
-            _x: np.ndarray,
-            _y: np.ndarray,
-        ) -> float:
-            _x = compute_derivative(_x)
-            _y = compute_derivative(_y)
-            cost_matrix = _dtw_cost_matrix(_x, _y, _bounding_matrix)
-            return cost_matrix[-1, -1]
-
-        return numba_ddtw_distance
+    if q.shape[1] < 3:
+        raise ValueError("Time series must have at least 3 points.")
+    result = np.zeros((q.shape[0], q.shape[1] - 2))
+    for i in range(q.shape[0]):
+        for j in range(1, q.shape[1] - 1):
+            result[i, j - 1] = (
+                (q[i, j] - q[i, j - 1]) + (q[i, j + 1] - q[i, j - 1]) / 2.0
+            ) / 2.0
+    return result
diff --git a/aeon/distances/_distance.py b/aeon/distances/_distance.py
index 0f5db18c..685ee0ed 100644
--- a/aeon/distances/_distance.py
+++ b/aeon/distances/_distance.py
@@ -6,7 +6,12 @@ from typing import Any, Callable, Union
 import numpy as np
 from numba import njit
 
-from aeon.distances._ddtw import DerivativeCallable, _DdtwDistance, average_of_slope
+from aeon.distances._ddtw import (
+    average_of_slope,
+    ddtw_alignment_path,
+    ddtw_distance,
+    ddtw_pairwise_distance,
+)
 from aeon.distances._dtw import dtw_alignment_path, dtw_distance, dtw_pairwise_distance
 from aeon.distances._edr import _EdrDistance
 from aeon.distances._erp import _ErpDistance
@@ -259,7 +264,7 @@ def wddtw_distance(
     x: np.ndarray,
     y: np.ndarray,
     window: Union[float, None] = None,
-    compute_derivative: DerivativeCallable = average_of_slope,
+    compute_derivative=average_of_slope,
     g: float = 0.0,
     **kwargs: Any,
 ) -> float:
@@ -427,90 +432,6 @@ def wdtw_distance(
     return distance(x, y, metric="wdtw", **format_kwargs)
 
 
-def ddtw_distance(
-    x: np.ndarray,
-    y: np.ndarray,
-    window: Union[float, None] = None,
-    compute_derivative: DerivativeCallable = average_of_slope,
-    **kwargs: Any,
-) -> float:
-    r"""Compute the derivative dynamic time warping (DDTW) distance between time series.
-
-    DDTW is an adaptation of DTW originally proposed in [1]_. DDTW attempts to
-    improve on dtw by better account for the 'shape' of the time series.
-    This is done by considering y axis data points as higher level features of 'shape'.
-    To do this the first derivative of the sequence is taken, and then using this
-    derived sequence a dtw computation is done.
-
-    The default derivative used is:
-
-    .. math::
-        D_{x}[q] = \frac{{}(q_{i} - q_{i-1} + ((q_{i+1} - q_{i-1}/2)}{2}
-
-    Where q is the original time series and d_q is the derived time series.
-
-    Parameters
-    ----------
-    x: np.ndarray (1d or 2d array)
-        First time series.
-    y: np.ndarray (1d or 2d array)
-        Second time series.
-    window: float, defaults = None
-        Float that is the radius of the sakoe chiba window (if using Sakoe-Chiba
-        lower bounding). Value must be between 0. and 1.
-    compute_derivative: Callable[[np.ndarray], np.ndarray],
-                            defaults = average slope difference
-        Callable that computes the derivative. If none is provided the average of the
-        slope between two points used.
-    kwargs: Any
-        Extra kwargs.
-
-    Returns
-    -------
-    float
-        Ddtw distance between the x and y.
-
-    Raises
-    ------
-    ValueError
-        If the sakoe_chiba_window_radius is not a float.
-        If the value of x or y provided is not a numpy array.
-        If the value of x or y has more than 2 dimensions.
-        If a metric string provided, and is not a defined valid string.
-        If a metric object (instance of class) is provided and doesn't inherit from
-        NumbaDistance.
-        If a resolved metric or compute derivative callable is not no_python compiled.
-        If the metric type cannot be determined
-        If the compute derivative callable is not no_python compiled.
-
-    Examples
-    --------
-    >>> import numpy as np
-    >>> x_1d = np.array([1, 2, 3, 4])  # 1d array
-    >>> y_1d = np.array([5, 6, 7, 8])  # 1d array
-    >>> ddtw_distance(x_1d, y_1d)
-    0.0
-
-    >>> x_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])  # 2d array
-    >>> y_2d = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])  # 2d array
-    >>> ddtw_distance(x_2d, y_2d)
-    0.0
-
-    References
-    ----------
-    .. [1] Keogh, Eamonn & Pazzani, Michael. (2002). Derivative Dynamic Time Warping.
-        First SIAM International Conference on Data Mining.
-        1. 10.1137/1.9781611972719.1.
-    """
-    format_kwargs = {
-        "window": window,
-        "compute_derivative": compute_derivative,
-    }
-    format_kwargs = {**format_kwargs, **kwargs}
-
-    return distance(x, y, metric="ddtw", **format_kwargs)
-
-
 def msm_distance(
     x: np.ndarray,
     y: np.ndarray,
@@ -736,93 +657,12 @@ def wdtw_alignment_path(
     )
 
 
-def ddtw_alignment_path(
-    x: np.ndarray,
-    y: np.ndarray,
-    return_cost_matrix: bool = False,
-    window: Union[float, None] = None,
-    compute_derivative: DerivativeCallable = average_of_slope,
-    **kwargs: Any,
-) -> AlignmentPathReturn:
-    r"""Compute the derivative dynamic time warping (DDTW) alignment path.
-
-    DDTW is an adaptation of DTW originally proposed in [1]_. DDTW attempts to
-    improve on dtw by better account for the 'shape' of the time series.
-    This is done by considering y axis data points as higher level features of 'shape'.
-    To do this the first derivative of the sequence is taken, and then using this
-    derived sequence a dtw computation is done.
-
-    The default derivative used is:
-
-    .. math::
-        D_{x}[q] = \frac{{}(q_{i} - q_{i-1} + ((q_{i+1} - q_{i-1}/2)}{2}
-
-    Where q is the original time series and d_q is the derived time series.
-
-    Parameters
-    ----------
-    x: np.ndarray (1d or 2d array)
-        First time series.
-    y: np.ndarray (1d or 2d array)
-        Second time series.
-    return_cost_matrix: bool, defaults = False
-        Boolean that when true will also return the cost matrix.
-    window: float, defaults = None
-        Float that is the radius of the sakoe chiba window (if using Sakoe-Chiba
-        lower bounding). Value must be between 0. and 1.
-    compute_derivative: Callable[[np.ndarray], np.ndarray],
-                            defaults = average slope difference
-        Callable that computes the derivative. If none is provided the average of the
-        slope between two points used.
-    kwargs: Any
-        Extra kwargs.
-
-    Returns
-    -------
-    list[tuple]
-        List of tuples containing the ddtw alignment path.
-    float
-        Ddtw distance between x and y.
-    np.ndarray (of shape (len(x), len(y)).
-        Optional return only given if return_cost_matrix = True.
-        Cost matrix used to compute the distance.
-
-    Raises
-    ------
-    ValueError
-        If the sakoe_chiba_window_radius is not a float.
-        If the value of x or y provided is not a numpy array.
-        If the value of x or y has more than 2 dimensions.
-        If a metric string provided, and is not a defined valid string.
-        If a metric object (instance of class) is provided and doesn't inherit from
-        NumbaDistance.
-        If a resolved metric or compute derivative callable is not no_python compiled.
-        If the metric type cannot be determined
-        If the compute derivative callable is not no_python compiled.
-
-    References
-    ----------
-    .. [1] Keogh, Eamonn & Pazzani, Michael. (2002). Derivative Dynamic Time Warping.
-        First SIAM International Conference on Data Mining.
-        1. 10.1137/1.9781611972719.1.
-    """
-    format_kwargs = {
-        "window": window,
-        "compute_derivative": compute_derivative,
-    }
-    format_kwargs = {**format_kwargs, **kwargs}
-
-    return distance_alignment_path(
-        x, y, metric="ddtw", return_cost_matrix=return_cost_matrix, **format_kwargs
-    )
-
-
 def wddtw_alignment_path(
     x: np.ndarray,
     y: np.ndarray,
     return_cost_matrix: bool = False,
     window: Union[float, None] = None,
-    compute_derivative: DerivativeCallable = average_of_slope,
+    compute_derivative=average_of_slope,
     g: float = 0.0,
     **kwargs: Any,
 ) -> AlignmentPathReturn:
@@ -1281,7 +1121,7 @@ def twe_alignment_path(
     )
 
 
-NEW_DISTANCES = ["squared", "euclidean", "dtw"]
+NEW_DISTANCES = ["squared", "euclidean", "dtw", "ddtw"]
 
 
 def distance(
@@ -1370,6 +1210,8 @@ def distance(
             return euclidean_distance(x, y)
         elif metric == "dtw":
             return dtw_distance(x, y, **kwargs)
+        elif metric == "ddtw":
+            return ddtw_distance(x, y, **kwargs)
     _x = to_numba_timeseries(x)
     _y = to_numba_timeseries(y)
 
@@ -1443,6 +1285,8 @@ def distance_factory(
             return euclidean_distance
         elif metric == "dtw":
             return dtw_distance
+        elif metric == "ddtw":
+            return ddtw_distance
     global dist_callable
 
     if x is None:
@@ -1565,6 +1409,8 @@ def pairwise_distance(
             return squared_pairwise_distance(_x, _y)
         elif metric == "dtw":
             return dtw_pairwise_distance(_x, _y, **kwargs)
+        elif metric == "ddtw":
+            return ddtw_pairwise_distance(_x, _y, **kwargs)
 
     symmetric = np.array_equal(_x, _y)
     _metric_callable = _resolve_metric_to_factory(
@@ -1645,6 +1491,8 @@ def distance_alignment_path(
     if metric in NEW_DISTANCES:
         if metric == "dtw":
             return dtw_alignment_path(x, y, **kwargs)
+        elif metric == "ddtw":
+            return ddtw_alignment_path(x, y, **kwargs)
     _x = to_numba_timeseries(x)
     _y = to_numba_timeseries(y)
 
@@ -1722,6 +1570,8 @@ def distance_alignment_path_factory(
     if metric in NEW_DISTANCES:
         if metric == "dtw":
             return dtw_alignment_path
+        if metric == "ddtw":
+            return ddtw_alignment_path
     if x is None:
         x = np.zeros((1, 10))
     if y is None:
@@ -1765,13 +1615,6 @@ _METRIC_INFOS = [
         dist_instance=_LcssDistance(),
         dist_alignment_path_func=lcss_alignment_path,
     ),
-    MetricInfo(
-        canonical_name="ddtw",
-        aka={"ddtw", "derivative dynamic time warping"},
-        dist_func=ddtw_distance,
-        dist_instance=_DdtwDistance(),
-        dist_alignment_path_func=ddtw_alignment_path,
-    ),
     MetricInfo(
         canonical_name="wdtw",
         aka={"wdtw", "weighted dynamic time warping"},
@@ -1810,7 +1653,6 @@ _METRIC_CALLABLES = dict(
 _METRICS_NAMES = list(_METRICS.keys())
 
 ALL_DISTANCES = (
-    ddtw_distance,
     edr_distance,
     erp_distance,
     lcss_distance,
diff --git a/aeon/distances/_wddtw.py b/aeon/distances/_wddtw.py
index 5b974ea2..2c9589d8 100644
--- a/aeon/distances/_wddtw.py
+++ b/aeon/distances/_wddtw.py
@@ -10,7 +10,7 @@ from numba.core.errors import NumbaWarning
 
 from aeon.distances._alignment_paths import compute_min_return_path
 from aeon.distances._bounding_matrix import create_bounding_matrix
-from aeon.distances._ddtw import DerivativeCallable, average_of_slope
+from aeon.distances._ddtw import average_of_slope
 from aeon.distances._wdtw import _weighted_cost_matrix
 from aeon.distances.base import (
     DistanceAlignmentPathCallable,
@@ -35,7 +35,7 @@ class _WddtwDistance(NumbaDistance):
         y: np.ndarray,
         return_cost_matrix: bool = False,
         window: int = None,
-        compute_derivative: DerivativeCallable = average_of_slope,
+        compute_derivative=average_of_slope,
         g: float = 0.0,
         **kwargs: Any,
     ) -> DistanceAlignmentPathCallable:
@@ -119,7 +119,7 @@ class _WddtwDistance(NumbaDistance):
         x: np.ndarray,
         y: np.ndarray,
         window: int = None,
-        compute_derivative: DerivativeCallable = average_of_slope,
+        compute_derivative=average_of_slope,
         g: float = 0.0,
         **kwargs: Any,
     ) -> DistanceCallable:
diff --git a/aeon/regression/base.py b/aeon/regression/base.py
index 2293f47b..dac2b2bd 100644
--- a/aeon/regression/base.py
+++ b/aeon/regression/base.py
@@ -116,11 +116,11 @@ class BaseRegressor(BaseEstimator, ABC):
 
         Parameters
         ----------
-        X : 3D np.array (any number of dimensions, equal length series)
-                of shape [n_instances, n_dimensions, series_length]
+        X : 3D np.array (any number of channels, equal length series)
+                of shape [n_instances, n_channels, series_length]
             or 2D np.array (univariate, equal length series)
                 of shape [n_instances, series_length]
-            or of any other supported Panel mtype
+            or of any other supported input type
                 for list of mtypes, see datatypes.SCITYPE_REGISTER
         y : 1D np.array of float, of shape [n_instances] - regression labels for fitting
             indices correspond to instance indices in X
@@ -167,11 +167,11 @@ class BaseRegressor(BaseEstimator, ABC):
 
         Parameters
         ----------
-        X : 3D np.array (any number of dimensions, equal length series)
-                of shape [n_instances, n_dimensions, series_length]
+        X : 3D np.array (any number of channels, equal length series)
+                of shape [n_instances, n_channels, series_length]
             or 2D np.array (univariate, equal length series)
                 of shape [n_instances, series_length]
-            or of any other supported Panel mtype
+            or of any other supported input type
                 for list of mtypes, see datatypes.SCITYPE_REGISTER
 
         Returns
@@ -191,8 +191,8 @@ class BaseRegressor(BaseEstimator, ABC):
 
         Parameters
         ----------
-        X : 3D np.array (any number of dimensions, equal length series)
-                of shape [n_instances, n_dimensions, series_length]
+        X : 3D np.array (any number of channels, equal length series)
+                of shape [n_instances, n_channels, series_length]
             or 2D np.array (univariate, equal length series)
                 of shape [n_instances, series_length]
             or of any other supported type
@@ -220,7 +220,7 @@ class BaseRegressor(BaseEstimator, ABC):
         ----------
         X : guaranteed to be of a type in self.get_tag("X_inner_mtype")
             if self.get_tag("X_inner_mtype") = "numpy3D":
-                3D np.ndarray of shape = [n_instances, n_dimensions, series_length]
+                3D np.ndarray of shape = [n_instances, n_channels, series_length]
             for list of other mtypes, see datatypes.SCITYPE_REGISTER
         y : 1D np.array of float, of shape [n_instances] - regression labels for fitting
             indices correspond to instance indices in X
@@ -245,7 +245,7 @@ class BaseRegressor(BaseEstimator, ABC):
         ----------
         X : guaranteed to be of a type in self.get_tag("X_inner_mtype")
             if self.get_tag("X_inner_mtype") = "numpy3D":
-                3D np.ndarray of shape = [n_instances, n_dimensions, series_length]
+                3D np.ndarray of shape = [n_instances, n_channels, series_length]
             for list of other mtypes, see datatypes.SCITYPE_REGISTER
 
         Returns
@@ -261,11 +261,11 @@ class BaseRegressor(BaseEstimator, ABC):
         Parameters
         ----------
         X : any object (to check/convert)
-            should be of a supported Panel mtype or 2D numpy.ndarray
+            should be of a supported input type including 2D numpy.ndarray
 
         Returns
         -------
-        X: an object of a supported Panel mtype, numpy3D if X was a 2D numpy.ndarray
+        X: an object of a supported input type, numpy3D if X was a 2D numpy.ndarray
 
         Raises
         ------
@@ -364,7 +364,7 @@ def _check_regressor_input(
 
     Parameters
     ----------
-    X : check whether conformant with any aeon Panel mtype specification
+    X : check whether X is a valid input type
     y : check whether a pd.Series or np.array
     enforce_min_instances : int, optional (default=1)
         check there are a minimum number of instances.
@@ -383,7 +383,7 @@ def _check_regressor_input(
     if not X_valid:
         raise TypeError(
             f"X is not of a supported input data type."
-            f"X must be in a supported mtype format for Panel, found {type(X)}"
+            f"X must be in a supported type format for Regression, found {type(X)}"
             f"Use datatypes.check_is_mtype to check conformance with specifications."
         )
     n_cases = X_metadata["n_instances"]
@@ -411,7 +411,7 @@ def _check_regressor_input(
             if y.ndim > 1:
                 raise ValueError(
                     f"np.ndarray y must be 1-dimensional, "
-                    f"but found {y.ndim} dimensions"
+                    f"but found {y.ndim} channels"
                 )
     return X_metadata
 
@@ -424,12 +424,12 @@ def _internal_convert(X, y=None):
 
     Parameters
     ----------
-    X : an object of a supported Panel mtype, or 2D numpy.ndarray
+    X : an object of a supported input type including 2D numpy.ndarray
     y : np.ndarray or pd.Series
 
     Returns
     -------
-    X: an object of a supported Panel mtype, numpy3D if X was a 2D numpy.ndarray
+    X: an object of a supported input type, numpy3D if X was a 2D numpy.ndarray
     y: np.ndarray
     """
     if isinstance(X, np.ndarray):
diff --git a/aeon/regression/distance_based/_time_series_neighbors.py b/aeon/regression/distance_based/_time_series_neighbors.py
index d1ad3752..0e92198d 100644
--- a/aeon/regression/distance_based/_time_series_neighbors.py
+++ b/aeon/regression/distance_based/_time_series_neighbors.py
@@ -43,7 +43,6 @@ class KNeighborsTimeSeriesRegressor(BaseRegressor):
                                 metric='mpdist', metric_params={'m':30})
         if callable, must be of signature (X: np.ndarray, X2: np.ndarray) -> np.ndarray
             output must be mxn array if X is array of m Series, X2 of n Series
-        can be pairwise panel transformer inheriting from BasePairwiseTransformerPanel
     distance_params : dict, optional. default = None.
         dictionary for metric parameters , in case that distance is a str
 
@@ -89,9 +88,10 @@ class KNeighborsTimeSeriesRegressor(BaseRegressor):
 
         Parameters
         ----------
-        X : aeon-compatible Panel data format, with n_samples series
-        y : {array-like, sparse matrix}
-            Target values of shape = [n_samples]
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
+        y : array-like, shape = [n_instances]
+            The class labels.
         """
         if isinstance(self.distance, str):
             if self.distance_params is None:
@@ -110,11 +110,12 @@ class KNeighborsTimeSeriesRegressor(BaseRegressor):
 
         Parameters
         ----------
-        X : aeon-compatible Panel data format, with n_samples series
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
 
         Returns
         -------
-        y : array of shape [n_samples] or [n_samples, n_outputs]
+        y : array of shape [n_instances]
             Target values for each data sample.
         """
         self.check_is_fitted()
@@ -133,7 +134,8 @@ class KNeighborsTimeSeriesRegressor(BaseRegressor):
 
         Parameters
         ----------
-        X : aeon-compatible data format, Panel or Series, with n_samples series
+        X : 3D np.array of shape = [n_instances, n_dimensions, series_length]
+            The training data.
 
         Returns
         -------
diff --git a/aeon/utils/validation/annotation.py b/aeon/utils/validation/annotation.py
index fd967229..3a0fc578 100644
--- a/aeon/utils/validation/annotation.py
+++ b/aeon/utils/validation/annotation.py
@@ -12,7 +12,7 @@ def check_fmt(fmt):
     Parameters
     ----------
     fmt : str {"sparse", "dense"}
-        Annotation format
+        annotation format
 
     Returns
     -------
@@ -30,7 +30,7 @@ def check_labels(labels):
     Parameters
     ----------
     labels : str {"indicator", "score", "int_label"}
-        Annotation labels
+        annotation labels
 
     Returns
     -------
diff --git a/docs/conf.py b/docs/conf.py
index 043a16e5..c0349578 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -44,6 +44,7 @@ extensions = [
     "nbsphinx",  # integrates example notebooks
     "sphinx_design",
     "sphinx_issues",
+    "sphinx_copybutton",
     "myst_parser",
 ]
 
@@ -87,9 +88,6 @@ exclude_patterns = [
 
 add_module_names = False
 
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
 # see http://stackoverflow.com/q/12206334/562769
 numpydoc_show_class_members = True
 # this is needed for some reason...
@@ -117,6 +115,9 @@ add_function_parentheses = False
 # Link to GitHub repo for github_issues extension
 issues_github_path = "aeon-toolkit/aeon"
 
+# sphinx-copybutton configuration
+copybutton_exclude = ".linenos, .gp, .go"
+
 # MyST Parser configuration
 
 # When building HTML using the sphinx.ext.mathjax (enabled by default),
@@ -261,6 +262,7 @@ html_theme_options = {
     ],
 }
 
+# logos
 html_logo = "images/logo/aeon-logo-blue-2-compact.png"
 html_favicon = "images/logo/aeon-favicon.ico"
 
diff --git a/docs/get_involved.rst b/docs/get_involved.rst
index b76dc0e5..289f3dc3 100644
--- a/docs/get_involved.rst
+++ b/docs/get_involved.rst
@@ -13,7 +13,7 @@ Get Involved
    get_involved/governance
 
 aeon is a community-driven project and your help is extremely welcome.
-If you get stuck, please don’t hesitate to chat with us or raise an issue.
+If you get stuck, please don't hesitate to chat with us or raise an issue.
 
 .. grid:: 1 2 2 2
     :gutter: 3
diff --git a/docs/get_started.rst b/docs/get_started.rst
deleted file mode 100644
index d1fb5f7d..00000000
--- a/docs/get_started.rst
+++ /dev/null
@@ -1,154 +0,0 @@
-.. _get_started:
-
-===========
-Get Started
-===========
-
-The following information is designed to get users up and running with ``aeon`` quickly. For more detailed information, see the links in each of the subsections.
-
-Installation
-------------
-
-``aeon`` currently supports:
-
-* environments with python version 3.7, 3.8, or 3.9.
-* operating systems Mac OS X, Unix-like OS, Windows 8.1 and higher
-* installation via ``PyPi`` or ``conda``
-
-Please see the :ref:`installation <installation>` guide for step-by-step instructions on the package installation.
-
-Key Concepts
-------------
-
-``aeon`` seeks to provide a unified framework for multiple time series machine learning tasks. This (hopefully) makes ``aeon's`` functionality intuitive for users
-and lets developers extend the framework more easily. But time series data and the related scientific use cases each can take multiple forms.
-Therefore, a key set of common concepts and terminology is important.
-
-Data Types
-~~~~~~~~~~
-
-``aeon`` is designed for time series machine learning. Time series data refers to data where the variables are ordered over time or
-an index indicating the position of an observation in the sequence of values.
-
-In ``aeon`` time series data can refer to data that is univariate, multivariate or panel, with the difference relating to the number and interrelation
-between time series :term:`variables <variable>`, as well as the number of :term:`instances <instance>` for which each variable is observed.
-
-- :term:`Univariate time series` data refers to data where a single :term:`variable` is tracked over time.
-- :term:`Multivariate time series` data refers to data where multiple :term:`variables <variable>` are tracked over time for the same :term:`instance`. For example, multiple quarterly economic indicators for a country or multiple sensor readings from the same machine.
-- :term:`Panel time series` data refers to data where the variables (univariate or multivariate) are tracked for multiple :term:`instances <instance>`. For example, multiple quarterly economic indicators for several countries or multiple sensor readings for multiple machines.
-
-Learning Tasks
-~~~~~~~~~~~~~~
-
-``aeon's`` functionality for each learning tasks is centered around providing a set of code artifacts that match a common interface to a given
-scientific purpose (i.e. :term:`scientific type` or :term:`scitype`). For example, ``aeon`` includes a common interface for "forecaster" classes designed to predict future values
-of a time series.
-
-``aeon's`` interface currently supports:
-
-- :term:`Time series classification` where the time series data for a given instance are used to predict a categorical target class.
-- :term:`Time series regression` where the time series data for a given instance are used to predict a continuous target value.
-- :term:`Time series clustering` where the goal is to discover groups consisting of instances with similar time series.
-- :term:`Forecasting` where the goal is to predict future values of the input series.
-- :term:`Time series annotation` which is focused on outlier detection, anomaly detection, change point detection and segmentation.
-
-Reduction
-~~~~~~~~~
-
-While the list above presents each learning task separately, in many cases it is possible to adapt one learning task to help solve another related learning task. For example,
-one approach to forecasting would be to use a regression model that explicitly accounts for the data's time dimension. However, another approach is to reduce the forecasting problem
-to cross-sectional regression, where the input data are tabularized and lags of the data are treated as independent features in `scikit-learn` style
-tabular regression algorithms. Likewise one approach to the time series annotation task like anomaly detection is to reduce the problem to using forecaster to predict future values and flag
-observations that are too far from these predictions as anomalies. ``aeon`` typically incorporates these type of :term:`reductions <reduction>` through the use of composable classes that
-let users adapt one learning task to solve another related one.
-
-For more information on ``aeon's`` terminology and functionality see the :ref:`glossary` and the :ref:`user guide <user_guide>`.
-
-Quickstart
-----------
-The code snippets below are designed to introduce ``aeon's`` functionality so you can start using its functionality quickly. For more detailed information see the :ref:`tutorials`,  :ref:`user_guide` and :ref:`api_reference` in ``aeon's`` :ref:`user_documentation`.
-
-Forecasting
-~~~~~~~~~~~
-
-.. code-block:: python
-
-    >>> from aeon.datasets import load_airline
-    >>> from aeon.forecasting.base import ForecastingHorizon
-    >>> from aeon.forecasting.model_selection import temporal_train_test_split
-    >>> from aeon.forecasting.theta import ThetaForecaster
-    >>> from aeon.performance_metrics.forecasting import mean_absolute_percentage_error
-
-    >>> y = load_airline()
-    >>> y_train, y_test = temporal_train_test_split(y)
-    >>> fh = ForecastingHorizon(y_test.index, is_relative=False)
-    >>> forecaster = ThetaForecaster(sp=12)  # monthly seasonal periodicity
-    >>> forecaster.fit(y_train)
-    >>> y_pred = forecaster.predict(fh)
-    >>> mean_absolute_percentage_error(y_test, y_pred)
-    0.08661467738190656
-
-Time Series Classification
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-    >>> from aeon.classification.interval_based import TimeSeriesForestClassifier
-    >>> from aeon.datasets import load_arrow_head
-    >>> from sklearn.model_selection import train_test_split
-    >>> from sklearn.metrics import accuracy_score
-
-    >>> X, y = load_arrow_head()
-    >>> X_train, X_test, y_train, y_test = train_test_split(X, y)
-    >>> classifier = TimeSeriesForestClassifier()
-    >>> classifier.fit(X_train, y_train)
-    >>> y_pred = classifier.predict(X_test)
-    >>> accuracy_score(y_test, y_pred)
-    0.8679245283018868
-
-Time Series Regression
-~~~~~~~~~~~~~~~~~~~~~~
-
-.. note::
-    The time series regression API is stable. But the inclusion of a dataset to illustrate
-    its features is still in progress.
-
-.. code-block:: python
-
-    >>> from aeon.regression.compose import ComposableTimeSeriesForestRegressor
-
-Time Series Clustering
-~~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-    >>> from sklearn.model_selection import train_test_split
-    >>> from aeon.clustering.k_means import TimeSeriesKMeans
-    >>> from aeon.clustering.utils.plotting._plot_partitions import plot_cluster_algorithm
-    >>> from aeon.datasets import load_arrow_head
-
-    >>> X, y = load_arrow_head()
-    >>> X_train, X_test, y_train, y_test = train_test_split(X, y)
-
-    >>> k_means = TimeSeriesKMeans(n_clusters=5, init_algorithm="forgy", metric="dtw")
-    >>> k_means.fit(X_train)
-    >>> plot_cluster_algorithm(k_means, X_test, k_means.n_clusters)
-
-Time Series Annotation
-~~~~~~~~~~~~~~~~~~~~~~
-
-.. warning::
-
-   The time series annotation API is still experimental. Features may change
-   in future releases.
-
-.. code-block:: python
-
-    >>> from aeon.annotation.adapters import PyODAnnotator
-    >>> from pyod.models.iforest import IForest
-    >>> from aeon.datasets import load_airline
-    >>> y = load_airline()
-    >>> pyod_model = IForest()
-    >>> pyod_aeon_annotator = PyODAnnotator(pyod_model)
-    >>> pyod_aeon_annotator.fit(y)
-    >>> annotated_series = pyod_aeon_annotator.predict(y)
diff --git a/docs/getting_started.md b/docs/getting_started.md
new file mode 100644
index 00000000..e938f275
--- /dev/null
+++ b/docs/getting_started.md
@@ -0,0 +1,236 @@
+# Getting Started
+
+The following information is designed to get users up and running with `aeon` quickly.
+If installation is required, please see our [installation guide](installation) for
+installing `aeon`.
+
+We assume basic familiarity with [scikit-learn](https://scikit-learn.org/stable/index.html)
+package. If you are confused, you may want to view
+[their getting started guides](https://scikit-learn.org/stable/getting_started.html).
+
+`aeon` is an open source toolkit for learning from time series. It provides access to
+the very latest algorithms for time series machine learning, in addition to a range of
+classical techniques for the following learning tasks:
+
+- {term}`Forecasting` where the goal is to predict future values of a target time
+series.
+- {term}`Time series classification` where the time series data for a given instance
+are used to predict a categorical target class.
+- {term}`Time series extrinsic regression` where the time series data for a given
+instance are used to predict a continuous target value.
+- {term}`Time series clustering` where the goal is to discover groups consisting of
+instances with similar time series.
+- {term}`Time series annotation` which is focused on outlier detection, anomaly
+detection, change point detection and segmentation.
+
+Additionally, it provides numerous algorithms for {term}`time series transformation`,
+altering time series into different representations and domains or processing
+time series data into tabular data.
+
+The following provides introductory examples for each of these modules. In the examples
+used the datatypes most commonly used for the task, but a variety of input types for
+data are available. See [here](/examples/datasets/AA_datatypes_and_datasets.ipynb) for
+more information on input datatypes. For more information on the variety of estimators
+available for each task, see the [API](api_reference) and [examples](examples) pages.
+
+## Forecasting
+
+Forecasting primarily uses pandas DataFrames and Series objects to store time series
+data. An example of data in thie format is the Airline dataset.
+
+```{code-block} python
+>>> from aeon.datasets import load_airline
+>>> y = load_airline()  # load an example series with timestamps
+>>> type(y)
+<class 'pandas.core.series.Series'>
+>>> y.head()
+Period
+1960-08    606.0
+1960-09    508.0
+1960-10    461.0
+1960-11    390.0
+1960-12    432.0
+Freq: M, Name: Number of airline passengers, dtype: float64
+```
+
+The possible use cases for forecasting are more complex than with the other modules.
+Like `scikit-learn`, forecasters use a fit and predict model, but the arguments are
+different. The simplest forecasting use case is when you have a single series and you
+want to build a model on that series (e.g. ARMA model) to predict values in the
+future. At their most basic, forecasters require a series to forecast for fit, and a
+forecast horizon (`fh`) to specify how many time steps ahead to make a forecast in
+predict. This code fits a [TrendForecaster](forecasting.trend.TrendForecaster) on our
+loaded data and predicts the next value in the series.
+
+```{code-block} python
+>>> from aeon.forecasting.trend import TrendForecaster
+>>> forecaster = TrendForecaster()
+>>> forecaster.fit(y)  # fit the forecaster
+TrendForecaster()
+>>> pred = forecaster.predict(fh=1)  # predict the next value
+1961-01    472.944444
+Freq: M, dtype: float64
+```
+
+An integer `fh` value will forecast *n* points into the future, i.e. a value of 3
+will make a prediction for 1961-03. You can predict multiple points into the future by
+passing a list of integers to `fh`.
+
+```{code-block} python
+>>> pred = forecaster.predict(fh=[1,2,3])  # predict the next 3 values
+1961-01    472.944444
+1961-02    475.601628
+1961-03    478.258812
+Freq: M, dtype: float64
+```
+
+You can split a series into train and test partitions. This code splits airline into
+two parts, builds the forecasting model on the train portion and makes forecasts for
+the time points represented in the test segment. In this example we use a
+[ForecastingHorizon](forecasting.base.ForecastingHorizon) object to input our desired
+forecast horizon using the Series index.
+
+```{code-block} python
+>>> from aeon.forecasting.model_selection import temporal_train_test_split
+>>> from aeon.forecasting.base import ForecastingHorizon
+>>> from aeon.performance_metrics.forecasting import mean_absolute_percentage_error
+>>> y_train, y_test = temporal_train_test_split(y)  # split the data into train and test series
+>>> fh = ForecastingHorizon(y_test.index, is_relative=False)
+>>> forecaster.fit(y_train)  # fit the forecaster on train series
+>>> y_pred = forecaster.predict(fh)  # predict the test series time stamps
+>>> mean_absolute_percentage_error(y_test, y_pred)
+0.11725953222644162
+```
+
+In this getting started tutorial we assume a single series univariate input. `aeon`
+has a rich functionality for forecasting, and supports a wide variety of use
+cases. To find out more about forecasting in `aeon`, you can explore through the
+extensive [user guide notebook](./examples/forecasting/forecasting.ipynb).
+
+## Time Series Classification (TSC)
+
+Classification generally use numpy arrays to store time series. For 2D input, the size
+should be (n_cases, series_length) and for 3D the size should be (n_cases, n_channels,
+series_length). Each case in our input data set is a time series.
+
+```{code-block} python
+>>> X = [[1, 2, 3, 4, 5, 6, 7],  # 2D array example (univariate)
+...      [4, 4, 4, 5, 6, 7, 3]]  # Two samples, one channel, seven series length
+>>> X2 = [[[1, 2, 3, 4], [3, 8, 3, 8]],  # 3D array example (multivariate)
+...       [[5, 2, 1, 5], [3, 8, 3, 8]]]  # Two samples, two channels, four series length
+>>> y = [0, 1]  # class labels for each sample
+```
+
+So, for example, `X1[0]` is a univariate time series of length seven, and `X2[0]` is a
+multivariate time series of length four which has three channels.
+
+By default, we recommend storing time series for classification in 3D numpy arrays even
+if each time series is univariate. Classifiers will work with 2D input, but other
+packages may treat 2D input as a single multivariate series. This is the case for
+non-collection transformers, and you may find unexpected outputs if you input a 2D array
+treating it as multiple time series.
+
+The classification estimator interface should be familiar if you have worked with
+`scikit-learn`. In this example we fit a [KNeighborsTimeSeriesClassifier](classification.distance_based.KNeighborsTimeSeriesClassifier)
+on our example data.
+
+```{code-block} python
+>>> import numpy as np
+>>> from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier
+>>> 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, 2], [4, 4, 4, 4, 4, 4, 4]])
+>>> y_pred = clf.predict(X_test)  # make class predictions on new data
+[0 1]
+```
+
+Once the classifier has been fit using the training data and class labels, we can
+predict the labels for new cases. Like `scikit-learn`, `predict_proba` methods are
+available to predict class probabilities and a `score` method is present to
+calculate accuracy on new data.
+
+All `aeon` classifiers can be used with `scikit-learn` functionality for e.g.
+model evaluation, parameter searching and pipelines. Explore the wide range of
+algorithm types available in ``aeon` in the [classification notebooks](examples.md#classification).
+
+## Time Series Extrinsic Regression (TSER)
+
+Time series extrinsic regression assumes that the target variable is continuous rather
+than discrete, as for classification. The same input data considerations apply from the
+classification section, and the modules function similarly.
+
+"Time series regression" is a term commonly used in forecasting. To avoid confusion,
+the term "time series extrinsic regression" is commonly used to refer to the traditional
+machine learning regression task but for time series data.
+
+In the following example we use a [KNeighborsTimeSeriesRegressor](regression.distance_based.KNeighborsTimeSeriesRegressor)
+on an example time series extrinsic regression problem called [Covid3Month](https://zenodo.org/record/3902690).
+
+```{code-block} python
+>>> from aeon.regression.distance_based import KNeighborsTimeSeriesRegressor
+>>> from aeon.datasets import load_covid_3month
+>>> from sklearn.metrics import mean_squared_error
+>>> X_train, y_train = load_covid_3month(split="train")
+>>> X_test, y_test = load_covid_3month(split="test")
+>>> reg = KNeighborsTimeSeriesRegressor(distance="dtw")
+>>> reg.fit(X_train, y_train)  # fit the regressor on train data
+KNeighborsTimeSeriesRegressor()
+>>> y_pred = reg.predict(X_test)  # make label predictions on new data
+>>> y_pred[:6]
+[0.04218472 0.01459854 0.         0.0164468  0.06254257 0.11111111]
+>>> mean_squared_error(y_test, y_pred)
+0.002921957478363366
+```
+
+## Time Series Clustering (TSCL)
+
+Like classification and regression, time series clustering aims to follow the
+`scikit-learn` interface where possible. The same input data format is used as the
+modules. This example fits a [TimeSeriesKMeans](clustering.k_means.TimeSeriesKMeans)
+clusterer on the [ArrowHead](http://www.timeseriesclassification.com/description.php?Dataset=ArrowHead)
+dataset.
+
+```{code-block} python
+>>> from aeon.clustering.k_means import TimeSeriesKMeans
+>>> from aeon.datasets import load_arrow_head
+>>> from sklearn.metrics import rand_score
+>>> X, y = load_arrow_head()
+>>> kmeans = TimeSeriesKMeans(n_clusters=3, metric="dtw")
+>>> kmeans.fit(X) # fit the clusterer
+TimeSeriesKMeans(n_clusters=3)
+>>> kmeans.labels_[0:10]  # cluster labels
+[2 1 1 0 1 1 0 1 1 0]
+>>> rand_score(y, kmeans.labels_)
+0.6377792823290453
+```
+
+After calling `fit`, the `labels_` attribute contains the cluster labels for
+each time series. The `predict` method can be used to predict the cluster labels for
+new data.
+
+## Time Series Annotation
+
+Annotation encompasses a range of time series tasks, including segmentation and anomaly
+detection. The package is still in early development, so major changes are expected
+as time goes on.
+
+```{code-block} python
+>>> from aeon.annotation.adapters import PyODAnnotator
+>>> from aeon.datasets import load_airline
+>>> from pyod.models.iforest import IForest
+>>> y = load_airline()
+>>> pyod_model = IForest()
+>>> annotator = PyODAnnotator(pyod_model)
+>>> annotator.fit(y)
+>>> annotated_series = annotator.predict(y)
+>>> annotated_series.head()
+1949-01    1
+1949-02    0
+1949-03    0
+1949-04    0
+1949-05    0
+Freq: M, dtype: int32
+```
diff --git a/docs/glossary.md b/docs/glossary.md
new file mode 100644
index 00000000..d5db8a48
--- /dev/null
+++ b/docs/glossary.md
@@ -0,0 +1,141 @@
+# Glossary of Common Terms
+
+The glossary below defines common terms and API elements used throughout ``aeon``.
+
+```{glossary}
+:sorted:
+
+Time series machine learning
+    todo
+
+Forecasting
+    A learning task focused on prediction future values of a time series. For more
+    details, see the {ref}`user_guide_introduction`.
+
+Time series regression
+    todo
+
+Time series classification
+    A learning task focused on using the patterns across instances between the time
+    series and a categorical target variable.
+
+Time series extrinsic regression
+    A learning task focused on using the patterns across instances between the time
+    series and a continuous target variable.
+
+Time series clustering
+    A learning task focused on discovering groups consisting of instances with similar
+    time series.
+
+Time series annotation
+    A learning task focused on labeling the timepoints of a time series. This includes
+    the related tasks of outlier detection, anomaly detection, change point detection
+    and segmentation.
+
+Time series transformation
+    todo
+
+Series-to-series transformation
+    todo
+
+Series-to-features transformation
+    todo
+
+Time series
+    Data where the {term}`variable` measurements are ordered over time or an index
+    indicating the position of an observation in the sequence of values.
+
+Panel time series
+    A form of time series data where the same time series are observed observed for
+    multiple observational units. The observed series may consist of {term}`univariate
+    time series` or {term}`multivariate time series`. Accordingly, the data varies
+    across time, observational unit and series (i.e. variables).
+
+Time series collection
+    todo
+
+Univariate time series
+    A single time series. While univariate analysis often only uses information
+    contained in the series itself, univariate time series regression and forecasting
+    can also include {term}`exogenous` data.
+
+Multivariate time series
+    Multiple time series. Typically observed for the same observational unit.
+    Multivariate time series is typically used to refer to cases where the series evolve
+    together over time. This is related, but different than the cases where a
+    {term}`univariate time series` is dependent on {term}`exogenous` data.
+
+Endogenous
+    Within a learning task endogenous variables are determined by exogenous variables
+    or past timepoints of the variable itself. Also referred to as the dependent
+    variable or target.
+
+Exogenous
+    Within a learning task exogenous variables are external factors whose pattern of
+    impact on tasks' endogenous variables must be learned.
+    Also referred to as independent variables or features.
+
+Reduction
+    Reduction refers to decomposing a given learning task into simpler tasks that can
+    be composed to create a solution to the original task.
+    In aeon reduction is used to allow one learning task to be adapted as a solution
+    for an alternative task.
+
+Variable
+    Refers to some measurement of interest. Variables may be cross-sectional
+    (e.g. time-invariant measurements like a patient's place of birth) or
+    {term}`time series`.
+
+Channel
+    todo
+
+Timepoint
+    The point in time that an observation is made. A time point may represent an exact
+    point in time (a timestamp), a timeperiod (e.g. minutes, hours or days), or simply
+    an index indicating the position of an observation in the sequence of values.
+
+Instance
+    A member of the set of entities being studied and which an ML practitioner wishes
+    to generalize. For example, patients, chemical process runs, machines, countries,
+    etc. May also be referred to as samples, examples, observations or records
+    depending on the discipline and context.
+
+Trend
+    When data shows a long-term increase or decrease, this is referred to as a trend.
+    Trends can also be non-linear.
+
+Seasonality
+    When a {term}`time series` is affected by seasonal characteristics such as the time
+    of year or the day of the week, it is called a seasonal pattern.
+    The duration of a season is always fixed and known.
+
+Tabular
+    Is a setting where each {term}`timepoint` of the {term}`univariate time series`
+    being measured for each instance are treated as features and stored as a primitive
+    data type in the DataFrame’s cells. E.g., there are N {term}`instances <instance>`
+    of time series and each has T {term}`timepoints <timepoint>`, this would yield a
+    pandas DataFrame with shape (N, T): N rows, T columns.
+
+Framework
+    A collection of related and reusable software design templates that practitioners
+    can copy and fill in.
+    Frameworks emphasize design reuse.
+    They capture common software design decisions within a given application domain and
+    distill them into reusable design templates.
+    This reduces the design decision they must take, allowing them to focus on
+    application specifics.
+    Not only can practitioners write software faster as a result, but applications
+    will have a similar structure.
+    Frameworks often offer additional functionality like {term}`toolboxes`.
+    Compare with {term}`toolbox` and {term}`application`.
+
+Toolbox
+    A collection of related and reusable functionality that practitioners can import to
+    write applications. Toolboxes emphasize code reuse.
+    Compare with {term}`framework` and {term}`application`.
+
+Application
+    A single-purpose piece of code that practitioners write to solve a particular
+    applied problem.
+    Compare with {term}`toolbox` and {term}`framework`.
+```
diff --git a/docs/glossary.rst b/docs/glossary.rst
deleted file mode 100644
index 8ce5b58f..00000000
--- a/docs/glossary.rst
+++ /dev/null
@@ -1,109 +0,0 @@
-.. _glossary:
-
-Glossary of Common Terms
-========================
-
-The glossary below defines common terms and API elements used throughout aeon.
-
-.. note::
-
-    The glossary is under development. Important terms are still missing.
-    Please create a pull request if you want to add one.
-
-
-.. glossary::
-    :sorted:
-
-    Scitype
-        See :term:`scientific type`.
-
-    Scientific type
-        A class or object type to denote a category of objects defined by a
-        common interface and data scientific purpose. For example, "forecaster"
-        or "classifier".
-
-    Forecasting
-        A learning task focused on prediction future values of a time series. For more details, see the :ref:`user_guide_introduction`.
-
-    Time series
-         Data where the :term:`variable` measurements are ordered over time or an index indicating the position of an observation in the sequence of values.
-
-    Time series classification
-        A learning task focused on using the patterns across instances between the time series and a categorical target variable.
-
-    Time series regression
-        A learning task focused on using the patterns across instances between the time series and a continuous target variable.
-
-    Time series clustering
-        A learning task focused on discovering groups consisting of instances with similar time series.
-
-    Time series annotation
-        A learning task focused on labeling the timepoints of a time series. This includes the related tasks of outlier detection, anomaly detection, change point detection and segmentation.
-
-    Panel time series
-        A form of time series data where the same time series are observed observed for multiple observational units. The observed series may consist of :term:`univariate time series` or
-        :term:`multivariate time series`. Accordingly, the data varies across time, observational unit and series (i.e. variables).
-
-    Univariate time series
-        A single time series. While univariate analysis often only uses information contained in the series itself,
-        univariate time series regression and forecasting can also include :term:`exogenous` data.
-
-    Multivariate time series
-        Multiple time series. Typically observed for the same observational unit. Multivariate time series
-        is typically used to refer to cases where the series evolve together over time. This is related, but different than the cases where
-        a :term:`univariate time series` is dependent on :term:`exogenous` data.
-
-    Endogenous
-        Within a learning task endogenous variables are determined by exogenous variables or past timepoints of the variable itself. Also referred to
-        as the dependent variable or target.
-
-    Exogenous
-        Within a learning task exogenous variables are external factors whose pattern of impact on tasks' endogenous variables must be learned.
-        Also referred to as independent variables or features.
-
-    Reduction
-        Reduction refers to decomposing a given learning task into simpler tasks that can be composed to create a solution to the original task.
-        In aeon reduction is used to allow one learning task to be adapted as a solution for an alternative task.
-
-    Variable
-        Refers to some measurement of interest. Variables may be cross-sectional (e.g. time-invariant measurements like a patient's place of birth) or
-        :term:`time series`.
-
-    Timepoint
-        The point in time that an observation is made. A time point may represent an exact point in time (a timestamp),
-        a timeperiod (e.g. minutes, hours or days), or simply an index indicating the position of an observation in the sequence of values.
-
-    Instance
-        A member of the set of entities being studied and which an ML practitioner wishes to generalize. For example,
-        patients, chemical process runs, machines, countries, etc. May also be referred to as samples, examples, observations or records
-        depending on the discipline and context.
-
-    Trend
-        When data shows a long-term increase or decrease, this is referred to as a trend. Trends can also be non-linear.
-
-    Seasonality
-        When a :term:`time series` is affected by seasonal characteristics such as the time of year or the day of the week, it is called a seasonal pattern.
-        The duration of a season is always fixed and known.
-
-    Tabular
-        Is a setting where each :term:`timepoint` of the :term:`univariate time series` being measured for each instance are treated as features and
-        stored as a primitive data type in the DataFrame’s cells. E.g., there are N :term:`instances <instance>` of time series and each has T
-        :term:`timepoints <timepoint>`, this would yield a pandas DataFrame with shape (N, T): N rows, T columns.
-
-    Framework
-        A collection of related and reusable software design templates that practitioners can copy and fill in.
-        Frameworks emphasize design reuse.
-        They capture common software design decisions within a given application domain and distill them into reusable design templates.
-        This reduces the design decision they must take, allowing them to focus on application specifics.
-        Not only can practitioners write software faster as a result, but applications will have a similar structure.
-        Frameworks often offer additional functionality like :term:`toolboxes`.
-        Compare with :term:`toolbox` and :term:`application`.
-
-    Toolbox
-        A collection of related and reusable functionality that practitioners can import to write applications.
-        Toolboxes emphasize code reuse.
-        Compare with :term:`framework` and :term:`application`.
-
-    Application
-        A single-purpose piece of code that practitioners write to solve a particular applied problem.
-        Compare with :term:`toolbox` and :term:`framework`.
diff --git a/docs/index.md b/docs/index.md
index b8c95493..6a6d686a 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -150,7 +150,7 @@ Transformation
 :hidden:
 
 installation
-get_started
+getting_started.md
 api_reference
 examples.md
 ```
diff --git a/extension_templates/annotation.py b/extension_templates/annotation.py
index 172df1ca..4763c31a 100644
--- a/extension_templates/annotation.py
+++ b/extension_templates/annotation.py
@@ -43,11 +43,11 @@ class MySeriesAnnotator(BaseSeriesAnnotator):
     Parameters
     ----------
     fmt : str {"dense", "sparse"}, optional (default="dense")
-        Annotation output format:
+        annotation output format:
         * If "sparse", a sub-series of labels for only the outliers in X is returned,
         * If "dense", a series of labels for all values in X is returned.
     labels : str {"indicator", "score"}, optional (default="indicator")
-        Annotation output labels:
+        annotation output labels:
         * If "indicator", returned values are boolean, indicating whether a value is an
         outlier,
         * If "score", returned values are floats, giving the outlier score.
diff --git a/pyproject.toml b/pyproject.toml
index e9fc2c65..3b0728fe 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -106,10 +106,9 @@ docs = [
     "numpydoc",
     "furo",
     "sphinx_issues>=3.0.1",
-    "sphinx-gallery>=0.11.1",
     "sphinx-design>=0.3.0",
-    # sphinx has <6 because of shinx-design
-    "sphinx>=5.0.0,<6",
+    "sphinx-copybutton",
+    "sphinx>=5.0.0,<6", # sphinx has <6 because of shinx-design
     "tabulate",
 ]
 


Test patch:
diff --git a/aeon/classification/tests/test_sklearn_compatability.py b/aeon/classification/tests/test_sklearn_compatability.py
index b07cb564..365a3b54 100644
--- a/aeon/classification/tests/test_sklearn_compatability.py
+++ b/aeon/classification/tests/test_sklearn_compatability.py
@@ -86,7 +86,8 @@ COMPOSITE_ESTIMATORS = [
 
 @pytest.mark.parametrize("data_args", DATA_ARGS)
 def test_sklearn_cross_validation(data_args):
-    """Test sklearn cross-validation works with aeon panel data and classifiers."""
+    """Test sklearn cross-validation works with aeon time series data and
+    classifiers."""
     clf = CanonicalIntervalForest.create_test_instance()
     fit_args = make_classification_problem(**data_args)
 
@@ -97,7 +98,7 @@ def test_sklearn_cross_validation(data_args):
 @pytest.mark.parametrize("data_args", DATA_ARGS)
 @pytest.mark.parametrize("cross_validation_method", CROSS_VALIDATION_METHODS)
 def test_sklearn_cross_validation_iterators(data_args, cross_validation_method):
-    """Test if sklearn cross-validation iterators can handle aeon panel data."""
+    """Test if sklearn cross-validation iterators can handle aeon time series data."""
     fit_args = make_classification_problem(**data_args)
     groups = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10]
 
@@ -108,7 +109,7 @@ def test_sklearn_cross_validation_iterators(data_args, cross_validation_method):
 @pytest.mark.parametrize("data_args", DATA_ARGS)
 @pytest.mark.parametrize("parameter_tuning_method", PARAMETER_TUNING_METHODS)
 def test_sklearn_parameter_tuning(data_args, parameter_tuning_method):
-    """Test if sklearn parameter tuners can handle aeon panel data and classifiers."""
+    """Test if sklearn parameter tuners can handle aeon data and classifiers."""
     clf = CanonicalIntervalForest.create_test_instance()
     param_grid = {"n_intervals": [2, 3], "att_subsample_size": [2, 3]}
     fit_args = make_classification_problem(**data_args)
diff --git a/aeon/distances/tests/_expected_results.py b/aeon/distances/tests/_expected_results.py
index f4b17bdb..cd886914 100644
--- a/aeon/distances/tests/_expected_results.py
+++ b/aeon/distances/tests/_expected_results.py
@@ -35,7 +35,15 @@ _expected_distance_results = {
         44.86527164702194,
         403.49548197391704,
     ],
-    "ddtw": [0.0, 2.0884818837222006, 34.837800040564005],
+    "ddtw": [
+        0.0,
+        2.0884818837222006,
+        34.837800040564005,
+        323.279387211988,
+        3.6475610211489875,
+        35.916981095128804,
+        281.92058999075414,
+    ],
     "wdtw": [12.343758137512241, 0.985380547171357, 21.265839226825413],
     "wddtw": [0.0, 1.0442409418611003, 17.418900020282003],
     "msm": [5.0, 6.828557434224288, None],
@@ -62,7 +70,6 @@ _expected_distance_results_params = {
     ],
     "ddtw": [
         [2.683958998434711, 34.837800040564005],
-        [2.180365495972097, 47.59969618998147],
     ],
     "wdtw": [
         [1.364177898415523, 21.265839226825413],
diff --git a/aeon/distances/tests/test_alignment_path.py b/aeon/distances/tests/test_alignment_path.py
index 3fb9e9f2..8479ff01 100644
--- a/aeon/distances/tests/test_alignment_path.py
+++ b/aeon/distances/tests/test_alignment_path.py
@@ -30,13 +30,14 @@ def test_cost_matrix(dist):
         return
 
     # Test univariate
-    _validate_cost_matrix_result(
-        np.array([10.0]),
-        np.array([15.0]),
-        dist["name"],
-        dist["distance"],
-        dist["alignment_path"],
-    )
+    if dist["name"] != "ddtw" and dist["name"] != "wddtw":
+        _validate_cost_matrix_result(
+            np.array([10.0]),
+            np.array([15.0]),
+            dist["name"],
+            dist["distance"],
+            dist["alignment_path"],
+        )
 
     _validate_cost_matrix_result(
         create_test_distance_numpy(10),
diff --git a/aeon/distances/tests/test_cost_matrix.py b/aeon/distances/tests/test_cost_matrix.py
index b1235b63..1fd9473f 100644
--- a/aeon/distances/tests/test_cost_matrix.py
+++ b/aeon/distances/tests/test_cost_matrix.py
@@ -17,7 +17,10 @@ def _validate_cost_matrix_result(
     cost_matrix_result = cost_matrix(x, y)
 
     assert isinstance(cost_matrix_result, np.ndarray)
-    assert cost_matrix_result.shape == (x.shape[-1], y.shape[-1])
+    if name == "ddtw" or name == "wddtw":
+        assert cost_matrix_result.shape == (x.shape[-1] - 2, y.shape[-1] - 2)
+    else:
+        assert cost_matrix_result.shape == (x.shape[-1], y.shape[-1])
 
     distance_result = distance(x, y)
 
@@ -30,13 +33,14 @@ def test_cost_matrix(dist):
         return
 
     # Test univariate
-    _validate_cost_matrix_result(
-        np.array([10.0]),
-        np.array([15.0]),
-        dist["name"],
-        dist["distance"],
-        dist["cost_matrix"],
-    )
+    if dist["name"] != "ddtw" and dist["name"] != "wddtw":
+        _validate_cost_matrix_result(
+            np.array([10.0]),
+            np.array([15.0]),
+            dist["name"],
+            dist["distance"],
+            dist["cost_matrix"],
+        )
 
     _validate_cost_matrix_result(
         create_test_distance_numpy(10),
diff --git a/aeon/distances/tests/test_distance_correctness.py b/aeon/distances/tests/test_distance_correctness.py
index 6871fe94..c609daf4 100644
--- a/aeon/distances/tests/test_distance_correctness.py
+++ b/aeon/distances/tests/test_distance_correctness.py
@@ -69,7 +69,7 @@ basic_motions_distances = {
     "erp": [0.2086269, 2.9942540, 102.097904],
     "edr": [1.0, 0.26, 0.07],
     "lcss": [1.0, 0.26, 0.05],
-    "ddtw": [297.18771, 160.48649, 160.29823],
+    "ddtw": [297.18771, 160.51311645984856, 160.29823],
     "wddtw": [80.149117, 1.458858, 0.0],
     "twe": [1.325876246546281, 14.759114523578294, 218.21301289250758],
 }
diff --git a/aeon/distances/tests/test_new_distances.py b/aeon/distances/tests/test_new_distances.py
index a337ebcd..fe7e87a0 100644
--- a/aeon/distances/tests/test_new_distances.py
+++ b/aeon/distances/tests/test_new_distances.py
@@ -7,6 +7,10 @@ import pytest
 from numpy.testing import assert_almost_equal
 
 from aeon.distances import (
+    ddtw_alignment_path,
+    ddtw_cost_matrix,
+    ddtw_distance,
+    ddtw_pairwise_distance,
     dtw_alignment_path,
     dtw_cost_matrix,
     dtw_distance,
@@ -37,6 +41,13 @@ DISTANCES = [
         "cost_matrix": dtw_cost_matrix,
         "alignment_path": dtw_alignment_path,
     },
+    {
+        "name": "ddtw",
+        "distance": ddtw_distance,
+        "pairwise_distance": ddtw_pairwise_distance,
+        "cost_matrix": ddtw_cost_matrix,
+        "alignment_path": ddtw_alignment_path,
+    },
 ]
 
 
@@ -58,13 +69,15 @@ def _validate_distance_result(
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_new_distances(dist):
     # Test univariate
-    _validate_distance_result(
-        np.array([10.0]),
-        np.array([15.0]),
-        dist["name"],
-        dist["distance"],
-        _expected_distance_results[dist["name"]][0],
-    )
+
+    if dist["name"] != "ddtw" and dist["name"] != "wddtw":
+        _validate_distance_result(
+            np.array([10.0]),
+            np.array([15.0]),
+            dist["name"],
+            dist["distance"],
+            _expected_distance_results[dist["name"]][0],
+        )
 
     _validate_distance_result(
         create_test_distance_numpy(10),
diff --git a/aeon/distances/tests/test_numba_distance_parameters.py b/aeon/distances/tests/test_numba_distance_parameters.py
index c94e6c30..d3f04220 100644
--- a/aeon/distances/tests/test_numba_distance_parameters.py
+++ b/aeon/distances/tests/test_numba_distance_parameters.py
@@ -67,7 +67,7 @@ DIST_PARAMS = {
     "erp": BASIC_BOUNDING_PARAMS + [{"g": 0.5}],
     "edr": BASIC_BOUNDING_PARAMS + [{"epsilon": 0.5}],
     "lcss": BASIC_BOUNDING_PARAMS + [{"epsilon": 0.5}],
-    "ddtw": BASIC_BOUNDING_PARAMS + [{"compute_derivative": _test_derivative}],
+    "ddtw": BASIC_BOUNDING_PARAMS,
     "wdtw": BASIC_BOUNDING_PARAMS + [{"g": 0.5}],
     "wddtw": BASIC_BOUNDING_PARAMS
     + [{"compute_derivative": _test_derivative}]
diff --git a/aeon/distances/tests/test_pairwise.py b/aeon/distances/tests/test_pairwise.py
index ce98720f..df323fe1 100644
--- a/aeon/distances/tests/test_pairwise.py
+++ b/aeon/distances/tests/test_pairwise.py
@@ -113,13 +113,14 @@ def test_pairwise_distance(dist):
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_multiple_to_multiple_distances(dist):
     # Univariate tests
-    _validate_multiple_to_multiple_result(
-        np.array([10.0]),
-        np.array([15.0]),
-        dist["name"],
-        dist["distance"],
-        dist["pairwise_distance"],
-    )
+    if dist["name"] != "ddtw":
+        _validate_multiple_to_multiple_result(
+            np.array([10.0]),
+            np.array([15.0]),
+            dist["name"],
+            dist["distance"],
+            dist["pairwise_distance"],
+        )
 
     _validate_multiple_to_multiple_result(
         create_test_distance_numpy(5),
@@ -158,7 +159,7 @@ def test_multiple_to_multiple_distances(dist):
     # Unequal length tests
     _validate_multiple_to_multiple_result(
         create_test_distance_numpy(5),
-        create_test_distance_numpy(2, random_state=2),
+        create_test_distance_numpy(3, random_state=2),
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],
@@ -166,7 +167,7 @@ def test_multiple_to_multiple_distances(dist):
 
     _validate_multiple_to_multiple_result(
         create_test_distance_numpy(5, 5),
-        create_test_distance_numpy(5, 2, random_state=2),
+        create_test_distance_numpy(5, 3, random_state=2),
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],
@@ -174,7 +175,7 @@ def test_multiple_to_multiple_distances(dist):
 
     _validate_multiple_to_multiple_result(
         create_test_distance_numpy(5, 5, 5),
-        create_test_distance_numpy(5, 5, 2, random_state=2),
+        create_test_distance_numpy(5, 5, 3, random_state=2),
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],
@@ -187,24 +188,26 @@ new_distance = ["euclidean", "dtw"]
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_new_single_to_multiple_distances(dist):
     # Univariate tests
-    _validate_single_to_multiple_result(
-        np.array([10.0]),
-        np.array([[15.0]]),
-        dist["name"],
-        dist["distance"],
-        dist["pairwise_distance"],
-    )
+
+    if dist["name"] != "ddtw":
+        _validate_single_to_multiple_result(
+            np.array([10.0]),
+            np.array([[15.0]]),
+            dist["name"],
+            dist["distance"],
+            dist["pairwise_distance"],
+        )
 
     _validate_single_to_multiple_result(
         create_test_distance_numpy(5),
-        create_test_distance_numpy(2, 1, 5, random_state=2)[0],
+        create_test_distance_numpy(3, 1, 5, random_state=2)[0],
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],
     )
 
     _validate_single_to_multiple_result(
-        create_test_distance_numpy(2, 1, 5)[0],
+        create_test_distance_numpy(3, 1, 5)[0],
         create_test_distance_numpy(5, 1, 5, random_state=2),
         dist["name"],
         dist["distance"],
@@ -222,8 +225,8 @@ def test_new_single_to_multiple_distances(dist):
 
     # Unequal length tests
     _validate_single_to_multiple_result(
-        create_test_distance_numpy(2),
-        create_test_distance_numpy(2, 1, 5, random_state=2)[0],
+        create_test_distance_numpy(3),
+        create_test_distance_numpy(3, 1, 5, random_state=2)[0],
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],
@@ -231,14 +234,14 @@ def test_new_single_to_multiple_distances(dist):
 
     _validate_single_to_multiple_result(
         create_test_distance_numpy(5),
-        create_test_distance_numpy(2, 1, 2, random_state=2)[0],
+        create_test_distance_numpy(3, 1, 3, random_state=2)[0],
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],
     )
 
     _validate_single_to_multiple_result(
-        create_test_distance_numpy(5, 2),
+        create_test_distance_numpy(5, 3),
         create_test_distance_numpy(5, 5, 5, random_state=2),
         dist["name"],
         dist["distance"],
@@ -247,7 +250,7 @@ def test_new_single_to_multiple_distances(dist):
 
     _validate_single_to_multiple_result(
         create_test_distance_numpy(5, 5),
-        create_test_distance_numpy(5, 5, 2, random_state=2),
+        create_test_distance_numpy(5, 5, 3, random_state=2),
         dist["name"],
         dist["distance"],
         dist["pairwise_distance"],