Repository: sktime/sktime

Issue:
[BUG] EnsembleForecaster fails to fit with exogenous data on hierarchical data
**Describe the bug**
After upgrading sktime from version 0.12 to 0.14 the fitting of an EnsembleForecaster on a hierarchical dataset fails when receiving exogenous data. 
Without exogeneous data the fitting works without problems. 
It fails with exogeneous data if the models are using the exogeneous data or not. 

**To Reproduce**
```python
import pandas as pd

from sktime.utils._testing.hierarchical import _make_hierarchical
from sktime.forecasting.compose import EnsembleForecaster
from sktime.forecasting.naive import NaiveForecaster
from sktime.forecasting.trend import PolynomialTrendForecaster

data = _make_hierarchical(
    hierarchy_levels = (2, 4),
    n_columns = 2,
    min_timepoints = 38,
    max_timepoints = 38, 
    index_type = "period",
)

target_col = "c0"
y_train = data.loc[:, [target_col]]
X_train =  data.drop(columns=[target_col])

forecasters = [    
    ("trend", PolynomialTrendForecaster()),
    ("naive", NaiveForecaster(strategy="last", sp=12)),
]
forecaster = EnsembleForecaster(forecasters=forecasters)

forecaster.fit(y=y_train, X=X_train)
```
![image](https://user-images.githubusercontent.com/16029092/208664020-95342334-997a-4993-9bb9-cf639dce546f.png)

**Expected behavior**
The EnsembleForecaster works also with exogenous data. 

**Additional context**
None

**Versions**
System:
    python: 3.8.13 (default, Mar 28 2022, 11:38:47)  [GCC 7.5.0]
executable: /anaconda/envs/.../bin/python
   machine: Linux-5.15.0-1022-azure-x86_64-with-glibc2.17

Python dependencies:
          pip: 22.1.2
   setuptools: 65.5.0
      sklearn: 1.1.1
       sktime: 0.14.0
  statsmodels: 0.13.2
        numpy: 1.21.5
        scipy: 1.7.3
       pandas: 1.4.4
   matplotlib: 3.6.2
       joblib: 1.1.0
        numba: 0.56.4
     pmdarima: None
      tsfresh: None




Discussion:

Resolving patch:
diff --git a/sktime/forecasting/compose/_ensemble.py b/sktime/forecasting/compose/_ensemble.py
--- a/sktime/forecasting/compose/_ensemble.py
+++ b/sktime/forecasting/compose/_ensemble.py
@@ -304,6 +304,7 @@ class EnsembleForecaster(_HeterogenousEnsembleForecaster):
         "ignores-exogeneous-X": False,
         "requires-fh-in-fit": False,
         "handles-missing-data": False,
+        "X_inner_mtype": ["pd.DataFrame", "pd-multiindex", "pd_multiindex_hier"],
         "y_inner_mtype": ["pd.DataFrame", "pd-multiindex", "pd_multiindex_hier"],
         "scitype:y": "both",
     }
@@ -322,12 +323,12 @@ def _fit(self, y, X=None, fh=None):
 
         Parameters
         ----------
-        y : pd.Series
+        y : pd.DataFrame - Series, Panel, or Hierarchical mtype format.
             Target time series to which to fit the forecaster.
-        fh : int, list or np.array, optional, default=None
+        fh : ForecastingHorizon, optional, default=None
             The forecasters horizon with the steps ahead to to predict.
-        X : pd.DataFrame, optional, default=None
-            Exogenous variables are ignored.
+        X : pd.DataFrame, optional, default=None, must be of same mtype as y
+            Exogenous data to which to fit the forecaster.
 
         Returns
         -------
@@ -342,13 +343,15 @@ def _predict(self, fh, X=None):
 
         Parameters
         ----------
-        fh : int, list or np.array, optional, default=None
-        X : pd.DataFrame
+        fh : ForecastingHorizon, optional, default=None
+        X : pd.DataFrame, optional, default=None, must be of same mtype as y
+            Exogenous data to which to fit the forecaster.
 
         Returns
         -------
-        y_pred : pd.Series
-            Aggregated predictions.
+        y_pred : pd.DataFrame - Series, Panel, or Hierarchical mtype format,
+            will be of same mtype as y in _fit
+            Ensembled predictions
         """
         names, _ = self._check_forecasters()
         y_pred = pd.concat(self._predict_forecasters(fh, X), axis=1, keys=names)


Test patch: