def predict(self, df=None):
        """Predict using the AutoARIMAProphet adapter.

        Parameters
        ----------
        df : pandas.DataFrame
            DataFrame with columns ds (date type) and y, the time series.

        Returns
        -------
        pandas.DataFrame
            DataFrame with the forecast components.
        """
        if self.history is None:
            raise Exception("Model has not been fit.")

        if df is None:
            df = self.history.copy()
        else:
            if df.shape[0] == 0:
                raise ValueError("Dataframe has no rows.")
            df = self.setup_dataframe(df.copy())

        seasonal_features = self.make_all_seasonality_features(df)[0].loc[
            :, self.xreg_cols
        ]

        ds_forecast = set(df["ds"])
        h = len(ds_forecast - set(self.history["ds"]))
        if h > 0:
            X = seasonal_features.values[-h:] if not seasonal_features.empty else None
            fcsts_df = self.arima.predict(
                h=h, X=X, level=int(100 * self.interval_width)
            )
        else:
            fcsts_df = pd.DataFrame()
        if len(ds_forecast) > h:
            in_sample = self.arima.predict_in_sample(
                level=int(100 * self.interval_width)
            )
            fcsts_df = pd.concat([in_sample, fcsts_df]).reset_index(drop=True)

        yhat = fcsts_df.pop("mean")
        fcsts_df.columns = ["yhat_lower", "yhat_upper"]
        fcsts_df.insert(0, "yhat", yhat)
        fcsts_df.insert(0, "ds", df["ds"])

        return fcsts_df
Predict using the AutoARIMAProphet adapter.

        Parameters
        ----------
        df : pandas.DataFrame
            DataFrame with columns ds (date type) and y, the time series.

        Returns
        -------
        pandas.DataFrame
            DataFrame with the forecast components.
        
python/statsforecast/adapters/prophet.py