code: def generator_samples(tmp_dir, pb_cst):
      """Generator for the dataset samples.
  
      If not present, download and extract the dataset.
  
      Args:
        tmp_dir: path to the directory where to download the dataset.
        pb_cst: CodingPbConstants object defining paths
  
      Yields:
        A CodingPbInfo object containing the next challenge informations.
      """
      # Step1: Download dataset (eventually)
      data_zip_path = generator_utils.maybe_download_from_drive(
          directory=tmp_dir,
          filename=_DATASET_FILENAME,
          url=_DATASET_URL,
      )
      tf.logging.info("Data downloaded in: {}".format(data_zip_path))
  
      # Step2: Extract dataset
      # We could deduce _DATASET_PB_PATH from the zip file (instead of
      # hardcoded path)
      data_rootdir = os.path.join(tmp_dir, _DATASET_PB_PATH)
      if not tf.gfile.Exists(data_rootdir):
          with zipfile.ZipFile(data_zip_path, "r") as corpus_zip:
              corpus_zip.extractall(tmp_dir)
          # We could remove the extracted __MACOSX folder
          tf.logging.info("Data extracted in: {}".format(tmp_dir))
      else:
          tf.logging.info(
              "Data already extracted in: {}".format(tmp_dir)
          )
  
      # Step3: Extract the problems list on the extracted folder
      def contains_samples(
          subdir, dirs, files
      ):  # pylint: disable=unused-argument
          """Check that the folder contains a problem."""
          return _DESC_DIR_NAME in dirs and pb_cst.code_dir_name in dirs
  
      def next_sample(
          subdir, dirs, files
      ):  # pylint: disable=unused-argument
          """Return the filenames of the problem."""
          # More could be extracted (like the expected inputs/outputs
          # pairs, the problem difficulty, the names of the algorithmic techniques
          # needed)
          desc_file = os.path.join(
              subdir, _DESC_DIR_NAME, "description.txt"
          )
          code_files = []
          # As the dataset is noisy, the program deduce the language from the file
          # content.
          code_pattern = os.path.join(
              subdir, pb_cst.code_dir_name, "*.txt"
          )
          for f in tf.gfile.Glob(code_pattern):
              with tf.gfile.GFile(f, mode="r") as target_file:
                  # Hack to filter C++/Java files. In theory some python comments could
                  # make the file be considered as C++ but in practice the chance of
                  # getting a false negative is low.
                  content = target_file.read()
                  if not any(
                      p in content for p in pb_cst.filter_patterns
                  ):
                      code_files.append(f)
          return CodingPbInfo(
              desc_file=desc_file, code_files=code_files
          )
  
      # The dataset contains problem from two different sources (CodeChef
      # and CodeForces). Due to the limited number of samples, all problems from
      # both sources are merged
      for w in tf.gfile.Walk(data_rootdir):
          if contains_samples(*w):
              yield next_sample(*w)
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  import os
  import random
  import re
  import zipfile
  from tensor2tensor.data_generators import generator_utils
  from tensor2tensor.data_generators import problem
  from tensor2tensor.data_generators import text_encoder
  from tensor2tensor.data_generators import text_problems
  from tensor2tensor.utils import registry
  import tensorflow.compat.v1
label_desc: Use image node_id 1 for calling a global function with example usage: generator_samples(tmp_dir, pb_cst) and returns: unknown, CodingPbInfo