class_docstr: Differentiable function that performs a graph convolution 
  given adjacency matrix G and feature matrix X
class_docstr_tok: ["Differentiable","function","that","performs","a","graph","convolution","given","adjacency","matrix","G","and","feature","matrix","X"]
docstr: Performs a series of graph convolutions 
  followed by a summation and 
  fully connected layers.
  
  G: (batch_size, max_n_atoms, max_n_atoms) batch of adjacency matrices 
  x: (batch_size, max_n_atoms, p) batch of feature matrices for each 
      molecule
docstr_tok: ["Performs","a","series","of","graph","convolutions","followed","by","a","summation","and","fully","connected","layers",".","G",":","(","batch_size",",","max_n_atoms",",","max_n_atoms",")","batch","of","adjacency","matrices","x",":","(","batch_size",",","max_n_atoms",",","p",")","batch","of","feature","matrices","for","each","molecule"]
code: def forward(self, G, x):
      """
      Performs a series of graph convolutions
      followed by a summation and
      fully connected layers.
  
      G: (batch_size, max_n_atoms, max_n_atoms) batch of adjacency matrices
      x: (batch_size, max_n_atoms, p) batch of feature matrices for each
          molecule
      """
      h = x
      for layer_idx in range(self.n_conv_layers):
          h = torch.bmm(G, h)
          h = h.view(-1, h.size()[-1])
  
          op = self.conv_ops[layer_idx]
          h = op(h)
          h = h.view(
              -1, self.max_n_atoms, self.conv_layer_dims[layer_idx + 1]
          )
  
      h = torch.squeeze(torch.sum(h, dim=1), dim=1)
  
      for layer_idx in range(self.n_fc_layers):
          op = self.fc_ops[layer_idx]
          h = op(h)
  
      if self.return_sigmoid:
          h = nn.Sigmoid()(h)
  
      return h
  
imports: import torch.nn
  import torch.nn.parallel
  import torch.backends.cudnn
  from torch.autograd import Variable
  import torch.optim
  import random
  import numpy
  from sklearn.metrics import roc_auc_score
label_desc: Use image node_id 2 for calling the GraphConvolution obj's underlying member method code with example usage: obj.forward(G, x) and returns: h