docstr: Builds autoregressive df to be used in forecast models.
  
  Parameters
  ----------
  df : `pandas.Dataframe`
      Dataframe to predict on, passed to ``autoreg_func``.
  value_col : `str`, optional
      This is the column name for the values of the time series.
      This parameter is only required if autoregressive methods are used.
      ``value_col`` is needed at the "predict" phase to add to the ``df``
      with NULL values so it can be appended to ``past_df``.
  autoreg_func : callable, optional
      A function constructed by
      `~greykite.common.features.timeseries_lags.build_autoreg_df`
      with the following signature::
  
          def autoreg_func(df: pd.DataFrame, past_df: pd.DataFrame) ->
              dict(lag_df: pd.DataFrame, agg_lag_df: pd.DataFrame)
  
      See more details for above parameters in
      `~greykite.common.features.timeseries_lags.build_autoreg_df`.
  phase : `str`, optional, default "fit"
      It denotes the phase the features are being built. It can be either of
  
          - "fit": indicates the features are being built for the fitting phase
  
          - "predict": indicates the features are being built for predict phase
      This argument is used minimally inside the function.
      Currently only to throw an exception when ``phase = "predict"`` and
      ``autoreg_func`` is not None but ``past_df`` is None.
  past_df : `pandas.DataFrame`, optional
      If autoregressive methods are used by providing ``autoreg_func``,
      this parameter is used to append to ``df`` (from left)
      before calculating the lags
  
  Returns
  -------
  autoreg_df : `pandas.DataFrame`
      a data frame with autoregression columns
code: def __build_autoreg_features(
      self, df, value_col, autoreg_func, phase="fit", past_df=None
  ):
      """Builds autoregressive df to be used in forecast models.
  
      Parameters
      ----------
      df : `pandas.Dataframe`
          Dataframe to predict on, passed to ``autoreg_func``.
      value_col : `str`, optional
          This is the column name for the values of the time series.
          This parameter is only required if autoregressive methods are used.
          ``value_col`` is needed at the "predict" phase to add to the ``df``
          with NULL values so it can be appended to ``past_df``.
      autoreg_func : callable, optional
          A function constructed by
          `~greykite.common.features.timeseries_lags.build_autoreg_df`
          with the following signature::
  
              def autoreg_func(df: pd.DataFrame, past_df: pd.DataFrame) ->
                  dict(lag_df: pd.DataFrame, agg_lag_df: pd.DataFrame)
  
          See more details for above parameters in
          `~greykite.common.features.timeseries_lags.build_autoreg_df`.
      phase : `str`, optional, default "fit"
          It denotes the phase the features are being built. It can be either of
  
              - "fit": indicates the features are being built for the fitting phase
  
              - "predict": indicates the features are being built for predict phase
          This argument is used minimally inside the function.
          Currently only to throw an exception when ``phase = "predict"`` and
          ``autoreg_func`` is not None but ``past_df`` is None.
      past_df : `pandas.DataFrame`, optional
          If autoregressive methods are used by providing ``autoreg_func``,
          this parameter is used to append to ``df`` (from left)
          before calculating the lags
  
      Returns
      -------
      autoreg_df : `pandas.DataFrame`
          a data frame with autoregression columns
      """
      df = df.copy()
      # we raise an exception if we are in the 'predict' phase
      # and `autoreg_func` is not None
      # but either of ``past_df`` or ``value_col`` is not provided
      # This is because in that case `autoreg_func` will not be able to provide useful
      # lag-based predictors
      if phase == "predict":
          if value_col is None or past_df is None:
              raise ValueError(
                  "At 'predict' phase, if autoreg_func is not None,"
                  " 'past_df' and 'value_col' must be provided to "
                  "`build_autoreg_features`"
              )
          else:
              # in the predict phase, we add the `value_col` to the df
              # to enable `past_df` to be appended
              df[value_col] = np.nan
  
      if past_df is not None and df is not None:
          assert list(df.columns) == list(past_df.columns), (
              "`autoreg_func(df, past_df)` expects "
              "`df` and `past_df` to have the same columns. "
              "This is not the case: "
              f"`df` columns: {list(df.columns)}; "
              f"`past_df` columns: {list(past_df.columns)}"
          )
  
      autoreg_data = autoreg_func(df=df, past_df=past_df)
      autoreg_df = pd.concat(autoreg_data.values(), axis=1, sort=False)
  
      # Preserves the original index of `df`
      autoreg_df.index = df.index
      return autoreg_df
  
imports: import re
  import warnings
  from typing import Type
  import numpy
  import pandas
  from pandas.plotting import register_matplotlib_converters
  from pandas.tseries.frequencies import to_offset
  from greykite.algo.changepoint.adalasso.changepoint_detector import get_changepoints_dict
  from greykite.algo.changepoint.adalasso.changepoint_detector import get_seasonality_changepoints
  from greykite.algo.changepoint.adalasso.changepoints_utils import build_seasonality_feature_df_from_detection_result
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_seasonality_changepoint_df_cols
  from greykite.algo.common.ml_models import fit_ml_model_with_evaluation
  from greykite.algo.common.ml_models import predict_ml
  from greykite.algo.common.ml_models import predict_ml_with_uncertainty
  from greykite.algo.forecast.silverkite.constants.silverkite_constant import default_silverkite_constant
  from greykite.algo.forecast.silverkite.constants.silverkite_seasonality import SilverkiteSeasonalityEnum
  from greykite.algo.forecast.silverkite.constants.silverkite_seasonality import SilverkiteSeasonalityEnumMixin
  from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_fourier_feature_col_names
  from greykite.algo.forecast.silverkite.forecast_silverkite_helper import get_similar_lag
  from greykite.common.constants import CHANGEPOINT_COL_PREFIX
  from greykite.common.constants import ERR_STD_COL
  from greykite.common.constants import QUANTILE_SUMMARY_COL
  from greykite.common.constants import SEASONALITY_REGEX
  from greykite.common.constants import TimeFeaturesEnum
  from greykite.common.enums import TimeEnum
  from greykite.common.features.timeseries_features import add_daily_events
  from greykite.common.features.timeseries_features import add_time_features_df
  from greykite.common.features.timeseries_features import fourier_series_multi_fcn
  from greykite.common.features.timeseries_features import get_changepoint_dates_from_changepoints_dict
  from greykite.common.features.timeseries_features import get_changepoint_features
  from greykite.common.features.timeseries_features import get_changepoint_features_and_values_from_config
  from greykite.common.features.timeseries_features import get_default_origin_for_time_vars
  from greykite.common.features.timeseries_lags import build_autoreg_df
  from greykite.common.features.timeseries_lags import build_autoreg_df_multi
  from greykite.common.logging import LoggingLevelEnum
  from greykite.common.logging import log_message
  from greykite.common.python_utils import get_pattern_cols
  from greykite.common.python_utils import unique_elements_in_list
  from greykite.common.time_properties import describe_timeseries
  from greykite.common.time_properties import fill_missing_dates
  from greykite.common.time_properties import min_gap_in_seconds
  from greykite.common.time_properties_forecast import get_default_horizon_from_period
label_desc: Use image node_id 14 for calling the SilverkiteForecast obj's underlying member method code with example usage: obj.__build_autoreg_features(df, value_col, autoreg_func, phase, past_df) and returns: autoreg_df