class_docstr: A step-skip-wrapper providing functionality for skipping n_steps environment steps.
  Options for skipping are: (noop: apply the noop action, sticky: apply the last action again).
  
  :param env: Environment to wrap.
  :param n_steps: Total number of steps that should be taken (e.g., n_steps = 1 + n_skip_steps).
  :param skip_mode: Skipping action selection mode (noop, sticky).
class_docstr_tok: ["A","step-skip-wrapper","providing","functionality","for","skipping","n_steps","environment","steps",".","Options","for","skipping","are",":","(","noop",":","apply","the","noop","action",",","sticky",":","apply","the","last","action","again",")",".",":","param","env",":","Environment","to","wrap",".",":","param","n_steps",":","Total","number","of","steps","that","should","be","taken","(","e.g.",",","n_steps","=","1","+","n_skip_steps",")",".",":","param","skip_mode",":","Skipping","action","selection","mode","(","noop",",","sticky",")","."]
docstr: Intercept ``BaseEnv.step`` and map observation.
docstr_tok: ["Intercept","``","BaseEnv.step","``","and","map","observation","."]
code: def step(
      self, action: ActionType
  ) -> Tuple[ObservationType, float, bool, Dict[Any, Any]]:
      """Intercept ``BaseEnv.step`` and map observation."""
  
      # record the actions given until one flat step finished
      self._record_action(action)
      # execute step
      self._steps_done += 1
      observation, reward, done, info = self.env.step(action)
      # prepare reward accumulation
      acc_reward = reward
  
      # skipping is finished if the env is done
      if done or self._steps_done >= self.n_steps:
          self._reset_recording()
          return observation, acc_reward, done, info
  
      # check if all sub-steps have been executed once
      if self.actor_id()[0] != 0:
          # skipping not yet possible, proceed to next sub-step
          return observation, acc_reward, done, info
  
      # continue with replay
      while self._steps_done < self.n_steps:
          self._steps_done += 1
  
          # actual skipping: replay recorded actions
          step_key = self.actor_id()[0]
          action = self._step_actions[step_key]
          observation, reward, done, info = self.env.step(action)
          # accumulate reward and collect events
          acc_reward += reward
          if done:
              break
  
      # skipping finished
      self._reset_recording()
      return observation, acc_reward, done, info
  
file_path: maze/maze/core/wrappers/step_skip_wrapper.py
imports: import copy
  from typing import Any, Dict, Tuple, Union, Optional
  from maze.core.annotations import override
  from maze.core.env.action_conversion import ActionType
  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.env.observation_conversion import ObservationType
  from maze.core.env.simulated_env_mixin import SimulatedEnvMixin
  from maze.core.env.structured_env import StructuredEnv
  from maze.core.env.structured_env_spaces_mixin import StructuredEnvSpacesMixin
  from maze.core.wrappers.wrapper import Wrapper, EnvType
label_desc: Use image node_id 3 for calling the StepSkipWrapper obj's underlying member method code with example usage: obj.step(action) and returns: observation,  acc_reward,  done,  info, observation,  acc_reward,  done,  info, observation,  acc_reward,  done,  info