class_docstr: An `EventAccumulator` takes an event generator, and accumulates the
  values.
  
  The `EventAccumulator` is intended to provide a convenient Python interface
  for loading Event data written during a TensorFlow run. TensorFlow writes out
  `Event` protobuf objects, which have a timestamp and step number, and often
  contain a `Summary`. Summaries can have different kinds of data like an image,
  a scalar value, or a histogram. The Summaries also have a tag, which we use to
  organize logically related data. The `EventAccumulator` supports retrieving
  the `Event` and `Summary` data by its tag.
  
  Calling `Tags()` gets a map from `tagType` (e.g. `'images'`,
  `'compressedHistograms'`, `'scalars'`, etc) to the associated tags for those
  data types. Then, various functional endpoints (eg
  `Accumulator.Scalars(tag)`) allow for the retrieval of all data
  associated with that tag.
  
  The `Reload()` method synchronously loads all of the data written so far.
  
  Histograms, audio, and images are very large, so storing all of them is not
  recommended.
  
  Fields:
    audios: A reservoir.Reservoir of audio summaries.
    compressed_histograms: A reservoir.Reservoir of compressed
        histogram summaries.
    histograms: A reservoir.Reservoir of histogram summaries.
    images: A reservoir.Reservoir of image summaries.
    most_recent_step: Step of last Event proto added. This should only
        be accessed from the thread that calls Reload. This is -1 if
        nothing has been loaded yet.
    most_recent_wall_time: Timestamp of last Event proto added. This is
        a float containing seconds from the UNIX epoch, or -1 if
        nothing has been loaded yet. This should only be accessed from
        the thread that calls Reload.
    path: A file path to a directory containing tf events files, or a single
        tf events file. The accumulator will load events from this path.
    scalars: A reservoir.Reservoir of scalar summaries.
    tensors: A reservoir.Reservoir of tensor summaries.
  
  @@Tensors
class_docstr_tok: ["An","`","EventAccumulator","`","takes","an","event","generator",",","and","accumulates","the","values",".","The","`","EventAccumulator","`","is","intended","to","provide","a","convenient","Python","interface","for","loading","Event","data","written","during","a","TensorFlow","run",".","TensorFlow","writes","out","`","Event","`","protobuf","objects",",","which","have","a","timestamp","and","step","number",",","and","often","contain","a","`","Summary","`",".","Summaries","can","have","different","kinds","of","data","like","an","image",",","a","scalar","value",",","or","a","histogram",".","The","Summaries","also","have","a","tag",",","which","we","use","to","organize","logically","related","data",".","The","`","EventAccumulator","`","supports","retrieving","the","`","Event","`","and","`","Summary","`","data","by","its","tag",".","Calling","`","Tags","(",")","`","gets","a","map","from","`","tagType","`","(","e.g",".","`","'images","'","`",",","`","'compressedHistograms","'","`",",","`","'scalars","'","`",",","etc",")","to","the","associated","tags","for","those","data","types",".","Then",",","various","functional","endpoints","(","eg","`","Accumulator.Scalars","(","tag",")","`",")","allow","for","the","retrieval","of","all","data","associated","with","that","tag",".","The","`","Reload","(",")","`","method","synchronously","loads","all","of","the","data","written","so","far",".","Histograms",",","audio",",","and","images","are","very","large",",","so","storing","all","of","them","is","not","recommended",".","Fields",":","audios",":","A","reservoir.Reservoir","of","audio","summaries",".","compressed_histograms",":","A","reservoir.Reservoir","of","compressed","histogram","summaries",".","histograms",":","A","reservoir.Reservoir","of","histogram","summaries",".","images",":","A","reservoir.Reservoir","of","image","summaries",".","most_recent_step",":","Step","of","last","Event","proto","added",".","This","should","only","be","accessed","from","the","thread","that","calls","Reload",".","This","is","-1","if","nothing","has","been","loaded","yet",".","most_recent_wall_time",":","Timestamp","of","last","Event","proto","added",".","This","is","a","float","containing","seconds","from","the","UNIX","epoch",",","or","-1","if","nothing","has","been","loaded","yet",".","This","should","only","be","accessed","from","the","thread","that","calls","Reload",".","path",":","A","file","path","to","a","directory","containing","tf","events","files",",","or","a","single","tf","events","file",".","The","accumulator","will","load","events","from","this","path",".","scalars",":","A","reservoir.Reservoir","of","scalar","summaries",".","tensors",":","A","reservoir.Reservoir","of","tensor","summaries",".","@","@","Tensors"]
docstr: Construct the `EventAccumulator`.
  
  Args:
    path: A file path to a directory containing tf events files, or a single
      tf events file. The accumulator will load events from this path.
    size_guidance: Information on how much data the EventAccumulator should
      store in memory. The DEFAULT_SIZE_GUIDANCE tries not to store too much
      so as to avoid OOMing the client. The size_guidance should be a map
      from a `tagType` string to an integer representing the number of
      items to keep per tag for items of that `tagType`. If the size is 0,
      all events are stored.
    compression_bps: Information on how the `EventAccumulator` should compress
      histogram data for the `CompressedHistograms` tag (for details see
      `ProcessCompressedHistogram`).
    purge_orphaned_data: Whether to discard any events that were "orphaned" by
      a TensorFlow restart.
docstr_tok: ["Construct","the","`","EventAccumulator","`",".","Args",":","path",":","A","file","path","to","a","directory","containing","tf","events","files",",","or","a","single","tf","events","file",".","The","accumulator","will","load","events","from","this","path",".","size_guidance",":","Information","on","how","much","data","the","EventAccumulator","should","store","in","memory",".","The","DEFAULT_SIZE_GUIDANCE","tries","not","to","store","too","much","so","as","to","avoid","OOMing","the","client",".","The","size_guidance","should","be","a","map","from","a","`","tagType","`","string","to","an","integer","representing","the","number","of","items","to","keep","per","tag","for","items","of","that","`","tagType","`",".","If","the","size","is","0",",","all","events","are","stored",".","compression_bps",":","Information","on","how","the","`","EventAccumulator","`","should","compress","histogram","data","for","the","`","CompressedHistograms","`","tag","(","for","details","see","`","ProcessCompressedHistogram","`",")",".","purge_orphaned_data",":","Whether","to","discard","any","events","that","were","``","orphaned","''","by","a","TensorFlow","restart","."]
code: def __init__(
      self,
      path,
      size_guidance=None,
      compression_bps=NORMAL_HISTOGRAM_BPS,
      purge_orphaned_data=True,
  ):
      """Construct the `EventAccumulator`.
  
      Args:
        path: A file path to a directory containing tf events files, or a single
          tf events file. The accumulator will load events from this path.
        size_guidance: Information on how much data the EventAccumulator should
          store in memory. The DEFAULT_SIZE_GUIDANCE tries not to store too much
          so as to avoid OOMing the client. The size_guidance should be a map
          from a `tagType` string to an integer representing the number of
          items to keep per tag for items of that `tagType`. If the size is 0,
          all events are stored.
        compression_bps: Information on how the `EventAccumulator` should compress
          histogram data for the `CompressedHistograms` tag (for details see
          `ProcessCompressedHistogram`).
        purge_orphaned_data: Whether to discard any events that were "orphaned" by
          a TensorFlow restart.
      """
      size_guidance = size_guidance or DEFAULT_SIZE_GUIDANCE
      sizes = {}
      for key in DEFAULT_SIZE_GUIDANCE:
          if key in size_guidance:
              sizes[key] = size_guidance[key]
          else:
              sizes[key] = DEFAULT_SIZE_GUIDANCE[key]
  
      self._first_event_timestamp = None
      self.scalars = reservoir.Reservoir(size=sizes[SCALARS])
  
      self._graph = None
      self._graph_from_metagraph = False
      self._meta_graph = None
      self._tagged_metadata = {}
      self.summary_metadata = {}
      self.histograms = reservoir.Reservoir(size=sizes[HISTOGRAMS])
      self.compressed_histograms = reservoir.Reservoir(
          size=sizes[COMPRESSED_HISTOGRAMS], always_keep_last=False
      )
      self.images = reservoir.Reservoir(size=sizes[IMAGES])
      self.audios = reservoir.Reservoir(size=sizes[AUDIO])
      self.tensors = reservoir.Reservoir(size=sizes[TENSORS])
  
      # Keep a mapping from plugin name to a dict mapping from tag to plugin data
      # content obtained from the SummaryMetadata (metadata field of Value) for
      # that plugin (This is not the entire SummaryMetadata proto - only the
      # content for that plugin). The SummaryWriter only keeps the content on the
      # first event encountered per tag, so we must store that first instance of
      # content for each tag.
      self._plugin_to_tag_to_content = collections.defaultdict(dict)
  
      self._generator_mutex = threading.Lock()
      self.path = path
      self._generator = _GeneratorFromPath(path)
  
      self._compression_bps = compression_bps
      self.purge_orphaned_data = purge_orphaned_data
  
      self.most_recent_step = -1
      self.most_recent_wall_time = -1
      self.file_version = None
  
      # Name of the source writer that writes the event.
      self._source_writer = None
  
      # The attributes that get built up by the accumulator
      self.accumulated_attrs = (
          "scalars",
          "histograms",
          "compressed_histograms",
          "images",
          "audios",
      )
      self._tensor_summaries = {}
  
imports: import collections
  import dataclasses
  import threading
  from typing import Optional, Sequence, Tuple
  from tensorboard.backend.event_processing import directory_watcher
  from tensorboard.backend.event_processing import event_file_loader
  from tensorboard.backend.event_processing import event_util
  from tensorboard.backend.event_processing import io_wrapper
  from tensorboard.backend.event_processing import plugin_asset_util
  from tensorboard.backend.event_processing import reservoir
  from tensorboard.backend.event_processing import tag_types
  from tensorboard.compat.proto import config_pb2
  from tensorboard.compat.proto import event_pb2
  from tensorboard.compat.proto import graph_pb2
  from tensorboard.compat.proto import meta_graph_pb2
  from tensorboard.compat.proto import tensor_pb2
  from tensorboard.plugins.distribution import compressor
  from tensorboard.util import tb_logging
label_desc: Use image node_id 1 to create a new EventAccumulator object  with example: obj = EventAccumulator(path, size_guidance, compression_bps, purge_orphaned_data)