code: def appnp(gw, feature, edge_dropout=0, alpha=0.2, k_hop=10):
      """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
  
      h0 = feature
      ngw = gw
      norm = get_norm(ngw.indegree())
  
      for i in range(k_hop):
          if edge_dropout > 1e-5:
              ngw = pgl.sample.edge_drop(gw, edge_dropout)
              norm = get_norm(ngw.indegree())
  
          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
      return feature
  
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 7 for calling a global function with example usage: appnp(gw, feature, edge_dropout, alpha, k_hop) and returns: feature, feature