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: Register a new consumer to receive the readily calculated statistics of this aggregator.
  
  :param consumer: The consumer to add
docstr_tok: ["Register","a","new","consumer","to","receive","the","readily","calculated","statistics","of","this","aggregator",".",":","param","consumer",":","The","consumer","to","add"]
code: def register_consumer(self, consumer: LogStatsConsumer) -> None:
      """
      Register a new consumer to receive the readily calculated statistics of this aggregator.
  
      :param consumer: The consumer to add
      """
      self.consumers.append(consumer)
  
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 6 for calling the LogStatsAggregator obj's underlying member method code with example usage: obj.register_consumer(consumer) without return types