class_docstr: A helper class. (GraphConv -> Pooling -> Readout)
code: def __init__(
      self,
      in_feat: int,
      out_feat: int,
      pool_ratio=0.8,
      sample: bool = False,
      sparse: bool = True,
      sl: bool = True,
      lamb: float = 1.0,
      pool: bool = True,
  ):
      super(ConvPoolReadout, self).__init__()
      self.use_pool = pool
      self.conv = WeightedGraphConv(in_feat, out_feat)
      if pool:
          self.pool = HGPSLPool(
              out_feat,
              ratio=pool_ratio,
              sparse=sparse,
              sample=sample,
              sl=sl,
              lamb=lamb,
          )
      else:
          self.pool = None
      self.avgpool = AvgPooling()
      self.maxpool = MaxPooling()
  
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 1 to create a new ConvPoolReadout object from inherited base classes: torch.nn with example: obj = ConvPoolReadout(in_feat, out_feat, pool_ratio, sample, sparse, sl, lamb, pool)