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)
code: def __init__(
      self,
      input_size,
      output_size,
      direction_option="bi_fuse",
      num_layers=1,
      n_etypes=1,
      bias=True,
  ):
      super(GGNNLayer, self).__init__()
      if direction_option == "undirected":
          self.model = UndirectedGGNNLayerConv(
              input_size,
              output_size,
              num_layers=num_layers,
              n_etypes=n_etypes,
              bias=bias,
          )
      elif direction_option == "bi_sep":
          self.model = BiSepGGNNLayerConv(
              input_size, output_size, n_etypes, bias=bias
          )
      elif direction_option == "bi_fuse":
          self.model = BiFuseGGNNLayerConv(
              input_size, output_size, n_etypes, bias=bias
          )
      else:
          raise RuntimeError(
              "Unknown `bidirection` value: {}".format(direction_option)
          )
  
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 1 to create a new GGNNLayer object from inherited base classes: GNNLayerBase with example: obj = GGNNLayer(input_size, output_size, direction_option, num_layers, n_etypes, bias)