code: def gen_conv(gw, feature, name, beta=None):
      """Implementation of GENeralized Graph Convolution (GENConv), see the paper
      "DeeperGCN: All You Need to Train Deeper GCNs" in
      https://arxiv.org/pdf/2006.07739.pdf
  
      Args:
          gw: Graph wrapper object (:code:`StaticGraphWrapper` or :code:`GraphWrapper`)
  
          feature: A tensor with shape (num_nodes, feature_size).
  
          beta: [0, +infinity] or "dynamic" or None
  
          name: deeper gcn layer names.
  
      Return:
          A tensor with shape (num_nodes, feature_size)
      """
  
      if beta == "dynamic":
          beta = L.create_parameter(
              shape=[1],
              dtype="float32",
              default_initializer=fluid.initializer.ConstantInitializer(
                  value=1.0
              ),
              name=name + "_beta",
          )
  
      # message passing
      msg = gw.send(
          message_passing.copy_send, nfeat_list=[("h", feature)]
      )
      output = gw.recv(msg, message_passing.softmax_agg(beta))
  
      # msg norm
      output = message_passing.msg_norm(feature, output, name)
      output = feature + output
  
      output = L.fc(
          output,
          feature.shape[-1],
          bias_attr=False,
          act="relu",
          param_attr=fluid.ParamAttr(name=name + "_weight1"),
      )
  
      output = L.fc(
          output,
          feature.shape[-1],
          bias_attr=False,
          param_attr=fluid.ParamAttr(name=name + "_weight2"),
      )
  
      return output
  
file_path: PGL/legacy/pgl/layers/conv.py
imports: import pgl
  import paddle.fluid
  import paddle.fluid.layers
  from pgl.utils import paddle_helper
  from pgl import message_passing
  import numpy
label_desc: Use image node_id 5 for calling a global function with example usage: gen_conv(gw, feature, name, beta) and returns: output