class_docstr: HeteroRelational graph convolution layer.
  
  Parameters
  ----------
  in_size : int
      Input feature size.
  out_size : int
      Output feature size.
  relation_names : list[str]
      Relation names.
class_docstr_tok: ["HeteroRelational","graph","convolution","layer",".","Parameters","--","--","--","--","--","in_size",":","int","Input","feature","size",".","out_size",":","int","Output","feature","size",".","relation_names",":","list","[","str","]","Relation","names","."]
docstr: Forward computation
  
  Parameters
  ----------
  A : Hetero Sparse Matrix
      Input graph.
  inputs : dict[str, torch.Tensor]
      Node feature for each node type.
  
  Returns
  -------
  dict[str, torch.Tensor]
      New node features for each node type.
docstr_tok: ["Forward","computation","Parameters","--","--","--","--","--","A",":","Hetero","Sparse","Matrix","Input","graph",".","inputs",":","dict","[","str",",","torch.Tensor","]","Node","feature","for","each","node","type",".","Returns","--","--","--","-","dict","[","str",",","torch.Tensor","]","New","node","features","for","each","node","type","."]
code: def forward(self, A, inputs):
      """Forward computation
  
      Parameters
      ----------
      A : Hetero Sparse Matrix
          Input graph.
      inputs : dict[str, torch.Tensor]
          Node feature for each node type.
  
      Returns
      -------
      dict[str, torch.Tensor]
          New node features for each node type.
      """
      hs = {}
      for rel in A:
          src_type, edge_type, dst_type = rel
          if dst_type not in hs:
              hs[dst_type] = th.zeros(
                  inputs[dst_type].shape[0], self.out_size
              )
          ####################################################################
          # (HIGHLIGHT) Sparse library use hetero sparse matrix to present
          # heterogeneous graphs. A dictionary is passed where the key is
          # the tuple of (source node type, edge type, destination node type)
          # and the value is the sparse matrix contructed from the key on
          # global graph. The convolution operation is the multiplication of
          # sparse matrix and convolutional layer.
          ####################################################################
          hs[dst_type] = hs[dst_type] + (
              A[rel].T @ self.W[str(edge_type)](inputs[src_type])
          )
          if self.activation:
              hs[dst_type] = self.activation(hs[dst_type])
          hs[dst_type] = self.dropout(hs[dst_type])
  
      return hs
  
imports: import argparse
  import time
  import dgl
  import dgl.sparse
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl.data.rdf import AIFBDataset, AMDataset, BGSDataset, MUTAGDataset
label_desc: Use image node_id 2 for calling the HeteroRelationalGraphConv obj's underlying member method code with example usage: obj.forward(A, inputs) and returns: hs