class_docstr: Crops a random spatial crop in a spatio-temporal
  numpy or tensor input [Channel, Time, Height, Width]
code: def __call__(self, tensor):
      h, w = self.size
      _, _, tensor_h, tensor_w = tensor.shape
  
      if w > tensor_w or h > tensor_h:
          error_msg = (
              "Initial tensor spatial size should be larger then "
              "cropped size but got cropped sizes : ({w}, {h}) while "
              "initial tensor is ({t_w}, {t_h})".format(
                  t_w=tensor_w, t_h=tensor_h, w=w, h=h
              )
          )
          raise ValueError(error_msg)
      x1 = random.randint(0, tensor_w - w)
      y1 = random.randint(0, tensor_h - h)
      cropped = tensor[:, :, y1 : y1 + h, x1 : x1 + h]
      return cropped
  
file_path: gluon-cv/gluoncv/torch/data/transforms/videotransforms/tensor_transforms.py
imports: import random
  from .utils import functional
label_desc: Use image node_id 2 for calling the SpatialRandomCrop obj's underlying member method code with example usage: obj.__call__(tensor) and returns: cropped