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: Receive statistics from the subjacent aggregation level
  
  :param stats: The statistics dictionary
docstr_tok: ["Receive","statistics","from","the","subjacent","aggregation","level",":","param","stats",":","The","statistics","dictionary"]
code: def receive(self, stats: LogStats) -> None:
      """
      Receive statistics from the subjacent aggregation level
  
      :param stats: The statistics dictionary
      """
      # add the individual statistics values
      for (event, name, group), value in stats.items():
          self.add_value(event, value, name=name, group=group)
  
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 2 for calling the LogStatsAggregator obj's underlying member method code with example usage: obj.receive(stats) without return types