class_docstr: General abstract class for rollout runners.
  
  Offers general structure, plus a couple of helper methods for env instantiation and performing the rollout.
  
  :param n_episodes: Count of episodes to run. If explicit seeds are given the actual number of episodes is given by
                     min(n_episodes, n_seeds).
  :param max_episode_steps: Count of steps to run in each episode (if environment returns done, the episode
                            will be finished earlier though).
  :param deterministic: Deterministic or stochastic action sampling.
  :param record_trajectory: Whether to record trajectory data.
  :param record_event_logs: Whether to record event logs.
class_docstr_tok: ["General","abstract","class","for","rollout","runners",".","Offers","general","structure",",","plus","a","couple","of","helper","methods","for","env","instantiation","and","performing","the","rollout",".",":","param","n_episodes",":","Count","of","episodes","to","run",".","If","explicit","seeds","are","given","the","actual","number","of","episodes","is","given","by","min","(","n_episodes",",","n_seeds",")",".",":","param","max_episode_steps",":","Count","of","steps","to","run","in","each","episode","(","if","environment","returns","done",",","the","episode","will","be","finished","earlier","though",")",".",":","param","deterministic",":","Deterministic","or","stochastic","action","sampling",".",":","param","record_trajectory",":","Whether","to","record","trajectory","data",".",":","param","record_event_logs",":","Whether","to","record","event","logs","."]
docstr: Parse the supplied Hydra config and perform the run.
docstr_tok: ["Parse","the","supplied","Hydra","config","and","perform","the","run","."]
code: def run(self) -> None:
      """Parse the supplied Hydra config and perform the run."""
      # If this is run from command line using Hydra, Hydra is by default configured to create
      # a fresh output directory for each run.
      # However, to ensure model states, normalization stats and else are loaded from expected
      # locations, we will change the dir back to the original working dir for the initialization
      # (and then change it back so that all later script output lands in the hydra output dir as expected)
      start_time = time.time()
      self.run_with(
          self._cfg.env,
          self._cfg.wrappers if "wrappers" in self._cfg else {},
          self._cfg.policy,
      )
      print(f"Rollout took {time.time() - start_time:.3f} seconds")
  
imports: import time
  from abc import ABC, abstractmethod
  from typing import Callable, Optional, List, Any
  import numpy
  from omegaconf import DictConfig
  from maze.core.agent.policy import Policy
  from maze.core.annotations import override
  from maze.core.env.maze_env import MazeEnv
  from maze.core.env.observation_conversion import ObservationType
  from maze.core.env.structured_env import StructuredEnv
  from maze.core.utils.config_utils import EnvFactory, SwitchWorkingDirectoryToInput
  from maze.core.utils.factory import Factory, ConfigType, CollectionOfConfigType
  from maze.core.utils.seeding import MazeSeeding
  from maze.core.wrappers.time_limit_wrapper import TimeLimitWrapper
  from maze.core.wrappers.trajectory_recording_wrapper import TrajectoryRecordingWrapper
  from maze.runner import Runner
  from maze.utils.bcolors import BColors
label_desc: Use image node_id 3 for calling the RolloutRunner obj's underlying member method code with example usage: obj.run() without return types