code: def call(self, inputs):
      self_embedding, neigh_embedding, adj = inputs
      adj = _sparse_ones_like(adj)
      if self.renorm:
          eye = _sparse_eye(adj.dense_shape[0])
          adj = tf.sparse_concat(1, [eye, adj])
  
      if not self.renorm:
          from_all = self.dense(neigh_embedding)
          from_self = self.dense(self_embedding)
      else:
          all_embedding = tf.concat(
              [self_embedding, neigh_embedding], 0
          )
          from_all = self.dense(all_embedding)
          from_self = from_all[: adj.dense_shape[0], :]
  
      self_weight = self.self_layer(from_self)
      all_weight = self.neigh_layer(from_all)
      coefficient = tf.sparse_add(
          adj * self_weight, adj * tf.reshape(all_weight, [1, -1])
      )
      coefficient = tf.SparseTensor(
          coefficient.indices,
          tf.nn.leaky_relu(coefficient.values),
          coefficient.dense_shape,
      )
      coefficient = tf.sparse_softmax(coefficient)
  
      output = tf.sparse_tensor_dense_matmul(coefficient, from_all)
      if not self.renorm:
          output = from_self + output
      if self.activation:
          output = self.activation(output)
      return output
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  from tf_euler.python.utils import layers
label_desc: Use image node_id 2 for calling the SingleAttentionAggregator obj's underlying member method code with example usage: obj.call(inputs) and returns: output