code: def mesh_eval_dataset_fn(
      mixture_or_task_name,
      sequence_length,
      dataset_split,
      vocabulary=None,
      num_eval_examples=-1,
      use_cached=False,
      pack=False,
      shuffle_eval_examples=False,
      seed=None,
  ):
      """Returns all tf.data.Datasets for evaluation on a given mixture.
  
      This uses the format required for utils.run's `eval_dataset_fn` argument in
      the Mesh TF transformer standalone.
  
      Args:
        mixture_or_task_name: string, an identifier for a Mixture or Task in the
          appropriate registry. Must be specified via gin.
        sequence_length: dict mapping feature key to the int length for that feature
          the max sequence length. If set to None, packing and padding will be
          disabled.
        dataset_split: string, which split of the dataset to load.
        vocabulary: unused argument, maintains compatibility with other dataaset_fns
        num_eval_examples: maximum number of examples per task to use for continuous
          eval. If None or less than 0, use all examples.
        use_cached: bool, whether to load the cached version of this dataset.
        pack: a boolean, whether to pack examples. This is useful for perplexity
          evals but should not be used for iterative decoding.
        shuffle_eval_examples: boolean, whether to shuffle eval examples, applied
          only when num_eval_examples is not None. Intended to be able to eval on a
          different eval slice at every iteration.
        seed: tf.int64 scalar tf.Tensor (or None). Used for both the global seed and
          shuffle seed for tf.data
  
      Returns:
        A list of mesh_tensorflow.transformer.dataset.EvalDataset tuples.
      """
      del vocabulary
  
      mixture_or_task = seqio.get_mixture_or_task(mixture_or_task_name)
  
      def _get_dataset_for_single_task(task, sequence_length):
          """Get a tensorflow.data.Dataset for the provided task."""
          if shuffle_eval_examples and seed is None:
              logging.warning(
                  (
                      "shuffle_seed_examples is true but no seed was ",
                      "provided. Using a random seed.",
                  )
              )
  
          ds = task.get_dataset(
              sequence_length,
              split=dataset_split,
              use_cached=use_cached,
              shuffle=shuffle_eval_examples,
              seed=seed,
          )
          eos_keys = set(
              k
              for k, f in mixture_or_task.output_features.items()
              if f.add_eos
          )
          if sequence_length is None:
              logging.info(
                  "Skipping packing/padding for '%s' since sequence length is None.",
                  task.name,
              )
          else:
              logging.info(
                  "%sing '%s' with sequence lengths: %s",
                  "Pack" if pack else "Padd",
                  task.name,
                  sequence_length,
              )
              ds = transformer_dataset.pack_or_pad(
                  ds,
                  sequence_length,
                  pack=pack,
                  feature_keys=tuple(task.output_features),
                  ensure_eos=eos_keys,
              )
  
          if num_eval_examples is not None and num_eval_examples >= 0:
              ds = ds.take(num_eval_examples)
  
          return ds
  
      outputs = []
  
      for task in seqio.get_subtasks(mixture_or_task):
          if dataset_split not in task.splits:
              logging.info(
                  "Task %s has no '%s' split, skipping eval.",
                  task.name,
                  dataset_split,
              )
              continue
  
          outputs.append(
              transformer_dataset.EvalDataset(
                  task.name,
                  functools.partial(
                      _get_dataset_for_single_task,
                      task=task,
                      sequence_length=sequence_length,
                  ),
                  task.postprocess_fn,
                  task.metric_fns,
              )
          )
  
      if not outputs:
          logging.warning(
              "No %s data found for %s.",
              dataset_split,
              mixture_or_task_name,
          )
  
      return outputs
  
file_path: text-to-text-transfer-transformer/t5/models/mesh_transformer.py
imports: import functools
  from absl import logging
  import gin
  import mesh_tensorflow.transformer.dataset
  import seqio
  from t5.models import utils
  import tensorflow.compat.v1
  import tensorflow_datasets
label_desc: Use image node_id 3 for calling a global function with example usage: mesh_eval_dataset_fn(mixture_or_task_name, sequence_length, dataset_split, vocabulary, num_eval_examples, use_cached, pack, shuffle_eval_examples, seed) and returns: outputs, ds