def on_train_epoch_end(self, epoch_output: List[List[List[Result]]]) -> None:
    self.trainer.logger_connector.on_train_epoch_end()
    processed_epoch_output = TrainLoop._prepare_outputs(epoch_output, batch_mode=False)
    model = self.trainer.lightning_module
    if is_overridden('training_epoch_end', model=model):
        model._current_fx_name = 'training_epoch_end'
        training_epoch_end_output = model.training_epoch_end(processed_epoch_output)
        if (training_epoch_end_output is not None):
            raise MisconfigurationException('training_epoch_end expects a return of None. HINT: remove the return statement in training_epoch_end')
        self.trainer.logger_connector.cache_logged_metrics()
    self._on_train_epoch_end_hook(processed_epoch_output)
    self.trainer.call_hook('on_epoch_end')
def on_train_epoch_end(self, epoch_output: List[List[List[Result]]]) -> None:
    self.trainer.logger_connector.on_train_epoch_end()
    processed_epoch_output = TrainLoop._prepare_outputs(epoch_output, batch_mode=False)
    model = self.trainer.lightning_module
    if is_overridden('training_epoch_end', model=model):
        model._current_fx_name = 'training_epoch_end'
        training_epoch_end_output = model.training_epoch_end(processed_epoch_output)
        if (training_epoch_end_output is not None):
            raise MisconfigurationException('training_epoch_end expects a return of None. HINT: remove the return statement in training_epoch_end')
        self.trainer.logger_connector.cache_logged_metrics()
    self._on_train_epoch_end_hook(processed_epoch_output)
    self.trainer.call_hook('on_epoch_end')