def eval(
        self,
        exp_list: Union[ClassificationExperience, Sequence[ClassificationExperience]],
        **kwargs
    ):
        """
        Evaluate the current model on a series of experiences and
        returns the last recorded value for each metric.

        :param exp_list: CL experience information.
        :param kwargs: custom arguments.

        :return: dictionary containing last recorded value for
            each metric name
        """
        # eval can be called inside the train method.
        # Save the shared state here to restore before returning.
        train_state = self._save_train_state()
        self.is_training = False
        self.model.eval()

        if not isinstance(exp_list, Sequence):
            exp_list = [exp_list]
        self.current_eval_stream = exp_list

        trigger_plugins(self, "before_eval")
        for self.experience in exp_list:
            # Data Adaptation
            trigger_plugins(self, "before_eval_dataset_adaptation")
            self.eval_dataset_adaptation(**kwargs)
            trigger_plugins(self, "after_eval_dataset_adaptation")
            self.make_eval_dataloader(**kwargs)

            # Model Adaptation (e.g. freeze/add new units)
            self.model = self.model_adaptation()

            trigger_plugins(self, "before_eval_exp")
            self.eval_epoch(**kwargs)
            trigger_plugins(self, "after_eval_exp")

        trigger_plugins(self, "after_eval")
        res = self.evaluator.get_last_metrics()

        # restore previous shared state.
        self._load_train_state(*train_state)
        return res

        Evaluate the current model on a series of experiences and
        returns the last recorded value for each metric.

        :param exp_list: CL experience information.
        :param kwargs: custom arguments.

        :return: dictionary containing last recorded value for
            each metric name
        
tests/training/test_supervised_regression.py