class_docstr: Event topic class with logging statistics based only on _reward_, therefore applicable to any valid
  reinforcement learning environment.
  
  Defined statistics:
  - Cumulative number of total steps
  - Mean epoch reward and standard deviation
docstr: Event representing a KPI metric (Key Performance Indicator).
  
  KPI metrics are expected to be calculated at the end of the episode. Only one KPI value
  per KPI name per episode should be recorded.
  
  :param name: Name of the KPI metric
  :param value: Value of the KPI metric
docstr_tok: ["Event","representing","a","KPI","metric","(","Key","Performance","Indicator",")",".","KPI","metrics","are","expected","to","be","calculated","at","the","end","of","the","episode",".","Only","one","KPI","value","per","KPI","name","per","episode","should","be","recorded",".",":","param","name",":","Name","of","the","KPI","metric",":","param","value",":","Value","of","the","KPI","metric"]
code: def kpi(self, name: str, value: float):
      """Event representing a KPI metric (Key Performance Indicator).
  
      KPI metrics are expected to be calculated at the end of the episode. Only one KPI value
      per KPI name per episode should be recorded.
  
      :param name: Name of the KPI metric
      :param value: Value of the KPI metric
      """
  
file_path: maze/maze/core/env/base_env_events.py
imports: from abc import ABC
  import numpy
  from maze.core.log_stats.event_decorators import define_episode_stats, define_step_stats, define_epoch_stats, define_stats_grouping
label_desc: Use image node_id 2 for calling the BaseEnvEvents obj's underlying member method code with example usage: obj.kpi(name, value) without return types