class_docstr: The heterogeneous compitable GraphSAGE operator is derived from the `"Inductive Representation
  Learning on Large Graphs" <https://arxiv.org/abs/1706.02216>`_, `"Modeling polypharmacy side
  effects with graph convolutional networks" <https://arxiv.org/abs/1802.00543>`_, and `"Modeling
  Relational Data with Graph Convolutional Networks" <https://arxiv.org/abs/1703.06103>`_ papers.
  
  .. note::
  
      This layer is usually used with the :class:`HeteroConv`.
  
  Args:
      in_channels_neigh (int): The input dimension of the neighbor node type.
      out_channels (int): The dimension of the output.
      in_channels_self (int): The input dimension of the self node type.
          Default is `None` where the `in_channels_self` is equal to `in_channels_neigh`.
      remove_self_loop (bool): Whether to remove self loops using :class:`torch_geometric.utils.remove_self_loops`.
          Default is `True`.
docstr_tok: []
code: def forward(
      self,
      node_feature_neigh,
      node_feature_self,
      edge_index,
      edge_weight=None,
      size=None,
      res_n_id=None,
  ):
      r""" """
      if self.remove_self_loop:
          edge_index, _ = pyg_utils.remove_self_loops(edge_index)
      return self.propagate(
          edge_index,
          size=size,
          node_feature_neigh=node_feature_neigh,
          node_feature_self=node_feature_self,
          edge_weight=edge_weight,
          res_n_id=res_n_id,
      )
  
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 2 for calling the HeteroSAGEConv obj's underlying member method code with example usage: obj.forward(node_feature_neigh, node_feature_edge_index, edge_weight, size, res_n_id) and returns: self