class_docstr: Base class for (gym style) environments wrapping a core environment and defining state and execution interfaces.
  The aim of this class is to provide reusable functionality across different gym environments.
  This functionality comprises for example the reset-function, the step-function or the render-function.
  
  :param core_env: Core environment.
  :param action_conversion_dict: A dictionary with action conversion interface implementation
                                   and policy names as keys.
  :param observation_conversion_dict: A dictionary with observation conversion interface implementation
                                    and policy names as keys.
class_docstr_tok: ["Base","class","for","(","gym","style",")","environments","wrapping","a","core","environment","and","defining","state","and","execution","interfaces",".","The","aim","of","this","class","is","to","provide","reusable","functionality","across","different","gym","environments",".","This","functionality","comprises","for","example","the","reset-function",",","the","step-function","or","the","render-function",".",":","param","core_env",":","Core","environment",".",":","param","action_conversion_dict",":","A","dictionary","with","action","conversion","interface","implementation","and","policy","names","as","keys",".",":","param","observation_conversion_dict",":","A","dictionary","with","observation","conversion","interface","implementation","and","policy","names","as","keys","."]
docstr: Take environment step without converting the state into and observation.
  
  :param action: the action the agent wants to take.
  :return: reward, done, info.
docstr_tok: ["Take","environment","step","without","converting","the","state","into","and","observation",".",":","param","action",":","the","action","the","agent","wants","to","take",".",":","return",":","reward",",","done",",","info","."]
code: def _step_core_env(
      self, action: ActionType
  ) -> Tuple[float, bool, Dict[Any, Any]]:
      """Take environment step without converting the state into and observation.
  
      :param action: the action the agent wants to take.
      :return: reward, done, info.
      """
      last_env_time = self.get_env_time()
  
      # record the last action
      self.last_action = action
  
      # compile action object
      maze_state = self.core_env.get_maze_state()
      maze_action = self.action_conversion.space_to_maze(
          action, maze_state
      )
  
      # take environment step
      maze_state, reward, done, info = self.core_env.step(maze_action)
  
      if (
          self.is_single_substep_env
          or last_env_time != self.get_env_time()
      ):
          # reward captured immediately after the reward aggregation
          self.reward_events.reward_original(value=reward)
  
          # record the last maze action
          self.last_maze_action = maze_action
  
          # For single sub-step core envs which do not manage their env time:
          # Schedule a new step and clear event logs automatically
          if (
              self.is_single_substep_env
              and last_env_time == self.get_env_time()
          ):
              self.core_env.context.increment_env_step()
  
          # ensure that all reward aggregator are cleared
          self.core_env.context.event_service.clear_pubsub()
  
      return reward, done, info
  
imports: from copy import deepcopy
  from typing import Any, Tuple, Dict, Iterable, Optional, Union, TypeVar, Generic
  import gym
  import numpy
  from maze.core.annotations import override
  from maze.core.env.action_conversion import ActionConversionInterface, ActionType
  from maze.core.env.base_env import BaseEnv
  from maze.core.env.core_env import CoreEnv
  from maze.core.env.event_env_mixin import EventEnvMixin
  from maze.core.env.maze_action import MazeActionType
  from maze.core.env.maze_state import MazeStateType
  from maze.core.env.observation_conversion import ObservationConversionInterface, ObservationType
  from maze.core.env.recordable_env_mixin import RecordableEnvMixin
  from maze.core.env.simulated_env_mixin import SimulatedEnvMixin
  from maze.core.env.structured_env import StructuredEnv, StepKeyType, ActorID
  from maze.core.env.structured_env_spaces_mixin import StructuredEnvSpacesMixin
  from maze.core.env.time_env_mixin import TimeEnvMixin
  from maze.core.events.event_record import EventRecord
  from maze.core.log_events.kpi_calculator import KpiCalculator
  from maze.core.log_events.monitoring_events import RewardEvents
  from maze.core.rendering.renderer import Renderer
  from maze.core.wrappers.wrapper import Wrapper
label_desc: Use image node_id 27 for calling the MazeEnv obj's underlying member method code with example usage: obj._step_core_env(action) and returns: reward,  done,  info