class_docstr: A minimal interface concrete log statistics writers must implement.
class_docstr_tok: ["A","minimal","interface","concrete","log","statistics","writers","must","implement","."]
docstr: Write the passed statistics dictionary to the log.
  
  :param path: This can be a path-like string to organize the log into different sections.
  :param step: The step number associated with the passed statistics
  :param stats: The statistics dictionary
  
  :return None
docstr_tok: ["Write","the","passed","statistics","dictionary","to","the","log",".",":","param","path",":","This","can","be","a","path-like","string","to","organize","the","log","into","different","sections",".",":","param","step",":","The","step","number","associated","with","the","passed","statistics",":","param","stats",":","The","statistics","dictionary",":","return","None"]
code: def write(
      self, path: Optional[str], step: int, stats: LogStats
  ) -> None:
      """
      Write the passed statistics dictionary to the log.
  
      :param path: This can be a path-like string to organize the log into different sections.
      :param step: The step number associated with the passed statistics
      :param stats: The statistics dictionary
  
      :return None
      """
  
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 1 for calling the LogStatsWriter obj's underlying member method code with example usage: obj.write(path, step, stats) without return types