code: def forward(self, feature_list):
      # stack [num_nodes, num_etype, hidden_size]
      U = paddle.stack(feature_list, axis=1)
      # [num_nodes * num_etype, hidden_size]
      tmp = paddle.reshape(U, shape=[-1, self.hidden_size])
      tmp = self.fc1(tmp)
      tmp = paddle.tanh(tmp)
      tmp = self.fc2(tmp)
      #  [num_nodes, num_etype]
      tmp = paddle.reshape(tmp, shape=[-1, len(feature_list)])
      # [num_nodes, 1, num_etype]
      a = paddle.unsqueeze(
          paddle.nn.functional.softmax(tmp, axis=-1), axis=1
      )
      out = paddle.squeeze(paddle.matmul(a, U), axis=1)
      return out
  
imports: import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import pgl
  from pgl.nn import functional
label_desc: Use image node_id 2 for calling the GATNEInteract obj's underlying member method code with example usage: obj.forward(feature_list) and returns: out