class_docstr: Union-find data structure.
  
  Each unionFind instance X maintains a family of disjoint sets of
  hashable objects, supporting the following two methods:
  
  - X[item] returns a name for the set containing the given item.
    Each set is named by an arbitrarily-chosen one of its members; as
    long as the set remains unchanged it will keep the same name. If
    the item is not yet part of a set in X, a new singleton set is
    created for it.
  
  - X.union(item1, item2, ...) merges the sets containing each item
    into a single larger set.  If any item is not yet part of a set
    in X, it is added to X as one of the members of the merged set.
  
    Union-find data structure. Based on Josiah Carlson's code,
    https://code.activestate.com/recipes/215912/
    with significant additional changes by D. Eppstein.
    http://www.ics.uci.edu/~eppstein/PADS/UnionFind.py
docstr: Find the sets containing the objects and merge them all.
docstr_tok: ["Find","the","sets","containing","the","objects","and","merge","them","all","."]
code: def union(self, *objects):
      """Find the sets containing the objects and merge them all."""
      # Find the heaviest root according to its weight.
      roots = iter(
          sorted(
              {self[x] for x in objects},
              key=lambda r: self.weights[r],
              reverse=True,
          )
      )
      try:
          root = next(roots)
      except StopIteration:
          return
  
      for r in roots:
          self.weights[root] += self.weights[r]
          self.parents[r] = root
  
imports: from networkx.utils import groups
label_desc: Use image node_id 5 for calling the UnionFind obj's underlying member method code with example usage: obj.union() without return types