class_docstr: Single graph attention layer.
class_docstr_tok: ["Single","graph","attention","layer","."]
code: def call(self, inputs):
      x, adj = inputs[0], inputs[1]
      x = self.dropout(x)
      x = tf.matmul(x, self.weight)
  
      # feat shape: [n_data, n_data, output_dim]
      n_data = int(adj.shape[1])
  
      feat_i = tf.reshape(
          tf.repeat(x, repeats=n_data),
          [n_data, n_data, self.output_dim],
      )
      feat_j = tf.repeat(
          tf.expand_dims(x, axis=0), repeats=[n_data], axis=0
      )
  
      attn_input = tf.concat([feat_i, feat_j], axis=2)
      # Unnormalized probability.
      energy = tf.squeeze(tf.matmul(attn_input, self.attention), axis=2)
      energy = self.leakyrelu(energy)
  
      attn = tf.where(adj > 0, energy, -9e15 * tf.ones_like(energy))
      attn = tf.nn.softmax(attn, axis=1)
  
      attn = self.dropout(attn)
      output = tf.matmul(attn, x)
      return output
  
imports: import tensorflow
label_desc: Use image node_id 3 for calling the GraphAttnLayer obj's underlying member method code with example usage: obj.call(inputs) and returns: output