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","."]
code: def __init__(
      self,
      core_env: CoreEnv,
      action_conversion_dict: Dict[
          Union[str, int], ActionConversionInterface
      ],
      observation_conversion_dict: Dict[
          Union[str, int], ObservationConversionInterface
      ],
  ):
      self.core_env = core_env
      """wrapped :class:`~.core_env.CoreEnv`"""
  
      self.maze_env = self
      """direct access to the maze env (useful to bypass the wrapper hierarchy)"""
  
      self.action_conversion_dict = action_conversion_dict
      """The action conversion mapping used by this env."""
      self.observation_conversion_dict = observation_conversion_dict
      """The observation conversion mapping used by this env."""
  
      self._init_spaces()
  
      super().__init__(self.core_env)
  
      # this is required to stay compatible with the gym.Env interface
      self.metadata = {"render.modes": []}
      """Only there to be compatible with gym.core.Env"""
      self.reward_range = (-float("inf"), float("inf"))
      """A tuple (reward min value, reward max value) to be compatible with gym.core.Env"""
      self.spec = None
      """Only there to be compatible with gym.core.Env"""
  
      # last action and maze action, e.g. for recording purposes
      self.last_action = None
      self.last_maze_action = None
  
      # last observation, captured immediately after the observation_conversion mapping
      self.observation_original = None
  
      # create event topics
      self.reward_events = (
          self.core_env.context.event_service.create_event_topic(
              RewardEvents
          )
      )
  
      # Check if the underlying core env has only single sub-step
      agent_counts = self.core_env.agent_counts_dict
      self.is_single_substep_env = (
          len(agent_counts) == 1 and sum(agent_counts.values()) == 1
      )
  
      # Initial env time: Env time this episode started at
      self.initial_env_time = None
  
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 1 to create a new MazeEnv object from inherited base classes: Generic, Wrapper, StructuredEnv, StructuredEnvSpacesMixin, EventEnvMixin, RecordableEnvMixin, TimeEnvMixin with example: obj = MazeEnv(core_env, action_conversion_dict, observation_conversion_dict)