code: def _fit(
      self,
      X,
      y,
      X_val=None,
      y_val=None,
      time_limit=None,
      sample_weight=None,
      **kwargs,
  ):
      params = self._get_model_params()
      if self.model is None:
          X = self.preprocess(X)
          self.model = self.model_base(
              problem_type=self.problem_type,
              quantile_levels=self.quantile_levels,
              metric=self.stopping_metric,
              **params,
          )
          self.model = self.model.fit(
              X, y, time_limit=time_limit, sample_weight=sample_weight
          )
          (
              self.base_model_names,
              self.model.weights_,
          ) = self.remove_zero_weight_models(
              self.base_model_names, self.model.weights_
          )
      self.features = self._set_stack_columns(
          base_model_names=self.base_model_names
      )
      self.params_trained["ensemble_size"] = self.model.ensemble_size
      self.weights_ = self.model.weights_
  
imports: import logging
  from autogluon.common.features.types import S_STACK
  from ...constants import MULTICLASS, QUANTILE, SOFTCLASS
  from ..abstract.abstract_model import AbstractModel
  from .ensemble_selection import EnsembleSelection, SimpleWeightedEnsemble
label_desc: Use image node_id 6 for calling the GreedyWeightedEnsembleModel obj's underlying member method code with example usage: obj._fit(X, y, X_val, y_val, time_limit, sample_weight) without return types