class_docstr: The graph attentional operator on heterogeneous graphs, where a separate
  `GATConv` is applied on the homogeneous graph for each edge type. Compared
  with directly wrapping `GATConv`s with `HeteroConv`, `HeteroGATConv` fuses
  all the linear transformation associated with each node type together into 1
  GEMM call, to improve the performance on GPUs.
  
  Parameters
  ----------
  in_channels : int or Dict[str, int])
      Size of each input sample of every node type.
  
  out_channels : int
      Size of each output sample.
  
  node_types : List[str]
      List of Node types.
  
  edge_types : List[Tuple[str, str, str]]
      List of Edge types.
  
  heads : int, optional (default=1)
      Number of multi-head-attentions.
  
  concat : bool, optional (default=True):
      If set to :obj:`False`, the multi-head attentions are averaged instead
      of concatenated.
  
  negative_slope : float, optional (default=0.2)
      LeakyReLU angle of the negative slope.
  
  bias : bool, optional (default=True)
      If set to :obj:`False`, the layer will not learn an additive bias.
  
  aggr : str, optional (default="sum")
      The aggregation scheme to use for grouping node embeddings generated by
      different relations. Choose from "sum", "mean", "min", "max".
class_docstr_tok: ["The","graph","attentional","operator","on","heterogeneous","graphs",",","where","a","separate","`","GATConv","`","is","applied","on","the","homogeneous","graph","for","each","edge","type",".","Compared","with","directly","wrapping","`","GATConv","`","s","with","`","HeteroConv","`",",","`","HeteroGATConv","`","fuses","all","the","linear","transformation","associated","with","each","node","type","together","into","1","GEMM","call",",","to","improve","the","performance","on","GPUs",".","Parameters","--","--","--","--","--","in_channels",":","int","or","Dict","[","str",",","int","]",")","Size","of","each","input","sample","of","every","node","type",".","out_channels",":","int","Size","of","each","output","sample",".","node_types",":","List","[","str","]","List","of","Node","types",".","edge_types",":","List","[","Tuple","[","str",",","str",",","str","]","]","List","of","Edge","types",".","heads",":","int",",","optional","(","default=1",")","Number","of","multi-head-attentions",".","concat",":","bool",",","optional","(","default=True",")",":","If","set","to",":","obj",":","`","False","`",",","the","multi-head","attentions","are","averaged","instead","of","concatenated",".","negative_slope",":","float",",","optional","(","default=0.2",")","LeakyReLU","angle","of","the","negative","slope",".","bias",":","bool",",","optional","(","default=True",")","If","set","to",":","obj",":","`","False","`",",","the","layer","will","not","learn","an","additive","bias",".","aggr",":","str",",","optional","(","default=","''","sum","''",")","The","aggregation","scheme","to","use","for","grouping","node","embeddings","generated","by","different","relations",".","Choose","from","``","sum","''",",","``","mean","''",",","``","min","''",",","``","max","''","."]
code: def reset_parameters(self, seed: Optional[int] = None):
      if seed is not None:
          torch.manual_seed(seed)
  
      w_src, w_dst = self.split_tensors(self.lin_weights, dim=0)
  
      for edge_type in self.edge_types:
          src_type, _, dst_type = edge_type
  
          # lin_src
          torch_geometric.nn.inits.glorot(w_src[edge_type])
  
          # lin_dst
          if src_type != dst_type:
              torch_geometric.nn.inits.glorot(w_dst[edge_type])
  
          # attn_weights
          torch_geometric.nn.inits.glorot(
              self.attn_weights[edge_type].view(
                  -1, self.num_heads, self.out_channels
              )
          )
  
          # bias
          if self.bias is not None:
              torch_geometric.nn.inits.zeros(self.bias[edge_type])
  
file_path: cugraph/python/cugraph-pyg/cugraph_pyg/nn/conv/hetero_gat_conv.py
imports: from typing import Optional, Union
  from collections import defaultdict
  from cugraph.utilities.utils import import_optional
  from pylibcugraphops.pytorch.operators import mha_gat_n2n
  from .base import BaseConv
label_desc: Use image node_id 3 for calling the HeteroGATConv obj's underlying member method code with example usage: obj.reset_parameters(seed) without return types