class_docstr: Embedding layer for featureless heterograph.
  Parameters
  ----------
  device : int
      Device to run the layer.
  num_nodes : int
      Number of nodes.
  node_tides : tensor
      Storing the node type id for each node starting from 0
  num_of_ntype : int
      Number of node types
  input_size : list of int
      A list of input feature size for each node type. If None, we then
      treat certain input feature as an one-hot encoding feature.
  embed_size : int
      Output embed size
  embed_name : str, optional
      Embed name
class_docstr_tok: ["Embedding","layer","for","featureless","heterograph",".","Parameters","--","--","--","--","--","device",":","int","Device","to","run","the","layer",".","num_nodes",":","int","Number","of","nodes",".","node_tides",":","tensor","Storing","the","node","type","id","for","each","node","starting","from","0","num_of_ntype",":","int","Number","of","node","types","input_size",":","list","of","int","A","list","of","input","feature","size","for","each","node","type",".","If","None",",","we","then","treat","certain","input","feature","as","an","one-hot","encoding","feature",".","embed_size",":","int","Output","embed","size","embed_name",":","str",",","optional","Embed","name"]
code: def __init__(
      self,
      device,
      num_nodes,
      node_tids,
      num_of_ntype,
      input_size,
      embed_size,
      sparse_emb=False,
      embed_name="embed",
  ):
      super(RelGraphEmbedLayer, self).__init__()
      self.device = device
      self.embed_size = embed_size
      self.embed_name = embed_name
      self.num_nodes = num_nodes
      self.sparse_emb = sparse_emb
  
      # create weight embeddings for each node for each relation
      self.embeds = nn.ParameterDict()
      self.num_of_ntype = num_of_ntype
      self.idmap = th.empty(num_nodes).long()
  
      for ntype in range(num_of_ntype):
          if input_size[ntype] is not None:
              input_emb_size = input_size[ntype].shape[1]
              embed = nn.Parameter(
                  th.Tensor(input_emb_size, self.embed_size)
              )
              nn.init.xavier_uniform_(embed)
              self.embeds[str(ntype)] = embed
  
      self.node_embeds = th.nn.Embedding(
          node_tids.shape[0], self.embed_size, sparse=self.sparse_emb
      )
      nn.init.uniform_(self.node_embeds.weight, -1.0, 1.0)
  
imports: import itertools
  import time
  import dgl
  import dgl.nn.pytorch
  import torch
  import torch.multiprocessing
  import torch.nn
  import torch.nn.functional
  import torch.optim
  from dgl.nn import RelGraphConv
  from torch.utils.data import DataLoader
  from ..None import utils
label_desc: Use image node_id 1 to create a new RelGraphEmbedLayer object from inherited base classes: nn with example: obj = RelGraphEmbedLayer(device, num_nodes, node_tids, num_of_ntype, input_size, embed_size, sparse_emb, embed_name)