code: def test_transform(self, mock_random):
      ratio_range = (0.5, 1.5)
      aspect_ratio_range = (0.9, 1.1)
      mock_random.side_effect = [0.5, 0.5]
      img = np.zeros((15, 20, 3))
      polygon = [
          np.array([10.0, 5.0, 20.0, 5.0, 20.0, 10.0, 10.0, 10.0])
      ]
      bbox = np.array([[10.0, 5.0, 20.0, 10.0]])
      data_info = dict(img=img, gt_polygons=polygon, gt_bboxes=bbox)
      t = ShortScaleAspectJitter(
          short_size=40,
          ratio_range=ratio_range,
          aspect_ratio_range=aspect_ratio_range,
          scale_divisor=4,
      )
      results = t(data_info)
      self.assertEqual(results["img"].shape, (40, 56, 3))
      self.assertEqual(results["img_shape"], (40, 56))
  
imports: import copy
  import unittest
  import unittest.mock
  import numpy
  from mmcv.transforms import Pad, RandomResize
  from mmocr.datasets.transforms import BoundedScaleAspectJitter, RandomCrop, RandomFlip, Resize, ShortScaleAspectJitter, SourceImagePad, TextDetRandomCrop, TextDetRandomCropFlip
  from mmocr.utils import bbox2poly, poly2shapely
label_desc: Use image node_id 1 for calling the TestShortScaleAspectJitter obj's underlying member method code with example usage: obj.test_transform(mock_random) without return types