def METHOD_NAME(self, batch_results: list, on_epoch_end: bool = False):
    """
    After several forward steps, outputs should be collected untouched (but detaching the Tensors)
    into a list and passed as batch_results. This function examine the collected items and compute
    metrics across these batches. This function might be called in the middle of an epoch for quick
    logging, or after exactly an epoch to know the epoch level performance.
    Args:
        batch_results (List[cacheable version of the output of self.train_step])
        on_epoch_end (bool):
            usually you should keep the same behavior between sub-epoch and epoch level
            this parameter is here in case you need specific postprocessing which must
            only be done right on the end of an epoch
    Return:
        logs (List[Log]):
            a list of content to log onto any logger
            each content should be in the Log class format
    """
    return self._general_reduction(batch_results, on_epoch_end)