code: def forward(self, g, z, x=None, edge_weight=None):
      z_emb = self.z_embedding(z)
      if z_emb.ndim == 3:  # in case z has multiple integer labels
          z_emb = z_emb.sum(dim=1)
      if x is not None:
          x = torch.cat([z_emb, x.to(torch.float)], 1)
      else:
          x = z_emb
      xs = [x]
  
      for conv in self.convs:
          xs += [
              F.dropout(
                  torch.tanh(conv(g, xs[-1], edge_weight=edge_weight)),
                  p=self.dropout,
                  training=self.training,
              )
          ]
      x = torch.cat(xs[1:], dim=-1)
  
      # global pooling
      x = self.sort_pool(g, x)
      x = x.unsqueeze(1)  # [num_graphs, 1, k * hidden]
      x = F.relu(self.conv1(x))
      x = self.maxpool1d(x)
      x = F.relu(self.conv2(x))
      x = x.view(x.size(0), -1)  # [num_graphs, dense_dim]
  
      # MLP.
      x = F.relu(self.lin1(x))
      x = F.dropout(x, p=0.5, training=self.training)
      x = self.lin2(x)
      return x
  
file_path: dgl/examples/pytorch/ogb/ngnn_seal/models.py
imports: import math
  import torch
  import torch.nn.functional
  from dgl.nn import GraphConv, SortPooling
  from torch.nn import Conv1d, Embedding, Linear, MaxPool1d, ModuleList
label_desc: Use image node_id 2 for calling the DGCNN obj's underlying member method code with example usage: obj.forward(g, z, x, edge_weight) and returns: x