class_docstr: A general Graph Neural Network (GNN) model.
  
  The GNN model consists of three main components:
  
  1. An encoder to transform input features into a fixed-size embedding
     space.
  2. A processing or message passing stage for information exchange between
     nodes.
  3. A head to produce the final output features/predictions.
  
  The configuration of each component is determined by the underlying
  configuration in :obj:`cfg`.
  
  Args:
      dim_in (int): The input feature dimension.
      dim_out (int): The output feature dimension.
      **kwargs (optional): Additional keyword arguments.
class_docstr_tok: ["A","general","Graph","Neural","Network","(","GNN",")","model",".","The","GNN","model","consists","of","three","main","components",":","1",".","An","encoder","to","transform","input","features","into","a","fixed-size","embedding","space",".","2",".","A","processing","or","message","passing","stage","for","information","exchange","between","nodes",".","3",".","A","head","to","produce","the","final","output","features\/predictions",".","The","configuration","of","each","component","is","determined","by","the","underlying","configuration","in",":","obj",":","`","cfg","`",".","Args",":","dim_in","(","int",")",":","The","input","feature","dimension",".","dim_out","(","int",")",":","The","output","feature","dimension",".","*","*","kwargs","(","optional",")",":","Additional","keyword","arguments","."]
code: def __init__(self, dim_in: int, dim_out: int, **kwargs):
      super().__init__()
      GNNStage = register.stage_dict[cfg.gnn.stage_type]
      GNNHead = register.head_dict[cfg.gnn.head]
  
      self.encoder = FeatureEncoder(dim_in)
      dim_in = self.encoder.dim_in
  
      if cfg.gnn.layers_pre_mp > 0:
          self.pre_mp = GNNPreMP(
              dim_in, cfg.gnn.dim_inner, cfg.gnn.layers_pre_mp
          )
          dim_in = cfg.gnn.dim_inner
      if cfg.gnn.layers_mp > 0:
          self.mp = GNNStage(
              dim_in=dim_in,
              dim_out=cfg.gnn.dim_inner,
              num_layers=cfg.gnn.layers_mp,
          )
      self.post_mp = GNNHead(dim_in=cfg.gnn.dim_inner, dim_out=dim_out)
  
      self.apply(init_weights)
  
imports: import torch
  import torch.nn.functional
  import torch_geometric.graphgym.register
  from torch_geometric.graphgym.config import cfg
  from torch_geometric.graphgym.init import init_weights
  from torch_geometric.graphgym.models.layer import BatchNorm1dNode, GeneralLayer, GeneralMultiLayer, new_layer_config
  from torch_geometric.graphgym.register import register_stage
label_desc: Use image node_id 1 to create a new GNN object from inherited base classes: torch.nn with example: obj = GNN(dim_in, dim_out)