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: Purge all events that have occurred after the given event.step.
  
  If by_tags is True, purge all events that occurred after the given
  event.step, but only for the tags that the event has. Non-sequential
  event.steps suggest that a TensorFlow restart occurred, and we discard
  the out-of-order events to display a consistent view in TensorBoard.
  
  Discarding by tags is the safer method, when we are unsure whether a restart
  has occurred, given that threading in supervisor can cause events of
  different tags to arrive with unsynchronized step values.
  
  If by_tags is False, then purge all events with event.step greater than the
  given event.step. This can be used when we are certain that a TensorFlow
  restart has occurred and these events can be discarded.
  
  Args:
    event: The event to use as reference for the purge. All events with
      the same tags, but with a greater event.step will be purged.
    by_tags: Bool to dictate whether to discard all out-of-order events or
      only those that are associated with the given reference event.
docstr_tok: ["Purge","all","events","that","have","occurred","after","the","given","event.step",".","If","by_tags","is","True",",","purge","all","events","that","occurred","after","the","given","event.step",",","but","only","for","the","tags","that","the","event","has",".","Non-sequential","event.steps","suggest","that","a","TensorFlow","restart","occurred",",","and","we","discard","the","out-of-order","events","to","display","a","consistent","view","in","TensorBoard",".","Discarding","by","tags","is","the","safer","method",",","when","we","are","unsure","whether","a","restart","has","occurred",",","given","that","threading","in","supervisor","can","cause","events","of","different","tags","to","arrive","with","unsynchronized","step","values",".","If","by_tags","is","False",",","then","purge","all","events","with","event.step","greater","than","the","given","event.step",".","This","can","be","used","when","we","are","certain","that","a","TensorFlow","restart","has","occurred","and","these","events","can","be","discarded",".","Args",":","event",":","The","event","to","use","as","reference","for","the","purge",".","All","events","with","the","same","tags",",","but","with","a","greater","event.step","will","be","purged",".","by_tags",":","Bool","to","dictate","whether","to","discard","all","out-of-order","events","or","only","those","that","are","associated","with","the","given","reference","event","."]
code: def _Purge(self, event, by_tags):
      """Purge all events that have occurred after the given event.step.
  
      If by_tags is True, purge all events that occurred after the given
      event.step, but only for the tags that the event has. Non-sequential
      event.steps suggest that a TensorFlow restart occurred, and we discard
      the out-of-order events to display a consistent view in TensorBoard.
  
      Discarding by tags is the safer method, when we are unsure whether a restart
      has occurred, given that threading in supervisor can cause events of
      different tags to arrive with unsynchronized step values.
  
      If by_tags is False, then purge all events with event.step greater than the
      given event.step. This can be used when we are certain that a TensorFlow
      restart has occurred and these events can be discarded.
  
      Args:
        event: The event to use as reference for the purge. All events with
          the same tags, but with a greater event.step will be purged.
        by_tags: Bool to dictate whether to discard all out-of-order events or
          only those that are associated with the given reference event.
      """
      ## Keep data in reservoirs that has a step less than event.step
      _NotExpired = lambda x: x.step < event.step
  
      if by_tags:
  
          def _ExpiredPerTag(value):
              return [
                  getattr(self, x).FilterItems(_NotExpired, value.tag)
                  for x in self.accumulated_attrs
              ]
  
          expired_per_tags = [
              _ExpiredPerTag(value) for value in event.summary.value
          ]
          expired_per_type = [sum(x) for x in zip(*expired_per_tags)]
      else:
          expired_per_type = [
              getattr(self, x).FilterItems(_NotExpired)
              for x in self.accumulated_attrs
          ]
  
      if sum(expired_per_type) > 0:
          purge_msg = _GetPurgeMessage(
              self.most_recent_step,
              self.most_recent_wall_time,
              event.step,
              event.wall_time,
              *expired_per_type,
          )
          logger.warning(purge_msg)
  
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 30 for calling the EventAccumulator obj's underlying member method code with example usage: obj._Purge(event, by_tags) and returns: unknown