code: def generate_data(self, data_dir, tmp_dir, task_id=-1):
      
      filepath_fns = {
          problem.DatasetSplit.TRAIN: self.training_filepaths,
          problem.DatasetSplit.EVAL: self.dev_filepaths,
          problem.DatasetSplit.TEST: self.test_filepaths,
      }
  
      # We set shuffled=True as we don't want to shuffle on disk later.
      split_paths = [(split["split"], filepath_fns[split["split"]](
          data_dir, split["shards"], shuffled=True))
                     for split in self.dataset_splits]
      all_paths = []
      for _, paths in split_paths:
        all_paths.extend(paths)
  
      if self.is_generate_per_split:
        for split, paths in split_paths:
          generator_utils.generate_files(
              self.generate_encoded_samples(data_dir, tmp_dir, split),
              paths,
              cycle_every_n=self.total_number_of_frames // len(paths))
      else:
        generator_utils.generate_files(
            self.generate_encoded_samples(data_dir, tmp_dir,
                                          problem.DatasetSplit.TRAIN),
            all_paths,
            cycle_every_n=self.total_number_of_frames // len(all_paths))
docs: The function generating the data.