docstr: Display the edge list. Compute it if needed.
  NOTE: If the graph is of type Graph() then the displayed undirected
  edges are the same as displayed by networkx Graph(), but the direction
  could be different i.e. an edge displayed by cugraph as (src, dst)
  could be displayed as (dst, src) by networkx.
  cugraph.Graph stores symmetrized edgelist internally. For displaying
  undirected edgelist for a Graph the upper trianglar matrix of the
  symmetrized edgelist is returned.
  networkx.Graph renumbers the input and stores the upper triangle of
  this renumbered input. Since the internal renumbering of networx and
  cugraph is different, the upper triangular matrix of networkx
  renumbered input may not be the same as cugraph's upper trianglar
  matrix of the symmetrized edgelist. Hence the displayed source and
  destination pairs in both will represent the same edge but node values
  could be swapped.
  
  Returns
  -------
  df : cudf.DataFrame
      This cudf.DataFrame wraps source, destination and weight
  
      df[src] : cudf.Series
          contains the source index for each edge
  
      df[dst] : cudf.Series
          contains the destination index for each edge
  
      df[weight] : cudf.Series
          Column is only present for weighted Graph,
          then containing the weight value for each edge
docstr_tok: ["Display","the","edge","list",".","Compute","it","if","needed",".","NOTE",":","If","the","graph","is","of","type","Graph","(",")","then","the","displayed","undirected","edges","are","the","same","as","displayed","by","networkx","Graph","(",")",",","but","the","direction","could","be","different","i.e",".","an","edge","displayed","by","cugraph","as","(","src",",","dst",")","could","be","displayed","as","(","dst",",","src",")","by","networkx",".","cugraph.Graph","stores","symmetrized","edgelist","internally",".","For","displaying","undirected","edgelist","for","a","Graph","the","upper","trianglar","matrix","of","the","symmetrized","edgelist","is","returned",".","networkx.Graph","renumbers","the","input","and","stores","the","upper","triangle","of","this","renumbered","input",".","Since","the","internal","renumbering","of","networx","and","cugraph","is","different",",","the","upper","triangular","matrix","of","networkx","renumbered","input","may","not","be","the","same","as","cugraph","'s","upper","trianglar","matrix","of","the","symmetrized","edgelist",".","Hence","the","displayed","source","and","destination","pairs","in","both","will","represent","the","same","edge","but","node","values","could","be","swapped",".","Returns","--","--","--","-","df",":","cudf.DataFrame","This","cudf.DataFrame","wraps","source",",","destination","and","weight","df","[","src","]",":","cudf.Series","contains","the","source","index","for","each","edge","df","[","dst","]",":","cudf.Series","contains","the","destination","index","for","each","edge","df","[","weight","]",":","cudf.Series","Column","is","only","present","for","weighted","Graph",",","then","containing","the","weight","value","for","each","edge"]
code: def view_edge_list(self):
      """
      Display the edge list. Compute it if needed.
      NOTE: If the graph is of type Graph() then the displayed undirected
      edges are the same as displayed by networkx Graph(), but the direction
      could be different i.e. an edge displayed by cugraph as (src, dst)
      could be displayed as (dst, src) by networkx.
      cugraph.Graph stores symmetrized edgelist internally. For displaying
      undirected edgelist for a Graph the upper trianglar matrix of the
      symmetrized edgelist is returned.
      networkx.Graph renumbers the input and stores the upper triangle of
      this renumbered input. Since the internal renumbering of networx and
      cugraph is different, the upper triangular matrix of networkx
      renumbered input may not be the same as cugraph's upper trianglar
      matrix of the symmetrized edgelist. Hence the displayed source and
      destination pairs in both will represent the same edge but node values
      could be swapped.
  
      Returns
      -------
      df : cudf.DataFrame
          This cudf.DataFrame wraps source, destination and weight
  
          df[src] : cudf.Series
              contains the source index for each edge
  
          df[dst] : cudf.Series
              contains the destination index for each edge
  
          df[weight] : cudf.Series
              Column is only present for weighted Graph,
              then containing the weight value for each edge
      """
      if self.edgelist is None:
          src, dst, weights = graph_primtypes_wrapper.view_edge_list(
              self
          )
          self.edgelist = self.EdgeList(src, dst, weights)
  
      srcCol = self.source_columns
      dstCol = self.destination_columns
      """
          Only use the initial input dataframe  if the graph is directed with:
              1) single vertex column names with integer vertex type
              2) list of vertex column names of size 1 with integer vertex type
          """
      use_initial_input_df = True
  
      if self.input_df is not None:
          if type(srcCol) is list and type(dstCol) is list:
              if len(srcCol) == 1:
                  srcCol = srcCol[0]
                  dstCol = dstCol[0]
                  if self.input_df[srcCol].dtype not in [
                      np.int32,
                      np.int64,
                  ] or self.input_df[dstCol].dtype not in [
                      np.int32,
                      np.int64,
                  ]:
                      # hypergraph case
                      use_initial_input_df = False
              else:
                  use_initial_input_df = False
  
          elif self.input_df[srcCol].dtype not in [
              np.int32,
              np.int64,
          ] or self.input_df[dstCol].dtype not in [np.int32, np.int64]:
              use_initial_input_df = False
      else:
          use_initial_input_df = False
  
      if use_initial_input_df and self.properties.directed:
          edgelist_df = self.input_df
      else:
          edgelist_df = self.edgelist.edgelist_df
          if srcCol is None and dstCol is None:
              srcCol = simpleGraphImpl.srcCol
              dstCol = simpleGraphImpl.dstCol
  
      if use_initial_input_df and not self.properties.directed:
          # unrenumber before extracting the upper triangular part
          # case when the vertex column name is of size 1
          if self.properties.renumbered:
              edgelist_df = self.renumber_map.unrenumber(
                  edgelist_df, simpleGraphImpl.srcCol
              )
              edgelist_df = self.renumber_map.unrenumber(
                  edgelist_df, simpleGraphImpl.dstCol
              )
              edgelist_df = edgelist_df.rename(
                  columns=self.renumber_map.internal_to_external_col_names
              )
              # extract the upper triangular part
              edgelist_df = edgelist_df[
                  edgelist_df[srcCol] <= edgelist_df[dstCol]
              ]
          else:
              edgelist_df = edgelist_df[
                  edgelist_df[simpleGraphImpl.srcCol]
                  <= edgelist_df[simpleGraphImpl.dstCol]
              ]
      elif not use_initial_input_df and self.properties.renumbered:
          # Do not unrenumber the vertices if the initial input df was used
          if not self.properties.directed:
              edgelist_df = edgelist_df[
                  edgelist_df[simpleGraphImpl.srcCol]
                  <= edgelist_df[simpleGraphImpl.dstCol]
              ]
          edgelist_df = self.renumber_map.unrenumber(
              edgelist_df, simpleGraphImpl.srcCol
          )
          edgelist_df = self.renumber_map.unrenumber(
              edgelist_df, simpleGraphImpl.dstCol
          )
          edgelist_df = edgelist_df.rename(
              columns=self.renumber_map.internal_to_external_col_names
          )
  
      if (
          self.vertex_columns is not None
          and len(self.vertex_columns) == 2
      ):
          # single column vertices internally renamed to 'simpleGraphImpl.srcCol'
          # and 'simpleGraphImpl.dstCol'.
          if not set(self.vertex_columns).issubset(
              set(edgelist_df.columns)
          ):
              # Get the initial column names passed by the user.
              if srcCol is not None and dstCol is not None:
                  edgelist_df = edgelist_df.rename(
                      columns={
                          simpleGraphImpl.srcCol: srcCol,
                          simpleGraphImpl.dstCol: dstCol,
                      }
                  )
  
      # FIXME: When renumbered, the MG API uses renumbered col names which
      # is not consistant with the SG API.
  
      self.properties.edge_count = len(edgelist_df)
  
      wgtCol = simpleGraphImpl.edgeWeightCol
      edgelist_df = edgelist_df.rename(
          columns={wgtCol: self.weight_column}
      ).reset_index(drop=True)
  
      return edgelist_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 7 for calling the simpleGraphImpl obj's underlying member method code with example usage: obj.view_edge_list() and returns: edgelist_df