code: def test_non_contiguous_input(augmentation_cls, params, bboxes):
      image = np.empty([3, 100, 100], dtype=np.uint8).transpose(1, 2, 0)
      mask = np.empty([3, 100, 100], dtype=np.uint8).transpose(1, 2, 0)
  
      # check preconditions
      assert not image.flags["C_CONTIGUOUS"]
      assert not mask.flags["C_CONTIGUOUS"]
  
      if augmentation_cls == A.RandomCropNearBBox:
          # requires "cropping_bbox" arg
          aug = augmentation_cls(p=1, **params)
          aug(image=image, mask=mask, cropping_bbox=bboxes[0])
      elif augmentation_cls in [
          A.RandomSizedBBoxSafeCrop,
          A.BBoxSafeRandomCrop,
      ]:
          # requires "bboxes" arg
          aug = A.Compose(
              [augmentation_cls(p=1, **params)],
              bbox_params=A.BboxParams(format="pascal_voc"),
          )
          aug(image=image, mask=mask, bboxes=bboxes)
      else:
          # standard args: image and mask
          if augmentation_cls == A.FromFloat:
              # requires float image
              image = (image / 255).astype(np.float32)
              assert not image.flags["C_CONTIGUOUS"]
          elif augmentation_cls == A.MaskDropout:
              # requires single channel mask
              mask = mask[:, :, 0]
  
          aug = augmentation_cls(p=1, **params)
          aug(image=image, mask=mask)
  
imports: import random
  from typing import Dict, Tuple, Type
  import cv2
  import numpy
  import pytest
  import albumentations
  from .utils import get_dual_transforms, get_image_only_transforms, get_transforms
label_desc: Use image node_id 20 for calling a global function with example usage: test_non_contiguous_input(augmentation_cls, params, bboxes) without return types