class_docstr: Stores predicted and actual values.
  Provides functionality to evaluate a forecast:
  
      - plots true against actual with prediction bands.
      - evaluates model performance.
  
  Input should be one of two kinds of forecast results:
  
      - model fit to train data, forecast on test set (actuals available).
      - model fit to all data, forecast on future dates (actuals not available).
  
  The input ``df`` is a concatenation of fitted and forecasted values.
  
  Attributes
  ----------
  df : `pandas.DataFrame`
      Timestamp, predicted, and actual values.
  time_col : `str`
      Column in ``df`` with timestamp (default "ts").
  actual_col : `str`
      Column in ``df`` with actual values (default "y").
  predicted_col : `str`
      Column in ``df`` with predicted values (default "forecast").
  predicted_lower_col : `str` or None
      Column in ``df`` with predicted lower bound (default "forecast_lower", optional).
  predicted_upper_col : `str` or None
      Column in ``df`` with predicted upper bound (default "forecast_upper", optional).
  null_model_predicted_col : `str` or None
      Column in ``df`` with predicted value of null model (default "forecast_null", optional).
  ylabel : `str`
      Unit of measurement (default "y")
  train_end_date : `str` or `datetime` or None, default None
      End date for train period. If `None`, assumes all data were used for training.
  test_start_date : `str` or `datetime` or None, default None
      Start date of test period. If `None`, set to the ``time_col`` value immediately after
      ``train_end_date``. This assumes that all data not used in training were used for testing.
  forecast_horizon : `int` or None, default None
      Number of periods forecasted into the future. Must be > 0.
  coverage : `float` or None
      Intended coverage of the prediction bands (0.0 to 1.0).
  r2_loss_function : `function`
      Loss function to calculate ``cst.R2_null_model_score``, with signature
      ``loss_func(y_true, y_pred)`` (default mean_squared_error)
  estimator : An instance of an estimator that implements `greykite.models.base_forecast_estimator.BaseForecastEstimator`.
      The fitted estimator, the last step in the forecast pipeline.
  relative_error_tolerance : `float` or None, default None
      Threshold to compute the ``Outside Tolerance`` metric,
      defined as the fraction of forecasted values whose relative
      error is strictly greater than ``relative_error_tolerance``.
      For example, 0.05 allows for 5% relative error.
      If `None`, the metric is not computed.
  df_train : `pandas.DataFrame`
      Subset of ``df`` where ``df[time_col]`` <= ``train_end_date``.
  df_test : `pandas.DataFrame`
      Subset of ``df`` where ``df[time_col]`` > ``train_end_date``.
  train_evaluation : `dict` [`str`, `float`]
      Evaluation metrics on training set.
  test_evaluation : `dict` [`str`, `float`]
      Evaluation metrics on test set (if actual values provided after train_end_date).
  test_na_count : `int`
      Count of NA values in test data.
docstr: Sweeps through ``map_func_dict``, converting values that are
  `~greykite.common.evaluation.ElementwiseEvaluationMetricEnum`
  member names to their corresponding row-wise evaluation function with appropriate
  column names for this UnivariateForecast instance.
  
  For example::
  
      map_func_dict = {
          "squared_error": ElementwiseEvaluationMetricEnum.SquaredError.name,
          "coverage": ElementwiseEvaluationMetricEnum.Coverage.name,
          "custom_metric": custom_function
      }
  
      is converted to
  
      map_func_dict = {
          "squared_error": lambda row: ElementwiseEvaluationMetricEnum.SquaredError.get_metric_func()(
                                      row[self.actual_col],
                                      row[self.predicted_col]),
          "coverage": lambda row: ElementwiseEvaluationMetricEnum.Coverage.get_metric_func()(
                                      row[self.actual_col],
                                      row[self.predicted_lower_col],
                                      row[self.predicted_upper_col]),
          "custom_metric": custom_function
      }
  
  Parameters
  ----------
  map_func_dict : `dict` or None
      Same as `~greykite.common.viz.timeseries_plotting.flexible_grouping_evaluation`,
      with one exception: values may a ElementwiseEvaluationMetricEnum member name.
      There are converted a callable for ``flexible_grouping_evaluation``.
  
  Returns
  -------
  map_func_dict : `dict`
      Can be passed to `~greykite.common.viz.timeseries_plotting.flexible_grouping_evaluation`.
docstr_tok: ["Sweeps","through","``","map_func_dict","``",",","converting","values","that","are","`","~greykite.common.evaluation.ElementwiseEvaluationMetricEnum","`","member","names","to","their","corresponding","row-wise","evaluation","function","with","appropriate","column","names","for","this","UnivariateForecast","instance",".","For","example",":",":","map_func_dict","=","{","``","squared_error","''",":","ElementwiseEvaluationMetricEnum.SquaredError.name",",","``","coverage","''",":","ElementwiseEvaluationMetricEnum.Coverage.name",",","``","custom_metric","''",":","custom_function","}","is","converted","to","map_func_dict","=","{","``","squared_error","''",":","lambda","row",":","ElementwiseEvaluationMetricEnum.SquaredError.get_metric_func","(",")","(","row","[","self.actual_col","]",",","row","[","self.predicted_col","]",")",",","``","coverage","''",":","lambda","row",":","ElementwiseEvaluationMetricEnum.Coverage.get_metric_func","(",")","(","row","[","self.actual_col","]",",","row","[","self.predicted_lower_col","]",",","row","[","self.predicted_upper_col","]",")",",","``","custom_metric","''",":","custom_function","}","Parameters","--","--","--","--","--","map_func_dict",":","`","dict","`","or","None","Same","as","`","~greykite.common.viz.timeseries_plotting.flexible_grouping_evaluation","`",",","with","one","exception",":","values","may","a","ElementwiseEvaluationMetricEnum","member","name",".","There","are","converted","a","callable","for","``","flexible_grouping_evaluation","``",".","Returns","--","--","--","-","map_func_dict",":","`","dict","`","Can","be","passed","to","`","~greykite.common.viz.timeseries_plotting.flexible_grouping_evaluation","`","."]
code: def autocomplete_map_func_dict(self, map_func_dict):
      """Sweeps through ``map_func_dict``, converting values that are
      `~greykite.common.evaluation.ElementwiseEvaluationMetricEnum`
      member names to their corresponding row-wise evaluation function with appropriate
      column names for this UnivariateForecast instance.
  
      For example::
  
          map_func_dict = {
              "squared_error": ElementwiseEvaluationMetricEnum.SquaredError.name,
              "coverage": ElementwiseEvaluationMetricEnum.Coverage.name,
              "custom_metric": custom_function
          }
  
          is converted to
  
          map_func_dict = {
              "squared_error": lambda row: ElementwiseEvaluationMetricEnum.SquaredError.get_metric_func()(
                                          row[self.actual_col],
                                          row[self.predicted_col]),
              "coverage": lambda row: ElementwiseEvaluationMetricEnum.Coverage.get_metric_func()(
                                          row[self.actual_col],
                                          row[self.predicted_lower_col],
                                          row[self.predicted_upper_col]),
              "custom_metric": custom_function
          }
  
      Parameters
      ----------
      map_func_dict : `dict` or None
          Same as `~greykite.common.viz.timeseries_plotting.flexible_grouping_evaluation`,
          with one exception: values may a ElementwiseEvaluationMetricEnum member name.
          There are converted a callable for ``flexible_grouping_evaluation``.
  
      Returns
      -------
      map_func_dict : `dict`
          Can be passed to `~greykite.common.viz.timeseries_plotting.flexible_grouping_evaluation`.
      """
      if map_func_dict is None:
          updated_map_func_dict = None
      else:
          updated_map_func_dict = {}
          for name, func in map_func_dict.items():
              if isinstance(func, str):
                  if (
                      func
                      in ElementwiseEvaluationMetricEnum.__members__
                  ):
                      enum = ElementwiseEvaluationMetricEnum[func]
                      row_func = enum.get_metric_func()
                      args = enum.get_metric_args()
                      arg_mapping = {  # maps canonical names to the names in self.df
                          cst.ACTUAL_COL: self.actual_col,
                          cst.PREDICTED_COL: self.predicted_col,
                          cst.PREDICTED_LOWER_COL: self.predicted_lower_col,
                          cst.PREDICTED_UPPER_COL: self.predicted_upper_col,
                          cst.NULL_PREDICTED_COL: self.null_model_predicted_col,
                          cst.TIME_COL: self.time_col,
                      }
                      try:
                          cols = [arg_mapping[arg] for arg in args]
                      except KeyError:
                          raise ValueError(
                              f"Auto-complete for {func} is not "
                              f"enabled, please specify the full function."
                          )
  
                      # Creates a function that passes the appropriate columns
                      # to the elementwise evaluation function
                      updated_map_func_dict[
                          name
                      ] = apply_func_to_columns(row_func, cols)
                  else:
                      valid_names = ", ".join(
                          ElementwiseEvaluationMetricEnum.__dict__[
                              "_member_names_"
                          ]
                      )
                      raise ValueError(
                          f"{func} is not a recognized elementwise evaluation "
                          f"metric. Must be one of: {valid_names}"
                      )
              else:
                  # `func` is a callable
                  updated_map_func_dict[name] = func
      return updated_map_func_dict
  
imports: from functools import partial
  import pandas
  from sklearn.metrics import mean_squared_error
  from greykite.common import constants
  from greykite.common.evaluation import ElementwiseEvaluationMetricEnum
  from greykite.common.evaluation import EvaluationMetricEnum
  from greykite.common.evaluation import add_finite_filter_to_scorer
  from greykite.common.evaluation import calc_pred_coverage
  from greykite.common.evaluation import calc_pred_err
  from greykite.common.evaluation import fraction_outside_tolerance
  from greykite.common.evaluation import r2_null_model_score
  from greykite.common.python_utils import apply_func_to_columns
  from greykite.common.time_properties import infer_freq
  from greykite.common.viz.timeseries_plotting import add_groupby_column
  from greykite.common.viz.timeseries_plotting import flexible_grouping_evaluation
  from greykite.common.viz.timeseries_plotting import grouping_evaluation
  from greykite.common.viz.timeseries_plotting import plot_forecast_vs_actual
  from greykite.common.viz.timeseries_plotting import plot_multivariate
  from greykite.common.viz.timeseries_plotting import plot_univariate
  from greykite.framework.input.univariate_time_series import UnivariateTimeSeries
label_desc: Use image node_id 7 for calling the UnivariateForecast obj's underlying member method code with example usage: obj.autocomplete_map_func_dict(map_func_dict) and returns: updated_map_func_dict