code: def test_imagedatagen_keras_specific(self):
      train_size, batch_size = 20, 5
      x_train, y_train = np.random.rand(
          train_size, 28, 28, 1
      ), np.random.randint(0, 2, size=(train_size, 10))
  
      datagen = ImageDataGenerator(
          width_shift_range=0.075,
          height_shift_range=0.075,
          rotation_range=12,
          shear_range=0.075,
          zoom_range=0.05,
          fill_mode="constant",
          cval=0,
      )
      datagen.fit(x_train)
  
      # Create generator and get batch
      data_gen = KerasDataGenerator(
          datagen.flow(x_train, y_train, batch_size=batch_size),
          size=None,
          batch_size=batch_size,
      )
      x, y = next(data_gen.iterator)
  
      # Check return types
      self.assertTrue(isinstance(x, np.ndarray))
      self.assertTrue(isinstance(y, np.ndarray))
  
      # Check shapes
      self.assertEqual(x.shape, (batch_size, 28, 28, 1))
      self.assertEqual(y.shape, (batch_size, 10))
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import logging
  import unittest
  import tensorflow
  import numpy
  from keras.preprocessing.image import ImageDataGenerator
  from art.data_generators import KerasDataGenerator, PyTorchDataGenerator, MXDataGenerator, TensorFlowDataGenerator
  from art.data_generators import TensorFlowV2DataGenerator, NumpyDataGenerator
  from tests.utils import master_seed
label_desc: Use image node_id 8 for calling the TestKerasDataGenerator obj's underlying member method code with example usage: obj.test_imagedatagen_keras_specific() without return types