code: def __init__(
      self,
      g,
      in_channels,
      out_channels,
      heads=1,
      negative_slope=0.2,
      dropout=0,
  ):
      super().__init__()
      self.g = g
      self.out_channels = out_channels
      self.heads = heads
      self.negative_slope = negative_slope
      self.dropout = dropout
      self.weight = Parameter(
          torch.empty(in_channels, heads * out_channels)
      )
      self.att_l = Parameter(torch.empty(heads, out_channels, 1))
      self.att_r = Parameter(torch.empty(heads, out_channels, 1))
      self.bias = Parameter(torch.empty(heads * out_channels))
      self.softmax = EdgeSoftmax()
      self.reset_parameters()
  
imports: import dgl.function
  import torch
  import torch.nn.functional
  from dgl.nn.pytorch import EdgeSoftmax
  from torch.nn import Parameter
  from torch_geometric.nn.inits import glorot, zeros
label_desc: Use image node_id 1 to create a new GATSPMVConv object from inherited base classes: torch.nn with example: obj = GATSPMVConv(g, in_channels, out_channels, heads, negative_slope, dropout)