docs: def search(self, pattern):
          """Searches the graph for a sub-graph that matches the given pattern
          and returns the first match it finds.
          """
          for node in self.nodes.values():
              match, following = pattern.match(self, node)
              if match:
                  return match, following
          return [], None