class_docstr: Interface definition for core environments forming the basis for actual RL trainable environments.
      
class_docstr_tok: ["Interface","definition","for","core","environments","forming","the","basis","for","actual","RL","trainable","environments","."]
docstr: By default, Core Envs do not have to support KPIs.
docstr_tok: ["By","default",",","Core","Envs","do","not","have","to","support","KPIs","."]
code: def get_kpi_calculator(self) -> Optional[KpiCalculator]:
      """By default, Core Envs do not have to support KPIs."""
      return None
  
imports: from abc import ABC, abstractmethod
  from typing import Tuple, Any, Dict, Union, Iterable, Optional
  import numpy
  from maze.core.annotations import override
  from maze.core.env.environment_context import EnvironmentContext
  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.reward import RewardAggregatorInterface
  from maze.core.env.serializable_env_mixin import SerializableEnvMixin
  from maze.core.env.structured_env import StructuredEnv, StepKeyType, ActorID
  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.rendering.renderer import Renderer
label_desc: Use image node_id 9 for calling the CoreEnv obj's underlying member method code with example usage: obj.get_kpi_calculator() and returns: None