class_docstr: An Action Recording Wrapper that records for (sub-)step the respective MazeAction or agent action taken.
  
  :param env: Environment to wrap.
  :param record_maze_actions: If True maze action objects are recorded.
  :param record_actions: If True agent actions are recorded.
  :param output_dir: Path where to store the action records.
class_docstr_tok: ["An","Action","Recording","Wrapper","that","records","for","(","sub-",")","step","the","respective","MazeAction","or","agent","action","taken",".",":","param","env",":","Environment","to","wrap",".",":","param","record_maze_actions",":","If","True","maze","action","objects","are","recorded",".",":","param","record_actions",":","If","True","agent","actions","are","recorded",".",":","param","output_dir",":","Path","where","to","store","the","action","records","."]
docstr: Intercept ``ObservationWrapper.step`` and map observation.
docstr_tok: ["Intercept","``","ObservationWrapper.step","``","and","map","observation","."]
code: def step(self, action) -> Tuple[Any, Any, bool, Dict[Any, Any]]:
      """Intercept ``ObservationWrapper.step`` and map observation."""
  
      # get current actor id
      actor_id = self.env.actor_id()
      curr_env_time = self.env.get_env_time()
  
      # take actual step
      observation, reward, done, info = self.env.step(action)
      self._cum_reward += reward
  
      # record action taken
      last_action = self.env.get_maze_action()
      if self.record_maze_actions:
          self.action_record.set_maze_action(
              curr_env_time, maze_action=last_action
          )
  
      if self.record_actions:
          self.action_record.set_agent_action(
              curr_env_time, actor_id=actor_id, action=action
          )
  
      return observation, reward, done, info
  
file_path: maze/maze/core/wrappers/action_recording_wrapper.py
imports: from typing import Dict, Any, Tuple, Optional, Union
  from pathlib import Path
  from maze.core.annotations import override
  from maze.core.env.core_env import CoreEnv
  from maze.core.env.maze_action import MazeActionType
  from maze.core.env.maze_env import MazeEnv
  from maze.core.env.maze_state import MazeStateType
  from maze.core.trajectory_recording.records.action_record import ActionRecord
  from maze.core.wrappers.wrapper import ObservationWrapper, Wrapper
label_desc: Use image node_id 2 for calling the ActionRecordingWrapper obj's underlying member method code with example usage: obj.step(action) and returns: observation,  reward,  done,  info