code: def generate_sampled_graph_and_labels(
      triplets,
      sample_size,
      split_size,
      num_rels,
      adj_list,
      degrees,
      negative_rate,
      sampler="uniform",
  ):
      """Get training graph and signals
      First perform edge neighborhood sampling on graph, then perform negative
      sampling to generate negative samples
      """
      # perform edge neighbor sampling
      if sampler == "uniform":
          edges = sample_edge_uniform(
              adj_list, degrees, len(triplets), sample_size
          )
      elif sampler == "neighbor":
          edges = sample_edge_neighborhood(
              adj_list, degrees, len(triplets), sample_size
          )
      else:
          raise ValueError(
              "Sampler type must be either 'uniform' or 'neighbor'."
          )
  
      # relabel nodes to have consecutive node ids
      edges = triplets[edges]
      src, rel, dst = edges.transpose()
      uniq_v, edges = np.unique((src, dst), return_inverse=True)
      src, dst = np.reshape(edges, (2, -1))
      relabeled_edges = np.stack((src, rel, dst)).transpose()
  
      # negative sampling
      samples, labels = negative_sampling(
          relabeled_edges, len(uniq_v), negative_rate
      )
  
      # further split graph, only half of the edges will be used as graph
      # structure, while the rest half is used as unseen positive samples
      split_size = int(sample_size * split_size)
      graph_split_ids = np.random.choice(
          np.arange(sample_size), size=split_size, replace=False
      )
      src = src[graph_split_ids]
      dst = dst[graph_split_ids]
      rel = rel[graph_split_ids]
  
      # build DGL graph
      print("# sampled nodes: {}".format(len(uniq_v)))
      print("# sampled edges: {}".format(len(src) * 2))
      g, rel, norm = build_graph_from_triplets(
          len(uniq_v), num_rels, (src, rel, dst)
      )
      return g, uniq_v, rel, norm, samples, labels
  
file_path: dgl/examples/tensorflow/rgcn/utils.py
imports: import dgl
  import numpy
  import tensorflow
label_desc: Use image node_id 4 for calling a global function with example usage: generate_sampled_graph_and_labels(triplets, sample_size, split_size, num_rels, adj_list, degrees, negative_rate, sampler) and returns: g,  uniq_v,  rel,  norm,  samples,  labels