code: def __call__(self, x, edge_index, size=None, **kwargs):
      h = x
      for i in range(self.processing_steps):
          m = [
              None if h[0] is None else self.fc[i](h[0]),
              None if h[1] is None else self.fc[i](h[1]),
          ]
          (gather_x,) = self.gather_feature([m], edge_index)
          out = self.apply_edge(gather_x[1])
          out = mp_ops.scatter_(
              self.aggr, out, edge_index[0], size=size[0]
          )
          out = self.apply_node(out)
          out = tf.expand_dims(out, axis=1)
          hidden_state = [h[0] for _ in range(self.lstm_layers)]
          with tf.variable_scope("rnn", reuse=tf.AUTO_REUSE):
              out, _ = tf.nn.dynamic_rnn(
                  self.rnn,
                  out,
                  initial_state=tuple(hidden_state),
                  dtype=tf.float32,
              )
          out = tf.reshape(out, [-1, self.dim])
          h = [out, h[1]]
      return out
  
file_path: euler/tf_euler/python/convolution/gated_graph_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 GatedConv obj's underlying member method code with example usage: obj.__call__(x, edge_index, size) and returns: out