Repository: sktime/sktime
Pull request #6300 (2024-04-14 18:53:33)

[DOC] author credits to `pycatch22` authors, fix missing documentation page
With increased visibility of the authors field in the docs (e.g., in the reworked [estimator overview](https://www.sktime.net/en/latest/estimator_overview.html)), we should make sure it properly reflects contribution. Also see #5938.

This adds upstream authors to the author field of the `pycatch22` facing transformation, and gives clearer credit to `pycatch22` in the docstring by naming it.

It also appears that the estimator was never added to the public documentation page, and only the copy/reimplementation was visible there - I apologize for that, this dates back to old history of `sktime`, and was certainly not intentional on my part.

The author credits add @benfulcher and @jmoo2880. The maintainer tag had @benfulcher, so based on recent contribution activity I added @jmoo2880. Please correct me if this assumption of co-maintainership is wrong.

benfulcher: @jmoo2880 has been helping with documentation. I think it's fair to list him as a maintainer. Thanks for reaching out and for all you do with this awesome package.

Patch:
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 5f567c577..264884c1d 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2774,6 +2774,26 @@
         "code",
         "doc"
       ]
+    },
+    {
+      "login": "toandaominh1997",
+      "name": "Henry Dao",
+      "avatar_url": "https://avatars.githubusercontent.com/u/18400648?v=4",
+      "profile": "https://github.com/toandaominh1997",
+      "contributions": [
+        "bug",
+        "code",
+        "test"
+      ]
+    },
+    {
+      "login": "slavik57",
+      "name": "Slava Shpitalny",
+      "avatar_url": "https://avatars.githubusercontent.com/u/6184997?v=4",
+      "profile": "https://github.com/slavik57",
+      "contributions": [
+        "maintenance"
+      ]
     }
   ]
 }
diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml
index 4f40c1f68..c419d0ebb 100644
--- a/.github/workflows/wheels.yml
+++ b/.github/workflows/wheels.yml
@@ -34,7 +34,7 @@ jobs:
     strategy:
       fail-fast: false  # to not fail all combinations if just one fail
       matrix:
-        os: [ubuntu-latest, macos-latest]
+        os: [ubuntu-latest, macos-13]
         python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
 
     steps:
diff --git a/.gitignore b/.gitignore
index e8697076d..032dc5197 100644
--- a/.gitignore
+++ b/.gitignore
@@ -168,3 +168,5 @@ examples/local/
 
 # py-spy profiler output
 profile.svg
+test_output/*
+mlruns/*
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index dc04d8860..1a34e960e 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -6,7 +6,7 @@ Contributors
 <!-- Please add your badges to .all-contibutorsrc -->
 
 <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-271-orange.svg)](#contributors)
+[![All Contributors](https://img.shields.io/badge/all_contributors-274-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!
@@ -132,14 +132,15 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/BensHamza"><img src="https://avatars.githubusercontent.com/u/96446862?v=4?s=100" width="100px;" alt="Hamza Benslimane"/><br /><sub><b>Hamza Benslimane</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3ABensHamza" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=BensHamza" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hazrulakmal"><img src="https://avatars.githubusercontent.com/u/24774385?v=4?s=100" width="100px;" alt="Hazrul Akmal"/><br /><sub><b>Hazrul Akmal</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=hazrulakmal" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=hazrulakmal" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Ahazrulakmal" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=hazrulakmal" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hliebert"><img src="https://avatars.githubusercontent.com/u/20834265?s=100" width="100px;" alt="Helge Liebert"/><br /><sub><b>Helge Liebert</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Ahliebert" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=hliebert" title="Code">💻</a></td>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/toandaominh1997"><img src="https://avatars.githubusercontent.com/u/18400648?v=4?s=100" width="100px;" alt="Henry Dao"/><br /><sub><b>Henry Dao</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Atoandaominh1997" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=toandaominh1997" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=toandaominh1997" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/huayiwei/"><img src="https://avatars3.githubusercontent.com/u/22870735?v=4?s=100" width="100px;" 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="11.11%"><a href="https://github.com/ianspektor"><img src="https://avatars.githubusercontent.com/u/49082859?v=4?s=100" width="100px;" alt="Ian Spektor"/><br /><sub><b>Ian Spektor</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ianspektor" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=ianspektor" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Ifeanyi30"><img src="https://avatars.githubusercontent.com/u/49926145?v=4?s=100" width="100px;" alt="Ifeanyi30"/><br /><sub><b>Ifeanyi30</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Ifeanyi30" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/iljamaurer"><img src="https://avatars.githubusercontent.com/u/45882103?v=4?s=100" width="100px;" alt="Ilja Maurer"/><br /><sub><b>Ilja Maurer</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=iljamaurer" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/IlyasMoutawwakil"><img src="https://avatars.githubusercontent.com/IlyasMoutawwakil?s=100" width="100px;" alt="Ilyas Moutawwakil"/><br /><sub><b>Ilyas Moutawwakil</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=IlyasMoutawwakil" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=IlyasMoutawwakil" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/ireoluwatomiwa-sanusi/"><img src="https://avatars.githubusercontent.com/u/61966277?v=4?s=100" width="100px;" alt="Ireoluwatomiwa"/><br /><sub><b>Ireoluwatomiwa</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Tomiiwa" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/ireoluwatomiwa-sanusi/"><img src="https://avatars.githubusercontent.com/u/61966277?v=4?s=100" width="100px;" alt="Ireoluwatomiwa"/><br /><sub><b>Ireoluwatomiwa</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Tomiiwa" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ishannangia001"><img src="https://avatars.githubusercontent.com/u/29480389?v=4?s=100" width="100px;" alt="Ishan Nangia"/><br /><sub><b>Ishan Nangia</b></sub></a><br /><a href="#ideas-ishannangia001" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jnrusson1"><img src="https://avatars.githubusercontent.com/u/51986332?v=4?s=100" width="100px;" alt="Jack Russon"/><br /><sub><b>Jack Russon</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=jnrusson1" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com/"><img src="https://avatars0.githubusercontent.com/u/44509982?v=4?s=100" width="100px;" alt="James Large"/><br /><sub><b>James Large</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=James-Large" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=James-Large" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/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>
@@ -148,9 +149,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jasmineliaw"><img src="?s=100" width="100px;" alt="Jasmine Liaw"/><br /><sub><b>Jasmine Liaw</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=jasmineliaw" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars1.githubusercontent.com/u/38794632?v=4?s=100" width="100px;" alt="Jason Lines"/><br /><sub><b>Jason Lines</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=jasonlines" title="Code">💻</a> <a href="#business-jasonlines" title="Business development">💼</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/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="11.11%"><a href="https://github.com/whackteachers"><img src="https://avatars0.githubusercontent.com/u/33785383?v=4?s=100" width="100px;" alt="Jason Pong"/><br /><sub><b>Jason Pong</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=whackteachers" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=whackteachers" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/mateuja"><img src="https://avatars.githubusercontent.com/mateuja?s=100" width="100px;" alt="Jaume Mateu"/><br /><sub><b>Jaume Mateu</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mateuja" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/mateuja"><img src="https://avatars.githubusercontent.com/mateuja?s=100" width="100px;" alt="Jaume Mateu"/><br /><sub><b>Jaume Mateu</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mateuja" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/javiber"><img src="https://avatars.githubusercontent.com/u/3588715?v=4?s=100" width="100px;" alt="Javier Berneche"/><br /><sub><b>Javier Berneche</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=javiber" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=javiber" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/pirnerjonas"><img src="https://avatars.githubusercontent.com/u/48887249?v=4?s=100" width="100px;" alt="Jonas Pirner"/><br /><sub><b>Jonas Pirner</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=pirnerjonas" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/JonathanBechtel"><img src="https://avatars.githubusercontent.com/u/481696?v=4?s=100" width="100px;" alt="JonathanBechtel"/><br /><sub><b>JonathanBechtel</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=JonathanBechtel" title="Code">💻</a> <a href="#ideas-JonathanBechtel" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/commits?author=JonathanBechtel" title="Tests">⚠️</a></td>
@@ -159,9 +160,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/julia-kraus"><img src="https://avatars.githubusercontent.com/julia-kraus?s=100" width="100px;" alt="Julia Kraus"/><br /><sub><b>Julia Kraus</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=julia-kraus" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=julia-kraus" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=julia-kraus" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jelc53"><img src="?s=100" width="100px;" alt="Julian Cooper"/><br /><sub><b>Julian Cooper</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=jelc53" title="Code">💻</a> <a href="#ideas-jelc53" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/julnow"><img src="https://avatars.githubusercontent.com/u/21206185?v=4?s=100" width="100px;" alt="Julian Nowak"/><br /><sub><b>Julian Nowak</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Ajulnow" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=julnow" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/julianarn/"><img src="https://avatars.githubusercontent.com/u/19613567?v=4?s=100" width="100px;" alt="Juliana"/><br /><sub><b>Juliana</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=julramos" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/julianarn/"><img src="https://avatars.githubusercontent.com/u/19613567?v=4?s=100" width="100px;" alt="Juliana"/><br /><sub><b>Juliana</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=julramos" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.justinshenk.com/"><img src="https://avatars.githubusercontent.com/u/10270308?v=4?s=100" width="100px;" alt="Justin Shenk"/><br /><sub><b>Justin Shenk</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=justinshenk" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kcc-lion"><img src="?s=100" width="100px;" alt="Kai Lion"/><br /><sub><b>Kai Lion</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=kcc-lion" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=kcc-lion" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/commits?author=kcc-lion" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kanand77"><img src="https://avatars.githubusercontent.com/kanand77?s=100" width="100px;" alt="Kavin Anand"/><br /><sub><b>Kavin Anand</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=kanand77" title="Documentation">📖</a></td>
@@ -170,9 +171,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://whitakerlab.github.io/"><img src="https://avatars1.githubusercontent.com/u/3626306?v=4?s=100" width="100px;" alt="Kirstie Whitaker"/><br /><sub><b>Kirstie Whitaker</b></sub></a><br /><a href="#ideas-KirstieJane" title="Ideas, Planning, & Feedback">🤔</a> <a href="#fundingFinding-KirstieJane" title="Funding Finding">🔍</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kishmanani"><img src="https://avatars.githubusercontent.com/u/30973056?v=4?s=100" width="100px;" alt="Kishan Manani"/><br /><sub><b>Kishan Manani</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=KishManani" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=KishManani" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=KishManani" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/issues?q=author%3AKishManani" title="Bug reports">🐛</a> <a href="#ideas-KishManani" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/krumeto"><img src="https://avatars3.githubusercontent.com/u/11272436?v=4?s=100" width="100px;" alt="Krum Arnaudov"/><br /><sub><b>Krum Arnaudov</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Akrumeto" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=krumeto" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/koralturkk"><img src="https://avatars2.githubusercontent.com/u/18037789?s=460&v=4?s=100" width="100px;" alt="Kutay Koralturk"/><br /><sub><b>Kutay Koralturk</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=koralturkk" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Akoralturkk" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/koralturkk"><img src="https://avatars2.githubusercontent.com/u/18037789?s=460&v=4?s=100" width="100px;" alt="Kutay Koralturk"/><br /><sub><b>Kutay Koralturk</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=koralturkk" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Akoralturkk" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ltsaprounis"><img src="https://avatars.githubusercontent.com/u/64217214?v=4?s=100" width="100px;" alt="Leonidas Tsaprounis"/><br /><sub><b>Leonidas Tsaprounis</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ltsaprounis" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Altsaprounis" title="Bug reports">🐛</a> <a href="#mentoring-ltsaprounis" title="Mentoring">🧑‍🏫</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Altsaprounis" title="Reviewed Pull Requests">👀</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lielleravid"><img src="https://avatars.githubusercontent.com/u/37774194?v=4?s=100" width="100px;" alt="Lielle Ravid"/><br /><sub><b>Lielle Ravid</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=lielleravid" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=lielleravid" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/chillerobscuro"><img src="https://avatars.githubusercontent.com/u/5232872?v=4?s=100" width="100px;" alt="Logan Duffy"/><br /><sub><b>Logan Duffy</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=chillerobscuro" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=chillerobscuro" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=chillerobscuro" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Achillerobscuro" title="Bug reports">🐛</a> <a href="#ideas-chillerobscuro" title="Ideas, Planning, & Feedback">🤔</a></td>
@@ -181,9 +182,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Lovkush-A"><img src="https://avatars.githubusercontent.com/u/25344832?v=4?s=100" width="100px;" alt="Lovkush"/><br /><sub><b>Lovkush</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Lovkush-A" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Lovkush-A" title="Tests">⚠️</a> <a href="#ideas-Lovkush-A" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-Lovkush-A" title="Mentoring">🧑‍🏫</a> <a href="#projectManagement-Lovkush-A" title="Project Management">📆</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/luca-miniati"><img src="https://avatars.githubusercontent.com/u/87467600?v=4?s=100" width="100px;" alt="Luca Miniati"/><br /><sub><b>Luca Miniati</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=luca-miniati" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=luca-miniati" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lbventura"><img src="https://avatars.githubusercontent.com/u/68004282?s=96&v=4?s=100" width="100px;" alt="Luis Ventura"/><br /><sub><b>Luis Ventura</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=lbventura" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/luiszugasti"><img src="https://avatars.githubusercontent.com/u/11198457?s=460&u=0645b72683e491824aca16db9702f1d3eb990389&v=4?s=100" width="100px;" alt="Luis Zugasti"/><br /><sub><b>Luis Zugasti</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=luiszugasti" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/luiszugasti"><img src="https://avatars.githubusercontent.com/u/11198457?s=460&u=0645b72683e491824aca16db9702f1d3eb990389&v=4?s=100" width="100px;" alt="Luis Zugasti"/><br /><sub><b>Luis Zugasti</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=luiszugasti" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lmmentel"><img src="https://avatars.githubusercontent.com/u/8989838?v=4?s=100" width="100px;" alt="Lukasz Mentel"/><br /><sub><b>Lukasz Mentel</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=lmmentel" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=lmmentel" title="Documentation">📖</a> <a href="#infra-lmmentel" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/sktime/sktime/commits?author=lmmentel" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/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="11.11%"><a href="https://github.com/manuel-munoz-aguirre"><img src="https://avatars.githubusercontent.com/u/5576458?v=4?s=100" width="100px;" alt="Manuel Muñoz Aguirre"/><br /><sub><b>Manuel Muñoz Aguirre</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=manuel-munoz-aguirre" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/marrov"><img src="https://avatars.githubusercontent.com/u/54272586?v=4?s=100" width="100px;" alt="Marc Rovira"/><br /><sub><b>Marc Rovira</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=marrov" title="Documentation">📖</a></td>
@@ -192,9 +193,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/margaret-gorlin/"><img src="?s=100" width="100px;" alt="Margaret Gorlin"/><br /><sub><b>Margaret Gorlin</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mgorlin" title="Code">💻</a> <a href="#example-mgorlin" title="Examples">💡</a> <a href="https://github.com/sktime/sktime/commits?author=mgorlin" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/mariamjabara"><img src="?s=100" width="100px;" alt="Mariam Jabara"/><br /><sub><b>Mariam Jabara</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mariamjabara" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://twitter.com/marielli"><img src="https://avatars2.githubusercontent.com/u/13499809?v=4?s=100" width="100px;" alt="Marielle"/><br /><sub><b>Marielle</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=marielledado" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=marielledado" title="Code">💻</a> <a href="#ideas-marielledado" title="Ideas, Planning, & Feedback">🤔</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/mloning"><img src="https://avatars3.githubusercontent.com/u/21020482?v=4?s=100" width="100px;" alt="Markus Löning"/><br /><sub><b>Markus Löning</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mloning" title="Code">💻</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/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/sktime/sktime/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/sktime/sktime/commits?author=mloning" title="Documentation">📖</a> <a href="#design-mloning" title="Design">🎨</a> <a href="#eventOrganizing-mloning" title="Event Organizing">📋</a> <a href="#fundingFinding-mloning" title="Funding Finding">🔍</a> <a href="#ideas-mloning" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-mloning" title="Project Management">📆</a> <a href="#question-mloning" title="Answering Questions">💬</a> <a href="#talk-mloning" title="Talks">📢</a> <a href="#mentoring-mloning" title="Mentoring">🧑‍🏫</a> <a href="#video-mloning" title="Videos">📹</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/mloning"><img src="https://avatars3.githubusercontent.com/u/21020482?v=4?s=100" width="100px;" alt="Markus Löning"/><br /><sub><b>Markus Löning</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mloning" title="Code">💻</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/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/sktime/sktime/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/sktime/sktime/commits?author=mloning" title="Documentation">📖</a> <a href="#design-mloning" title="Design">🎨</a> <a href="#eventOrganizing-mloning" title="Event Organizing">📋</a> <a href="#fundingFinding-mloning" title="Funding Finding">🔍</a> <a href="#ideas-mloning" title="Ideas, Planning, & Feedback">🤔</a> <a href="#projectManagement-mloning" title="Project Management">📆</a> <a href="#question-mloning" title="Answering Questions">💬</a> <a href="#talk-mloning" title="Talks">📢</a> <a href="#mentoring-mloning" title="Mentoring">🧑‍🏫</a> <a href="#video-mloning" title="Videos">📹</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/martin-walter-1a33b3114/"><img src="https://avatars0.githubusercontent.com/u/29627036?v=4?s=100" width="100px;" alt="Martin Walter"/><br /><sub><b>Martin Walter</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=aiwalter" title="Code">💻</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Aaiwalter" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sktime/sktime/commits?author=aiwalter" title="Documentation">📖</a> <a href="#talk-aiwalter" title="Talks">📢</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/martinagvilas"><img src="https://avatars2.githubusercontent.com/u/37339384?v=4?s=100" width="100px;" alt="Martina G. Vilas"/><br /><sub><b>Martina G. Vilas</b></sub></a><br /><a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Amartinagvilas" title="Reviewed Pull Requests">👀</a> <a href="#ideas-martinagvilas" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MCRE-BE"><img src="https://avatars.githubusercontent.com/u/99316631?s=100" width="100px;" alt="Mathias Creemers"/><br /><sub><b>Mathias Creemers</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AMCRE-BE" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=MCRE-BE" title="Code">💻</a></td>
@@ -203,9 +204,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/maxfrohlich/"><img src="https://avatars.githubusercontent.com/u/16393653?v=4?s=100" width="100px;" alt="Max Frohlich"/><br /><sub><b>Max Frohlich</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ninedigits" title="Code">💻</a> <a href="#ideas-ninedigits" title="Ideas, Planning, & Feedback">🤔</a> <a href="#maintenance-ninedigits" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/solen0id"><img src="https://avatars.githubusercontent.com/u/20767606?v=4?s=100" width="100px;" alt="Max Patzelt"/><br /><sub><b>Max Patzelt</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=solen0id" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/meraldoantonio"><img src="https://avatars.githubusercontent.com/u/37468543?v=4?s=100" width="100px;" alt="Meraldo Antonio"/><br /><sub><b>Meraldo Antonio</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=meraldoantonio" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Hephaest"><img src="https://avatars2.githubusercontent.com/u/37981444?v=4?s=100" width="100px;" alt="Miao Cai"/><br /><sub><b>Miao Cai</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AHephaest" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=Hephaest" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Hephaest"><img src="https://avatars2.githubusercontent.com/u/37981444?v=4?s=100" width="100px;" alt="Miao Cai"/><br /><sub><b>Miao Cai</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AHephaest" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=Hephaest" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="michaelfeil.eu"><img src="https://avatars.githubusercontent.com/u/63565275?v=4?s=100" width="100px;" alt="Michael Feil"/><br /><sub><b>Michael Feil</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=michaelfeil" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=michaelfeil" title="Tests">⚠️</a> <a href="#ideas-michaelfeil" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/mgazian000"><img src="https://avatars.githubusercontent.com/mgazian000?s=100" width="100px;" alt="Michael Gaziani"/><br /><sub><b>Michael Gaziani</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mgazian000" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MMTrooper"><img src="https://avatars.githubusercontent.com/u/89777534?v=4?s=100" width="100px;" alt="Michael Mwimali"/><br /><sub><b>Michael Mwimali</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=MMTrooper" title="Code">💻</a></td>
@@ -214,9 +215,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MBristle"><img src="https://avatars.githubusercontent.com/MBristle?s=100" width="100px;" alt="Mirko Bristle"/><br /><sub><b>Mirko Bristle</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AMBristle" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=MBristle" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/commits?author=MBristle" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://mo-saif.github.io/"><img src="https://avatars0.githubusercontent.com/u/27867617?v=4?s=100" width="100px;" alt="Mohammed Saif Kazamel"/><br /><sub><b>Mohammed Saif Kazamel</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AMo-Saif" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://moradabaz.github.io/"><img src="https://avatars.githubusercontent.com/u/29915156?v=4?s=100" width="100px;" alt="Morad :)"/><br /><sub><b>Morad :)</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=moradabaz" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=moradabaz" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/commits?author=moradabaz" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Multivin12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=100" width="100px;" alt="Multivin12"/><br /><sub><b>Multivin12</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Multivin12" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Multivin12" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Multivin12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=100" width="100px;" alt="Multivin12"/><br /><sub><b>Multivin12</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Multivin12" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Multivin12" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/marcio55afr"><img src="https://avatars.githubusercontent.com/u/42646282?v=4?s=100" width="100px;" alt="Márcio A. Freitas Jr"/><br /><sub><b>Márcio A. Freitas Jr</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=marcio55afr" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/niekvanderlaan"><img src="https://avatars.githubusercontent.com/u/9962825?v=4?s=100" width="100px;" alt="Niek van der Laan"/><br /><sub><b>Niek van der Laan</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=niekvanderlaan" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ngupta23"><img src="https://avatars0.githubusercontent.com/u/33585645?v=4?s=100" width="100px;" alt="Nikhil Gupta"/><br /><sub><b>Nikhil Gupta</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ngupta23" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Angupta23" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=ngupta23" title="Documentation">📖</a></td>
@@ -225,9 +226,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ninfueng"><img src="https://avatars2.githubusercontent.com/u/28499769?v=4?s=100" width="100px;" alt="Ninnart Fuengfusin"/><br /><sub><b>Ninnart Fuengfusin</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ninfueng" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/NoaBenAmi"><img src="https://avatars.githubusercontent.com/u/37590002?v=4?s=100" width="100px;" alt="Noa Ben Ami"/><br /><sub><b>Noa Ben Ami</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=NoaBenAmi" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=NoaBenAmi" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/commits?author=NoaBenAmi" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/shchur"><img src="https://avatars.githubusercontent.com/u/6944857?v=4?s=100" width="100px;" alt="Oleksandr Shchur"/><br /><sub><b>Oleksandr Shchur</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Ashchur" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=shchur" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/kachayev"><img src="https://avatars.githubusercontent.com/u/485647?v=4?s=100" width="100px;" alt="Oleksii Kachaiev"/><br /><sub><b>Oleksii Kachaiev</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=kachayev" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=kachayev" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/kachayev"><img src="https://avatars.githubusercontent.com/u/485647?v=4?s=100" width="100px;" alt="Oleksii Kachaiev"/><br /><sub><b>Oleksii Kachaiev</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=kachayev" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=kachayev" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/olivermatthews"><img src="https://avatars.githubusercontent.com/u/31141490?v=4?s=100" width="100px;" alt="Oliver Matthews"/><br /><sub><b>Oliver Matthews</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=OliverMatthews" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/prockenschaub"><img src="https://avatars0.githubusercontent.com/u/15381732?v=4?s=100" width="100px;" alt="Patrick Rockenschaub"/><br /><sub><b>Patrick Rockenschaub</b></sub></a><br /><a href="https://github.com/sktime/sktime/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/sktime/sktime/commits?author=prockenschaub" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www2.informatik.hu-berlin.de/~schaefpa/"><img src="https://avatars0.githubusercontent.com/u/7783034?v=4?s=100" width="100px;" alt="Patrick Schäfer"/><br /><sub><b>Patrick Schäfer</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=patrickzib" title="Code">💻</a> <a href="#tutorial-patrickzib" title="Tutorials">✅</a></td>
@@ -236,9 +237,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://www.imes.uni-hannover.de/de/institut/team/m-sc-karl-philipp-kortmann/"><img src="https://avatars.githubusercontent.com/u/20466981?v=4?s=100" width="100px;" alt="Philipp Kortmann"/><br /><sub><b>Philipp Kortmann</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=MrPr3ntice" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=MrPr3ntice" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Piyush1729"><img src="https://avatars2.githubusercontent.com/u/64950012?v=4?s=100" width="100px;" alt="Piyush Gade"/><br /><sub><b>Piyush Gade</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Piyush1729" title="Code">💻</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3APiyush1729" title="Reviewed Pull Requests">👀</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/rahulporuri"><img src="https://avatars.githubusercontent.com/u/1926457?v=4?s=100" width="100px;" alt="Poruri Sai Rahul"/><br /><sub><b>Poruri Sai Rahul</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=rahulporuri" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/pranav-prajapati-a5b413226/"><img src="https://avatars.githubusercontent.com/u/94780581?v=4?s=100" width="100px;" alt="Pranav Prajapati"/><br /><sub><b>Pranav Prajapati</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=pranavvp16" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=pranavvp16" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Apranavvp16" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/pranav-prajapati-a5b413226/"><img src="https://avatars.githubusercontent.com/u/94780581?v=4?s=100" width="100px;" alt="Pranav Prajapati"/><br /><sub><b>Pranav Prajapati</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=pranavvp16" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=pranavvp16" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Apranavvp16" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/pul95"><img src="https://avatars.githubusercontent.com/pul95?s=100" width="100px;" alt="Pulkit Verma"/><br /><sub><b>Pulkit Verma</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=pul95" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Quaterion"><img src="https://avatars2.githubusercontent.com/u/23200273?v=4?s=100" width="100px;" alt="Quaterion"/><br /><sub><b>Quaterion</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AQuaterion" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/rakshitha123"><img src="https://avatars.githubusercontent.com/u/7654679?v=4?s=100" width="100px;" alt="Rakshitha Godahewa"/><br /><sub><b>Rakshitha Godahewa</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=rakshitha123" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=rakshitha123" title="Documentation">📖</a></td>
@@ -247,9 +248,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/wolph"><img src="?s=100" width="100px;" 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="11.11%"><a href="https://github.com/Ris-Bali"><img src="https://avatars.githubusercontent.com/u/81592570?v=4?s=100" width="100px;" alt="Rishabh Bali"/><br /><sub><b>Rishabh Bali</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Ris-Bali" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/RishiKumarRay"><img src="https://avatars.githubusercontent.com/u/87641376?v=4?s=100" width="100px;" alt="Rishi Kumar Ray"/><br /><sub><b>Rishi Kumar Ray</b></sub></a><br /><a href="#infra-RishiKumarRay" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
-      <td align="center" valign="top" width="11.11%"><img src="https://avatars.githubusercontent.com/u/55790848?v=4?s=100" width="100px;" alt="Riya Elizabeth John"/><br /><sub><b>Riya Elizabeth John</b></sub><br /><a href="https://github.com/sktime/sktime/commits?author=Riyabelle25" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><img src="https://avatars.githubusercontent.com/u/55790848?v=4?s=100" width="100px;" alt="Riya Elizabeth John"/><br /><sub><b>Riya Elizabeth John</b></sub><br /><a href="https://github.com/sktime/sktime/commits?author=Riyabelle25" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Riyabelle25"><img src="https://avatars.githubusercontent.com/u/55790848?v=4?s=100" width="100px;" alt="Riya Elizabeth John"/><br /><sub><b>Riya Elizabeth John</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Riyabelle25" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Riyabelle25" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/commits?author=Riyabelle25" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/romanlutz/"><img src="https://avatars.githubusercontent.com/u/10245648?v=4?s=100" width="100px;" alt="Roman Lutz"/><br /><sub><b>Roman Lutz</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=romanlutz" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ronnie-llamado"><img src="https://avatars.githubusercontent.com/ronnie-llamado?s=100" width="100px;" alt="Ronnie Llamado"/><br /><sub><b>Ronnie Llamado</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ronnie-llamado" title="Documentation">📖</a></td>
@@ -258,9 +259,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://sajay.online"><img src="https://avatars2.githubusercontent.com/u/25329624?v=4?s=100" width="100px;" alt="Sajaysurya Ganesh"/><br /><sub><b>Sajaysurya Ganesh</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sajaysurya" title="Code">💻</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/commits?author=sajaysurya" title="Tests">⚠️</a> <a href="#tutorial-sajaysurya" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/SamiAlavi"><img src="https://avatars.githubusercontent.com/u/32700289?v=4?s=100" width="100px;" alt="Sami Alavi"/><br /><sub><b>Sami Alavi</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=SamiAlavi" title="Code">💻</a> <a href="#maintenance-SamiAlavi" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sanjayk0508"><img src="https://avatars.githubusercontent.com/u/102804548?v=4?s=100" width="100px;" alt="Sanjay Kumar"/><br /><sub><b>Sanjay Kumar</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sanjayk0508" title="Tests">⚠️</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/deysanjeeb"><img src="https://avatars.githubusercontent.com/u/39940629?v=4?s=100" width="100px;" alt="Sanjeeb Dey"/><br /><sub><b>Sanjeeb Dey</b></sub></a><br /><a href="#maintenance-deysanjeeb" title="Maintenance">🚧</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/deysanjeeb"><img src="https://avatars.githubusercontent.com/u/39940629?v=4?s=100" width="100px;" alt="Sanjeeb Dey"/><br /><sub><b>Sanjeeb Dey</b></sub></a><br /><a href="#maintenance-deysanjeeb" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sssilvar"><img src="https://avatars.githubusercontent.com/u/16252054?v=4?s=100" width="100px;" alt="Santiago Smith Silva"/><br /><sub><b>Santiago Smith Silva</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sssilvar" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Saransh-cpp"><img src="https://avatars.githubusercontent.com/u/74055102?v=4?s=100" width="100px;" alt="Saransh Chopra"/><br /><sub><b>Saransh Chopra</b></sub></a><br /><a href="https://github.com/sktime/sktime/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="11.11%"><a href="https://www.linkedin.com/in/satya-pattnaik-77a430144/"><img src="https://avatars.githubusercontent.com/u/22102468?v=4?s=100" width="100px;" alt="Satya Prakash Pattnaik"/><br /><sub><b>Satya Prakash Pattnaik</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=satya-pattnaik" title="Documentation">📖</a></td>
@@ -269,86 +270,88 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/shagn"><img src="https://avatars.githubusercontent.com/u/16029092?v=4?s=100" width="100px;" alt="Sebastian Hagn"/><br /><sub><b>Sebastian Hagn</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=shagn" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ShivamPathak99"><img src="https://avatars.githubusercontent.com/u/98941325?s=400&v=4?s=100" width="100px;" alt="Shivam Pathak"/><br /><sub><b>Shivam Pathak</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ShivamPathak99" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/AurumnPegasus"><img src="https://avatars.githubusercontent.com/u/54315149?v=4?s=100" width="100px;" alt="Shivansh Subramanian"/><br /><sub><b>Shivansh Subramanian</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=AurumnPegasus" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=AurumnPegasus" title="Code">💻</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ShreeshaM07"><img src="https://avatars.githubusercontent.com/u/120820143?s=400&v=4?s=100" width="100px;" alt="Shreesha M"/><br /><sub><b>Shreesha M</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AShreeshaM07" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=ShreeshaM07" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=ShreeshaM07" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><img src="https://gravatar.com/avatar/cbdbaac712ae282d730cd3028e862d45?s=400&d=robohash&r=x?s=100" width="100px;" alt="Shlok Sabarwal"/><br /><sub><b>Shlok Sabarwal</b></sub><br /><a href="https://github.com/sktime/sktime/commits?author=ssabarwal" title="Code">💻</a></td>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/ShreeshaM07"><img src="https://avatars.githubusercontent.com/u/120820143?s=400&v=4?s=100" width="100px;" alt="Shreesha M"/><br /><sub><b>Shreesha M</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AShreeshaM07" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=ShreeshaM07" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=ShreeshaM07" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sbuse"><img src="https://avatars.githubusercontent.com/u/24408707?v=4?s=100" width="100px;" alt="Simon B."/><br /><sub><b>Simon B.</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sbuse" title="Code">💻</a></td>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/slavik57"><img src="https://avatars.githubusercontent.com/u/6184997?v=4?s=100" width="100px;" alt="Slava Shpitalny"/><br /><sub><b>Slava Shpitalny</b></sub></a><br /><a href="#maintenance-slavik57" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/solomon-botchway-a1383821b/"><img src="https://avatars.githubusercontent.com/u/62394255?v=4?s=100" width="100px;" alt="Solomon Botchway"/><br /><sub><b>Solomon Botchway</b></sub></a><br /><a href="#maintenance-snnbotchway" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/khrapovs"><img src="https://avatars.githubusercontent.com/u/3774663?v=4?s=100" width="100px;" alt="Stanislav Khrapov"/><br /><sub><b>Stanislav Khrapov</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=khrapovs" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/steenrotsman"><img src="https://avatars.githubusercontent.com/u/78110080?s=400&v=4?s=100" width="100px;" alt="Stijn J. Rotman"/><br /><sub><b>Stijn J. Rotman</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=steenrotsman" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=steenrotsman" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/SveaMeyer13"><img src="https://avatars.githubusercontent.com/u/46671894?v=4?s=100" width="100px;" alt="Svea Marie Meyer"/><br /><sub><b>Svea Marie Meyer</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=SveaMeyer13" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=SveaMeyer13" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/TNTran92"><img src="https://avatars.githubusercontent.com/u/55965636?v=4?s=100" width="100px;" alt="TNTran92"/><br /><sub><b>TNTran92</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=TNTran92" title="Code">💻</a></td>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Taise228"><img src="https://avatars.githubusercontent.com/u/95762401?s=400&v=4?s=100" width="100px;" alt="Taisei Yamamoto"/><br /><sub><b>Taisei Yamamoto</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Taise228" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://thayeylolu.github.io/portfolio/"><img src="https://avatars.githubusercontent.com/u/13348874?v=4?s=100" width="100px;" alt="Taiwo Owoseni"/><br /><sub><b>Taiwo Owoseni</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=thayeylolu" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/lnthach"><img src="https://avatars0.githubusercontent.com/u/7788363?v=4?s=100" width="100px;" alt="Thach Le Nguyen"/><br /><sub><b>Thach Le Nguyen</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=lnthach" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=lnthach" title="Tests">⚠️</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/mathco-wf"><img src="https://avatars.githubusercontent.com/mathco-wf?s=100" width="100px;" alt="TheMathcompay Widget Factory Team"/><br /><sub><b>TheMathcompay Widget Factory Team</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=mathco-wf" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tombh"><img src="https://avatars.githubusercontent.com/u/160835?s=80&v=4?s=100" width="100px;" alt="Thomas Buckley-Houston"/><br /><sub><b>Thomas Buckley-Houston</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Atombh" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xxl4tomxu98"><img src="https://avatars.githubusercontent.com/u/62292177?s=40&v=4?s=100" width="100px;" alt="Tom Xu"/><br /><sub><b>Tom Xu</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=xxl4tomxu98" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=xxl4tomxu98" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tpvasconcelos"><img src="https://avatars.githubusercontent.com/u/17701527?v=4?s=100" width="100px;" alt="Tomas P. de Vasconcelos"/><br /><sub><b>Tomas P. de Vasconcelos</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Atpvasconcelos" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=tpvasconcelos" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tch"><img src="https://avatars3.githubusercontent.com/u/184076?v=4?s=100" width="100px;" alt="Tomasz Chodakowski"/><br /><sub><b>Tomasz Chodakowski</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=tch" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=tch" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Atch" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars1.githubusercontent.com/u/9594042?v=4?s=100" width="100px;" alt="Tony Bagnall"/><br /><sub><b>Tony Bagnall</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=TonyBagnall" title="Code">💻</a> <a href="#business-TonyBagnall" title="Business development">💼</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/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>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/utsavcoding"><img src="https://avatars3.githubusercontent.com/u/55446385?v=4?s=100" width="100px;" alt="Utsav Kumar Tiwari"/><br /><sub><b>Utsav Kumar Tiwari</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=utsavcoding" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=utsavcoding" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vandit98"><img src="https://avatars.githubusercontent.com/u/91458535?v=4?s=100" width="100px;" alt="Vandit Tyagi"/><br /><sub><b>Vandit Tyagi</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vandit98" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Vasudeva-bit"><img src="https://avatars.githubusercontent.com/u/70791259?v=4?s=100" width="100px;" alt="Vasudeva Kilaru"/><br /><sub><b>Vasudeva Kilaru</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Vasudeva-bit" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Vasudeva-bit" title="Documentation">📖</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/victordremov"><img src="https://avatars.githubusercontent.com/u/32140716?s=100" width="100px;" alt="Viktor Dremov"/><br /><sub><b>Viktor Dremov</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=victordremov" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ViktorKaz"><img src="https://avatars0.githubusercontent.com/u/33499138?v=4?s=100" width="100px;" alt="ViktorKaz"/><br /><sub><b>ViktorKaz</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ViktorKaz" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=ViktorKaz" title="Documentation">📖</a> <a href="#design-ViktorKaz" title="Design">🎨</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vnicholson1"><img src="?s=100" width="100px;" alt="Vincent Nicholson"/><br /><sub><b>Vincent Nicholson</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vnicholson1" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/VyomkeshVyas"><img src="?s=100" width="100px;" alt="Vyomkesh Vyas"/><br /><sub><b>Vyomkesh Vyas</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=VyomkeshVyas" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=VyomkeshVyas" title="Documentation">📖</a> <a href="#example-VyomkeshVyas" title="Examples">💡</a> <a href="https://github.com/sktime/sktime/commits?author=VyomkeshVyas" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/wayneadams"><img src="https://avatars.githubusercontent.com/u/15034841?s=400&u=d717e9945910bcc844c5e64cd56d570c6cc4e8e6&v=4?s=100" width="100px;" alt="Wayne Adams"/><br /><sub><b>Wayne Adams</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=wayneadams" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/templierw/"><img src="https://github.com/templierw.png?s=100" width="100px;" alt="William Templier"/><br /><sub><b>William Templier</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=templierw" title="Documentation">📖</a></td>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/magittan"><img src="https://avatars0.githubusercontent.com/u/14024202?v=4?s=100" width="100px;" alt="William Zheng"/><br /><sub><b>William Zheng</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=magittan" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=magittan" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Xinyu-Wu-0000"><img src="https://avatars.githubusercontent.com/u/57612792?v=4?s=100" width="100px;" alt="Xinyu Wu"/><br /><sub><b>Xinyu Wu</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AXinyu-Wu-0000" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=Xinyu-Wu-0000" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Xinyu-Wu-0000" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/yairbeer"><img src="https://avatars.githubusercontent.com/yairbeer?s=100" width="100px;" alt="Yair Beer"/><br /><sub><b>Yair Beer</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=yairbeer" title="Code">💻</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/yann-hallouard/"><img src="https://avatars.githubusercontent.com/YHallouard?s=100" width="100px;" alt="Yann Hallouard"/><br /><sub><b>Yann Hallouard</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=YHallouard" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=YHallouard" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MEMEO-PRO"><img src="https://avatars.githubusercontent.com/memeo-pro?s=100" width="100px;" alt="Yash Edake"/><br /><sub><b>Yash Edake</b></sub></a><br /><a href="#maintenance-memeo-pro" title="Maintenance">🚧</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Amemeo-pro" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/YashKhare20"><img src="https://avatars.githubusercontent.com/u/92680366?s=400?s=100" width="100px;" alt="Yash Khare"/><br /><sub><b>Yash Khare</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=YashKhare20" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=YashKhare20" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/yashlamba"><img src="https://avatars.githubusercontent.com/u/44164398?v=4?s=100" width="100px;" alt="Yash Lamba"/><br /><sub><b>Yash Lamba</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=yashlamba" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xuyxu"><img src="https://avatars2.githubusercontent.com/u/22359569?v=4?s=100" width="100px;" alt="Yi-Xuan Xu"/><br /><sub><b>Yi-Xuan Xu</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=xuyxu" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=xuyxu" title="Tests">⚠️</a> <a href="#maintenance-xuyxu" title="Maintenance">🚧</a> <a href="https://github.com/sktime/sktime/commits?author=xuyxu" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sz85512678"><img src="https://avatars.githubusercontent.com/sz85512678?s=100" width="100px;" alt="Zhen Shao"/><br /><sub><b>Zhen Shao</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sz85512678" title="Code">💻</a></td>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ZiyaoWei"><img src="https://avatars.githubusercontent.com/u/940823?v=4?s=100" width="100px;" alt="Ziyao Wei"/><br /><sub><b>Ziyao Wei</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ZiyaoWei" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/aa25desh"><img src="https://avatars1.githubusercontent.com/u/29518290?v=4?s=100" width="100px;" alt="aa25desh"/><br /><sub><b>aa25desh</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=aa25desh" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Aaa25desh" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/abandus"><img src="https://avatars2.githubusercontent.com/u/46486474?v=4?s=100" width="100px;" alt="abandus"/><br /><sub><b>abandus</b></sub></a><br /><a href="#ideas-abandus" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/commits?author=abandus" title="Code">💻</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/adoherty21"><img src="https://avatars.githubusercontent.com/u/52799751?s=400&v=4?s=100" width="100px;" alt="adoherty21"/><br /><sub><b>adoherty21</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Aadoherty21" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/bethrice44"><img src="https://avatars.githubusercontent.com/u/11226988?v=4?s=100" width="100px;" alt="bethrice44"/><br /><sub><b>bethrice44</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Abethrice44" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=bethrice44" title="Code">💻</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Abethrice44" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sktime/sktime/commits?author=bethrice44" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/big-o"><img src="https://avatars1.githubusercontent.com/u/1134151?v=4?s=100" width="100px;" alt="big-o"/><br /><sub><b>big-o</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=big-o" title="Code">💻</a> <a href="https://github.com/sktime/sktime/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/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Abig-o" title="Reviewed Pull Requests">👀</a> <a href="#tutorial-big-o" title="Tutorials">✅</a> <a href="#mentoring-big-o" title="Mentoring">🧑‍🏫</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/bobbys-dev"><img src="https://avatars.githubusercontent.com/bobbys-dev?s=100" width="100px;" alt="bobbys"/><br /><sub><b>bobbys</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=bobbys-dev" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/brettkoonce"><img src="https://avatars2.githubusercontent.com/u/11281814?v=4?s=100" width="100px;" alt="brett koonce"/><br /><sub><b>brett koonce</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=brettkoonce" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/btrtts"><img src="https://avatars3.githubusercontent.com/u/66252156?v=4?s=100" width="100px;" alt="btrtts"/><br /><sub><b>btrtts</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=btrtts" title="Documentation">📖</a></td>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/chizzi25"><img src="https://avatars3.githubusercontent.com/u/67911243?v=4?s=100" width="100px;" alt="chizzi25"/><br /><sub><b>chizzi25</b></sub></a><br /><a href="#blog-chizzi25" title="Blogposts">📝</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/chrisholder"><img src="https://avatars.githubusercontent.com/u/4674372?v=4?s=100" width="100px;" alt="chrisholder"/><br /><sub><b>chrisholder</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=chrisholder" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=chrisholder" title="Tests">⚠️</a> <a href="https://github.com/sktime/sktime/commits?author=chrisholder" title="Documentation">📖</a> <a href="#design-chrisholder" title="Design">🎨</a> <a href="#example-chrisholder" title="Examples">💡</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/morestart"><img src="https://avatars.githubusercontent.com/u/35556811?s=100" width="100px;" alt="ctl"/><br /><sub><b>ctl</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Amorestart" title="Bug reports">🐛</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/danbartl"><img src="https://avatars.githubusercontent.com/u/19947407?v=4?s=100" width="100px;" alt="danbartl"/><br /><sub><b>danbartl</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Adanbartl" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=danbartl" title="Code">💻</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Adanbartl" title="Reviewed Pull Requests">👀</a> <a href="#talk-danbartl" title="Talks">📢</a> <a href="https://github.com/sktime/sktime/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="11.11%"><a href="https://github.com/hamzahiqb"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=100" width="100px;" alt="hamzahiqb"/><br /><sub><b>hamzahiqb</b></sub></a><br /><a href="#infra-hamzahiqb" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hiqbal2"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=100" width="100px;" alt="hiqbal2"/><br /><sub><b>hiqbal2</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=hiqbal2" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jesellier"><img src="https://avatars0.githubusercontent.com/u/51952076?v=4?s=100" width="100px;" alt="jesellier"/><br /><sub><b>jesellier</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=jesellier" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/jschemm"><img src="https://avatars.githubusercontent.com/u/81151346?v=4?s=100" width="100px;" alt="jschemm"/><br /><sub><b>jschemm</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=jschemm" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/kkoziara"><img src="https://avatars1.githubusercontent.com/u/4346849?v=4?s=100" width="100px;" alt="kkoziara"/><br /><sub><b>kkoziara</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=kkoziara" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Akkoziara" title="Bug reports">🐛</a></td>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/matteogales"><img src="https://avatars0.githubusercontent.com/u/9269326?v=4?s=100" width="100px;" alt="matteogales"/><br /><sub><b>matteogales</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=matteogales" title="Code">💻</a> <a href="#design-matteogales" title="Design">🎨</a> <a href="#ideas-matteogales" title="Ideas, Planning, & Feedback">🤔</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/oleskiewicz"><img src="https://avatars1.githubusercontent.com/u/5682158?v=4?s=100" width="100px;" alt="oleskiewicz"/><br /><sub><b>oleskiewicz</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=oleskiewicz" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=oleskiewicz" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=oleskiewicz" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/pabworks"><img src="https://avatars.githubusercontent.com/u/32725127?v=4?s=100" width="100px;" alt="pabworks"/><br /><sub><b>pabworks</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=pabworks" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=pabworks" title="Tests">⚠️</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xloem"><img src="?s=100" width="100px;" alt="patiently pending world peace"/><br /><sub><b>patiently pending world peace</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=xloem" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/raishubham1"><img src="https://avatars3.githubusercontent.com/u/29356417?v=4?s=100" width="100px;" alt="raishubham1"/><br /><sub><b>raishubham1</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=raishubham1" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/simone-pignotti"><img src="https://avatars1.githubusercontent.com/u/44410066?v=4?s=100" width="100px;" alt="simone-pignotti"/><br /><sub><b>simone-pignotti</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=simone-pignotti" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Asimone-pignotti" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sophijka"><img src="https://avatars2.githubusercontent.com/u/47450591?v=4?s=100" width="100px;" alt="sophijka"/><br /><sub><b>sophijka</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sophijka" title="Documentation">📖</a> <a href="#maintenance-sophijka" title="Maintenance">🚧</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sri1419"><img src="https://avatars2.githubusercontent.com/u/65078278?v=4?s=100" width="100px;" alt="sri1419"/><br /><sub><b>sri1419</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sri1419" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tensorflow-as-tf"><img src="https://avatars.githubusercontent.com/u/51345718?v=4?s=100" width="100px;" alt="tensorflow-as-tf"/><br /><sub><b>tensorflow-as-tf</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=tensorflow-as-tf" title="Code">💻</a></td>
+    </tr>
+    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vedazeren"><img src="https://avatars3.githubusercontent.com/u/63582874?v=4?s=100" width="100px;" alt="vedazeren"/><br /><sub><b>vedazeren</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vedazeren" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=vedazeren" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vincent-nich12"><img src="https://avatars3.githubusercontent.com/u/36476633?v=4?s=100" width="100px;" alt="vincent-nich12"/><br /><sub><b>vincent-nich12</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vincent-nich12" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vollmersj"><img src="https://avatars2.githubusercontent.com/u/12613127?v=4?s=100" width="100px;" alt="vollmersj"/><br /><sub><b>vollmersj</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vollmersj" title="Documentation">📖</a></td>
-    </tr>
-    <tr>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xiaobenbenecho"><img src="https://avatars.githubusercontent.com/u/17461849?v=4?s=100" width="100px;" alt="xiaobenbenecho"/><br /><sub><b>xiaobenbenecho</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=xiaobenbenecho" title="Code">💻</a></td>
     </tr>
   </tbody>
diff --git a/docs/source/api_reference.rst b/docs/source/api_reference.rst
index 9dc6307d5..122ea2138 100644
--- a/docs/source/api_reference.rst
+++ b/docs/source/api_reference.rst
@@ -8,8 +8,11 @@ Welcome to the API reference for ``sktime``.
 
 The API reference provides a technical manual.
 It describes the classes and functions included in sktime.
+
 For a scientific manual, see the :ref:`user_guide`.
 
+For a list of object and estimator tags, see :ref:`tags_ref`.
+
 .. include:: includes/api_css.rst
 
 .. toctree::
@@ -32,4 +35,5 @@ For a scientific manual, see the :ref:`user_guide`.
     api_reference/deployment
     api_reference/utils
     api_reference/exceptions
+    api_reference/tags
     api_reference/pipeline
diff --git a/docs/source/api_reference/classification.rst b/docs/source/api_reference/classification.rst
index 2fac55d01..36872704b 100644
--- a/docs/source/api_reference/classification.rst
+++ b/docs/source/api_reference/classification.rst
@@ -180,6 +180,7 @@ Kernel-based
     :template: class.rst
 
     TimeSeriesSVC
+    TimeSeriesSVCTslearn
     Arsenal
     RocketClassifier
 
@@ -193,6 +194,7 @@ Shapelet-based
     :template: class.rst
 
     ShapeletTransformClassifier
+    ShapeletLearningClassifierTslearn
     MrSEQL
     MrSQM
 
diff --git a/docs/source/api_reference/forecasting.rst b/docs/source/api_reference/forecasting.rst
index bcd8b1bbc..01f02c4bb 100644
--- a/docs/source/api_reference/forecasting.rst
+++ b/docs/source/api_reference/forecasting.rst
@@ -363,6 +363,12 @@ Deep learning based forecasters
     LTSFDLinearForecaster
     LTSFNLinearForecaster
 
+.. currentmodule:: sktime.forecasting.hf_transformers_forecaster
+    :toctree: auto_generated/
+    :template: class.rst
+
+    HFTransformersForecaster
+
 .. currentmodule:: sktime.forecasting.conditional_invertible_neural_network
 
 .. autosummary::
diff --git a/docs/source/api_reference/regression.rst b/docs/source/api_reference/regression.rst
index 36accbe71..2d9cb278d 100644
--- a/docs/source/api_reference/regression.rst
+++ b/docs/source/api_reference/regression.rst
@@ -83,6 +83,7 @@ Kernel-based
     :toctree: auto_generated/
     :template: class.rst
 
+    TimeSeriesSVRTslearn
     RocketRegressor
 
 Base
diff --git a/docs/source/api_reference/tags.rst b/docs/source/api_reference/tags.rst
new file mode 100644
index 000000000..37de75a25
--- /dev/null
+++ b/docs/source/api_reference/tags.rst
@@ -0,0 +1,112 @@
+.. _tags_ref:
+
+Object and estimator tags
+=========================
+
+Every first-class object in ``sktime``
+is tagged with a set of tags that describe its properties and capabilities,
+or control its behavior.
+
+Tags are key-value pairs, where the key is a string with the name of the tag.
+The value of the tag can have arbitrary type, and describes a property, capability,
+or controls behaviour of the object, depending on the value.
+
+For instance, a forecaster may have the tag ``capability:pred_int: True`` if it can
+make probabilistic predictions.
+Users can find all forecasters that can make probabilistic predictions by filtering
+for this tag.
+
+This API reference lists all tags available in ``sktime``, and key utilities
+for their usage.
+
+
+Inspecting tags, retrieving by tags
+-----------------------------------
+
+* to get the tags of an object, use the ``get_tags`` method.
+  An object's tags can depend on its hyper-parameters.
+* to get the tags of a class, use the ``get_tags`` method of the class.
+  A class's tags are static and do not depend on its hyper-parameters.
+  By default, class tags that may vary for instances take the most "capable" value,
+  in the case of capabilities.
+* to programmatically retrieve all tags available in ``sktime``
+  or for a particular type of object, at runtime, use the ``registry.all_tags`` utility
+* to programmatically retrieve all objects or estimators in ``sktime``,
+  filtered for values of tags, use the ``registry.all_estimators`` utility
+
+
+.. currentmodule:: sktime.registry
+
+.. autosummary::
+    :toctree: auto_generated/
+    :template: function.rst
+
+    all_tags
+    all_estimators
+
+
+General tags, packaging
+-----------------------
+
+This section lists tags that are general and apply to all objects in ``sktime``.
+These tags are typically used for typing, packaging and documentation purposes.
+
+.. currentmodule:: sktime.registry._tags
+
+.. autosummary::
+    :toctree: auto_generated/
+    :template: function.rst
+    :nosignatures:
+
+    object_type
+    maintainers
+    authors
+    python_version
+    python_dependencies
+    python_dependencies_alias
+    requires_cython
+
+
+.. _forecaster_tags:
+
+Forecaster tags
+---------------
+
+This section lists tags applying to forecasters.
+These tags are used to describe capabilities, properties, and behavior of forecasters.
+
+The list also includes some developer facing tags that are used to
+control internal behavior of the forecaster.
+
+.. currentmodule:: sktime.registry._tags
+
+.. autosummary::
+    :toctree: auto_generated/
+    :template: function.rst
+    :nosignatures:
+
+    capability__exogeneous
+    capability__insample
+    capability__pred_int
+    capability__pred_int__insample
+    capability__missing_values
+
+
+.. _panel_tags:
+
+Tags for classifiers, regressors, clustering
+--------------------------------------------
+
+.. currentmodule:: sktime.registry._tags
+
+.. autosummary::
+    :toctree: auto_generated/
+    :template: function.rst
+    :nosignatures:
+
+    capability__multivariate
+    capability__missing_values
+    capability__unequal_length
+    capability__feature_importance
+    capability__contractable
+    capability__train_estimate
diff --git a/docs/source/api_reference/transformations.rst b/docs/source/api_reference/transformations.rst
index b584c4d25..d07f454ae 100644
--- a/docs/source/api_reference/transformations.rst
+++ b/docs/source/api_reference/transformations.rst
@@ -224,6 +224,14 @@ These transformers extract larger collections of features.
 
     Catch22
 
+.. currentmodule:: sktime.transformations.panel.catch22wrapper
+
+.. autosummary::
+    :toctree: auto_generated/
+    :template: class.rst
+
+    Catch22Wrapper
+
 Series-to-series transformers
 -----------------------------
 
diff --git a/extension_templates/alignment.py b/extension_templates/alignment.py
index 4b865f455..c802067e6 100644
--- a/extension_templates/alignment.py
+++ b/extension_templates/alignment.py
@@ -46,10 +46,12 @@ from sktime.alignment.base import BaseAligner
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyAligner(BaseAligner):
     """Custom time series aligner. todo: write docstring.
 
diff --git a/extension_templates/classification.py b/extension_templates/classification.py
index 5448a4296..ce6543215 100644
--- a/extension_templates/classification.py
+++ b/extension_templates/classification.py
@@ -46,10 +46,12 @@ from sktime.classification.base import BaseClassifier
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyTimeSeriesClassifier(BaseClassifier):
     """Custom time series classifier. todo: write docstring.
 
diff --git a/extension_templates/clustering.py b/extension_templates/clustering.py
index 7e4cdd888..c96c4bf26 100644
--- a/extension_templates/clustering.py
+++ b/extension_templates/clustering.py
@@ -44,7 +44,12 @@ from sktime.clustering import BaseClusterer
 
 # todo: add any necessary imports here
 
+# todo: for imports of sktime soft dependencies:
+# make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
+
+# todo: change class name and write docstring
 class MyClusterer(BaseClusterer):
     """Custom clusterer. todo: write docstring.
 
diff --git a/extension_templates/dist_kern_panel.py b/extension_templates/dist_kern_panel.py
index 7d7400df3..06ff9d3be 100644
--- a/extension_templates/dist_kern_panel.py
+++ b/extension_templates/dist_kern_panel.py
@@ -27,10 +27,12 @@ from sktime.dists_kernels import BasePairwiseTransformerPanel
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyTrafoPwPanel(BasePairwiseTransformerPanel):
     """Custom time series distance/kernel. todo: write docstring.
 
diff --git a/extension_templates/dist_kern_tab.py b/extension_templates/dist_kern_tab.py
index f82d26c6f..fd8763d2b 100644
--- a/extension_templates/dist_kern_tab.py
+++ b/extension_templates/dist_kern_tab.py
@@ -27,10 +27,12 @@ from sktime.dists_kernels import BasePairwiseTransformer
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyTrafoPw(BasePairwiseTransformer):
     """Custom distance/kernel (on data frame rows). todo: write docstring.
 
diff --git a/extension_templates/forecasting.py b/extension_templates/forecasting.py
index e27c88cf5..1f9e17120 100644
--- a/extension_templates/forecasting.py
+++ b/extension_templates/forecasting.py
@@ -48,10 +48,12 @@ from sktime.forecasting.base import BaseForecaster
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyForecaster(BaseForecaster):
     """Custom forecaster. todo: write docstring.
 
diff --git a/extension_templates/param_est.py b/extension_templates/param_est.py
index 00ed27721..5ab20773c 100644
--- a/extension_templates/param_est.py
+++ b/extension_templates/param_est.py
@@ -35,10 +35,12 @@ from sktime.param_est.base import BaseParamFitter
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyTimeSeriesParamFitter(BaseParamFitter):
     """Custom time series parameter fitter. todo: write docstring.
 
diff --git a/extension_templates/split.py b/extension_templates/split.py
index 785fb811c..b4d8a4af4 100644
--- a/extension_templates/split.py
+++ b/extension_templates/split.py
@@ -43,10 +43,12 @@ from sktime.split.base import BaseSplitter
 
 # todo: add any necessary imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MySplitter(BaseSplitter):
     """Custom splitter. todo: write docstring.
 
diff --git a/extension_templates/transformer.py b/extension_templates/transformer.py
index 33d563170..00347e6d4 100644
--- a/extension_templates/transformer.py
+++ b/extension_templates/transformer.py
@@ -46,10 +46,12 @@ from sktime.transformations.base import BaseTransformer
 
 # todo: add any necessary sktime internal imports here
 
-# todo: if any imports are sktime soft dependencies:
+# todo: for imports of sktime soft dependencies:
 # make sure to fill in the "python_dependencies" tag with the package import name
+# import soft dependencies only inside methods of the class, not at the top of the file
 
 
+# todo: change class name and write docstring
 class MyTransformer(BaseTransformer):
     """Custom transformer. todo: write docstring.
 
diff --git a/pyproject.toml b/pyproject.toml
index 306802c43..a95221ce3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -77,7 +77,7 @@ dependencies = [
 # or "pip install sktime[all_extras_pandas2]", to install only pandas 2 compatible deps
 #
 all_extras = [
-  "arch>=5.6,<6.4.0",
+  "arch>=5.6,<7.1.0",
   "cloudpickle",
   "dash!=2.9.0",
   "dask<2024.4.2; extra == 'dataframe'",
@@ -118,7 +118,7 @@ all_extras = [
 
 # all soft dependencies compatible with pandas 2
 all_extras_pandas2 = [
-  "arch>=5.6,<6.4.0",
+  "arch>=5.6,<7.1.0",
   "cloudpickle",
   "dash!=2.9.0",
   "dask<2024.4.2; extra == 'dataframe'",
@@ -184,7 +184,7 @@ clustering = [
   'tslearn<0.7.0,!=0.6.0,>=0.5.2; python_version < "3.12"',
 ]
 forecasting = [
-  "arch>=5.6,<6.4",
+  "arch>=5.6,<7.1",
   'pmdarima!=1.8.1,<2.1,>=1.8; python_version < "3.12"',
   "prophet<1.2,>=1.1",
   "skpro<2.3.0,>=2",
@@ -207,8 +207,8 @@ regression = [
 transformations = [
   'esig<0.10,>=0.9.7; python_version < "3.11"',
   "filterpy<1.5,>=1.4.5",
-  "holidays>=0.29,<0.47",
-  "mne>=1.5,<1.7",
+  "holidays>=0.29,<0.48",
+  "mne>=1.5,<1.8",
   'numba<0.60,>=0.53',
   "pycatch22>=0.4,<0.4.4",
   "pykalman<0.10,>=0.9.5",
@@ -254,7 +254,7 @@ tests = [
   "pytest-cov>=4.1,<5.1",
   "pytest-randomly<3.16,>=3.15",
   "pytest-timeout>=2.1,<2.4",
-  "pytest-xdist>=3.3,<3.6",
+  "pytest-xdist>=3.3,<3.7",
 ]
 
 # CI related soft dependency sets - not for users of sktime, only for developers
@@ -273,6 +273,7 @@ dl = [
   'neuralforecast<1.8.0,>=1.6.4; python_version < "3.11"',
   'tensorflow<2.17,>=2; python_version < "3.12"',
   'torch; python_version < "3.12"',
+  'transformers[torch]; python_version < "3.12"',
 ]
 mlflow = [
   "mlflow",
diff --git a/sktime/classification/kernel_based/__init__.py b/sktime/classification/kernel_based/__init__.py
index c99544de3..aa2c4fac8 100644
--- a/sktime/classification/kernel_based/__init__.py
+++ b/sktime/classification/kernel_based/__init__.py
@@ -1,6 +1,7 @@
 """Kernel based time series classifiers."""
-__all__ = ["RocketClassifier", "Arsenal", "TimeSeriesSVC"]
+__all__ = ["RocketClassifier", "Arsenal", "TimeSeriesSVC", "TimeSeriesSVCTslearn"]
 
 from sktime.classification.kernel_based._arsenal import Arsenal
 from sktime.classification.kernel_based._rocket_classifier import RocketClassifier
 from sktime.classification.kernel_based._svc import TimeSeriesSVC
+from sktime.classification.kernel_based._svc_tslearn import TimeSeriesSVCTslearn
diff --git a/sktime/classification/kernel_based/_svc_tslearn.py b/sktime/classification/kernel_based/_svc_tslearn.py
new file mode 100644
index 000000000..ffcf159a9
--- /dev/null
+++ b/sktime/classification/kernel_based/_svc_tslearn.py
@@ -0,0 +1,214 @@
+"""Time series SVC, from tslearn."""
+from sktime.base.adapters._tslearn import _TslearnAdapter
+from sktime.classification.base import BaseClassifier
+
+
+class TimeSeriesSVCTslearn(_TslearnAdapter, BaseClassifier):
+    """Time Series Suppoer Vector Classifier, from tslearn.
+
+    Direct interface to ``tslearn.svm.svm.TimeSeriesSVC``.
+
+    Parameters
+    ----------
+    C : float, optional (default=1.0)
+        Penalty parameter C of the error term.
+
+    kernel : string, optional (default='gak')
+         Specifies the kernel type to be used in the algorithm.
+         It must be one of 'gak' or a kernel accepted by ``sklearn.svm.SVC``.
+         If none is given, 'gak' will be used. If a callable is given it is
+         used to pre-compute the kernel matrix from data matrices; that matrix
+         should be an array of shape ``(n_samples, n_samples)``.
+
+    degree : int, optional (default=3)
+        Degree of the polynomial kernel function ('poly').
+        Ignored by all other kernels.
+
+    gamma : float, optional (default='auto')
+        Kernel coefficient for 'gak', 'rbf', 'poly' and 'sigmoid'.
+        If gamma is 'auto' then:
+
+        - for 'gak' kernel, it is computed based on a sampling of the training
+          set ``tslearn.metrics.gamma_soft_dtw``
+        - for other kernels (eg. 'rbf'), 1/n_features will be used.
+
+    coef0 : float, optional (default=0.0)
+        Independent term in kernel function.
+        It is only significant in 'poly' and 'sigmoid'.
+
+    shrinking : boolean, optional (default=True)
+        Whether to use the shrinking heuristic.
+
+    probability : boolean, optional (default=False)
+        Whether to enable probability estimates. This must be enabled prior
+        to calling `fit`, and will slow down that method.
+        Also, probability estimates are not guaranteed to match predict output.
+        See our :ref:`dedicated user guide section <kernels-ml>`
+        for more details.
+
+    tol : float, optional (default=1e-3)
+        Tolerance for stopping criterion.
+
+    cache_size : float, optional (default=200.0)
+        Specify the size of the kernel cache (in MB).
+
+    class_weight : {dict, 'balanced'}, optional
+        Set the parameter C of class i to class_weight[i]*C for
+        SVC. If not given, all classes are supposed to have
+        weight one.
+        The "balanced" mode uses the values of y to automatically adjust
+        weights inversely proportional to class frequencies in the input data
+        as ``n_samples / (n_classes * np.bincount(y))``
+
+    n_jobs : int or None, optional (default=None)
+        The number of jobs to run in parallel for GAK cross-similarity matrix
+        computations.
+        ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
+        ``-1`` means using all processors. See scikit-learns'
+        `Glossary <https://scikit-learn.org/stable/glossary.html#term-n-jobs>`_
+        for more details.
+
+    verbose : int, default: 0
+        Enable verbose output. Note that this setting takes advantage of a
+        per-process runtime setting in libsvm that, if enabled, may not work
+        properly in a multithreaded context.
+
+    max_iter : int, optional (default=-1)
+        Hard limit on iterations within solver, or -1 for no limit.
+
+    decision_function_shape : 'ovo', 'ovr', default='ovr'
+        Whether to return a one-vs-rest ('ovr') decision function of shape
+        (n_samples, n_classes) as all other classifiers, or the original
+        one-vs-one ('ovo') decision function of libsvm which has shape
+        (n_samples, n_classes * (n_classes - 1) / 2).
+
+    random_state : int, RandomState instance or None, optional (default=None)
+        The seed of the pseudo random number generator to use when shuffling
+        the data.  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`.
+
+    Attributes
+    ----------
+    support_ : array-like, shape = [n_SV]
+        Indices of support vectors.
+
+    n_support_ : array-like, dtype=int32, shape = [n_class]
+        Number of support vectors for each class.
+
+    support_vectors_ : list of arrays of shape [n_SV, sz, d]
+        List of support vectors in tslearn dataset format, one array per class
+
+    dual_coef_ : array, shape = [n_class-1, n_SV]
+        Coefficients of the support vector in the decision function.
+        For multiclass, coefficient for all 1-vs-1 classifiers.
+        The layout of the coefficients in the multiclass case is somewhat
+        non-trivial. See the section about multi-class classification in the
+        SVM section of the User Guide of ``sklearn`` for details.
+
+    coef_ : array, shape = [n_class-1, n_features]
+        Weights assigned to the features (coefficients in the primal
+        problem). This is only available in the case of a linear kernel.
+        `coef_` is a readonly property derived from `dual_coef_` and
+        `support_vectors_`.
+
+    intercept_ : array, shape = [n_class * (n_class-1) / 2]
+        Constants in decision function.
+
+    svm_estimator_ : sklearn.svm.SVC
+        The underlying sklearn estimator
+    """
+
+    _tags = {
+        # packaging info
+        # --------------
+        "authors": ["rtavenar", "yanncabanes", "fkiraly"],
+        # rtavenar and yanncabanes for interfaced estimator
+        "python_dependencies": "tslearn",
+        # estimator type
+        # --------------
+        "capability:multivariate": True,
+        "capability:unequal_length": False,
+    }
+
+    # defines the name of the attribute containing the tslearn estimator
+    _estimator_attr = "_tslearn_svc"
+
+    def _get_tslearn_class(self):
+        """Get tslearn class.
+
+        should import and return tslearn class
+        """
+        from tslearn.svm.svm import TimeSeriesSVC as _TimeSeriesSVC
+
+        return _TimeSeriesSVC
+
+    def __init__(
+        self,
+        C=1.0,
+        kernel="gak",
+        degree=3,
+        gamma="auto",
+        coef0=0.0,
+        shrinking=True,
+        probability=False,
+        tol=0.001,
+        cache_size=200,
+        class_weight=None,
+        n_jobs=None,
+        verbose=0,
+        max_iter=-1,
+        decision_function_shape="ovr",
+        random_state=None,
+    ):
+        self.C = C
+        self.kernel = kernel
+        self.degree = degree
+        self.gamma = gamma
+        self.coef0 = coef0
+        self.shrinking = shrinking
+        self.probability = probability
+        self.tol = tol
+        self.cache_size = cache_size
+        self.class_weight = class_weight
+        self.n_jobs = n_jobs
+        self.verbose = verbose
+        self.max_iter = max_iter
+        self.decision_function_shape = decision_function_shape
+        self.random_state = random_state
+
+        super().__init__()
+
+    @classmethod
+    def get_test_params(cls, parameter_set="default"):
+        """Return testing parameter settings for the estimator.
+
+        Parameters
+        ----------
+        parameter_set : str, default="default"
+            Name of the set of test parameters to return, for use in tests. If no
+            special parameters are defined for a value, will return ``"default"`` set.
+
+
+        Returns
+        -------
+        params : dict or list of dict, default = {}
+            Parameters to create testing instances of the class
+            Each dict are parameters to construct an "interesting" test instance, i.e.,
+            ``MyClass(**params)`` or ``MyClass(**params[i])`` creates a valid test
+            instance.
+            ``create_test_instance`` uses the first (or only) dictionary in ``params``
+        """
+        params1 = {"cache_size": 50}
+        params2 = {
+            "C": 0.9,
+            "kernel": "rbf",
+            "gamma": 0.1,
+            "shrinking": False,
+            "probability": True,
+            "tol": 0.01,
+            "cache_size": 55,
+            "decision_function_shape": "ovo",
+        }
+        return [params1, params2]
diff --git a/sktime/classification/shapelet_based/__init__.py b/sktime/classification/shapelet_based/__init__.py
index 88385d63f..7eb51eff3 100644
--- a/sktime/classification/shapelet_based/__init__.py
+++ b/sktime/classification/shapelet_based/__init__.py
@@ -1,6 +1,14 @@
 """Shapelet based time series classifiers."""
-__all__ = ["MrSEQL", "MrSQM", "ShapeletTransformClassifier"]
+__all__ = [
+    "MrSEQL",
+    "MrSQM",
+    "ShapeletLearningClassifierTslearn",
+    "ShapeletTransformClassifier",
+]
 
+from sktime.classification.shapelet_based._learning_tslearn import (
+    ShapeletLearningClassifierTslearn,
+)
 from sktime.classification.shapelet_based._mrseql import MrSEQL
 from sktime.classification.shapelet_based._mrsqm import MrSQM
 from sktime.classification.shapelet_based._stc import ShapeletTransformClassifier
diff --git a/sktime/classification/shapelet_based/_learning_tslearn.py b/sktime/classification/shapelet_based/_learning_tslearn.py
new file mode 100644
index 000000000..35d25019a
--- /dev/null
+++ b/sktime/classification/shapelet_based/_learning_tslearn.py
@@ -0,0 +1,169 @@
+"""Learning Shapelets Classifier, from tslearn."""
+from sktime.base.adapters._tslearn import _TslearnAdapter
+from sktime.classification.base import BaseClassifier
+
+
+class ShapeletLearningClassifierTslearn(_TslearnAdapter, BaseClassifier):
+    """Learning Time Series Shapelets Classifier, from tslearn.
+
+    Direct interface to ``tslearn.shapelets.shapelets.LearningShapelets``.
+
+    Learning Time-Series Shapelets was originally presented in [1]_.
+
+    Parameters
+    ----------
+    n_shapelets_per_size: dict (default: None)
+        Dictionary giving, for each shapelet size (key),
+        the number of such shapelets to be trained (value).
+        If None, `grabocka_params_to_shapelet_size_dict` is used and the
+        size used to compute is that of the shortest time series passed at fit time.
+
+    max_iter: int (default: 10,000)
+        Number of training epochs.
+
+    batch_size: int (default: 256)
+        Batch size to be used.
+
+    optimizer: str or keras.optimizers.Optimizer (default: "sgd")
+        ``keras`` optimizer to use for training.
+
+    weight_regularizer: float or None (default: 0.)
+        Strength of the L2 regularizer to use for training the classification
+        (softmax) layer. If 0, no regularization is performed.
+
+    shapelet_length: float (default: 0.15)
+        The length of the shapelets, expressed as a fraction of the time series length.
+        Used only if ``n_shapelets_per_size`` is None.
+
+    total_lengths: int (default: 3)
+        The number of different shapelet lengths. Will extract shapelets of
+        length i * shapelet_length for i in [1, total_lengths]
+        Used only if ``n_shapelets_per_size`` is None.
+
+    max_size: int or None (default: None)
+        Maximum size for time series to be fed to the model. If None, it is
+        set to the size (number of timestamps) of the training time series.
+
+    scale: bool (default: False)
+        Whether input data should be scaled for each feature of each time
+        series to lie in the [0-1] interval.
+        Default for this parameter is set to `False` in version 0.4 to ensure
+        backward compatibility, but is likely to change in a future version.
+
+    verbose: {0, 1, 2} (default: 0)
+        ``keras`` verbose level.
+
+    random_state : int or None, optional (default: None)
+        The seed of the pseudo random number generator to use when shuffling
+        the data.  If int, ``random_state`` is the seed used by the random number
+        generator; If None, the random number generator is the ``RandomState``
+        instance used by ``np.random``.
+
+    Attributes
+    ----------
+    shapelets_ : numpy.ndarray of objects, each object being a time series
+        Set of time-series shapelets.
+
+    shapelets_as_time_series_ : numpy.ndarray of shape (n_shapelets, sz_shp, d)
+        where ``sz_shp`` is the maximum of all shapelet sizes
+        Set of time-series shapelets formatted as a ``tslearn`` time series dataset.
+
+    transformer_model_ : keras.Model
+        Transforms an input dataset of timeseries into distances to the
+        learned shapelets.
+
+    locator_model_ : keras.Model
+        Returns the indices where each of the shapelets can be found (minimal
+        distance) within each of the timeseries of the input dataset.
+
+    model_ : keras.Model
+        Directly predicts the class probabilities for the input timeseries.
+
+    history_ : dict
+        Dictionary of losses and metrics recorded during fit.
+
+    References
+    ----------
+    .. [1] J. Grabocka et al. Learning Time-Series Shapelets. SIGKDD 2014.
+    """
+
+    _tags = {
+        # packaging info
+        # --------------
+        "authors": ["rtavenar", "yanncabanes", "fspinna", "fkiraly"],
+        "python_dependencies": "tslearn",
+        # estimator type
+        # --------------
+        "capability:multivariate": True,
+        "capability:unequal_length": False,
+    }
+
+    # defines the name of the attribute containing the tslearn estimator
+    _estimator_attr = "_tslearn_shapelets"
+
+    def _get_tslearn_class(self):
+        """Get tslearn class.
+
+        should import and return tslearn class
+        """
+        from tslearn.shapelets.shapelets import LearningShapelets
+
+        return LearningShapelets
+
+    def __init__(
+        self,
+        n_shapelets_per_size=None,
+        max_iter=10000,
+        batch_size=256,
+        optimizer="sgd",
+        weight_regularizer=0.0,
+        shapelet_length=0.15,
+        total_lengths=3,
+        max_size=None,
+        scale=False,
+        verbose=0,
+        random_state=None,
+    ):
+        self.n_shapelets_per_size = n_shapelets_per_size
+        self.max_iter = max_iter
+        self.batch_size = batch_size
+        self.verbose = verbose
+        self.optimizer = optimizer
+        self.weight_regularizer = weight_regularizer
+        self.shapelet_length = shapelet_length
+        self.total_lengths = total_lengths
+        self.max_size = max_size
+        self.scale = scale
+        self.random_state = random_state
+
+        super().__init__()
+
+    @classmethod
+    def get_test_params(cls, parameter_set="default"):
+        """Return testing parameter settings for the estimator.
+
+        Parameters
+        ----------
+        parameter_set : str, default="default"
+            Name of the set of test parameters to return, for use in tests. If no
+            special parameters are defined for a value, will return ``"default"`` set.
+
+
+        Returns
+        -------
+        params : dict or list of dict, default = {}
+            Parameters to create testing instances of the class
+            Each dict are parameters to construct an "interesting" test instance, i.e.,
+            ``MyClass(**params)`` or ``MyClass(**params[i])`` creates a valid test
+            instance.
+            ``create_test_instance`` uses the first (or only) dictionary in ``params``
+        """
+        params1 = {"max_iter": 120, "batch_size": 64}
+        params2 = {
+            "max_iter": 100,
+            "batch_size": 128,
+            "optimizer": "adam",
+            "shapelet_length": 0.1,
+            "scale": True,
+        }
+        return [params1, params2]
diff --git a/sktime/clustering/dbscan.py b/sktime/clustering/dbscan.py
index bd531cc34..2b431cb84 100644
--- a/sktime/clustering/dbscan.py
+++ b/sktime/clustering/dbscan.py
@@ -104,6 +104,15 @@ class TimeSeriesDBSCAN(BaseClusterer):
             ]
             self.clone_tags(distance, tags_to_clone)
 
+        # numba distance in sktime (indexed by string)
+        # cannot support unequal length data, and require numpy3D input
+        if isinstance(distance, str):
+            tags_to_set = {
+                "X_inner_mtype": "numpy3D",
+                "capability:unequal_length": False,
+            }
+            self.set_tags(**tags_to_set)
+
         self.dbscan_ = None
 
     def _fit(self, X, y=None):
diff --git a/sktime/dists_kernels/dtw/_dtw_sktime.py b/sktime/dists_kernels/dtw/_dtw_sktime.py
index caa030f46..dab9d983d 100644
--- a/sktime/dists_kernels/dtw/_dtw_sktime.py
+++ b/sktime/dists_kernels/dtw/_dtw_sktime.py
@@ -131,6 +131,7 @@ class DtwDist(BasePairwiseTransformerPanel):
         # --------------
         "symmetric": True,  # all the distances are symmetric
         "X_inner_mtype": "numpy3D",
+        "capability:unequal_length": False,  # can dist handle unequal length panels?
     }
 
     def __init__(
diff --git a/sktime/dists_kernels/edit_dist.py b/sktime/dists_kernels/edit_dist.py
index 06638c193..66c79e4e2 100644
--- a/sktime/dists_kernels/edit_dist.py
+++ b/sktime/dists_kernels/edit_dist.py
@@ -123,6 +123,7 @@ class EditDist(BasePairwiseTransformerPanel):
         # --------------
         "symmetric": True,  # all the distances are symmetric
         "X_inner_mtype": "numpy3D",
+        "capability:unequal_length": False,  # can dist handle unequal length panels?
     }
 
     ALLOWED_DISTANCE_STR = ["lcss", "edr", "erp", "twe"]
diff --git a/sktime/forecasting/base/adapters/_neuralforecast.py b/sktime/forecasting/base/adapters/_neuralforecast.py
index a33a6f233..1a1c3f366 100644
--- a/sktime/forecasting/base/adapters/_neuralforecast.py
+++ b/sktime/forecasting/base/adapters/_neuralforecast.py
@@ -15,6 +15,10 @@ from sktime.utils.warnings import warn
 __all__ = ["_NeuralForecastAdapter"]
 __author__ = ["yarnabrina", "geetu040", "pranavvp16"]
 
+_SUPPORTED_LOCAL_SCALAR_TYPES = Literal[
+    "standard", "robust", "robust-iqr", "minmax", "boxcox"
+]
+
 
 class _NeuralForecastAdapter(BaseForecaster):
     """Base adapter class for NeuralForecast models.
@@ -56,7 +60,7 @@ class _NeuralForecastAdapter(BaseForecaster):
     _tags = {
         # packaging info
         # --------------
-        "authors": ["yarnabrina"],
+        "authors": ["yarnabrina", "geetu040", "pranavvp16"],
         "maintainers": ["yarnabrina"],
         "python_version": ">=3.8",
         "python_dependencies": ["neuralforecast"],
@@ -74,9 +78,7 @@ class _NeuralForecastAdapter(BaseForecaster):
     def __init__(
         self: "_NeuralForecastAdapter",
         freq: Union[str, int] = "auto",
-        local_scaler_type: Optional[
-            Literal["standard", "robust", "robust-iqr", "minmax", "boxcox"]
-        ] = None,
+        local_scaler_type: Optional[_SUPPORTED_LOCAL_SCALAR_TYPES] = None,
         futr_exog_list: Optional[List[str]] = None,
         verbose_fit: bool = False,
         verbose_predict: bool = False,
@@ -137,66 +139,73 @@ class _NeuralForecastAdapter(BaseForecaster):
         - custom model name (``alias``) - used from ``algorithm_name``
         """
 
-    def _get_valid_parameters(self: "_NeuralForecastAdapter") -> dict:
-        """Get valid parameters for the underlying NeuralForecast algorithm class.
+    def _ignore_invalid_parameters(self: "_NeuralForecastAdapter") -> dict:
+        """Skip unsupported parameters for underlying NeuralForecast algorithm class.
 
         Returns
         -------
         dict
-            valid list of arguments for the underlying algorithm class
+            subset of ``self.algorithm_parameters`` with valid parameters
         """
         from pytorch_lightning import Trainer
 
-        # get valid init parameters from the model class and Trainer
-        model_class = self.algorithm_class
-        trainer_params = list(signature(Trainer.__init__).parameters.keys())
-        valid_parameters = list(signature(model_class.__init__).parameters.keys())
-        valid_parameters += trainer_params
+        # get supported parameters from the underlying model class and Trainer
+        algorithm_class_parameters = set(signature(self.algorithm_class).parameters)
+        trainer_class_parameters = set(signature(Trainer).parameters)
 
-        sktime_parameters = self.algorithm_parameters
-        default_parameters = self.get_param_defaults()
+        # get default values for sktime interfaced estimator
+        sktime_default_values = self.get_param_defaults()
 
-        valid_parameters = set(valid_parameters)
-        unsupported_parameters = set(sktime_parameters.keys()) - valid_parameters
+        # get instance parameters
+        instance_algorithm_parameters = deepcopy(self.algorithm_parameters)
+        instance_trainer_parameters = instance_algorithm_parameters.pop(
+            "trainer_kwargs", {}
+        )
 
-        # iterate through neuralforecast parameters and check for non default values
-        user_parameters = [
-            key
-            for key in sktime_parameters
-            if sktime_parameters[key] != default_parameters[key]
-        ]
+        # identify unsupported parameters
+        unsupported_algorithm_parameters = (
+            set(instance_algorithm_parameters) - algorithm_class_parameters
+        )
+        unsupported_trainer_parameters = (
+            set(instance_trainer_parameters) - trainer_class_parameters
+        )
 
-        # filter out unsupported parameters
-        sktime_trainer_params = set(self.algorithm_parameters["trainer_kwargs"])
-        invalid_trainer_params = sktime_trainer_params - set(trainer_params)
+        # detect user provided parameters
+        user_modified_parameters = {
+            parameter_name
+            for parameter_name, parameter_value in instance_algorithm_parameters.items()
+            if parameter_value != sktime_default_values[parameter_name]
+        }
 
-        filter_params = deepcopy(self.algorithm_parameters)
-        for invalid_param in invalid_trainer_params:
-            warn(
-                f"Keyword argument '{invalid_param}' will be omitted as it is"
-                f" not found in the __init__ method "
-                f"from {Trainer}. "
-                f"Check your pytorch_lightning version "
-                f"to find out the right API parameters.",
-                obj=self,
-                stacklevel=2,
-            )
-            filter_params["trainer_kwargs"].pop(invalid_param)
+        # drop unsupported algorithm parameters
+        for parameter in unsupported_algorithm_parameters:
+            del instance_algorithm_parameters[parameter]
 
-        for unsupported_param in unsupported_parameters:
-            if unsupported_param in user_parameters:
+            if parameter in user_modified_parameters:
                 warn(
-                    f"Keyword argument '{unsupported_param}' will be omitted as it is"
-                    f" not found in the __init__ method "
-                    f"from {self.algorithm_class}. "
-                    f"Check your neuralforecast version "
-                    f"to find out the right API parameters.",
+                    f"Keyword argument '{parameter}' will be omitted as it is not found"
+                    f" in the __init__ method from {self.algorithm_class}. Check your "
+                    " neuralforecast version to find out the right API parameters.",
                     obj=self,
                     stacklevel=2,
                 )
-            filter_params.pop(unsupported_param)
 
-        return filter_params
+        # drop unsupported trainer parameters
+        for parameter in unsupported_trainer_parameters:
+            del instance_trainer_parameters[parameter]
+
+            warn(
+                f"Keyword argument '{parameter}' will be omitted as it is not found in "
+                f"the __init__ method from {Trainer}. Check your pytorch_lightning "
+                "version to find out the right API parameters.",
+                obj=self,
+                stacklevel=2,
+            )
+
+        return {
+            **instance_algorithm_parameters,
+            "trainer_kwargs": instance_trainer_parameters,
+        }
 
     def _instantiate_model(self: "_NeuralForecastAdapter", fh: ForecastingHorizon):
         """Instantiate the model."""
@@ -205,12 +214,13 @@ class _NeuralForecastAdapter(BaseForecaster):
         )
 
         # filter params according to neuralforecast version
-        params = self._get_valid_parameters()
-        trainer_kwargs = params.pop("trainer_kwargs")
+        valid_parameters = self._ignore_invalid_parameters()
+        trainer_kwargs = valid_parameters.pop("trainer_kwargs", {})
+
         algorithm_instance = self.algorithm_class(
             fh,
             alias=self.algorithm_name,
-            **params,
+            **valid_parameters,
             **trainer_kwargs,
             **exogenous_parameters,
         )
@@ -281,42 +291,32 @@ class _NeuralForecastAdapter(BaseForecaster):
         # | Index (Missing)         | B2.2.2    |
         # | Other                   | unreached |
 
-        if self.freq != "auto":
-            # A
+        if self.freq != "auto":  # A: freq is given as non-auto
             self._freq = self.freq
-        else:
-            # B
-            if fh.freq:
-                # B1
-                self._freq = fh.freq
-            else:
-                # B2
-                if isinstance(y.index, pandas.DatetimeIndex):
-                    # B2.1
-                    raise ValueError(
-                        f"Error in {self.__class__.__name__}, "
-                        "could not interpret freq, "
-                        "try passing freq in model initialization "
-                        "or use a valid offset in index"
-                    )
-                else:
-                    # B2.2
-                    diffs = np.unique(np.diff(y.index))
-                    if diffs.shape[0] > 1:
-                        # B2.2.1
-                        raise ValueError(
-                            f"Error in {self.__class__.__name__}, "
-                            "could not interpret freq, "
-                            "try passing integer freq in model initialization "
-                            "or use a valid integer offset in index"
-                        )
-                    else:
-                        # B2.2.2
-                        self._freq = int(diffs[-1])  # converts numpy.int64 to int
+        elif fh.freq:  # B1: freq is infered from fh
+            self._freq = fh.freq
+        elif isinstance(y.index, pandas.DatetimeIndex):  # B2.1: y is date-like
+            raise ValueError(
+                f"Error in {self.__class__.__name__}, could not interpret freq, try "
+                "passing freq in model initialization or use a valid offset in index"
+            )
+        else:  # B2.2: y is not date-like
+            diffs = np.unique(np.diff(y.index))
+
+            if diffs.shape[0] > 1:  # B2.2.1: non-equispaced integers
+                raise ValueError(
+                    f"Error in {self.__class__.__name__}, could not interpret freq, try"
+                    " passing integer freq in model initialization or use a valid "
+                    "integer offset in index"
+                )
+            else:  # B2.2.2: equispaced integers
+                self._freq = int(diffs[-1])  # converts numpy.int64 to int
 
         train_indices = y.index
         if isinstance(train_indices, pandas.PeriodIndex):
-            train_indices = train_indices.to_timestamp(freq=self._freq)
+            train_indices = train_indices.to_timestamp(
+                freq=pandas.tseries.frequencies.to_offset(self._freq)
+            )
 
         train_data = {
             self.id_col: 1,
@@ -387,7 +387,9 @@ class _NeuralForecastAdapter(BaseForecaster):
         if self.futr_exog_list:
             predict_indices = X.index
             if isinstance(predict_indices, pandas.PeriodIndex):
-                predict_indices = predict_indices.to_timestamp(freq=self._freq)
+                predict_indices = predict_indices.to_timestamp(
+                    freq=pandas.tseries.frequencies.to_offset(self._freq)
+                )
 
             predict_data = {self.id_col: 1, self.time_col: predict_indices.to_numpy()}
 
diff --git a/sktime/forecasting/hf_transformers_forecaster.py b/sktime/forecasting/hf_transformers_forecaster.py
new file mode 100644
index 000000000..a5952d6bb
--- /dev/null
+++ b/sktime/forecasting/hf_transformers_forecaster.py
@@ -0,0 +1,398 @@
+"""Adapter for using huggingface transformers for forecasting."""
+
+from copy import deepcopy
+
+import numpy as np
+import pandas as pd
+from skbase.utils.dependencies import _check_soft_dependencies
+
+if _check_soft_dependencies("torch", severity="none"):
+    import torch
+    from torch.utils.data import Dataset
+else:
+
+    class Dataset:
+        """Dummy class if torch is unavailable."""
+
+        pass
+
+
+if _check_soft_dependencies("transformers", severity="none"):
+    import transformers
+    from transformers import AutoConfig, Trainer, TrainingArguments
+
+from sktime.forecasting.base import BaseForecaster, ForecastingHorizon
+
+__author__ = ["benheid"]
+
+
+class HFTransformersForecaster(BaseForecaster):
+    """
+    Forecaster that uses a huggingface model for forecasting.
+
+    This forecaster fetches the model from the huggingface model hub.
+    Note, this forecaster is in an experimental state. It is currently only
+    working for Informer, Autoformer, and TimeSeriesTransformer.
+
+    Parameters
+    ----------
+    model_path : str
+        Path to the huggingface model to use for forecasting. Currently,
+        Informer, Autoformer, and TimeSeriesTransformer are supported.
+    fit_strategy : str, default="minimal"
+        Strategy to use for fitting the model. Can be "minimal" or "full"
+    validation_split : float, default=0.2
+        Fraction of the data to use for validation
+    config : dict, default={}
+        Configuration to use for the model. See the `transformers`
+        documentation for details.
+    training_args : dict, default={}
+        Training arguments to use for the model. See `transformers.TrainingArguments`
+        for details.
+        Note that the `output_dir` argument is required.
+    compute_metrics : list, default=None
+        List of metrics to compute during training. See `transformers.Trainer`
+        for details.
+    deterministic : bool, default=False
+        Whether the predictions should be deterministic or not.
+    callbacks : list, default=[]
+        List of callbacks to use during training. See `transformers.Trainer`
+
+    Examples
+    --------
+    >>> from sktime.forecasting.hf_transformers_forecaster import (
+    ...     HFTransformersForecaster,
+    ... )
+    >>> from sktime.datasets import load_airline
+    >>> y = load_airline()
+    >>> forecaster = HFTransformersForecaster(
+    ...    model_path="huggingface/autoformer-tourism-monthly",
+    ...    training_args ={
+    ...        "num_train_epochs": 20,
+    ...        "output_dir": "test_output",
+    ...        "per_device_train_batch_size": 32,
+    ...    },
+    ...    config={
+    ...         "lags_sequence": [1, 2, 3],
+    ...         "context_length": 2,
+    ...         "prediction_length": 4,
+    ...         "use_cpu": True,
+    ...         "label_length": 2,
+    ...    },
+    ... ) # doctest: +SKIP
+    >>> forecaster.fit(y) # doctest: +SKIP
+    >>> fh = [1, 2, 3]
+    >>> y_pred = forecaster.predict(fh) # doctest: +SKIP
+    """
+
+    _tags = {
+        "ignores-exogeneous-X": False,
+        "requires-fh-in-fit": False,
+        "X-y-must-have-same-index": True,
+        "enforce_index_type": None,
+        "handles-missing-data": False,
+        "capability:pred_int": False,
+        "python_dependencies": ["transformers", "torch"],
+        "X_inner_mtype": "pd.DataFrame",
+        "y_inner_mtype": "pd.Series",
+        "capability:insample": False,
+        "capability:pred_int:insample": False,
+    }
+
+    def __init__(
+        self,
+        model_path: str,
+        fit_strategy="minimal",
+        validation_split=0.2,
+        config=None,
+        training_args=None,
+        compute_metrics=None,
+        deterministic=False,
+        callbacks=None,
+    ):
+        super().__init__()
+        self.model_path = model_path
+        self.fit_strategy = fit_strategy
+        self.validation_split = validation_split
+        self.config = config
+        self._config = config if config is not None else {}
+        self.training_args = training_args
+        self._training_args = training_args if training_args is not None else {}
+        self.compute_metrics = compute_metrics
+        self._compute_metrics = compute_metrics
+        self._compute_metrics = compute_metrics
+        self.deterministic = deterministic
+        self.callbacks = callbacks
+        self._callbacks = callbacks
+
+    def _fit(self, y, X, fh):
+        # Load model and extract config
+        config = AutoConfig.from_pretrained(self.model_path)
+
+        # Update config with user provided config
+        _config = config.to_dict()
+        _config.update(self._config)
+        _config["num_dynamic_real_features"] = X.shape[-1] if X is not None else 0
+        _config["num_static_real_features"] = 0
+        _config["num_dynamic_real_features"] = 0
+        _config["num_static_categorical_features"] = 0
+        _config["num_time_features"] = 0 if X is None else X.shape[-1]
+
+        if hasattr(config, "feature_size"):
+            del _config["feature_size"]
+
+        if fh is not None:
+            _config["prediction_length"] = max(
+                *(fh.to_relative(self._cutoff)._values + 1),
+                _config["prediction_length"],
+            )
+
+        config = config.from_dict(_config)
+        import transformers
+
+        prediction_model_class = None
+        if hasattr(config, "architectures") and config.architectures is not None:
+            prediction_model_class = config.architectures[0]
+        elif hasattr(config, "model_type"):
+            prediction_model_class = (
+                "".join(x.capitalize() for x in config.model_type.lower().split("_"))
+                + "ForPrediction"
+            )
+        else:
+            raise ValueError(
+                "The model type is not inferrable from the config."
+                "Thus, the model cannot be loaded."
+            )
+        # Load model with the updated config
+        self.model, info = getattr(
+            transformers, prediction_model_class
+        ).from_pretrained(
+            self.model_path,
+            config=config,
+            output_loading_info=True,
+            ignore_mismatched_sizes=True,
+        )
+
+        # Freeze all loaded parameters
+        for param in self.model.parameters():
+            param.requires_grad = False
+
+        # Clamp all loaded parameters to avoid NaNs due to large values
+        for param in self.model.model.parameters():
+            param.clamp_(-1000, 1000)
+
+        # Reininit the weights of all layers that have mismatched sizes
+        for key, _, _ in info["mismatched_keys"]:
+            _model = self.model
+            for attr_name in key.split(".")[:-1]:
+                _model = getattr(_model, attr_name)
+            _model.weight = torch.nn.Parameter(
+                _model.weight.masked_fill(_model.weight.isnan(), 0.001),
+                requires_grad=True,
+            )
+
+        if self.validation_split is not None:
+            split = int(len(y) * (1 - self.validation_split))
+
+            train_dataset = PyTorchDataset(
+                y[:split],
+                config.context_length + max(config.lags_sequence),
+                X=X[:split] if X is not None else None,
+                fh=config.prediction_length,
+            )
+
+            eval_dataset = PyTorchDataset(
+                y[split:],
+                config.context_length + max(config.lags_sequence),
+                X=X[split:] if X is not None else None,
+                fh=config.prediction_length,
+            )
+        else:
+            train_dataset = PyTorchDataset(
+                y,
+                config.context_length + max(config.lags_sequence),
+                X=X if X is not None else None,
+                fh=config.prediction_length,
+            )
+
+            eval_dataset = None
+
+        training_args = deepcopy(self.training_args)
+        training_args["label_names"] = ["future_values"]
+        training_args = TrainingArguments(**training_args)
+
+        if self.fit_strategy == "minimal":
+            if len(info["mismatched_keys"]) == 0:
+                return  # No need to fit
+        elif self.fit_strategy == "full":
+            for param in self.model.parameters():
+                param.requires_grad = True
+        else:
+            raise ValueError("Unknown fit strategy")
+
+        trainer = Trainer(
+            model=self.model,
+            args=training_args,
+            train_dataset=train_dataset,
+            eval_dataset=eval_dataset,
+            compute_metrics=self._compute_metrics,
+            callbacks=self._callbacks,
+        )
+        trainer.train()
+
+    def _predict(self, fh, X=None):
+        if self.deterministic:
+            transformers.set_seed(42)
+
+        if fh is None:
+            fh = self.fh
+        fh = fh.to_relative(self.cutoff)
+
+        if min(fh._values) < 0:
+            raise NotImplementedError(
+                "The huggingface adapter is not supporting insample predictions."
+            )
+
+        self.model.eval()
+        from torch import from_numpy
+
+        hist = self._y.values.reshape((1, -1))
+        if X is not None:
+            hist_x = self._X.values.reshape((1, -1, self._X.shape[-1]))
+            x_ = X.values.reshape((1, -1, self._X.shape[-1]))
+            if x_.shape[1] < self.model.config.prediction_length:
+                # TODO raise exception here?
+                x_ = np.resize(
+                    x_, (1, self.model.config.prediction_length, x_.shape[-1])
+                )
+        else:
+            hist_x = np.array(
+                [
+                    [[]]
+                    * (
+                        self.model.config.context_length
+                        + max(self.model.config.lags_sequence)
+                    )
+                ]
+            )
+            x_ = np.array([[[]] * self.model.config.prediction_length])
+
+        pred = self.model.generate(
+            past_values=from_numpy(hist).to(self.model.dtype).to(self.model.device),
+            past_time_features=from_numpy(
+                hist_x[
+                    :,
+                    -self.model.config.context_length
+                    - max(self.model.config.lags_sequence) :,
+                ]
+            )
+            .to(self.model.dtype)
+            .to(self.model.device),
+            future_time_features=from_numpy(x_)
+            .to(self.model.dtype)
+            .to(self.model.device),
+            past_observed_mask=from_numpy((~np.isnan(hist)).astype(int)).to(
+                self.model.device
+            ),
+        )
+
+        pred = pred.sequences.mean(dim=1).detach().cpu().numpy().T
+
+        pred = pd.Series(
+            pred.reshape((-1,)),
+            index=ForecastingHorizon(range(len(pred)))
+            .to_absolute(self._cutoff)
+            ._values,
+            # columns=self._y.columns
+            name=self._y.name,
+        )
+        return pred.loc[fh.to_absolute(self.cutoff)._values]
+
+    @classmethod
+    def get_test_params(cls, parameter_set="default"):
+        """Return testing parameter settings for the estimator.
+
+        Parameters
+        ----------
+        parameter_set : str, default="default"
+            Name of the set of test parameters to return, for use in tests. If no
+            special parameters are defined for a value, will return `"default"` set.
+
+        Returns
+        -------
+        params : dict or list of dict, default = {}
+            Parameters to create testing instances of the class
+            Each dict are parameters to construct an "interesting" test instance, i.e.,
+            `MyClass(**params)` or `MyClass(**params[i])` creates a valid test instance.
+            `create_test_instance` uses the first (or only) dictionary in `params`
+        """
+        return [
+            {
+                "model_path": "huggingface/informer-tourism-monthly",
+                "fit_strategy": "minimal",
+                "training_args": {
+                    "num_train_epochs": 1,
+                    "output_dir": "test_output",
+                    "per_device_train_batch_size": 32,
+                },
+                "config": {
+                    "lags_sequence": [1, 2, 3],
+                    "context_length": 2,
+                    "prediction_length": 4,
+                },
+                "deterministic": True,
+            },
+            {
+                "model_path": "huggingface/autoformer-tourism-monthly",
+                "fit_strategy": "minimal",
+                "training_args": {
+                    "num_train_epochs": 1,
+                    "output_dir": "test_output",
+                    "per_device_train_batch_size": 32,
+                },
+                "config": {
+                    "lags_sequence": [1, 2, 3],
+                    "context_length": 2,
+                    "prediction_length": 4,
+                    "label_length": 2,
+                },
+                "deterministic": True,
+            },
+        ]
+
+
+class PyTorchDataset(Dataset):
+    """Dataset for use in sktime deep learning forecasters."""
+
+    def __init__(self, y, seq_len, fh=None, X=None):
+        self.y = y.values
+        self.X = X.values if X is not None else X
+        self.seq_len = seq_len
+        self.fh = fh
+
+    def __len__(self):
+        """Return length of dataset."""
+        return max(len(self.y) - self.seq_len - self.fh + 1, 0)
+
+    def __getitem__(self, i):
+        """Return data point."""
+        from torch import from_numpy, tensor
+
+        hist_y = tensor(self.y[i : i + self.seq_len]).float()
+        if self.X is not None:
+            exog_data = tensor(
+                self.X[i + self.seq_len : i + self.seq_len + self.fh]
+            ).float()
+            hist_exog = tensor(self.X[i : i + self.seq_len]).float()
+        else:
+            exog_data = tensor([[]] * self.fh)
+            hist_exog = tensor([[]] * self.seq_len)
+        return {
+            "past_values": hist_y,
+            "past_time_features": hist_exog,
+            "future_time_features": exog_data,
+            "past_observed_mask": (~hist_y.isnan()).to(int),
+            "future_values": from_numpy(
+                self.y[i + self.seq_len : i + self.seq_len + self.fh]
+            ).float(),
+        }
diff --git a/sktime/forecasting/neuralforecast.py b/sktime/forecasting/neuralforecast.py
index fbf556853..3e90af6ae 100644
--- a/sktime/forecasting/neuralforecast.py
+++ b/sktime/forecasting/neuralforecast.py
@@ -1,9 +1,12 @@
 # copyright: sktime developers, BSD-3-Clause License (see LICENSE file)
 """Interfaces to estimators from neuralforecast by Nixtla."""
 import functools
-from typing import List, Literal, Optional, Union
+from typing import List, Optional, Union
 
-from sktime.forecasting.base.adapters._neuralforecast import _NeuralForecastAdapter
+from sktime.forecasting.base.adapters._neuralforecast import (
+    _SUPPORTED_LOCAL_SCALAR_TYPES,
+    _NeuralForecastAdapter,
+)
 from sktime.utils.validation._dependencies import _check_soft_dependencies
 
 __author__ = ["yarnabrina", "geetu040", "pranavvp16"]
@@ -152,7 +155,7 @@ class NeuralForecastRNN(_NeuralForecastAdapter):
     .. [6]
     https://lightning.ai/docs/pytorch/stable/api/pytorch_lightning.trainer.trainer.Trainer.html#lightning.pytorch.trainer.trainer.Trainer
     .. [7] https://pytorch.org/docs/stable/optim.html
-    .. [8] https://pytorch.org/docs/stable/generated/torch.optim.Adam.html#torch.optim.Adam
+    .. [8] https://pytorch.org/docs/stable/optim.html#algorithms
     """  # noqa: E501
 
     _tags = {
@@ -170,9 +173,7 @@ class NeuralForecastRNN(_NeuralForecastAdapter):
     def __init__(
         self: "NeuralForecastRNN",
         freq: Union[str, int] = "auto",
-        local_scaler_type: Optional[
-            Literal["standard", "robust", "robust-iqr", "minmax", "boxcox"]
-        ] = None,
+        local_scaler_type: Optional[_SUPPORTED_LOCAL_SCALAR_TYPES] = None,
         futr_exog_list: Optional[List[str]] = None,
         verbose_fit: bool = False,
         verbose_predict: bool = False,
@@ -524,7 +525,7 @@ class NeuralForecastLSTM(_NeuralForecastAdapter):
     .. [5] https://nixtlaverse.nixtla.io/neuralforecast/losses.pytorch.html
     .. [6] https://lightning.ai/docs/pytorch/stable/api/pytorch_lightning.trainer.trainer.Trainer.html#lightning.pytorch.trainer.trainer.Trainer
     .. [7] https://pytorch.org/docs/stable/optim.html
-    .. [8] https://pytorch.org/docs/stable/generated/torch.optim.Adam.html#torch.optim.Adam
+    .. [8] https://pytorch.org/docs/stable/optim.html#algorithms
     """  # noqa: E501
 
     _tags = {
@@ -542,9 +543,7 @@ class NeuralForecastLSTM(_NeuralForecastAdapter):
     def __init__(
         self: "NeuralForecastLSTM",
         freq: Union[str, int] = "auto",
-        local_scaler_type: Optional[
-            Literal["standard", "robust", "robust-iqr", "minmax", "boxcox"]
-        ] = None,
+        local_scaler_type: Optional[_SUPPORTED_LOCAL_SCALAR_TYPES] = None,
         futr_exog_list: Optional[List[str]] = None,
         verbose_fit: bool = False,
         verbose_predict: bool = False,
diff --git a/sktime/forecasting/tbats.py b/sktime/forecasting/tbats.py
index 91dc4257c..cdf2510f7 100644
--- a/sktime/forecasting/tbats.py
+++ b/sktime/forecasting/tbats.py
@@ -153,4 +153,12 @@ class TBATS(_TbatsAdapter):
             "use_arma_errors": True,
             "n_jobs": 2,
         }
-        return [params1, params2]
+        params3 = {
+            "use_box_cox": False,
+            "use_trend": False,
+            "use_damped_trend": False,
+            "sp": 3,
+            "use_arma_errors": False,
+            "n_jobs": 1,
+        }
+        return [params1, params2, params3]
diff --git a/sktime/proba/laplace.py b/sktime/proba/laplace.py
index 11158d7ab..3da08916f 100644
--- a/sktime/proba/laplace.py
+++ b/sktime/proba/laplace.py
@@ -111,7 +111,7 @@ class Laplace(BaseDistribution):
         pd.DataFrame with same rows, columns as `self`
         variance of distribution (entry-wise)
         """
-        sd_arr = self._scale / np.sqrt(2)
+        sd_arr = self._scale * np.sqrt(2)
         return pd.DataFrame(sd_arr, index=self.index, columns=self.columns) ** 2
 
     def pdf(self, x):
diff --git a/sktime/registry/_lookup.py b/sktime/registry/_lookup.py
index 4952ffc57..1adbcf7b6 100644
--- a/sktime/registry/_lookup.py
+++ b/sktime/registry/_lookup.py
@@ -48,7 +48,7 @@ def all_estimators(
     return_tags=None,
     suppress_import_stdout=True,
 ):
-    """Get a list of all estimators from sktime.
+    """List all estimators or objects in sktime, by scitype or tag.
 
     This function crawls the module and gets all classes that inherit
     from sktime's and sklearn's base classes.
@@ -156,6 +156,7 @@ def all_estimators(
         "plotting",
         "_split",
         "test_split",
+        "registry",
     )
 
     ROOT = str(Path(__file__).parent.parent)  # sktime package root directory
@@ -274,7 +275,7 @@ def all_tags(
     estimator_types=None,
     as_dataframe=False,
 ):
-    """Get a list of all tags from sktime.
+    """List all tags in sktime, for objects of a certain type.
 
     All objects in ``sktime`` are tagged with a set of :term``tag``s.
     This function allows to list all tags, optionally filtered by
diff --git a/sktime/registry/_tags.py b/sktime/registry/_tags.py
index 22933dc08..cdbee7d27 100644
--- a/sktime/registry/_tags.py
+++ b/sktime/registry/_tags.py
@@ -38,23 +38,742 @@ ESTIMATOR_TAG_LIST - list of string
 check_tag_is_valid(tag_name, tag_value) - checks whether tag_value is valid for tag_name
 """
 
-__author__ = ["fkiraly", "victordremov"]
+import inspect
+import sys
 
 import pandas as pd
 
+from sktime.base import BaseObject
+from sktime.registry._base_classes import BASE_CLASS_REGISTER
+
+
+class _BaseTag(BaseObject):
+    """Base class for all tags."""
+
+    _tags = {
+        "object_type": "tag",
+        "tag_name": "fill_this_in",  # name of the tag used in the _tags dictionary
+        "parent_type": "object",  # scitype of the parent object, str or list of str
+        "tag_type": "str",  # type of the tag value
+        "short_descr": "describe the tag here",  # short tag description, max 80 chars
+        "user_facing": True,  # whether the tag is user-facing
+    }
+
+
+# General tags, for all objects
+# -----------------------------
+
+
+class object_type(_BaseTag):
+    """Scientific type of the object.
+
+    Typing tag for all objects in ``sktime``.
+
+    - String name: ``"object_type"``
+    - Public metadata tag
+    - Values:  string or list of strings
+    - Example: ``"forecaster"``
+    - Example 2: ``["transformer", "clusterer"]`` (polymorphic object)
+    - Default: ``"object"``
+
+    In ``sktime``, every object has a scientific type (scitype),
+    determining the type of object and unified interface,
+    e.g., forecaster, time series classifier, time series regressor.
+
+    The ``object_type`` tag of an object is a string, or list of strings,
+    specifying the scitpye of the object.
+    For instance, a forecaster has scitype `"forecaster"`.
+
+    In case of a list, the object is polymorphic, and can assume (class),
+    or simultaneously satisfy different interfaces (object).
+
+    Valid scitypes are defined in ``sktime.registry.BASE_CLASS_SCITYPE_LIST``,
+    or ``sktime.registry.BASE_CLASS_REGISTER``.
+
+    The full list of scitypes in the current version is:
+    """
+
+    _tags = {
+        "tag_name": "object_type",
+        "parent_type": "object",
+        "tag_type": "str",
+        "short_descr": "type of object: estimator, transformer, regressor, etc",
+        "user_facing": True,
+    }
+
+
+# dynamically add a pretty printd list of scitypes to the docstring
+for name, _, desc in BASE_CLASS_REGISTER:
+    object_type.__doc__ += f'\n    - ``"{name}"``: {desc}'
+
+
+class maintainers(_BaseTag):
+    """Current maintainers of the object, GitHub IDs.
+
+    Part of packaging metadata for the object.
+
+    - String name: ``"maintainers"``
+    - Public metadata tag
+    - Values:  string or list of strings
+    - Example: ``["benheid", "fkiraly", "yarnabrina"]``
+    - Example 2: ``"yarnabrina"``
+    - Default: ``"sktime developers"``
+
+    The ``maintainers`` tag of an object is a string or list of strings,
+    each string being a GitHub handle of a maintainer of the object.
+
+    Maintenance extends to the specific class in ``sktime`` only,
+    and not interfaced packages or dependencies.
+
+    Maintainers should be tagged on issues and PRs related to the object,
+    and have rights and responsibilities in accordance with
+    the ``sktime`` governance model, see :ref:`algorithm-maintainers`.
+
+    To find an algorithm's maintainer, use ``get_tag("maintainers")`` on the object,
+    or use the search function in the
+    `estimator overview <https://www.sktime.net/en/stable/estimator_overview.html>`_.
+
+    In case of classes not owned by specific algorithm maintainers,
+    the tag defaults to the ``sktime`` core team.
+
+    Maintainers are given prominent visibility in the object's metadata,
+    and in automatically generated documentation.
+    """
+
+    _tags = {
+        "tag_name": "maintainers",
+        "parent_type": "object",
+        "tag_type": ("list", "str"),
+        "short_descr": "current maintainers of the object, each maintainer a GitHub handle",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+class authors(_BaseTag):
+    """Authors of the object, GitHub IDs.
+
+    Part of packaging metadata for the object.
+
+    - String name: ``"authors"``
+    - Public metadata tag
+    - Values:  string or list of strings
+    - Example: ``["benheid", "fkiraly", "yarnabrina"]``
+    - Example 2: ``"fkiraly"``
+    - Default: ``"sktime developers"``
+
+    The ``authors`` tag of an object is a string or list of strings,
+    each string being a GitHub handle of an author of the object.
+
+    Authors are credited for the original implementation of the object,
+    and contributions to the object.
+
+    In case of light wrappers around third or second party packages,
+    author credits should include authors of the wrapped object.
+
+    Authors are not necessarily maintainers of the object,
+    and do not need to be tagged on issues and PRs related to the object.
+
+    Authors are given prominent visibility in the object's metadata,
+    and in automatically generated documentation.
+
+    To find an algorithm's authors, use ``get_tag("authors")`` on the object,
+    or use the search function in the
+    `estimator overview <https://www.sktime.net/en/stable/estimator_overview.html>`_.
+    """
+
+    _tags = {
+        "tag_name": "authors",
+        "parent_type": "object",
+        "tag_type": ("list", "str"),
+        "short_descr": "list of authors of the object, each author a GitHub handle",
+        "user_facing": True,
+    }
+
+
+class python_version(_BaseTag):
+    """Python version requirement specifier for the object (PEP 440).
+
+    Part of packaging metadata for the object.
+
+    - String name: ``"python_version"``
+    - Private tag, developer and framework facing
+    - Values: PEP 440 compliant version specifier
+    - Example: ``">=3.10"``
+    - Default: no restriction
+
+    ``sktime`` manages objects and estimators like mini-packages,
+    with their own dependencies and compatibility requirements.
+    Dependencies are specified in the tags:
+
+    - ``"python_version"``: Python version specifier (PEP 440) for the object,
+    - ``"python_dependencies"``: list of required Python packages (PEP 440)
+    - ``"python_dependencies_alias"``: alias for package names,
+      if different from import names
+    - ``"env_marker"``: environment marker for the object (PEP 508)
+    - ``"requires_cython"``: whether the object requires a C compiler present
+
+    The ``python_version`` tag of an object is a PEP 440 compliant version specifier
+    string, specifying python version compatibility of the object.
+
+    The tag is used in packaging metadata for the object,
+    and is used internally to check compatibility of the object with
+    the build environment, to raise informative error messages.
+
+    Developers can use ``_check_python_version`` from ``skbase.utils.dependencies``
+    to check compatibility of the python constraint of the object
+    with the current build environment, or
+    ``_check_estimator_deps`` to check compatibility of the object
+    (including further checks) with the current build environment.
+    """
+
+    _tags = {
+        "tag_name": "python_version",
+        "parent_type": "object",
+        "tag_type": "str",
+        "short_descr": "python version specifier (PEP 440) for estimator, or None = all versions ok",  # noqa: E501
+        "user_facing": False,
+    }
+
+
+class python_dependencies(_BaseTag):
+    """Python package dependency requirement specifiers for the object (PEP 440).
+
+    Part of packaging metadata for the object.
+
+    - String name: ``"python_dependencies"``
+    - Private tag, developer and framework facing
+    - Values: str or list of str, each str a PEP 440 compliant dependency specifier
+    - Example: ``"numpy>=1.20.0"``
+    - Example 2: ``["numpy>=1.20.0", "pandas>=1.3.0"]``
+    - Default: no requirements beyond ``sktime`` core dependencies (``None``)
+
+    ``sktime`` manages objects and estimators like mini-packages,
+    with their own dependencies and compatibility requirements.
+    Dependencies are specified in the tags:
+
+    - ``"python_version"``: Python version specifier (PEP 440) for the object,
+    - ``"python_dependencies"``: list of required Python packages (PEP 440)
+    - ``"python_dependencies_alias"``: alias for package names,
+      if different from import names
+    - ``"env_marker"``: environment marker for the object (PEP 508)
+    - ``"requires_cython"``: whether the object requires a C compiler present
+
+    The ``python_dependencies`` tag of an object is string or list of strings,
+    each string a PEP 440 compliant version specifier,
+    specifying python dependency requirements of the object.
+
+    The tag is used in packaging metadata for the object,
+    and is used internally to check compatibility of the object with
+    the build environment, to raise informative error messages.
+
+    Developers should note that package names in PEP 440 specifier strings
+    are identical with the package names used in ``pip install`` commands,
+    which in general is not the same as the import name of the package,
+    e.g., ``"scikit-learn"`` and not ``"sklearn"``.
+
+    Developers can use ``_check_soft_dependencies`` from ``skbase.utils.dependencies``
+    to check compatibility of the python constraint of the object
+    with the current build environment, or
+    ``_check_estimator_deps`` to check compatibility of the object
+    (including further checks) with the current build environment.
+    """
+
+    _tags = {
+        "tag_name": "python_dependencies",
+        "parent_type": "object",
+        "tag_type": ("list", "str"),
+        "short_descr": "python dependencies of estimator as str or list of str (PEP 440)",  # noqa: E501
+        "user_facing": False,
+    }
+
+
+class python_dependencies_alias(_BaseTag):
+    """Alias for Python package dependency names for the object.
+
+    Part of packaging metadata for the object.
+
+    - String name: ``"python_dependencies_alias"``
+    - Private tag, developer and framework facing
+    - Values: dict of str, key = PEP 440 package name, value = import name
+    - Example: ``{"scikit-learn": "sklearn"}``
+    - Example 2: ``{"dtw-python": "dtw", "scikit-learn": "sklearn"}``
+    - Default: no aliases (``None``)
+
+    ``sktime`` manages objects and estimators like mini-packages,
+    with their own dependencies and compatibility requirements.
+    Dependencies are specified in the tags:
+
+    - ``"python_version"``: Python version specifier (PEP 440) for the object,
+    - ``"python_dependencies"``: list of required Python packages (PEP 440)
+    - ``"python_dependencies_alias"``: alias for package names,
+      if different from import names
+    - ``"env_marker"``: environment marker for the object (PEP 508)
+    - ``"requires_cython"``: whether the object requires a C compiler present
+
+    The ``python_dependencies_alias`` tag of an object is dict,
+    providing import name aliases for package names in the ``python_dependencies`` tag,
+    if the package name differs from the import name.
+
+    The tag is used in packaging metadata for the object,
+    and is used internally to check compatibility of the object with
+    the build environment, to raise informative error messages.
+
+    This tag is required if the package name of a dependency is different
+    from the import name of the package, e.g., ``"dtw-python"`` and ``"dtw"``.
+    If not set, the package name is assumed to be identical with the import name.
+
+    Developers should note that elements of this ``dict`` are not passed on
+    via field inheritance, unlike the tags themselves.
+    Hence, if multiple aliases are required, they need to be set in the same tag.
+    """
+
+    _tags = {
+        "tag_name": "python_dependencies_alias",
+        "parent_type": "object",
+        "tag_type": "dict",
+        "short_descr": "alias for package names in python_dependencies, key-value pairs are package name, import name",  # noqa: E501
+        "user_facing": False,
+    }
+
+
+class requires_cython(_BaseTag):
+    """Whether the object requires a C compiler present, such as libomp, gcc.
+
+    Part of packaging metadata for the object.
+
+    - String name: ``"requires_cython"``
+    - Private tag, developer and framework facing
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    ``sktime`` manages objects and estimators like mini-packages,
+    with their own dependencies and compatibility requirements.
+    Dependencies are specified in the tags:
+
+    - ``"python_version"``: Python version specifier (PEP 440) for the object,
+    - ``"python_dependencies"``: list of required Python packages (PEP 440)
+    - ``"python_dependencies_alias"``: alias for package names,
+      if different from import names
+    - ``"env_marker"``: environment marker for the object (PEP 508)
+    - ``"requires_cython"``: whether the object requires a C compiler present
+
+    The ``requires_cython`` tag of an object is a boolean,
+    specifying whether the object requires a C compiler present.
+    True means that a C compiler is required, False means it is not required.
+
+    The tag is used in packaging metadata for the object,
+    and primarily in the continuous integration and testing setup of the ``sktime``
+    package, which ensures that objects with this tag are
+    tested in specific environments with a C compiler present.
+
+    It is not used in user facing checks, error messages,
+    or recommended build processes otherwise.
+    """
+
+    _tags = {
+        "tag_name": "requires_cython",
+        "parent_type": "object",
+        "tag_type": "bool",
+        "short_descr": "whether the object requires a C compiler present such as libomp, gcc",  # noqa: E501
+        "user_facing": False,
+    }
+
+
+# Estimator tags
+# --------------
+
+# These tags are applicable to a wide range of objects,
+# most tags in this group apply to estimators
+
+# "capability:missing_values" is same as "handles-missing-data" tag.
+# They are kept distinct intentionally for easier TSC refactoring.
+# Will be merged after refactor completion.
+
+
+class capability__missing_values(_BaseTag):
+    """Capability: the estimator can handle missing data, e.g,, NaNs.
+
+    - String name: ``"capability:missing_values"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+    - Alias: ``handles-missing-data``  (forecasters, transformations)
+
+    If the tag is ``True``, the estimator can handle missing data,
+    e.g., NaNs in input data.
+
+    This applies to main and secondary input data where applicable,
+    e.g., ``X`` in ``fit`` of transformations and classifieres, or ``y`` in forecasters,
+    but not to target labels
+    in the case of labelling of entire time series, such as in
+    classification or regression.
+
+    If the tag is ``False``, the estimator cannot handle missing data,
+    and will raise an error if missing data is encountered.
+    """
+
+    _tags = {
+        "tag_name": "capability:missing_values",
+        "parent_type": "object",
+        "tag_type": "bool",
+        "short_descr": "can the estimator handle missing data (NA, np.nan) in inputs?",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+class capability__feature_importance(_BaseTag):
+    """Capability: the estimator can provide feature importance.
+
+    - String name: ``"capability:feature_importance"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    If the tag is ``True``, the estimator can produce feature importances.
+
+    Feature importances are queriable by the fitted parameter interface
+    via ``get_fitted_params``, after calling ``fit`` of the respective estimator.
+
+    If the tag is ``False``, the estimator does not produce feature importances.
+    The method ``get_fitted_params`` can be called,
+    but the list of fitted parameters will not contain feature importances.
+    """
+
+    _tags = {
+        "tag_name": "capability:feature_importance",
+        "parent_type": "estimator",
+        "tag_type": "bool",
+        "short_descr": "Can the estimator provide feature importance?",
+        "user_facing": True,
+    }
+
+
+class capability__contractable(_BaseTag):
+    """Capability: the estimator can be asked to satisfy a maximum time contract.
+
+    To avoid confusion, users should note that the literature term "contractable"
+    unusually derives its meaning from "contract", i.e., a time contract,
+    and not from "contraction", i.e., reducing the size of something.
+
+    - String name: ``"capability:contractable"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    If the tag is ``True``, the estimator can be contracted in time,
+    by using some of its parameters, to limit the maximum time spent in fitting.
+
+    Currently, there is no unified naming or selection of parameters controlling
+    the contract time setting, as this can apply to different parts of the algorithm.
+    Users should consult the documentation of the specific estimator for details.
+
+    If the tag is ``False``, the estimator does not support a contract time setting.
+    """
+
+    _tags = {
+        "tag_name": "capability:contractable",
+        "parent_type": "estimator",
+        "tag_type": "bool",
+        "short_descr": "contract time setting, does the estimator support limiting max fit time?",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+class capability__train_estimate(_BaseTag):
+    """Capability: the algorithm can estimate its performance on the training set.
+
+    - String name: ``"capability:train_estimate"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    If the tag is ``True``, the estimator can estimate its performance on
+    the training set.
+
+    More precisely, this tag describes algorithms that, when calling ``fit``,
+    produce and store an estimate of their own statistical performance,
+    e.g., via out-of-bag estimates, or cross-validation.
+
+    Training performance estimates are queriable by the fitted parameter interface
+    via ``get_fitted_params``, after calling ``fit`` of the respective estimator.
+
+    If the tag is ``False``, the estimator does not produce
+    training performance estimates.
+    The method ``get_fitted_params`` can be called,
+    but the list of fitted parameters will not contain training performance estimates.
+    """
+
+    _tags = {
+        "tag_name": "capability:train_estimate",
+        "parent_type": "estimator",
+        "tag_type": "bool",
+        "short_descr": "can the estimator estimate its performance on the training set?",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+# Forecasters
+# -----------
+
+
+class capability__exogeneous(_BaseTag):
+    """Capability: the forecaster can use exogeneous data.
+
+    The tag is currently named ``ignores-exogeneous-X``, and will be renamed.
+
+    ``False`` = does use exogeneous data, ``True`` = does not use exogeneous data.
+
+    - String name: ``"ignores-exogeneous-X"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+    - Alias: ``capability:exogeneous`` (currently not used)
+
+    Exogeneous data are additional time series,
+    that can be used to improve forecasting accuracy.
+
+    If the forecaster uses exogeneous data (``ignore-exogeneous-X=False``),
+    the ``X`` parmameter in ``fit``, ``predict``, and other methods
+    can be used to pass exogeneous data to the forecaster.
+
+    If the ``X-y-must-have-same-index`` tag is ``True``,
+    then such data must always have an index that contains that of the target series,
+    i.e., ``y`` in ``fit``, or the indices specified by ``fh`` in ``predict``.
+
+    If the tag is ``False``, the forecaster does not make use of exogeneous data.
+    ``X`` parameters can still be passed to methods, to ensure a uniform interface,
+    but the data will be ignored,
+    i.e., not used in the internal logic of the forecaster.
+
+    """
+
+    _tags = {
+        "tag_name": "ignores-exogeneous-X",
+        "parent_type": "forecaster",
+        "tag_type": "bool",
+        "short_descr": "does forecaster make use of exogeneous data?",
+        "user_facing": True,
+    }
+
+
+class capability__insample(_BaseTag):
+    """Capability: the forecaster can make in-sample predictions.
+
+    - String name: ``"capability:insample"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    If the tag is ``True``, the forecaster can make in-sample predictions,
+    i.e., predict the target series for time points that are part of the training set.
+
+    In-sample predictions are useful for model evaluation,
+    and for making predictions for the training set itself.
+
+    Mechanically, in-sample predictions are made by calling the ``predict`` method
+    and specifying a forecasting horizon ``fh`` such that at least one index
+    is queried that is equal or earlier to the latest index in the training set,
+    i.e., any data previously passed in ``fit`` or ``update``.
+
+    If the tag is ``False``, the forecaster cannot make in-sample predictions,
+    and will raise an error if an in-sample prediction is attempted.
+    """
+
+    _tags = {
+        "tag_name": "capability:insample",
+        "parent_type": "forecaster",
+        "tag_type": "bool",
+        "short_descr": "can the forecaster make in-sample predictions?",
+        "user_facing": True,
+    }
+
+
+class capability__pred_int(_BaseTag):
+    """Capability: the forecaster can make probabilistic or interval forecasts.
+
+    - String name: ``"capability:pred_int"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    ``sktime`` supports a range of ways to make probabilistic type forecasts,
+    via the following methods of any forecaster:
+
+    * ``predict_interval``: prediction intervals
+    * ``predict_quantiles``: quantile forecasts
+    * ``predict_var``: variance forecasts
+    * ``predict_proba``: distribution forecasts
+
+    If the ``capability:pred_int`` tag is ``True``, the forecaster can make
+    probabilistic type forecasts using all of the above methods.
+
+    Even if the forecaster natively implements only one of the above methods,
+    all are available to the user:
+
+    * interval and quantile forecasts are of equivalent information,
+      with intervals of a coverage assumed symmetric
+    * a forecaster with available distribution forecasts obtains
+      prediction intervals and quantile forecasts from the distribution
+    * a forecaster with available variance forecasts assumes a normal distribution
+      around the ``predict`` output as mean,
+      and derives prediction intervals and quantiles
+      from that normal distribution
+    * a forecaster with available interval or quantile uses the IQR to
+      to derive variance forecasts under normality assumptions.
+      Users should note that this may lead to a distribution forecast which
+      is not consistent with interval or quantile forecasts.
+
+    If the tag is ``False``, the forecaster cannot make probabilistic forecasts,
+    and will raise an error if a probabilistic forecast is attempted.
+    """
+
+    _tags = {
+        "tag_name": "capability:pred_int",
+        "parent_type": "forecaster",
+        "tag_type": "bool",
+        "short_descr": "does the forecaster implement predict_interval or predict_quantiles?",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+class capability__pred_int__insample(_BaseTag):
+    """Capability: the forecaster can make in-sample probabilistic forecasts.
+
+    Only relevant if the ``capability:pred_int`` tag is ``True``,
+    i.e., the forecaster can make probabilistic forecasts.
+
+    - String name: ``"capability:pred_int:insample"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``False``
+    - Default: ``True``
+
+    If the tag is ``True``, the forecaster can make
+    its probabilistic forecasts in-sample, i.e.,
+    ``predict_interval``, ``predict_quantiles``, ``predict_var``,
+    or ``predict_proba`` can be called with a forecasting horizon ``fh``
+    that includes in-sample indices, i.e., indices that are not later than
+    the latest index in the training set.
+
+    If the tag ``capability:pred_int`` is ``False``,
+    then the tag ``capability:pred_int:insample`` is irrelevant,
+    as the forecaster cannot make probabilistic forecasts at all.
+    In such a case, the tag ``capability:pred_int:insample`` should be ignored.
+
+    If the tag ``capability:pred_int`` is ``True``,
+    and is the tag ``capability:pred_int:insample`` is ``False``,
+    the forecaster can make probabilistic forecasts that are out-of-sample,
+    but cannot make in-sample probabilistic forecasts,
+    and will raise an error if an in-sample probabilistic forecast is attempted.
+    """
+
+    _tags = {
+        "tag_name": "capability:pred_int:insample",
+        "parent_type": "forecaster",
+        "tag_type": "bool",
+        "short_descr": "can the forecaster make in-sample predictions in predict_interval/quantiles?",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+# Panel data related tags
+# -----------------------
+
+# tags related to panel data, typically:
+# classification, regression, clustering, and transformations
+
+
+class capability__multivariate(_BaseTag):
+    """Capability: the estimator can handle multivariate time series.
+
+    - String name: ``"capability:multivariate"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    If the tag is ``True``, the estimator can handle multivariate time series,
+    for its main input data, i.e., the ``X`` parameter in ``fit`` of classifiers,
+    regressors, clusterers, ordinary transformers, and pairwise transformers.
+
+    If the tag is ``False``, the estimator can only handle univariate time series,
+    and will broadcast to variables (ordinary transformers), or raise an error (others).
+
+    This condition is specific to the main input data representation,
+    target data (e.g., classifier or transformation ``y``) are not considered.
+
+    The condition is also specific to the data type used, in terms of how
+    being "multivariate" is represented.
+    For instance, a ``pandas`` based time series specification is considered
+    multivariate if it has more than one column.
+    """
+
+    _tags = {
+        "tag_name": "capability:multivariate",
+        "parent_type": [
+            "classifier",
+            "clusterer",
+            "early_classifier",
+            "param_est",
+            "regressor",
+            "transformer-pairwise",
+            "transformer-pairwise-panel",
+        ],
+        "tag_type": "bool",
+        "short_descr": "can the estimator be applied to time series with 2 or more variables?",  # noqa: E501
+        "user_facing": True,
+    }
+
+
+class capability__unequal_length(_BaseTag):
+    """Capability: the estimator can handle unequal length time series.
+
+    - String name: ``"capability:unequal_length"``
+    - Public capability tag
+    - Values: boolean, ``True`` / ``False``
+    - Example: ``True``
+    - Default: ``False``
+
+    Tag applicable to estimators which can accept panel data,
+    i.e., collections of time series.
+
+    If the tag is ``True``, the estimator can handle panels of time series
+    with unequal index set, including panels of time series with
+    unequal length.
+
+    It should be noted that the capability implied by the tag is
+    strictly more general than the capability implied by the name of the tag,
+    as panels of time series of equal length can have unequal index sets.
+
+    If the tag is ``False``, the estimator requires all time series in the panel
+    to have equal length and index set, and will otherwise raise an error.
+    """
+
+    _tags = {
+        "tag_name": "capability:unequal_length",
+        "parent_type": [
+            "classifier",
+            "clusterer",
+            "early_classifier",
+            "regressor",
+            "transformer",
+            "transformer-pairwise-panel",
+        ],
+        "tag_type": "bool",
+        "short_descr": "can the estimator handle unequal length time series?",
+        "user_facing": True,
+    }
+
+
 ESTIMATOR_TAG_REGISTER = [
-    (
-        "object_type",
-        "object",
-        "str",
-        "type of object: estimator, transformer, regressor, etc",
-    ),
-    (
-        "ignores-exogeneous-X",
-        "forecaster",
-        "bool",
-        "does forecaster ignore exogeneous data (X)?",
-    ),
     (
         "univariate-only",
         "transformer",
@@ -221,30 +940,12 @@ ESTIMATOR_TAG_REGISTER = [
         "bool",
         "whether inverse_transform is expected to be an exact inverse to transform",
     ),
-    (
-        "capability:pred_int",
-        "forecaster",
-        "bool",
-        "does the forecaster implement predict_interval or predict_quantiles?",
-    ),
     (
         "capability:pred_var",
         "forecaster",
         "bool",
         "does the forecaster implement predict_variance?",
     ),
-    (
-        "capability:insample",
-        "forecaster",
-        "bool",
-        "can the forecaster make in-sample predictions?",
-    ),
-    (
-        "capability:pred_int:insample",
-        "forecaster",
-        "bool",
-        "can the forecaster make in-sample predictions in predict_interval/quantiles?",
-    ),
     (
         "capability:predict_proba",
         "classifier",
@@ -252,53 +953,6 @@ ESTIMATOR_TAG_REGISTER = [
         "does the classifier implement a non-default predict_proba, "
         "i.e., not just 0/1 probabilities obtained from predict?",
     ),
-    (
-        "capability:feature_importance",
-        "classifier",
-        "bool",
-        "Can the estimator provide feature importance?",
-    ),
-    (
-        "capability:multivariate",
-        [
-            "classifier",
-            "early_classifier",
-            "param_est",
-            "regressor",
-            "transformer-pairwise",
-            "transformer-pairwise-panel",
-        ],
-        "bool",
-        "can the classifier classify time series with 2 or more variables?",
-    ),
-    (
-        "capability:unequal_length",
-        [
-            "classifier",
-            "early_classifier",
-            "regressor",
-            "transformer",
-            "transformer-pairwise-panel",
-        ],
-        "bool",
-        "can the estimator handle unequal length time series?",
-    ),
-    # "capability:missing_values" is same as "handles-missing-data" tag.
-    # They are kept distinct intentionally for easier TSC refactoring.
-    # Will be merged after refactor completion.
-    (
-        "capability:missing_values",
-        [
-            "classifier",
-            "early_classifier",
-            "param_est",
-            "regressor",
-            "transformer-pairwise",
-            "transformer-pairwise-panel",
-        ],
-        "bool",
-        "can the classifier handle missing data (NA, np.nan) in inputs?",
-    ),
     (
         "capability:unequal_length:removes",
         "transformer",
@@ -311,18 +965,6 @@ ESTIMATOR_TAG_REGISTER = [
         "bool",
         "is the transformer result guaranteed to have no missing values?",
     ),
-    (
-        "capability:train_estimate",
-        "classifier",
-        "bool",
-        "can the classifier estimate its performance on the training set?",
-    ),
-    (
-        "capability:contractable",
-        "classifier",
-        "bool",
-        "contract time setting, does the estimator support limiting max fit time?",
-    ),
     (
         "capability:multithreading",
         ["classifier", "early_classifier"],
@@ -407,31 +1049,6 @@ ESTIMATOR_TAG_REGISTER = [
         "bool",
         "whether inner _evaluate can deal with multilevel (Panel/Hierarchical)",
     ),
-    (
-        "python_version",
-        "estimator",
-        "str",
-        "python version specifier (PEP 440) for estimator, or None = all versions ok",
-    ),
-    (
-        "python_dependencies",
-        "estimator",
-        ("list", "str"),
-        "python dependencies of estimator as str or list of str",
-    ),
-    (
-        "python_dependencies_alias",
-        "estimator",
-        "dict",
-        "should be provided if import name differs from package name, \
-        key-value pairs are package name, import name",
-    ),
-    (
-        "requires_cython",
-        "estimator",
-        "bool",
-        "whether the estimator requires a C compiler present such as libomp, gcc",
-    ),
     (
         "remember_data",
         ["forecaster", "transformer"],
@@ -522,20 +1139,24 @@ ESTIMATOR_TAG_REGISTER = [
         "bool",
         "can the estimator handle multioutput data?",
     ),
-    (
-        "maintainers",
-        "object",
-        ("list", "str"),
-        "list of current maintainers of the object, each maintainer a GitHub handle",
-    ),
-    (
-        "authors",
-        "object",
-        ("list", "str"),
-        "list of authors of the object, each author a GitHub handle",
-    ),
 ]
 
+# construct the tag register from all classes in this module
+tag_clses = inspect.getmembers(sys.modules[__name__], inspect.isclass)
+for _, cl in tag_clses:
+    # skip the base class
+    if cl.__name__ == "_BaseTag" or not issubclass(cl, _BaseTag):
+        continue
+
+    cl_tags = cl.get_class_tags()
+
+    tag_name = cl_tags["tag_name"]
+    parent_type = cl_tags["parent_type"]
+    tag_type = cl_tags["tag_type"]
+    short_descr = cl_tags["short_descr"]
+
+    ESTIMATOR_TAG_REGISTER.append((tag_name, parent_type, tag_type, short_descr))
+
 ESTIMATOR_TAG_TABLE = pd.DataFrame(ESTIMATOR_TAG_REGISTER)
 ESTIMATOR_TAG_LIST = ESTIMATOR_TAG_TABLE[0].tolist()
 
diff --git a/sktime/regression/kernel_based/__init__.py b/sktime/regression/kernel_based/__init__.py
index 70e5bb8bf..b12868d36 100644
--- a/sktime/regression/kernel_based/__init__.py
+++ b/sktime/regression/kernel_based/__init__.py
@@ -1,4 +1,5 @@
 """Kernel based time series regressors."""
-__all__ = ["RocketRegressor"]
+__all__ = ["RocketRegressor", "TimeSeriesSVRTslearn"]
 
 from sktime.regression.kernel_based._rocket_regressor import RocketRegressor
+from sktime.regression.kernel_based._svr_tslearn import TimeSeriesSVRTslearn
diff --git a/sktime/regression/kernel_based/_svr_tslearn.py b/sktime/regression/kernel_based/_svr_tslearn.py
new file mode 100644
index 000000000..6b452f53e
--- /dev/null
+++ b/sktime/regression/kernel_based/_svr_tslearn.py
@@ -0,0 +1,183 @@
+"""Time series SVR, from tslearn."""
+from sktime.base.adapters._tslearn import _TslearnAdapter
+from sktime.regression.base import BaseRegressor
+
+
+class TimeSeriesSVRTslearn(_TslearnAdapter, BaseRegressor):
+    """Time Series Suppoer Vector Regressor, from tslearn.
+
+    Direct interface to ``tslearn.svm.svm.TimeSeriesSVR``.
+
+    Parameters
+    ----------
+    C : float, optional (default=1.0)
+        Penalty parameter C of the error term.
+
+    kernel : string, optional (default='gak')
+         Specifies the kernel type to be used in the algorithm.
+         It must be one of 'gak' or a kernel accepted by ``sklearn.svm.SVR``.
+         If none is given, 'gak' will be used. If a callable is given it is
+         used to pre-compute the kernel matrix from data matrices; that matrix
+         should be an array of shape ``(n_samples, n_samples)``.
+
+    degree : int, optional (default=3)
+        Degree of the polynomial kernel function ('poly').
+        Ignored by all other kernels.
+
+    gamma : float, optional (default='auto')
+        Kernel coefficient for 'gak', 'rbf', 'poly' and 'sigmoid'.
+        If gamma is 'auto' then:
+
+        - for 'gak' kernel, it is computed based on a sampling of the training
+          set ``tslearn.metrics.gamma_soft_dtw``
+        - for other kernels (eg. 'rbf'), 1/n_features will be used.
+
+    coef0 : float, optional (default=0.0)
+        Independent term in kernel function.
+        It is only significant in 'poly' and 'sigmoid'.
+
+    tol : float, optional (default=1e-3)
+        Tolerance for stopping criterion.
+
+    epsilon : float, optional (default=0.1)
+         Epsilon in the epsilon-SVR model. It specifies the epsilon-tube
+         within which no penalty is associated in the training loss function
+         with points predicted within a distance epsilon from the actual
+         value.
+
+    shrinking : boolean, optional (default=True)
+        Whether to use the shrinking heuristic.
+
+    cache_size :  float, optional (default=200.0)
+        Specify the size of the kernel cache (in MB).
+
+    n_jobs : int or None, optional (default=None)
+        The number of jobs to run in parallel for GAK cross-similarity matrix
+        computations.
+        ``None`` means 1 unless in a :obj:`joblib.parallel_backend` context.
+        ``-1`` means using all processors. See scikit-learns'
+        `Glossary <https://scikit-learn.org/stable/glossary.html#term-n-jobs>`_
+        for more details.
+
+    verbose : int, default: 0
+        Enable verbose output. Note that this setting takes advantage of a
+        per-process runtime setting in libsvm that, if enabled, may not work
+        properly in a multithreaded context.
+
+    max_iter : int, optional (default=-1)
+        Hard limit on iterations within solver, or -1 for no limit.
+
+    Attributes
+    ----------
+    support_ : array-like, shape = [n_SV]
+        Indices of support vectors.
+
+    support_vectors_ : array of shape [n_SV, sz, d]
+        Support vectors in tslearn dataset format
+
+    dual_coef_ : array, shape = [1, n_SV]
+        Coefficients of the support vector in the decision function.
+
+    coef_ : array, shape = [1, n_features]
+        Weights assigned to the features (coefficients in the primal
+        problem). This is only available in the case of a linear kernel.
+        `coef_` is readonly property derived from `dual_coef_` and
+        `support_vectors_`.
+
+    intercept_ : array, shape = [1]
+        Constants in decision function.
+
+    sample_weight : array-like, shape = [n_samples]
+        Individual weights for each sample
+
+    svm_estimator_ : sklearn.svm.SVR
+        The underlying sklearn estimator
+    """
+
+    _tags = {
+        # packaging info
+        # --------------
+        "authors": ["rtavenar", "yanncabanes", "fkiraly"],
+        # rtavenar and yanncabanes for interfaced estimator
+        "python_dependencies": "tslearn",
+        # estimator type
+        # --------------
+        "capability:multivariate": True,
+        "capability:unequal_length": False,
+    }
+
+    # defines the name of the attribute containing the tslearn estimator
+    _estimator_attr = "_tslearn_svr"
+
+    def _get_tslearn_class(self):
+        """Get tslearn class.
+
+        should import and return tslearn class
+        """
+        from tslearn.svm.svm import TimeSeriesSVR as _TimeSeriesSVR
+
+        return _TimeSeriesSVR
+
+    def __init__(
+        self,
+        C=1.0,
+        kernel="gak",
+        degree=3,
+        gamma="auto",
+        coef0=0.0,
+        shrinking=True,
+        tol=0.001,
+        epsilon=0.1,
+        cache_size=200,
+        n_jobs=None,
+        verbose=0,
+        max_iter=-1,
+    ):
+        self.C = C
+        self.kernel = kernel
+        self.degree = degree
+        self.gamma = gamma
+        self.coef0 = coef0
+        self.shrinking = shrinking
+        self.tol = tol
+        self.epsilon = epsilon
+        self.cache_size = cache_size
+        self.n_jobs = n_jobs
+        self.verbose = verbose
+        self.max_iter = max_iter
+
+        super().__init__()
+
+    @classmethod
+    def get_test_params(cls, parameter_set="default"):
+        """Return testing parameter settings for the estimator.
+
+        Parameters
+        ----------
+        parameter_set : str, default="default"
+            Name of the set of test parameters to return, for use in tests. If no
+            special parameters are defined for a value, will return ``"default"`` set.
+
+
+        Returns
+        -------
+        params : dict or list of dict, default = {}
+            Parameters to create testing instances of the class
+            Each dict are parameters to construct an "interesting" test instance, i.e.,
+            ``MyClass(**params)`` or ``MyClass(**params[i])`` creates a valid test
+            instance.
+            ``create_test_instance`` uses the first (or only) dictionary in ``params``
+        """
+        params1 = {"cache_size": 50}
+        params2 = {
+            "C": 0.9,
+            "kernel": "poly",
+            "degree": 2,
+            "gamma": 0.1,
+            "coef0": 0.1,
+            "tol": 0.01,
+            "epsilon": 0.2,
+            "shrinking": False,
+            "cache_size": 55,
+        }
+        return [params1, params2]
diff --git a/sktime/transformations/bootstrap/_tsbootstrap.py b/sktime/transformations/bootstrap/_tsbootstrap.py
index af3d2fb07..6ea5bb6a2 100644
--- a/sktime/transformations/bootstrap/_tsbootstrap.py
+++ b/sktime/transformations/bootstrap/_tsbootstrap.py
@@ -39,6 +39,12 @@ class TSBootstrapAdapter(BaseTransformer):
     """
 
     _tags = {
+        # packaging info
+        # --------------
+        "authors": "benheid",
+        "python_dependencies": ["tsbootstrap>=0.1.0"],
+        # estimator type
+        # --------------
         "scitype:transform-input": "Series",
         "scitype:transform-output": "Panel",
         "scitype:instancewise": True,  # is this an instance-wise transform?
@@ -51,8 +57,7 @@ class TSBootstrapAdapter(BaseTransformer):
         "X-y-must-have-same-index": False,  # can estimator handle different X/y index?
         "enforce_index_type": None,  # index type that needs to be enforced in X/y
         "fit_is_empty": True,  # is fit empty and can be skipped? Yes = True
-        "transform-returns-same-time-index": False,
-        "python_dependencies": ["tsbootstrap>=0.1.0"],
+        "transform-returns-same-time-index": True,
     }
 
     def __init__(
@@ -83,19 +88,18 @@ class TSBootstrapAdapter(BaseTransformer):
         """
         bootstrapped_samples = self.bootstrap.bootstrap(X, test_ratio=0)
 
-        bootstrapped_samples = [pd.DataFrame(sample) for sample in bootstrapped_samples]
+        def wrap_df(spl):
+            return pd.DataFrame(spl, index=X.index, columns=X.columns)
 
-        boostrapped_df = pd.concat(
-            bootstrapped_samples,
-            keys=[f"synthetic_{i}" for i in range(len(bootstrapped_samples))],
-        )
+        bootstrapped_samples = [wrap_df(sample) for sample in bootstrapped_samples]
+        spl_keys = [f"synthetic_{i}" for i in range(len(bootstrapped_samples))]
 
-        _X = X.copy()
         if self.include_actual:
-            _X.index = pd.MultiIndex.from_product([["actual"], range(len(X))])
-            return pd.concat([_X, boostrapped_df], axis=0)
-        else:
-            return boostrapped_df
+            X_actual = X.copy()
+            bootstrapped_samples = [X_actual] + bootstrapped_samples
+            spl_keys = ["actual"] + spl_keys
+
+        return pd.concat(bootstrapped_samples, keys=spl_keys, axis=0)
 
     @classmethod
     def get_test_params(cls, parameter_set="default"):
@@ -107,7 +111,6 @@ class TSBootstrapAdapter(BaseTransformer):
             Name of the set of test parameters to return, for use in tests. If no
             special parameters are defined for a value, will return `"default"` set.
 
-
         Returns
         -------
         params : dict or list of dict, default = {}
diff --git a/sktime/transformations/panel/catch22wrapper.py b/sktime/transformations/panel/catch22wrapper.py
index c71a03721..27c14bcd6 100644
--- a/sktime/transformations/panel/catch22wrapper.py
+++ b/sktime/transformations/panel/catch22wrapper.py
@@ -14,9 +14,10 @@ from sktime.transformations.panel import catch22
 
 
 class Catch22Wrapper(BaseTransformer):
-    """Canonical Time-series Characteristics (Catch22) C Wrapper.
+    """Canonical Time-series Characteristics (Catch22 and 24), using pycatch22 package.
 
-    Wraps the pycatch22 implementation for sktime
+    Direct interface to the ``pycatch22`` implementation of Catch-22 and Catch-24
+    feature sets
     (https://github.com/DynamicsAndNeuralSystems/pycatch22).
 
     Overview: Input n series with d dimensions of length m
@@ -59,7 +60,8 @@ class Catch22Wrapper(BaseTransformer):
 
     See Also
     --------
-    Catch22 Catch22Classifier
+    Catch22
+    Catch22Classifier
 
     References
     ----------
@@ -74,8 +76,8 @@ class Catch22Wrapper(BaseTransformer):
     _tags = {
         # packaging info
         # --------------
-        "authors": ["MatthewMiddlehurst", "fkiraly"],
-        "maintainers": "benfulcher",
+        "authors": ["benfulcher", "jmoo2880", "MatthewMiddlehurst", "fkiraly"],
+        "maintainers": ["benfulcher", "jmoo2880"],
         "python_dependencies": "pycatch22",
         # estimator type
         # --------------
diff --git a/sktime/transformations/series/summarize.py b/sktime/transformations/series/summarize.py
index 86d000ad7..1063e45e7 100644
--- a/sktime/transformations/series/summarize.py
+++ b/sktime/transformations/series/summarize.py
@@ -451,60 +451,26 @@ def _window_feature(Z, summarizer=None, window=None, bfill=False):
     """
     lag = window[0]
     window_length = window[1]
-
+    feat: pd.DataFrame = pd.DataFrame()
     if summarizer in pd_rolling:
-        if isinstance(Z, pd.core.groupby.generic.SeriesGroupBy):
-            if bfill is False:
-                feat = getattr(
-                    Z.shift(lag).rolling(
-                        window=window_length, min_periods=window_length
-                    ),
-                    summarizer,
-                )()
-            else:
-                feat = getattr(
-                    Z.shift(lag)
-                    .bfill()
-                    .rolling(window=window_length, min_periods=window_length),
-                    summarizer,
-                )()
-            feat = pd.DataFrame(feat)
-        else:
-            if bfill is False:
-                feat = Z.apply(
-                    lambda x: getattr(
-                        x.rolling(window=window_length, min_periods=window_length),
-                        summarizer,
-                    )().shift(lag)
-                )
-            else:
-                feat = Z.apply(
-                    lambda x: getattr(
-                        x.rolling(window=window_length, min_periods=window_length),
-                        summarizer,
-                    )()
-                    .shift(lag)
-                    .bfill()
-                )
+        feat = Z.transform(
+            lambda x: getattr(
+                x.rolling(window=window_length, min_periods=window_length), summarizer
+            )().shift(lag)
+        )
+    elif summarizer == "lag":
+        feat = Z.transform(lambda x: x.shift(lag))
+    elif callable(summarizer):
+        feat = Z.transform(
+            lambda x: x.rolling(window=window_length, min_periods=window_length)
+            .apply(summarizer, raw=True)
+            .shift(lag)
+        )
     else:
-        if isinstance(Z, pd.core.groupby.generic.SeriesGroupBy) and callable(
-            summarizer
-        ):
-            feat = Z.rolling(window_length).apply(summarizer, raw=True)
-        elif not isinstance(Z, pd.core.groupby.generic.SeriesGroupBy) and callable(
-            summarizer
-        ):
-            feat = Z.apply(
-                lambda x: x.rolling(
-                    window=window_length, min_periods=window_length
-                ).apply(summarizer, raw=True)
-            )
-        if bfill is False:
-            feat = Z.shift(lag)
-        else:
-            feat = Z.shift(lag).bfill()
+        raise ValueError("The provided summarizer is not callable.")
+    feat = pd.DataFrame(feat)
 
-        feat = pd.DataFrame(feat)
+    # Handle backfill
     if bfill is True:
         feat = feat.bfill()
 


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 02a099845..fc7027c0e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -182,7 +182,7 @@ jobs:
 
   test-cython-estimators:
     needs: test-nosoftdeps
-    runs-on: macos-latest
+    runs-on: macos-13
     steps:
       - uses: actions/checkout@v4
 
@@ -267,7 +267,7 @@ jobs:
       fail-fast: false  # to not fail all combinations if just one fail
       matrix:
         python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
-        os: [ubuntu-latest, macos-latest, windows-latest]
+        os: [ubuntu-latest, macos-13, windows-latest]
     runs-on: ${{ matrix.os }}
     steps:
       - uses: actions/checkout@v4
diff --git a/.github/workflows/test_all.yml b/.github/workflows/test_all.yml
index db6211e22..88342dd63 100644
--- a/.github/workflows/test_all.yml
+++ b/.github/workflows/test_all.yml
@@ -32,7 +32,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
     runs-on: ${{ matrix.operating-system }}
@@ -64,7 +64,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
         sktime-component:
@@ -107,7 +107,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
     runs-on: ${{ matrix.operating-system }}
diff --git a/.github/workflows/test_base.yml b/.github/workflows/test_base.yml
index 6c1ef97c5..4f8dfbc99 100644
--- a/.github/workflows/test_base.yml
+++ b/.github/workflows/test_base.yml
@@ -32,7 +32,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
     runs-on: ${{ matrix.operating-system }}
diff --git a/.github/workflows/test_datasets.yml b/.github/workflows/test_datasets.yml
index d1c119c2e..ed933e228 100644
--- a/.github/workflows/test_datasets.yml
+++ b/.github/workflows/test_datasets.yml
@@ -17,7 +17,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
     runs-on: ${{ matrix.operating-system }}
@@ -57,7 +57,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
     runs-on: ${{ matrix.operating-system }}
diff --git a/.github/workflows/test_module.yml b/.github/workflows/test_module.yml
index e22e90b3c..7f80e4a0b 100644
--- a/.github/workflows/test_module.yml
+++ b/.github/workflows/test_module.yml
@@ -64,7 +64,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
         sktime-component: ${{ fromJSON(needs.detect.outputs.module_changes) }}
diff --git a/.github/workflows/test_other.yml b/.github/workflows/test_other.yml
index c3f44e0dc..214ed2f26 100644
--- a/.github/workflows/test_other.yml
+++ b/.github/workflows/test_other.yml
@@ -45,7 +45,7 @@ jobs:
           - "3.11"
           - "3.12"
         operating-system:
-          - macos-latest
+          - macos-13
           - ubuntu-latest
           - windows-latest
     runs-on: ${{ matrix.operating-system }}
diff --git a/sktime/forecasting/tests/test_neuralforecast.py b/sktime/forecasting/tests/test_neuralforecast.py
index 59a0e3f15..ed274e8b5 100644
--- a/sktime/forecasting/tests/test_neuralforecast.py
+++ b/sktime/forecasting/tests/test_neuralforecast.py
@@ -174,8 +174,11 @@ def test_neural_forecast_with_auto_freq(model_class) -> None:
     # predict with trained model
     y_pred = model.predict()
 
-    # check interpreted freq
-    assert y_pred.index.freq == "A-DEC"
+    # convert freq str to DateOffset object for comparison
+    offset_freq = pandas.tseries.frequencies.to_offset(y_train.index.freq)
+    offset_auto_freq = pandas.tseries.frequencies.to_offset(y_pred.index.freq)
+
+    assert offset_freq == offset_auto_freq
 
 
 @pytest.mark.parametrize("model_class", [NeuralForecastLSTM, NeuralForecastRNN])
diff --git a/sktime/tests/_config.py b/sktime/tests/_config.py
index 316b3faa3..caa4679ab 100644
--- a/sktime/tests/_config.py
+++ b/sktime/tests/_config.py
@@ -217,6 +217,7 @@ EXCLUDED_TESTS = {
     "LTSFLinearForecaster": ["test_predict_time_index_in_sample_full"],
     "LTSFDLinearForecaster": ["test_predict_time_index_in_sample_full"],
     "LTSFNLinearForecaster": ["test_predict_time_index_in_sample_full"],
+    "HFTransformersForecaster": ["test_predict_time_index_in_sample_full"],
     "WEASEL": ["test_multiprocessing_idempotent"],  # see 5658
     # StatsForecastMSTL is failing in probabistic forecasts, see #5703, #5920
     "StatsForecastMSTL": ["test_pred_int_tag"],
@@ -224,6 +225,16 @@ EXCLUDED_TESTS = {
     "KNeighborsTimeSeriesClassifierTslearn": ["test_multiprocessing_idempotent"],
     # ShapeletTransformPyts creates nested numpy shapelets sporadically, see #6171
     "ShapeletTransformPyts": ["test_non_state_changing_method_contract"],
+    "TimeSeriesSVRTslearn": [  # not deterministic, see 6274
+        "test_fit_idempotent",
+        "test_multiprocessing_idempotent",
+    ],
+    # ShapeletLearningClassifier is non-pickleable due to DL dependencies
+    "ShapeletLearningClassifierTslearn": [
+        "test_persistence_via_pickle",
+        "test_save_estimators_to_file",
+        "test_fit_idempotent",
+    ],
 }
 
 # We use estimator tags in addition to class hierarchies to further distinguish
diff --git a/sktime/transformations/series/tests/test_window_summarizer.py b/sktime/transformations/series/tests/test_window_summarizer.py
index 7cb16aadf..aa7d687c1 100644
--- a/sktime/transformations/series/tests/test_window_summarizer.py
+++ b/sktime/transformations/series/tests/test_window_summarizer.py
@@ -194,3 +194,129 @@ def test_wrong_column():
     transformer = WindowSummarizer(target_cols=["dummy"])
     Xt = transformer.fit_transform(X_ll_train)
     return Xt
+
+
+def count_unique(x):
+    return len(np.unique(x))
+
+
+def count_greater_zero(x):
+    return np.sum((x > 0)[::-1])
+
+
+kwargs_custom_function = {
+    "lag_feature": {
+        count_unique: [[1, 2]],
+    }
+}
+
+kwargs_lag_custom_function = {
+    "lag_feature": {
+        count_unique: [[1, 2]],
+        count_greater_zero: [[1, 3]],
+        "lag": [1],
+        "sum": [[1, 2]],
+    },
+}
+
+
+@pytest.mark.parametrize(
+    "kwargs, column_names, y, X, target_cols, truncate",
+    [
+        (
+            kwargs_custom_function,
+            ["a_count_unique_1_2"],
+            y_pd,
+            pd.DataFrame({"a_count_unique_1_2": [np.NAN, np.NAN, 2.0, 2.0]}),
+            None,
+            None,
+        ),
+        (
+            kwargs_lag_custom_function,
+            ["a_count_unique_1_2", "a_count_greater_zero_1_3", "a_lag_1", "a_sum_1_2"],
+            y_pd,
+            pd.DataFrame(
+                {
+                    "a_count_unique_1_2": [np.NAN, np.NAN, 2.0, 2.0],
+                    "a_count_greater_zero_1_3": [np.NAN, np.NAN, np.NAN, 3.0],
+                    "a_lag_1": [np.NAN, 1.0, 4.0, 0.5],
+                    "a_sum_1_2": [np.NAN, np.NAN, 5.0, 4.5],
+                },
+            ),
+            None,
+            None,
+        ),
+        (
+            kwargs_lag_custom_function,
+            ["a_count_unique_1_2", "a_count_greater_zero_1_3", "a_lag_1", "a_sum_1_2"],
+            y_multi,
+            pd.DataFrame(
+                {
+                    "var_0_count_unique_1_2": [
+                        np.NAN,
+                        np.NAN,
+                        2.0,
+                        np.NAN,
+                        np.NAN,
+                        2.0,
+                        np.NAN,
+                        np.NAN,
+                        2.0,
+                    ],
+                    "var_0_count_greater_zero_1_3": [
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                        np.NAN,
+                    ],
+                    "var_0_lag_1": [
+                        np.NAN,
+                        1.0,
+                        2.0,
+                        np.NAN,
+                        1.0,
+                        2.0,
+                        np.NAN,
+                        1.0,
+                        2.0,
+                    ],
+                    "var_0_sum_1_2": [
+                        np.NAN,
+                        np.NAN,
+                        3.0,
+                        np.NAN,
+                        np.NAN,
+                        3.0,
+                        np.NAN,
+                        np.NAN,
+                        3.0,
+                    ],
+                    "var_1": y_multi["var_1"],
+                },
+                index=y_multi.index,
+            ),
+            ["var_0"],
+            None,
+        ),
+    ],
+)
+def test_windowsummarizer_with_output(
+    kwargs, column_names, y, X, target_cols, truncate
+):
+    """Test X match kwargs arguments."""
+    if kwargs is not None:
+        transformer = WindowSummarizer(
+            **kwargs, target_cols=target_cols, truncate=truncate
+        )
+    else:
+        transformer = WindowSummarizer(target_cols=target_cols, truncate=truncate)
+    Xt = transformer.fit_transform(y)
+    pd.testing.assert_frame_equal(Xt, X)
+
+    # Checking for duplicate index names
+    assert len(set(Xt.index.names)) == len(X.index.names)