class_docstr: Graph GRU unit which can use any message passing
  net to replace the linear layer in the original GRU
  Parameter
  ==========
  in_feats : int
      number of input features
  
  out_feats : int
      number of output features
  
  net : torch.nn.Module
      message passing network
class_docstr_tok: ["Graph","GRU","unit","which","can","use","any","message","passing","net","to","replace","the","linear","layer","in","the","original","GRU","Parameter","==========","in_feats",":","int","number","of","input","features","out_feats",":","int","number","of","output","features","net",":","torch.nn.Module","message","passing","network"]
code: def __init__(self, in_feats, out_feats, net):
      super(GraphGRUCell, self).__init__()
      self.in_feats = in_feats
      self.out_feats = out_feats
      self.dir = dir
      # net can be any GNN model
      self.r_net = net(in_feats + out_feats, out_feats)
      self.u_net = net(in_feats + out_feats, out_feats)
      self.c_net = net(in_feats + out_feats, out_feats)
      # Manually add bias Bias
      self.r_bias = nn.Parameter(torch.rand(out_feats))
      self.u_bias = nn.Parameter(torch.rand(out_feats))
      self.c_bias = nn.Parameter(torch.rand(out_feats))
  
imports: import dgl
  import dgl.function
  import dgl.nn
  import numpy
  import scipy.sparse
  import torch
  import torch.nn
  from dgl.base import DGLError
  from dgl.nn.functional import edge_softmax
label_desc: Use image node_id 1 to create a new GraphGRUCell object from inherited base classes: nn with example: obj = GraphGRUCell(in_feats, out_feats, net)