code: def forward(self, nodes, edges, nums):
      start, cat_nodes = 0, []
      for num in nums:
          sample_nodes = nodes[start : start + num]
          cat_nodes.append(
              paddle.concat(
                  [
                      paddle.expand(
                          sample_nodes.unsqueeze(1), [-1, num, -1]
                      ),
                      paddle.expand(
                          sample_nodes.unsqueeze(0), [num, -1, -1]
                      ),
                  ],
                  -1,
              ).reshape([num**2, -1])
          )
          start += num
      cat_nodes = paddle.concat([paddle.concat(cat_nodes), edges], -1)
      cat_nodes = self.relu(self.in_fc(cat_nodes))
      coefs = self.coef_fc(cat_nodes)
  
      start, residuals = 0, []
      for num in nums:
          residual = F.softmax(
              -paddle.eye(num).unsqueeze(-1) * 1e9
              + coefs[start : start + num**2].reshape([num, num, -1]),
              1,
          )
          residuals.append(
              (
                  residual
                  * cat_nodes[start : start + num**2].reshape(
                      [num, num, -1]
                  )
              ).sum(1)
          )
          start += num**2
  
      nodes += self.relu(self.out_fc(paddle.concat(residuals)))
      return [nodes, cat_nodes]
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import paddle
  from paddle import nn
  import paddle.nn.functional
  from paddle import ParamAttr
label_desc: Use image node_id 2 for calling the GNNLayer obj's underlying member method code with example usage: obj.forward(nodes, edges, nums) and returns: list