code: def stack(self, k=5, stratify=False, shuffle=True, seed=100, full_test=True, add_diff=False):
          
          result_train = []
          result_test = []
          y = None
  
          for model in self.models:
              result = model.stack(k=k, stratify=stratify, shuffle=shuffle, seed=seed, full_test=full_test)
              train_df = pd.DataFrame(result.X_train, columns=generate_columns(result.X_train, model.name))
              test_df = pd.DataFrame(result.X_test, columns=generate_columns(result.X_test, model.name))
  
              result_train.append(train_df)
              result_test.append(test_df)
              if y is None:
                  y = result.y_train
          result_train = pd.concat(result_train, axis=1)
          result_test = pd.concat(result_test, axis=1)
  
          if add_diff:
              result_train = feature_combiner(result_train)
              result_test = feature_combiner(result_test)
  
          ds = Dataset(X_train=result_train, y_train=y, X_test=result_test)
  
          return ds
docs: Stacks sequence of models.
  
          Parameters
          ----------
  
          k : int, default 5
              Number of folds.
          stratify : bool, default False
          shuffle : bool, default True
          seed : int, default 100
          full_test : bool, default True
              If True then evaluate test dataset on the full data otherwise take the mean of every fold.
          add_diff : bool, default False
  
          Returns
          -------
          `DataFrame`
  
          Examples
          --------
          >>> pipeline = ModelsPipeline(model_rf,model_lr)
          >>> stack_ds = pipeline.stack(k=10, seed=111)