          self._tensorboard = self._set_tensorboard()
          self._samples = _Samples(self._model, self._model.coverage_ratio)
          self._timelapse = _Timelapse(self._model,
                                       self._model.coverage_ratio,
                                       self._config.get("preview_images", 14),
                                       self._feeder,
                                       self._images)
          logger.debug("Initialized %s", self.__class__.__name__)
  
      def _get_config(self, configfile):
 
</s> remove     def _get_config(self, configfile):
 </s> add     def _get_config(self, configfile: Optional[str]) -> ConfigType: </s> remove         self._output_file = None
 </s> add         self._output_file = "" </s> remove         self._target = {}
        self._samples = {}
        self._masks = {}

        self._feeds = {side: self._load_generator(idx).minibatch_ab(images[side], batch_size, side)
                       for idx, side in enumerate(("a", "b"))}
 </s> add         self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])} </s> remove         self._threads = []
 </s> add         self._threads: List[MultiThread] = [] </s> remove     def minibatch_ab(self, images, batchsize, side,
                     do_shuffle=True, is_preview=False, is_timelapse=False):
        """ A Background iterator to return augmented images, samples and targets.
 </s> add         if self._warp_to_landmarks:
            self._face_cache.pre_fill(images, side)
        self._processing = ImageAugmentation(batch_size,
                                             self._process_size,
                                             self._config)
        self._nearest_landmarks: Dict[str, Tuple[str, ...]] = {}
        logger.debug("Initialized %s", self.__class__.__name__)
                                     int(self._config.get("preview_images", 14)),
          self._tensorboard = self._set_tensorboard()
          self._samples = _Samples(self._model, self._model.coverage_ratio)
          self._timelapse = _Timelapse(self._model,
                                       self._model.coverage_ratio,
                                     int(self._config.get("preview_images", 14)),
                                       self._feeder,
                                       self._images)
          logger.debug("Initialized %s", self.__class__.__name__)
  
      def _get_config(self, configfile):
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