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 __get_patch(self, x, ptx):
      pty = (ptx[0] + self.patch_size[0], ptx[1] + self.patch_size[1])
      win = x[ptx[0] : pty[0], ptx[1] : pty[1]]
      assert (
          win.shape[0] == self.patch_size[0]
          and win.shape[1] == self.patch_size[1]
      ), f"[BUG] Incorrect Patch Size {win.shape}"
      return win
  
imports: import math
  import numpy
label_desc: Use image node_id 2 for calling the PatchExtractor obj's underlying member method code with example usage: obj.__get_patch(x, ptx) and returns: win