class_docstr: Implementation of GATNE model.
  
  Args:
      config: dict, some configure parameters.
      dataset: instance of Dataset class
      place: GPU or CPU place 
class_docstr_tok: ["Implementation","of","GATNE","model",".","Args",":","config",":","dict",",","some","configure","parameters",".","dataset",":","instance","of","Dataset","class","place",":","GPU","or","CPU","place"]
docstr: Message passing from source nodes to dstination nodes
          
docstr_tok: ["Message","passing","from","source","nodes","to","dstination","nodes"]
code: def message_passing(self, gw, edge_types, features, name=""):
      """Message passing from source nodes to dstination nodes"""
  
      def __message(src_feat, dst_feat, edge_feat):
          """send function"""
          return src_feat["h"]
  
      def __reduce(feat):
          """recv function"""
          return fluid.layers.sequence_pool(feat, pool_type="average")
  
      if not isinstance(edge_types, list):
          edge_types = [edge_types]
  
      if not isinstance(features, list):
          features = [features]
  
      assert len(edge_types) == len(features)
  
      output = []
      for i in range(len(edge_types)):
          msg = gw[edge_types[i]].send(
              __message, nfeat_list=[("h", features[i])]
          )
          neigh_feat = gw[edge_types[i]].recv(msg, __reduce)
          neigh_feat = fl.fc(
              neigh_feat,
              size=neigh_feat.shape[-1],
              name="neigh_fc_%d" % (i),
              act="sigmoid",
          )
          slf_feat = fl.fc(
              features[i],
              size=neigh_feat.shape[-1],
              name="slf_fc_%d" % (i),
              act="sigmoid",
          )
  
          out = fluid.layers.concat([slf_feat, neigh_feat], axis=1)
          out = fl.fc(
              out, size=neigh_feat.shape[-1], name="fc", act=None
          )
          out = fluid.layers.l2_normalize(out, axis=1)
          output.append(out)
  
      # list of matrix
      return output
  
file_path: PGL/legacy/examples/GATNE/model.py
imports: import numpy
  import math
  import logging
  import paddle.fluid
  import paddle.fluid.layers
  from pgl import heter_graph_wrapper
label_desc: Use image node_id 4 for calling the GATNE obj's underlying member method code with example usage: obj.message_passing(gw, edge_types, features, name) and returns: output, src_feat, fluid