class_docstr: Extractor to generate patches with or without padding.
  Turn on debug mode to see how it is done.
  
  Args:
      x         : input image, should be of shape HWC
      patch_size  : a tuple of (h, w)
      step_size : a tuple of (h, w)
  Return:
      a list of sub patches, each patch has dtype same as x
  
  Examples:
      >>> xtractor = PatchExtractor((450, 450), (120, 120))
      >>> img = np.full([1200, 1200, 3], 255, np.uint8)
      >>> patches = xtractor.extract(img, 'mirror')
code: def extract(self, x, patch_type):
      patch_type = patch_type.lower()
      self.patch_type = patch_type
      if patch_type == "valid":
          return self.__extract_valid(x)
      elif patch_type == "mirror":
          return self.__extract_mirror(x)
      else:
          raise ValueError(f"Unknown Patch Type {patch_type}")
  
imports: import math
  import numpy
label_desc: Use image node_id 5 for calling the PatchExtractor obj's underlying member method code with example usage: obj.extract(x, patch_type) and returns: self, self