code: def forward(self, data):
      x, edge_index, batch = data.x, data.edge_index, data.batch
      if self.use_xg:
          # xg is of shape [n_graphs, feat_dim]
          xg = self.bn1_xg(data.xg) if self.bn else xg
          xg = F.relu(self.lin1_xg(xg))
          xg = self.bn2_xg(xg) if self.bn else xg
          xg = F.relu(self.lin2_xg(xg))
      else:
          xg = None
  
      x = self.bn_feat(x) if self.bn else x
      x = F.relu(self.conv_feat(x, edge_index))
      for i, conv in enumerate(self.convs):
          x_ = self.bns_conv[i](x) if self.bn else x
          x_ = F.relu(conv(x_, edge_index))
          x = x + x_ if self.conv_residual else x_
      local_rep = x
      gate = 1 if self.gating is None else self.gating(x)
      x = self.global_pool(x * gate, batch)
      x = x if xg is None else x + xg
  
      for i, lin in enumerate(self.lins):
          x_ = self.bns_fc[i](x) if self.bn else x
          x_ = F.relu(lin(x_))
          x = x + x_ if self.fc_residual else x_
  
      x = self.bn_hidden(x)
      if self.dropout > 0:
          x = F.dropout(x, p=self.dropout, training=self.training)
  
      return x, local_rep
  
imports: from functools import partial
  import torch
  import torch.nn.functional
  from torch.nn import Parameter
  from torch.nn import Sequential, Linear, BatchNorm1d
  from torch_scatter import scatter_add
  from torch_geometric.nn import GINConv, GCNConv, global_add_pool, global_mean_pool
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.utils import remove_self_loops, add_self_loops
  from torch_geometric.nn.inits import glorot, zeros
label_desc: Use image node_id 2 for calling the ResGCN obj's underlying member method code with example usage: obj.forward(data) and returns: x,  local_rep