          self._model.add_history(combined_loss)
          logger.trace("original loss: %s, comibed_loss: %s", loss, combined_loss)
          return combined_loss
  
      def _print_loss(self, loss):
          """ Outputs the loss for the current iteration to the console.
  
          Parameters
          ----------
          loss: list
 
</s> remove         logger.trace("original loss: %s, comibed_loss: %s", loss, combined_loss)
 </s> add         logger.trace("original loss: %s, combined_loss: %s", loss, combined_loss)  # type: ignore </s> remove     def _collate_and_store_loss(self, loss):
 </s> add     def _collate_and_store_loss(self, loss: List[float]) -> List[float]: </s> remove             The list of loss ``floats`` for this iteration.
 </s> add             The list of loss ``floats`` for each side this iteration (excluding total combined
            loss) </s> remove         if do_preview:
            self._feeder.generate_preview(do_preview)
            self._samples.images = self._feeder.compile_sample(None)
            samples = self._samples.show_sample()
            if samples is not None:
                viewer(samples,
                       "Training - 'S': Save Now. 'R': Refresh Preview. 'M': Toggle Mask. 'F': "
                       "Toggle Screen Fit-Actual Size. 'ENTER': Save and Quit")

        if timelapse_kwargs:
            self._timelapse.output_timelapse(timelapse_kwargs)

    def _log_tensorboard(self, loss):
 </s> add     def _log_tensorboard(self, loss: List[float]) -> None:
    def _print_loss(self, loss: List[float]) -> None:
          self._model.add_history(combined_loss)
          logger.trace("original loss: %s, comibed_loss: %s", loss, combined_loss)
          return combined_loss
  
    def _print_loss(self, loss: List[float]) -> None:
          """ Outputs the loss for the current iteration to the console.
  
          Parameters
          ----------
          loss: list
keep keep keep keep replace keep keep keep keep keep
 Data Augmentation update (#1263)

- lib.detected_face
    - Subclass Masks for Landmark based masks
    - Add training mask propery + methods to DetectedFace
  - lib.training_training
    - subclass TrainingDataGenerator for training and preview data
    - Split cache into own module
    - Reduce thread count to 1 to prevent image corruption + data re-use
    - Process on largest model input/output size rather than stored image size
    - Size and crop masks during caching stage
    - Implement ring buffer for data flow
    - Fix preview reload bug
  - augmentation
    - typing
    - switch color aug order
    - better initialization
    - Fix warp + landmark warp to correctly apply at different image scales
    - Slightly improved warp caching
    - Don't store whether image is_preview. Handle all data as training images implicitly
  - plugins.trainer: Typing and fixes to work with trainingdata refactor 
plugins/train/trainer/_base.py