docstr: Compute vertex pairs that are two hops apart. The resulting pairs are
  sorted before returning.
  
  Returns
  -------
  df : cudf.DataFrame
      df[first] : cudf.Series
          the first vertex id of a pair, if an external vertex id
          is defined by only one column
      df[second] : cudf.Series
          the second vertex id of a pair, if an external vertex id
          is defined by only one column
docstr_tok: ["Compute","vertex","pairs","that","are","two","hops","apart",".","The","resulting","pairs","are","sorted","before","returning",".","Returns","--","--","--","-","df",":","cudf.DataFrame","df","[","first","]",":","cudf.Series","the","first","vertex","id","of","a","pair",",","if","an","external","vertex","id","is","defined","by","only","one","column","df","[","second","]",":","cudf.Series","the","second","vertex","id","of","a","pair",",","if","an","external","vertex","id","is","defined","by","only","one","column"]
code: def get_two_hop_neighbors(self, start_vertices=None):
      """
      Compute vertex pairs that are two hops apart. The resulting pairs are
      sorted before returning.
  
      Returns
      -------
      df : cudf.DataFrame
          df[first] : cudf.Series
              the first vertex id of a pair, if an external vertex id
              is defined by only one column
          df[second] : cudf.Series
              the second vertex id of a pair, if an external vertex id
              is defined by only one column
      """
  
      if isinstance(start_vertices, int):
          start_vertices = [start_vertices]
  
      if isinstance(start_vertices, list):
          start_vertices = cudf.Series(start_vertices)
  
      if self.properties.renumbered is True:
          if start_vertices is not None:
              start_vertices = self.renumber_map.to_internal_vertex_id(
                  start_vertices
              )
              start_vertices_type = self.edgelist.edgelist_df[
                  "src"
              ].dtype
              start_vertices = start_vertices.astype(
                  start_vertices_type
              )
      do_expensive_check = False
      first, second = pylibcugraph_get_two_hop_neighbors(
          resource_handle=ResourceHandle(),
          graph=self._plc_graph,
          start_vertices=start_vertices,
          do_expensive_check=do_expensive_check,
      )
  
      df = cudf.DataFrame()
      df["first"] = first
      df["second"] = second
  
      if self.properties.renumbered is True:
          df = self.renumber_map.unrenumber(df, "first")
          df = self.renumber_map.unrenumber(df, "second")
  
      return df
  
imports: from cugraph.structure import graph_primtypes_wrapper
  from cugraph.structure.graph_primtypes_wrapper import Direction
  from cugraph.structure.symmetrize import symmetrize
  from cugraph.structure.number_map import NumberMap
  import cugraph.dask.common.mg_utils
  import cudf
  import dask_cudf
  import cugraph.dask.comms.comms
  import pandas
  import numpy
  import warnings
  from cugraph.dask.structure import replication
  from typing import Union, Dict
  from pylibcugraph import get_two_hop_neighbors, select_random_vertices
  from pylibcugraph import ResourceHandle, GraphProperties, SGGraph
label_desc: Use image node_id 17 for calling the simpleGraphImpl obj's underlying member method code with example usage: obj.get_two_hop_neighbors(start_vertices) and returns: df