code: def forward(self, blocks, x):
      h = x
      for l, (layer, block) in enumerate(zip(self.layers, blocks)):
          # We need to first copy the representation of nodes on the RHS from the
          # appropriate nodes on the LHS.
          # Note that the shape of h is (num_nodes_LHS, D) and the shape of h_dst
          # would be (num_nodes_RHS, D)
          h_dst = h[: block.num_dst_nodes()]
          # Then we compute the updated representation on the RHS.
          # The shape of h now becomes (num_nodes_RHS, D)
          h = layer(block, (h, h_dst))
          if l != len(self.layers) - 1:
              h = self.activation(h)
              h = self.dropout(h)
      return h
  
file_path: dgl/examples/pytorch/ogb/ogbn-products/graphsage/main.py
imports: import argparse
  import time
  import dgl
  import dgl.nn.pytorch
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  import torch.optim
  import tqdm
  from ogb.nodeproppred import DglNodePropPredDataset
label_desc: Use image node_id 2 for calling the SAGE obj's underlying member method code with example usage: obj.forward(blocks, x) and returns: h