docstr: NOTE: assertions may fail randomly, but with negligibly low probability
      on the order of 1 / (m choose batch_size)
      Setting the master seed here should avoid that, however
code: def test_shuffle(self):
      """
      NOTE: assertions may fail randomly, but with negligibly low probability
          on the order of 1 / (m choose batch_size)
          Setting the master seed here should avoid that, however
      """
      master_seed(seed=42)
      data_generator = NumpyDataGenerator(
          self.x,
          self.y,
          batch_size=self.batch_size,
          drop_remainder=True,
          shuffle=True,
      )
      _, y_batch = data_generator.get_batch()
      self.assertFalse((y_batch == self.y[: self.batch_size]).all())
  
      # Test shuffling across epochs
      for i in range(2):
          data_generator.get_batch()
      _, y_batch_epoch2 = data_generator.get_batch()
      self.assertFalse((y_batch == y_batch_epoch2).all())
  
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 7 for calling the TestNumpyDataGenerator obj's underlying member method code with example usage: obj.test_shuffle() without return types