docstr: Returns the bipartite set of nodes. This solely relies on the user's
  call of add_nodes_from with the bipartite parameter. This does not
  parse the graph to compute bipartite sets. If bipartite argument was
  not provided during add_nodes_from(), it raise an exception that the
  graph is not bipartite.
docstr_tok: ["Returns","the","bipartite","set","of","nodes",".","This","solely","relies","on","the","user's","call","of","add_nodes_from","with","the","bipartite","parameter",".","This","does","not","parse","the","graph","to","compute","bipartite","sets",".","If","bipartite","argument","was","not","provided","during","add_nodes_from","(",")",",","it","raise","an","exception","that","the","graph","is","not","bipartite","."]
code: def sets(self):
      """
      Returns the bipartite set of nodes. This solely relies on the user's
      call of add_nodes_from with the bipartite parameter. This does not
      parse the graph to compute bipartite sets. If bipartite argument was
      not provided during add_nodes_from(), it raise an exception that the
      graph is not bipartite.
      """
      # TO DO: Call coloring algorithm
      set_names = [i for i in self._nodes.keys() if i != "all_nodes"]
      if self.properties.bipartite:
          top = self._nodes[set_names[0]]
          if len(set_names) == 2:
              bottom = self._nodes[set_names[1]]
          else:
              bottom = cudf.Series(
                  set(self.nodes().values_host) - set(top.values_host)
              )
          return top, bottom
      else:
          return {k: self._nodes[k] for k in set_names}
  
file_path: cugraph/python/cugraph/cugraph/structure/graph_implementation/npartiteGraph.py
imports: from .simpleGraph import simpleGraphImpl
  import cudf
label_desc: Use image node_id 3 for calling the npartiteGraphImpl obj's underlying member method code with example usage: obj.sets() and returns: top,  bottom, unknown