code: def evaluate(
      loop_hparams,
      planner_hparams,
      policy_dir,
      model_dir,
      eval_metrics_dir,
      agent_type,
      eval_mode,
      eval_with_learner,
      log_every_steps,
      debug_video_path,
      num_debug_videos=1,
      random_starts_step_limit=None,
      report_fn=None,
      report_metric=None,
  ):
      """Evaluate."""
      if eval_with_learner:
          assert agent_type == "policy"
  
      if report_fn:
          assert report_metric is not None
  
      eval_metrics_writer = tf.summary.FileWriter(eval_metrics_dir)
      video_writers = ()
      kwargs = {}
      if eval_mode in ["agent_real", "agent_simulated"]:
          if not eval_with_learner:
              if debug_video_path:
                  tf.gfile.MakeDirs(debug_video_path)
                  video_writers = [
                      common_video.WholeVideoWriter(  # pylint: disable=g-complex-comprehension
                          fps=10,
                          output_path=os.path.join(
                              debug_video_path, "{}.avi".format(i)
                          ),
                          file_format="avi",
                      )
                      for i in range(num_debug_videos)
                  ]
              kwargs["eval_fn"] = make_eval_fn_with_agent(
                  agent_type,
                  eval_mode,
                  planner_hparams,
                  model_dir,
                  log_every_steps=log_every_steps,
                  video_writers=video_writers,
                  random_starts_step_limit=random_starts_step_limit,
              )
          eval_metrics = rl_utils.evaluate_all_configs(
              loop_hparams, policy_dir, **kwargs
          )
      else:
          eval_metrics = evaluate_world_model(
              agent_type,
              loop_hparams,
              planner_hparams,
              model_dir,
              policy_dir,
              random_starts_step_limit,
              debug_video_path,
              log_every_steps,
          )
      rl_utils.summarize_metrics(eval_metrics_writer, eval_metrics, 0)
  
      for video_writer in video_writers:
          video_writer.finish_to_disk()
  
      # Report metrics
      if report_fn:
          if report_metric == "mean_reward":
              metric_name = rl_utils.get_metric_name(
                  sampling_temp=loop_hparams.eval_sampling_temps[0],
                  max_num_noops=loop_hparams.eval_max_num_noops,
                  clipped=False,
              )
              report_fn(eval_metrics[metric_name], 0)
          else:
              report_fn(eval_metrics[report_metric], 0)
      return eval_metrics
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import datetime
  import os
  from tensor2tensor.data_generators import gym_env
  from tensor2tensor.layers import common_video
  from tensor2tensor.models.research import rl
  from tensor2tensor.rl import rl_utils
  from tensor2tensor.rl import trainer_model_based_params
  from tensor2tensor.utils import flags
  from tensor2tensor.utils import hparam
  from tensor2tensor.utils import registry
  from tensor2tensor.utils import trainer_lib
  import tensorflow.compat.v1
label_desc: Use image node_id 20 for calling a global function with example usage: evaluate(loop_hparams, planner_hparams, policy_dir, model_dir, eval_metrics_dir, agent_type, eval_mode, eval_with_learner, log_every_steps, debug_video_path, num_debug_videos, random_starts_step_limit, report_fn, report_metric) and returns: eval_metrics