code: def _fit(
      self,
      train_data: TimeSeriesDataFrame,
      val_data: Optional[TimeSeriesDataFrame] = None,
      time_limit: Optional[int] = None,
      verbosity: int = 2,
      **kwargs,
  ) -> None:
      from mlforecast import MLForecast
  
      self._check_fit_params()
      set_logger_verbosity(verbosity, logger=logger)
      fit_start_time = time.time()
      # TabularEstimator is passed to MLForecast later to include tuning_data
      model_params = self._get_model_params()
  
      mlforecast_init_args = self._get_mlforecast_init_args(
          train_data, model_params
      )
      self._mlf = MLForecast(
          models={}, freq=self.freq, **mlforecast_init_args
      )
  
      # We generate train/val splits from train_data and ignore val_data to avoid overfitting
      train_df, val_df = self._generate_train_val_dfs(
          train_data,
          max_num_items=model_params["max_num_items"],
          max_num_samples=model_params["max_num_samples"],
      )
  
      estimator = TabularEstimator(
          predictor_init_kwargs={
              "path": os.path.join(self.path, "tabular_predictor"),
              "verbosity": verbosity - 2,
              "label": MLF_TARGET,
              **self._get_extra_tabular_init_kwargs(),
          },
          predictor_fit_kwargs={
              "tuning_data": val_df.drop(columns=[MLF_ITEMID]),
              "time_limit": None
              if time_limit is None
              else time_limit - (time.time() - fit_start_time),
              "hyperparameters": model_params[
                  "tabular_hyperparameters"
              ],
              **model_params["tabular_fit_kwargs"],
          },
      )
      self._mlf.models = {"mean": estimator}
  
      with warning_filter():
          self._mlf.fit_models(
              X=train_df.drop(columns=[MLF_TARGET, MLF_ITEMID]),
              y=train_df[MLF_TARGET],
          )
  
      self._save_residuals_std(val_df)
  
imports: import logging
  import math
  import os
  import time
  from typing import Any, Dict, List, Optional, Tuple
  import numpy
  import pandas
  from sklearn.base import BaseEstimator
  import autogluon.core
  from autogluon.common.utils.log_utils import set_logger_verbosity
  from autogluon.tabular import TabularPredictor
  from autogluon.timeseries.dataset.ts_dataframe import ITEMID, TIMESTAMP, TimeSeriesDataFrame
  from autogluon.timeseries.models.abstract import AbstractTimeSeriesModel
  from autogluon.timeseries.models.local import SeasonalNaiveModel
  from autogluon.timeseries.utils.datetime import get_lags_for_frequency, get_seasonality, get_time_features_for_frequency
  from autogluon.timeseries.utils.forecast import get_forecast_horizon_index_ts_dataframe
  from autogluon.timeseries.utils.warning_filters import warning_filter
label_desc: Use image node_id 9 for calling the AbstractMLForecastModel obj's underlying member method code with example usage: obj._fit(train_data, val_data, time_limit, verbosity) without return types