code: def forward(self, x, edge_index, edge_type, target_node_type):
      x_src, x_target = x
  
      out = x_target.new_zeros(x_target.size(0), self.out_channels)
  
      for i in range(self.num_edge_types):
          mask = edge_type == i
          out.add_(
              self.propagate(edge_index[:, mask], x=x, edge_type=i)
          )
  
      for i in range(self.num_node_types):
          mask = target_node_type == i
          out[mask] += self.root_lins[i](x_target[mask])
  
      return out
  
imports: from copy import copy
  import argparse
  from tqdm.auto import tqdm
  import torch
  import torch.nn.functional
  from torch.nn import ModuleList, Linear, ParameterDict, Parameter
  from torch_sparse import SparseTensor
  from torch_geometric.utils import to_undirected
  from torch_geometric.data import NeighborSampler
  from torch_geometric.utils.hetero import group_hetero_graph
  from torch_geometric.nn import MessagePassing
  from ogb.nodeproppred import PygNodePropPredDataset, Evaluator
  from logger import Logger
label_desc: Use image node_id 3 for calling the RGCNConv obj's underlying member method code with example usage: obj.forward(x, edge_index, edge_type, target_node_type) and returns: out