<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def stack(self, k=5, stratify=False, shuffle=True, seed=100, full_test=True, add_diff=False):
 """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 -------- """

        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