prompt: 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()
  
  ```
  
golden_diff: 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
  
verification_info: {"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"}]}