class_docstr: Implementation of TransformerConv from UniMP
  This is an implementation of the paper Unified Message Passing Model for Semi-Supervised Classification
  (https://arxiv.org/abs/2009.03509).
  Args:
  
      input_size: The size of the inputs. 
  
      hidden_size: The hidden size for gat.
  
      activation: (default None) The activation for the output.
  
      num_heads: (default 4) The head number in transformerconv.
  
      feat_drop: (default 0.6) Dropout rate for feature.
  
      attn_drop: (default 0.6) Dropout rate for attention.
  
      concat: (default True) Whether to concat output heads or average them.
      skip_feat: (default True) Whether to add a skip conect from input to output.
      gate: (default False) Whether to use a gate function in skip conect.
      layer_norm: (default True) Whether to aply layer norm in output
class_docstr_tok: ["Implementation","of","TransformerConv","from","UniMP","This","is","an","implementation","of","the","paper","Unified","Message","Passing","Model","for","Semi-Supervised","Classification","(","https",":","\/\/arxiv.org\/abs\/2009.03509",")",".","Args",":","input_size",":","The","size","of","the","inputs",".","hidden_size",":","The","hidden","size","for","gat",".","activation",":","(","default","None",")","The","activation","for","the","output",".","num_heads",":","(","default","4",")","The","head","number","in","transformerconv",".","feat_drop",":","(","default","0.6",")","Dropout","rate","for","feature",".","attn_drop",":","(","default","0.6",")","Dropout","rate","for","attention",".","concat",":","(","default","True",")","Whether","to","concat","output","heads","or","average","them",".","skip_feat",":","(","default","True",")","Whether","to","add","a","skip","conect","from","input","to","output",".","gate",":","(","default","False",")","Whether","to","use","a","gate","function","in","skip","conect",".","layer_norm",":","(","default","True",")","Whether","to","aply","layer","norm","in","output"]
code: def send_attention(self, src_feat, dst_feat, edge_feat):
      if "edge_feat" in edge_feat:
          alpha = dst_feat["q"] * (
              src_feat["k"] + edge_feat["edge_feat"]
          )
          src_feat["v"] = src_feat["v"] + edge_feat["edge_feat"]
      else:
          alpha = dst_feat["q"] * src_feat["k"]
      alpha = paddle.sum(alpha, axis=-1)
      return {"alpha": alpha, "v": src_feat["v"]}
  
imports: import math
  import numpy
  import paddle
  import paddle.nn
  import paddle.nn.functional
  import pgl
  from pgl.nn import functional
label_desc: Use image node_id 2 for calling the TransformerConv obj's underlying member method code with example usage: obj.send_attention(src_feat, dst_feat, edge_feat) and returns: dict