code: def forward(self, pair_graph, neg_pair_graph, blocks, x):
      h = x
      for l, (layer, block) in enumerate(zip(self.layers, blocks)):
          h = layer(block, h)
          if l != len(self.layers) - 1:
              h = F.relu(h)
      pos_src, pos_dst = pair_graph.edges()
      neg_src, neg_dst = neg_pair_graph.edges()
      h_pos = self.predictor(h[pos_src] * h[pos_dst])
      h_neg = self.predictor(h[neg_src] * h[neg_dst])
      return h_pos, h_neg
  
file_path: dgl/examples/pytorch/graphsage/link_pred.py
imports: import argparse
  import dgl
  import dgl.nn
  import torch
  import torch.nn
  import torch.nn.functional
  import tqdm
  from dgl.dataloading import as_edge_prediction_sampler, DataLoader, MultiLayerFullNeighborSampler, negative_sampler, NeighborSampler
  from ogb.linkproppred import DglLinkPropPredDataset, Evaluator
label_desc: Use image node_id 2 for calling the SAGE obj's underlying member method code with example usage: obj.forward(pair_graph, neg_pair_graph, blocks, x) and returns: h_pos,  h_neg