          :class:`tf.keras.callbacks.TensorBoard`
              Tensorboard object for the the current training session.
          """
          if self._model.state.current_session["no_logs"]:
              logger.verbose("TensorBoard logging disabled")
              return None
          logger.debug("Enabling TensorBoard Logging")
  
          logger.debug("Setting up TensorBoard Logging")
          log_dir = os.path.join(str(self._model.model_dir),
 
</s> remove         logger.verbose("Enabled TensorBoard Logging")
 </s> add         logger.verbose("Enabled TensorBoard Logging")  # type: ignore </s> remove     def toggle_mask(self):
 </s> add     def toggle_mask(self) -> None: </s> remove         logger.trace("Updating TensorBoard log")
 </s> add         logger.trace("Updating TensorBoard log")  # type: ignore </s> remove     def _set_tensorboard(self):
 </s> add     def _set_tensorboard(self) -> tf.keras.callbacks.TensorBoard: </s> remove logger = logging.getLogger(__name__)  # pylint: disable=invalid-name

_FACE_CACHES = dict()


def _get_cache(side, filenames, config):
    """ Obtain a :class:`_Cache` object for the given side. If the object does not pre-exist then
    create it.

    Parameters
    ----------
    side: str
        `"a"` or `"b"`. The side of the model to obtain the cache for
    filenames: list
        The filenames of all the images. This can either be the full path or the base name. If the
        full paths are passed in, they are stripped to base name for use as the cache key.
    config: dict
        The user selected training configuration options

    Returns
    -------
    :class:`_Cache`
        The face meta information cache for the requested side
    """
    if not _FACE_CACHES.get(side):
        logger.debug("Creating cache. Side: %s", side)
        _FACE_CACHES[side] = _Cache(filenames, config)
    return _FACE_CACHES[side]


def _check_reset(face_cache):
    """ Check whether a given cache needs to be reset because a face centering change has been
    detected in the other cache.

    Parameters
    ----------
    face_cache: :class:`_Cache`
        The cache object that is checking whether it should reset

    Returns
    -------
    bool
        ``True`` if the given object should reset the cache, otherwise ``False``
    """
    check_cache = next((cache for cache in _FACE_CACHES.values() if cache != face_cache), None)
    retval = check_cache if check_cache is None else check_cache.check_reset()
    return retval
 </s> add if sys.version_info < (3, 8):
    from typing_extensions import get_args, Literal
else:
    from typing import get_args, Literal
            logger.verbose("TensorBoard logging disabled")  # type: ignore
          :class:`tf.keras.callbacks.TensorBoard`
              Tensorboard object for the the current training session.
          """
          if self._model.state.current_session["no_logs"]:
            logger.verbose("TensorBoard logging disabled")  # type: ignore
              return None
          logger.debug("Enabling TensorBoard Logging")
  
          logger.debug("Setting up TensorBoard Logging")
          log_dir = os.path.join(str(self._model.model_dir),
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