def _evaluate_test_metric()

in orbit/diagnostics/backtest.py [0:0]


    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