We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
`sktime` missing dependency
In requirements.txt
`sktime[arima] >= 0.5.0`
bat 
`(mindsdb) C:\Users\User>pip install sktime[arima]>=0.5.0
WARNING: sktime 0.7.0 does not provide the extra 'arima'`
install
`(mindsdb) C:\Users\User>pip install sktime[arima]==0.5.0`
`sktime` missing dependency
In requirements.txt
`sktime[arima] >= 0.5.0`
bat 
`(mindsdb) C:\Users\User>pip install sktime[arima]>=0.5.0
WARNING: sktime 0.7.0 does not provide the extra 'arima'`
install
`(mindsdb) C:\Users\User>pip install sktime[arima]==0.5.0`

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `lightwood/model/sktime.py`
Content:
```
1 import numpy as np
2 import pandas as pd
3 from typing import Dict, List, Union
4 from sktime.forecasting.arima import AutoARIMA
5 
6 from lightwood.api import dtype
7 from lightwood.helpers.log import log
8 from lightwood.model.base import BaseModel
9 from lightwood.encoder.time_series.helpers.common import get_group_matches
10 from lightwood.data.encoded_ds import EncodedDs, ConcatedEncodedDs
11 
12 
13 class SkTime(BaseModel):
14     forecaster: str
15     n_ts_predictions: int
16     target: str
17     supports_proba: bool
18 
19     def __init__(
20             self, stop_after: int, target: str, dtype_dict: Dict[str, str],
21             n_ts_predictions: int, ts_analysis: Dict):
22         super().__init__(stop_after)
23         self.target = target
24         dtype_dict[target] = dtype.float
25         self.model_class = AutoARIMA
26         self.models = {}
27         self.n_ts_predictions = n_ts_predictions
28         self.ts_analysis = ts_analysis
29         self.forecasting_horizon = np.arange(1, self.n_ts_predictions)
30         self.cutoff_index = {}  # marks index at which training data stops and forecasting window starts
31         self.grouped_by = ['__default'] if not ts_analysis['tss'].group_by else ts_analysis['tss'].group_by
32         self.supports_proba = False
33         self.stable = True
34 
35     def fit(self, ds_arr: List[EncodedDs]) -> None:
36         log.info('Started fitting sktime forecaster for array prediction')
37 
38         all_folds = ConcatedEncodedDs(ds_arr)
39         df = all_folds.data_frame.sort_values(by=f'__mdb_original_{self.ts_analysis["tss"].order_by[0]}')
40         data = {'data': df[self.target],
41                 'group_info': {gcol: df[gcol].tolist()
42                                for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}
43 
44         for group in self.ts_analysis['group_combinations']:
45             self.models[group] = self.model_class()
46 
47             if self.grouped_by == ['__default']:
48                 series_idxs = data['data'].index
49                 series_data = data['data'].values
50             else:
51                 series_idxs, series_data = get_group_matches(data, group)
52 
53             if series_data.size > 0:
54                 series = pd.Series(series_data.squeeze(), index=series_idxs)
55                 series = series.sort_index(ascending=True)
56                 series = series.reset_index(drop=True)
57                 try:
58                     self.models[group].fit(series)
59                 except ValueError:
60                     self.models[group] = self.model_class(deseasonalize=False)
61                     self.models[group].fit(series)
62 
63                 self.cutoff_index[group] = len(series)
64 
65             if self.grouped_by == ['__default']:
66                 break
67 
68     def __call__(self, ds: Union[EncodedDs, ConcatedEncodedDs], predict_proba: bool = False) -> pd.DataFrame:
69         if predict_proba:
70             log.warning('This model does not output probability estimates')
71 
72         length = sum(ds.encoded_ds_lenghts) if isinstance(ds, ConcatedEncodedDs) else len(ds)
73         ydf = pd.DataFrame(0,  # zero-filled
74                            index=np.arange(length),
75                            columns=['prediction'],
76                            dtype=object)
77 
78         data = {'data': ds.data_frame[self.target].reset_index(drop=True),
79                 'group_info': {gcol: ds.data_frame[gcol].tolist()
80                                for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}
81 
82         # all_idxs = list(range(length))  # @TODO: substract, and assign empty predictions to remainder
83 
84         for group in self.ts_analysis['group_combinations']:
85 
86             if self.grouped_by == ['__default']:
87                 series_idxs = data['data'].index
88                 series_data = data['data'].values
89             else:
90                 series_idxs, series_data = get_group_matches(data, group)
91 
92             if series_data.size > 0:
93                 series = pd.Series(series_data.squeeze(), index=series_idxs)
94                 series = series.sort_index(ascending=True)
95                 series = series.reset_index(drop=True)
96 
97                 for idx, _ in enumerate(series.iteritems()):
98                     ydf['prediction'].iloc[series_idxs[idx]] = self.models[group].predict(
99                         np.arange(idx,  # +cutoff
100                                   idx + self.n_ts_predictions)).tolist()  # +cutoff
101 
102             if self.grouped_by == ['__default']:
103                 break
104 
105         return ydf[['prediction']]
106
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/lightwood/model/sktime.py b/lightwood/model/sktime.py
--- a/lightwood/model/sktime.py
+++ b/lightwood/model/sktime.py
@@ -42,7 +42,8 @@
                                for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}
 
         for group in self.ts_analysis['group_combinations']:
-            self.models[group] = self.model_class()
+            # many warnings might be thrown inside of statsmodels during stepwise procedure
+            self.models[group] = self.model_class(suppress_warnings=True)
 
             if self.grouped_by == ['__default']:
                 series_idxs = data['data'].index

{"golden_diff": "diff --git a/lightwood/model/sktime.py b/lightwood/model/sktime.py\n--- a/lightwood/model/sktime.py\n+++ b/lightwood/model/sktime.py\n@@ -42,7 +42,8 @@\n                                for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}\n \n         for group in self.ts_analysis['group_combinations']:\n-            self.models[group] = self.model_class()\n+            # many warnings might be thrown inside of statsmodels during stepwise procedure\n+            self.models[group] = self.model_class(suppress_warnings=True)\n \n             if self.grouped_by == ['__default']:\n                 series_idxs = data['data'].index\n", "issue": "`sktime` missing dependency\nIn requirements.txt\r\n`sktime[arima] >= 0.5.0`\r\nbat \r\n`(mindsdb) C:\\Users\\User>pip install sktime[arima]>=0.5.0\r\nWARNING: sktime 0.7.0 does not provide the extra 'arima'`\r\ninstall\r\n`(mindsdb) C:\\Users\\User>pip install sktime[arima]==0.5.0`\n`sktime` missing dependency\nIn requirements.txt\r\n`sktime[arima] >= 0.5.0`\r\nbat \r\n`(mindsdb) C:\\Users\\User>pip install sktime[arima]>=0.5.0\r\nWARNING: sktime 0.7.0 does not provide the extra 'arima'`\r\ninstall\r\n`(mindsdb) C:\\Users\\User>pip install sktime[arima]==0.5.0`\n", "before_files": [{"content": "import numpy as np\nimport pandas as pd\nfrom typing import Dict, List, Union\nfrom sktime.forecasting.arima import AutoARIMA\n\nfrom lightwood.api import dtype\nfrom lightwood.helpers.log import log\nfrom lightwood.model.base import BaseModel\nfrom lightwood.encoder.time_series.helpers.common import get_group_matches\nfrom lightwood.data.encoded_ds import EncodedDs, ConcatedEncodedDs\n\n\nclass SkTime(BaseModel):\n    forecaster: str\n    n_ts_predictions: int\n    target: str\n    supports_proba: bool\n\n    def __init__(\n            self, stop_after: int, target: str, dtype_dict: Dict[str, str],\n            n_ts_predictions: int, ts_analysis: Dict):\n        super().__init__(stop_after)\n        self.target = target\n        dtype_dict[target] = dtype.float\n        self.model_class = AutoARIMA\n        self.models = {}\n        self.n_ts_predictions = n_ts_predictions\n        self.ts_analysis = ts_analysis\n        self.forecasting_horizon = np.arange(1, self.n_ts_predictions)\n        self.cutoff_index = {}  # marks index at which training data stops and forecasting window starts\n        self.grouped_by = ['__default'] if not ts_analysis['tss'].group_by else ts_analysis['tss'].group_by\n        self.supports_proba = False\n        self.stable = True\n\n    def fit(self, ds_arr: List[EncodedDs]) -> None:\n        log.info('Started fitting sktime forecaster for array prediction')\n\n        all_folds = ConcatedEncodedDs(ds_arr)\n        df = all_folds.data_frame.sort_values(by=f'__mdb_original_{self.ts_analysis[\"tss\"].order_by[0]}')\n        data = {'data': df[self.target],\n                'group_info': {gcol: df[gcol].tolist()\n                               for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}\n\n        for group in self.ts_analysis['group_combinations']:\n            self.models[group] = self.model_class()\n\n            if self.grouped_by == ['__default']:\n                series_idxs = data['data'].index\n                series_data = data['data'].values\n            else:\n                series_idxs, series_data = get_group_matches(data, group)\n\n            if series_data.size > 0:\n                series = pd.Series(series_data.squeeze(), index=series_idxs)\n                series = series.sort_index(ascending=True)\n                series = series.reset_index(drop=True)\n                try:\n                    self.models[group].fit(series)\n                except ValueError:\n                    self.models[group] = self.model_class(deseasonalize=False)\n                    self.models[group].fit(series)\n\n                self.cutoff_index[group] = len(series)\n\n            if self.grouped_by == ['__default']:\n                break\n\n    def __call__(self, ds: Union[EncodedDs, ConcatedEncodedDs], predict_proba: bool = False) -> pd.DataFrame:\n        if predict_proba:\n            log.warning('This model does not output probability estimates')\n\n        length = sum(ds.encoded_ds_lenghts) if isinstance(ds, ConcatedEncodedDs) else len(ds)\n        ydf = pd.DataFrame(0,  # zero-filled\n                           index=np.arange(length),\n                           columns=['prediction'],\n                           dtype=object)\n\n        data = {'data': ds.data_frame[self.target].reset_index(drop=True),\n                'group_info': {gcol: ds.data_frame[gcol].tolist()\n                               for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}\n\n        # all_idxs = list(range(length))  # @TODO: substract, and assign empty predictions to remainder\n\n        for group in self.ts_analysis['group_combinations']:\n\n            if self.grouped_by == ['__default']:\n                series_idxs = data['data'].index\n                series_data = data['data'].values\n            else:\n                series_idxs, series_data = get_group_matches(data, group)\n\n            if series_data.size > 0:\n                series = pd.Series(series_data.squeeze(), index=series_idxs)\n                series = series.sort_index(ascending=True)\n                series = series.reset_index(drop=True)\n\n                for idx, _ in enumerate(series.iteritems()):\n                    ydf['prediction'].iloc[series_idxs[idx]] = self.models[group].predict(\n                        np.arange(idx,  # +cutoff\n                                  idx + self.n_ts_predictions)).tolist()  # +cutoff\n\n            if self.grouped_by == ['__default']:\n                break\n\n        return ydf[['prediction']]\n", "path": "lightwood/model/sktime.py"}], "after_files": [{"content": "import numpy as np\nimport pandas as pd\nfrom typing import Dict, List, Union\nfrom sktime.forecasting.arima import AutoARIMA\n\nfrom lightwood.api import dtype\nfrom lightwood.helpers.log import log\nfrom lightwood.model.base import BaseModel\nfrom lightwood.encoder.time_series.helpers.common import get_group_matches\nfrom lightwood.data.encoded_ds import EncodedDs, ConcatedEncodedDs\n\n\nclass SkTime(BaseModel):\n    forecaster: str\n    n_ts_predictions: int\n    target: str\n    supports_proba: bool\n\n    def __init__(\n            self, stop_after: int, target: str, dtype_dict: Dict[str, str],\n            n_ts_predictions: int, ts_analysis: Dict):\n        super().__init__(stop_after)\n        self.target = target\n        dtype_dict[target] = dtype.float\n        self.model_class = AutoARIMA\n        self.models = {}\n        self.n_ts_predictions = n_ts_predictions\n        self.ts_analysis = ts_analysis\n        self.forecasting_horizon = np.arange(1, self.n_ts_predictions)\n        self.cutoff_index = {}  # marks index at which training data stops and forecasting window starts\n        self.grouped_by = ['__default'] if not ts_analysis['tss'].group_by else ts_analysis['tss'].group_by\n        self.supports_proba = False\n        self.stable = True\n\n    def fit(self, ds_arr: List[EncodedDs]) -> None:\n        log.info('Started fitting sktime forecaster for array prediction')\n\n        all_folds = ConcatedEncodedDs(ds_arr)\n        df = all_folds.data_frame.sort_values(by=f'__mdb_original_{self.ts_analysis[\"tss\"].order_by[0]}')\n        data = {'data': df[self.target],\n                'group_info': {gcol: df[gcol].tolist()\n                               for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}\n\n        for group in self.ts_analysis['group_combinations']:\n            # many warnings might be thrown inside of statsmodels during stepwise procedure\n            self.models[group] = self.model_class(suppress_warnings=True)\n\n            if self.grouped_by == ['__default']:\n                series_idxs = data['data'].index\n                series_data = data['data'].values\n            else:\n                series_idxs, series_data = get_group_matches(data, group)\n\n            if series_data.size > 0:\n                series = pd.Series(series_data.squeeze(), index=series_idxs)\n                series = series.sort_index(ascending=True)\n                series = series.reset_index(drop=True)\n                try:\n                    self.models[group].fit(series)\n                except ValueError:\n                    self.models[group] = self.model_class(deseasonalize=False)\n                    self.models[group].fit(series)\n\n                self.cutoff_index[group] = len(series)\n\n            if self.grouped_by == ['__default']:\n                break\n\n    def __call__(self, ds: Union[EncodedDs, ConcatedEncodedDs], predict_proba: bool = False) -> pd.DataFrame:\n        if predict_proba:\n            log.warning('This model does not output probability estimates')\n\n        length = sum(ds.encoded_ds_lenghts) if isinstance(ds, ConcatedEncodedDs) else len(ds)\n        ydf = pd.DataFrame(0,  # zero-filled\n                           index=np.arange(length),\n                           columns=['prediction'],\n                           dtype=object)\n\n        data = {'data': ds.data_frame[self.target].reset_index(drop=True),\n                'group_info': {gcol: ds.data_frame[gcol].tolist()\n                               for gcol in self.grouped_by} if self.ts_analysis['tss'].group_by else {}}\n\n        # all_idxs = list(range(length))  # @TODO: substract, and assign empty predictions to remainder\n\n        for group in self.ts_analysis['group_combinations']:\n\n            if self.grouped_by == ['__default']:\n                series_idxs = data['data'].index\n                series_data = data['data'].values\n            else:\n                series_idxs, series_data = get_group_matches(data, group)\n\n            if series_data.size > 0:\n                series = pd.Series(series_data.squeeze(), index=series_idxs)\n                series = series.sort_index(ascending=True)\n                series = series.reset_index(drop=True)\n\n                for idx, _ in enumerate(series.iteritems()):\n                    ydf['prediction'].iloc[series_idxs[idx]] = self.models[group].predict(\n                        np.arange(idx,  # +cutoff\n                                  idx + self.n_ts_predictions)).tolist()  # +cutoff\n\n            if self.grouped_by == ['__default']:\n                break\n\n        return ydf[['prediction']]\n", "path": "lightwood/model/sktime.py"}]}