class_docstr: Gated Graph Attention module, it is a general purpose
  graph attention module proposed in paper GaAN. The paper use
  it for traffic prediction task
  Parameter
  ==========
  in_feats : int
      number of input feature
  
  out_feats : int
      number of output feature
  
  map_feats : int
      intermediate feature size for gate computation
  
  num_heads : int
      number of head for multihead attention
class_docstr_tok: ["Gated","Graph","Attention","module",",","it","is","a","general","purpose","graph","attention","module","proposed","in","paper","GaAN",".","The","paper","use","it","for","traffic","prediction","task","Parameter","==========","in_feats",":","int","number","of","input","feature","out_feats",":","int","number","of","output","feature","map_feats",":","int","intermediate","feature","size","for","gate","computation","num_heads",":","int","number","of","head","for","multihead","attention"]
code: def __init__(self, in_feats, out_feats, map_feats, num_heads):
      super(GatedGAT, self).__init__()
      self.in_feats = in_feats
      self.out_feats = out_feats
      self.map_feats = map_feats
      self.num_heads = num_heads
      self.gatlayer = WeightedGATConv(
          self.in_feats, self.out_feats, self.num_heads
      )
      self.gate_fn = nn.Linear(
          2 * self.in_feats + self.map_feats, self.num_heads
      )
      self.gate_m = nn.Linear(self.in_feats, self.map_feats)
      self.merger_layer = nn.Linear(
          self.in_feats + self.out_feats, self.out_feats
      )
  
file_path: dgl/examples/pytorch/dtgrnn/gaan.py
imports: import dgl
  import dgl.function
  import dgl.nn
  import numpy
  import torch
  import torch.nn
  from dgl.base import DGLError
  from dgl.nn.functional import edge_softmax
label_desc: Use image node_id 1 to create a new GatedGAT object from inherited base classes: nn with example: obj = GatedGAT(in_feats, out_feats, map_feats, num_heads)