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","."]
code: def get_observation_and_action_dicts(
      self,
      maze_state: Optional[MazeStateType],
      maze_action: Optional[MazeActionType],
      first_step_in_episode: bool,
  ) -> Tuple[
      Optional[Dict[Union[int, str], Any]],
      Optional[Dict[Union[int, str], Any]],
  ]:
      raise NotImplementedError
  
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 7 for calling the ActionRecordingWrapper obj's underlying member method code with example usage: obj.get_observation_and_action_dicts(maze_state, maze_action, first_step_in_episode) without return types