class_docstr: A helper class. (GraphConv -> Pooling -> Readout)
code: def forward(self, graph, feature, e_feat=None):
      out = F.relu(self.conv(graph, feature, e_feat))
      if self.use_pool:
          graph, out, e_feat, _ = self.pool(graph, out, e_feat)
      readout = torch.cat(
          [self.avgpool(graph, out), self.maxpool(graph, out)], dim=-1
      )
      return graph, out, e_feat, readout
  
imports: import dgl
  import dgl.function
  import scipy.sparse
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl import DGLGraph
  from dgl.nn import AvgPooling, GraphConv, MaxPooling
  from dgl.ops import edge_softmax
  from functions import edge_sparsemax
  from torch import Tensor
  from torch.nn import Parameter
  from utils import get_batch_id, topk
label_desc: Use image node_id 2 for calling the ConvPoolReadout obj's underlying member method code with example usage: obj.forward(graph, feature, e_feat) and returns: graph,  out,  e_feat,  readout