class_docstr: A subgraph of a TensorFlow computational graph.
  
  TensorFlow graphs are often too low-level to represent our conceptual
  understanding of a model
  
  OverlayGraph can be used to represent a simplified version of a TensorFlow
  graph. Each node corresponds to a node in the original TensorFlow graph, and
  edges correspond to paths through the original graph.
code: def filter(self, keep_nodes, pass_through=True):
      keep_nodes = [self[n].name for n in keep_nodes]
      old_nodes = set(self.name_map.keys())
      new_nodes = set(keep_nodes)
      no_pass_through = set(self.no_pass_through)
  
      if not pass_through:
          no_pass_through += old_nodes - new_nodes
  
      keep_nodes = [
          node for node in self.name_map if node in keep_nodes
      ]
      new_overlay = OverlayGraph(
          self.tf_graph, keep_nodes, no_pass_through, prev_overlay=self
      )
      for node in new_overlay.nodes:
          node.sub_structure = self[node].sub_structure
      return new_overlay
  
imports: from collections import defaultdict
  import numpy
  import tensorflow
label_desc: Use image node_id 7 for calling the OverlayGraph obj's underlying member method code with example usage: obj.filter(keep_nodes, pass_through) and returns: new_overlay