Repository: aeon-toolkit/aeon
Pull request #2178 (2024-10-11 09:14:00)

[MNT] Distance module refactor part 2
<!--
Thanks for contributing a pull request! Please ensure you have taken a look at our
contribution guide: https://www.aeon-toolkit.org/en/stable/contributing.html

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
#2161 #2170 

<!--
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 is part 2 of cleaning up this distance module. This PR focuses on moving the remaining distances to an appropriate directory and cleaning up the code now that pairwise_distance is no longer a numba function (can use kwargs).

<!--
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.
-->

#### Any other comments?
Some tests are disabled for the min distances and their coverage is lower than the others. This will be addressed in the distance module cleanup part 3.

<!--
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). Alternatively, you can use the [@all-contributors](https://allcontributors.org/docs/en/bot/usage) bot to do this for you.
- [x] The PR title starts with either [ENH], [MNT], [DOC], [BUG], [REF], [DEP] or [GOV] indicating whether the PR topic is related to enhancement, maintenance, documentation, bugs, refactoring, deprecation or governance.

##### For new estimators and functions
- [x] I've added the estimator to the online [API documentation](https://www.aeon-toolkit.org/en/latest/api_reference.html).
- [x] (OPTIONAL) I've added myself as a `__maintainer__` at the top of relevant files and want to be contacted regarding its maintenance. Unmaintained files may be removed. This is for the full file, and you should not add yourself if you are just making minor changes or do not want to help maintain its contents.

##### For developers with write access
- [x] (OPTIONAL) I've updated aeon's [CODEOWNERS](https://github.com/aeon-toolkit/aeon/blob/main/CODEOWNERS) to receive notifications about future changes to these files.


<!--
Thanks for contributing!
-->


aeon-actions-bot[bot]: 
## Thank you for contributing to `aeon`

I have added the following labels to this PR based on the title: **[ $\\color{#EC843A}{\\textsf{maintenance}}$ ]**.
I have added the following labels to this PR based on the changes made: **[ $\\color{#5209C9}{\\textsf{distances}}$ ]**. Feel free to change these if they do not properly represent the PR.

The [Checks](https://github.com/aeon-toolkit/aeon/pull/2178/checks) tab will show the status of our automated tests. You can click on individual test runs in the tab or "Details" in the panel below to see more information if there is a failure.

If our `pre-commit` code quality check fails, any trivial fixes will automatically be pushed to your PR unless it is a draft.

Don't hesitate to ask questions on the `aeon` [Slack](https://join.slack.com/t/aeon-toolkit/shared_invite/zt-22vwvut29-HDpCu~7VBUozyfL_8j3dLA) channel if you have any.

### PR CI actions

These checkboxes will add labels to enable/disable CI functionality for this PR. This may not take effect immediately, and a new commit may be required to run the new configuration.

- [ ] Run `pre-commit` checks for all files
- [ ] Run `mypy` typecheck tests
- [ ] Run all `pytest` tests and configurations
- [ ] Run all notebook example tests
- [ ] Run numba-disabled `codecov` tests
- [ ] Stop automatic `pre-commit` fixes (always disabled for drafts)
- [ ] Disable numba cache loading
- [ ] Push an empty commit to re-run CI checks
    
MatthewMiddlehurst: Is this still relevant? https://github.com/aeon-toolkit/aeon/pull/2170/files#diff-01a85f7ce36af292445124118eeab7646bc1de533efe47b579a7c2d67280df73R379

chrisholder: > Is this still relevant? https://github.com/aeon-toolkit/aeon/pull/2170/files#diff-01a85f7ce36af292445124118eeab7646bc1de533efe47b579a7c2d67280df73R379

Removed - it was a leftover note to self to test it (which it now has been)!
chrisholder: This PR will break everything unless the numba cache's are update so will merge close to midnight

Patch:
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 4aabbcb4..b1e03bb0 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2592,6 +2592,15 @@
       "contributions": [
         "code"
       ]
+    },
+    {
+      "login": "emmanuel-ferdman",
+      "name": "Emmanuel Ferdman",
+      "avatar_url": "https://avatars.githubusercontent.com/u/35470921?v=4",
+      "profile": "https://github.com/emmanuel-ferdman",
+      "contributions": [
+        "doc"
+      ]
     }
   ],
   "commitType": "docs"
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index b5661a9c..a5523c5e 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-252-orange.svg)](#contributors)
+[![All Contributors](https://img.shields.io/badge/all_contributors-253-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!
@@ -98,12 +98,13 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Dbhasin1"><img src="https://avatars.githubusercontent.com/u/56479884?v=4?s=80" width="80px;" alt="Drishti Bhasin "/><br /><sub><b>Drishti Bhasin </b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Dbhasin1" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/dsherry"><img src="https://avatars.githubusercontent.com/dsherry?s=80" width="80px;" 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="12.5%"><a href="https://github.com/Emiliathewolf"><img src="https://avatars2.githubusercontent.com/u/22026218?v=4?s=80" width="80px;" alt="Emilia Rose"/><br /><sub><b>Emilia Rose</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Emiliathewolf" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Emiliathewolf" title="Tests">⚠️</a></td>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/emmanuel-ferdman"><img src="https://avatars.githubusercontent.com/u/35470921?v=4?s=80" width="80px;" alt="Emmanuel Ferdman"/><br /><sub><b>Emmanuel Ferdman</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=emmanuel-ferdman" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/erjieyong"><img src="https://avatars.githubusercontent.com/u/109052378?v=4?s=80" width="80px;" alt="Er Jie Yong"/><br /><sub><b>Er Jie Yong</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Aerjieyong" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=erjieyong" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/evanmiller29"><img src="https://avatars2.githubusercontent.com/u/8062590?v=4?s=80" width="80px;" 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="12.5%"><a href="https://github.com/eyalshafran"><img src="https://avatars.githubusercontent.com/u/16999574?v=4?s=80" width="80px;" alt="Eyal Shafran"/><br /><sub><b>Eyal Shafran</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=eyalshafran" title="Code">💻</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/FedericoGarza"><img src="https://avatars.githubusercontent.com/u/10517170?v=4?s=80" width="80px;" alt="Federico Garza"/><br /><sub><b>Federico Garza</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=FedericoGarza" title="Code">💻</a> <a href="#example-FedericoGarza" title="Examples">💡</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/FedericoGarza"><img src="https://avatars.githubusercontent.com/u/10517170?v=4?s=80" width="80px;" alt="Federico Garza"/><br /><sub><b>Federico Garza</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=FedericoGarza" title="Code">💻</a> <a href="#example-FedericoGarza" title="Examples">💡</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/flix6x"><img src="https://avatars.githubusercontent.com/u/30658763?v=4?s=80" width="80px;" alt="Felix Claessen"/><br /><sub><b>Felix Claessen</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Flix6x" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Flix6x" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Flix6x" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AFlix6x" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/fstinner"><img src="https://avatars.githubusercontent.com/u/11679462?v=4?s=80" width="80px;" alt="Florian Stinner"/><br /><sub><b>Florian Stinner</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=fstinner" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=fstinner" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/fspinna"><img src="https://avatars.githubusercontent.com/u/35352023?v=4?s=80" width="80px;" alt="Francesco Spinnato"/><br /><sub><b>Francesco Spinnato</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=fspinna" title="Code">💻</a></td>
@@ -111,9 +112,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/freddyaboulton"><img src="https://avatars.githubusercontent.com/u/41651716?v=4?s=80" width="80px;" 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-toolkit/aeon/commits?author=freddyaboulton" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/futuer-szd"><img src="https://avatars.githubusercontent.com/u/57895730?v=4?s=80" width="80px;" alt="Futuer"/><br /><sub><b>Futuer</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=futuer-szd" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/griegner"><img src="https://avatars.githubusercontent.com/u/54326829?v=4?s=80" width="80px;" alt="Gabriel Riegner"/><br /><sub><b>Gabriel Riegner</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=griegner" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/chernika158"><img src="https://avatars.githubusercontent.com/u/43787741?s=400&v=4?s=80" width="80px;" alt="Galina Chernikova"/><br /><sub><b>Galina Chernikova</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=chernika158" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/chernika158"><img src="https://avatars.githubusercontent.com/u/43787741?s=400&v=4?s=80" width="80px;" alt="Galina Chernikova"/><br /><sub><b>Galina Chernikova</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=chernika158" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/georgejl7"><img src="https://avatars.githubusercontent.com/u/134635414?v=4?s=80" width="80px;" alt="George Langley"/><br /><sub><b>George Langley</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=georgejl7" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/goastler"><img src="https://avatars0.githubusercontent.com/u/7059456?v=4?s=80" width="80px;" alt="George Oastler"/><br /><sub><b>George Oastler</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=goastler" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/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-toolkit/aeon/commits?author=goastler" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://jose-gilberto.github.io/"><img src="https://avatars.githubusercontent.com/u/32587935?v=4?s=80" width="80px;" alt="Gilberto Barbosa"/><br /><sub><b>Gilberto Barbosa</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jose-gilberto" 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="12.5%"><a href="https://github.com/GuiArcencio"><img src="https://avatars.githubusercontent.com/u/47733489?s=80" width="80px;" alt="Guilherme Arcencio"/><br /><sub><b>Guilherme Arcencio</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=GuiArcencio" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=GuiArcencio" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/GuzalBulatova"><img src="https://avatars.githubusercontent.com/GuzalBulatova?s=80" width="80px;" alt="Guzal Bulatova"/><br /><sub><b>Guzal Bulatova</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AGuzalBulatova" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/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-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3AGuzalBulatova" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=GuzalBulatova" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/HYang1996"><img src="https://avatars0.githubusercontent.com/u/44179303?v=4?s=80" width="80px;" alt="HYang1996"/><br /><sub><b>HYang1996</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=HYang1996" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=HYang1996" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=HYang1996" title="Documentation">📖</a> <a href="#tutorial-HYang1996" title="Tutorials">✅</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/harshithasudhakar"><img src="https://avatars.githubusercontent.com/u/111514477?v=4?s=80" width="80px;" alt="Harshitha Sudhakar"/><br /><sub><b>Harshitha Sudhakar</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=harshithasudhakar" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=harshithasudhakar" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/harshithasudhakar"><img src="https://avatars.githubusercontent.com/u/111514477?v=4?s=80" width="80px;" alt="Harshitha Sudhakar"/><br /><sub><b>Harshitha Sudhakar</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=harshithasudhakar" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=harshithasudhakar" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/hedeershowk"><img src="https://avatars.githubusercontent.com/u/144284759?v=4?s=80" width="80px;" alt="Hedeer El Showk"/><br /><sub><b>Hedeer El Showk</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Ahedeershowk" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=hedeershowk" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=hedeershowk" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/huayiwei/"><img src="https://avatars3.githubusercontent.com/u/22870735?v=4?s=80" width="80px;" alt="Huayi Wei"/><br /><sub><b>Huayi Wei</b></sub></a><br /><a href="#tutorial-huayicodes" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Ifeanyi30"><img src="https://avatars.githubusercontent.com/u/49926145?v=4?s=80" width="80px;" alt="Ifeanyi30"/><br /><sub><b>Ifeanyi30</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Ifeanyi30" title="Code">💻</a></td>
@@ -131,9 +132,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/IlyasMoutawwakil"><img src="https://avatars.githubusercontent.com/IlyasMoutawwakil?s=80" width="80px;" alt="Ilyas Moutawwakil"/><br /><sub><b>Ilyas Moutawwakil</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=IlyasMoutawwakil" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=IlyasMoutawwakil" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/ireoluwatomiwa-sanusi/"><img src="https://avatars.githubusercontent.com/u/61966277?v=4?s=80" width="80px;" alt="Ireoluwatomiwa"/><br /><sub><b>Ireoluwatomiwa</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Tomiiwa" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/ishannangia001"><img src="https://avatars.githubusercontent.com/u/29480389?v=4?s=80" width="80px;" 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="12.5%"><a href="https://github.com/IRKnyazev"><img src="https://avatars.githubusercontent.com/u/105492484?v=4?s=80" width="80px;" alt="Ivan Knyazev"/><br /><sub><b>Ivan Knyazev</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=IRKnyazev" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/IRKnyazev"><img src="https://avatars.githubusercontent.com/u/105492484?v=4?s=80" width="80px;" alt="Ivan Knyazev"/><br /><sub><b>Ivan Knyazev</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=IRKnyazev" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/jnrusson1"><img src="https://avatars.githubusercontent.com/u/51986332?v=4?s=80" width="80px;" alt="Jack Russon"/><br /><sub><b>Jack Russon</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jnrusson1" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="http://www.timeseriesclassification.com/"><img src="https://avatars0.githubusercontent.com/u/44509982?v=4?s=80" width="80px;" alt="James Large"/><br /><sub><b>James Large</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=James-Large" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=James-Large" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/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="12.5%"><a href="https://github.com/jambo6"><img src="https://avatars.githubusercontent.com/u/32545677?v=4?s=80" width="80px;" alt="James Morrill"/><br /><sub><b>James Morrill</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jambo6" title="Code">💻</a></td>
@@ -141,9 +142,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars1.githubusercontent.com/u/38794632?v=4?s=80" width="80px;" alt="Jason Lines"/><br /><sub><b>Jason Lines</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jasonlines" title="Code">💻</a> <a href="#business-jasonlines" title="Business development">💼</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=jasonlines" title="Documentation">📖</a> <a href="#design-jasonlines" title="Design">🎨</a> <a href="#eventOrganizing-jasonlines" title="Event Organizing">📋</a> <a href="#fundingFinding-jasonlines" title="Funding Finding">🔍</a> <a href="#ideas-jasonlines" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-jasonlines" title="Project Management">📆</a> <a href="#question-jasonlines" title="Answering Questions">💬</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Ajasonlines" title="Reviewed Pull Requests">👀</a> <a href="#talk-jasonlines" title="Talks">📢</a> <a href="#example-jasonlines" title="Examples">💡</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/jasonmokk"><img src="https://avatars.githubusercontent.com/u/106209849?v=4?s=80" width="80px;" alt="Jason Mok"/><br /><sub><b>Jason Mok</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jasonmokk" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/whackteachers"><img src="https://avatars0.githubusercontent.com/u/33785383?v=4?s=80" width="80px;" alt="Jason Pong"/><br /><sub><b>Jason Pong</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=whackteachers" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=whackteachers" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/mateuja"><img src="https://avatars.githubusercontent.com/mateuja?s=80" width="80px;" alt="Jaume Mateu"/><br /><sub><b>Jaume Mateu</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=mateuja" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/mateuja"><img src="https://avatars.githubusercontent.com/mateuja?s=80" width="80px;" alt="Jaume Mateu"/><br /><sub><b>Jaume Mateu</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=mateuja" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/JonathanBechtel"><img src="https://avatars.githubusercontent.com/u/481696?v=4?s=80" width="80px;" alt="JonathanBechtel"/><br /><sub><b>JonathanBechtel</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=JonathanBechtel" title="Code">💻</a> <a href="#ideas-JonathanBechtel" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=JonathanBechtel" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/jorenham"><img src="https://avatars.githubusercontent.com/u/6208662?v=4?s=80" width="80px;" 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="12.5%"><a href="https://juanitorduz.github.io/"><img src="https://avatars1.githubusercontent.com/u/22996444?v=4?s=80" width="80px;" 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-toolkit/aeon/commits?author=juanitorduz" title="Documentation">📖</a></td>
@@ -151,9 +152,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/julianarn/"><img src="https://avatars.githubusercontent.com/u/19613567?v=4?s=80" width="80px;" alt="Juliana"/><br /><sub><b>Juliana</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=julramos" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.justinshenk.com/"><img src="https://avatars.githubusercontent.com/u/10270308?v=4?s=80" width="80px;" alt="Justin Shenk"/><br /><sub><b>Justin Shenk</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=justinshenk" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/kcc-lion"><img src="https://avatars.githubusercontent.com/u/54307609?v=4?s=80" width="80px;" alt="Kai Lion"/><br /><sub><b>Kai Lion</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=kcc-lion" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=kcc-lion" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=kcc-lion" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/kanand77"><img src="https://avatars.githubusercontent.com/kanand77?s=80" width="80px;" alt="Kavin Anand"/><br /><sub><b>Kavin Anand</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=kanand77" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/kanand77"><img src="https://avatars.githubusercontent.com/kanand77?s=80" width="80px;" alt="Kavin Anand"/><br /><sub><b>Kavin Anand</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=kanand77" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://kejsitake.com/"><img src="https://avatars.githubusercontent.com/u/23707808?v=4?s=80" width="80px;" alt="Kejsi Take"/><br /><sub><b>Kejsi Take</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=kejsitake" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/kevinlam2"><img src="https://avatars.githubusercontent.com/u/114420932?s=400&v=4?s=80" width="80px;" alt="Kevin Lam"/><br /><sub><b>Kevin Lam</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=klam-data" title="Code">💻</a> <a href="#example-klam-data" title="Examples">💡</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=klam-data" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://whitakerlab.github.io/"><img src="https://avatars1.githubusercontent.com/u/3626306?v=4?s=80" width="80px;" 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>
@@ -161,9 +162,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/krumeto"><img src="https://avatars3.githubusercontent.com/u/11272436?v=4?s=80" width="80px;" alt="Krum Arnaudov"/><br /><sub><b>Krum Arnaudov</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Akrumeto" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=krumeto" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/koralturkk"><img src="https://avatars2.githubusercontent.com/u/18037789?s=460&v=4?s=80" width="80px;" alt="Kutay Koralturk"/><br /><sub><b>Kutay Koralturk</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=koralturkk" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Akoralturkk" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/ltsaprounis"><img src="https://avatars.githubusercontent.com/u/64217214?v=4?s=80" width="80px;" alt="Leonidas Tsaprounis"/><br /><sub><b>Leonidas Tsaprounis</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ltsaprounis" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Altsaprounis" title="Bug reports">🐛</a> <a href="#mentoring-ltsaprounis" title="Mentoring">🧑‍🏫</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Altsaprounis" title="Reviewed Pull Requests">👀</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/lielleravid"><img src="https://avatars.githubusercontent.com/u/37774194?v=4?s=80" width="80px;" alt="Lielle Ravid"/><br /><sub><b>Lielle Ravid</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=lielleravid" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lielleravid" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/lielleravid"><img src="https://avatars.githubusercontent.com/u/37774194?v=4?s=80" width="80px;" alt="Lielle Ravid"/><br /><sub><b>Lielle Ravid</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=lielleravid" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lielleravid" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/chillerobscuro"><img src="https://avatars.githubusercontent.com/u/5232872?v=4?s=80" width="80px;" alt="Logan Duffy"/><br /><sub><b>Logan Duffy</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=chillerobscuro" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=chillerobscuro" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=chillerobscuro" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/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="12.5%"><a href="http://lpantano.github.io/"><img src="https://avatars2.githubusercontent.com/u/1621788?v=4?s=80" width="80px;" 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="12.5%"><a href="https://github.com/ltoniazzi"><img src="https://avatars.githubusercontent.com/u/61414566?s=80" width="80px;" alt="Lorenzo Toniazzi"/><br /><sub><b>Lorenzo Toniazzi</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ltoniazzi" title="Code">💻</a></td>
@@ -171,9 +172,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/zy18811"><img src="https://avatars.githubusercontent.com/u/74973887?v=4?s=80" width="80px;" alt="Luca Bennett"/><br /><sub><b>Luca Bennett</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=zy18811" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=zy18811" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=zy18811" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/lbventura"><img src="https://avatars.githubusercontent.com/u/68004282?s=96&v=4?s=80" width="80px;" alt="Luis Ventura"/><br /><sub><b>Luis Ventura</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=lbventura" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/luiszugasti"><img src="https://avatars.githubusercontent.com/u/11198457?s=460&u=0645b72683e491824aca16db9702f1d3eb990389&v=4?s=80" width="80px;" alt="Luis Zugasti"/><br /><sub><b>Luis Zugasti</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=luiszugasti" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/lmmentel"><img src="https://avatars.githubusercontent.com/u/8989838?v=4?s=80" width="80px;" alt="Lukasz Mentel"/><br /><sub><b>Lukasz Mentel</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=lmmentel" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lmmentel" title="Documentation">📖</a> <a href="#infra-lmmentel" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lmmentel" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Almmentel" title="Bug reports">🐛</a> <a href="#maintenance-lmmentel" title="Maintenance">🚧</a> <a href="#mentoring-lmmentel" title="Mentoring">🧑‍🏫</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/lmmentel"><img src="https://avatars.githubusercontent.com/u/8989838?v=4?s=80" width="80px;" alt="Lukasz Mentel"/><br /><sub><b>Lukasz Mentel</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=lmmentel" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lmmentel" title="Documentation">📖</a> <a href="#infra-lmmentel" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lmmentel" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Almmentel" title="Bug reports">🐛</a> <a href="#maintenance-lmmentel" title="Maintenance">🚧</a> <a href="#mentoring-lmmentel" title="Mentoring">🧑‍🏫</a></td>
       <td align="center" valign="top" width="12.5%"><a href="http://marcelotryle.com"><img src="https://avatars3.githubusercontent.com/u/7353520?v=4?s=80" width="80px;" alt="Marcelo Trylesinski"/><br /><sub><b>Marcelo Trylesinski</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Kludex" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/MarcoGorelli"><img src="https://avatars2.githubusercontent.com/u/33491632?v=4?s=80" width="80px;" alt="Marco Gorelli"/><br /><sub><b>Marco Gorelli</b></sub></a><br /><a href="#infra-MarcoGorelli" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/margaret-gorlin/"><img src="https://avatars.githubusercontent.com/u/23091594?v=4?s=80" width="80px;" alt="Margaret Gorlin"/><br /><sub><b>Margaret Gorlin</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=mgorlin" title="Code">💻</a> <a href="#example-mgorlin" title="Examples">💡</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=mgorlin" title="Tests">⚠️</a></td>
@@ -181,9 +182,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://twitter.com/marielli"><img src="https://avatars2.githubusercontent.com/u/13499809?v=4?s=80" width="80px;" alt="Marielle"/><br /><sub><b>Marielle</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=marielledado" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=marielledado" title="Code">💻</a> <a href="#ideas-marielledado" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/mloning"><img src="https://avatars3.githubusercontent.com/u/21020482?v=4?s=80" width="80px;" alt="Markus Löning"/><br /><sub><b>Markus Löning</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=mloning" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/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-toolkit/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-toolkit/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-toolkit/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="12.5%"><a href="https://www.linkedin.com/in/martin-walter-1a33b3114/"><img src="https://avatars0.githubusercontent.com/u/29627036?v=4?s=80" width="80px;" alt="Martin Walter"/><br /><sub><b>Martin Walter</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=aiwalter" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/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-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Aaiwalter" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=aiwalter" title="Documentation">📖</a> <a href="#talk-aiwalter" title="Talks">📢</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/martinagvilas"><img src="https://avatars2.githubusercontent.com/u/37339384?v=4?s=80" width="80px;" alt="Martina G. Vilas"/><br /><sub><b>Martina G. Vilas</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Amartinagvilas" title="Reviewed Pull Requests">👀</a> <a href="#ideas-martinagvilas" title="Ideas, Planning, & Feedback">🤔</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/martinagvilas"><img src="https://avatars2.githubusercontent.com/u/37339384?v=4?s=80" width="80px;" alt="Martina G. Vilas"/><br /><sub><b>Martina G. Vilas</b></sub></a><br /><a href="https://github.com/aeon-toolkit/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="12.5%"><a href="https://github.com/MatthewMiddlehurst"><img src="https://avatars0.githubusercontent.com/u/25731235?v=4?s=80" width="80px;" alt="Matthew Middlehurst"/><br /><sub><b>Matthew Middlehurst</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AMatthewMiddlehurst" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=MatthewMiddlehurst" title="Code">💻</a> <a href="#data-MatthewMiddlehurst" title="Data">🔣</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=MatthewMiddlehurst" title="Documentation">📖</a> <a href="#design-MatthewMiddlehurst" title="Design">🎨</a> <a href="#example-MatthewMiddlehurst" title="Examples">💡</a> <a href="#ideas-MatthewMiddlehurst" title="Ideas, Planning, & Feedback">🤔</a> <a href="#infra-MatthewMiddlehurst" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="#maintenance-MatthewMiddlehurst" title="Maintenance">🚧</a> <a href="#mentoring-MatthewMiddlehurst" title="Mentoring">🧑‍🏫</a> <a href="#promotion-MatthewMiddlehurst" title="Promotion">📣</a> <a href="#question-MatthewMiddlehurst" title="Answering Questions">💬</a> <a href="#research-MatthewMiddlehurst" title="Research">🔬</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3AMatthewMiddlehurst" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=MatthewMiddlehurst" title="Tests">⚠️</a> <a href="#tutorial-MatthewMiddlehurst" title="Tutorials">✅</a> <a href="#talk-MatthewMiddlehurst" title="Talks">📢</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/solen0id"><img src="https://avatars.githubusercontent.com/u/20767606?v=4?s=80" width="80px;" alt="Max Patzelt"/><br /><sub><b>Max Patzelt</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=solen0id" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Hephaest"><img src="https://avatars2.githubusercontent.com/u/37981444?v=4?s=80" width="80px;" alt="Miao Cai"/><br /><sub><b>Miao Cai</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AHephaest" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Hephaest" title="Code">💻</a></td>
@@ -191,9 +192,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="michaelfeil.eu"><img src="https://avatars.githubusercontent.com/u/63565275?v=4?s=80" width="80px;" alt="Michael Feil"/><br /><sub><b>Michael Feil</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=michaelfeil" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=michaelfeil" title="Tests">⚠️</a> <a href="#ideas-michaelfeil" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/MichalChromcak"><img src="https://avatars1.githubusercontent.com/u/12393430?v=4?s=80" width="80px;" alt="Michal Chromcak"/><br /><sub><b>Michal Chromcak</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=MichalChromcak" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=MichalChromcak" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=MichalChromcak" title="Tests">⚠️</a> <a href="#tutorial-MichalChromcak" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/miraep8"><img src="https://avatars.githubusercontent.com/u/10511777?s=400&u=10a774fd4be767fa3b23a82a98bbfe102c17f0f3&v=4?s=80" width="80px;" alt="Mirae Parker"/><br /><sub><b>Mirae Parker</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=miraep8" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=miraep8" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://mo-saif.github.io/"><img src="https://avatars0.githubusercontent.com/u/27867617?v=4?s=80" width="80px;" alt="Mohammed Saif Kazamel"/><br /><sub><b>Mohammed Saif Kazamel</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AMo-Saif" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://mo-saif.github.io/"><img src="https://avatars0.githubusercontent.com/u/27867617?v=4?s=80" width="80px;" alt="Mohammed Saif Kazamel"/><br /><sub><b>Mohammed Saif Kazamel</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AMo-Saif" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://moradisten.github.io/"><img src="https://avatars.githubusercontent.com/u/29915156?v=4?s=80" width="80px;" alt="Morad :)"/><br /><sub><b>Morad :)</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=moradabaz" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=moradabaz" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=moradabaz" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Multivin12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=80" width="80px;" alt="Multivin12"/><br /><sub><b>Multivin12</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Multivin12" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Multivin12" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/marcio55afr"><img src="https://avatars.githubusercontent.com/u/42646282?v=4?s=80" width="80px;" alt="Márcio A. Freitas Jr"/><br /><sub><b>Márcio A. Freitas Jr</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=marcio55afr" title="Documentation">📖</a></td>
@@ -201,9 +202,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/ngupta23"><img src="https://avatars0.githubusercontent.com/u/33585645?v=4?s=80" width="80px;" alt="Nikhil Gupta"/><br /><sub><b>Nikhil Gupta</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ngupta23" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Angupta23" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=ngupta23" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/nshahpazov/"><img src="https://avatars.githubusercontent.com/nshahpazov?s=80" width="80px;" alt="Nikola Shahpazov"/><br /><sub><b>Nikola Shahpazov</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=nshahpazov" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/nilesh05apr"><img src="https://avatars.githubusercontent.com/u/65773314?v=4?s=80" width="80px;" alt="Nilesh Kumar"/><br /><sub><b>Nilesh Kumar</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=nilesh05apr" title="Code">💻</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/nimanzik"><img src="https://avatars.githubusercontent.com/u/4640548?v=4?s=80" width="80px;" alt="Nima Nooshiri"/><br /><sub><b>Nima Nooshiri</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=nimanzik" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/nimanzik"><img src="https://avatars.githubusercontent.com/u/4640548?v=4?s=80" width="80px;" alt="Nima Nooshiri"/><br /><sub><b>Nima Nooshiri</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=nimanzik" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/ninfueng"><img src="https://avatars2.githubusercontent.com/u/28499769?v=4?s=80" width="80px;" alt="Ninnart Fuengfusin"/><br /><sub><b>Ninnart Fuengfusin</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ninfueng" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/NoaBenAmi"><img src="https://avatars.githubusercontent.com/u/37590002?v=4?s=80" width="80px;" alt="Noa Ben Ami"/><br /><sub><b>Noa Ben Ami</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=NoaBenAmi" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=NoaBenAmi" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=NoaBenAmi" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/shchur"><img src="https://avatars.githubusercontent.com/u/6944857?v=4?s=80" width="80px;" alt="Oleksandr Shchur"/><br /><sub><b>Oleksandr Shchur</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Ashchur" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=shchur" title="Code">💻</a></td>
@@ -211,9 +212,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/olivermatthews"><img src="https://avatars.githubusercontent.com/u/31141490?v=4?s=80" width="80px;" alt="Oliver Matthews"/><br /><sub><b>Oliver Matthews</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=OliverMatthews" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/prockenschaub"><img src="https://avatars0.githubusercontent.com/u/15381732?v=4?s=80" width="80px;" alt="Patrick Rockenschaub"/><br /><sub><b>Patrick Rockenschaub</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=prockenschaub" title="Code">💻</a> <a href="#design-prockenschaub" title="Design">🎨</a> <a href="#ideas-prockenschaub" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=prockenschaub" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="http://www2.informatik.hu-berlin.de/~schaefpa/"><img src="https://avatars0.githubusercontent.com/u/7783034?v=4?s=80" width="80px;" alt="Patrick Schäfer"/><br /><sub><b>Patrick Schäfer</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=patrickzib" title="Code">💻</a> <a href="#tutorial-patrickzib" title="Tutorials">✅</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://ber.gp"><img src="https://avatars1.githubusercontent.com/u/9824244?v=4?s=80" width="80px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Pangoraw" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://ber.gp"><img src="https://avatars1.githubusercontent.com/u/9824244?v=4?s=80" width="80px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Pangoraw" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/PaulRabich"><img src="https://avatars.githubusercontent.com/u/78356939?v=4?s=80" width="80px;" alt="Paul Rabich"/><br /><sub><b>Paul Rabich</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=PaulRabich" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/paulyim97/"><img src="https://avatars.githubusercontent.com/pyyim?s=80" width="80px;" alt="Paul Yim"/><br /><sub><b>Paul Yim</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=pyyim" title="Code">💻</a> <a href="#example-pyyim" title="Examples">💡</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=pyyim" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.youtube.com/channel/UCLnEr7V_5BANojPKUjCjb4g"><img src="https://avatars.githubusercontent.com/u/25594870?v=4?s=80" width="80px;" alt="Philip"/><br /><sub><b>Philip</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=phershbe" title="Documentation">📖</a></td>
@@ -221,9 +222,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/wenig"><img src="https://avatars.githubusercontent.com/u/6967289?v=4?s=80" width="80px;" alt="Phillip Wenig"/><br /><sub><b>Phillip Wenig</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=wenig" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Piyush1729"><img src="https://avatars2.githubusercontent.com/u/64950012?v=4?s=80" width="80px;" alt="Piyush Gade"/><br /><sub><b>Piyush Gade</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Piyush1729" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3APiyush1729" title="Reviewed Pull Requests">👀</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/pul95"><img src="https://avatars.githubusercontent.com/pul95?s=80" width="80px;" alt="Pulkit Verma"/><br /><sub><b>Pulkit Verma</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=pul95" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/Quaterion"><img src="https://avatars2.githubusercontent.com/u/23200273?v=4?s=80" width="80px;" alt="Quaterion"/><br /><sub><b>Quaterion</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AQuaterion" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/Quaterion"><img src="https://avatars2.githubusercontent.com/u/23200273?v=4?s=80" width="80px;" alt="Quaterion"/><br /><sub><b>Quaterion</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AQuaterion" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/RafaAyGar"><img src="https://avatars.githubusercontent.com/u/37343008?s=400&u=bbd9c00c6045adf11cd9376e6db1d959565c27c6&v=4?s=80" width="80px;" alt="Rafael Ayllón-Gavilán"/><br /><sub><b>Rafael Ayllón-Gavilán</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=RafaAyGar" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/rakshitha123"><img src="https://avatars.githubusercontent.com/u/7654679?v=4?s=80" width="80px;" alt="Rakshitha Godahewa"/><br /><sub><b>Rakshitha Godahewa</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=rakshitha123" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=rakshitha123" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/RavenRudi"><img src="https://avatars.githubusercontent.com/u/46402968?v=4?s=80" width="80px;" alt="RavenRudi"/><br /><sub><b>RavenRudi</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=RavenRudi" 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="12.5%"><a href="https://github.com/wolph"><img src="https://avatars.githubusercontent.com/u/270571?v=4?s=80" width="80px;" alt="Rick van Hattem"/><br /><sub><b>Rick van Hattem</b></sub></a><br /><a href="#infra-wolph" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Ris-Bali"><img src="https://avatars.githubusercontent.com/u/81592570?v=4?s=80" width="80px;" alt="Rishabh Bali"/><br /><sub><b>Rishabh Bali</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Ris-Bali" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/RishavKumarSinha"><img src="https://avatars.githubusercontent.com/u/136772607?s=400&v=4?s=80" width="80px;" alt="Rishav Kumar Sinha"/><br /><sub><b>Rishav Kumar Sinha</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=RishavKumarSinha" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/RishiKumarRay"><img src="https://avatars.githubusercontent.com/u/87641376?v=4?s=80" width="80px;" 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>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/RishiKumarRay"><img src="https://avatars.githubusercontent.com/u/87641376?v=4?s=80" width="80px;" 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="12.5%"><a href="https://github.com/Riyabelle25"><img src="https://avatars.githubusercontent.com/u/55790848?v=4?s=80" width="80px;" alt="Riya Elizabeth John"/><br /><sub><b>Riya Elizabeth John</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Riyabelle25" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Riyabelle25" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=Riyabelle25" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/ronnie-llamado"><img src="https://avatars.githubusercontent.com/ronnie-llamado?s=80" width="80px;" alt="Ronnie Llamado"/><br /><sub><b>Ronnie Llamado</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ronnie-llamado" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/rnkuhns"><img src="https://avatars0.githubusercontent.com/u/26907244?v=4?s=80" width="80px;" alt="Ryan Kuhns"/><br /><sub><b>Ryan Kuhns</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=RNKuhns" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/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-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3ARNKuhns" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=RNKuhns" title="Tests">⚠️</a></td>
@@ -241,9 +242,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://sajay.online"><img src="https://avatars2.githubusercontent.com/u/25329624?v=4?s=80" width="80px;" alt="Sajaysurya Ganesh"/><br /><sub><b>Sajaysurya Ganesh</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=sajaysurya" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/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-toolkit/aeon/commits?author=sajaysurya" title="Tests">⚠️</a> <a href="#tutorial-sajaysurya" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Saransh-cpp"><img src="https://avatars.githubusercontent.com/u/74055102?v=4?s=80" width="80px;" alt="Saransh Chopra"/><br /><sub><b>Saransh Chopra</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Saransh-cpp" title="Documentation">📖</a> <a href="#infra-Saransh-cpp" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/satya-pattnaik-77a430144/"><img src="https://avatars.githubusercontent.com/u/22102468?v=4?s=80" width="80px;" alt="Satya Prakash Pattnaik"/><br /><sub><b>Satya Prakash Pattnaik</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=satya-pattnaik" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/dasgupsa"><img src="https://avatars2.githubusercontent.com/u/10398956?v=4?s=80" width="80px;" alt="Saurabh Dasgupta"/><br /><sub><b>Saurabh Dasgupta</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=dasgupsa" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/dasgupsa"><img src="https://avatars2.githubusercontent.com/u/10398956?v=4?s=80" width="80px;" alt="Saurabh Dasgupta"/><br /><sub><b>Saurabh Dasgupta</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=dasgupsa" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/SebasKoel"><img src="https://avatars3.githubusercontent.com/u/66252156?v=4?s=80" width="80px;" alt="Sebastiaan Koel"/><br /><sub><b>Sebastiaan Koel</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=SebasKoel" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=SebasKoel" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/shagn"><img src="https://avatars.githubusercontent.com/u/16029092?v=4?s=80" width="80px;" alt="Sebastian Hagn"/><br /><sub><b>Sebastian Hagn</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=shagn" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/codelionx"><img src="https://avatars.githubusercontent.com/u/10573700?v=4?s=80" width="80px;" alt="Sebastian Schmidl"/><br /><sub><b>Sebastian Schmidl</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Acodelionx" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=codelionx" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=codelionx" title="Documentation">📖</a> <a href="#research-codelionx" title="Research">🔬</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=codelionx" title="Tests">⚠️</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Acodelionx" title="Reviewed Pull Requests">👀</a> <a href="#data-codelionx" title="Data">🔣</a></td>
@@ -251,9 +252,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/AurumnPegasus"><img src="https://avatars.githubusercontent.com/u/54315149?v=4?s=80" width="80px;" alt="Shivansh Subramanian"/><br /><sub><b>Shivansh Subramanian</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=AurumnPegasus" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=AurumnPegasus" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/solomon-botchway-a1383821b/"><img src="https://avatars.githubusercontent.com/u/62394255?v=4?s=80" width="80px;" 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="12.5%"><a href="https://github.com/khrapovs"><img src="https://avatars.githubusercontent.com/u/3774663?v=4?s=80" width="80px;" alt="Stanislav Khrapov"/><br /><sub><b>Stanislav Khrapov</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=khrapovs" title="Code">💻</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/steenrotsman"><img src="https://avatars.githubusercontent.com/u/78110080?s=400&v=4?s=80" width="80px;" alt="Stijn Rotman"/><br /><sub><b>Stijn Rotman</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=steenrotsman" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/steenrotsman"><img src="https://avatars.githubusercontent.com/u/78110080?s=400&v=4?s=80" width="80px;" alt="Stijn Rotman"/><br /><sub><b>Stijn Rotman</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=steenrotsman" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/SveaMeyer13"><img src="https://avatars.githubusercontent.com/u/46671894?v=4?s=80" width="80px;" alt="Svea Marie Meyer"/><br /><sub><b>Svea Marie Meyer</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=SveaMeyer13" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=SveaMeyer13" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/sylvaincom"><img src="https://avatars.githubusercontent.com/u/48064216?v=4?s=80" width="80px;" alt="Sylvain Combettes"/><br /><sub><b>Sylvain Combettes</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=sylvaincom" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Asylvaincom" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/TNTran92"><img src="https://avatars.githubusercontent.com/u/55965636?v=4?s=80" width="80px;" alt="TNTran92"/><br /><sub><b>TNTran92</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=TNTran92" title="Code">💻</a></td>
@@ -261,9 +262,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/lnthach"><img src="https://avatars0.githubusercontent.com/u/7788363?v=4?s=80" width="80px;" alt="Thach Le Nguyen"/><br /><sub><b>Thach Le Nguyen</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=lnthach" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=lnthach" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/mathco-wf"><img src="https://avatars.githubusercontent.com/mathco-wf?s=80" width="80px;" alt="TheMathcompay Widget Factory Team"/><br /><sub><b>TheMathcompay Widget Factory Team</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=mathco-wf" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/tombh"><img src="https://avatars.githubusercontent.com/u/160835?s=80&v=4?s=80" width="80px;" alt="Thomas Buckley-Houston"/><br /><sub><b>Thomas Buckley-Houston</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Atombh" title="Bug reports">🐛</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/xxl4tomxu98"><img src="https://avatars.githubusercontent.com/u/62292177?s=40&v=4?s=80" width="80px;" alt="Tom Xu"/><br /><sub><b>Tom Xu</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=xxl4tomxu98" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=xxl4tomxu98" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/xxl4tomxu98"><img src="https://avatars.githubusercontent.com/u/62292177?s=40&v=4?s=80" width="80px;" alt="Tom Xu"/><br /><sub><b>Tom Xu</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=xxl4tomxu98" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=xxl4tomxu98" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/tch"><img src="https://avatars3.githubusercontent.com/u/184076?v=4?s=80" width="80px;" alt="Tomasz Chodakowski"/><br /><sub><b>Tomasz Chodakowski</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=tch" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=tch" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Atch" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars1.githubusercontent.com/u/9594042?v=4?s=80" width="80px;" alt="Tony Bagnall"/><br /><sub><b>Tony Bagnall</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=TonyBagnall" title="Code">💻</a> <a href="#business-TonyBagnall" title="Business development">💼</a> <a href="https://github.com/aeon-toolkit/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-toolkit/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="12.5%"><a href="https://github.com/tvilight4"><img src="https://avatars.githubusercontent.com/u/122543856?v=4?s=80" width="80px;" alt="Tvisha Vedant"/><br /><sub><b>Tvisha Vedant</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=tvilight4" title="Code">💻</a></td>
@@ -271,9 +272,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/utsavcoding"><img src="https://avatars3.githubusercontent.com/u/55446385?v=4?s=80" width="80px;" alt="Utsav Kumar Tiwari"/><br /><sub><b>Utsav Kumar Tiwari</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=utsavcoding" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=utsavcoding" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/Vedant222"><img src="https://avatars.githubusercontent.com/u/70121054?v=4?s=80" width="80px;" alt="Vedant"/><br /><sub><b>Vedant</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=Vedant222" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/victordremov"><img src="https://avatars.githubusercontent.com/u/32140716?s=80" width="80px;" alt="Viktor Dremov"/><br /><sub><b>Viktor Dremov</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=victordremov" title="Code">💻</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/ViktorKaz"><img src="https://avatars0.githubusercontent.com/u/33499138?v=4?s=80" width="80px;" alt="ViktorKaz"/><br /><sub><b>ViktorKaz</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ViktorKaz" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=ViktorKaz" title="Documentation">📖</a> <a href="#design-ViktorKaz" title="Design">🎨</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/ViktorKaz"><img src="https://avatars0.githubusercontent.com/u/33499138?v=4?s=80" width="80px;" alt="ViktorKaz"/><br /><sub><b>ViktorKaz</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ViktorKaz" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=ViktorKaz" title="Documentation">📖</a> <a href="#design-ViktorKaz" title="Design">🎨</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/VyomkeshVyas"><img src="https://avatars.githubusercontent.com/u/110027694?v=4?s=80" width="80px;" alt="Vyomkesh Vyas"/><br /><sub><b>Vyomkesh Vyas</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=VyomkeshVyas" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=VyomkeshVyas" title="Documentation">📖</a> <a href="#example-VyomkeshVyas" title="Examples">💡</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=VyomkeshVyas" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/wayneadams"><img src="https://avatars.githubusercontent.com/u/15034841?v=4?s=80" width="80px;" alt="Wayne Adams"/><br /><sub><b>Wayne Adams</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=wayneadams" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://www.linkedin.com/in/templierw/"><img src="https://github.com/templierw.png?s=80" width="80px;" alt="William Templier"/><br /><sub><b>William Templier</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=templierw" title="Documentation">📖</a></td>
@@ -281,9 +282,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/magittan"><img src="https://avatars0.githubusercontent.com/u/14024202?v=4?s=80" width="80px;" alt="William Zheng"/><br /><sub><b>William Zheng</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=magittan" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=magittan" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/yairbeer"><img src="https://avatars.githubusercontent.com/yairbeer?s=80" width="80px;" alt="Yair Beer"/><br /><sub><b>Yair Beer</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=yairbeer" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/yashlamba"><img src="https://avatars.githubusercontent.com/u/44164398?v=4?s=80" width="80px;" alt="Yash Lamba"/><br /><sub><b>Yash Lamba</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=yashlamba" title="Code">💻</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/xuyxu"><img src="https://avatars2.githubusercontent.com/u/22359569?v=4?s=80" width="80px;" alt="Yi-Xuan Xu"/><br /><sub><b>Yi-Xuan Xu</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=xuyxu" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=xuyxu" title="Tests">⚠️</a> <a href="#maintenance-xuyxu" title="Maintenance">🚧</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=xuyxu" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/xuyxu"><img src="https://avatars2.githubusercontent.com/u/22359569?v=4?s=80" width="80px;" alt="Yi-Xuan Xu"/><br /><sub><b>Yi-Xuan Xu</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=xuyxu" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=xuyxu" title="Tests">⚠️</a> <a href="#maintenance-xuyxu" title="Maintenance">🚧</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=xuyxu" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/ZiyaoWei"><img src="https://avatars.githubusercontent.com/u/940823?v=4?s=80" width="80px;" alt="Ziyao Wei"/><br /><sub><b>Ziyao Wei</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=ZiyaoWei" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/aa25desh"><img src="https://avatars1.githubusercontent.com/u/29518290?v=4?s=80" width="80px;" alt="aa25desh"/><br /><sub><b>aa25desh</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=aa25desh" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Aaa25desh" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/abandus"><img src="https://avatars2.githubusercontent.com/u/46486474?v=4?s=80" width="80px;" alt="abandus"/><br /><sub><b>abandus</b></sub></a><br /><a href="#ideas-abandus" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=abandus" title="Code">💻</a></td>
@@ -291,9 +292,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/alexbanwell1"><img src="https://avatars.githubusercontent.com/u/31886108?v=4?s=80" width="80px;" alt="alexbanwell1"/><br /><sub><b>alexbanwell1</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=alexbanwell1" title="Code">💻</a> <a href="#design-alexbanwell1" title="Design">🎨</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=alexbanwell1" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/bethrice44"><img src="https://avatars.githubusercontent.com/u/11226988?v=4?s=80" width="80px;" alt="bethrice44"/><br /><sub><b>bethrice44</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Abethrice44" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=bethrice44" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Abethrice44" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=bethrice44" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/big-o"><img src="https://avatars1.githubusercontent.com/u/1134151?v=4?s=80" width="80px;" alt="big-o"/><br /><sub><b>big-o</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=big-o" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/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-toolkit/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="12.5%"><a href="https://github.com/bobbys-dev"><img src="https://avatars.githubusercontent.com/bobbys-dev?s=80" width="80px;" alt="bobbys"/><br /><sub><b>bobbys</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=bobbys-dev" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/bobbys-dev"><img src="https://avatars.githubusercontent.com/bobbys-dev?s=80" width="80px;" alt="bobbys"/><br /><sub><b>bobbys</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=bobbys-dev" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/brettkoonce"><img src="https://avatars2.githubusercontent.com/u/11281814?v=4?s=80" width="80px;" alt="brett koonce"/><br /><sub><b>brett koonce</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=brettkoonce" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/btrtts"><img src="https://avatars3.githubusercontent.com/u/66252156?v=4?s=80" width="80px;" alt="btrtts"/><br /><sub><b>btrtts</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=btrtts" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/chizzi25"><img src="https://avatars3.githubusercontent.com/u/67911243?v=4?s=80" width="80px;" alt="chizzi25"/><br /><sub><b>chizzi25</b></sub></a><br /><a href="#blog-chizzi25" title="Blogposts">📝</a></td>
@@ -301,9 +302,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/danbartl"><img src="https://avatars.githubusercontent.com/u/19947407?v=4?s=80" width="80px;" alt="danbartl"/><br /><sub><b>danbartl</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Adanbartl" title="Bug reports">🐛</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=danbartl" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/pulls?q=is%3Apr+reviewed-by%3Adanbartl" title="Reviewed Pull Requests">👀</a> <a href="#talk-danbartl" title="Talks">📢</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=danbartl" title="Tests">⚠️</a> <a href="#tutorial-danbartl" title="Tutorials">✅</a> <a href="#video-danbartl" title="Videos">📹</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/hamzahiqb"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=80" width="80px;" 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="12.5%"><a href="https://github.com/hiqbal2"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=80" width="80px;" alt="hiqbal2"/><br /><sub><b>hiqbal2</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=hiqbal2" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/jesellier"><img src="https://avatars0.githubusercontent.com/u/51952076?v=4?s=80" width="80px;" alt="jesellier"/><br /><sub><b>jesellier</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jesellier" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/jesellier"><img src="https://avatars0.githubusercontent.com/u/51952076?v=4?s=80" width="80px;" alt="jesellier"/><br /><sub><b>jesellier</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jesellier" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/jschemm"><img src="https://avatars.githubusercontent.com/u/81151346?v=4?s=80" width="80px;" alt="jschemm"/><br /><sub><b>jschemm</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=jschemm" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/julu98"><img src="https://avatars.githubusercontent.com/u/133243896?v=4?s=80" width="80px;" alt="julu98"/><br /><sub><b>julu98</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Ajulu98" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/kkoziara"><img src="https://avatars1.githubusercontent.com/u/4346849?v=4?s=80" width="80px;" alt="kkoziara"/><br /><sub><b>kkoziara</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=kkoziara" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Akkoziara" title="Bug reports">🐛</a></td>
@@ -311,9 +312,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/neuron283"><img src="https://avatars.githubusercontent.com/u/177816976?v=4?s=80" width="80px;" alt="neuron283"/><br /><sub><b>neuron283</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=neuron283" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/nileenagp"><img src="https://avatars.githubusercontent.com/u/48993630?v=4?s=80" width="80px;" alt="nileenagp"/><br /><sub><b>nileenagp</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=nileenagp" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/oleskiewicz"><img src="https://avatars1.githubusercontent.com/u/5682158?v=4?s=80" width="80px;" alt="oleskiewicz"/><br /><sub><b>oleskiewicz</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=oleskiewicz" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=oleskiewicz" title="Documentation">📖</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=oleskiewicz" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/pabworks"><img src="https://avatars.githubusercontent.com/u/32725127?v=4?s=80" width="80px;" alt="pabworks"/><br /><sub><b>pabworks</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=pabworks" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=pabworks" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/pabworks"><img src="https://avatars.githubusercontent.com/u/32725127?v=4?s=80" width="80px;" alt="pabworks"/><br /><sub><b>pabworks</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=pabworks" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=pabworks" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/xloem"><img src="https://avatars.githubusercontent.com/u/279585?v=4?s=80" width="80px;" alt="patiently pending world peace"/><br /><sub><b>patiently pending world peace</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=xloem" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/raishubham1"><img src="https://avatars3.githubusercontent.com/u/29356417?v=4?s=80" width="80px;" alt="raishubham1"/><br /><sub><b>raishubham1</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=raishubham1" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/simone-pignotti"><img src="https://avatars1.githubusercontent.com/u/44410066?v=4?s=80" width="80px;" alt="simone-pignotti"/><br /><sub><b>simone-pignotti</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=simone-pignotti" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3Asimone-pignotti" title="Bug reports">🐛</a></td>
@@ -321,9 +322,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/sri1419"><img src="https://avatars2.githubusercontent.com/u/65078278?v=4?s=80" width="80px;" alt="sri1419"/><br /><sub><b>sri1419</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=sri1419" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/tensorflow-as-tf"><img src="https://avatars.githubusercontent.com/u/51345718?v=4?s=80" width="80px;" alt="tensorflow-as-tf"/><br /><sub><b>tensorflow-as-tf</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=tensorflow-as-tf" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/vNtzYy"><img src="https://avatars.githubusercontent.com/u/111287448?v=4?s=80" width="80px;" alt="vNtzYy"/><br /><sub><b>vNtzYy</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/issues?q=author%3AvNtzYy" title="Bug reports">🐛</a></td>
-      <td align="center" valign="top" width="12.5%"><a href="https://github.com/vedazeren"><img src="https://avatars3.githubusercontent.com/u/63582874?v=4?s=80" width="80px;" alt="vedazeren"/><br /><sub><b>vedazeren</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=vedazeren" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=vedazeren" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="12.5%"><a href="https://github.com/vedazeren"><img src="https://avatars3.githubusercontent.com/u/63582874?v=4?s=80" width="80px;" alt="vedazeren"/><br /><sub><b>vedazeren</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=vedazeren" title="Code">💻</a> <a href="https://github.com/aeon-toolkit/aeon/commits?author=vedazeren" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/vincent-nich12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=80" width="80px;" alt="vincent-nich12"/><br /><sub><b>vincent-nich12</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=vincent-nich12" title="Code">💻</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/vollmersj"><img src="https://avatars2.githubusercontent.com/u/12613127?v=4?s=80" width="80px;" alt="vollmersj"/><br /><sub><b>vollmersj</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=vollmersj" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="12.5%"><a href="https://github.com/xiaobenbenecho"><img src="https://avatars.githubusercontent.com/u/17461849?v=4?s=80" width="80px;" alt="xiaobenbenecho"/><br /><sub><b>xiaobenbenecho</b></sub></a><br /><a href="https://github.com/aeon-toolkit/aeon/commits?author=xiaobenbenecho" title="Code">💻</a></td>
diff --git a/aeon/classification/distance_based/_proximity_forest.py b/aeon/classification/distance_based/_proximity_forest.py
index 44871a25..40fca362 100644
--- a/aeon/classification/distance_based/_proximity_forest.py
+++ b/aeon/classification/distance_based/_proximity_forest.py
@@ -44,7 +44,7 @@ class ProximityForest(BaseClassifier):
     n_jobs : int, default = 1
         The number of parallel jobs to run for neighbors search.
         ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
-        ``-1`` means using all processors. See :term:`Glossary <n_jobs>`
+        ``-1`` means using all processors.
         for more details. Parameter for compatibility purposes, still unimplemented.
     parallel_backend : str, ParallelBackendBase instance or None, default=None
         Specify the parallelisation backend implementation in joblib, if None a 'prefer'
diff --git a/aeon/classification/distance_based/_proximity_tree.py b/aeon/classification/distance_based/_proximity_tree.py
index f2c3cd36..e3db9086 100644
--- a/aeon/classification/distance_based/_proximity_tree.py
+++ b/aeon/classification/distance_based/_proximity_tree.py
@@ -235,7 +235,7 @@ class ProximityTree(BaseClassifier):
                         X[j],
                         splitter[0][labels[k]],
                         metric=measure,
-                        kwargs=splitter[1][measure],
+                        **splitter[1][measure],
                     )
                     if dist < min_dist:
                         min_dist = dist
@@ -321,7 +321,7 @@ class ProximityTree(BaseClassifier):
                     X[i],
                     splitter[0][labels[j]],
                     metric=measure,
-                    kwargs=splitter[1][measure],
+                    **splitter[1][measure],
                 )
                 if dist < min_dist:
                     min_dist = dist
@@ -405,7 +405,7 @@ class ProximityTree(BaseClassifier):
                     x,
                     treenode.splitter[0][branches[i]],
                     metric=measure,
-                    kwargs=treenode.splitter[1][measure],
+                    **treenode.splitter[1][measure],
                 )
                 if dist < min_dist:
                     min_dist = dist
diff --git a/aeon/classification/distance_based/_time_series_neighbors.py b/aeon/classification/distance_based/_time_series_neighbors.py
index d0f7144e..40d65f9a 100644
--- a/aeon/classification/distance_based/_time_series_neighbors.py
+++ b/aeon/classification/distance_based/_time_series_neighbors.py
@@ -49,7 +49,7 @@ class KNeighborsTimeSeriesClassifier(BaseClassifier):
     n_jobs : int, default = None
         The number of parallel jobs to run for neighbors search.
         ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
-        ``-1`` means using all processors. See :term:`Glossary <n_jobs>`
+        ``-1`` means using all processors.
         for more details. Parameter for compatibility purposes, still unimplemented.
 
     Examples
diff --git a/aeon/distances/__init__.py b/aeon/distances/__init__.py
index 07f57b1a..e1d3205e 100644
--- a/aeon/distances/__init__.py
+++ b/aeon/distances/__init__.py
@@ -65,12 +65,12 @@ __all__ = [
     "shape_dtw_pairwise_distance",
     "sbd_distance",
     "sbd_pairwise_distance",
-    "mpdist",
-    "mpdist_pairwise_distance",
-    "paa_sax_mindist",
-    "sax_mindist",
-    "sfa_mindist",
-    "dft_sfa_mindist",
+    "mp_distance",
+    "mp_pairwise_distance",
+    "mindist_paa_sax_distance",
+    "mindist_sax_distance",
+    "mindist_sfa_distance",
+    "mindist_dft_sfa_distance",
     "shift_scale_invariant_distance",
     "shift_scale_invariant_pairwise_distance",
     "shift_scale_invariant_best_shift",
@@ -80,7 +80,6 @@ __all__ = [
     "soft_dtw_cost_matrix",
 ]
 
-from aeon.distances._dft_sfa_mindist import dft_sfa_mindist
 from aeon.distances._distance import (
     alignment_path,
     cost_matrix,
@@ -92,20 +91,13 @@ from aeon.distances._distance import (
     get_pairwise_distance_function,
     pairwise_distance,
 )
-from aeon.distances._euclidean import euclidean_distance, euclidean_pairwise_distance
-from aeon.distances._manhattan import manhattan_distance, manhattan_pairwise_distance
-from aeon.distances._minkowski import minkowski_distance, minkowski_pairwise_distance
-from aeon.distances._mpdist import mpdist, mpdist_pairwise_distance
-from aeon.distances._paa_sax_mindist import paa_sax_mindist
-from aeon.distances._sax_mindist import sax_mindist
+from aeon.distances._mpdist import mp_distance, mp_pairwise_distance
 from aeon.distances._sbd import sbd_distance, sbd_pairwise_distance
-from aeon.distances._sfa_mindist import sfa_mindist
 from aeon.distances._shift_scale_invariant import (
     shift_scale_invariant_best_shift,
     shift_scale_invariant_distance,
     shift_scale_invariant_pairwise_distance,
 )
-from aeon.distances._squared import squared_distance, squared_pairwise_distance
 from aeon.distances.elastic import (
     adtw_alignment_path,
     adtw_cost_matrix,
@@ -157,3 +149,23 @@ from aeon.distances.elastic import (
     wdtw_distance,
     wdtw_pairwise_distance,
 )
+from aeon.distances.mindist._dft_sfa import mindist_dft_sfa_distance
+from aeon.distances.mindist._paa_sax import mindist_paa_sax_distance
+from aeon.distances.mindist._sax import mindist_sax_distance
+from aeon.distances.mindist._sfa import mindist_sfa_distance
+from aeon.distances.pointwise._euclidean import (
+    euclidean_distance,
+    euclidean_pairwise_distance,
+)
+from aeon.distances.pointwise._manhattan import (
+    manhattan_distance,
+    manhattan_pairwise_distance,
+)
+from aeon.distances.pointwise._minkowski import (
+    minkowski_distance,
+    minkowski_pairwise_distance,
+)
+from aeon.distances.pointwise._squared import (
+    squared_distance,
+    squared_pairwise_distance,
+)
diff --git a/aeon/distances/_distance.py b/aeon/distances/_distance.py
index ea535af9..6b3c9d91 100644
--- a/aeon/distances/_distance.py
+++ b/aeon/distances/_distance.py
@@ -6,16 +6,12 @@ from typing import Any, Callable, Optional, TypedDict, Union
 import numpy as np
 from typing_extensions import Unpack
 
-from aeon.distances._euclidean import euclidean_distance, euclidean_pairwise_distance
-from aeon.distances._manhattan import manhattan_distance, manhattan_pairwise_distance
-from aeon.distances._minkowski import minkowski_distance, minkowski_pairwise_distance
-from aeon.distances._mpdist import mpdist
+from aeon.distances._mpdist import mp_distance, mp_pairwise_distance
 from aeon.distances._sbd import sbd_distance, sbd_pairwise_distance
 from aeon.distances._shift_scale_invariant import (
     shift_scale_invariant_distance,
     shift_scale_invariant_pairwise_distance,
 )
-from aeon.distances._squared import squared_distance, squared_pairwise_distance
 from aeon.distances.elastic import (
     adtw_alignment_path,
     adtw_cost_matrix,
@@ -66,6 +62,26 @@ from aeon.distances.elastic import (
     wdtw_distance,
     wdtw_pairwise_distance,
 )
+from aeon.distances.mindist import (
+    mindist_dft_sfa_distance,
+    mindist_dft_sfa_pairwise_distance,
+    mindist_paa_sax_distance,
+    mindist_paa_sax_pairwise_distance,
+    mindist_sax_distance,
+    mindist_sax_pairwise_distance,
+    mindist_sfa_distance,
+    mindist_sfa_pairwise_distance,
+)
+from aeon.distances.pointwise import (
+    euclidean_distance,
+    euclidean_pairwise_distance,
+    manhattan_distance,
+    manhattan_pairwise_distance,
+    minkowski_distance,
+    minkowski_pairwise_distance,
+    squared_distance,
+    squared_pairwise_distance,
+)
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
@@ -144,116 +160,11 @@ def distance(
     >>> distance(x, y, metric="dtw")
     768.0
     """
-    if metric == "squared":
-        return squared_distance(x, y)
-    elif metric == "euclidean":
-        return euclidean_distance(x, y)
-    elif metric == "manhattan":
-        return manhattan_distance(x, y)
-    elif metric == "minkowski":
-        return minkowski_distance(x, y, kwargs.get("p", 2.0), kwargs.get("w", None))
-    elif metric == "dtw":
-        return dtw_distance(x, y, kwargs.get("window"), kwargs.get("itakura_max_slope"))
-    elif metric == "ddtw":
-        return ddtw_distance(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "wdtw":
-        return wdtw_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "shape_dtw":
-        return shape_dtw_distance(
-            x,
-            y,
-            window=kwargs.get("window"),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            descriptor=kwargs.get("descriptor", "identity"),
-            reach=kwargs.get("reach", 30),
-            transformation_precomputed=kwargs.get("transformation_precomputed", False),
-            transformed_x=kwargs.get("transformed_x", None),
-            transformed_y=kwargs.get("transformed_y", None),
-        )
-    elif metric == "wddtw":
-        return wddtw_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "lcss":
-        return lcss_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "erp":
-        return erp_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.0),
-            kwargs.get("g_arr", None),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "edr":
-        return edr_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon"),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "twe":
-        return twe_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("nu", 0.001),
-            kwargs.get("lmbda", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "msm":
-        return msm_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("independent", True),
-            kwargs.get("c", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "mpdist":
-        return mpdist(x, y, kwargs.get("m", 0))
-    elif metric == "adtw":
-        return adtw_distance(
-            x,
-            y,
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            window=kwargs.get("window"),
-            warp_penalty=kwargs.get("warp_penalty", 1.0),
-        )
-    elif metric == "sbd":
-        return sbd_distance(x, y, kwargs.get("standardize", True))
-    elif metric == "shift_scale":
-        return shift_scale_invariant_distance(x, y, kwargs.get("max_shift", None))
-    elif metric == "soft_dtw":
-        return soft_dtw_distance(
-            x,
-            y,
-            gamma=kwargs.get("gamma", 1.0),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            window=kwargs.get("window"),
-        )
+    if metric in DISTANCES_DICT:
+        return DISTANCES_DICT[metric]["distance"](x, y, **kwargs)
+    elif isinstance(metric, Callable):
+        return metric(x, y, **kwargs)
     else:
-        if isinstance(metric, Callable):
-            return metric(x, y, **kwargs)
         raise ValueError("Metric must be one of the supported strings or a callable")
 
 
@@ -328,124 +239,13 @@ def pairwise_distance(
            [147.],
            [ 48.]])
     """
-    if metric == "squared":
-        return squared_pairwise_distance(x, y)
-    elif metric == "euclidean":
-        return euclidean_pairwise_distance(x, y)
-    elif metric == "manhattan":
-        return manhattan_pairwise_distance(x, y)
-    elif metric == "minkowski":
-        return minkowski_pairwise_distance(
-            x, y, kwargs.get("p", 2.0), kwargs.get("w", None)
-        )
-    elif metric == "dtw":
-        return dtw_pairwise_distance(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "shape_dtw":
-        return shape_dtw_pairwise_distance(
-            x,
-            y,
-            window=kwargs.get("window"),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            descriptor=kwargs.get("descriptor", "identity"),
-            reach=kwargs.get("reach", 30),
-            transformation_precomputed=kwargs.get("transformation_precomputed", False),
-            transformed_x=kwargs.get("transformed_x", None),
-            transformed_y=kwargs.get("transformed_y", None),
-        )
-    elif metric == "ddtw":
-        return ddtw_pairwise_distance(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "wdtw":
-        return wdtw_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "wddtw":
-        return wddtw_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "lcss":
-        return lcss_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "erp":
-        return erp_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.0),
-            kwargs.get("g_arr", None),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "edr":
-        return edr_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon"),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "twe":
-        return twe_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("nu", 0.001),
-            kwargs.get("lmbda", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "msm":
-        return msm_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("independent", True),
-            kwargs.get("c", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "mpdist":
-        return _custom_func_pairwise(x, y, mpdist, **kwargs)
-    elif metric == "adtw":
-        return adtw_pairwise_distance(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("itakura_max_slope"),
-            kwargs.get("warp_penalty", 1.0),
-        )
-    elif metric == "sbd":
-        return sbd_pairwise_distance(x, y, kwargs.get("standardize", True))
-    elif metric == "shift_scale":
-        return shift_scale_invariant_pairwise_distance(
-            x, y, kwargs.get("max_shift", None)
-        )
-    elif metric == "soft_dtw":
-        return soft_dtw_pairwise_distance(
-            x,
-            y,
-            gamma=kwargs.get("gamma", 1.0),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            window=kwargs.get("window"),
-        )
+    if metric in PAIRWISE_DISTANCE:
+        return DISTANCES_DICT[metric]["pairwise_distance"](x, y, **kwargs)
+    elif isinstance(metric, Callable):
+        if y is None and not symmetric:
+            return _custom_func_pairwise(x, x, metric, **kwargs)
+        return _custom_func_pairwise(x, y, metric, **kwargs)
     else:
-        if isinstance(metric, Callable):
-            if y is None and not symmetric:
-                return _custom_func_pairwise(x, x, metric, **kwargs)
-            return _custom_func_pairwise(x, y, metric, **kwargs)
         raise ValueError("Metric must be one of the supported strings or a callable")
 
 
@@ -502,7 +302,7 @@ def _custom_from_multiple_to_multiple_distance(
 def alignment_path(
     x: np.ndarray,
     y: np.ndarray,
-    metric: str,
+    metric: Union[str, DistanceFunction, None] = None,
     **kwargs: Unpack[DistanceKwargs],
 ) -> tuple[list[tuple[int, int]], float]:
     """Compute the alignment path and distance between two time series.
@@ -513,7 +313,7 @@ def alignment_path(
         First time series.
     y : np.ndarray, of shape (m_channels, m_timepoints) or (m_timepoints,)
         Second time series.
-    metric : str
+    metric : str or Callable
         The distance metric to use.
         A list of valid distance metrics can be found in the documentation for
         :func:`aeon.distances.get_distance_function` or by calling  the function
@@ -546,101 +346,10 @@ def alignment_path(
     >>> alignment_path(x, y, metric='dtw')
     ([(0, 0), (1, 1), (2, 2), (3, 3)], 4.0)
     """
-    if metric == "dtw":
-        return dtw_alignment_path(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "shape_dtw":
-        return shape_dtw_alignment_path(
-            x,
-            y,
-            window=kwargs.get("window"),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            descriptor=kwargs.get("descriptor", "identity"),
-            reach=kwargs.get("reach", 30),
-            transformation_precomputed=kwargs.get("transformation_precomputed", False),
-            transformed_x=kwargs.get("transformed_x", None),
-            transformed_y=kwargs.get("transformed_y", None),
-        )
-    elif metric == "ddtw":
-        return ddtw_alignment_path(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "wdtw":
-        return wdtw_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "wddtw":
-        return wddtw_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "lcss":
-        return lcss_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "erp":
-        return erp_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.0),
-            kwargs.get("g_arr", None),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "edr":
-        return edr_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon"),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "twe":
-        return twe_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("nu", 0.001),
-            kwargs.get("lmbda", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "msm":
-        return msm_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("independent", True),
-            kwargs.get("c", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "adtw":
-        return adtw_alignment_path(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("itakura_max_slope"),
-            kwargs.get("warp_penalty", 1.0),
-        )
-    elif metric == "soft_dtw":
-        return soft_dtw_alignment_path(
-            x,
-            y,
-            gamma=kwargs.get("gamma", 1.0),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            window=kwargs.get("window"),
-        )
+    if metric in ALIGNMENT_PATH:
+        return DISTANCES_DICT[metric]["alignment_path"](x, y, **kwargs)
+    elif isinstance(metric, Callable):
+        return metric(x, y, **kwargs)
     else:
         raise ValueError("Metric must be one of the supported strings")
 
@@ -648,7 +357,7 @@ def alignment_path(
 def cost_matrix(
     x: np.ndarray,
     y: np.ndarray,
-    metric: str,
+    metric: Union[str, DistanceFunction, None] = None,
     **kwargs: Unpack[DistanceKwargs],
 ) -> np.ndarray:
     """Compute the alignment path and distance between two time series.
@@ -697,101 +406,10 @@ def cost_matrix(
            [204., 140.,  91.,  55.,  30.,  14.,   5.,   1.,   0.,   1.],
            [285., 204., 140.,  91.,  55.,  30.,  14.,   5.,   1.,   0.]])
     """
-    if metric == "dtw":
-        return dtw_cost_matrix(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "shape_dtw":
-        return shape_dtw_cost_matrix(
-            x,
-            y,
-            window=kwargs.get("window"),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            descriptor=kwargs.get("descriptor", "identity"),
-            reach=kwargs.get("reach", 30),
-            transformation_precomputed=kwargs.get("transformation_precomputed", False),
-            transformed_x=kwargs.get("transformed_x", None),
-            transformed_y=kwargs.get("transformed_y", None),
-        )
-    elif metric == "ddtw":
-        return ddtw_cost_matrix(
-            x, y, kwargs.get("window"), kwargs.get("itakura_max_slope")
-        )
-    elif metric == "wdtw":
-        return wdtw_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "wddtw":
-        return wddtw_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.05),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "lcss":
-        return lcss_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "erp":
-        return erp_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("g", 0.0),
-            kwargs.get("g_arr", None),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "edr":
-        return edr_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("epsilon"),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "twe":
-        return twe_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("nu", 0.001),
-            kwargs.get("lmbda", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "msm":
-        return msm_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("independent", True),
-            kwargs.get("c", 1.0),
-            kwargs.get("itakura_max_slope"),
-        )
-    elif metric == "adtw":
-        return adtw_cost_matrix(
-            x,
-            y,
-            kwargs.get("window"),
-            kwargs.get("itakura_max_slope"),
-            kwargs.get("warp_penalty", 1.0),
-        )
-    elif metric == "soft_dtw":
-        return soft_dtw_cost_matrix(
-            x,
-            y,
-            gamma=kwargs.get("gamma", 1.0),
-            itakura_max_slope=kwargs.get("itakura_max_slope"),
-            window=kwargs.get("window"),
-        )
+    if metric in COST_MATRIX:
+        return DISTANCES_DICT[metric]["cost_matrix"](x, y, **kwargs)
+    elif isinstance(metric, Callable):
+        return metric(x, y, **kwargs)
     else:
         raise ValueError("Metric must be one of the supported strings")
 
@@ -1047,7 +665,7 @@ def _resolve_key_from_distance(metric: Union[str, Callable], key: str) -> Any:
     if isinstance(metric, Callable):
         return metric
     if metric == "mpdist":
-        return mpdist
+        return mp_distance
     dist = DISTANCES_DICT.get(metric)
     if dist is None:
         raise ValueError(f"Unknown metric {metric}")
@@ -1063,6 +681,8 @@ class DistanceType(Enum):
     POINTWISE = "pointwise"
     ELASTIC = "elastic"
     CROSS_CORRELATION = "cross-correlation"
+    MIN_DISTANCE = "min-dist"
+    MATRIX_PROFILE = "matrix-profile"
 
 
 DISTANCES = [
@@ -1234,18 +854,66 @@ DISTANCES = [
         "symmetric": False,
         "unequal_support": False,
     },
+    {
+        "name": "dft_sfa",
+        "distance": mindist_dft_sfa_distance,
+        "pairwise_distance": mindist_dft_sfa_pairwise_distance,
+        "type": DistanceType.MIN_DISTANCE,
+        "symmetric": True,
+        "unequal_support": True,
+    },
+    {
+        "name": "paa_sax",
+        "distance": mindist_paa_sax_distance,
+        "pairwise_distance": mindist_paa_sax_pairwise_distance,
+        "type": DistanceType.MIN_DISTANCE,
+        "symmetric": True,
+        "unequal_support": True,
+    },
+    {
+        "name": "sax",
+        "distance": mindist_sax_distance,
+        "pairwise_distance": mindist_sax_pairwise_distance,
+        "type": DistanceType.MIN_DISTANCE,
+        "symmetric": True,
+        "unequal_support": True,
+    },
+    {
+        "name": "sfa",
+        "distance": mindist_sfa_distance,
+        "pairwise_distance": mindist_sfa_pairwise_distance,
+        "type": DistanceType.MIN_DISTANCE,
+        "symmetric": True,
+        "unequal_support": True,
+    },
+    {
+        "name": "mpdist",
+        "distance": mp_distance,
+        "pairwise_distance": mp_pairwise_distance,
+        "type": DistanceType.MATRIX_PROFILE,
+        "symmetric": True,
+        "unequal_support": True,
+    },
 ]
 
 DISTANCES_DICT = {d["name"]: d for d in DISTANCES}
+COST_MATRIX = [d["name"] for d in DISTANCES if "cost_matrix" in d]
+ALIGNMENT_PATH = [d["name"] for d in DISTANCES if "alignment_path" in d]
+PAIRWISE_DISTANCE = [d["name"] for d in DISTANCES if "pairwise_distance" in d]
 SYMMETRIC_DISTANCES = [d["name"] for d in DISTANCES if d["symmetric"]]
 ASYMMETRIC_DISTANCES = [d["name"] for d in DISTANCES if not d["symmetric"]]
+UNEQUAL_LENGTH_SUPPORT_DISTANCES = [
+    d["name"] for d in DISTANCES if d["unequal_support"]
+]
+
 ELASTIC_DISTANCES = [d["name"] for d in DISTANCES if d["type"] == DistanceType.ELASTIC]
 POINTWISE_DISTANCES = [
     d["name"] for d in DISTANCES if d["type"] == DistanceType.POINTWISE
 ]
-UNEQUAL_LENGTH_SUPPORT_DISTANCES = [
-    d["name"] for d in DISTANCES if d["unequal_support"]
+MP_DISTANCES = [
+    d["name"] for d in DISTANCES if d["type"] == DistanceType.MATRIX_PROFILE
 ]
+MIN_DISTANCES = [d["name"] for d in DISTANCES if d["type"] == DistanceType.MIN_DISTANCE]
 
 # This is a very specific list for testing where a time series of length 1 is not
 # supported
diff --git a/aeon/distances/_mpdist.py b/aeon/distances/_mpdist.py
index 18646f85..b3ca9e2b 100644
--- a/aeon/distances/_mpdist.py
+++ b/aeon/distances/_mpdist.py
@@ -10,7 +10,7 @@ from aeon.utils.conversion._convert_collection import _convert_collection_to_num
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
 
-def mpdist(x: np.ndarray, y: np.ndarray, m: int = 0) -> float:
+def mp_distance(x: np.ndarray, y: np.ndarray, m: int = 0) -> float:
     r"""Matrix Profile Distance.
 
     MPdist [2]_ is a distance measure based on the matrix profile [1]_. Given a
@@ -57,11 +57,11 @@ def mpdist(x: np.ndarray, y: np.ndarray, m: int = 0) -> float:
     Examples
     --------
     >>> import numpy as np
-    >>> from aeon.distances import mpdist
+    >>> from aeon.distances import mp_distance
     >>> x = np.array([5, 9, 16, 23, 19, 13, 7])
     >>> y = np.array([3, 7, 13, 19, 23, 31, 36, 40, 48, 55, 63])
     >>> m = 4
-    >>> mpdist(x, y, m) # doctest: +SKIP
+    >>> mp_distance(x, y, m) # doctest: +SKIP
     0.05663764013361034
     """
     x = np.squeeze(x)
@@ -283,7 +283,7 @@ def _stomp_ab(
     return mp, ip
 
 
-def mpdist_pairwise_distance(
+def mp_pairwise_distance(
     X: Union[np.ndarray, list[np.ndarray]],
     y: Optional[Union[np.ndarray, list[np.ndarray]]] = None,
     m: int = 0,
@@ -317,24 +317,24 @@ def mpdist_pairwise_distance(
     Examples
     --------
     >>> import numpy as np
-    >>> from aeon.distances import mpdist_pairwise_distance
+    >>> from aeon.distances import mp_pairwise_distance
     >>> # Distance between each time series in a collection of time series
     >>> X = np.array([[16, 23, 19, 13],[48, 55, 63, 67]])
-    >>> mpdist_pairwise_distance(X, m = 3)
+    >>> mp_pairwise_distance(X, m = 3)
     array([[0.        , 1.56786235],
            [1.56786235, 0.        ]])
 
     >>> # Distance between two collections of time series
     >>> X = np.array([[[1, 2, 3]],[[4, 5, 6]], [[7, 8, 9]]])
     >>> y = np.array([[[21, 13, 9]],[[19, 14, 5]], [[17, 11, 6]]])
-    >>> mpdist_pairwise_distance(X, y, m = 2)
+    >>> mp_pairwise_distance(X, y, m = 2)
     array([[2.82842712, 2.82842712, 2.82842712],
            [2.82842712, 2.82842712, 2.82842712],
            [2.82842712, 2.82842712, 2.82842712]])
 
     >>> X = np.array([[[1, 2, 3]],[[4, 5, 6]], [[7, 8, 9]]])
     >>> y_univariate = np.array([[22, 18, 12]])
-    >>> mpdist_pairwise_distance(X, y_univariate, m = 2)
+    >>> mp_pairwise_distance(X, y_univariate, m = 2)
     array([[2.82842712],
            [2.82842712],
            [2.82842712]])
@@ -363,7 +363,7 @@ def _mpdist_pairwise_distance_single(x: NumbaList[np.ndarray], m: int) -> np.nda
 
     for i in range(n_cases):
         for j in range(i + 1, n_cases):
-            distances[i, j] = mpdist(x[i], x[j], m)
+            distances[i, j] = mp_distance(x[i], x[j], m)
             distances[j, i] = distances[i, j]
 
     return distances
@@ -379,5 +379,5 @@ def _mpdist_pairwise_distance(
 
     for i in range(n_cases):
         for j in range(m_cases):
-            distances[i, j] = mpdist(x[i], y[j], m)
+            distances[i, j] = mp_distance(x[i], y[j], m)
     return distances
diff --git a/aeon/distances/elastic/_adtw.py b/aeon/distances/elastic/_adtw.py
index b55608c0..feab2b4c 100644
--- a/aeon/distances/elastic/_adtw.py
+++ b/aeon/distances/elastic/_adtw.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._squared import _univariate_squared_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_alignment_paths.py b/aeon/distances/elastic/_alignment_paths.py
index 4286a080..f70a374c 100644
--- a/aeon/distances/elastic/_alignment_paths.py
+++ b/aeon/distances/elastic/_alignment_paths.py
@@ -3,7 +3,7 @@ __maintainer__ = []
 import numpy as np
 from numba import njit
 
-from aeon.distances._euclidean import _univariate_euclidean_distance
+from aeon.distances.pointwise._euclidean import _univariate_euclidean_distance
 
 
 @njit(cache=True, fastmath=True)
diff --git a/aeon/distances/elastic/_dtw.py b/aeon/distances/elastic/_dtw.py
index 467d6d59..85a5c3a6 100644
--- a/aeon/distances/elastic/_dtw.py
+++ b/aeon/distances/elastic/_dtw.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._squared import _univariate_squared_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_edr.py b/aeon/distances/elastic/_edr.py
index 3a2c8bc4..e14996ef 100644
--- a/aeon/distances/elastic/_edr.py
+++ b/aeon/distances/elastic/_edr.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._euclidean import _univariate_euclidean_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._euclidean import _univariate_euclidean_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_erp.py b/aeon/distances/elastic/_erp.py
index e9ab5477..179b2f24 100644
--- a/aeon/distances/elastic/_erp.py
+++ b/aeon/distances/elastic/_erp.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._euclidean import _univariate_euclidean_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._euclidean import _univariate_euclidean_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_lcss.py b/aeon/distances/elastic/_lcss.py
index 85304b74..23e1eb9f 100644
--- a/aeon/distances/elastic/_lcss.py
+++ b/aeon/distances/elastic/_lcss.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._euclidean import _univariate_euclidean_distance
 from aeon.distances.elastic._alignment_paths import compute_lcss_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._euclidean import _univariate_euclidean_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_msm.py b/aeon/distances/elastic/_msm.py
index 009ca8ca..956c674d 100644
--- a/aeon/distances/elastic/_msm.py
+++ b/aeon/distances/elastic/_msm.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._squared import _univariate_squared_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_shape_dtw.py b/aeon/distances/elastic/_shape_dtw.py
index 11fcee09..04106f4e 100644
--- a/aeon/distances/elastic/_shape_dtw.py
+++ b/aeon/distances/elastic/_shape_dtw.py
@@ -8,10 +8,10 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
 from aeon.distances.elastic._dtw import _dtw_cost_matrix
+from aeon.distances.pointwise._squared import _univariate_squared_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_soft_dtw.py b/aeon/distances/elastic/_soft_dtw.py
index 921a5ba4..31b87435 100644
--- a/aeon/distances/elastic/_soft_dtw.py
+++ b/aeon/distances/elastic/_soft_dtw.py
@@ -8,10 +8,10 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
 from aeon.distances.elastic._dtw import _dtw_cost_matrix
+from aeon.distances.pointwise._squared import _univariate_squared_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_twe.py b/aeon/distances/elastic/_twe.py
index 1a09f4d9..f8a5f108 100644
--- a/aeon/distances/elastic/_twe.py
+++ b/aeon/distances/elastic/_twe.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._euclidean import _univariate_euclidean_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._euclidean import _univariate_euclidean_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/elastic/_wdtw.py b/aeon/distances/elastic/_wdtw.py
index f9a24234..3ad1767c 100644
--- a/aeon/distances/elastic/_wdtw.py
+++ b/aeon/distances/elastic/_wdtw.py
@@ -8,9 +8,9 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance
 from aeon.distances.elastic._alignment_paths import compute_min_return_path
 from aeon.distances.elastic._bounding_matrix import create_bounding_matrix
+from aeon.distances.pointwise._squared import _univariate_squared_distance
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/distances/mindist/__init__.py b/aeon/distances/mindist/__init__.py
new file mode 100644
index 00000000..b08e4cfe
--- /dev/null
+++ b/aeon/distances/mindist/__init__.py
@@ -0,0 +1,28 @@
+"""Mindist module."""
+
+__all__ = [
+    "mindist_dft_sfa_distance",
+    "mindist_dft_sfa_pairwise_distance",
+    "mindist_paa_sax_distance",
+    "mindist_paa_sax_pairwise_distance",
+    "mindist_sax_distance",
+    "mindist_sax_pairwise_distance",
+    "mindist_sfa_distance",
+    "mindist_sfa_pairwise_distance",
+]
+from aeon.distances.mindist._dft_sfa import (
+    mindist_dft_sfa_distance,
+    mindist_dft_sfa_pairwise_distance,
+)
+from aeon.distances.mindist._paa_sax import (
+    mindist_paa_sax_distance,
+    mindist_paa_sax_pairwise_distance,
+)
+from aeon.distances.mindist._sax import (
+    mindist_sax_distance,
+    mindist_sax_pairwise_distance,
+)
+from aeon.distances.mindist._sfa import (
+    mindist_sfa_distance,
+    mindist_sfa_pairwise_distance,
+)
diff --git a/aeon/distances/_dft_sfa_mindist.py b/aeon/distances/mindist/_dft_sfa.py
similarity index 89%
rename from aeon/distances/_dft_sfa_mindist.py
rename to aeon/distances/mindist/_dft_sfa.py
index 4fb5d26c..deb20141 100644
--- a/aeon/distances/_dft_sfa_mindist.py
+++ b/aeon/distances/mindist/_dft_sfa.py
@@ -10,7 +10,7 @@ from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
 
 @njit(cache=True, fastmath=True)
-def dft_sfa_mindist(
+def mindist_dft_sfa_distance(
     x_dft: np.ndarray, y_sfa: np.ndarray, breakpoints: np.ndarray
 ) -> float:
     r"""Compute the DFT-SFA lower bounding distance between DFT and SFA representation.
@@ -43,7 +43,7 @@ def dft_sfa_mindist(
     Examples
     --------
     >>> import numpy as np
-    >>> from aeon.distances import dft_sfa_mindist
+    >>> from aeon.distances import mindist_dft_sfa_distance
     >>> from aeon.transformations.collection.dictionary_based import SFAFast
     >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
     >>> y = np.array([[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
@@ -59,15 +59,15 @@ def dft_sfa_mindist(
     >>> x_sfa = transform.transform_words(x).squeeze()
     >>> y_sfa = transform.transform_words(y).squeeze()
     >>> x_dft = transform.transform_mft(x).squeeze()
-    >>> dist = dft_sfa_mindist(x_dft, y_sfa, transform.breakpoints)
+    >>> dist = mindist_dft_sfa_distance(x_dft, y_sfa, transform.breakpoints)
     """
     if x_dft.ndim == 1 and y_sfa.ndim == 1:
-        return _univariate_DFT_SFA_distance(x_dft, y_sfa, breakpoints)
+        return _univariate_dft_sfa_distance(x_dft, y_sfa, breakpoints)
     raise ValueError("x and y must be 1D")
 
 
 @njit(cache=True, fastmath=True)
-def _univariate_DFT_SFA_distance(
+def _univariate_dft_sfa_distance(
     x_dft: np.ndarray, y_sfa: np.ndarray, breakpoints: np.ndarray
 ) -> float:
     dist = 0.0
@@ -90,10 +90,10 @@ def _univariate_DFT_SFA_distance(
     return np.sqrt(2 * dist)
 
 
-def sfa_pairwise_distance(
+def mindist_dft_sfa_pairwise_distance(
     X: np.ndarray, y: np.ndarray, breakpoints: np.ndarray
 ) -> np.ndarray:
-    """Compute the SFA pairwise distance between a set of SFA representations.
+    """Compute the DFT SFA pairwise distance between a set of SFA representations.
 
     Parameters
     ----------
@@ -138,7 +138,7 @@ def _dft_sfa_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(i + 1, n_instances):
-                distances[i, j] = _univariate_DFT_SFA_distance(X[i], X[j], breakpoints)
+                distances[i, j] = _univariate_dft_sfa_distance(X[i], X[j], breakpoints)
                 distances[j, i] = distances[i, j]
     else:
         n_instances = X.shape[0]
@@ -147,6 +147,6 @@ def _dft_sfa_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(m_instances):
-                distances[i, j] = _univariate_DFT_SFA_distance(X[i], y[j], breakpoints)
+                distances[i, j] = _univariate_dft_sfa_distance(X[i], y[j], breakpoints)
 
     return distances
diff --git a/aeon/distances/_paa_sax_mindist.py b/aeon/distances/mindist/_paa_sax.py
similarity index 89%
rename from aeon/distances/_paa_sax_mindist.py
rename to aeon/distances/mindist/_paa_sax.py
index df201f3d..a53a8b35 100644
--- a/aeon/distances/_paa_sax_mindist.py
+++ b/aeon/distances/mindist/_paa_sax.py
@@ -8,7 +8,7 @@ from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
 
 @njit(cache=True, fastmath=True)
-def paa_sax_mindist(
+def mindist_paa_sax_distance(
     x_paa: np.ndarray, y_sax: np.ndarray, breakpoints: np.ndarray, n: int
 ) -> float:
     r"""Compute the PAA-SAX lower bounding distance between PAA and SAX representation.
@@ -42,7 +42,7 @@ def paa_sax_mindist(
     Examples
     --------
     >>> import numpy as np
-    >>> from aeon.distances import paa_sax_mindist
+    >>> from aeon.distances import mindist_paa_sax_distance
     >>> from aeon.transformations.collection.dictionary_based import SAX
     >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
     >>> y = np.array([[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
@@ -50,15 +50,17 @@ def paa_sax_mindist(
     >>> x_sax = transform.fit_transform(x).squeeze()
     >>> x_paa = transform._get_paa(x).squeeze()
     >>> y_sax = transform.transform(y).squeeze()
-    >>> dist = paa_sax_mindist(x_paa, y_sax, transform.breakpoints, x.shape[-1])
+    >>> dist = mindist_paa_sax_distance(
+    ... x_paa, y_sax, transform.breakpoints, x.shape[-1]
+    ... )
     """
     if x_paa.ndim == 1 and y_sax.ndim == 1:
-        return _univariate_PAA_SAX_distance(x_paa, y_sax, breakpoints, n)
+        return _univariate_paa_sax_distance(x_paa, y_sax, breakpoints, n)
     raise ValueError("x and y must be 1D")
 
 
 @njit(cache=True, fastmath=True)
-def _univariate_PAA_SAX_distance(
+def _univariate_paa_sax_distance(
     x_paa: np.ndarray, y_sax: np.ndarray, breakpoints: np.ndarray, n: int
 ) -> float:
     dist = 0.0
@@ -88,10 +90,10 @@ def _univariate_PAA_SAX_distance(
     return np.sqrt(dist)
 
 
-def sax_pairwise_distance(
+def mindist_paa_sax_pairwise_distance(
     X: np.ndarray, y: np.ndarray, breakpoints: np.ndarray, n: int
 ) -> np.ndarray:
-    """Compute the SAX pairwise distance between a set of SAX representations.
+    """Compute the PAA SAX pairwise distance between a set of SAX representations.
 
     Parameters
     ----------
@@ -138,7 +140,7 @@ def _paa_sax_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(i + 1, n_instances):
-                distances[i, j] = _univariate_PAA_SAX_distance(
+                distances[i, j] = _univariate_paa_sax_distance(
                     X[i], X[j], breakpoints, n
                 )
                 distances[j, i] = distances[i, j]
@@ -149,7 +151,7 @@ def _paa_sax_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(m_instances):
-                distances[i, j] = _univariate_PAA_SAX_distance(
+                distances[i, j] = _univariate_paa_sax_distance(
                     X[i], y[j], breakpoints, n
                 )
 
diff --git a/aeon/distances/_sax_mindist.py b/aeon/distances/mindist/_sax.py
similarity index 88%
rename from aeon/distances/_sax_mindist.py
rename to aeon/distances/mindist/_sax.py
index b71a6bc4..cdecfb2e 100644
--- a/aeon/distances/_sax_mindist.py
+++ b/aeon/distances/mindist/_sax.py
@@ -10,7 +10,9 @@ from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
 
 @njit(cache=True, fastmath=True)
-def sax_mindist(x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray, n: int) -> float:
+def mindist_sax_distance(
+    x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray, n: int
+) -> float:
     r"""Compute the SAX lower bounding distance between two SAX representations.
 
     Parameters
@@ -42,22 +44,24 @@ def sax_mindist(x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray, n: int) -
     Examples
     --------
     >>> import numpy as np
-    >>> from aeon.distances import paa_sax_mindist
+    >>> from aeon.distances import mindist_paa_sax_distance
     >>> from aeon.transformations.collection.dictionary_based import SAX
     >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
     >>> y = np.array([[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
     >>> transform = SAX(n_segments=8, alphabet_size=8)
     >>> x_sax = transform.fit_transform(x).squeeze()
     >>> y_sax = transform.transform(y).squeeze()
-    >>> dist = paa_sax_mindist(x_sax, y_sax, transform.breakpoints, x.shape[-1])
+    >>> dist = mindist_paa_sax_distance(
+    ... x_sax, y_sax, transform.breakpoints, x.shape[-1]
+    ... )
     """
     if x.ndim == 1 and y.ndim == 1:
-        return _univariate_SAX_distance(x, y, breakpoints, n)
+        return _univariate_sax_distance(x, y, breakpoints, n)
     raise ValueError("x and y must be 1D")
 
 
 @njit(cache=True, fastmath=True)
-def _univariate_SAX_distance(
+def _univariate_sax_distance(
     x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray, n: int
 ) -> float:
     dist = 0.0
@@ -80,7 +84,7 @@ def _univariate_SAX_distance(
     return np.sqrt(dist)
 
 
-def sax_pairwise_distance(
+def mindist_sax_pairwise_distance(
     X: np.ndarray, y: np.ndarray, breakpoints: np.ndarray, n: int
 ) -> np.ndarray:
     """Compute the SAX pairwise distance between a set of SAX representations.
@@ -131,7 +135,7 @@ def _sax_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(i + 1, n_instances):
-                distances[i, j] = _univariate_SAX_distance(X[i], X[j], breakpoints, n)
+                distances[i, j] = _univariate_sax_distance(X[i], X[j], breakpoints, n)
                 distances[j, i] = distances[i, j]
     else:
         n_instances = X.shape[0]
@@ -140,6 +144,6 @@ def _sax_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(m_instances):
-                distances[i, j] = _univariate_SAX_distance(X[i], y[j], breakpoints, n)
+                distances[i, j] = _univariate_sax_distance(X[i], y[j], breakpoints, n)
 
     return distances
diff --git a/aeon/distances/_sfa_mindist.py b/aeon/distances/mindist/_sfa.py
similarity index 87%
rename from aeon/distances/_sfa_mindist.py
rename to aeon/distances/mindist/_sfa.py
index 6b277fcb..601b83f1 100644
--- a/aeon/distances/_sfa_mindist.py
+++ b/aeon/distances/mindist/_sfa.py
@@ -10,7 +10,9 @@ from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
 
 @njit(cache=True, fastmath=True)
-def sfa_mindist(x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray) -> float:
+def mindist_sfa_distance(
+    x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray
+) -> float:
     r"""Compute the SFA lower bounding distance between two SFA representations.
 
     Parameters
@@ -41,7 +43,7 @@ def sfa_mindist(x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray) -> float:
     Examples
     --------
     >>> import numpy as np
-    >>> from aeon.distances import sfa_mindist
+    >>> from aeon.distances import mindist_sfa_distance
     >>> from aeon.transformations.collection.dictionary_based import SFAFast
     >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
     >>> y = np.array([[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
@@ -56,15 +58,15 @@ def sfa_mindist(x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray) -> float:
     SFAFast(...)
     >>> x_sfa = transform.transform_words(x).squeeze()
     >>> y_sfa = transform.transform_words(y).squeeze()
-    >>> dist = sfa_mindist(x_sfa, y_sfa, transform.breakpoints)
+    >>> dist = mindist_sfa_distance(x_sfa, y_sfa, transform.breakpoints)
     """
     if x.ndim == 1 and y.ndim == 1:
-        return _univariate_SFA_distance(x, y, breakpoints)
+        return _univariate_sfa_distance(x, y, breakpoints)
     raise ValueError("x and y must be 1D")
 
 
 @njit(cache=True, fastmath=True)
-def _univariate_SFA_distance(
+def _univariate_sfa_distance(
     x: np.ndarray, y: np.ndarray, breakpoints: np.ndarray
 ) -> float:
     dist = 0.0
@@ -79,10 +81,10 @@ def _univariate_SFA_distance(
     return np.sqrt(2 * dist)
 
 
-def sfa_pairwise_distance(
+def mindist_sfa_pairwise_distance(
     X: np.ndarray, y: np.ndarray, breakpoints: np.ndarray
 ) -> np.ndarray:
-    """Compute the SFA pairwise distance between a set of SFA representations.
+    """Compute the SFA mindist pairwise distance between a set of SFA representations.
 
     Parameters
     ----------
@@ -128,7 +130,7 @@ def _sfa_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(i + 1, n_instances):
-                distances[i, j] = _univariate_SFA_distance(X[i], X[j], breakpoints)
+                distances[i, j] = _univariate_sfa_distance(X[i], X[j], breakpoints)
                 distances[j, i] = distances[i, j]
     else:
         n_instances = X.shape[0]
@@ -137,6 +139,6 @@ def _sfa_from_multiple_to_multiple_distance(
 
         for i in prange(n_instances):
             for j in prange(m_instances):
-                distances[i, j] = _univariate_SFA_distance(X[i], y[j], breakpoints)
+                distances[i, j] = _univariate_sfa_distance(X[i], y[j], breakpoints)
 
     return distances
diff --git a/aeon/distances/pointwise/__init__.py b/aeon/distances/pointwise/__init__.py
new file mode 100644
index 00000000..6d34d443
--- /dev/null
+++ b/aeon/distances/pointwise/__init__.py
@@ -0,0 +1,29 @@
+"""Pointwise distances."""
+
+__all__ = [
+    "euclidean_distance",
+    "euclidean_pairwise_distance",
+    "manhattan_distance",
+    "manhattan_pairwise_distance",
+    "minkowski_distance",
+    "minkowski_pairwise_distance",
+    "squared_distance",
+    "squared_pairwise_distance",
+]
+
+from aeon.distances.pointwise._euclidean import (
+    euclidean_distance,
+    euclidean_pairwise_distance,
+)
+from aeon.distances.pointwise._manhattan import (
+    manhattan_distance,
+    manhattan_pairwise_distance,
+)
+from aeon.distances.pointwise._minkowski import (
+    minkowski_distance,
+    minkowski_pairwise_distance,
+)
+from aeon.distances.pointwise._squared import (
+    squared_distance,
+    squared_pairwise_distance,
+)
diff --git a/aeon/distances/_euclidean.py b/aeon/distances/pointwise/_euclidean.py
similarity index 98%
rename from aeon/distances/_euclidean.py
rename to aeon/distances/pointwise/_euclidean.py
index b9f03aba..f7f0a640 100644
--- a/aeon/distances/_euclidean.py
+++ b/aeon/distances/pointwise/_euclidean.py
@@ -6,7 +6,10 @@ import numpy as np
 from numba import njit
 from numba.typed import List as NumbaList
 
-from aeon.distances._squared import _univariate_squared_distance, squared_distance
+from aeon.distances.pointwise._squared import (
+    _univariate_squared_distance,
+    squared_distance,
+)
 from aeon.utils.conversion._convert_collection import _convert_collection_to_numba_list
 from aeon.utils.validation.collection import _is_numpy_list_multivariate
 
diff --git a/aeon/regression/distance_based/_time_series_neighbors.py b/aeon/regression/distance_based/_time_series_neighbors.py
index 5c065939..ed700311 100644
--- a/aeon/regression/distance_based/_time_series_neighbors.py
+++ b/aeon/regression/distance_based/_time_series_neighbors.py
@@ -49,7 +49,7 @@ class KNeighborsTimeSeriesRegressor(BaseRegressor):
     n_jobs : int, default = None
         The number of parallel jobs to run for neighbors search.
         ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
-        ``-1`` means using all processors. See :term:`Glossary <n_jobs>`
+        ``-1`` means using all processors.
         for more details. Parameter for compatibility purposes, still unimplemented.
 
     Examples
diff --git a/aeon/transformations/collection/dictionary_based/_borf.py b/aeon/transformations/collection/dictionary_based/_borf.py
index 0a32a7bf..b4d7d3cc 100644
--- a/aeon/transformations/collection/dictionary_based/_borf.py
+++ b/aeon/transformations/collection/dictionary_based/_borf.py
@@ -548,12 +548,15 @@ def _ndindex_2d_array(idx, dim2_shape):
 
 @nb.njit(cache=True)
 def _get_norm_bins(alphabet_size: int, mu=0, std=1):
-    return _ppf(np.linspace(0, 1, alphabet_size + 1)[1:-1], mu, std)
+    bins = []
+    for i in np.linspace(0, 1, alphabet_size + 1)[1:-1]:
+        bins.append(_ppf(i, mu, std))
+    return np.array(bins)
 
 
 @nb.njit(fastmath=True, cache=True)
 def _erfinv(x: float) -> float:
-    w = -math.log((1 - x) * (1 + x))
+    w = -np.log((1 - x) * (1 + x))
     if w < 5:
         w = w - 2.5
         p = 2.81022636e-08
@@ -566,7 +569,7 @@ def _erfinv(x: float) -> float:
         p = 0.246640727 + p * w
         p = 1.50140941 + p * w
     else:
-        w = math.sqrt(w) - 3
+        w = np.sqrt(w) - 3
         p = -0.000200214257
         p = 0.000100950558 + p * w
         p = 0.00134934322 + p * w
@@ -579,9 +582,9 @@ def _erfinv(x: float) -> float:
     return p * x
 
 
-@nb.vectorize(cache=True)
+@nb.njit(cache=True)
 def _ppf(x, mu=0, std=1):
-    return mu + math.sqrt(2) * _erfinv(2 * x - 1) * std
+    return mu + np.sqrt(2) * _erfinv(2 * x - 1) * std
 
 
 @nb.njit(fastmath=True, cache=True)
@@ -763,17 +766,16 @@ def _length(a):
 
 @nb.njit(cache=True)
 def _hash_function(v):
-
     byte_mask = np.uint64(255)
     bs = np.uint64(v)
     x1 = (bs) & byte_mask
-    x2 = (bs >> 8) & byte_mask
-    x3 = (bs >> 16) & byte_mask
-    x4 = (bs >> 24) & byte_mask
-    x5 = (bs >> 32) & byte_mask
-    x6 = (bs >> 40) & byte_mask
-    x7 = (bs >> 48) & byte_mask
-    x8 = (bs >> 56) & byte_mask
+    x2 = (bs >> np.uint64(8)) & byte_mask
+    x3 = (bs >> np.uint64(16)) & byte_mask
+    x4 = (bs >> np.uint64(24)) & byte_mask
+    x5 = (bs >> np.uint64(32)) & byte_mask
+    x6 = (bs >> np.uint64(40)) & byte_mask
+    x7 = (bs >> np.uint64(48)) & byte_mask
+    x8 = (bs >> np.uint64(56)) & byte_mask
 
     FNV_primer = np.uint64(1099511628211)
     FNV_bias = np.uint64(14695981039346656037)
@@ -800,7 +802,7 @@ def _hash_function(v):
 @nb.njit(cache=True)
 def _make_hash_table(ar):
     a = _length(len(ar))
-    mask = a - 1
+    mask = np.uint64(a - 1)
 
     uniques = np.empty(a, dtype=ar.dtype)
     uniques_cnt = np.zeros(a, dtype=np.int_)
@@ -822,7 +824,7 @@ def _set_item(uniques, uniques_cnt, mask, h, v, total, miss_hits, weight):
             break
         else:
             miss_hits += 1
-            index += 1
+            index += np.uint64(1)
             index = index & mask
     return total, miss_hits
 
diff --git a/aeon/utils/validation/collection.py b/aeon/utils/validation/collection.py
index 2a321b37..5a5eb62f 100644
--- a/aeon/utils/validation/collection.py
+++ b/aeon/utils/validation/collection.py
@@ -375,9 +375,6 @@ def _equal_length(X, input_type):
     raise ValueError(f" unknown input type {input_type}")
 
 
-# TODO: Test this function
-
-
 def _is_numpy_list_multivariate(
     x: Union[np.ndarray, list[np.ndarray]],
     y: Optional[Union[np.ndarray, list[np.ndarray]]] = None,
diff --git a/docs/glossary.md b/docs/glossary.md
deleted file mode 100644
index f660adad..00000000
--- a/docs/glossary.md
+++ /dev/null
@@ -1,191 +0,0 @@
-# Glossary of Common Terms
-
-The glossary below defines common terms and API elements used throughout `aeon`.
-
-```{glossary}
-:sorted:
-
-Time series data
-Time series
-Series
-    Data with multiple individual {term}`variable` measurements with accompanying
-    {term}`timepoints` which are ordered over time or have an index indicating the
-    position of an observation in the sequence of values.
-
-Timepoint
-Timepoints
-    The point in time that an observation is made for a {term}`time series`. A time
-    point may represent an exact point in time (a timestamp), a time period (e.g.
-    minutes, hours or days), or simply an index indicating the position of an
-    observation in the sequence of values.
-
-Variable
-Variables
-    Refers to some measurement of interest. Variables may be singular values
-    (e.g. time-invariant measurements like a patient's place of birth) or a sequence
-    of multiple values as a {term}`time series`.
-
-    For time series data, multiple variables may be referred to as {term}`channels`.
-
-Target variable
-Target variables
-    The {term}`variable`(s) to be predicted in a learning task using
-    {term}`Independent variables`, past {term}`timepoints` of the variable itself, or
-    both. Also referred to as the dependent or endogenous variable(s).
-
-Independent variable
-Independent variables
-    The {term}`variable`(s) that are used to predict the {term}`target variable`(s)
-    in a learning task. Also referred to as exogenous variables Commonly also known as
-    features and attributes in traditional machine learning settings.
-
-Channel
-Channels
-    A channel is a singular {term}`time series` in a data set which contains multiple
-    time series {term}`variables`. A dataset with multiple channels is
-    {term}`multivariate`.
-
-Time series machine learning
-    A general term for using machine learning algorithms to learn predictive models
-    from {term}`time series` data. `aeon` is a library for time series machine learning
-    algorithms.
-
-Forecasting
-    A {term}`Time series machine learning` task focused on prediction future values of
-    a {term}`time series`.
-
-Time series classification
-    A learning task focused on using the patterns across {term}`instances` between the
-    {term}`time series` and a categorical {term}`target variable`.
-
-Time series regression
-    A learning task focused on using learning patterns from multiple {term}`time series`
-    and a continuous {term}`target variable`. There are two related but distinct
-    learning tasks that fall under this category: {term}`time series forecasting
-    regression` and {term}`time series extrinsic regression`.
-
-Time series forecasting regression
-    This learning relates to {term}`forecasting` {term}`reduced <reduction>` to
-    regression through a sliding window. This is the more familiar type of regression
-    in literature.
-
-Time series extrinsic regression
-    A learning task focused on using the patterns across {term}`instances` between the
-    {term}`time series` and a continuous {term}`target variable`. The `aeon`
-    `regression` module is focused on this type of regression.
-
-Time series clustering
-    A learning task focused on discovering groups consisting of {term}`instances` with
-    similar {term}`time series`.
-
-Time series annotation
-    A collection of  learning tasks focused on labelling the {term}`variables` of a
-    {term}`time series`. This includes the related tasks of  anomaly detection, change
-    point detection and segmentation.
-
-Time series transformation
-Time series transformers
-    Transformers usually refers to classes in the `transformation` module of `aeon`.
-    These classes are used to transform {term}`time series` data into a different
-    format. This may be to reduce the dimensionality of the data, to extract features
-    from the data, or to transform the data into a different format.
-
-    See {term}`series-to-series transformation` and {term}`series-to-features
-    transformation` for types of transformer.
-
-Time series similarity search
-    A task focused on finding the most similar candidates to a given
-    {term}`time series` of length `l`, called the query. The candidates are
-    extracted from a collection of {term}`time series` of length equal or
-    superior to `l`.
-
-Collection transformers
-    {term}`Time series transformers` that take a {term}`time series collection` as
-    input. While these transformers only accept collections, a wrapper is provided to
-    allow them to be used with singular time series datatypes.
-
-Series-to-series transformation
-    {term}`Time series transformers` that take a {term}`time series` as input and
-    output a (different) time series. An example of this is the Discrete
-    Fourier Transform (DFT).
-
-Series-to-features transformation
-    {term}`Time series transformers` that take a {term}`time series` as input and
-    output a set of features (in {term}`tabular` format for {term}`time series
-    collections`. An example of this is the extraction of the mean and various other
-    summary statistics from the series.
-
-Instances
-Instance
-    A member of the set of entities being studied and which an machine learning
-    practitioner wishes to generalize. For example, patients, chemical process runs,
-    machines, countries, etc.
-
-    May also be referred to as cases, samples, examples, observations or records
-    depending on the discipline and context.
-
-Panel
-Time series panel
-    Common alternative name for {term}`time series collection`.
-
-Time series collection
-Time series collections
-    A datatype which contains multiple {term}`instances` of time series. These series
-    may be {term}`univariate time series` or {term}`multivariate time series`. The time
-    series contained within may be of different lengths, sampled at different
-    frequencies, contain differing {term}`timepoints` etc.
-
-    Also referred to as a {term}`panel time series` depending on context and discipline.
-
-Univariate
-Univariate time series
-    A single {term}`time series`.
-
-Multivariate
-Multivariate time series
-    A {term}`time series` with multiple {term}`channels`. Typically observed for the
-    same observational unit. Multivariate time series is typically used to refer to
-    cases where the series evolve together over time.
-
-    An example of time series data with multiple channels is data extracted from a
-    gyroscope sensor, which can produce different time series data for the x, y and
-    z axes of the device.
-
-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.
-
-Trend
-    When time series show 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
-    A 2 dimensional data structure where the rows of the matrix represent {
-    term}`instances` and the columns represent {term}`variables`. This is the most
-    common data structure used in `scikit-learn`.
-
-    A {term}`univariate time series` can be formatted in this way, where each
-    variable of being measured for each instance are treated as
-    features and stored as a primitive data type in the 2d data structure. E.g., there
-    are N instances of time series and each has T {term}`timepoint`, this would yield
-    a matrix with shape (N, T): N rows, T columns.
-
-random_state
-    A parameter for controlling random number generation in estimators and functions.
-    Follows the conventions of [scikit-learn](https://scikit-learn.org/stable/glossary.html#term-random_state).
-
-    If `int`, random_state is the seed used by the random number generator;
-    If `RandomState` instance, random_state is the random number generator;
-    If `None`, the random number generator is the `RandomState` instance used by
-    `np.random`.
-
-n_jobs
-    A parameter for controlling the number of threads used in estimators.
-    Follows the conventions of [scikit-learn](https://scikit-learn.org/stable/glossary.html#term-n_jobs).
-```
diff --git a/examples/transformations/rocket.ipynb b/examples/transformations/rocket.ipynb
index fc2c2271..eec06438 100644
--- a/examples/transformations/rocket.ipynb
+++ b/examples/transformations/rocket.ipynb
@@ -78,7 +78,7 @@
     "\n",
     "### 2.1 Load the Training Data\n",
     "For more details on the data set, see the [univariate time series classification\n",
-    "notebook](https://github.com/aeon-toolkit/aeon/tree/main/examples/classification.ipynb)."
+    "notebook](https://github.com/aeon-toolkit/aeon/tree/main/examples/classification/classification.ipynb)."
    ]
   },
   {
diff --git a/examples/transformations/sast.ipynb b/examples/transformations/sast.ipynb
index 6f4b3a7f..f7dbd9c2 100644
--- a/examples/transformations/sast.ipynb
+++ b/examples/transformations/sast.ipynb
@@ -65,7 +65,7 @@
     "\n",
     "### 2.1 Load the Training Data\n",
     "For more details on the data set, see the [univariate time series classification\n",
-    "notebook](https://github.com/aeon-toolkit/aeon/tree/main/examples/classification.ipynb)."
+    "notebook](https://github.com/aeon-toolkit/aeon/tree/main/examples/classification/classification.ipynb)."
    ]
   },
   {


Test patch:
diff --git a/aeon/clustering/tests/test_elastic_som.py b/aeon/clustering/tests/test_elastic_som.py
index 71a22340..5d5ef476 100644
--- a/aeon/clustering/tests/test_elastic_som.py
+++ b/aeon/clustering/tests/test_elastic_som.py
@@ -5,7 +5,7 @@ import pytest
 
 from aeon.clustering import ElasticSOM
 from aeon.distances import dtw_distance, msm_alignment_path
-from aeon.distances._distance import DISTANCES
+from aeon.distances._distance import ELASTIC_DISTANCES
 from aeon.testing.data_generation import make_example_3d_numpy
 
 
@@ -245,7 +245,7 @@ def test_elastic_som_neighborhood_function():
         clst.fit(X)
 
 
-@pytest.mark.parametrize("dist", DISTANCES)
+@pytest.mark.parametrize("dist", ELASTIC_DISTANCES)
 def test_elastic_som_distances(dist):
     """Test ElasticSOM distances."""
     if "distance" not in dist:
diff --git a/aeon/distances/elastic/tests/test_alignment_path.py b/aeon/distances/elastic/tests/test_alignment_path.py
index 2305a033..ade31d9e 100644
--- a/aeon/distances/elastic/tests/test_alignment_path.py
+++ b/aeon/distances/elastic/tests/test_alignment_path.py
@@ -5,7 +5,11 @@ import pytest
 from numpy.testing import assert_almost_equal
 
 from aeon.distances import alignment_path as compute_alignment_path
-from aeon.distances._distance import DISTANCES, SINGLE_POINT_NOT_SUPPORTED_DISTANCES
+from aeon.distances._distance import (
+    DISTANCES,
+    DISTANCES_DICT,
+    SINGLE_POINT_NOT_SUPPORTED_DISTANCES,
+)
 from aeon.testing.data_generation._legacy import make_series
 
 
@@ -20,11 +24,14 @@ def _validate_alignment_path_result(
     original_x = x.copy()
     original_y = y.copy()
     alignment_path_result = alignment_path(x, y)
+    callable_alignment_path = DISTANCES_DICT[name]["alignment_path"](x, y)
 
     assert isinstance(alignment_path_result, tuple)
     assert isinstance(alignment_path_result[0], list)
     assert isinstance(alignment_path_result[1], float)
     assert compute_alignment_path(x, y, metric=name) == alignment_path_result
+    # Test a callable being passed
+    assert callable_alignment_path == alignment_path_result
 
     distance_result = distance(x, y)
     assert_almost_equal(alignment_path_result[1], distance_result)
diff --git a/aeon/distances/elastic/tests/test_cost_matrix.py b/aeon/distances/elastic/tests/test_cost_matrix.py
index 7903b070..79db314f 100644
--- a/aeon/distances/elastic/tests/test_cost_matrix.py
+++ b/aeon/distances/elastic/tests/test_cost_matrix.py
@@ -5,7 +5,11 @@ import pytest
 from numpy.testing import assert_almost_equal
 
 from aeon.distances import cost_matrix as compute_cost_matrix
-from aeon.distances._distance import DISTANCES, SINGLE_POINT_NOT_SUPPORTED_DISTANCES
+from aeon.distances._distance import (
+    DISTANCES,
+    DISTANCES_DICT,
+    SINGLE_POINT_NOT_SUPPORTED_DISTANCES,
+)
 from aeon.testing.data_generation._legacy import make_series
 
 
@@ -30,9 +34,11 @@ def _validate_cost_matrix_result(
     original_x = x.copy()
     original_y = y.copy()
     cost_matrix_result = cost_matrix(x, y)
+    cost_matrix_callable_result = DISTANCES_DICT[name]["cost_matrix"](x, y)
 
     assert isinstance(cost_matrix_result, np.ndarray)
     assert_almost_equal(cost_matrix_result, compute_cost_matrix(x, y, metric=name))
+    assert_almost_equal(cost_matrix_callable_result, cost_matrix_result)
     if name == "ddtw" or name == "wddtw":
         assert cost_matrix_result.shape == (x.shape[-1] - 2, y.shape[-1] - 2)
     elif name == "lcss":
diff --git a/aeon/distances/_manhattan.py b/aeon/distances/pointwise/_manhattan.py
similarity index 100%
rename from aeon/distances/_manhattan.py
rename to aeon/distances/pointwise/_manhattan.py
diff --git a/aeon/distances/_minkowski.py b/aeon/distances/pointwise/_minkowski.py
similarity index 100%
rename from aeon/distances/_minkowski.py
rename to aeon/distances/pointwise/_minkowski.py
diff --git a/aeon/distances/_squared.py b/aeon/distances/pointwise/_squared.py
similarity index 100%
rename from aeon/distances/_squared.py
rename to aeon/distances/pointwise/_squared.py
diff --git a/aeon/distances/tests/test_distances.py b/aeon/distances/tests/test_distances.py
index e351df43..43d27be2 100644
--- a/aeon/distances/tests/test_distances.py
+++ b/aeon/distances/tests/test_distances.py
@@ -9,6 +9,8 @@ from aeon.distances import distance as compute_distance
 from aeon.distances import get_distance_function_names, pairwise_distance
 from aeon.distances._distance import (
     DISTANCES,
+    MIN_DISTANCES,
+    MP_DISTANCES,
     SINGLE_POINT_NOT_SUPPORTED_DISTANCES,
     UNEQUAL_LENGTH_SUPPORT_DISTANCES,
     _custom_func_pairwise,
@@ -67,6 +69,10 @@ def _validate_distance_result(
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_distances(dist):
     """Test distance functions."""
+    # For now skipping mpdist and mindist
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
+
     # ================== Test equal length ==================
     # Test univariate of shape (n_timepoints,)
     _validate_distance_result(
diff --git a/aeon/distances/tests/test_mpdist.py b/aeon/distances/tests/test_mpdist.py
index 1cee8ce0..84adbacd 100644
--- a/aeon/distances/tests/test_mpdist.py
+++ b/aeon/distances/tests/test_mpdist.py
@@ -5,7 +5,7 @@ import re
 import numpy as np
 import pytest
 
-from aeon.distances._mpdist import mpdist
+from aeon.distances._mpdist import mp_distance
 
 
 def test_mpdist():
@@ -18,27 +18,27 @@ def test_mpdist():
         ValueError,
         match=re.escape("x and y must be a 1D array of shape (n_timepoints,)"),
     ):
-        mpdist(y, y)
+        mp_distance(y, y)
 
     # Test for ValueError if ts2 is not a 1D array
     with pytest.raises(
         ValueError,
         match=re.escape("x and y must be a 1D array of shape (n_timepoints,)"),
     ):
-        mpdist(x, y)
+        mp_distance(x, y)
     y = np.random.randn(1, 10)
     with pytest.raises(
         ValueError,
         match=re.escape("subseries length must be less than or equal to the length"),
     ):
-        mpdist(x, y, m=11)
+        mp_distance(x, y, m=11)
     with pytest.raises(
         ValueError,
         match=re.escape("subseries length must be greater than 0 or zero"),
     ):
-        mpdist(x, y, m=-1)
+        mp_distance(x, y, m=-1)
 
     # Test MPDist function with valid inputs
-    d = mpdist(x, y)
+    d = mp_distance(x, y)
     assert isinstance(d, float)  # Check if the result is a float
     assert d >= 0  # Check if the distance is non-negative
diff --git a/aeon/distances/tests/test_numba_distance_parameters.py b/aeon/distances/tests/test_numba_distance_parameters.py
index 1c165595..f42b6016 100644
--- a/aeon/distances/tests/test_numba_distance_parameters.py
+++ b/aeon/distances/tests/test_numba_distance_parameters.py
@@ -6,7 +6,7 @@ import numpy as np
 import pytest
 
 from aeon.distances import distance
-from aeon.distances._distance import DISTANCES
+from aeon.distances._distance import DISTANCES, MIN_DISTANCES, MP_DISTANCES
 from aeon.distances.elastic._shape_dtw import _pad_ts_edges, _transform_subsequences
 from aeon.testing.data_generation._legacy import make_series
 from aeon.testing.expected_results.expected_distance_results import (
@@ -133,6 +133,10 @@ DIST_PARAMS = {
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_new_distance_params(dist):
     """Test function to check the parameters of distance functions."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
+
     if dist["name"] in DIST_PARAMS:
         _test_distance_params(
             DIST_PARAMS[dist["name"]],
diff --git a/aeon/distances/tests/test_pairwise.py b/aeon/distances/tests/test_pairwise.py
index 7a7558b4..88170d6f 100644
--- a/aeon/distances/tests/test_pairwise.py
+++ b/aeon/distances/tests/test_pairwise.py
@@ -7,6 +7,8 @@ from numpy.testing import assert_almost_equal
 from aeon.distances import pairwise_distance as compute_pairwise_distance
 from aeon.distances._distance import (
     DISTANCES,
+    MIN_DISTANCES,
+    MP_DISTANCES,
     SINGLE_POINT_NOT_SUPPORTED_DISTANCES,
     SYMMETRIC_DISTANCES,
 )
@@ -234,6 +236,9 @@ def _supports_nonequal_length(dist) -> bool:
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_pairwise_distance(dist):
     """Test pairwise distance function."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     # ================== Test equal length ==================
     # Test collection of univariate time series in the shape (n_cases, n_timepoints)
     _validate_pairwise_result(
@@ -304,6 +309,9 @@ def test_pairwise_distance(dist):
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_multiple_to_multiple_distances(dist):
     """Test multiple to multiple distances."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     # ================== Test equal length ==================
     # Test passing two singular univariate time series of shape (n_timepoints,)
     if dist["name"] != "scale_shift":
@@ -412,6 +420,9 @@ def test_multiple_to_multiple_distances(dist):
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_single_to_multiple_distances(dist):
     """Test single to multiple distances."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     # ================== Test equal length ==================
     # Test passing a singular univariate time series of shape (n_timepoints,) compared
     # to a collection of univariate time series of shape (n_cases, n_timepoints)
@@ -548,6 +559,9 @@ def test_single_to_multiple_distances(dist):
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_pairwise_distance_non_negative(dist, seed):
     """Most estimators require distances to be non-negative."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     X = make_example_3d_numpy(
         n_cases=5, n_channels=1, n_timepoints=10, random_state=seed, return_y=False
     )
diff --git a/aeon/distances/tests/test_sklearn_compatibility.py b/aeon/distances/tests/test_sklearn_compatibility.py
index 8752b7d7..5d68e411 100644
--- a/aeon/distances/tests/test_sklearn_compatibility.py
+++ b/aeon/distances/tests/test_sklearn_compatibility.py
@@ -9,7 +9,7 @@ from sklearn.preprocessing import FunctionTransformer
 from sklearn.svm import SVR
 
 from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier
-from aeon.distances._distance import DISTANCES
+from aeon.distances._distance import DISTANCES, MIN_DISTANCES, MP_DISTANCES
 from aeon.regression.distance_based import KNeighborsTimeSeriesRegressor
 from aeon.testing.data_generation import make_example_3d_numpy
 
@@ -17,6 +17,9 @@ from aeon.testing.data_generation import make_example_3d_numpy
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_function_transformer(dist):
     """Test all distances work with FunctionTransformer in a pipeline."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     X = make_example_3d_numpy(
         n_cases=5, n_channels=1, n_timepoints=10, return_y=False, random_state=1
     )
@@ -36,6 +39,9 @@ def test_function_transformer(dist):
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_distance_based(dist):
     """Test all distances work with KNN in a pipeline."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     X, y = make_example_3d_numpy(
         n_cases=6, n_channels=1, n_timepoints=10, regression_target=True
     )
@@ -58,6 +64,9 @@ def test_distance_based(dist):
 @pytest.mark.parametrize("dist", DISTANCES)
 def test_clusterer(dist):
     """Test all distances work with DBSCAN."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     X = make_example_3d_numpy(n_cases=5, n_channels=1, n_timepoints=10, return_y=False)
     db = DBSCAN(metric="precomputed", eps=2.5)
     preds = db.fit_predict(dist["pairwise_distance"](X))
@@ -76,7 +85,11 @@ def test_clusterer(dist):
 def test_univariate(dist, k, task):
     """Test all distances work with sklearn nearest neighbours."""
     # TODO: when solved the issue with lcss and edr, remove this condition
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     # https://github.com/aeon-toolkit/aeon/issues/882
+
     if dist["name"] in ["lcss", "edr"]:
         return
 
@@ -141,6 +154,9 @@ def test_univariate(dist, k, task):
 )
 def test_multivariate(dist, k, task):
     """Test all distances work with sklearn nearest neighbours."""
+    # Skip for now
+    if dist["name"] in MIN_DISTANCES or dist["name"] in MP_DISTANCES:
+        return
     # TODO: when solved the issue with lcss and edr, remove this condition
     # https://github.com/aeon-toolkit/aeon/issues/882
     if dist["name"] in ["lcss", "edr"]:
diff --git a/aeon/distances/tests/test_symbolic_mindist.py b/aeon/distances/tests/test_symbolic_mindist.py
index 6aa518db..197a9dbb 100644
--- a/aeon/distances/tests/test_symbolic_mindist.py
+++ b/aeon/distances/tests/test_symbolic_mindist.py
@@ -4,10 +4,10 @@ import numpy as np
 from scipy.stats import zscore
 
 from aeon.datasets import load_unit_test
-from aeon.distances._dft_sfa_mindist import dft_sfa_mindist
-from aeon.distances._paa_sax_mindist import paa_sax_mindist
-from aeon.distances._sax_mindist import sax_mindist
-from aeon.distances._sfa_mindist import sfa_mindist
+from aeon.distances.mindist._dft_sfa import mindist_dft_sfa_distance
+from aeon.distances.mindist._paa_sax import mindist_paa_sax_distance
+from aeon.distances.mindist._sax import mindist_sax_distance
+from aeon.distances.mindist._sfa import mindist_sfa_distance
 from aeon.transformations.collection.dictionary_based import SAX, SFA, SFAFast
 
 
@@ -32,12 +32,12 @@ def test_sax_mindist():
         Y = X_test[i].reshape(1, -1)
 
         # SAX Min-Distance
-        mindist_sax = sax_mindist(
+        mindist_sax = mindist_sax_distance(
             SAX_train[i], SAX_test[i], SAX_transform.breakpoints, X_train.shape[-1]
         )
 
         # SAX-PAA Min-Distance
-        mindist_paa_sax = paa_sax_mindist(
+        mindist_paa_sax = mindist_paa_sax_distance(
             PAA_train[i], SAX_test[i], SAX_transform.breakpoints, X_train.shape[-1]
         )
 
@@ -95,12 +95,12 @@ def test_sfa_mindist():
             Y = X_test[i].reshape(1, -1)
 
             # SFA Min-Distance
-            mindist_sfa = sfa_mindist(
+            mindist_sfa = mindist_sfa_distance(
                 X_train_words[i], Y_train_words[i], sfa.breakpoints
             )
 
             # DFT-SFA Min-Distance
-            mindist_dft_sfa = dft_sfa_mindist(
+            mindist_dft_sfa = mindist_dft_sfa_distance(
                 SFA_train_dfts[i], Y_train_words[i], sfa.breakpoints
             )