class_docstr: Description
  -----------
  The HGP-SL pooling layer from
  `Hierarchical Graph Pooling with Structure Learning <https://arxiv.org/pdf/1911.05954.pdf>`
  
  Parameters
  ----------
  in_feat : int
      The number of input node feature's channels
  ratio : float, optional
      Pooling ratio. Default: 0.8
  sample : bool, optional
      Whether use k-hop union graph to increase efficiency.
      Currently we only support full graph. Default: :obj:`False`
  sym_score_norm : bool, optional
      Use symmetric norm for adjacency or not. Default: :obj:`True`
  sparse : bool, optional
      Use edge sparsemax instead of edge softmax. Default: :obj:`True`
  sl : bool, optional
      Use structure learining module or not. Default: :obj:`True`
  lamb : float, optional
      The lambda parameter as weight of raw adjacency as described in the
      HGP-SL paper. Default: 1.0
  negative_slop : float, optional
      Negative slop for leaky_relu. Default: 0.2
  
  Returns
  -------
  DGLGraph
      The pooled graph.
  torch.Tensor
      Node features
  torch.Tensor
      Edge features
  torch.Tensor
      Permutation index
code: def __init__(
      self,
      in_feat: int,
      ratio=0.8,
      sample=True,
      sym_score_norm=True,
      sparse=True,
      sl=True,
      lamb=1.0,
      negative_slop=0.2,
      k_hop=3,
  ):
      super(HGPSLPool, self).__init__()
      self.in_feat = in_feat
      self.ratio = ratio
      self.sample = sample
      self.sparse = sparse
      self.sl = sl
      self.lamb = lamb
      self.negative_slop = negative_slop
      self.k_hop = k_hop
  
      self.att = Parameter(torch.Tensor(1, self.in_feat * 2))
      self.calc_info_score = NodeInfoScoreLayer(sym_norm=sym_score_norm)
  
      self.reset_parameters()
  
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 HGPSLPool object from inherited base classes: nn with example: obj = HGPSLPool(in_feat, ratio, sample, sym_score_norm, sparse, sl, lamb, negative_slop, k_hop)