class_docstr: A "wrapper" layer designed for heterogeneous graph layers. It takes a
  heterogeneous graph layer, such as :class:`deepsnap.hetero_gnn.HeteroSAGEConv`, 
  at the initializing stage. Currently DeepSNAP does not support `parallelize=True`.
  
  .. note::
  
      For more detailed use of :class:`HeteroConv`, see the `examples/node_classification_hetero 
      <https://github.com/snap-stanford/deepsnap/tree/master/examples/node_classification_hetero>`_ 
      folder.
docstr: The aggregation for each node type. Currently support `concat`, `add`,
  `mean`, `max` and `mul`.
  
  Args:
      xs (List[Tensor]): A list of :class:`torch.Tensor` for a node type. 
          The number of elements in the list equals to the number of 
          `message types` that the destination node type is current node type.
docstr_tok: ["The","aggregation","for","each","node","type",".","Currently","support","`","concat","`",",","`","add","`",",","`","mean","`",",","`","max","`","and","`","mul","`",".","Args",":","xs","(","List","[","Tensor","]",")",":","A","list","of",":","class",":","`","torch.Tensor","`","for","a","node","type",".","The","number","of","elements","in","the","list","equals","to","the","number","of","`","message","types","`","that","the","destination","node","type","is","current","node","type","."]
code: def aggregate(self, xs: List[Tensor]):
      r"""The aggregation for each node type. Currently support `concat`, `add`,
      `mean`, `max` and `mul`.
  
      Args:
          xs (List[Tensor]): A list of :class:`torch.Tensor` for a node type.
              The number of elements in the list equals to the number of
              `message types` that the destination node type is current node type.
      """
      if self.aggr == "concat":
          return torch.cat(xs, dim=-1)
  
      x = torch.stack(xs, dim=-1)
      if self.aggr == "add":
          return x.sum(dim=-1)
      elif self.aggr == "mean":
          return x.mean(dim=-1)
      elif self.aggr == "max":
          return x.max(dim=-1)[0]
      elif self.aggr == "mul":
          return x.prod(dim=-1)[0]
  
imports: import collections.abc
  import torch
  import torch_geometric.nn
  import torch_geometric.utils
  import torch.nn
  from torch import Tensor
  from torch_geometric.nn.inits import reset
  from torch_sparse import matmul
  from typing import List, Dict
label_desc: Use image node_id 4 for calling the HeteroConv obj's underlying member method code with example usage: obj.aggregate(xs) and returns: torch, x, x, x, x