code: def node_update(self, x, messages, attentions):
      if self.node_update_type == "gru":
          update_inputs = torch.cat((messages, attentions), dim=-1)
          _, new_x = self.update_net(
              update_inputs.unsqueeze(0), x.unsqueeze(0)
          )
          new_x = torch.squeeze(new_x)
      else:
          update_inputs = torch.cat((messages, attentions, x), dim=-1)
          new_x = self.update_net(update_inputs)
  
      if hasattr(self, "update_norm"):
          new_x = self.update_norm(new_x)
  
      if self.node_update_type == "residual":
          return x + new_x
      return new_x
  
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 5 for calling the GMNConv obj's underlying member method code with example usage: obj.node_update(x, messages, attentions) and returns: new_x, unknown