code: def __init__(
      self,
      metadata: Tuple[List[NodeType], List[EdgeType]],
      hidden_channels: int,
      out_channels: int,
      dropout: float,
  ):
      super().__init__()
      self.save_hyperparameters()
  
      model = GNN(hidden_channels, out_channels, dropout)
      # Convert the homogeneous GNN model to a heterogeneous variant in
      # which distinct parameters are learned for each node and edge type.
      self.model = to_hetero(model, metadata, aggr="sum")
  
      self.train_acc = Accuracy(
          task="multiclass", num_classes=out_channels
      )
      self.val_acc = Accuracy(
          task="multiclass", num_classes=out_channels
      )
      self.test_acc = Accuracy(
          task="multiclass", num_classes=out_channels
      )
  
imports: import os.path
  from typing import Dict, List, Tuple
  import pytorch_lightning
  import torch
  import torch.nn.functional
  from pytorch_lightning import LightningModule, Trainer
  from pytorch_lightning.callbacks import ModelCheckpoint
  from torch import Tensor
  from torchmetrics import Accuracy
  import torch_geometric.transforms
  from torch_geometric.data import Batch
  from torch_geometric.data.lightning import LightningNodeData
  from torch_geometric.datasets import OGB_MAG
  from torch_geometric.nn import Linear, SAGEConv, to_hetero
  from torch_geometric.typing import EdgeType, NodeType
label_desc: Use image node_id 1 to create a new RelationalGNN object from inherited base classes: LightningModule with example: obj = RelationalGNN(metadata, hidden_channels, out_channels, dropout)