docs: def fit(self, X, y, groups=None, **fit_params):
          # type: (...) -> PermutationImportance
          """Compute ``feature_importances_`` attribute and optionally
          fit the base estimator.
  
          Parameters
          ----------
          X : array-like of shape (n_samples, n_features)
              The training input samples.
  
          y : array-like, shape (n_samples,)
              The target values (integers that correspond to classes in
              classification, real numbers in regression).
  
          groups : array-like, with shape (n_samples,), optional
              Group labels for the samples used while splitting the dataset into
              train/test set.
  
          **fit_params : Other estimator specific parameters
  
          Returns
          -------
          self : object
              Returns self.
          """
          self.scorer_ = check_scoring(self.estimator, scoring=self.scoring)
  
          if pandas_available and isinstance(X, pd.DataFrame):
              self.scorer_ = self._wrap_scorer(self.scorer_, X.columns)
  
          if self.cv != "prefit" and self.refit:
              self.estimator_ = clone(self.estimator)
              self.estimator_.fit(X, y, **fit_params)
  
          X = check_array(X)
  
          if self.cv not in (None, "prefit"):
              si = self._cv_scores_importances(X, y, groups=groups, **fit_params)
          else:
              si = self._non_cv_scores_importances(X, y)
          scores, results = si
          self.scores_ = np.array(scores)
          self.results_ = results
          self.feature_importances_ = np.mean(results, axis=0)
          self.feature_importances_std_ = np.std(results, axis=0)
          return self