              `channels`) and in `BGR` format.
          """
          logger.trace("Randomly flipping image")  # type: ignore
          randoms = np.random.rand(self._batchsize)
          indices = np.where(randoms > int(self._config.get("random_flip", 50)) / 100)[0]
          batch[indices] = batch[indices, :, ::-1]
          logger.trace("Randomly flipped %s images of %s",  # type: ignore
                       len(indices), self._batchsize)
  
      def warp(self, batch: np.ndarray, to_landmarks: bool = False, **kwargs) -> np.ndarray:
 
</s> remove                               clahe_chance=int(self._config.get("color_clahe_chance", 50)) / 100,
                              clahe_max_size=int(self._config.get("color_clahe_max_size", 4)),
 </s> add                               clahe_chance=color_clahe_chance / 100,
                              clahe_max_size=color_clahe_max_size, </s> remove             print_fn = lambda x: logger.verbose("%s", x)  # type: ignore # noqa
 </s> add             print_fn = lambda x: logger.verbose("%s", x)  #type:ignore[attr-defined]  # noqa[E731]  # pylint:disable=C3001 </s> remove         if not self._config["penalized_mask_loss"] or int(self._config[f"{area}_multiplier"]) <= 1:
 </s> add         multiplier = self._config[f"{area}_multiplier"]
        assert isinstance(multiplier, int)
        if not self._config["penalized_mask_loss"] or multiplier <= 1: </s> remove                  config: ConfigType,
 </s> add                  config: Dict[str, "ConfigValueType"], </s> remove         retval = [np.array([cv2.addWeighted(img, 1.0, mask, 0.3, 0)
                            for img, mask in zip(previews, compiled_masks)])
                  for previews, compiled_masks in zip(faces, masks3)]
 </s> add         retval: List[np.ndarray] = []
        alpha = 1.0 - self._mask_opacity
        for previews, compiled_masks in zip(faces, masks3):
            overlays = previews.copy()
            overlays[np.where((compiled_masks == 1.).all(axis=3))] = self._mask_color
            retval.append(np.array([cv2.addWeighted(img, alpha, ovl, self._mask_opacity, 0)
                                    for img, ovl in zip(previews, overlays)]))

        flip_chance = self._config.get("random_flip", 50)
        assert isinstance(flip_chance, int)
        indices = np.where(randoms > flip_chance / 100)[0]
              `channels`) and in `BGR` format.
          """
          logger.trace("Randomly flipping image")  # type: ignore
          randoms = np.random.rand(self._batchsize)
        flip_chance = self._config.get("random_flip", 50)
        assert isinstance(flip_chance, int)
        indices = np.where(randoms > flip_chance / 100)[0]
          batch[indices] = batch[indices, :, ::-1]
          logger.trace("Randomly flipped %s images of %s",  # type: ignore
                       len(indices), self._batchsize)
  
      def warp(self, batch: np.ndarray, to_landmarks: bool = False, **kwargs) -> np.ndarray:
keep keep keep keep replace keep keep keep keep keep
 Preview - Allow mask color/opacity configuration
  - typing: lib.config
  - docs: lib.config
  - bugfix: popup_configure - keep assets on top 
lib/training/augmentation.py