code: def __init__(
      self,
      input_dimension: int,
      dimensions: _typing.Sequence[int],
      num_mlp_layers: int,
      act: _typing.Optional[str],
      _eps: str,
      neighbor_pooling_type: str,
  ):
      super(_GIN, self).__init__()
      self.__num_layers: int = len(dimensions)
  
      self._act: _typing.Optional[str] = act
  
      self.__gin_layers: torch.nn.ModuleList = torch.nn.ModuleList()
      self.__batch_normalizations: torch.nn.ModuleList = (
          torch.nn.ModuleList()
      )
      for layer in range(self.__num_layers):
          mlp = MLP(
              num_mlp_layers,
              input_dimension if layer == 0 else dimensions[layer - 1],
              dimensions[layer],
              dimensions[layer],
          )
          self.__gin_layers.append(
              GINConv(
                  ApplyNodeFunc(mlp),
                  neighbor_pooling_type,
                  0,
                  _eps.lower() == "true",
              )
          )
          self.__batch_normalizations.append(
              torch.nn.BatchNorm1d(dimensions[layer])
          )
  
imports: import dgl
  import torch.nn.functional
  import typing
  from dgl.nn.pytorch.conv import GINConv
  from ..None import base_encoder, encoder_registry
  from ...None import _utils
label_desc: Use image node_id 1 to create a new _GIN object from inherited base classes: torch.nn with example: obj = _GIN(input_dimension, dimensions, num_mlp_layers, act, _eps, neighbor_pooling_type)