  
  import logging
  import os
  
  from random import shuffle, choice
  from typing import cast, Dict, Generator, List, Tuple, TYPE_CHECKING, Union
  
  import cv2
 
</s> remove from threading import Lock
from zlib import decompress
 </s> add from typing import cast, Dict, Generator, List, Tuple, TYPE_CHECKING, Union </s> remove from typing import TYPE_CHECKING, Optional
 </s> add from typing import List, Dict, TYPE_CHECKING, Optional </s> remove import numpy as np
 </s> add 
import sys
from concurrent import futures
  
  import logging
  import os
import sys
from concurrent import futures
  
  from random import shuffle, choice
  from typing import cast, Dict, Generator, List, Tuple, TYPE_CHECKING, Union
  
  import cv2
keep keep add 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 
lib/training/generator.py