class_docstr: General GNN layer, with edge features.
class_docstr_tok: ["General","GNN","layer",",","with","edge","features","."]
code: def message(self, x_i, x_j, norm, edge_feature):
      if self.msg_direction == "both":
          x_j = torch.cat((x_i, x_j, edge_feature), dim=-1)
      else:
          x_j = torch.cat((x_j, edge_feature), dim=-1)
      x_j = self.linear_msg(x_j)
      return norm.view(-1, 1) * x_j if norm is not None else x_j
  
imports: import torch
  from torch.nn import Parameter
  from torch_geometric.graphgym.config import cfg
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.inits import glorot, zeros
  from torch_geometric.utils import add_remaining_self_loops, scatter
label_desc: Use image node_id 5 for calling the GeneralEdgeConvLayer obj's underlying member method code with example usage: obj.message(x_i, x_j, norm, edge_feature) and returns: unknown