code: def __init__(
      self,
      node_feat_dim,
      message_net_hiddens,
      update_net_hiddens,
      node_update_type="residual",
      layer_norm=False,
  ):
      super(GMNConv, self).__init__()
      assert node_update_type in ["mlp", "residual", "gru"]
      self.node_update_type = node_update_type
      self._get_message_net(node_feat_dim, message_net_hiddens)
      self._get_update_net(
          node_feat_dim, update_net_hiddens, node_update_type
      )
      if layer_norm:
          self.message_norm = nn.LayerNorm()
          self.update_norm = nn.LayerNorm()
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from torch_scatter import scatter
  from torch_geometric.nn import global_add_pool, global_mean_pool, global_max_pool, GINConv
label_desc: Use image node_id 1 to create a new GMNConv object from inherited base classes: nn with example: obj = GMNConv(node_feat_dim, message_net_hiddens, update_net_hiddens, node_update_type, layer_norm)