                       self.__class__.__name__, len(images), batch_size, config)
          self._model = model
          self._images = images
          self._config = config
          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"))}
  
          self._display_feeds = dict(preview=self._set_preview_feed(), timelapse={})
          logger.debug("Initialized %s:", self.__class__.__name__)
  
      def _load_generator(self, output_index):
 
</s> remove                      self.__class__.__name__, len(images), batch_size, config)
 </s> add                      self.__class__.__name__, {k: len(v) for k, v in images.items()}, batch_size,
                     config) </s> remove     def _load_generator(self, output_index):
 </s> add     def _load_generator(self,
                        side: Literal["a", "b"],
                        is_display: bool,
                        batch_size: Optional[int] = None,
                        images: Optional[List[str]] = None) -> DataGenerator: </s> remove     def __init__(self, images, model, batch_size, config):
 </s> add     def __init__(self,
                 images: Dict[Literal["a", "b"], List[str]],
                 model: 'ModelBase',
                 batch_size: int,
                 config: ConfigType) -> None: </s> remove         retval = {}
        for idx, side in enumerate(("a", "b")):
 </s> add         retval: Dict[Literal["a", "b"], Generator[BatchType, None, None]] = {}
        for side in get_args(Literal["a", "b"]):
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
                       self.__class__.__name__, len(images), batch_size, config)
          self._model = model
          self._images = images
          self._config = config
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
        self._feeds = {side: self._load_generator(side, False).minibatch_ab()
                       for side in get_args(Literal["a", "b"])}
  
          self._display_feeds = dict(preview=self._set_preview_feed(), timelapse={})
          logger.debug("Initialized %s:", self.__class__.__name__)
  
      def _load_generator(self, output_index):
keep keep keep keep replace replace replace replace replace 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