class_docstr: A meta-model that trains the base model multiple times using different train/validation splits.
  
  Follows the logic of autogluon.core.models.ensembles.BaggedEnsembleModel.
  
  Parameters
  ----------
  model_base : Union[AbstractTimeSeriesModel, Type[AbstractTimeSeriesModel]]
      The base model to repeatedly train. If a AbstractTimeSeriesModel class, then also provide model_base_kwargs
      which will be used to initialize the model via model_base(**model_base_kwargs).
  model_base_kwargs : Optional[Dict[str, any]], default = None
      kwargs used to initialize model_base if model_base is a class.
class_docstr_tok: ["A","meta-model","that","trains","the","base","model","multiple","times","using","different","train\/validation","splits",".","Follows","the","logic","of","autogluon.core.models.ensembles.BaggedEnsembleModel",".","Parameters","--","--","--","--","--","model_base",":","Union","[","AbstractTimeSeriesModel",",","Type","[","AbstractTimeSeriesModel","]","]","The","base","model","to","repeatedly","train",".","If","a","AbstractTimeSeriesModel","class",",","then","also","provide","model_base_kwargs","which","will","be","used","to","initialize","the","model","via","model_base","(","*","*","model_base_kwargs",")",".","model_base_kwargs",":","Optional","[","Dict","[","str",",","any","]","]",",","default","=","None","kwargs","used","to","initialize","model_base","if","model_base","is","a","class","."]
code: def __init__(
      self,
      model_base: Union[
          AbstractTimeSeriesModel, Type[AbstractTimeSeriesModel]
      ],
      model_base_kwargs: Optional[Dict[str, any]] = None,
      **kwargs,
  ):
      if inspect.isclass(model_base) and issubclass(
          model_base, AbstractTimeSeriesModel
      ):
          if model_base_kwargs is None:
              model_base_kwargs = dict()
          self.model_base: AbstractTimeSeriesModel = model_base(
              **model_base_kwargs
          )
      elif model_base_kwargs is not None:
          raise AssertionError(
              f"model_base_kwargs must be None if model_base was passed as an object! "
              f"(model_base: {model_base}, model_base_kwargs: {model_base_kwargs})"
          )
      elif isinstance(model_base, AbstractTimeSeriesModel):
          self.model_base: AbstractTimeSeriesModel = model_base
      else:
          raise AssertionError(
              f"model_base must be an instance of AbstractTimeSeriesModel (got {type(model_base)})"
          )
      self.model_base_type = type(self.model_base)
      self.info_per_val_window = []
  
      self.most_recent_model: AbstractTimeSeriesModel = None
      self.most_recent_model_folder: Optional[str] = None
      super().__init__(**kwargs)
  
imports: import copy
  import inspect
  import logging
  import math
  import os
  import time
  from typing import Dict, Optional, Type, Union
  import numpy
  import autogluon.core
  from autogluon.common.utils.log_utils import set_logger_verbosity
  from autogluon.timeseries.dataset.ts_dataframe import TimeSeriesDataFrame
  from autogluon.timeseries.models.abstract import AbstractTimeSeriesModel
  from autogluon.timeseries.models.local.abstract_local_model import AbstractLocalModel
  from autogluon.timeseries.splitter import AbstractWindowSplitter, ExpandingWindowSplitter
label_desc: Use image node_id 1 to create a new MultiWindowBacktestingModel object from inherited base classes: AbstractTimeSeriesModel with example: obj = MultiWindowBacktestingModel(model_base, model_base_kwargs)