Repository: sktime/sktime
Pull request #7762 (2025-02-05 05:24:25)

[BUG] conversion `Series`-`pd.DataFrame` to `Series`-`pd.Series` now retains original column name as attr name in `pd.Series`
Fixes https://github.com/sktime/sktime/issues/7763, the following:

Suppose XYZ is a forecaster with y scitype of pd.Series.
If you call XYZ.fit(y) with y a pd.DataFrame with a single column, sktime is "robust" and will convert the single column DataFrame to a pd.Series. This is done in routine 'convert_MvS_to_UvS_as_Series' in datatypes/_series/_convert.py.

The problem is that in doing this, the column name from the DataFrame has been lost. It should be retained as the attr name in the new series. This PR modifies the behavior of convert_MvS_to_UvS_as_Series so that the attr name of the new pd.Series object is the column name from the original pd.DataFrame.

I ran pytest datatypes pre- and post- changes and it had the same number of passes and skipped, and no failures. (Although there were some slight changes on ~ 3 lines which I did not understand.)

ericjb: I posted the differences yesterday in our Direct Messages. Here is a copy-paste from there:

OK I ran the tests with and without the change ("the change" <--> comment out the else clause that sets y.name = None)
In the following I print out some diffs. The '<' rows are "pre-change" and the '>' rows are post change.
< ====================== 3037 passed, 26 skipped, 1 warning in 573.04s (0:09:33) =======================
---
====================== 3037 passed, 26 skipped, 1 warning in 571.83s (0:09:31) =======================
So, no difference in terms of passed and skipped.
I also sorted the lines of the output (after removing timing information which is irrelevant)
< sktime/datatypes/tests/test_vectorize.py::test_vectorize_est[Hierarchical-pd_multiindex_hier-fixture:1-Panel-False-False-backend2]
79d77
< sktime/datatypes/tests/test_vectorize.py::test_vectorize_est[Panel-df-list-fixture:1-Series-True-True-backend2]
80a79
sktime/datatypes/tests/test_vectorize.py::test_vectorize_est[Panel-nested_univ-fixture:0-Series-True-True-backend2]
84a84
sktime/datatypes/tests/test_vectorize.py::test_vectorize_est[Panel-pd-multiindex-fixture:1-Series-False-True-backend2]
These are the only differences on the sorted lines. I don't know how to interpret these differences, but presumably they are o.k.
Now what?
It seems that this window is swallowing the '>' at the beginning of the lines but hopefully it is ok. I can post the output text files from the tests if you want.
ericjb: [post.txt](https://github.com/user-attachments/files/18668463/post.txt)
[pre.txt](https://github.com/user-attachments/files/18668464/pre.txt)

I attached the logs of pytest for two runs, pre-change and post-change. The files are pre.txt and post.txt
fkiraly: I see!

Could you perhaps add a test that captures the essence of the problem (which I still have not fully grasped)?

Such that it fails pre-fix and passes post-fix?
fkiraly: Given that the tests were not all running - as we discovered thanks to you, @ericjb! - we need to run all tests again before we merge.

Here is the run: https://github.com/sktime/sktime/actions/runs/13219198891
ericjb: I could not reproduce an error on my first attempt. Here's what I did.
ericjb: I also tried the wider
pytest sktime/classification/tests

And that gave 126 passed, 5 skipped, 242 warnings
ericjb: Now I tried  pytest sktime/forecasting/tests
344 passed, 620 skipped  (no warnings, no errors)

Any ideas?
fkiraly: This is due to incremental testing - only things are tested that are impacted by the change - and the lack of taking this into account fo changes to the `datatypes` module: https://github.com/sktime/sktime/issues/7794

To run all tests, you can run `pytest --only_changed_modules False`. However, that takes a long time, so I have pinpointed a test from the logs of the "test all" run.

To get it to fail, run `check_estimator` with `raise_exceptions=True` on `ThetaForecaster`. The `test_predict_time_index` should fail.


ericjb: I ran the following program:

```
import warnings
from sktime.utils import check_estimator
from sktime.forecasting.theta import ThetaForecaster

warnings.filterwarnings("ignore", category=UserWarning, message="NotImplementedWarning: ThetaForecaster can not accept new data when update_params=False. Call with update_params=True to refit with new data.")

check_estimator(ThetaForecaster, raise_exceptions=True)
```


It failed the following assertion in test_fit_predict() in class TestAllForecasters
(in sktime/forecasting/tests/test_all_forecasters.py)

_assert_correct_columns(y_pred, y_train)

y_pred has name 0, y_train has name None - so the assertion fails

This is *without* my proposed changes to convert_MvS_to_UvS_as_Series() in 
sktime/datatypes/_series/_convert.py

--------------------------------------------------------------------------

My changes do not affect this test. When I run the same program against my changes the same assertion fails.

Any other suggestions on what to test?


fkiraly: what happens if you take any forecaster that is not in `statsmodels`? For instance, `NaiveForecaster`?
ericjb: Switching to NaiveForecaster, the results for pre- and post- change are the same. And these results are:

```
File "/home/ericb/GitHub/sktime/sktime/forecasting/naive.py", line 105, in NoName
Failed example:
    forecaster.fit(y)
Expected:
    NaiveForecaster(...)
Got:
    NaiveForecaster(strategy='drift')
/home/ericb/GitHub/sktime/sktime/forecasting/base/_base.py:1247: UserWarning: empty y passed to update_predict of NaiveForecaster(sp=2, strategy='mean'), no update was carried out
  warn(
/home/ericb/GitHub/sktime/sktime/forecasting/naive.py:260: RuntimeWarning: Mean of empty slice
  y_pred = np.nanmean(last_window, axis=0)
/home/ericb/GitHub/sktime/sktime/forecasting/base/_base.py:1247: UserWarning: empty y passed to update_predict of NaiveForecaster(sp=2, strategy='mean'), no update was carried out
  warn(
/home/ericb/GitHub/sktime/sktime/forecasting/naive.py:260: RuntimeWarning: Mean of empty slice
  y_pred = np.nanmean(last_window, axis=0)

many of these lines repeated

All tests PASSED!
```

I don't quite understand why the first output says that there is a failed example but then reams of warnings and a final statement that 'All tests PASSED!'. So, no differences in results with or without my proposed change.
fkiraly: Ok, that looks positive then.

As a last thing, could you check whether this bug is *fixed* by your PR?
https://github.com/sktime/sktime/issues/7671

Not required for approval here, but I think this could be useful information and also point you towards a possible corner case.
ericjb: Here is code that will fail before the change and pass after the change

```
from sktime.datasets import load_airline
from sktime.datatypes._series._convert import convert_MvS_to_UvS_as_Series

y = load_airline()
z = y.to_frame()
w = convert_MvS_to_UvS_as_Series(z)

assert y.name == w.name

```
fkiraly: Great! Could you add this as a `pytest` test, in `sktime.datatypes.tests.test_convert_bugfixes`?

Just follow the pattern (and let us know if it is not clear).
ericjb: FYI this is more how I came to it

from sktime.datasets import load_airline
from sktime.forecasting.base._base import BaseForecaster
y = load_airline()
z = y.to_frame()

fc = BaseForecaster()
X_inner, y_inner = fc._check_X_y(X=None, y=z)

assert y.name == y_inner.name

ericjb: Added via PR # 7806
fkiraly: Thanks!

Best practice is to have the test and the fix in the same PR (so you do not have a temporary state where it acutally fails on `main`), so I just merged the PR into this one.

Patch:
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 59b8302d0..ff0c98b88 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-334-orange.svg)](#contributors)
+[![All Contributors](https://img.shields.io/badge/all_contributors-335-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!
@@ -320,13 +320,14 @@ 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/Saptarshi-Bandopadhyay"><img src="https://avatars.githubusercontent.com/u/88289395?v=4?s=100" width="100px;" alt="Saptarshi Bandopadhyay"/><br /><sub><b>Saptarshi Bandopadhyay</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Saptarshi-Bandopadhyay" title="Documentation">📖</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://github.com/satvshr"><img src="https://avatars.githubusercontent.com/u/112589278?s=100" width="100px;" alt="Satvik Mishra"/><br /><sub><b>Satvik Mishra</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=satvshr" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Asatvshr" title="Bug reports">🐛</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>
       <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/bastisar"><img src="https://avatars.githubusercontent.com/u/142449680?v=4?s=100" width="100px;" alt="Sebastian Hien"/><br /><sub><b>Sebastian Hien</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=bastisar" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Abastisar" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=bastisar" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/bastisar"><img src="https://avatars.githubusercontent.com/u/142449680?v=4?s=100" width="100px;" alt="Sebastian Hien"/><br /><sub><b>Sebastian Hien</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=bastisar" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Abastisar" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=bastisar" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ShivamPathak99"><img src="https://avatars.githubusercontent.com/u/98941325?s=400&v=4?s=100" width="100px;" alt="Shivam Pathak"/><br /><sub><b>Shivam Pathak</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=ShivamPathak99" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/ShivamJ07"><img src="https://avatars.githubusercontent.com/ShivamJ07?s=100" width="100px;" alt="Shivam Singal"/><br /><sub><b>Shivam Singal</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AShivamJ07" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=ShivamJ07" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/AurumnPegasus"><img src="https://avatars.githubusercontent.com/u/54315149?v=4?s=100" width="100px;" alt="Shivansh Subramanian"/><br /><sub><b>Shivansh Subramanian</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=AurumnPegasus" title="Documentation">📖</a> <a href="https://github.com/sktime/sktime/commits?author=AurumnPegasus" title="Code">💻</a></td>
@@ -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/ShreeshaM07"><img src="https://avatars.githubusercontent.com/u/120820143?s=400&v=4?s=100" width="100px;" alt="Shreesha M"/><br /><sub><b>Shreesha M</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AShreeshaM07" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=ShreeshaM07" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=ShreeshaM07" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/sbuse"><img src="https://avatars.githubusercontent.com/u/24408707?v=4?s=100" width="100px;" alt="Simon B."/><br /><sub><b>Simon B.</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=sbuse" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/slavik57"><img src="https://avatars.githubusercontent.com/u/6184997?v=4?s=100" width="100px;" alt="Slava Shpitalny"/><br /><sub><b>Slava Shpitalny</b></sub></a><br /><a href="#maintenance-slavik57" title="Maintenance">🚧</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Sohaib-Ahmed21"><img src="https://avatars.githubusercontent.com/Sohaib-Ahmed21?s=100" width="100px;" alt="Sohaib Ahmed"/><br /><sub><b>Sohaib Ahmed</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Sohaib-Ahmed21" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/Sohaib-Ahmed21"><img src="https://avatars.githubusercontent.com/Sohaib-Ahmed21?s=100" width="100px;" alt="Sohaib Ahmed"/><br /><sub><b>Sohaib Ahmed</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Sohaib-Ahmed21" 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>
@@ -346,9 +347,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/Taise228"><img src="https://avatars.githubusercontent.com/u/95762401?s=400&v=4?s=100" width="100px;" alt="Taisei Yamamoto"/><br /><sub><b>Taisei Yamamoto</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Taise228" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://thayeylolu.github.io/portfolio/"><img src="https://avatars.githubusercontent.com/u/13348874?v=4?s=100" width="100px;" alt="Taiwo Owoseni"/><br /><sub><b>Taiwo Owoseni</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=thayeylolu" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/tanvincible"><img src="https://avatars.githubusercontent.com/tanvincible?s=100" width="100px;" alt="Tanvi Pooranmal Meena"/><br /><sub><b>Tanvi Pooranmal Meena</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=tanvincible" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=tanvincible" title="Documentation">📖</a></td>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/lnthach"><img src="https://avatars0.githubusercontent.com/u/7788363?v=4?s=100" width="100px;" alt="Thach Le Nguyen"/><br /><sub><b>Thach Le Nguyen</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=lnthach" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=lnthach" title="Tests">⚠️</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/lnthach"><img src="https://avatars0.githubusercontent.com/u/7788363?v=4?s=100" width="100px;" alt="Thach Le Nguyen"/><br /><sub><b>Thach Le Nguyen</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=lnthach" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=lnthach" title="Tests">⚠️</a></td>
       <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>
@@ -357,9 +358,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
       <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/onyekaugochukwu"><img src="https://avatars.githubusercontent.com/u/92909501?v=4?s=100" width="100px;" alt="Ugochukwu Onyeka"/><br /><sub><b>Ugochukwu Onyeka</b></sub></a><br /><a href="#business-onyekaugochukwu" title="Business development">💼</a> <a href="https://github.com/sktime/sktime/commits?author=onyekaugochukwu" title="Documentation">📖</a> <a href="#ideas-onyekaugochukwu" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-onyekaugochukwu" title="Mentoring">🧑‍🏫</a> <a href="#projectManagement-onyekaugochukwu" title="Project Management">📆</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>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/vagechirkov"><img src="https://avatars.githubusercontent.com/vagechirkov?s=100" width="100px;" alt="Valerii Chirkov"/><br /><sub><b>Valerii Chirkov</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vagechirkov" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=vagechirkov" title="Documentation">📖</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/vagechirkov"><img src="https://avatars.githubusercontent.com/vagechirkov?s=100" width="100px;" alt="Valerii Chirkov"/><br /><sub><b>Valerii Chirkov</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vagechirkov" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=vagechirkov" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vandit98"><img src="https://avatars.githubusercontent.com/u/91458535?v=4?s=100" width="100px;" alt="Vandit Tyagi"/><br /><sub><b>Vandit Tyagi</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vandit98" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/Vasudeva-bit"><img src="https://avatars.githubusercontent.com/u/70791259?v=4?s=100" width="100px;" alt="Vasudeva Kilaru"/><br /><sub><b>Vasudeva Kilaru</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=Vasudeva-bit" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=Vasudeva-bit" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/vedantag17"><img src="https://avatars.githubusercontent.com/u/118207011?v=4?s=100" width="100px;" alt="Vedant Agrawal"/><br /><sub><b>Vedant Agrawal</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=vedantag17" title="Documentation">📖</a></td>
@@ -368,9 +369,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://github.com/fr1ll"><img src="https://avatars.githubusercontent.com/u/29168593?v=4?s=100" width="100px;" alt="Will Sanger"/><br /><sub><b>Will Sanger</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=fr1ll" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=fr1ll" 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>
@@ -379,9 +380,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/wpdonders"><img src="https://avatars.githubusercontent.com/u/1868824?v=4?s=100?s=100" width="100px;" alt="Wouter Donders"/><br /><sub><b>Wouter Donders</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=wpdonders" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=wpdonders" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/XinyuWuu"><img src="https://avatars.githubusercontent.com/u/57612792?v=4?s=100" width="100px;" alt="Xinyu Wu"/><br /><sub><b>Xinyu Wu</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3AXinyuWuu" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=XinyuWuu" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=XinyuWuu" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/yairbeer"><img src="https://avatars.githubusercontent.com/yairbeer?s=100" width="100px;" alt="Yair Beer"/><br /><sub><b>Yair Beer</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=yairbeer" title="Code">💻</a></td>
-      <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>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://www.linkedin.com/in/yann-hallouard/"><img src="https://avatars.githubusercontent.com/YHallouard?s=100" width="100px;" alt="Yann Hallouard"/><br /><sub><b>Yann Hallouard</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=YHallouard" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=YHallouard" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/MEMEO-PRO"><img src="https://avatars.githubusercontent.com/memeo-pro?s=100" width="100px;" alt="Yash Edake"/><br /><sub><b>Yash Edake</b></sub></a><br /><a href="#maintenance-memeo-pro" title="Maintenance">🚧</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Amemeo-pro" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/YashKhare20"><img src="https://avatars.githubusercontent.com/u/92680366?s=400?s=100" width="100px;" alt="Yash Khare"/><br /><sub><b>Yash Khare</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=YashKhare20" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=YashKhare20" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/yashlamba"><img src="https://avatars.githubusercontent.com/u/44164398?v=4?s=100" width="100px;" alt="Yash Lamba"/><br /><sub><b>Yash Lamba</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=yashlamba" title="Code">💻</a></td>
@@ -390,9 +391,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/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>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/abandus"><img src="https://avatars2.githubusercontent.com/u/46486474?v=4?s=100" width="100px;" alt="abandus"/><br /><sub><b>abandus</b></sub></a><br /><a href="#ideas-abandus" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/commits?author=abandus" title="Code">💻</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/abandus"><img src="https://avatars2.githubusercontent.com/u/46486474?v=4?s=100" width="100px;" alt="abandus"/><br /><sub><b>abandus</b></sub></a><br /><a href="#ideas-abandus" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/commits?author=abandus" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/adoherty21"><img src="https://avatars.githubusercontent.com/u/52799751?s=400&v=4?s=100" width="100px;" alt="adoherty21"/><br /><sub><b>adoherty21</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Aadoherty21" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/bethrice44"><img src="https://avatars.githubusercontent.com/u/11226988?v=4?s=100" width="100px;" alt="bethrice44"/><br /><sub><b>bethrice44</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Abethrice44" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=bethrice44" title="Code">💻</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Abethrice44" title="Reviewed Pull Requests">👀</a> <a href="https://github.com/sktime/sktime/commits?author=bethrice44" title="Tests">⚠️</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/big-o"><img src="https://avatars1.githubusercontent.com/u/1134151?v=4?s=100" width="100px;" alt="big-o"/><br /><sub><b>big-o</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=big-o" title="Code">💻</a> <a href="https://github.com/sktime/sktime/commits?author=big-o" title="Tests">⚠️</a> <a href="#design-big-o" title="Design">🎨</a> <a href="#ideas-big-o" title="Ideas, Planning, & Feedback">🤔</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Abig-o" title="Reviewed Pull Requests">👀</a> <a href="#tutorial-big-o" title="Tutorials">✅</a> <a href="#mentoring-big-o" title="Mentoring">🧑‍🏫</a></td>
@@ -401,9 +402,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/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>
-      <td align="center" valign="top" width="11.11%"><a href="https://github.com/morestart"><img src="https://avatars.githubusercontent.com/u/35556811?s=100" width="100px;" alt="ctl"/><br /><sub><b>ctl</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Amorestart" title="Bug reports">🐛</a></td>
     </tr>
     <tr>
+      <td align="center" valign="top" width="11.11%"><a href="https://github.com/morestart"><img src="https://avatars.githubusercontent.com/u/35556811?s=100" width="100px;" alt="ctl"/><br /><sub><b>ctl</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Amorestart" title="Bug reports">🐛</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/danbartl"><img src="https://avatars.githubusercontent.com/u/19947407?v=4?s=100" width="100px;" alt="danbartl"/><br /><sub><b>danbartl</b></sub></a><br /><a href="https://github.com/sktime/sktime/issues?q=author%3Adanbartl" title="Bug reports">🐛</a> <a href="https://github.com/sktime/sktime/commits?author=danbartl" title="Code">💻</a> <a href="https://github.com/sktime/sktime/pulls?q=is%3Apr+reviewed-by%3Adanbartl" title="Reviewed Pull Requests">👀</a> <a href="#talk-danbartl" title="Talks">📢</a> <a href="https://github.com/sktime/sktime/commits?author=danbartl" title="Tests">⚠️</a> <a href="#tutorial-danbartl" title="Tutorials">✅</a> <a href="#video-danbartl" title="Videos">📹</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hamzahiqb"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=100" width="100px;" alt="hamzahiqb"/><br /><sub><b>hamzahiqb</b></sub></a><br /><a href="#infra-hamzahiqb" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/hiqbal2"><img src="https://avatars3.githubusercontent.com/u/10302415?v=4?s=100" width="100px;" alt="hiqbal2"/><br /><sub><b>hiqbal2</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=hiqbal2" title="Documentation">📖</a></td>
@@ -412,9 +413,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/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>
     </tr>
     <tr>
+      <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>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xloem"><img src="?s=100" width="100px;" alt="patiently pending world peace"/><br /><sub><b>patiently pending world peace</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=xloem" title="Code">💻</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/raishubham1"><img src="https://avatars3.githubusercontent.com/u/29356417?v=4?s=100" width="100px;" alt="raishubham1"/><br /><sub><b>raishubham1</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=raishubham1" title="Documentation">📖</a></td>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/simone-pignotti"><img src="https://avatars1.githubusercontent.com/u/44410066?v=4?s=100" width="100px;" alt="simone-pignotti"/><br /><sub><b>simone-pignotti</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=simone-pignotti" title="Code">💻</a> <a href="https://github.com/sktime/sktime/issues?q=author%3Asimone-pignotti" title="Bug reports">🐛</a></td>
@@ -423,9 +424,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/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>
     </tr>
     <tr>
+      <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>
       <td align="center" valign="top" width="11.11%"><a href="https://github.com/xiaobenbenecho"><img src="https://avatars.githubusercontent.com/u/17461849?v=4?s=100" width="100px;" alt="xiaobenbenecho"/><br /><sub><b>xiaobenbenecho</b></sub></a><br /><a href="https://github.com/sktime/sktime/commits?author=xiaobenbenecho" title="Code">💻</a></td>
     </tr>
   </tbody>
diff --git a/docs/source/get_involved/contributing.rst b/docs/source/get_involved/contributing.rst
index bf66bcdd9..3f8db6307 100644
--- a/docs/source/get_involved/contributing.rst
+++ b/docs/source/get_involved/contributing.rst
@@ -25,7 +25,7 @@ and people who are looking to learn and develop their skills.
 Recommended steps for first time contributors, or to get started with regular contributions:
 
 1. Say hello (in the ``#intro`` channel on `Discord`_)!
-2. Get set up for development, see `instructions in the developer guide :doc:</developer_guide>`.
+2. Get set up for development, see :doc:`instructions in the developer guide </developer_guide>`.
 3. Pick a good first issue to work on, see a collection `in this summary issue <https://github.com/sktime/sktime/issues/1147>`_ , or from `this list <https://github.com/sktime/sktime/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22>`_
    suggestion: pick something small with simple content to learn the "process"
 4. Feel free to attend the regular community collab sessions or one of the topic specific stand-ups and tech sessions (see schedule on `Discord`_)
diff --git a/sktime/datatypes/_series/_convert.py b/sktime/datatypes/_series/_convert.py
index 3171a3f43..ba74aeedf 100644
--- a/sktime/datatypes/_series/_convert.py
+++ b/sktime/datatypes/_series/_convert.py
@@ -93,10 +93,10 @@ def convert_MvS_to_UvS_as_Series(obj: pd.DataFrame, store=None) -> pd.Series:
 
     y = obj[obj.columns[0]]
 
-    if isinstance(store, dict) and "name" in store.keys():
+    if (
+        isinstance(store, dict) and "name" in store.keys()
+    ):  ## column name becomes attr name
         y.name = store["name"]
-    else:
-        y.name = None
 
     return y
 
diff --git a/sktime/forecasting/exp_smoothing.py b/sktime/forecasting/exp_smoothing.py
index f29bf04dd..9e158fcfa 100644
--- a/sktime/forecasting/exp_smoothing.py
+++ b/sktime/forecasting/exp_smoothing.py
@@ -1,6 +1,6 @@
 # !/usr/bin/env python3 -u
 # copyright: sktime developers, BSD-3-Clause License (see LICENSE file)
-"""Implements Holt-Winters exponential smoothing."""
+"""Holt-Winters exponential smoothing forecaster."""
 
 __all__ = ["ExponentialSmoothing"]
 __author__ = ["mloning", "big-o"]
diff --git a/sktime/transformations/panel/rocket/_minirocket.py b/sktime/transformations/panel/rocket/_minirocket.py
index 23dcf733f..d482ea4b5 100644
--- a/sktime/transformations/panel/rocket/_minirocket.py
+++ b/sktime/transformations/panel/rocket/_minirocket.py
@@ -172,3 +172,16 @@ class MiniRocket(BaseTransformer):
         X_ = _transform(X, self.parameters)
         set_num_threads(prev_threads)
         return pd.DataFrame(X_)
+
+    @classmethod
+    def get_test_params(cls, parameter_set="default"):
+        """Return testing parameter sets for the estimator."""
+        return [
+            {"random_state": 0},  # Default Paramters
+            {
+                "num_kernels": 84,
+                "max_dilations_per_kernel": 32,
+                "random_state": 42,
+                "n_jobs": -1,
+            },  # Use a small amount of kernels (but compute on all cores)
+        ]
diff --git a/sktime/utils/dependencies/__init__.py b/sktime/utils/dependencies/__init__.py
index c93048634..0b7848346 100644
--- a/sktime/utils/dependencies/__init__.py
+++ b/sktime/utils/dependencies/__init__.py
@@ -10,6 +10,7 @@ from sktime.utils.dependencies._dependencies import (
 )
 from sktime.utils.dependencies._isinstance import _isinstance_by_name
 from sktime.utils.dependencies._placeholder import _placeholder_record
+from sktime.utils.dependencies._safe_import import _safe_import
 
 __all__ = [
     "_check_dl_dependencies",
@@ -20,4 +21,5 @@ __all__ = [
     "_check_soft_dependencies",
     "_isinstance_by_name",
     "_placeholder_record",
+    "_safe_import",
 ]
diff --git a/sktime/utils/dependencies/_safe_import.py b/sktime/utils/dependencies/_safe_import.py
new file mode 100644
index 000000000..4e477307e
--- /dev/null
+++ b/sktime/utils/dependencies/_safe_import.py
@@ -0,0 +1,77 @@
+"""Import a module/class, return a Mock object if import fails."""
+
+import importlib
+from unittest.mock import MagicMock
+
+from sktime.utils.dependencies import _check_soft_dependencies
+
+
+def _safe_import(import_path, pkg_name=None):
+    """Import a module/class, return a Mock object if import fails.
+
+    The function supports importing both top-level modules and nested attributes:
+    - Top-level module: "torch" -> imports torch
+    - Nested module: "torch.nn" -> imports torch.nn
+    - Class/function: "torch.nn.Linear" -> imports Linear class from torch.nn
+
+    Parameters
+    ----------
+    import_path : str
+        The path to the module/class to import. Can be:
+        - Single module: "torch"
+        - Nested module: "torch.nn"
+        - Class/attribute: "torch.nn.ReLU"
+        Note: The dots in the path determine the import behavior:
+        - No dots: Imports as a single module
+        - One dot: Imports as a submodule
+        - Multiple dots: Last part is treated as an attribute to import
+    pkg_name : str, default=None
+        The name of the package to check for installation. This is useful when
+        the import name differs from the package name, for example:
+        - import: "sklearn" -> pkg_name="scikit-learn"
+        - import: "cv2" -> pkg_name="opencv-python"
+        If None, uses the first part of import_path before the dot.
+
+    Returns
+    -------
+    object
+        One of the following:
+        - The imported module if import_path has no dots
+        - The imported submodule if import_path has one dot
+        - The imported class/function if import_path has multiple dots
+        - A MagicMock object that returns an installation message if the
+          package is not found
+
+    Examples
+    --------
+    >>> # Import a top-level module
+    >>> torch = safe_import("torch")
+
+    >>> # Import a submodule
+    >>> nn = safe_import("torch.nn")
+
+    >>> # Import a specific class
+    >>> Linear = safe_import("torch.nn.Linear")
+
+    >>> # Import with different package name
+    >>> cv2 = safe_import("cv2", pkg_name="opencv-python")
+    """
+    if pkg_name is None:
+        path_list = import_path.split(".")
+        pkg_name = path_list[0]
+
+    if _check_soft_dependencies(pkg_name, severity="none"):
+        try:
+            if len(path_list) == 1:
+                return importlib.import_module(pkg_name)
+            module_name, attr_name = import_path.rsplit(".", 1)
+            module = importlib.import_module(module_name)
+            return getattr(module, attr_name)
+        except (ImportError, AttributeError):
+            return importlib.import_module(import_path)
+    else:
+        mock_obj = MagicMock()
+        mock_obj.__call__ = MagicMock(
+            return_value=f"Please install {pkg_name} to use this functionality."
+        )
+        return mock_obj


Test patch:
diff --git a/sktime/datatypes/tests/test_convert_bugfixes.py b/sktime/datatypes/tests/test_convert_bugfixes.py
index daba5d80b..dfa92f159 100644
--- a/sktime/datatypes/tests/test_convert_bugfixes.py
+++ b/sktime/datatypes/tests/test_convert_bugfixes.py
@@ -1,9 +1,11 @@
 """Tests for specific bugfixes to conversion logic."""
 
-__author__ = ["fkiraly"]
+__author__ = ["fkiraly", "ericjb"]
 
 import pytest
 
+from sktime.datasets import load_airline
+from sktime.datatypes._series._convert import convert_MvS_to_UvS_as_Series
 from sktime.tests.test_switch import run_test_module_changed
 
 
@@ -25,3 +27,12 @@ def test_multiindex_to_df_list_large_level_values():
     X1 = X.loc[:3]
 
     convert_to(X1, "df-list")
+
+
+def test_convert_MvS_to_UvS_as_Series():
+    """Checks that column name in MvS is preserved as attr name in UvS"""
+    y = load_airline()
+    z = y.to_frame()
+    w = convert_MvS_to_UvS_as_Series(z)
+
+    assert y.name == w.name
diff --git a/sktime/tests/_config.py b/sktime/tests/_config.py
index 614a94298..d27e88384 100644
--- a/sktime/tests/_config.py
+++ b/sktime/tests/_config.py
@@ -20,7 +20,6 @@ EXCLUDE_ESTIMATORS = [
     "RandomInvervals",
     "RandomIntervalSegmenter",
     "RandomIntervalFeatureExtractor",
-    "MiniRocket",
     "MatrixProfileTransformer",
     # tapnet based estimators fail stochastically for unknown reasons, see #3525
     "TapNetRegressor",
@@ -259,25 +258,21 @@ EXCLUDED_TESTS = {
 # exclude tests but keyed by test name
 EXCLUDED_TESTS_BY_TEST = {
     "test_get_test_params_coverage": [
-        "Arsenal",
-        "BaggingForecaster",
         "BOSSEnsemble",
+        "CAPA",
         "CNTCClassifier",
         "CNTCNetwork",
         "CNTCRegressor",
         "CanonicalIntervalForest",
+        "CircularBinarySegmentation",
         "ClaSPTransformer",
         "ClearSky",
-        "ClustererPipeline",
-        "ColumnConcatenator",
         "ColumnEnsembleClassifier",
         "ColumnwiseTransformer",
         "ContractableBOSS",
         "DOBIN",
         "DWTTransformer",
-        "DerivativeSlopeTransformer",
         "DilationMappingTransformer",
-        "DirectTabularRegressionForecaster",
         "DirRecTabularRegressionForecaster",
         "DirRecTimeSeriesRegressionForecaster",
         "DirectTimeSeriesRegressionForecaster",
@@ -286,20 +281,14 @@ EXCLUDED_TESTS_BY_TEST = {
         "DontUpdate",
         "DummyRegressor",
         "ElasticEnsemble",
-        "ElbowClassPairwise",
-        "EnbPIForecaster",
         "FeatureSelection",
-        "Filter",
-        "FittedParamExtractor",
-        "ForecastingOptunaSearchCV",
         "FreshPRINCE",
         "GreedyGaussianSegmentation",
         "HCrystalBallAdapter",
         "HIVECOTEV1",
         "HIVECOTEV2",
-        "HOG1DTransformer",
         "Hidalgo",
-        "HolidayFeatures",
+        "HierarchicalProphet",
         "InceptionTimeNetwork",
         "IndividualBOSS",
         "IndividualTDE",
@@ -308,16 +297,18 @@ EXCLUDED_TESTS_BY_TEST = {
         "LTSFLinearForecaster",
         "LTSFNLinearForecaster",
         "LogTransformer",
+        "M5Dataset",
         "MCDCNNClassifier",
         "MCDCNNNetwork",
         "MCDCNNRegressor",
         "MLPNetwork",
         "MUSE",
+        "MVCAPA",
         "MatrixProfile",
         "MatrixProfileTransformer",
-        "MiniRocket",
         "MiniRocketMultivariate",
         "MiniRocketMultivariateVariable",
+        "MovingWindow",
         "MultiRocket",
         "MultioutputTabularRegressionForecaster",
         "MultioutputTimeSeriesRegressionForecaster",
@@ -326,15 +317,12 @@ EXCLUDED_TESTS_BY_TEST = {
         "PAA",
         "PAAlegacy",
         "PCATransformer",
+        "PELT",
         "PaddingTransformer",
-        "ParamFitterPipeline",
         "PlateauFinder",
-        "PluginParamsForecaster",
-        "PluginParamsTransformer",
         "Prophet",
         "ProphetPiecewiseLinearTrendForecaster",
         "Prophetverse",
-        "HierarchicalProphet",
         "RandomIntervalClassifier",
         "RandomIntervalFeatureExtractor",
         "RandomIntervalSegmenter",
@@ -345,12 +333,12 @@ EXCLUDED_TESTS_BY_TEST = {
         "RecursiveTabularRegressionForecaster",
         "RecursiveTimeSeriesRegressionForecaster",
         "ReducerTransform",
-        "RegressorPipeline",
         "Rocket",
         "SAX",
         "SAXlegacy",
         "SFA",
         "SFAFast",
+        "SeededBinarySegmentation",
         "ShapeletTransform",
         "ShapeletTransformClassifier",
         "SignatureClassifier",
@@ -358,30 +346,44 @@ EXCLUDED_TESTS_BY_TEST = {
         "SlidingWindowSegmenter",
         "SlopeTransformer",
         "StackingForecaster",
+        "StatThresholdAnomaliser",
         "SummaryClassifier",
-        "SupervisedIntervals",
         "SupervisedTimeSeriesForest",
         "TEASER",
-        "TSBootstrapAdapter",
         "TSFreshClassifier",
-        "Tabularizer",
         "TapNetNetwork",
         "TemporalDictionaryEnsemble",
-        "ThetaLinesTransformer",
         "TimeBinner",
         "TimeSeriesForestClassifier",
         "TimeSeriesForestRegressor",
         "TimeSeriesKMedoids",
         "TimeSeriesKernelKMeans",
-        "ThetaModularForecaster",
         "TruncationTransformer",
         "UnobservedComponents",
         "WEASEL",
-        "WeightedEnsembleClassifier",
         "WhiteNoiseAugmenter",
     ]
 }
 
+# estimators that have 2 test params only when their soft dependency is installed
+EXCLUDE_SOFT_DEPS = [
+    "BaggingForecaster",
+    "ClustererPipeline",
+    "DirectTabularRegressionForecaster",
+    "EnbPIForecaster",
+    "FittedParamExtractor",
+    "ForecastingOptunaSearchCV",
+    "HolidayFeatures",
+    "ParamFitterPipeline",
+    "PluginParamsForecaster",
+    "PluginParamsTransformer",
+    "RegressorPipeline",
+    "SupervisedIntervals",
+    "TSBootstrapAdapter",
+    "ThetaModularForecaster",
+    "WeightedEnsembleClassifier",
+]
+
 # add EXCLUDED_TESTS_BY_TEST to EXCLUDED_TESTS
 # the latter is the single source of truth
 for k, v in EXCLUDED_TESTS_BY_TEST.items():
diff --git a/sktime/tests/tests/test_test_utils.py b/sktime/tests/tests/test_test_utils.py
index b783671a5..cd5082dcb 100644
--- a/sktime/tests/tests/test_test_utils.py
+++ b/sktime/tests/tests/test_test_utils.py
@@ -1,10 +1,43 @@
 """Tests for the test utilities."""
 
-from sktime.tests._config import EXCLUDE_ESTIMATORS
+from sktime.registry import all_estimators
+from sktime.tests._config import (
+    EXCLUDE_ESTIMATORS,
+    EXCLUDE_SOFT_DEPS,
+    EXCLUDED_TESTS_BY_TEST,
+)
 from sktime.tests.test_switch import run_test_for_class
 from sktime.utils.dependencies import _check_estimator_deps
 
 
+def test_excluded_tests_by_test():
+    """Test that EXCLUDED_TESTS_BY_TEST contains estimators with <2 test params."""
+    all_ests = all_estimators()
+    filtered_estimators = [
+        x[0]
+        for x in all_ests
+        if (
+            (
+                len(x[1].get_test_params()) < 2
+                or isinstance(x[1].get_test_params(), dict)
+            )
+            and (
+                len(x[1].get_param_names())
+                - len(x[1].get_class_tags().get("reserved_params", []))
+                > 0
+            )
+        )
+    ]
+    excluded_estimators = EXCLUDED_TESTS_BY_TEST["test_get_test_params_coverage"]
+    assert set(excluded_estimators) - set(EXCLUDE_SOFT_DEPS) == set(
+        filtered_estimators
+    ) - set(EXCLUDE_SOFT_DEPS), (
+        "Assertion failed: The sets of excluded and filtered estimators "
+        "do not match. Please remove the estimator you have added "
+        "test parameters to from EXCLUDED_TESTS_BY_TEST or EXCLUDE_SOFT_DEPS."
+    )
+
+
 def test_exclude_estimators():
     """Test that EXCLUDE_ESTIMATORS is a list of strings."""
     assert isinstance(EXCLUDE_ESTIMATORS, list)