code: def __call__(self, x, edge_index, size=None, **kwargs):
      if not self.build:
          self.build = True
          self.beta = tf.Variable([1.0], name="beta", dtype=tf.float32)
      norm = [
          tf.nn.l2_normalize(x[0], axis=-1)
          if x[0] is not None
          else None,
          tf.nn.l2_normalize(x[1], axis=-1)
          if x[1] is not None
          else None,
      ]
      (
          gather_x,
          gather_norm,
      ) = self.gather_feature([x, norm], edge_index)
      out = self.apply_edge(
          edge_index[0],
          gather_x[1],
          gather_norm[0],
          gather_norm[1],
          size[0],
      )
      out = mp_ops.scatter_(self.aggr, out, edge_index[0], size=size[0])
      out = self.apply_node(out)
      return out
  
file_path: euler/tf_euler/python/convolution/agnn_conv.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  from tf_euler.python.convolution import conv
  from tf_euler.python.euler_ops import mp_ops
label_desc: Use image node_id 2 for calling the AGNNConv obj's underlying member method code with example usage: obj.__call__(x, edge_index, size) and returns: out