code: def ensure_coherence(self):
      # make sure parent paths show up as updated appropriately
      self.modified |= {p for a in self.added for p in iter_prefixes(a)}
      self.modified |= {
          p for u in self.modified for p in iter_prefixes(u)
      }
      self.modified |= {
          p for t in self.typechanged for p in iter_prefixes(t)
      }
  
      # make sure there is no overlap
      self.added -= set(self.typechanged.keys())
      self.modified -= set(self.typechanged.keys())
      self.modified -= self.added
  
imports: from sacred.utils import iter_prefixes, join_paths
label_desc: Use image node_id 4 for calling the ConfigSummary obj's underlying member method code with example usage: obj.ensure_coherence() without return types