class_docstr: ASR Task 
class_docstr_tok: ["ASR","Task"]
docstr: shuffle data after each epoch
docstr_tok: ["shuffle","data","after","each","epoch"]
code: def on_epoch_end(self):
      """shuffle data after each epoch"""
      self.batch_num = self.steps_per_epoch
      self.indexes = np.arange(self.batch_num)
      if self._need_shuffle:
          np.random.shuffle(self.indexes)
  
imports: import numpy
  import delta.compat
  from absl import logging
  from delta import utils
  from delta.data.utils import espnet_utils
  from delta.utils.register import registers
  from delta.data.task.base_speech_task import SpeechTask
label_desc: Use image node_id 9 for calling the AsrSeqTask obj's underlying member method code with example usage: obj.on_epoch_end() without return types