code: def appnp(gw, feature, alpha=0.2, k_hop=10, name=""):
      """Implementation of APPNP of "Predict then Propagate: Graph Neural Networks
      meet Personalized PageRank"  (ICLR 2019).
      Args:
          gw: Graph wrapper object (:code:`StaticGraphWrapper` or :code:`GraphWrapper`)
          feature: A tensor with shape (num_nodes, feature_size).
          edge_dropout: Edge dropout rate.
          k_hop: K Steps for Propagation
      Return:
          A tensor with shape (num_nodes, hidden_size)
      """
  
      def send_src_copy(src_feat, dst_feat, edge_feat):
          feature = src_feat["h"]
          return feature
  
      def get_norm(indegree):
          float_degree = L.cast(indegree, dtype="float32")
          float_degree = L.clamp(float_degree, min=1.0)
          norm = L.pow(float_degree, factor=-0.5)
          return norm
  
      cks = []
      h0 = feature
      ngw = gw
      norm = get_norm(ngw.indegree())
  
      for i in range(k_hop):
          feature = feature * norm
          msg = gw.send(send_src_copy, nfeat_list=[("h", feature)])
          feature = gw.recv(msg, "sum")
          feature = feature * norm
          # feature = feature * (1 - alpha) + h0 * alpha
  
          fan_in = feature.shape[-1] * 3
          bias_bound = 1.0 / math.sqrt(fan_in)
          fc_bias_attr = F.ParamAttr(
              initializer=F.initializer.UniformInitializer(
                  low=-bias_bound, high=bias_bound
              )
          )
  
          negative_slope = math.sqrt(5)
          gain = math.sqrt(2.0 / (1 + negative_slope**2))
          std = gain / math.sqrt(fan_in)
          weight_bound = math.sqrt(3.0) * std
          fc_w_attr = F.ParamAttr(
              initializer=F.initializer.UniformInitializer(
                  low=-weight_bound, high=weight_bound
              )
          )
  
          gate_f = L.fc(
              [feature, h0, feature - h0],
              1,
              param_attr=fc_w_attr,
              name=name + "appnp_gate_" + str(i),
              bias_attr=fc_bias_attr,
          )
  
          alpha = L.sigmoid(gate_f)
          feature = feature * (1 - alpha) + h0 * alpha
  
          if (i + 1) % 3 == 0:
              cks.append(feature)
      return feature, cks
  
file_path: PGL/ogb_examples/nodeproppred/ogbn-arxiv/unimp_appnp_vnode_smooth/module/model_unimp.py
imports: import pgl
  import paddle.fluid
  import paddle.fluid.layers
  from pgl.utils import paddle_helper
  from pgl import message_passing
  import math
label_desc: Use image node_id 2 for calling a global function with example usage: appnp(gw, feature, alpha, k_hop, name) and returns: feature,  cks, feature, norm