class_docstr: Complements the event system by providing aggregation functionality. How the events are aggregated
  is specified by the event interface decorators (see event_decorators.py).
  
  Note that the statistics calculation for episode aggregators will automatically be
  triggered on every `increment_log_step()` call.
class_docstr_tok: ["Complements","the","event","system","by","providing","aggregation","functionality",".","How","the","events","are","aggregated","is","specified","by","the","event","interface","decorators","(","see","event_decorators.py",")",".","Note","that","the","statistics","calculation","for","episode","aggregators","will","automatically","be","triggered","on","every","`","increment_log_step","(",")","`","call","."]
docstr: This method is invoked on incrementing the global log step.
docstr_tok: ["This","method","is","invoked","on","incrementing","the","global","log","step","."]
code: def _hook_on_log_step(self) -> None:
      """This method is invoked on incrementing the global log step."""
      # skip auto-reduce if a manual update already took place
      if GlobalLogState.global_step == self.last_stats_step:
          return
  
      self.reduce()
  
imports: from abc import ABC, abstractmethod
  from collections import defaultdict
  from enum import Enum
  from typing import Union, Callable, Dict, Optional, NamedTuple, List, Type, TypeVar, Tuple, Any
  import numpy
  from maze.core.events.event_record import EventRecord
  from maze.core.events.event_topic_factory import event_topic_factory
label_desc: Use image node_id 8 for calling the LogStatsAggregator obj's underlying member method code with example usage: obj._hook_on_log_step() without return types