code: def apply_edge(self, x_j, edge_attr):
      edge_attr, idx = tf.unique(edge_attr)
      matrix = tf.gather(self.matrix, edge_attr)
      matrix = tf.gather(matrix, idx)
      matrix = tf.reshape(matrix, [-1, self.dim, self.fea_dim])
      x_j = tf.expand_dims(x_j, -1)
      res = tf.matmul(matrix, x_j)
      return tf.reshape(res, [-1, self.dim])
  
file_path: euler/tf_euler/python/convolution/relation_conv.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import tensorflow
  import collections
  from tf_euler.python.convolution import conv
  from tf_euler.python.euler_ops import mp_ops
label_desc: Use image node_id 4 for calling the RelationConv obj's underlying member method code with example usage: obj.apply_edge(x_j, edge_attr) and returns: tf