class_docstr: Used to iteratively fit model on a given data splitter
class_docstr_tok: ["Used","to","iteratively","fit","model","on","a","given","data","splitter"]
code: def _evaluate_test_metric(self, metric):
      # signature already validated in `self._validate_metric_callable()` so the following
      # values for metric_signature already are only for valid signatures
      metric_signature = self._get_metric_callable_signature(metric)
      if metric_signature == {
          BacktestFitKeys.ACTUAL.value,
          BacktestFitKeys.PREDICTED.value,
      }:
          eval_out = metric(
              actual=self._test_actual, prediction=self._test_prediction
          )
      else:
          # get signature and match with the private attributes respectively
          # mainly used for cases we need training data into test metrics
          # such as rmsse etc.
          _valid_args = [
              "_" + x for x in metric_signature
          ]  # add leading underscore to found signatures
          valid_arg_vals = [
              getattr(self, x) for x in _valid_args
          ]  # get private variable eg `self._test_actual`
          # dictionary of metric args and arg value
          valid_kwargs = {
              k: v for k, v in zip(metric_signature, valid_arg_vals)
          }
          eval_out = metric(**valid_kwargs)
  
      return eval_out
  
imports: import pandas
  import numpy
  import matplotlib.pyplot
  from copy import deepcopy
  import inspect
  from .metrics import smape, wmape, mape, mse, mae, rmsse
  from ..exceptions import BacktestException
  from ..constants.constants import TimeSeriesSplitSchemeKeys, BacktestFitKeys
  from ..constants.palette import OrbitPalette
  from orbit.utils.plot import orbit_style_decorator
label_desc: Use image node_id 13 for calling the BackTester obj's underlying member method code with example usage: obj._evaluate_test_metric(metric) and returns: eval_out