code: def __call__(self, n_id):
      data_flow = self.sampler(n_id)
      num_layers = len(self.convs)
      jk_hidden = []
      x = self.to_x(data_flow[0].n_id)
      for i, conv, block in zip(
          range(num_layers), self.convs, data_flow
      ):
          if block.e_id is None:
              edge_attr = None
          else:
              edge_attr = self.get_edge_attr(block)
          x_src = mp_ops.gather(x, block.res_n_id)
          x_dst = None if self.whole_graph else x
          x = self.calculate_conv(
              conv,
              [x_src, x_dst],
              block.edge_index,
              size=block.size,
              edge_attr=edge_attr,
          )
          x = tf.nn.relu(x)
          jk_hidden.append(x)
          for j in range(i):
              jk_hidden[j] = mp_ops.gather(jk_hidden[j], block.res_n_id)
      if self.jk_mode == "concat":
          x = tf.concat(jk_hidden, axis=1)
      elif self.jk_mode == "maxpool":
          x = tf.reduce_sum(tf.stack(jk_hidden, 1), 1)
      x = self.fc(x)
      return x
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  import tf_euler
  from tf_euler.python.euler_ops import mp_ops
  from tf_euler.python.mp_utils import utils
label_desc: Use image node_id 2 for calling the JKGNNNet obj's underlying member method code with example usage: obj.__call__(n_id) and returns: x