code: def gather_feature(self, features, edge_index):
      convert_features = []
  
      for feature in features:
          convert_feature = []
          assert isinstance(feature, tuple) or isinstance(feature, list)
          assert len(feature) == 2
          if feature[1] is None:
              feature[1] = feature[0]
          for idx, tmp in enumerate(feature):
              if tmp is not None:
                  tmp = mp_ops.gather(tmp, edge_index[idx])
              convert_feature.append(tmp)
          convert_features.append(convert_feature)
      return convert_features
  
file_path: euler/tf_euler/python/convolution/conv.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import sys
  import inspect
  import tensorflow
  from tf_euler.python.euler_ops import mp_ops
label_desc: Use image node_id 2 for calling the Conv obj's underlying member method code with example usage: obj.gather_feature(features, edge_index) and returns: convert_features