class_docstr: Class for benchmarking multiple ForecastConfig on a rolling window basis.
  
  Attributes
  ----------
  df : `pandas.DataFrame`
      Timeseries data to forecast.
      Contains columns [`time_col`, `value_col`], and optional regressor columns.
      Regressor columns should include future values for prediction.
  
  configs : `Dict` [`str`,  `ForecastConfig`]
      Dictionary of model configurations.
      A model configuration is a ``ForecastConfig``.
      See :class:`~greykite.framework.templates.autogen.forecast_config.ForecastConfig` for details on
      valid ``ForecastConfig``.
      Validity of the ``configs`` for benchmarking is checked via the ``validate`` method.
  
  tscv : `~greykite.sklearn.cross_validation.RollingTimeSeriesSplit`
      Cross-validation object that determines the rolling window evaluation.
      See :class:`~greykite.sklearn.cross_validation.RollingTimeSeriesSplit` for details.
      The ``forecast_horizon`` and ``periods_between_train_test`` parameters of ``configs`` are
      matched against that of ``tscv``. A ValueError is raised if there is a mismatch.
  
  forecaster : `~greykite.framework.templates.forecaster.Forecaster`
      Forecaster used to create the forecasts.
  
  is_run : bool, default False
      Indicator of whether the `run` method is executed.
      After executing `run`, this indicator is set to True.
      Some class methods like ``get_forecast`` requires ``is_run`` to be True
      to be executed.
  
  result : `dict`
      Stores the benchmarking results. Has the same keys as ``configs``.
  
  forecasts : `pandas.DataFrame`, default None
      Merged DataFrame of forecasts, upper and lower confidence interval for all
      input ``configs``. Also stores train end date and forecast step for each prediction.
docstr: Returns a rolling plot of the forecasts by ``config_name`` against ``TIME_COL``.
  The plot consists of one line for each available split. Some lines may overlap if test
  period in corresponding splits intersect. Hence every line is given a different color.
  If available, the corresponding actual values are also plotted.
  
  For a more customizable plot, see
  :func:`~greykite.common.viz.timeseries_plotting.plot_multivariate_grouped`
  
  Parameters
  ----------
  config_name : `str`
      Which config result to plot.
      The name must match the name of one of the input ``configs``.
  colors : [`str`, `List` [`str`]], default ``DEFAULT_PLOTLY_COLORS``
      Which colors to use to build the color palette.
      This can be a list of RGB colors or a `str` from ``PLOTLY_SCALES``.
      To use a single color for all lines, pass a `List` with a single color.
  xlabel : `str` or None, default TIME_COL
      x-axis label.
  ylabel : `str` or None, default VALUE_COL
      y-axis label.
  title : `str` or None, default None
      Plot title. If None, default is based on ``config_name``.
  showlegend : `bool`, default True
      Whether to show the legend.
  
  Returns
  -------
  fig : `plotly.graph_objects.Figure`
      Interactive plotly graph.
      Plots multiple column(s) in ``self.forecasts`` against ``TIME_COL``.
docstr_tok: ["Returns","a","rolling","plot","of","the","forecasts","by","``","config_name","``","against","``","TIME_COL","``",".","The","plot","consists","of","one","line","for","each","available","split",".","Some","lines","may","overlap","if","test","period","in","corresponding","splits","intersect",".","Hence","every","line","is","given","a","different","color",".","If","available",",","the","corresponding","actual","values","are","also","plotted",".","For","a","more","customizable","plot",",","see",":","func",":","`","~greykite.common.viz.timeseries_plotting.plot_multivariate_grouped","`","Parameters","--","--","--","--","--","config_name",":","`","str","`","Which","config","result","to","plot",".","The","name","must","match","the","name","of","one","of","the","input","``","configs","``",".","colors",":","[","`","str","`",",","`","List","`","[","`","str","`","]","]",",","default","``","DEFAULT_PLOTLY_COLORS","``","Which","colors","to","use","to","build","the","color","palette",".","This","can","be","a","list","of","RGB","colors","or","a","`","str","`","from","``","PLOTLY_SCALES","``",".","To","use","a","single","color","for","all","lines",",","pass","a","`","List","`","with","a","single","color",".","xlabel",":","`","str","`","or","None",",","default","TIME_COL","x-axis","label",".","ylabel",":","`","str","`","or","None",",","default","VALUE_COL","y-axis","label",".","title",":","`","str","`","or","None",",","default","None","Plot","title",".","If","None",",","default","is","based","on","``","config_name","``",".","showlegend",":","`","bool","`",",","default","True","Whether","to","show","the","legend",".","Returns","--","--","--","-","fig",":","`","plotly.graph_objects.Figure","`","Interactive","plotly","graph",".","Plots","multiple","column","(","s",")","in","``","self.forecasts","``","against","``","TIME_COL","``","."]
code: def plot_forecasts_by_config(
      self,
      config_name: str,
      colors: List = DEFAULT_PLOTLY_COLORS,
      xlabel: str = TIME_COL,
      ylabel: str = VALUE_COL,
      title: str = None,
      showlegend: bool = True,
  ):
      """Returns a rolling plot of the forecasts by ``config_name`` against ``TIME_COL``.
      The plot consists of one line for each available split. Some lines may overlap if test
      period in corresponding splits intersect. Hence every line is given a different color.
      If available, the corresponding actual values are also plotted.
  
      For a more customizable plot, see
      :func:`~greykite.common.viz.timeseries_plotting.plot_multivariate_grouped`
  
      Parameters
      ----------
      config_name : `str`
          Which config result to plot.
          The name must match the name of one of the input ``configs``.
      colors : [`str`, `List` [`str`]], default ``DEFAULT_PLOTLY_COLORS``
          Which colors to use to build the color palette.
          This can be a list of RGB colors or a `str` from ``PLOTLY_SCALES``.
          To use a single color for all lines, pass a `List` with a single color.
      xlabel : `str` or None, default TIME_COL
          x-axis label.
      ylabel : `str` or None, default VALUE_COL
          y-axis label.
      title : `str` or None, default None
          Plot title. If None, default is based on ``config_name``.
      showlegend : `bool`, default True
          Whether to show the legend.
  
      Returns
      -------
      fig : `plotly.graph_objects.Figure`
          Interactive plotly graph.
          Plots multiple column(s) in ``self.forecasts`` against ``TIME_COL``.
      """
      if self.forecasts is None:
          self.extract_forecasts()
  
      config_name = self.get_valid_config_names([config_name])[0]
  
      if title is None:
          title = f"Rolling forecast for {config_name}"
      fig = plot_multivariate_grouped(
          df=self.forecasts,
          x_col=TIME_COL,
          y_col_style_dict={
              ACTUAL_COL: {"line": {"width": 1, "dash": "solid"}}
          },
          grouping_x_col="split_num",
          grouping_x_col_values=None,
          grouping_y_col_style_dict={
              f"{config_name}_{PREDICTED_COL}": {
                  "name": "split",
                  "line": {"width": 1, "dash": "solid"},
              }
          },
          colors=colors,
          xlabel=xlabel,
          ylabel=ylabel,
          title=title,
          showlegend=showlegend,
      )
  
      return fig
  
imports: from typing import Dict
  from typing import List
  import numpy
  import pandas
  import plotly.graph_objects
  from plotly.colors import DEFAULT_PLOTLY_COLORS
  from tqdm.autonotebook import tqdm
  from greykite.common.constants import ACTUAL_COL
  from greykite.common.constants import PREDICTED_COL
  from greykite.common.constants import PREDICTED_LOWER_COL
  from greykite.common.constants import PREDICTED_UPPER_COL
  from greykite.common.constants import TIME_COL
  from greykite.common.constants import VALUE_COL
  from greykite.common.evaluation import EvaluationMetricEnum
  from greykite.common.evaluation import add_finite_filter_to_scorer
  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.viz.timeseries_plotting import plot_multivariate
  from greykite.common.viz.timeseries_plotting import plot_multivariate_grouped
  from greykite.framework.benchmark.benchmark_class_helper import forecast_pipeline_rolling_evaluation
  from greykite.framework.constants import FORECAST_STEP_COL
  from greykite.framework.templates.autogen.forecast_config import ForecastConfig
  from greykite.framework.templates.forecaster import Forecaster
  from greykite.sklearn.cross_validation import RollingTimeSeriesSplit
label_desc: Use image node_id 6 for calling the BenchmarkForecastConfig obj's underlying member method code with example usage: obj.plot_forecasts_by_config(config_name, colors, xlabel, ylabel, title, showlegend) and returns: fig