code: def test_reconcilerforecaster_exog(n_columns):
      """Test that ReconcilerForecaster works without aggregated input, see #3980."""
      from sktime.datatypes._utilities import get_window
      from sktime.forecasting.reconcile import ReconcilerForecaster
      from sktime.forecasting.sarimax import SARIMAX
  
      y = _make_hierarchical(
          hierarchy_levels=(2, 3),
          n_columns=n_columns,
          min_timepoints=12,
          max_timepoints=12,
          index_type="period",
      )
      y_train = get_window(y, lag=2)
      y_test = get_window(y, window_length=2)
  
      X = _make_hierarchical(
          hierarchy_levels=(2, 3),
          n_columns=2,
          min_timepoints=12,
          max_timepoints=12,
          index_type="period",
      )
      X.columns = ["foo", "bar"]
      X_train = get_window(X, lag=2)
      X_test = get_window(X, window_length=2)
  
      forecaster = SARIMAX()
      estimator_instance = ReconcilerForecaster(
          forecaster, method="mint_shrink"
      )
      fh = [1, 2]
      estimator_instance.fit(y=y_train, X=X_train, fh=fh)
      estimator_instance.predict(X=X_test)
      estimator_instance.update(y=y_test, X=X_test)
  
file_path: sktime/sktime/forecasting/tests/test_reconcile.py
imports: import numpy
  import pytest
  from pandas.testing import assert_frame_equal
  from sktime.forecasting.base import ForecastingHorizon
  from sktime.forecasting.exp_smoothing import ExponentialSmoothing
  from sktime.forecasting.reconcile import ReconcilerForecaster
  from sktime.tests.test_switch import run_test_for_class
  from sktime.transformations.hierarchical.aggregate import Aggregator
  from sktime.utils._testing.hierarchical import _bottom_hier_datagen, _make_hierarchical
  from sktime.utils.validation._dependencies import _check_soft_dependencies
label_desc: Use image node_id 2 for calling a global function with example usage: test_reconcilerforecaster_exog(n_columns) without return types