Repository: sktime/sktime
Pull request #6198 (2024-03-23 13:44:25)

[MNT] 0.28.0 deprecations and change actions
Carries out deprecations and change actions scheduled for 0.28.0:

* removed `n_jobs` parameter in `Catch22Wrapper`
* in `ProphetPiecewiseLinearTrendForecaster`, switch seasonality defaults to False
* finalize rename cycle for `PAA`, `SAX`
* bump deprecation/change checks scheduled for 0.28.0 to 0.29.0


Patch:
diff --git a/.all-contributorsrc b/.all-contributorsrc
index d44f41409..129f371c6 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2668,6 +2668,16 @@
         "maintenance"
       ]
     },
+    {
+      "login": "YashKhare20",
+      "name": "Yash Khare",
+      "avatar_url": "https://avatars.githubusercontent.com/u/92680366?s=400",
+      "profile": "https://github.com/YashKhare20",
+      "contributions": [
+        "code",
+        "doc"
+      ]
+    },
     {
       "login": "ianspektor",
       "name": "Ian Spektor",
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 15dee5a8a..617379ce8 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -53,7 +53,7 @@ Please go through the checklist below. Please feel free to remove points if they
 - [ ] I've added myself to the [list of contributors](https://github.com/sktime/sktime/blob/main/CONTRIBUTORS.md) with any new badges I've earned :-)
   How to: add yourself to the [all-contributors file](https://github.com/sktime/sktime/blob/main/.all-contributorsrc) in the `sktime` root directory (not the `CONTRIBUTORS.md`). Common badges: `code` - fixing a bug, or adding code logic. `doc` - writing or improving documentation or docstrings. `bug` - reporting or diagnosing a bug (get this plus `code` if you also fixed the bug in the PR).`maintenance` - CI, test framework, release.
   See here for [full badge reference](https://allcontributors.org/docs/en/emoji-key)
-- [ ] Optionally, I've added myself and possibly others to the [CODEOWNERS](https://github.com/sktime/sktime/blob/main/CODEOWNERS) file - do this if you want to become the owner or maintainer of an estimator you added.
+- [ ] Optionally, for added estimators: I've added myself and possibly to the `maintainers` tag - do this if you want to become the owner or maintainer of an estimator you added.
   See here for further details on the [algorithm maintainer role](https://www.sktime.net/en/latest/get_involved/governance.html#algorithm-maintainers).
 - [ ] The PR title starts with either [ENH], [MNT], [DOC], or [BUG]. [BUG] - bugfix, [MNT] - CI, test framework, [ENH] - adding or improving code, [DOC] - writing or improving documentation or docstrings.
 
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index d5bdf7d7e..03a618cce 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-265-orange.svg)](#contributors)
+[![All Contributors](https://img.shields.io/badge/all_contributors-266-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!
@@ -181,9 +181,10 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/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>
       <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/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>
+      <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>
     </tr>
     <tr>
+      <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>
       <td align="center" valign="top" width="11.11%"><a href="http://marcelotryle.com"><img src="https://avatars3.githubusercontent.com/u/7353520?v=4?s=100" width="100px;" alt="Marcelo Trylesinski"/><br /><sub><b>Marcelo Trylesinski</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Kludex" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MarcoGorelli"><img src="https://avatars2.githubusercontent.com/u/33491632?v=4?s=100" width="100px;" alt="Marco Gorelli"/><br /><sub><b>Marco Gorelli</b></sub></a><br /><a href="#infra-MarcoGorelli" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="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>
@@ -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://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>
     </tr>
     <tr>
+      <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>
       <td align="center" valign="top" width="11.11%"><a href="http://www.timeseriesclassification.com"><img src="https://avatars0.githubusercontent.com/u/25731235?v=4?s=100" width="100px;" alt="Matthew Middlehurst"/><br /><sub><b>Matthew Middlehurst</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=MatthewMiddlehurst" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=MatthewMiddlehurst" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=MatthewMiddlehurst" title="Tests">⚠️</a> <a href="#tutorial-MatthewMiddlehurst" title="Tutorials">✅</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3AMatthewMiddlehurst" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sktime/sktime/issues?q=author%3AMatthewMiddlehurst" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tvdboom"><img src="https://avatars.githubusercontent.com/u/32366550?v=4?s=100" width="100px;" alt="Mavs"/><br /><sub><b>Mavs</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=tvdboom" title="Code">💻</a></td>
       <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>
@@ -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://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/MichalChromcak"><img src="https://avatars1.githubusercontent.com/u/12393430?v=4?s=100" width="100px;" alt="Michal Chromcak"/><br /><sub><b>Michal Chromcak</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=MichalChromcak" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=MichalChromcak" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=MichalChromcak" title="Tests">⚠️</a> <a href="#tutorial-MichalChromcak" title="Tutorials">✅</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/MichalChromcak"><img src="https://avatars1.githubusercontent.com/u/12393430?v=4?s=100" width="100px;" alt="Michal Chromcak"/><br /><sub><b>Michal Chromcak</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=MichalChromcak" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=MichalChromcak" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=MichalChromcak" title="Tests">⚠️</a> <a href="#tutorial-MichalChromcak" title="Tutorials">✅</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/miraep8"><img src="https://avatars.githubusercontent.com/u/10511777?s=400&u=10a774fd4be767fa3b23a82a98bbfe102c17f0f3&v=4?s=100" width="100px;" alt="Mirae Parker"/><br /><sub><b>Mirae Parker</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=miraep8" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=miraep8" title="Tests">⚠️</a></td>
       <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>
@@ -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/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>
-      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/nshahpazov/"><img src="https://avatars.githubusercontent.com/nshahpazov?s=100" width="100px;" alt="Nikola Shahpazov"/><br /><sub><b>Nikola Shahpazov</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=nshahpazov" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/nshahpazov/"><img src="https://avatars.githubusercontent.com/nshahpazov?s=100" width="100px;" alt="Nikola Shahpazov"/><br /><sub><b>Nikola Shahpazov</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=nshahpazov" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/nilesh05apr"><img src="https://avatars.githubusercontent.com/u/65773314?v=4?s=100" width="100px;" alt="Nilesh Kumar"/><br /><sub><b>Nilesh Kumar</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=nilesh05apr" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ninfueng"><img src="https://avatars2.githubusercontent.com/u/28499769?v=4?s=100" width="100px;" alt="Ninnart Fuengfusin"/><br /><sub><b>Ninnart Fuengfusin</b></sub></a><br /><a href="https://github.com/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>
@@ -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/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>
-      <td align="center" valign="top" width="11.11%"><a href="https://ber.gp"><img src="https://avatars1.githubusercontent.com/u/9824244?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Pangoraw" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://ber.gp"><img src="https://avatars1.githubusercontent.com/u/9824244?v=4?s=100" width="100px;" alt="Paul"/><br /><sub><b>Paul</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Pangoraw" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/paulyim97/"><img src="https://avatars.githubusercontent.com/pyyim?s=100" width="100px;" alt="Paul Yim"/><br /><sub><b>Paul Yim</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=pyyim" title="Code">💻</a> <a href="#example-pyyim" title="Examples">💡</a> <a href="https://github.com/sktime/sktime/commits?author=pyyim" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://www.imes.uni-hannover.de/de/institut/team/m-sc-karl-philipp-kortmann/"><img src="https://avatars.githubusercontent.com/u/20466981?v=4?s=100" width="100px;" alt="Philipp Kortmann"/><br /><sub><b>Philipp Kortmann</b></sub></a><br /><a href="https://github.com/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>
@@ -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://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>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Ram0nB"><img src="https://avatars.githubusercontent.com/u/45173421?s=100" width="100px;" alt="Ramon Bussing"/><br /><sub><b>Ramon Bussing</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Ram0nB" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=Ram0nB" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Ram0nB"><img src="https://avatars.githubusercontent.com/u/45173421?s=100" width="100px;" alt="Ramon Bussing"/><br /><sub><b>Ramon Bussing</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Ram0nB" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=Ram0nB" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/RavenRudi"><img src="https://avatars.githubusercontent.com/u/46402968?v=4?s=100" width="100px;" alt="RavenRudi"/><br /><sub><b>RavenRudi</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=RavenRudi" title="Code">💻</a></td>
       <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>
@@ -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/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>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/rnkuhns"><img src="https://avatars0.githubusercontent.com/u/26907244?v=4?s=100" width="100px;" alt="Ryan Kuhns"/><br /><sub><b>Ryan Kuhns</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=RNKuhns" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=RNKuhns" title="Documentation">📖</a> <a href="#tutorial-RNKuhns" title="Tutorials">✅</a> <a href="#example-RNKuhns" title="Examples">💡</a> <a href="#ideas-RNKuhns" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3ARNKuhns" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sktime/sktime/commits?author=RNKuhns" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/rnkuhns"><img src="https://avatars0.githubusercontent.com/u/26907244?v=4?s=100" width="100px;" alt="Ryan Kuhns"/><br /><sub><b>Ryan Kuhns</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=RNKuhns" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=RNKuhns" title="Documentation">📖</a> <a href="#tutorial-RNKuhns" title="Tutorials">✅</a> <a href="#example-RNKuhns" title="Examples">💡</a> <a href="#ideas-RNKuhns" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3ARNKuhns" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sktime/sktime/commits?author=RNKuhns" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/achieveordie"><img src="https://avatars.githubusercontent.com/u/54197164?v=4?s=100" width="100px;" alt="Sagar Mishra"/><br /><sub><b>Sagar Mishra</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Aachieveordie" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=achieveordie" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=achieveordie" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://sajay.online"><img src="https://avatars2.githubusercontent.com/u/25329624?v=4?s=100" width="100px;" alt="Sajaysurya Ganesh"/><br /><sub><b>Sajaysurya Ganesh</b></sub></a><br /><a href="https://github.com/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>
@@ -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://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>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/dasgupsa"><img src="https://avatars2.githubusercontent.com/u/10398956?v=4?s=100" width="100px;" alt="Saurabh Dasgupta"/><br /><sub><b>Saurabh Dasgupta</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=dasgupsa" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/dasgupsa"><img src="https://avatars2.githubusercontent.com/u/10398956?v=4?s=100" width="100px;" alt="Saurabh Dasgupta"/><br /><sub><b>Saurabh Dasgupta</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=dasgupsa" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/SebasKoel"><img src="https://avatars3.githubusercontent.com/u/66252156?v=4?s=100" width="100px;" alt="Sebastiaan Koel"/><br /><sub><b>Sebastiaan Koel</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=SebasKoel" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=SebasKoel" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/shagn"><img src="https://avatars.githubusercontent.com/u/16029092?v=4?s=100" width="100px;" alt="Sebastian Hagn"/><br /><sub><b>Sebastian Hagn</b></sub></a><br /><a href="https://github.com/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>
@@ -269,9 +270,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/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://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>
     </tr>
     <tr>
+      <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>
       <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>
@@ -280,9 +281,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/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>
     </tr>
     <tr>
+      <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>
       <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>
@@ -291,9 +292,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/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>
     </tr>
     <tr>
+      <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>
       <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>
@@ -302,9 +303,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/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/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>
     </tr>
     <tr>
+      <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>
       <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>
@@ -313,9 +314,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/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>
     </tr>
     <tr>
+      <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>
       <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>
@@ -324,9 +325,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/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/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>
       <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>
@@ -335,9 +336,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/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/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>
       <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>
diff --git a/README.md b/README.md
index a340793d7..7880d5969 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
 
 > A unified interface for machine learning with time series
 
-:rocket: **Version 0.27.0 out now!** [Check out the release notes here](https://www.sktime.net/en/latest/changelog.html).
+:rocket: **Version 0.27.1 out now!** [Check out the release notes here](https://www.sktime.net/en/latest/changelog.html).
 
 sktime is a library for time series analysis in Python. It provides a unified interface for multiple time series learning tasks. Currently, this includes time series classification, regression, clustering, annotation, and forecasting. It comes with [time series algorithms](https://www.sktime.net/en/stable/estimator_overview.html) and [scikit-learn] compatible tools to build, tune and validate time series models.
 
@@ -227,6 +227,15 @@ There are many ways to join the sktime community. We follow the [all-contributor
 [enhancement proposals]: https://github.com/sktime/enhancement-proposals
 [roles]: https://www.sktime.net/en/latest/about/team.html
 
+## :trophy: Hall of fame
+
+Thanks to all our community for all your wonderful contributions, PRs, issues, ideas.
+
+<a href="https://github.com/sktime/sktime/graphs/contributors">
+<img src="https://opencollective.com/sktime/contributors.svg?width=600&button=false" />
+</a>
+<br>
+
 ## :bulb: Project vision
 
 * **By the community, for the community** -- developed by a friendly and collaborative community.
diff --git a/docs/source/api_reference/transformations.rst b/docs/source/api_reference/transformations.rst
index 1a2388973..b584c4d25 100644
--- a/docs/source/api_reference/transformations.rst
+++ b/docs/source/api_reference/transformations.rst
@@ -445,7 +445,7 @@ Binning, sampling and segmentation
     :toctree: auto_generated/
     :template: class.rst
 
-    PAA2
+    PAA
 
 .. currentmodule:: sktime.transformations.series.sax
 
@@ -453,7 +453,7 @@ Binning, sampling and segmentation
     :toctree: auto_generated/
     :template: class.rst
 
-    SAX2
+    SAX
 
 .. currentmodule:: sktime.transformations.panel.dictionary_based
 
@@ -461,8 +461,8 @@ Binning, sampling and segmentation
     :toctree: auto_generated/
     :template: class.rst
 
-    PAA
-    SAX
+    PAAlegacy
+    SAXlegacy
 
 Missing value treatment
 ~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst
index 478c646cf..df5ddd738 100644
--- a/docs/source/changelog.rst
+++ b/docs/source/changelog.rst
@@ -18,6 +18,274 @@ available on GitHub.
 For upcoming changes and next releases, see our `milestones <https://github.com/sktime/sktime/milestones?direction=asc&sort=due_date&state=open>`_.
 For our long-term plan, see our :ref:`roadmap`.
 
+Version 0.27.1 - 2024-03-25
+---------------------------
+
+Highlights
+~~~~~~~~~~
+
+* Phase 1 integration with ``temporian`` - ``TemporianTransformer`` transformer (:pr:`5980`) :user:`ianspektor`, :user:`achoum`, :user:`javiber`
+* Phase 1 integration with ``tsbootstrap`` - ``TSBootstrapAdapter`` transformer (:pr:`5887`) :user:`benHeid`, :user:`astrogilda`, :user:`fkiraly`
+* Shapelet transform from ``pyts`` available as ``sktime`` transformer (:pr:`6082`) :user:`Abhay-Lejith`
+* ``Catch22`` transformer now supports short aliases and parallelization backend selection (:pr:`6002`) :user:`julnow`
+* forecasting tuners can now return performances of all parameters, via ``return_n_best_forecasters=-1`` (:pr:`6031`) :user:`HassnHamada`
+* ``NeuralForecastRNN`` can now auto-detect ``freq`` (:pr:`6039`) :user:`geetu040`
+* time series splitters are now first-class objects, with suite tests and ``check_estimator`` support (:pr:`6051`) :user:`fkiraly`
+
+Dependency changes
+~~~~~~~~~~~~~~~~~~
+
+* ``temporian`` is now a soft dependency for ``sktime`` (transformations)
+* ``holidays`` (transformations soft dependency) bounds have been updated to ``>=0.29,<0.46``
+* ``dtw-python`` bounds have been updated to ``>=1.3,<1.5`
+
+Core interface changes
+~~~~~~~~~~~~~~~~~~~~~~
+
+* time series splitters are now full first-class citizens. Interface conformance
+  can now be checked with ``check_estimator``.
+
+
+Deprecations and removals
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Forecasting
+^^^^^^^^^^^
+
+``cINNForecaster`` will be renamed to CINNForecaster in sktime 0.29.0.
+The estimator is available under the future name at its
+current location, and will be available under its deprecated name
+until 0.30.0. To prepare for the name change,
+replace any imports of ``cINNForecaster`` with imports of ``CINNForecaster``.
+
+
+Enhancements
+~~~~~~~~~~~~
+
+Benchmarking, Metrics, Splitters
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* [ENH] ``check_estimator`` integration for splitters (:pr:`6051`) :user:`fkiraly`
+
+Data loaders
+^^^^^^^^^^^^
+
+* [ENH] automatic inference of file ending in data loaders for single file types (:pr:`6045`) :user:`SaiRevanth25`
+
+Data types, checks, conversions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* [ENH] use ``Index.unique`` instead of ``set`` in conversion from ``pd-multiindex`` to ``df-list`` mtype by :user:`fkiraly` (:pr:`6007`)
+
+Distances, kernels
+^^^^^^^^^^^^^^^^^^
+
+* [ENH] Second test parameter set for shapeDTW (:pr:`6093`) :user:`Xinyu-Wu-0000`
+* [ENH] add ``colalign`` functionality to ``ScipyDist`` class as specified in the docstrings (:pr:`6110`) :user:`fnhirwa`
+
+Forecasting
+^^^^^^^^^^^
+
+* [ENH] forecasting tuners, ``return_n_best_forecasters=-1`` to return performances of all forecasters (:pr:`6031`) :user:`HassnHamada`
+* [ENH] ``NeuralForecastRNN`` ``freq`` auto-detect feature (:pr:`6039`) :user:`geetu040`
+* [ENH] ``neuralforecast`` based LSTM model by :user:`pranavvp16` (:pr:`6047`)
+* [ENH] fix ``ForecastingHorizon.freq`` handling for ``pandas 2.2.X`` by :user:`fkiraly` (:pr:`6057`)
+
+Neural network templates
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+* [ENH] added test params to ``RNNNetwork`` (:pr:`6155`) :user:`julian-fong`
+
+Time series classification
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* [ENH] remove private methods from parameters of ``ProximityForest``, ``ProximityTree``, and ``ProximityStump`` by :user:`fnhirwa` (:pr:`6046`)
+
+Time series clustering
+^^^^^^^^^^^^^^^^^^^^^^
+
+* [ENH] add new test parameter sets for ``TimeSeriesKMeansTslearn`` (:pr:`6195`) :user:`shankariraja`
+
+Time series regression
+^^^^^^^^^^^^^^^^^^^^^^
+
+* [ENH] Migrate DL regressors from ``sktime-dl``: CNTC, InceptionTime, MACNN (:pr:`6038`) :user:`nilesh05apr`
+* [ENH] ``MultiplexRegressor`` - autoML multiplexer for time series regressors (:pr:`6075`) :user:`ksharma6`
+
+Transformations
+^^^^^^^^^^^^^^^
+
+* [ENH] ``tsbootstrap`` transformer adapter (:pr:`5887`) :user:`benHeid`
+* [ENH] ``TemporianTransformer`` - interface to ``temporian`` (:pr:`5980`) :user:`ianspektor`, :user:`achoum`
+* [ENH] Refactored and improved ``Catch22`` transformer - support for column names, short aliases, refactor to ``pd.Series``, ``sktime`` native parallelization (:pr:`6002`) :user:`julnow`
+* [ENH] Examples for ``YtoX`` transformer (:pr:`6028`, :pr:`6059`) :user:`fkiraly`, :user:`geetu040`
+* [ENH] Shapelet transform interfacing ``pyts`` (:pr:`6082`) :user:`Abhay-Lejith`
+* [ENH] Add a ``test_mstl`` module checking if ``transform`` returns desired components by :user:`kcentric` (:pr:`6084`)
+* [ENH] add test cases for ``HampelFilter`` by :user:`fkiraly` (:pr:`6087`)
+* [ENH] Second test parameter set for Kalman Filter (:pr:`6095`) :user:`Xinyu-Wu-0000`
+* [ENH] Add ``MSTL`` import statement in ``detrend`` by :user:`geetu040` (:pr:`6116`)
+
+Test framework
+^^^^^^^^^^^^^^
+
+* [ENH] test suite for splitters (:pr:`6051`) :user:`fkiraly`
+
+
+Documentation
+~~~~~~~~~~~~~
+
+* [DOC] Fix invalid use of single-grave in docstrings (:pr:`6023`) :user:`geetu040`
+* [DOC] Fix typos in changelog by :user:`yarnabrina` (:pr:`6034`)
+* [DOC] corrected Discord channel mention in developer guide (:pr:`6163`) :user:`shankariraja`
+* [DOC] add credit to :user:`rikstarmans in ``FallbackForecaster`` (:pr:`6069`) :user:`fkiraly`
+* [DOC] Added an example to MLPRegressor #4264  (:pr:`6135`) :user:`vandit98`
+* [DOC] in ``BaseSeriesAnnotator``, document the ``int_label`` option (:pr:`6143`) :user:`Alex-JG3`
+* [DOC] fix typo in ``_registry.py`` (:pr:`6160`) :user:`pranavvp16`
+* [DOC] minor clarifications in mtype descriptions (:pr:`6078`) :user:`fkiraly`
+* [DOC] ExponentialSmoothing default method change from L-BFGS-B to SLSQP (:pr:`6186`) :user:`manuel-munoz-aguirre`
+* [DOC] fix missing exports in time series regression API ref (:pr:`6191`) :user:`fkiraly`
+* [DOC] add more examples to CoC from python software foundation CoC (:pr:`6185`) :user:`fkiraly`
+* [DOC] correct deprecation versions in ``BaseDeepClassifier`` docstring (:pr:`6197`) :user:`fkiraly`
+* [DOC] update maintainer tag information in docs and PR template (:pr:`6072`) :user:`fkiraly`
+* [DOC] Add hall-of-fame widget to README (Added the Hall-of-fame section) #3716  (:pr:`6203`) :user:`KaustubhUp025`
+* [DOC] Added docstring example to ``DummyClassifier`` (:pr:`6146`) :user:`YashKhare20`
+* [DOC] Added docstring for lstmfcn and MLP classifiers (:pr:`6136`) :user:`vandit98`
+* [DOC] Fix syntax error in "getting started" example code block for Time Series Regression (:pr:`6022`) :user:`sahusiddharth`
+* [DOC] Added blank lines to properly render ``FourierFeatures`` docstring, ``sp_list`` (:pr:`5984`) :user:`tiloye`
+* [DOC] add missing author credits of :user:`ivarzap` (:pr:`6050`) :user:`fkiraly`
+* [DOC] fix various typos (:pr:`6043`) :user:`fkiraly`
+* [DOC] clarification regarding immutability of ``self``-params in extension templates (:pr:`6053`) :user:`fkiraly`
+* [DOC] Fix invalid use of single-grave in docstrings (:pr:`6023`) :user:`geetu040`
+* [DOC] Added docstring example to ``CNNRegressor`` (:pr:`6102`) :user:`meraldoantonio`
+* [DOC] corrected Discord channel mention in developer guide (:pr:`6163`) :user:`shankariraja`
+* [DOC] add credit to :user:`rikstarmans` in ``FallbackForecaster`` (:pr:`6069`) :user:`fkiraly`
+* [DOC] Added an example to ``MLPRegressor`` (:pr:`6135`) :user:`vandit98`
+* [DOC] fix typo in ``_registry.py`` (:pr:`6160`) :user:`pranavvp16`
+* [DOC] minor clarifications in mtype descriptions by :user:`fkiraly` (:pr:`6078`)
+* [DOC] ``ExponentialSmoothing`` - fix docstring after default method change from ``L-BFGS-B`` to SLSQP`` (:pr:`6186`) :user:`manuel-munoz-aguirre`
+* [DOC] fix missing imports in time series regression API ref (:pr:`6191`) :user:`fkiraly`
+* [DOC] add more examples to CoC from python software foundation CoC (:pr:`6185`) :user:`fkiraly`
+* [DOC] correct deprecation versions in ``BaseDeepClassifier`` docstring (:pr:`6197`) :user:`fkiraly`
+* [DOC] update maintainer tag information in docs and PR template (:pr:`6072`) :user:`fkiraly`
+* [DOC] Add hall-of-fame widget and section to README (:pr:`6203`) :user:`KaustubhUp025`
+
+
+Maintenance
+~~~~~~~~~~~
+
+* [MNT] [Dependabot](deps-dev): Update ``holidays`` requirement from ``<0.45,>=0.29`` to ``>=0.29,<0.46`` (:pr:`6164`) :user:`dependabot[bot]`
+* [MNT] [Dependabot](deps-dev): Update ``dtw-python`` requirement from ``<1.4,>=1.3`` to ``>=1.3,<1.5`` (:pr:`6165`) :user:`dependabot[bot]`
+* [MNT] [Dependabot](deps): Bump ``tj-actions/changed-files`` from 42 to 43 (:pr:`6125`) :user:`dependabot[bot]`
+* [MNT] temporary skip sporadically failing tests for ``ShapeletTransformPyts`` (:pr:`6172`) :user:`fkiraly`
+* [MNT] create build tool to check invalid backticks (:pr:`6088`) :user:`geetu040`
+* [MNT] decouple ``catch22`` module from ``numba`` utilities (:pr:`6101`) :user:`fkiraly`
+* [MNT] bound ``temporian<0.8.0`` (:pr:`6184`) :user:`fkiraly`
+* [MNT] Ensure Update Contributors does not run on main (:pr:`6189`) :user:`Greyisheep`, :user:`duydl`
+* [MNT] initialize change cycle (0.28.0) for renaming ``cINNForecaster`` to ``CINNForecaster`` (:pr:`6121`) :user:`geetu040`
+* [MNT] Fix failing tests due to ``tensorflow`` update (:pr:`6098`) :user:`benHeid`
+* [MNT] silence sporadic failure in ``test_evaluate_error_score`` (:pr:`6058`) :user:`fkiraly`
+* [MNT] update ``statsforecast`` version in ``forecasting`` extra  (:pr:`6064`) :user:`yarnabrina`
+* [MNT] Docker files updated by (:pr:`6076`) :user:`deysanjeeb`
+* [MNT] deprecation action timing for ``Catch22`` changes  (:pr:`6123`) :user:`fkiraly`
+* [MNT] run ``update-contributors`` workflow only on PR by (:pr:`6133`) :user:`fkiraly`
+* [MNT] temporary skip sporadically failing tests for ``ShapeletTransformPyts`` (:pr:`6172`) :user:`fkiraly`
+* [MNT] enable concurrency settings in 'Install and Test' GHA workflow (:pr:`6074`) :user:`MEMEO-PRO`
+* [MNT] temporary skip for some sporadic failures on ``main`` (:pr:`6208`) :user:`fkiraly`
+
+
+Fixes
+~~~~~
+
+Distances, kernels
+^^^^^^^^^^^^^^^^^^
+
+* [BUG] Fix various issues in shapeDTW (:pr:`6093`) :user:`Xinyu-Wu-0000`
+* [BUG] resolve redundant or problematic statements in ``numba`` bounding matrix routines (:pr:`6183`) :user:`albertoazzari`
+
+Estimator registry
+^^^^^^^^^^^^^^^^^^
+
+* [BUG] remove unnecessary line in ``all_estimators`` (:pr:`6103`) :user:`fkiraly`
+
+Forecasting
+^^^^^^^^^^^
+
+* [BUG] Fixed ``SARIMAX`` failure when ``X`` is passed to predict but not ``fit``  (:pr:`6005`) :user:`Abhay-Lejith`
+* [BUG] fix ``BaseForecaster.predict_var`` default if ``predict_proba`` is implemented (:pr:`6067`) :user:`fkiraly`
+* [BUG] In ``ForecastingHorizon``, ignore ``ValueError`` on ``pd.infer_freq`` when index has fewer than 3 values (:pr:`6097`) :user:`tpvasconcelos`
+
+Time series classification
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+* [BUG] fix ``super`` calls in deep learning classifiers and regressors (:pr:`6139`) :user:`fkiraly`
+* [BUG] Resolved wrong arg name ``lr`` in ``SimpleRNNClassifier`` and regressor, fix minor ``batch_size`` param issue in ``ResNetClassifier`` (:pr:`6154`) :user:`vandit98`
+
+Time series regression
+^^^^^^^^^^^^^^^^^^^^^^
+
+* [BUG] fix ``BaseRegressor.score`` method failing with ``sklearn.metrics r2_score got an unexpected keyword argument 'normalize`` (:pr:`6019`) :user:`Cyril-Meyer`
+* [BUG] fix ``super`` calls in deep learning classifiers and regressors (:pr:`6139`) :user:`fkiraly`
+* [BUG] fix network construction in ``InceptionTimeRegressor`` (:pr:`6140`) :user:`fkiraly`
+
+Transformations
+^^^^^^^^^^^^^^^
+
+* [BUG] fix ``FeatureUnion`` for primitive outputs (:pr:`6079`) :user:`fkiraly`, :user:`fspinna`
+* [BUG] Fix unexpected NaN values in ``Summarizer`` (:pr:`6081`) :user:`ShreeshaM07`
+* [BUG] Update ``_shapelet_transform_numba.py`` to improve numerical stability (:pr:`6141`) :user:`stevcabello`
+
+Test framework
+^^^^^^^^^^^^^^
+
+* [BUG] fix ``deep_equals`` when comparing ``ForecastingHorizon`` of different lengths by :user:`MBristle` (:pr:`5954`)
+
+Webpage
+^^^^^^^
+
+* [BUG] fix search function for estimator overview not working (:pr:`6105`) :user:`duydl`
+
+Contributors
+~~~~~~~~~~~~
+
+:user:`Abhay-Lejith`,
+:user:`achoum`,
+:user:`albertoazzari`,
+:user:`Alex-JG3`,
+:user:`astrogilda`,
+:user:`benHeid`,
+:user:`Cyril-Meyer`,
+:user:`deysanjeeb`,
+:user:`duydl`,
+:user:`fkiraly`,
+:user:`fnhirwa`,
+:user:`fspinna`,
+:user:`geetu040`,
+:user:`Greyisheep`,
+:user:`HassnHamada`,
+:user:`ianspektor`,
+:user:`javiber`,
+:user:`julian-fong`,
+:user:`julnow`,
+:user:`KaustubhUp025`,
+:user:`kcentric`,
+:user:`ksharma6`,
+:user:`manuel-munoz-aguirre`,
+:user:`MBristle`,
+:user:`MEMEO-PRO`,
+:user:`meraldoantonio`,
+:user:`nilesh05apr`,
+:user:`pranavvp16`,
+:user:`SaiRevanth25`,
+:user:`sahusiddharth`,
+:user:`shankariraja`,
+:user:`stevcabello`,
+:user:`tiloye`,
+:user:`tpvasconcelos`,
+:user:`vandit98`,
+:user:`Xinyu-Wu-0000`,
+:user:`YashKhare20`
+
+
 Version 0.27.0 - 2024-02-28
 ---------------------------
 
diff --git a/docs/source/developer_guide/add_estimators.rst b/docs/source/developer_guide/add_estimators.rst
index 4802ad51f..7c9f1f36a 100644
--- a/docs/source/developer_guide/add_estimators.rst
+++ b/docs/source/developer_guide/add_estimators.rst
@@ -221,7 +221,7 @@ additional things need to be done:
 *   ensure that code also meets ``sktime's`` :ref:`documentation <developer_guide_documentation>` standards.
 *   add the estimator to the ``sktime`` API reference. This is done by adding a reference to the estimator in the
     correct ``rst`` file inside ``docs/source/api_reference``.
-*   authors of the estimator should add themselves to ``CODEOWNERS``, as owners of the contributed estimator.
+*   authors of the estimator should add themselves to the ``"authors"`` and ``"maintainers"`` tag of the estimator, as owners of the contributed estimator.
 *   if the estimator relies on soft dependencies, or adds new soft dependencies, the steps in the :ref:`"dependencies"
     developer guide <dependencies>` should be followed
 *   ensure that the estimator passes the entire local test suite of ``sktime``, with the estimator in its target location.
diff --git a/docs/source/get_involved/code_of_conduct.rst b/docs/source/get_involved/code_of_conduct.rst
index ecaaf0e24..fda83431f 100644
--- a/docs/source/get_involved/code_of_conduct.rst
+++ b/docs/source/get_involved/code_of_conduct.rst
@@ -374,7 +374,7 @@ must not be copied or otherwise proliferated.
 ------------------
 
 This Code of Conduct is a living document,
-maintanined and developed by the ``sktime`` project and its contributors.
+maintained and developed by the ``sktime`` project and its contributors.
 
 Its original form is adapted from the `The Turing
 Way <https://github.com/alan-turing-institute/the-turing-way>`__ project
diff --git a/examples/01_forecasting.ipynb b/examples/01_forecasting.ipynb
index 05d8a7e21..da68e40c7 100644
--- a/examples/01_forecasting.ipynb
+++ b/examples/01_forecasting.ipynb
@@ -6762,7 +6762,7 @@
     "6. To test your estimator automatically: call `sktime.utils.estimator_checks.check_estimator` on your estimator. You can call this on a class or object instance. Ensure you have specified test parameters in the `get_test_params` method, according to the extension template.\n",
     "\n",
     "In case of direct contribution to `sktime` or one of its affiliated packages, additionally:\n",
-    "* Add yourself as an author to the code, and to the `CODEOWNERS` for the new estimator file(s).\n",
+    "* Add yourself as an author and/or a maintainer for the new estimator file(s), via `\"authors\"` and `\"maintainers\"` tag.\n",
     "* Create a pull request that contains only the new estimators (and their inheritance tree, if it's not just one class), as well as the automated tests as described above.\n",
     "* In the pull request, describe the estimator and optimally provide a publication or other technical reference for the strategy it implements.\n",
     "* Before making the pull request, ensure that you have all necessary permissions to contribute the code to a permissive license (BSD-3) open source project."
diff --git a/examples/02_classification.ipynb b/examples/02_classification.ipynb
index ef039f2fd..a30556f0b 100644
--- a/examples/02_classification.ipynb
+++ b/examples/02_classification.ipynb
@@ -3030,7 +3030,7 @@
     "6. to test your estimator automatically: call `sktime.tests.test_all_estimators.check_estimator` on your estimator. You can call this on a class or object instance. Ensure you have specified test parameters in the `get_test_params` method, according to the extension template.\n",
     "\n",
     "In case of direct contribution to `sktime` or one of its affiliated packages, additionally:\n",
-    "* add yourself as an author to the code, and to the `CODEOWNERS` for the new estimator file(s).\n",
+    "* Add yourself as an author and/or a maintainer for the new estimator file(s), via `\"authors\"` and `\"maintainers\"` tag.\n",
     "* create a pull request that contains only the new estimators (and their inheritance tree, if it's not just one class), as well as the automated tests as described above.\n",
     "* in the pull request, describe the estimator and optimally provide a publication or other technical reference for the strategy it implements.\n",
     "* before making the pull request, ensure that you have all necessary permissions to contribute the code to a permissive license (BSD-3) open source project."
diff --git a/examples/03_transformers.ipynb b/examples/03_transformers.ipynb
index aa317a129..23df2e01b 100644
--- a/examples/03_transformers.ipynb
+++ b/examples/03_transformers.ipynb
@@ -4481,7 +4481,7 @@
     "6. to test your estimator automatically: call `sktime.tests.test_all_estimators.check_estimator` on your estimator. You can call this on a class or object instance. Ensure you have specified test parameters in the `get_test_params` method, according to the extension template.\n",
     "\n",
     "In case of direct contribution to `sktime` or one of its affiliated packages, additionally:\n",
-    "* add yourself as an author to the code, and to the `CODEOWNERS` for the new estimator file(s).\n",
+    "* Add yourself as an author and/or a maintainer for the new estimator file(s), via `\"authors\"` and `\"maintainers\"` tag.\n",
     "* create a pull request that contains only the new estimators (and their inheritance tree, if it's not just one class), as well as the automated tests as described above.\n",
     "* in the pull request, describe the estimator and optimally provide a publication or other technical reference for the strategy it implements.\n",
     "* before making the pull request, ensure that you have all necessary permissions to contribute the code to a permissive license (BSD-3) open source project."
diff --git a/pyproject.toml b/pyproject.toml
index 43f021b24..d60b99911 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "sktime"
-version = "0.27.0"
+version = "0.27.1"
 description = "A unified framework for machine learning with time series"
 readme = "README.md"
 keywords = [
@@ -55,7 +55,7 @@ classifiers = [
 dependencies = [
   "numpy<1.27,>=1.21",  # required for framework layer and base class logic
   "packaging",  # for estimator specific dependency parsing
-  "pandas<2.2.0,>=1.1",  # pandas is the main in-memory data container
+  "pandas<2.3.0,>=1.1",  # pandas is the main in-memory data container
   "scikit-base<0.8.0",  # base module for sklearn compatible base API
   "scikit-learn>=0.24,<1.5.0",  # required for estimators and framework layer
   "scipy<2.0.0,>=1.2",  # required for estimators and framework layer
@@ -96,7 +96,7 @@ all_extras = [
   'pmdarima!=1.8.1,<3.0.0,>=1.8; python_version < "3.12"',
   'prophet>=1.1; python_version < "3.12"',
   "pycatch22<0.4.4",
-  "pykalman-bardo<0.10,>=0.9.7",
+  "pykalman<0.10,>=0.9.5",
   'pyod>=0.8; python_version < "3.11"',
   "pyts<0.14.0; python_version < '3.12'",
   "scikit-optimize",
@@ -137,7 +137,7 @@ all_extras_pandas2 = [
   'pmdarima!=1.8.1,<3.0.0,>=1.8; python_version < "3.12"',
   'prophet>=1.1; python_version < "3.12"',
   "pycatch22<0.4.4",
-  "pykalman-bardo<0.10,>=0.9.7",
+  "pykalman<0.10,>=0.9.5",
   'pyod>=0.8; python_version < "3.11"',
   "scikit_posthocs>=0.6.5",
   "seaborn>=0.11",
@@ -211,7 +211,7 @@ transformations = [
   "mne>=1.5,<1.7",
   'numba<0.60,>=0.53',
   "pycatch22>=0.4,<0.4.4",
-  "pykalman-bardo<0.10,>=0.9.7",
+  "pykalman<0.10,>=0.9.5",
   "statsmodels<0.15,>=0.12.1",
   'stumpy<1.13,>=1.5.1; python_version < "3.12"',
   'temporian<0.8.0,>=0.7.0; python_version < "3.12" and sys_platform != "win32"',
@@ -251,7 +251,7 @@ docs = [
 ]
 tests = [
   "pytest>=7.4,<8.2",
-  "pytest-cov<4.2,>=4.1",
+  "pytest-cov>=4.1,<5.1",
   "pytest-randomly<3.16,>=3.15",
   "pytest-timeout>=2.1,<2.4",
   "pytest-xdist>=3.3,<3.6",
diff --git a/sktime/__init__.py b/sktime/__init__.py
index ef937994c..a9a923c23 100644
--- a/sktime/__init__.py
+++ b/sktime/__init__.py
@@ -1,6 +1,6 @@
 """sktime."""
 
-__version__ = "0.27.0"
+__version__ = "0.27.1"
 
 __all__ = ["show_versions"]
 
diff --git a/sktime/classification/base.py b/sktime/classification/base.py
index 0ac143ee9..cca5c0e8e 100644
--- a/sktime/classification/base.py
+++ b/sktime/classification/base.py
@@ -20,7 +20,7 @@ State:
 __all__ = [
     "BaseClassifier",
 ]
-__author__ = ["mloning", "fkiraly", "TonyBagnall", "MatthewMiddlehurst"]
+__author__ = ["mloning", "fkiraly", "TonyBagnall", "MatthewMiddlehurst", "ksharma6"]
 
 import time
 
@@ -144,6 +144,27 @@ class BaseClassifier(BasePanelMixin):
         else:
             return NotImplemented
 
+    def __or__(self, other):
+        """Magic | method, return MultiplexClassifier.
+
+        Implemented for `other` being either a MultiplexClassifier or a classifier.
+
+        Parameters
+        ----------
+        other: `sktime` classifier or sktime MultiplexClassifier
+
+        Returns
+        -------
+        MultiplexClassifier object
+        """
+        from sktime.classification.compose import MultiplexClassifier
+
+        if isinstance(other, MultiplexClassifier) or isinstance(other, BaseClassifier):
+            multiplex_self = MultiplexClassifier([self])
+            return multiplex_self | other
+        else:
+            return NotImplemented
+
     def fit(self, X, y):
         """
         Fit time series classifier to training data.
diff --git a/sktime/classification/deep_learning/base.py b/sktime/classification/deep_learning/base.py
index 1c049d686..cd6e9ecc0 100644
--- a/sktime/classification/deep_learning/base.py
+++ b/sktime/classification/deep_learning/base.py
@@ -236,8 +236,8 @@ class BaseDeepClassifier(BaseClassifier, ABC):
         legacy_save : bool, default = True
             whether to use the legacy saving method for the model. If
             tensorflow >= 2.16.0 is installed, this is ignored.
-            The default will switch to False in sktime 0.28.0, and the
-            legacy saving method will be removed in sktime 0.29.0.
+            The default will switch to False in sktime 0.29.0, and the
+            legacy saving method will be removed in sktime 0.30.0.
 
         Returns
         -------
diff --git a/sktime/classification/dummy/_dummy.py b/sktime/classification/dummy/_dummy.py
index db28a1ac2..c95ce75cb 100644
--- a/sktime/classification/dummy/_dummy.py
+++ b/sktime/classification/dummy/_dummy.py
@@ -57,6 +57,18 @@ class DummyClassifier(BaseClassifier):
     constant : int or str or array-like of shape (n_outputs,), default=None
         The explicit constant as predicted by the "constant" strategy. This
         parameter is useful only for the "constant" strategy.
+
+    Examples
+    --------
+    >>> from sktime.classification.dummy import DummyClassifier
+    >>> from sktime.datasets import load_unit_test
+    >>> X_train, y_train = load_unit_test(split="train")
+    >>> X_test, y_test = load_unit_test(split="test")
+    >>> classifier = DummyClassifier(strategy="prior")
+    >>> classifier.fit(X_train, y_train)
+    DummyClassifier()
+    >>> y_pred = classifier.predict(X_test)
+    >>> y_pred_proba = classifier.predict_proba(X_test)
     """
 
     _tags = {
diff --git a/sktime/classification/early_classification/_probability_threshold.py b/sktime/classification/early_classification/_probability_threshold.py
index 3b8497cb4..72fc3d853 100644
--- a/sktime/classification/early_classification/_probability_threshold.py
+++ b/sktime/classification/early_classification/_probability_threshold.py
@@ -20,7 +20,7 @@ from sktime.classification.interval_based import CanonicalIntervalForest
 from sktime.utils.validation.panel import check_X
 
 
-# TODO: fix this in 0.28.0
+# TODO: fix this in 0.29.0
 # base class should have been changed to BaseEarlyClassifier
 class ProbabilityThresholdEarlyClassifier(BaseClassifier):
     """Probability Threshold Early Classifier.
diff --git a/sktime/clustering/k_means/_k_means_tslearn.py b/sktime/clustering/k_means/_k_means_tslearn.py
index 277f5bca3..2c1182798 100644
--- a/sktime/clustering/k_means/_k_means_tslearn.py
+++ b/sktime/clustering/k_means/_k_means_tslearn.py
@@ -177,22 +177,17 @@ class TimeSeriesKMeansTslearn(_TslearnAdapter, BaseClusterer):
             instance.
             ``create_test_instance`` uses the first (or only) dictionary in ``params``
         """
-        # commented since k-means++ does not properly work
-        # errors out with
-        # TypeError:
-        # _kmeans_plusplus() missing 1 required positional argument: 'sample_weight'
-        #
-        # params1 = {
-        #     "n_clusters": 3,
-        #     "max_iter": 3,
-        #     "tol": 0.001,
-        #     "n_init": 2,
-        #     "metric": "euclidean",
-        #     "max_iter_barycenter": 7,
-        #     "verbose": 0,
-        #     "random_state": 42,
-        #     "init": "k-means++",
-        # }
+        params1 = {
+            "n_clusters": 3,
+            "max_iter": 3,
+            "tol": 0.001,
+            "n_init": 2,
+            "metric": "euclidean",
+            "max_iter_barycenter": 7,
+            "verbose": 0,
+            "random_state": 42,
+            "init": "k-means++",
+        }
         params2 = {
             "n_clusters": 2,
             "max_iter": 5,
@@ -204,8 +199,7 @@ class TimeSeriesKMeansTslearn(_TslearnAdapter, BaseClusterer):
             "random_state": None,
             "init": "random",
         }
-        # return [params1, params2]
-        return [params2]
+        return [params1, params2]
 
     def _score(self, X, y=None) -> float:
         return np.abs(self.inertia_)
diff --git a/sktime/forecasting/base/_fh.py b/sktime/forecasting/base/_fh.py
index e10b2761b..2576b2a9d 100644
--- a/sktime/forecasting/base/_fh.py
+++ b/sktime/forecasting/base/_fh.py
@@ -816,7 +816,7 @@ def _to_relative(fh: ForecastingHorizon, cutoff=None) -> ForecastingHorizon:
             absolute = _coerce_to_period(absolute, freq=fh.freq)
             cutoff = _coerce_to_period(cutoff, freq=fh.freq)
 
-        # TODO: 0.28.0:
+        # TODO: 0.29.0:
         # Check at every minor release whether lower pandas bound >=0.15.0
         # if yes, can remove the workaround in the "else" condition and the check
         #
diff --git a/sktime/forecasting/compose/_pipeline.py b/sktime/forecasting/compose/_pipeline.py
index 36bb5be50..dae89630e 100644
--- a/sktime/forecasting/compose/_pipeline.py
+++ b/sktime/forecasting/compose/_pipeline.py
@@ -160,7 +160,7 @@ class _Pipeline(_HeterogenousMetaEstimator, BaseForecaster):
                         if len(levels) == 1:
                             levels = levels[0]
                         yt[ix] = y.xs(ix, level=levels, axis=1)
-                        # todo 0.28.0 - check why this cannot be easily removed
+                        # todo 0.29.0 - check why this cannot be easily removed
                         # in theory, we should get rid of the "Coverage" case treatment
                         # (the legacy naming convention was removed in 0.23.0)
                         # deal with the "Coverage" case, we need to get rid of this
diff --git a/sktime/forecasting/model_selection/__init__.py b/sktime/forecasting/model_selection/__init__.py
index 0b5ab0e59..318a27761 100644
--- a/sktime/forecasting/model_selection/__init__.py
+++ b/sktime/forecasting/model_selection/__init__.py
@@ -18,7 +18,7 @@ from sktime.forecasting.model_selection._tune import (
 )
 
 
-# todo 0.28.0 - check whether we should remove, otherwise bump
+# todo 0.29.0 - check whether we should remove, otherwise bump
 # still used in blog posts and old tutorials
 def temporal_train_test_split(
     y, X=None, test_size=None, train_size=None, fh=None, anchor="start"
@@ -45,7 +45,7 @@ def temporal_train_test_split(
     )
 
 
-# todo 0.28.0 - check whether we should remove, otherwise bump
+# todo 0.29.0 - check whether we should remove, otherwise bump
 # still used in blog posts and old tutorials
 def ExpandingWindowSplitter(fh=1, initial_window=10, step_length=1):
     """Legacy export of Expanding window splitter.
@@ -68,7 +68,7 @@ def ExpandingWindowSplitter(fh=1, initial_window=10, step_length=1):
     return _EWSplitter(fh=fh, initial_window=initial_window, step_length=step_length)
 
 
-# todo 0.28.0 - check whether we should remove, otherwise bump
+# todo 0.29.0 - check whether we should remove, otherwise bump
 # still used in blog posts and old tutorials
 def SlidingWindowSplitter(
     fh=1, window_length=10, step_length=1, initial_window=None, start_with_window=True
diff --git a/sktime/forecasting/model_selection/_tune.py b/sktime/forecasting/model_selection/_tune.py
index a7afe38c0..05c76c59a 100644
--- a/sktime/forecasting/model_selection/_tune.py
+++ b/sktime/forecasting/model_selection/_tune.py
@@ -84,7 +84,7 @@ class BaseGridSearch(_DelegatedForecaster):
         if tune_by_variable:
             self.set_tags(**{"scitype:y": "univariate"})
 
-        # todo 0.28.0: check if this is still necessary
+        # todo 0.29.0: check if this is still necessary
         # n_jobs is deprecated, left due to use in tutorials, books, blog posts
         if n_jobs != "deprecated":
             warn(
diff --git a/sktime/forecasting/trend/_pwl_trend_forecaster.py b/sktime/forecasting/trend/_pwl_trend_forecaster.py
index 12d67589e..94e3695cb 100644
--- a/sktime/forecasting/trend/_pwl_trend_forecaster.py
+++ b/sktime/forecasting/trend/_pwl_trend_forecaster.py
@@ -8,7 +8,6 @@ import pandas as pd
 
 from sktime.forecasting.base._base import DEFAULT_ALPHA
 from sktime.forecasting.base.adapters import _ProphetAdapter
-from sktime.utils.warnings import warn
 
 
 class ProphetPiecewiseLinearTrendForecaster(_ProphetAdapter):
@@ -52,15 +51,15 @@ class ProphetPiecewiseLinearTrendForecaster(_ProphetAdapter):
         automatic changepoint selection. Large values will allow many
         changepoints, small values will allow few changepoints.
         Recommended to take values within [0.001,0.5].
-    yearly_seasonality: str or bool or int, default="auto"
+    yearly_seasonality: str or bool or int, default=False
         Include yearly seasonality in the model. "auto" for automatic determination,
         True to enable, False to disable, or an integer specifying the number of terms
         to include in the Fourier series.
-    weekly_seasonality: str or bool or int, default="auto"
+    weekly_seasonality: str or bool or int, default=False
         Include weekly seasonality in the model. "auto" for automatic determination,
         True to enable, False to disable, or an integer specifying the number of terms
         to include in the Fourier series.
-    daily_seasonality: str or bool or int, default="auto"
+    daily_seasonality: str or bool or int, default=False
         Include weekly seasonality in the model. "auto" for automatic determination,
         True to enable, False to disable, or an integer specifying the number of terms
         to include in the Fourier series.
@@ -95,10 +94,6 @@ class ProphetPiecewiseLinearTrendForecaster(_ProphetAdapter):
         "python_dependencies": "prophet",
     }
 
-    # TODO (release 0.28.0) - change defaults to False
-    # set yearly_seasonality = False in __init__
-    # set weekly_seasonality = False in __init__
-    # set daily_seasonality = False in __init__
     def __init__(
         self,
         changepoints=None,
@@ -106,9 +101,9 @@ class ProphetPiecewiseLinearTrendForecaster(_ProphetAdapter):
         changepoint_range=0.8,
         changepoint_prior_scale=0.05,
         verbose=0,
-        yearly_seasonality="changing_value",
-        weekly_seasonality="changing_value",
-        daily_seasonality="changing_value",
+        yearly_seasonality=False,
+        weekly_seasonality=False,
+        daily_seasonality=False,
     ):
         self.freq = None
         self.add_seasonality = None
@@ -134,43 +129,6 @@ class ProphetPiecewiseLinearTrendForecaster(_ProphetAdapter):
         self.verbose = verbose
 
         super().__init__()
-        # TODO (release 0.28.0)
-        # remove the following 4 'if' checks
-        # set yearly_seasonality=self.yearly_seasonality in def _instantiate_model
-        # set weekly_seasonality=self.weekly_seasonality in def _instantiate_model
-        # set daily_seasonality=self.daily_seasonality in def _instantiate_model
-        if any(
-            setting == "changing_value"
-            for setting in [
-                yearly_seasonality,
-                weekly_seasonality,
-                daily_seasonality,
-            ]
-        ):
-            warn(
-                "Warning: In sktime 0.28.0, the default value for all seasonality "
-                "parameters in ProphetPiecewiseLinearTrendForecaster will change from "
-                "'auto' to 'False'. To retain the prior behavior, set all seasonality "
-                "parameters to 'auto' explicitly.",
-                category=DeprecationWarning,
-                stacklevel=3,
-            )
-
-        if yearly_seasonality == "changing_value":
-            self._yearly_seasonality = "auto"
-        else:
-            self._yearly_seasonality = yearly_seasonality
-
-        if weekly_seasonality == "changing_value":
-            self._weekly_seasonality = "auto"
-        else:
-            self._weekly_seasonality = weekly_seasonality
-
-        if daily_seasonality == "changing_value":
-            self._daily_seasonality = "auto"
-        else:
-            self._daily_seasonality = daily_seasonality
-        # end of TODO (release 0.28.0)
 
         # import inside method to avoid hard dependency
         from prophet.forecaster import Prophet as _Prophet
@@ -183,9 +141,9 @@ class ProphetPiecewiseLinearTrendForecaster(_ProphetAdapter):
             changepoints=self.changepoints,
             n_changepoints=self.n_changepoints,
             changepoint_range=self.changepoint_range,
-            yearly_seasonality=self._yearly_seasonality,  # TODO (release 0.28.0)
-            weekly_seasonality=self._weekly_seasonality,  # TODO (release 0.28.0)
-            daily_seasonality=self._daily_seasonality,  # TODO (release 0.28.0)
+            yearly_seasonality=self.yearly_seasonality,
+            weekly_seasonality=self.weekly_seasonality,
+            daily_seasonality=self.daily_seasonality,
             holidays=self.holidays,
             seasonality_mode=self.seasonality_mode,
             seasonality_prior_scale=float(self.seasonality_prior_scale),
diff --git a/sktime/regression/base.py b/sktime/regression/base.py
index a9c6613d9..6b92a9b43 100644
--- a/sktime/regression/base.py
+++ b/sktime/regression/base.py
@@ -20,7 +20,7 @@ State:
 __all__ = [
     "BaseRegressor",
 ]
-__author__ = ["mloning", "fkiraly"]
+__author__ = ["mloning", "fkiraly", "ksharma6"]
 
 import time
 
@@ -133,6 +133,27 @@ class BaseRegressor(BasePanelMixin):
         else:
             return NotImplemented
 
+    def __or__(self, other):
+        """Magic | method, return MultiplexRegressor.
+
+        Implemented for `other` being either a MultiplexRegressor or a regressor.
+
+        Parameters
+        ----------
+        other: `sktime` regressor or sktime MultiplexRegressor
+
+        Returns
+        -------
+        MultiplexRegressor object
+        """
+        from sktime.regression.compose import MultiplexRegressor
+
+        if isinstance(other, MultiplexRegressor) or isinstance(other, BaseRegressor):
+            multiplex_self = MultiplexRegressor([self])
+            return multiplex_self | other
+        else:
+            return NotImplemented
+
     def fit(self, X, y):
         """Fit time series regressor to training data.
 
diff --git a/sktime/regression/compose/__init__.py b/sktime/regression/compose/__init__.py
index 9a428ec3e..906061d34 100644
--- a/sktime/regression/compose/__init__.py
+++ b/sktime/regression/compose/__init__.py
@@ -4,9 +4,11 @@ __all__ = [
     "ComposableTimeSeriesForestRegressor",
     "RegressorPipeline",
     "SklearnRegressorPipeline",
+    "MultiplexRegressor",
 ]
 
 from sktime.regression.compose._ensemble import ComposableTimeSeriesForestRegressor
+from sktime.regression.compose._multiplexer import MultiplexRegressor
 from sktime.regression.compose._pipeline import (
     RegressorPipeline,
     SklearnRegressorPipeline,
diff --git a/sktime/regression/compose/_multiplexer.py b/sktime/regression/compose/_multiplexer.py
new file mode 100644
index 000000000..55c89aead
--- /dev/null
+++ b/sktime/regression/compose/_multiplexer.py
@@ -0,0 +1,221 @@
+#!/usr/bin/env python3 -u
+# copyright: sktime developers, BSD-3-Clause License (see LICENSE file)
+"""Implements regressor for selecting among different model classes."""
+# based on MultiplexForecaster
+
+from sktime.base import _HeterogenousMetaEstimator
+from sktime.datatypes import MTYPE_LIST_PANEL, MTYPE_LIST_TABLE
+from sktime.regression._delegate import _DelegatedRegressor
+from sktime.regression.base import BaseRegressor
+
+__author__ = ["ksharma6"]
+__all__ = ["MultiplexRegressor"]
+
+
+class MultiplexRegressor(_HeterogenousMetaEstimator, _DelegatedRegressor):
+    """MultiplexRegressor for selecting among different models.
+
+    MultiplexRegressor facilitates a framework for performing
+    model selection process over different model classes.
+    It should be used in conjunction with GridSearchCV to get full utilization.
+    It can be used with univariate and multivariate regressors,
+    single-output and multi-output regressors.
+
+    MultiplexRegressor is specified with a (named) list of regressors
+    and a selected_regressor hyper-parameter, which is one of the regressor names.
+    The MultiplexRegressor then behaves precisely as the regressor with
+    name selected_regressor, ignoring functionality in the other regressors.
+
+    When used with GridSearchCV, MultiplexRegressor
+    provides an ability to tune across multiple estimators, i.e., to perform AutoML,
+    by tuning the selected_regressor hyper-parameter. This combination will then
+    select one of the passed regressors via the tuning algorithm.
+
+    Parameters
+    ----------
+    regressors : list of sktime regressors, or
+        list of tuples (str, estimator) of sktime regressors
+        MultiplexRegressor can switch ("multiplex") between these regressors.
+        These are "blueprint" regressors, states do not change when `fit` is called.
+    selected_regressor: str or None, optional, Default=None.
+        If str, must be one of the regressor names.
+            If no names are provided, must coincide with auto-generated name strings.
+            To inspect auto-generated name strings, call get_params.
+        If None, behaves as if the first regressor in the list is selected.
+        Selects the regressor as which MultiplexRegressor behaves.
+
+    Attributes
+    ----------
+    regressor_ : sktime regressor
+        clone of the selected regressor used for fitting and regression.
+    _regressors : list of (str, regressor) tuples
+        str are identical to those passed, if passed strings are unique
+        otherwise unique strings are generated from class name; if not unique,
+        the string `_[i]` is appended where `[i]` is count of occurrence up until then
+    """
+
+    _tags = {
+        "authors": ["ksharma6"],
+        "capability:multioutput": True,
+        "capability:multivariate": True,
+        "capability:unequal_length": True,
+        "capability:missing_values": True,
+        "capability:predict_proba": True,
+        "X_inner_mtype": MTYPE_LIST_PANEL,
+        "y_inner_mtype": MTYPE_LIST_TABLE,
+        "fit_is_empty": False,
+    }
+
+    # attribute for _DelegatedRegressor, which then delegates
+    #     all non-overridden methods to those of same name in self.regressor_
+    #     see further details in _DelegatedRegressor docstring
+    _delegate_name = "regressor_"
+
+    # for default get_params/set_params from _HeterogenousMetaEstimator
+    # _steps_attr points to the attribute of self
+    # which contains the heterogeneous set of estimators
+    # this must be an iterable of (name: str, estimator, ...) tuples for the default
+    _steps_attr = "_regressors"
+    # if the estimator is fittable, _HeterogenousMetaEstimator also
+    # provides an override for get_fitted_params for params from the fitted estimators
+    # the fitted estimators should be in a different attribute, _steps_fitted_attr
+    # this must be an iterable of (name: str, estimator, ...) tuples for the default
+    _steps_fitted_attr = "regressors_"
+
+    def __init__(
+        self,
+        regressors: list,
+        selected_regressor=None,
+    ):
+        super().__init__()
+        self.selected_regressor = selected_regressor
+
+        self.regressors = regressors
+        self._check_estimators(
+            regressors,
+            attr_name="regressors",
+            cls_type=BaseRegressor,
+            clone_ests=False,
+        )
+        self._set_regressor()
+
+        self.clone_tags(self.regressor_)
+        self.set_tags(**{"fit_is_empty": False})
+        # this ensures that we convert in the inner estimator, not in the multiplexer
+        self.set_tags(**{"X_inner_mtype": MTYPE_LIST_PANEL})
+        self.set_tags(**{"y_inner_mtype": MTYPE_LIST_TABLE})
+
+    @property
+    def _regressors(self):
+        """Regressors turned into name/est tuples."""
+        return self._get_estimator_tuples(self.regressors, clone_ests=False)
+
+    @_regressors.setter
+    def _regressors(self, value):
+        self.regressors = value
+
+    def _check_selected_regressor(self):
+        component_names = self._get_estimator_names(self._regressors, make_unique=True)
+        selected = self.selected_regressor
+        if selected is not None and selected not in component_names:
+            raise Exception(
+                f"Invalid selected_regressor parameter value provided, "
+                f" found: {self.selected_regressor}. Must be one of these"
+                f" valid selected_regressor parameter values: {component_names}."
+            )
+
+    def __or__(self, other):
+        """Magic | (or) method, return (right) concatenated MultiplexRegressor.
+
+        Implemented for `other` being a regressor, otherwise returns `NotImplemented`.
+
+        Parameters
+        ----------
+        other: `sktime` regressor, must inherit from BaseRegressor
+            otherwise, `NotImplemented` is returned
+
+        Returns
+        -------
+        MultiplexRegressor object, concatenation of `self` (first) with `other` (last).
+            not nested, contains only non-MultiplexRegressor `sktime` regressors
+
+        Raises
+        ------
+        ValueError if other is not of type MultiplexRegressor or BaseRegressor.
+        """
+        return self._dunder_concat(
+            other=other,
+            base_class=BaseRegressor,
+            composite_class=MultiplexRegressor,
+            attr_name="regressors",
+            concat_order="left",
+        )
+
+    def __ror__(self, other):
+        """Magic | (or) method, return (left) concatenated MultiplexRegressor.
+
+        Implemented for `other` being a regressor, otherwise returns `NotImplemented`.
+
+        Parameters
+        ----------
+        other: `sktime` regressor, must inherit from BaseRegressor
+            otherwise, `NotImplemented` is returned
+
+        Returns
+        -------
+        MultiplexRegressor object, concatenation of `self` (last) with `other` (first).
+            not nested, contains only non-MultiplexRegressor `sktime` regressors
+        """
+        return self._dunder_concat(
+            other=other,
+            base_class=BaseRegressor,
+            composite_class=MultiplexRegressor,
+            attr_name="regressors",
+            concat_order="right",
+        )
+
+    def _set_regressor(self):
+        self._check_selected_regressor()
+        # clone the selected regressor to self.regressor_
+        if self.selected_regressor is not None:
+            for name, regressor in self._get_estimator_tuples(self.regressors):
+                if self.selected_regressor == name:
+                    self.regressor_ = regressor.clone()
+        else:
+            # if None, simply clone the first regressor to self.regressor_
+            self.regressor_ = self._get_estimator_list(self.regressors)[0].clone()
+
+    @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
+        """
+        from sktime.regression.dummy import DummyRegressor
+
+        params1 = {
+            "regressors": [
+                ("Naive_mean", DummyRegressor(strategy="mean")),
+                ("Naive_median", DummyRegressor(strategy="median")),
+                ("Naive_quantile", DummyRegressor(strategy="quantile")),
+                ("Naive_constant", DummyRegressor(strategy="constant")),
+            ],
+            "selected_regressor": "Naive_mean",
+        }
+        params2 = {
+            "regressors": [
+                DummyRegressor(strategy="mean"),
+                DummyRegressor(strategy="median"),
+                DummyRegressor(strategy="quantile"),
+                DummyRegressor(strategy="constant"),
+            ],
+        }
+        return [params1, params2]
diff --git a/sktime/split/base/_base_splitter.py b/sktime/split/base/_base_splitter.py
index 07ceb8e6d..7127307e8 100644
--- a/sktime/split/base/_base_splitter.py
+++ b/sktime/split/base/_base_splitter.py
@@ -156,7 +156,11 @@ class BaseSplitter(BaseObject):
         test : 1D np.ndarray of dtype int
             Test window indices, iloc references to test indices in y
         """
-        raise NotImplementedError("abstract method")
+        for train_loc, test_loc in self.split_loc(y):
+            # default gets iloc index from loc index
+            train_iloc = y.get_indexer(train_loc)
+            test_iloc = y.get_indexer(test_loc)
+            yield train_iloc, test_iloc
 
     def _split_vectorized(self, y: pd.MultiIndex) -> SPLIT_GENERATOR_TYPE:
         """Get iloc references to train/test splits of `y`, for pd.MultiIndex.
diff --git a/sktime/split/compose/_repeat.py b/sktime/split/compose/_repeat.py
index e0b4b6fe9..3f89371cf 100644
--- a/sktime/split/compose/_repeat.py
+++ b/sktime/split/compose/_repeat.py
@@ -130,7 +130,7 @@ class Repeat(BaseSplitter):
                 for _ in range(self.times):
                     yield train, test
         elif self.mode == "entry" and random_repeat:
-            for _ in range(self.times):
+            for _ in range(self.splitter.get_n_splits(y)):
                 for spl_gen in spl_gens:
                     yield next(spl_gen)
         elif self.mode == "sequence" and not random_repeat:
@@ -155,7 +155,7 @@ class Repeat(BaseSplitter):
         n_splits : int
             The number of splits.
         """
-        return self._splitter.get_n_splits(y) * self.times
+        return self.splitter.get_n_splits(y) * self.times
 
     @classmethod
     def get_test_params(cls, parameter_set="default"):
diff --git a/sktime/split/cutoff.py b/sktime/split/cutoff.py
index 5dcbb910b..270d22f40 100644
--- a/sktime/split/cutoff.py
+++ b/sktime/split/cutoff.py
@@ -13,6 +13,7 @@ from typing import Optional
 
 import numpy as np
 import pandas as pd
+from pandas.api.types import is_datetime64_any_dtype
 
 from sktime.split.base import BaseSplitter
 from sktime.split.base._common import (
@@ -241,7 +242,7 @@ class CutoffSplitter(BaseSplitter):
             instance.
             ``create_test_instance`` uses the first (or only) dictionary in ``params``
         """
-        return [{"cutoffs": np.array([3, 7, 10])}, {"cutoffs": [21, 22]}]
+        return [{"cutoffs": np.array([3, 7, 10])}, {"cutoffs": [6, 9]}]
 
 
 class CutoffFhSplitter(BaseSplitter):
@@ -304,12 +305,21 @@ class CutoffFhSplitter(BaseSplitter):
         cutoff = self.cutoff
         fh = self.fh
 
+        if not isinstance(cutoff, pd.Index):
+            cutoff = pd.Index(cutoff)
+
         if fh is not None:
             from sktime.forecasting.base import ForecastingHorizon
 
             if not isinstance(fh, ForecastingHorizon):
                 fh = ForecastingHorizon(fh)
 
+        def is_date_like(x):
+            return is_datetime64_any_dtype(x) or isinstance(x, pd.PeriodDtype)
+
+        if is_date_like(y) and not is_date_like(cutoff):
+            cutoff = y[cutoff]
+
         for k in cutoff:
             train = y[y <= k]
             if fh is not None:
@@ -334,7 +344,7 @@ class CutoffFhSplitter(BaseSplitter):
         n_splits : int
             The number of splits.
         """
-        return len(self.cutoffs)
+        return len(self.cutoff)
 
     @classmethod
     def get_test_params(cls, parameter_set="default"):
@@ -355,6 +365,6 @@ class CutoffFhSplitter(BaseSplitter):
             instance.
             ``create_test_instance`` uses the first (or only) dictionary in ``params``
         """
-        params1 = {"cutoff": 3}
+        params1 = {"cutoff": np.array([3])}
         params2 = {"cutoff": [3, 4], "fh": [1, 2]}
         return [params1, params2]
diff --git a/sktime/transformations/panel/_shapelet_transform_numba.py b/sktime/transformations/panel/_shapelet_transform_numba.py
index d882c5f71..d90e6ae8c 100644
--- a/sktime/transformations/panel/_shapelet_transform_numba.py
+++ b/sktime/transformations/panel/_shapelet_transform_numba.py
@@ -56,7 +56,9 @@ def _online_shapelet_distance(series, shapelet, sorted_indices, position, length
             std = math.sqrt((sums2[n] - mean * mean * length) / length)
 
             dist = 0
-            use_std = std != 0
+
+            eps = 1e-8  # numerical eps, to avoid division by zero
+            use_std = std > eps  # use a numerical tolerance to prevent NaN values
             for j in range(length):
                 val = (series[pos + sorted_indices[j]] - mean) / std if use_std else 0
                 temp = shapelet[sorted_indices[j]] - val
@@ -70,7 +72,7 @@ def _online_shapelet_distance(series, shapelet, sorted_indices, position, length
 
         i += 1
 
-    return best_dist if best_dist == 0 else 1 / length * best_dist
+    return 1 / length * best_dist
 
 
 @njit(fastmath=True, cache=True)
diff --git a/sktime/transformations/panel/catch22wrapper.py b/sktime/transformations/panel/catch22wrapper.py
index 975fa2748..c71a03721 100644
--- a/sktime/transformations/panel/catch22wrapper.py
+++ b/sktime/transformations/panel/catch22wrapper.py
@@ -11,7 +11,6 @@ import pandas as pd
 
 from sktime.transformations.base import BaseTransformer
 from sktime.transformations.panel import catch22
-from sktime.utils.warnings import warn
 
 
 class Catch22Wrapper(BaseTransformer):
@@ -89,21 +88,18 @@ class Catch22Wrapper(BaseTransformer):
         "fit_is_empty": True,
     }
 
-    # todo 0.28.0: remove n_jobs parameter
     def __init__(
         self,
         features="all",
         catch24=False,
         outlier_norm=False,
         replace_nans=False,
-        n_jobs="deprecated",
         col_names="range",
     ):
         self.features = features
         self.catch24 = catch24
         self.outlier_norm = outlier_norm
         self.replace_nans = replace_nans
-        self.n_jobs = n_jobs
         self.col_names = col_names
 
         self.features_arguments = (
@@ -130,19 +126,6 @@ class Catch22Wrapper(BaseTransformer):
 
         super().__init__()
 
-        # todo 0.28.0: remove this warning and logic
-        if n_jobs != "deprecated":
-            warn(
-                "In Catch22Wrapper, the parameter "
-                "n_jobs is deprecated and will be removed in v0.28.0. "
-                "Instead, use set_config with the backend and backend:params "
-                "config fields, and set backend to 'joblib' and pass n_jobs "
-                "as a parameter of backend_params. ",
-                FutureWarning,
-                obj=self,
-            )
-            self.set_config(backend="joblib", backend_params={"n_jobs": n_jobs})
-
     def _transform(self, X, y=None):
         """Transform data into the Catch22 features.
 
diff --git a/sktime/transformations/panel/dictionary_based/__init__.py b/sktime/transformations/panel/dictionary_based/__init__.py
index 8e3b9c56d..a49a704e4 100644
--- a/sktime/transformations/panel/dictionary_based/__init__.py
+++ b/sktime/transformations/panel/dictionary_based/__init__.py
@@ -1,10 +1,8 @@
 """Transformers."""
 
-# TODO 0.28.0 - remove exports of PAA, SAX
-__all__ = ["PAA", "SFA", "SFAFast", "SAX", "PAAlegacy", "SAXlegacy"]
+__all__ = ["SFA", "SFAFast", "PAAlegacy", "SAXlegacy"]
 
-# TODO 0.28.0 - remove exports of PAA, SAX
-from sktime.transformations.panel.dictionary_based._paa import PAA, PAAlegacy
-from sktime.transformations.panel.dictionary_based._sax import SAX, SAXlegacy
+from sktime.transformations.panel.dictionary_based._paa import PAAlegacy
+from sktime.transformations.panel.dictionary_based._sax import SAXlegacy
 from sktime.transformations.panel.dictionary_based._sfa import SFA
 from sktime.transformations.panel.dictionary_based._sfa_fast import SFAFast
diff --git a/sktime/transformations/panel/dictionary_based/_paa.py b/sktime/transformations/panel/dictionary_based/_paa.py
index 020a66b93..db137cff7 100644
--- a/sktime/transformations/panel/dictionary_based/_paa.py
+++ b/sktime/transformations/panel/dictionary_based/_paa.py
@@ -3,7 +3,6 @@ import pandas as pd
 
 from sktime.datatypes._panel._convert import from_nested_to_2d_array
 from sktime.transformations.base import BaseTransformer
-from sktime.utils.warnings import warn
 
 __author__ = ["MatthewMiddlehurst"]
 
@@ -44,24 +43,6 @@ class PAAlegacy(BaseTransformer):
         self.num_intervals = num_intervals
         super().__init__()
 
-        # todo 0.28.0: remove this warning
-        warn(
-            "panel.dictionary_based.PAA has been renamed to PAAlegacy in sktime 0.27.0,"
-            " while sktime.transformations.series.PAA2 was renamed to PAA. "
-            "PAA2 will become the primary PAA implementation in sktime, "
-            "while the former PAA will continue to be available as PAAlegacy. "
-            "Both estimators are also available under their future name at their "
-            "current location, and will be available under their deprecated name "
-            "until 0.28.0. "
-            "To prepare for the name change, do one of the following: "
-            "1. replace use of PAA2 from sktime.transformations.panel.dictionary_based "
-            "by use of PAA from sktime.transformations.series.paa, or "
-            "2. replace use of PAA from sktime.transformations.panel.dictionary_based "
-            "by use of PAAlegacy from sktime.transformations.panel.dictionary_based. ",
-            DeprecationWarning,
-            obj=self,
-        )
-
     def set_num_intervals(self, n):
         """Set self.num_intervals to n."""
         self.num_intervals = n
@@ -171,7 +152,3 @@ class PAAlegacy(BaseTransformer):
                 + type(self.num_intervals).__name__
                 + "' instead."
             )
-
-
-# TODO 0.28.0: remove this alias altogether
-PAA = PAAlegacy
diff --git a/sktime/transformations/panel/dictionary_based/_sax.py b/sktime/transformations/panel/dictionary_based/_sax.py
index c64d7367b..716036cf7 100644
--- a/sktime/transformations/panel/dictionary_based/_sax.py
+++ b/sktime/transformations/panel/dictionary_based/_sax.py
@@ -8,7 +8,6 @@ import scipy.stats
 
 from sktime.transformations.base import BaseTransformer
 from sktime.transformations.panel.dictionary_based import PAAlegacy as PAA
-from sktime.utils.warnings import warn
 
 __author__ = ["MatthewMiddlehurst"]
 
@@ -86,24 +85,6 @@ class SAXlegacy(BaseTransformer):
 
         super().__init__()
 
-        # todo 0.28.0: remove this warning
-        warn(
-            "panel.dictionary_based.SAX has been renamed to SAXlegacy in sktime 0.27.0,"
-            " while sktime.transformations.series.SAX2 was renamed to SAX. "
-            "SAX2 will become the primary SAX implementation in sktime, "
-            "while the former SAX will continue to be available as SAXlegacy. "
-            "Both estimators are also available under their future name at their "
-            "current location, and will be available under their deprecated name "
-            "until 0.28.0. "
-            "To prepare for the name change, do one of the following: "
-            "1. replace use of SAX2 from sktime.transformations.panel.dictionary_based "
-            "by use of SAX from sktime.transformations.series.sax, or "
-            "2. replace use of SAX from sktime.transformations.panel.dictionary_based "
-            "by use of SAXlegacy from sktime.transformations.panel.dictionary_based. ",
-            DeprecationWarning,
-            obj=self,
-        )
-
         self.set_config(**{"output_conversion": "off"})
 
     # todo: looks like this just loops over series instances
@@ -235,7 +216,3 @@ class SAXlegacy(BaseTransformer):
         # small word length, window size for testing
         params = {"word_length": 2, "window_size": 4}
         return params
-
-
-# TODO 0.28.0: remove this alias altogether
-SAX = SAXlegacy
diff --git a/sktime/transformations/series/kalman_filter.py b/sktime/transformations/series/kalman_filter.py
index 9f317c00c..309d197cd 100644
--- a/sktime/transformations/series/kalman_filter.py
+++ b/sktime/transformations/series/kalman_filter.py
@@ -2,7 +2,7 @@
 """Kalman Filter Transformers.
 
 Series based transformers, based on Kalman Filter algorithm. Contains Base class and two
-transformers which are each Adapters for external packages pykalman-bardo and FilterPy.
+transformers which are each Adapters for external packages pykalman and FilterPy.
 """
 
 __author__ = ["NoaBenAmi", "lielleravid"]
@@ -404,12 +404,12 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
     an estimate of the state of a process.
 
 
-    This class is the adapter for the ``pykalman-bardo`` package into ``sktime``.
+    This class is the adapter for the ``pykalman`` package into ``sktime``.
     ``KalmanFilterTransformerPK`` implements hidden inferred states and
     denoising, depending on the boolean input parameter ``denoising``.
     In addition, ``KalmanFilterTransformerPK`` provides parameter
     optimization via Expectation-Maximization (EM) algorithm [2]_,
-    implemented by ``pykalman-bardo``.
+    implemented by ``pykalman``.
 
     Parameters
     ----------
@@ -443,22 +443,22 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
         Initial estimated system state covariance, also referred to as ``P0``.
     transition_offsets : np.ndarray, optional (default=None)
         of shape (state_dim,) or (time_steps, state_dim).
-        State offsets, also referred to as ``b``, as described in ``pykalman-bardo``.
+        State offsets, also referred to as ``b``, as described in ``pykalman``.
     measurement_offsets : np.ndarray, optional (default=None)
         of shape (measurement_dim,) or (time_steps, measurement_dim).
         Observation (measurement) offsets, also referred to as ``d``,
-        as described in ``pykalman-bardo``.
+        as described in ``pykalman``.
     denoising : bool, optional (default=False).
         This parameter affects ``transform``. If False, then ``transform`` will be
         inferring
-        hidden state. If True, uses ``pykalman-bardo`` ``smooth`` for denoising.
+        hidden state. If True, uses ``pykalman`` ``smooth`` for denoising.
     estimate_matrices : str or list of str, optional (default=None).
         Subset of [``state_transition``, ``measurement_function``,
         ``process_noise``, ``measurement_noise``, ``initial_state``,
         ``initial_state_covariance``, ``transition_offsets``, ``measurement_offsets``]
         or - ``all``. If ``estimate_matrices`` is an iterable of strings,
         only matrices in ``estimate_matrices`` will be estimated using EM algorithm,
-        like described in ``pykalman-bardo``. If ``estimate_matrices`` is ``all``,
+        like described in ``pykalman``. If ``estimate_matrices`` is ``all``,
         then all matrices will be estimated using EM algorithm.
 
         Note - parameters estimated by EM algorithm assumed to be constant.
@@ -470,7 +470,7 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
 
     Notes
     -----
-    ``pykalman-bardo`` KalmanFilter documentation :
+    ``pykalman`` KalmanFilter documentation :
         https://pykalman.github.io/#kalmanfilter
 
     References
@@ -540,8 +540,7 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
         # --------------
         "authors": ["NoaBenAmi", "lielleravid"],
         "maintainers": ["NoaBenAmi"],
-        "python_dependencies": "pykalman-bardo",
-        "python_dependencies_alias": {"pykalman-bardo": "pykalman"},
+        "python_dependencies": "pykalman",
         # estimator type
         # --------------
         "X_inner_mtype": "np.ndarray",  # which mtypes do _fit/_predict support for X?
@@ -704,8 +703,8 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
         This method performs the transformation of the input data
         according to the constructor input parameter ``denoising``.
         If ``denoising`` is True - then denoise data using
-        ``pykalman-bardo``'s ``smooth`` function.
-        Else, infer hidden state using ``pykalman-bardo``'s ``filter`` function.
+        ``pykalman``'s ``smooth`` function.
+        Else, infer hidden state using ``pykalman``'s ``filter`` function.
 
         Parameters
         ----------
@@ -782,7 +781,7 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
         """Estimate matrices algorithm if requested by user.
 
         If input matrices are specified in ``estimate_matrices``,
-        this method will use the ``pykalman-bardo`` EM algorithm function
+        this method will use the ``pykalman`` EM algorithm function
         to estimate said matrices needed to calculate the Kalman Filter.
         Algorithm explained in References[2].
         If ``estimate_matrices`` is None no matrices will be estimated.
@@ -835,7 +834,7 @@ class KalmanFilterTransformerPK(BaseKalmanFilter, BaseTransformer):
         return F, H, Q, R, transition_offsets, measurement_offsets, X0, P0
 
     def _get_estimate_matrices(self):
-        """Map parameter names to ``pykalman-bardo`` names for use of ``em``.
+        """Map parameter names to ``pykalman`` names for use of ``em``.
 
         Returns
         -------
@@ -949,7 +948,7 @@ class KalmanFilterTransformerFP(BaseKalmanFilter, BaseTransformer):
     See Also
     --------
     KalmanFilterTransformerPK :
-        Kalman Filter transformer, adapter for the ``pykalman-bardo`` package
+        Kalman Filter transformer, adapter for the ``pykalman`` package
         into ``sktime``.
 
     Notes
@@ -1093,7 +1092,7 @@ class KalmanFilterTransformerFP(BaseKalmanFilter, BaseTransformer):
             self: reference to self
         """
         # The below call to `_check_conditional_dependency` checks the installation
-        # of `pykalman-bardo` package, if needed. `pykalman-bardo`
+        # of `pykalman` package, if needed. `pykalman`
         # is used when the user requires matrices estimation
         # (`estimate_matrices` is not None).
         # This conditioned dependency check can be performed in
@@ -1101,16 +1100,15 @@ class KalmanFilterTransformerFP(BaseKalmanFilter, BaseTransformer):
         _check_conditional_dependency(
             obj=self,
             condition=(self.estimate_matrices is not None),
-            package="pykalman-bardo",
-            package_import_alias={"pykalman-bardo": "pykalman"},
+            package="pykalman",
             severity="error",
             msg=(
                 f"{self.__class__.__name__}'s matrix parameter estimation "
                 f"is performed when `estimate_matrices` "
                 f"is {self.estimate_matrices}, "
-                f"and requires `pykalman-bardo` installed. Please run: "
-                f"`pip install pykalman-bardo` to "
-                f"install the `pykalman-bardo` package. "
+                f"and requires `pykalman` installed. Please run: "
+                f"`pip install pykalman` to "
+                f"install the `pykalman` package. "
             ),
         )
 
diff --git a/sktime/transformations/series/paa.py b/sktime/transformations/series/paa.py
index cb189fe72..db6cb6079 100644
--- a/sktime/transformations/series/paa.py
+++ b/sktime/transformations/series/paa.py
@@ -5,7 +5,6 @@ __author__ = ["steenrotsman"]
 import numpy as np
 
 from sktime.transformations.base import BaseTransformer
-from sktime.utils.warnings import warn
 
 
 class PAA(BaseTransformer):
@@ -38,13 +37,13 @@ class PAA(BaseTransformer):
     Examples
     --------
     >>> from numpy import arange
-    >>> from sktime.transformations.series.paa import PAA2
+    >>> from sktime.transformations.series.paa import PAA
 
     >>> X = arange(10)
-    >>> paa = PAA2(frames=3)
+    >>> paa = PAA(frames=3)
     >>> paa.fit_transform(X)  # doctest: +SKIP
     array([1.2, 4.5, 7.8])
-    >>> paa = PAA2(frame_size=3)  # doctest: +SKIP
+    >>> paa = PAA(frame_size=3)  # doctest: +SKIP
     array([1, 4, 7, 9])
     """
 
@@ -70,20 +69,6 @@ class PAA(BaseTransformer):
 
         super().__init__()
 
-        # TODO 0.28.0: remove the deprecation warning
-        warn(
-            "Since sktime 0.27.0, PAA2 is the primary PAA implementation in "
-            "sktime, and has been renamed to PAA. "
-            "PAA2 is available under both its current and future name at its "
-            "current location, imports under the deprecated name PAA2 will be possible"
-            "until 0.28.0. "
-            "To prepare for the name change, replace imports of PAA2 from "
-            "sktime.transformations.series.paa by imports of PAA from the same "
-            "module.",
-            DeprecationWarning,
-            obj=self,
-        )
-
         self._check_params()
 
     def _transform(self, X, y=None):
@@ -167,7 +152,3 @@ class PAA(BaseTransformer):
 
         if self.frames < 1 and not self.frame_size:
             raise ValueError("frames must be at least 1.")
-
-
-# TODO 0.28.0: remove the alias line altogether
-PAA2 = PAA
diff --git a/sktime/transformations/series/sax.py b/sktime/transformations/series/sax.py
index 8e71c3a41..30968dd85 100644
--- a/sktime/transformations/series/sax.py
+++ b/sktime/transformations/series/sax.py
@@ -5,7 +5,6 @@ from scipy.stats import norm, zscore
 
 from sktime.transformations.base import BaseTransformer
 from sktime.transformations.series.paa import PAA
-from sktime.utils.warnings import warn
 
 
 class SAX(BaseTransformer):
@@ -47,13 +46,13 @@ class SAX(BaseTransformer):
     Examples
     --------
     >>> from numpy import arange
-    >>> from sktime.transformations.series.sax import SAX2
+    >>> from sktime.transformations.series.sax import SAX
 
     >>> X = arange(10)
-    >>> sax = SAX2(word_size=3, alphabet_size=5)
+    >>> sax = SAX(word_size=3, alphabet_size=5)
     >>> sax.fit_transform(X)  # doctest: +SKIP
     array([0, 2, 4])
-    >>> sax = SAX2(frame_size=2, alphabet_size=5)  # doctest: +SKIP
+    >>> sax = SAX(frame_size=2, alphabet_size=5)  # doctest: +SKIP
     array([0, 1, 2, 3, 4])
     """
 
@@ -80,19 +79,6 @@ class SAX(BaseTransformer):
 
         super().__init__()
 
-        warn(
-            "Since sktime 0.27.0, SAX2 is the primary SAX implementation in "
-            "sktime, and has been renamed to SAX. "
-            "SAX2 is available under both its current and future name at its "
-            "current location, imports under the deprecated name SAX2 will be possible"
-            "until 0.28.0. "
-            "To prepare for the name change, replace imports of SAX2 from "
-            "sktime.transformations.series.sax by imports of SAX from the same "
-            "module.",
-            DeprecationWarning,
-            obj=self,
-        )
-
         self._check_params()
 
     def _transform(self, X, y=None):
@@ -156,7 +142,3 @@ class SAX(BaseTransformer):
             raise ValueError("alphabet_size must be at least 2.")
         if self.frame_size < 0:
             raise ValueError("frame_size must be at least 0.")
-
-
-# TODO 0.28.0: remove the alias line altogether
-SAX2 = SAX
diff --git a/sktime/utils/deep_equals/__init__.py b/sktime/utils/deep_equals/__init__.py
index 25c52a96b..2449f4a4b 100644
--- a/sktime/utils/deep_equals/__init__.py
+++ b/sktime/utils/deep_equals/__init__.py
@@ -2,7 +2,7 @@
 """Module for nested equality checking."""
 from sktime.utils.validation._dependencies import _check_soft_dependencies
 
-# todo 0.28.0: check whether scikit-base>=0.6.1 lower bound is 0.6.1 or higher
+# todo 0.29.0: check whether scikit-base>=0.6.1 lower bound is 0.6.1 or higher
 # if yes, remove legacy handling and only use the new deep_equals
 if _check_soft_dependencies(
     "scikit-base<0.6.1",


Test patch:
diff --git a/sktime/forecasting/trend/tests/test_pwl_trend.py b/sktime/forecasting/trend/tests/test_pwl_trend.py
index 01275098c..6c1947fd0 100644
--- a/sktime/forecasting/trend/tests/test_pwl_trend.py
+++ b/sktime/forecasting/trend/tests/test_pwl_trend.py
@@ -97,8 +97,15 @@ def test_pred_with_explicit_changepoints():
     y_train, y_test = temporal_train_test_split(y)
 
     fh = ForecastingHorizon(y_test.index, is_relative=False)
-    a = ProphetPiecewiseLinearTrendForecaster(changepoints=["1953-05-31"])
-    b = ProphetPiecewiseLinearTrendForecaster()
+    seasonality_params = {
+        "yearly_seasonality": True,
+        "weekly_seasonality": True,
+        "daily_seasonality": True,
+    }
+    a = ProphetPiecewiseLinearTrendForecaster(
+        changepoints=["1953-05-31"], **seasonality_params
+    )
+    b = ProphetPiecewiseLinearTrendForecaster(**seasonality_params)
 
     slope_a = a.fit(y_train).predict(fh).diff().mean()
     slope_b = b.fit(y_train).predict(fh).diff().mean()
diff --git a/sktime/regression/tests/test_base.py b/sktime/regression/tests/test_base.py
new file mode 100644
index 000000000..34b78df6d
--- /dev/null
+++ b/sktime/regression/tests/test_base.py
@@ -0,0 +1,422 @@
+"""Unit tests for regression base class functionality."""
+
+__author__ = ["ksharma6"]
+
+import pickle
+
+import numpy as np
+import pandas as pd
+import pytest
+
+from sktime.regression.base import BaseRegressor
+from sktime.regression.deep_learning.base import BaseDeepRegressor
+from sktime.regression.distance_based import KNeighborsTimeSeriesRegressor
+from sktime.regression.dummy import DummyRegressor
+from sktime.utils._testing.panel import (
+    _make_panel,
+    _make_regression_y,
+    make_regression_problem,
+)
+from sktime.utils.validation._dependencies import _check_soft_dependencies
+
+
+class _DummyRegressor(BaseRegressor):
+    """Dummy regressor for testing base class fit/predict."""
+
+    def _fit(self, X, y):
+        """Fit dummy."""
+        return self
+
+    def _predict(self, X):
+        """Predict dummy."""
+        return self
+
+
+class _DummyComposite(_DummyRegressor):
+    """Dummy regressor for testing base class fit/predict."""
+
+    def __init__(self, foo):
+        self.foo = foo
+
+
+class _DummyDeepRegressorEmpty(BaseDeepRegressor):
+    """Dummy Deep Regressor for testing empty base deep class save utilities."""
+
+    def __init__(self):
+        super().__init__()
+
+    def build_model(self, input_shape, **kwargs):
+        return None
+
+    def _fit(self, X, y):
+        return self
+
+
+class _DummyDeepRegressorFull(BaseDeepRegressor):
+    """Dummy Deep Regressor to test serialization capabilities."""
+
+    def __init__(
+        self,
+        optimizer,
+    ):
+        super().__init__()
+        self.optimizer = optimizer
+
+    def build_model(self, input_shape, **kwargs):
+        return None
+
+    def _fit(self, X, y):
+        return self
+
+
+class _DummyHandlesAllInput(BaseRegressor):
+    """Dummy regressor for testing base class fit/predict."""
+
+    _tags = {
+        "capability:multivariate": True,
+        "capability:unequal_length": True,
+        "capability:missing_values": True,
+    }
+
+    def _fit(self, X, y):
+        """Fit dummy."""
+        return self
+
+    def _predict(self, X):
+        """Predict dummy."""
+        return self
+
+
+class _DummyConvertPandas(BaseRegressor):
+    """Dummy regressor for testing base class fit/predict."""
+
+    _tags = {
+        "X_inner_mtype": "nested_univ",  # which type do _fit/_predict, support for X?
+    }
+
+    def _fit(self, X, y):
+        """Fit dummy."""
+        return self
+
+    def _predict(self, X):
+        """Predict dummy."""
+        return self
+
+
+multivariate_message = r"multivariate series"
+missing_message = r"missing values"
+unequal_message = r"unequal length series"
+
+
+def test_base_regressor_fit():
+    """Test function for the BaseRegressor class fit.
+
+    Test fit. It should:
+    1. Work with 2D, 3D and DataFrame for X and nparray for y.
+    2. Record the fit time.
+    3. Have self.n_jobs set or throw  an exception if the regressor can
+    multithread.
+    4. Set the class dictionary correctly.
+    5. Set is_fitted after a call to _fit.
+    6. Return self.
+    """
+    dummy = _DummyRegressor()
+    cases = 5
+    length = 10
+    test_X1 = np.random.uniform(-1, 1, size=(cases, length))
+    test_X2 = np.random.uniform(-1, 1, size=(cases, 2, length))
+    test_X3 = _create_example_dataframe(cases=cases, dimensions=1, length=length)
+    test_X4 = _create_example_dataframe(cases=cases, dimensions=3, length=length)
+    test_y1 = np.random.randint(0, 2, size=(cases))
+    test_y2 = pd.DataFrame({"0": [1] * cases, "1": [0] * cases})
+    result = dummy.fit(test_X1, test_y1)
+    assert result is dummy
+    result = dummy.fit(test_X3, test_y2)
+    assert result is dummy
+    with pytest.raises(ValueError, match=multivariate_message):
+        result = dummy.fit(test_X2, test_y1)
+    assert result is dummy
+    result = dummy.fit(test_X3, test_y1)
+    assert result is dummy
+    with pytest.raises(ValueError, match=multivariate_message):
+        result = dummy.fit(test_X4, test_y1)
+    assert result is dummy
+
+
+TF = [True, False]
+
+
+@pytest.mark.parametrize("missing", TF)
+@pytest.mark.parametrize("multivariate", TF)
+@pytest.mark.parametrize("unequal", TF)
+def test_check_capabilities(missing, multivariate, unequal):
+    """Test the checking of capabilities.
+
+    There are eight different combinations to be tested with a regressor that can
+    handle it and that cannot. Obvs could loop, but I think its clearer to just
+    explicitly test;
+    """
+    X_metadata = {
+        "has_nans": missing,
+        "is_univariate": not multivariate,
+        "is_equal_length": not unequal,
+    }
+    handles_none = _DummyRegressor()
+    handles_none_composite = _DummyComposite(_DummyRegressor())
+
+    # checks that errors are raised
+    if missing:
+        with pytest.raises(ValueError, match=missing_message):
+            handles_none._check_capabilities(X_metadata)
+    if multivariate:
+        with pytest.raises(ValueError, match=multivariate_message):
+            handles_none._check_capabilities(X_metadata)
+    if unequal:
+        with pytest.raises(ValueError, match=unequal_message):
+            handles_none._check_capabilities(X_metadata)
+    if not missing and not multivariate and not unequal:
+        handles_none._check_capabilities(X_metadata)
+
+    if missing:
+        with pytest.warns(UserWarning, match=missing_message):
+            handles_none_composite._check_capabilities(X_metadata)
+    if multivariate:
+        with pytest.warns(UserWarning, match=multivariate_message):
+            handles_none_composite._check_capabilities(X_metadata)
+    if unequal:
+        with pytest.warns(UserWarning, match=unequal_message):
+            handles_none_composite._check_capabilities(X_metadata)
+    if not missing and not multivariate and not unequal:
+        handles_none_composite._check_capabilities(X_metadata)
+
+    handles_all = _DummyHandlesAllInput()
+    handles_all._check_capabilities(X_metadata)
+
+
+def test_convert_input():
+    """Test the conversions from dataframe to numpy.
+
+    1. Pass a 2D numpy X, get a 3D numpy X
+    2. Pass a 3D numpy X, get a 3D numpy X
+    3. Pass a pandas numpy X, equal length, get a 3D numpy X
+    4. Pass a pd.Series y, get a pd.Series back
+    5. Pass a np.ndarray y, get a pd.Series back
+    """
+
+    def _internal_convert(X, y=None):
+        return BaseRegressor._internal_convert(None, X, y)
+
+    cases = 5
+    length = 10
+    test_X1 = np.random.uniform(-1, 1, size=(cases, length))
+    test_X2 = np.random.uniform(-1, 1, size=(cases, 2, length))
+    tester = _DummyRegressor()
+    tempX = tester._convert_X(test_X2, "numpy3D")
+    assert tempX.shape[0] == cases and tempX.shape[1] == 2 and tempX.shape[2] == length
+    instance_list = []
+    for _ in range(0, cases):
+        instance_list.append(pd.Series(np.random.randn(10)))
+    test_X3 = _create_example_dataframe(cases=cases, dimensions=1, length=length)
+    test_X4 = _create_example_dataframe(cases=cases, dimensions=3, length=length)
+    tempX = tester._convert_X(test_X3, "nested_univ")
+    assert tempX.shape[0] == cases and tempX.shape[1] == 1 and tempX.shape[2] == length
+    tempX = tester._convert_X(test_X4, "nested_univ")
+    assert tempX.shape[0] == cases and tempX.shape[1] == 3 and tempX.shape[2] == length
+    tester = _DummyConvertPandas()
+    tempX = tester._convert_X(test_X2, "numpy3D")
+    assert isinstance(tempX, pd.DataFrame)
+    assert tempX.shape[0] == cases
+    assert tempX.shape[1] == 2
+    test_y1 = np.random.randint(0, 1, size=(cases))
+    test_y1 = pd.Series(test_y1)
+    tempX, tempY = _internal_convert(test_X1, test_y1)
+    assert isinstance(tempY, pd.Series)
+    assert isinstance(tempX, np.ndarray)
+    assert tempX.ndim == 3
+
+
+def test__check_regressor_input():
+    """Test for valid estimator format.
+
+    1. Test correct: X: np.array of 2 and 3 dimensions vs y:np.array and np.Series
+    2. Test correct: X: pd.DataFrame with 1 and 3 cols vs y:np.array and np.Series
+    3. Test incorrect: X with fewer cases than y
+    4. Test incorrect: y as a list
+    5. Test incorrect: too few cases or too short a series
+    """
+    clf = _DummyRegressor()
+
+    def _check_regressor_input(X, y=None, enforce_min_instances=1):
+        return clf._check_input(X, y, enforce_min_instances)
+
+    # 1. Test correct: X: np.array of 2 and 3 dimensions vs y:np.array and np.Series
+    test_X1 = np.random.uniform(-1, 1, size=(5, 10))
+    test_X2 = np.random.uniform(-1, 1, size=(5, 2, 10))
+    test_y1 = np.random.randint(0, 1, size=5)
+    test_y2 = pd.Series(np.random.randn(5))
+    _check_regressor_input(test_X2)
+    _check_regressor_input(test_X2, test_y1)
+    _check_regressor_input(test_X2, test_y2)
+    # 2. Test correct: X: pd.DataFrame with 1 (univariate) and 3 cols(multivariate) vs
+    # y:np.array and np.Series
+    test_X3 = _create_nested_dataframe(5, 1, 10)
+    test_X4 = _create_nested_dataframe(5, 3, 10)
+    _check_regressor_input(test_X3, test_y1)
+    _check_regressor_input(test_X4, test_y1)
+    _check_regressor_input(test_X3, test_y2)
+    _check_regressor_input(test_X4, test_y2)
+    # 3. Test incorrect: X with fewer cases than y
+    test_X5 = np.random.uniform(-1, 1, size=(3, 4, 10))
+    with pytest.raises(ValueError, match=r".*Mismatch in number of cases*."):
+        _check_regressor_input(test_X5, test_y1)
+    # 4. Test incorrect data type: y is a List
+    test_y3 = [1, 2, 3, 4, 5]
+    with pytest.raises(TypeError, match="must be in an sktime compatible format"):
+        _check_regressor_input(test_X1, test_y3)
+    # 5. Test incorrect: too few cases or too short a series
+    with pytest.raises(ValueError, match=r".*Minimum number of cases required*."):
+        _check_regressor_input(test_X2, test_y1, enforce_min_instances=6)
+
+
+def _create_example_dataframe(cases=5, dimensions=1, length=10):
+    """Create a simple data frame set of time series (X) for testing."""
+    test_X = pd.DataFrame(dtype=np.float32)
+    for i in range(0, dimensions):
+        instance_list = []
+        for _ in range(0, cases):
+            instance_list.append(pd.Series(np.random.randn(length)))
+        test_X["dimension_" + str(i)] = instance_list
+    return test_X
+
+
+def _create_nested_dataframe(cases=5, dimensions=1, length=10):
+    testy = pd.DataFrame(dtype=np.float32)
+    for i in range(0, dimensions):
+        instance_list = []
+        for _ in range(0, cases):
+            instance_list.append(pd.Series(np.random.randn(length)))
+        testy["dimension_" + str(i + 1)] = instance_list
+    return testy
+
+
+def _create_unequal_length_nested_dataframe(cases=5, dimensions=1, length=10):
+    testy = pd.DataFrame(dtype=np.float32)
+    for i in range(0, dimensions):
+        instance_list = []
+        for _ in range(0, cases - 1):
+            instance_list.append(pd.Series(np.random.randn(length)))
+        instance_list.append(pd.Series(np.random.randn(length - 1)))
+        testy["dimension_" + str(i + 1)] = instance_list
+
+    return testy
+
+
+MTYPES = ["numpy3D", "pd-multiindex", "df-list", "numpyflat", "nested_univ"]
+
+
+@pytest.mark.parametrize("mtype", MTYPES)
+def test_input_conversion_fit_predict(mtype):
+    """Test that base class lets all Panel mtypes through."""
+    y = _make_regression_y()
+    X = _make_panel(return_mtype=mtype)
+
+    clf = DummyRegressor()
+    clf.fit(X, y)
+    clf.predict(X)
+
+    clf = _DummyConvertPandas()
+    clf.fit(X, y)
+    clf.predict(X)
+
+
+@pytest.mark.parametrize("method", ["predict"])
+def test_predict_single_class(method):
+    """Test return of predict in case only single class seen in fit."""
+    X, y = make_regression_problem()
+    y[:] = 42
+    n_instances = 10
+    X_test = X[:n_instances]
+
+    clf = KNeighborsTimeSeriesRegressor()
+
+    clf.fit(X, y)
+    y_pred = getattr(clf, method)(X_test)
+
+    if method == "predict":
+        assert isinstance(y_pred, np.ndarray)
+        assert y_pred.ndim == 1
+        assert y_pred.shape == (n_instances,)
+        assert all(list(y_pred == 42))
+
+
+@pytest.mark.skipif(
+    not _check_soft_dependencies("tensorflow", severity="none"),
+    reason="skip test if required soft dependency not available",
+)
+def test_deep_estimator_empty():
+    """Check if serialization works for empty dummy."""
+    empty_dummy = _DummyDeepRegressorEmpty()
+    serialized_empty = pickle.dumps(empty_dummy)
+    deserialized_empty = pickle.loads(serialized_empty)
+    assert empty_dummy.__dict__ == deserialized_empty.__dict__
+
+
+@pytest.mark.xfail(reason="known failure, see #6153")
+@pytest.mark.skipif(
+    not _check_soft_dependencies("tensorflow", severity="none"),
+    reason="skip test if required soft dependency not available",
+)
+@pytest.mark.parametrize("optimizer", [None, "adam", "object-adamax"])
+def test_deep_estimator_full(optimizer):
+    """Check if serialization works for full dummy."""
+    from tensorflow.keras.optimizers import Adamax, Optimizer, serialize
+
+    if optimizer == "object-adamax":
+        optimizer = Adamax()
+
+    full_dummy = _DummyDeepRegressorFull(optimizer)
+    serialized_full = pickle.dumps(full_dummy)
+    deserialized_full = pickle.loads(serialized_full)
+
+    if isinstance(optimizer, Optimizer):
+        # assert same configuration of optimizer
+        assert serialize(full_dummy.__dict__["optimizer"]) == serialize(
+            deserialized_full.__dict__["optimizer"]
+        )
+        assert serialize(full_dummy.optimizer) == serialize(deserialized_full.optimizer)
+
+        # assert weights of optimizers are same
+        assert (
+            full_dummy.optimizer.variables() == deserialized_full.optimizer.variables()
+        )
+
+        # remove optimizers from both to do full dict check,
+        # since two different objects
+        del full_dummy.__dict__["optimizer"]
+        del deserialized_full.__dict__["optimizer"]
+
+    # check if components are same
+    assert full_dummy.__dict__ == deserialized_full.__dict__
+
+
+DUMMY_EST_PARAMETERS_FOO = [None, 10.3, "string", {"key": "value"}, lambda x: x**2]
+
+
+@pytest.mark.skipif(
+    not _check_soft_dependencies("cloudpickle", severity="none"),
+    reason="skip test if required soft dependency not available",
+)
+@pytest.mark.parametrize("foo", DUMMY_EST_PARAMETERS_FOO)
+def test_save_estimator_using_cloudpickle(foo):
+    """Check if serialization works with cloudpickle."""
+    from sktime.base._serialize import load
+
+    est = _DummyComposite(foo)
+
+    serialized = est.save(serialization_format="cloudpickle")
+    loaded_est = load(serialized)
+
+    if callable(foo):
+        assert est.foo(2) == loaded_est.foo(2)
+    else:
+        assert est.foo == loaded_est.foo
diff --git a/sktime/split/tests/test_all_splitters.py b/sktime/split/tests/test_all_splitters.py
new file mode 100644
index 000000000..2f54ae6c4
--- /dev/null
+++ b/sktime/split/tests/test_all_splitters.py
@@ -0,0 +1,144 @@
+"""Unit tests for time series splitters."""
+
+__author__ = ["fkiraly"]
+
+import types
+
+import numpy as np
+import pandas as pd
+import pytest
+
+from sktime.tests.test_all_estimators import BaseFixtureGenerator, QuickTester
+from sktime.utils._testing.hierarchical import _make_hierarchical
+from sktime.utils._testing.series import _make_series
+
+
+class SplitterFixtureGenerator(BaseFixtureGenerator):
+    """Fixture generator for splitter tests.
+
+    Fixtures parameterized
+    ----------------------
+    estimator_class: estimator inheriting from BaseObject
+        ranges over estimator classes not excluded by EXCLUDE_ESTIMATORS, EXCLUDED_TESTS
+    estimator_instance: instance of estimator inheriting from BaseObject
+        ranges over estimator classes not excluded by EXCLUDE_ESTIMATORS, EXCLUDED_TESTS
+        instances are generated by create_test_instance class method
+    """
+
+    # note: this should be separate from TestAllSplitters
+    #   additional fixtures, parameters, etc should be added here
+    #   TestAllSplitters should contain the tests only
+
+    estimator_type_filter = "splitter"
+
+
+class TestAllSplitters(SplitterFixtureGenerator, QuickTester):
+    """Module level tests for all sktime time series splitters."""
+
+    @pytest.mark.parametrize("hierarchical", [False, True])
+    def test_split(self, estimator_instance, hierarchical):
+        """Test contract for split."""
+        splitter = estimator_instance
+
+        if hierarchical:
+            y = _make_hierarchical()
+        else:
+            y = _make_series()
+
+        n_splits = splitter.get_n_splits(y)
+
+        assert isinstance(n_splits, int)
+
+        gen_split = splitter.split(y)
+
+        assert isinstance(gen_split, types.GeneratorType)
+
+        splits = list(gen_split)
+
+        assert isinstance(splits, list)
+
+        for x in splits:
+            assert isinstance(x, tuple)
+            assert len(x) == 2
+            assert isinstance(x[0], np.ndarray)
+            assert isinstance(x[1], np.ndarray)
+
+            train = x[0]
+            test = x[1]
+
+            assert train.ndim == 1
+            assert test.ndim == 1
+            assert train.dtype in [np.int64, np.int32]
+            assert test.dtype in [np.int64, np.int32]
+
+            assert np.all(train < len(y))
+            assert np.all(test < len(y))
+
+    @pytest.mark.parametrize("hierarchical", [False, True])
+    def test_split_loc(self, estimator_instance, hierarchical):
+        """Test contract for split_loc."""
+        splitter = estimator_instance
+
+        if hierarchical:
+            y = _make_hierarchical()
+        else:
+            y = _make_series()
+
+        n_splits = splitter.get_n_splits(y)
+
+        assert isinstance(n_splits, int)
+
+        gen_split = splitter.split_loc(y)
+
+        assert isinstance(gen_split, types.GeneratorType)
+
+        splits = list(gen_split)
+
+        assert isinstance(splits, list)
+        assert len(splits) == n_splits
+
+        for x in splits:
+            assert isinstance(x, tuple)
+            assert len(x) == 2
+            assert isinstance(x[0], pd.Index)
+            assert isinstance(x[1], pd.Index)
+
+            train = x[0]
+            test = x[1]
+
+            assert np.all(train.isin(y.index))
+            assert np.all(test.isin(y.index))
+
+    @pytest.mark.parametrize("hierarchical", [False, True])
+    def test_split_series(self, estimator_instance, hierarchical):
+        """Test contract for split_series."""
+        splitter = estimator_instance
+
+        if hierarchical:
+            y = _make_hierarchical()
+        else:
+            y = _make_series()
+
+        n_splits = splitter.get_n_splits(y)
+
+        assert isinstance(n_splits, int)
+
+        gen_split = splitter.split_series(y)
+
+        assert isinstance(gen_split, types.GeneratorType)
+
+        splits = list(gen_split)
+
+        assert isinstance(splits, list)
+        assert len(splits) == n_splits
+
+        if hierarchical:
+            expected_type = pd.DataFrame
+        else:
+            expected_type = pd.Series
+
+        for x in splits:
+            assert isinstance(x, tuple)
+            assert len(x) == 2
+            assert isinstance(x[0], expected_type)
+            assert isinstance(x[1], expected_type)
diff --git a/sktime/tests/_config.py b/sktime/tests/_config.py
index cc1024f4e..3b2a870cb 100644
--- a/sktime/tests/_config.py
+++ b/sktime/tests/_config.py
@@ -48,6 +48,12 @@ EXCLUDE_ESTIMATORS = [
     "MACNNRegressor",
     "CNTCClassifier",
     "CNTCRegressor",
+    # splitters excluded with undiagnosed failures, see #6194
+    # these are temporarily skipped to allow merging of the base test framework
+    "SameLocSplitter",
+    "TestPlusTrainSplitter",
+    "Repeat",
+    "CutoffFhSplitter",
 ]
 
 
@@ -87,6 +93,7 @@ EXCLUDED_TESTS = {
         "test_persistence_via_pickle",
         "test_fit_does_not_overwrite_hyper_params",
         "test_save_estimators_to_file",
+        "test_fit_idempotent",  # see 6201
     ],
     # TapNet fails due to Lambda layer, see #3539 and #3616
     "TapNetClassifier": [
@@ -139,6 +146,7 @@ EXCLUDED_TESTS = {
         "test_fit_idempotent",
         "test_persistence_via_pickle",
         "test_save_estimators_to_file",
+        "test_multioutput",  # see 6201
     ],
     "SimpleRNNRegressor": [
         "test_fit_idempotent",
diff --git a/sktime/tests/test_class_register.py b/sktime/tests/test_class_register.py
index f7839bb35..cc5ad43da 100644
--- a/sktime/tests/test_class_register.py
+++ b/sktime/tests/test_class_register.py
@@ -33,6 +33,7 @@ def get_test_class_registry():
     from sktime.param_est.tests.test_all_param_est import TestAllParamFitters
     from sktime.proba.tests.test_all_distrs import TestAllDistributions
     from sktime.regression.tests.test_all_regressors import TestAllRegressors
+    from sktime.split.tests.test_all_splitters import TestAllSplitters
     from sktime.tests.test_all_estimators import TestAllEstimators, TestAllObjects
     from sktime.transformations.tests.test_all_transformers import TestAllTransformers
 
@@ -54,6 +55,7 @@ def get_test_class_registry():
     testclass_dict["forecaster"] = TestAllForecasters
     testclass_dict["param_est"] = TestAllParamFitters
     testclass_dict["regressor"] = TestAllRegressors
+    testclass_dict["splitter"] = TestAllSplitters
     testclass_dict["transformer"] = TestAllTransformers
     testclass_dict["transformer-pairwise"] = TestAllPairwiseTransformers
     testclass_dict["transformer-pairwise-panel"] = TestAllPanelTransformers
diff --git a/sktime/transformations/series/tests/test_kalman_filter.py b/sktime/transformations/series/tests/test_kalman_filter.py
index f22ed2528..70161d15d 100644
--- a/sktime/transformations/series/tests/test_kalman_filter.py
+++ b/sktime/transformations/series/tests/test_kalman_filter.py
@@ -117,7 +117,7 @@ def get_params_mapping(params):
     """Transform parameters names.
 
     From KalmanFilterTransformerPK, KalmanFilterTransformerFP naming forms to
-    `pykalman-bardo`'s naming form.
+    `pykalman`'s naming form.
     """
     params_mapping = {
         "state_transition": "transition_matrices",
@@ -150,7 +150,7 @@ def init_kf_pykalman(
     estimate_matrices=None,
     denoising=False,
 ):
-    """Initiate instance of `pykalman-bardo`'s `KalmanFilter`."""
+    """Initiate instance of `pykalman`'s `KalmanFilter`."""
     from pykalman.standard import KalmanFilter
 
     em_vars = get_params_mapping(params=estimate_matrices)
@@ -200,12 +200,8 @@ def init_kf_filterpy(measurements, adapter, n=10, y=None):
 
 
 @pytest.mark.skipif(
-    not _check_soft_dependencies(
-        "pykalman-bardo",
-        package_import_alias={"pykalman-bardo": "pykalman"},
-        severity="none",
-    ),
-    reason="skip test if required soft dependency pykalman-bardo not available",
+    not _check_soft_dependencies("pykalman", severity="none"),
+    reason="skip test if required soft dependency pykalman not available",
 )
 @pytest.mark.parametrize(
     "params, measurements",
@@ -320,7 +316,7 @@ def test_transform_and_smooth_pk(params, measurements):
 
     Creating two instances of KalmanFilterTransformerPK, one instance with parameter
     `denoising` set to False, and the other's set to True. Compare result with
-    `pykalman-bardo`'s `filter` and `smooth`.
+    `pykalman`'s `filter` and `smooth`.
     """
     mask_measurements = np.ma.masked_invalid(np.copy(measurements))
 
@@ -349,16 +345,8 @@ def test_transform_and_smooth_pk(params, measurements):
 
 
 @pytest.mark.skipif(
-    not _check_soft_dependencies(
-        "pykalman-bardo",
-        "filterpy",
-        package_import_alias={"pykalman-bardo": "pykalman"},
-        severity="none",
-    ),
-    reason=(
-        "skip test if required soft dependencies pykalman-bardo, "
-        "filterpy not available"
-    ),
+    not _check_soft_dependencies("pykalman", "filterpy", severity="none"),
+    reason="skip test if required soft dependencies pykalman, filterpy not available",
 )
 @pytest.mark.parametrize(
     "classes, params, measurements",
@@ -561,7 +549,7 @@ def test_em(classes, params, measurements):
     """Test adapters matrix estimation.
 
     Call `fit` of input adapter/s, and compare all matrix parameters with
-    `pykalman-bardo`'s matrix parameters returned from `em`. This test
+    `pykalman`'s matrix parameters returned from `em`. This test
     is useful for both KalmanFilterTransformerPK and
     KalmanFilterTransformerFP.
     """
@@ -592,16 +580,8 @@ def test_em(classes, params, measurements):
 
 
 @pytest.mark.skipif(
-    not _check_soft_dependencies(
-        "pykalman-bardo",
-        "filterpy",
-        package_import_alias={"pykalman-bardo": "pykalman"},
-        severity="none",
-    ),
-    reason=(
-        "skip test if required soft dependencies pykalman-bardo, "
-        "filterpy not available"
-    ),
+    not _check_soft_dependencies("pykalman", "filterpy", severity="none"),
+    reason="skip test if required soft dependencies pykalman, filterpy not available",
 )
 @pytest.mark.parametrize(
     "classes, params, measurements",
diff --git a/sktime/transformations/series/tests/test_paa.py b/sktime/transformations/series/tests/test_paa.py
index 4acf1b13d..8d1338507 100644
--- a/sktime/transformations/series/tests/test_paa.py
+++ b/sktime/transformations/series/tests/test_paa.py
@@ -2,7 +2,7 @@
 import numpy as np
 import pytest
 
-from sktime.transformations.series.paa import PAA2
+from sktime.transformations.series.paa import PAA
 
 
 # Check that exception is raised for bad frames values.
@@ -16,10 +16,10 @@ def test_bad_input_args(bad_frames):
     if not isinstance(bad_frames, int):
         for attribute in ["frames", "frame_size"]:
             with pytest.raises(TypeError):
-                PAA2(**{attribute: bad_frames}).fit(X).transform(X)
+                PAA(**{attribute: bad_frames}).fit(X).transform(X)
     else:
         with pytest.raises(ValueError):
-            PAA2(bad_frames).fit(X).transform(X)
+            PAA(bad_frames).fit(X).transform(X)
 
 
 @pytest.mark.parametrize(
@@ -38,7 +38,7 @@ def test_bad_input_args(bad_frames):
 def test_output_of_transformer(frames, frame_size, expected):
     """Test that the transformer has changed the data correctly."""
     X = np.arange(10).T
-    paa = PAA2(frames, frame_size)
+    paa = PAA(frames, frame_size)
     res = paa.fit_transform(X)
     want = np.array(expected, dtype=np.float64).T
     np.testing.assert_array_equal(res, want)
diff --git a/sktime/transformations/series/tests/test_sax.py b/sktime/transformations/series/tests/test_sax.py
index ca122c932..116e7d293 100644
--- a/sktime/transformations/series/tests/test_sax.py
+++ b/sktime/transformations/series/tests/test_sax.py
@@ -2,7 +2,7 @@
 import numpy as np
 import pytest
 
-from sktime.transformations.series.sax import SAX2
+from sktime.transformations.series.sax import SAX
 
 
 # Check that exception is raised for bad size values.
@@ -13,7 +13,7 @@ def test_bad_input_types(bad_size):
     """Test that exception is raised for bad sizes."""
     for attribute in ["word_size", "alphabet_size", "frame_size"]:
         with pytest.raises(TypeError):
-            SAX2(**{attribute: bad_size})
+            SAX(**{attribute: bad_size})
 
 
 @pytest.mark.parametrize(
@@ -27,7 +27,7 @@ def test_bad_input_types(bad_size):
 def test_bad_input_values(attribute, bad_size):
     """Test that word_size is at least 1 (if frame_size is not set)."""
     with pytest.raises(ValueError):
-        SAX2(**{attribute: bad_size})
+        SAX(**{attribute: bad_size})
 
 
 @pytest.mark.parametrize(
@@ -42,7 +42,7 @@ def test_bad_input_values(attribute, bad_size):
 def test_output_of_transformer(word_size, alphabet_size, frame_size, expected):
     """Test that the transformer has changed the data correctly."""
     X = np.arange(10).T
-    sax = SAX2(word_size, alphabet_size, frame_size)
+    sax = SAX(word_size, alphabet_size, frame_size)
     res = sax.fit_transform(X)
     want = np.array(expected, dtype=np.float64).T
     np.testing.assert_array_equal(res, want)
diff --git a/sktime/utils/_testing/deep_equals.py b/sktime/utils/_testing/deep_equals.py
index 131ad09f4..4ccf000ad 100644
--- a/sktime/utils/_testing/deep_equals.py
+++ b/sktime/utils/_testing/deep_equals.py
@@ -16,7 +16,7 @@ import numpy as np
 import pandas as pd
 
 
-# todo 0.28.0: check whether scikit-base>=0.6.1 lower bound is 0.6.1 or higher
+# todo 0.29.0: check whether scikit-base>=0.6.1 lower bound is 0.6.1 or higher
 # if yes, remove this legacy function and use the new one from sktime.utils.deep_equals
 def deep_equals(x, y, return_msg=False):
     """Test two objects for equality in value.