code: def test_transform_shear_op(batch_size=3, num_threads=4, device_id=0):
      for shear, angles, center in [
          ((1.0, 2.0), None, None),
          ((1.0, 2.0), None, (0.4, 0.5)),
          ((1.0, 2.0, 3.0, 4.0, 5.0, 6.0), None, None),
          ((1.0, 2.0, 3.0, 4.0, 5.0, 6.0), None, (0.4, 0.5, 0.6)),
          (None, (30.0, 10.0), None),
          (None, (30.0, 10.0), (0.4, 0.5)),
          (None, (40.0, 30.0, 10.0, 35.0, 25.0, 15.0), None),
          (None, (40.0, 30.0, 10.0, 35.0, 25.0, 15.0), (0.4, 0.5, 0.6)),
      ]:
          for has_input in [False, True]:
              for reverse_order in (
                  [False, True] if has_input else [False]
              ):
                  yield (
                      check_transform_shear_op,
                      shear,
                      angles,
                      center,
                      has_input,
                      reverse_order,
                      batch_size,
                      num_threads,
                      device_id,
                  )
  
imports: import random
  import warnings
  import numpy
  from scipy.spatial.transform import Rotation
  from nvidia.dali.pipeline import Pipeline
  import nvidia.dali.ops.transforms
  import nvidia.dali.ops
  import nvidia.dali.fn
  from nvidia.dali import pipeline_def
  from sequences_test_utils import ArgData, ArgDesc, sequence_suite_helper, ArgCb, ParamsProvider
  from nose_utils import assert_raises
label_desc: Use image node_id 15 for calling a global function with example usage: test_transform_shear_op(batch_size, num_threads, device_id) without return types