class_docstr: A unified wrapper for Gated Graph Convolution layer
  from paper `Gated Graph Sequence Neural Networks
  <https://arxiv.org/pdf/1511.05493.pdf>`__.
  Support both undirected (i.e., regular) and bidirectional
  (i.e., `bi_sep` and `bi_fuse`) versions.
  Attributes
  ----------
  input_size: int
      Input feature size.
  output_size: int
      Output feature size.
  direction_option: str
      The direction option of GGNN ('undirected', 'bi_sep' or 'bi_fuse'). (Default: 'bi_fuse')
  num_layers: int
      Number of GGNN layers.
      `num_layers` is set to any integer if the direction_option is 'undirected'.
      If the direction_option is 'bi_sep' or 'bi_fuse', `num_layers` will be set to 1.
  n_etypes: int
      Number of edge types. `n_etypes` can be set to any integer if the
      direction_option is 'undirected'.
      If the direction_option is 'bi_sep' or 'bi_fuse', `n_etypes` will be set to 1.
  bias: bool
      If True, adds a learnable bias to the output. (Default: True)
docstr: Parameters
  ----------
  graph: dgl.DGLGraph
  node_feats: torch.Tensor
      The shape of node_feats is :math:`(N, D_{in})`.
  Returns
  -------
  torch.Tensor
docstr_tok: ["Parameters","--","--","--","--","--","graph",":","dgl.DGLGraph","node_feats",":","torch.Tensor","The","shape","of","node_feats","is",":","math",":","`","(","N",",","D_","{","in","}",")","`",".","Returns","--","--","--","-","torch.Tensor"]
code: def forward(self, graph, node_feats, etypes=None, edge_weight=None):
      """
      Parameters
      ----------
      graph: dgl.DGLGraph
      node_feats: torch.Tensor
          The shape of node_feats is :math:`(N, D_{in})`.
      Returns
      -------
      torch.Tensor
      """
      if etypes is None:
          etypes = torch.tensor(
              [0] * graph.number_of_edges(), dtype=torch.long
          ).to(graph.device)
      return self.model(graph, node_feats, etypes, edge_weight)
  
imports: import dgl
  import dgl.function
  import torch
  import torch.nn
  from torch.nn import init
  from ...data.data import GraphData
  from .base import GNNBase, GNNLayerBase
label_desc: Use image node_id 2 for calling the GGNNLayer obj's underlying member method code with example usage: obj.forward(graph, node_feats, etypes, edge_weight) and returns: self