class_docstr:     Heterograph where we gather message from neighbors along all edge types.
      You can use the module dgl.nn.pytorch.HeteroGraphConv (also available in MXNet and Tensorflow) to perform
      message passing on all edge types,
      then combining different graph convolution modules for each edge type.
  
  :returns
      torch model with forward pass methods useful for fitting model in standard way
class_docstr_tok: ["Heterograph","where","we","gather","message","from","neighbors","along","all","edge","types",".","You","can","use","the","module","dgl.nn.pytorch.HeteroGraphConv","(","also","available","in","MXNet","and","Tensorflow",")","to","perform","message","passing","on","all","edge","types",",","then","combining","different","graph","convolution","modules","for","each","edge","type",".",":","returns","torch","model","with","forward","pass","methods","useful","for","fitting","model","in","standard","way"]
code: def __init__(self, in_feats, hid_feats, out_feats, rel_names):
      super().__init__()
      _, _, dglnn, _, _, _, _ = lazy_import_networks()
  
      self.conv1 = dglnn.HeteroGraphConv(
          {
              rel: dglnn.GraphConv(in_feats, hid_feats)
              for rel in rel_names
          },
          aggregate="sum",
      )
      self.conv2 = dglnn.HeteroGraphConv(
          {
              rel: dglnn.GraphConv(hid_feats, out_feats)
              for rel in rel_names
          },
          aggregate="sum",
      )
  
imports: from typing import TYPE_CHECKING, Any
  from .None import constants
  import logging
label_desc: Use image node_id 1 to create a new RGCN object from inherited base classes: Module with example: obj = RGCN(in_feats, hid_feats, out_feats, rel_names)