class_docstr: Evaluates Meta-RL algorithms on test environments.
  
  Args:
      test_task_sampler (TaskSampler): Sampler for test
          tasks. To demonstrate the effectiveness of a meta-learning method,
          these should be different from the training tasks.
      n_test_tasks (int or None): Number of test tasks to sample each time
          evaluation is performed. Note that tasks are sampled "without
          replacement". If None, is set to `test_task_sampler.n_tasks`.
      n_exploration_eps (int): Number of episodes to gather from the
          exploration policy before requesting the meta algorithm to produce
          an adapted policy.
      n_test_episodes (int): Number of episodes to use for each adapted
          policy. The adapted policy should forget previous episodes when
          `.reset()` is called.
      prefix (str): Prefix to use when logging. Defaults to MetaTest. For
          example, this results in logging the key 'MetaTest/SuccessRate'.
          If not set to `MetaTest`, it should probably be set to `MetaTrain`.
      test_task_names (list[str]): List of task names to test. Should be in
          an order consistent with the `task_id` env_info, if that is
          present.
      worker_class (type): Type of worker the Sampler should use.
      worker_args (dict or None): Additional arguments that should be
          passed to the worker.
class_docstr_tok: ["Evaluates","Meta-RL","algorithms","on","test","environments",".","Args",":","test_task_sampler","(","TaskSampler",")",":","Sampler","for","test","tasks",".","To","demonstrate","the","effectiveness","of","a","meta-learning","method",",","these","should","be","different","from","the","training","tasks",".","n_test_tasks","(","int","or","None",")",":","Number","of","test","tasks","to","sample","each","time","evaluation","is","performed",".","Note","that","tasks","are","sampled","``","without","replacement","''",".","If","None",",","is","set","to","`","test_task_sampler.n_tasks","`",".","n_exploration_eps","(","int",")",":","Number","of","episodes","to","gather","from","the","exploration","policy","before","requesting","the","meta","algorithm","to","produce","an","adapted","policy",".","n_test_episodes","(","int",")",":","Number","of","episodes","to","use","for","each","adapted","policy",".","The","adapted","policy","should","forget","previous","episodes","when","`",".reset","(",")","`","is","called",".","prefix","(","str",")",":","Prefix","to","use","when","logging",".","Defaults","to","MetaTest",".","For","example",",","this","results","in","logging","the","key","'MetaTest\/SuccessRate","'",".","If","not","set","to","`","MetaTest","`",",","it","should","probably","be","set","to","`","MetaTrain","`",".","test_task_names","(","list","[","str","]",")",":","List","of","task","names","to","test",".","Should","be","in","an","order","consistent","with","the","`","task_id","`","env_info",",","if","that","is","present",".","worker_class","(","type",")",":","Type","of","worker","the","Sampler","should","use",".","worker_args","(","dict","or","None",")",":","Additional","arguments","that","should","be","passed","to","the","worker","."]
docstr: Evaluate the Meta-RL algorithm on the test tasks.
  
  Args:
      algo (MetaRLAlgorithm): The algorithm to evaluate.
      test_episodes_per_task (int or None): Number of episodes per task.
docstr_tok: ["Evaluate","the","Meta-RL","algorithm","on","the","test","tasks",".","Args",":","algo","(","MetaRLAlgorithm",")",":","The","algorithm","to","evaluate",".","test_episodes_per_task","(","int","or","None",")",":","Number","of","episodes","per","task","."]
code: def evaluate(self, algo, test_episodes_per_task=None):
      """Evaluate the Meta-RL algorithm on the test tasks.
  
      Args:
          algo (MetaRLAlgorithm): The algorithm to evaluate.
          test_episodes_per_task (int or None): Number of episodes per task.
  
      """
      if test_episodes_per_task is None:
          test_episodes_per_task = self._n_test_episodes
      adapted_episodes = []
      logger.log("Sampling for adapation and meta-testing...")
      env_updates = self._test_task_sampler.sample(self._n_test_tasks)
      if self._test_sampler is None:
          env = env_updates[0]()
          self._max_episode_length = env.spec.max_episode_length
          self._test_sampler = LocalSampler.from_worker_factory(
              WorkerFactory(
                  seed=get_seed(),
                  max_episode_length=self._max_episode_length,
                  n_workers=1,
                  worker_class=self._worker_class,
                  worker_args=self._worker_args,
              ),
              agents=algo.get_exploration_policy(),
              envs=env,
          )
      for env_up in env_updates:
          policy = algo.get_exploration_policy()
          eps = EpisodeBatch.concatenate(
              *[
                  self._test_sampler.obtain_samples(
                      self._eval_itr, 1, policy, env_up
                  )
                  for _ in range(self._n_exploration_eps)
              ]
          )
          adapted_policy = algo.adapt_policy(policy, eps)
          adapted_eps = self._test_sampler.obtain_samples(
              self._eval_itr,
              test_episodes_per_task * self._max_episode_length,
              adapted_policy,
          )
          adapted_episodes.append(adapted_eps)
      logger.log("Finished meta-testing...")
  
      if self._test_task_names is not None:
          name_map = dict(enumerate(self._test_task_names))
      else:
          name_map = None
  
      with tabular.prefix(self._prefix + "/" if self._prefix else ""):
          log_multitask_performance(
              self._eval_itr,
              EpisodeBatch.concatenate(*adapted_episodes),
              getattr(algo, "discount", 1.0),
              name_map=name_map,
          )
      self._eval_itr += 1
  
imports: from dowel import logger, tabular
  from garage import EpisodeBatch, log_multitask_performance
  from garage.experiment.deterministic import get_seed
  from garage.sampler import DefaultWorker, LocalSampler, WorkerFactory
label_desc: Use image node_id 2 for calling the MetaEvaluator obj's underlying member method code with example usage: obj.evaluate(algo, test_episodes_per_task) without return types