class_docstr: Modification of PyTorch Geometirc's nn.GCNConv, which reduces the computational cost of GCN layer for
  `GripNet <https://github.com/NYXFLOWER/GripNet>`_ model.
  The graph convolutional operator from the `"Semi-supervised Classification with Graph Convolutional Networks"
  <https://arxiv.org/abs/1609.02907>`_ (ICLR 2017) paper.
  
  .. math::
      \mathbf{X}^{\prime} = \mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}}
      \mathbf{\hat{D}}^{-1/2} \mathbf{X} \mathbf{\Theta},
  
  where :math:`\mathbf{\hat{A}} = \mathbf{A} + \mathbf{I}` denotes the
  adjacency matrix with inserted self-loops and
  :math:`\hat{D}_{ii} = \sum_{j=0} \hat{A}_{ij}` its diagonal degree matrix.
  
  Note: For more information please see Pytorch Geomertic's `nn.GCNConv
  <https://pytorch-geometric.readthedocs.io/en/latest/modules/nn.html#module-torch_geometric.nn.conv.message_passing>`_ docs.
  
  Args:
      in_channels (int): Size of each input sample.
      out_channels (int): Size of each output sample.
      improved (bool, optional): If set to :obj:`True`, the layer computes
          :math:`\mathbf{\hat{A}}` as :math:`\mathbf{A} + 2\mathbf{I}`.
          (default: :obj:`False`)
      cached (bool, optional): If set to :obj:`True`, the layer will cache
          the computation of :math:`\mathbf{\hat{D}}^{-1/2} \mathbf{\hat{A}}
          \mathbf{\hat{D}}^{-1/2}` on first execution, and will use the
          cached version for further executions.
          This parameter should only be set to :obj:`True` in transductive
          learning scenarios. (default: :obj:`False`)
      bias (bool, optional): If set to :obj:`False`, the layer will not learn
          an additive bias. (default: :obj:`True`)
      **kwargs (optional): Additional arguments of
          :class:`torch_geometric.nn.conv.MessagePassing`.
docstr: Args:
      x (torch.Tensor): The input node feature embedding.
      edge_index (torch.Tensor): Graph edge index in COO format with shape [2, num_edges].
      edge_weight (torch.Tensor, optional): The one-dimensional relation weight for each edge in
          :obj:`edge_index` (default: None).
docstr_tok: ["Args",":","x","(","torch.Tensor",")",":","The","input","node","feature","embedding",".","edge_index","(","torch.Tensor",")",":","Graph","edge","index","in","COO","format","with","shape","[","2",",","num_edges","]",".","edge_weight","(","torch.Tensor",",","optional",")",":","The","one-dimensional","relation","weight","for","each","edge","in",":","obj",":","`","edge_index","`","(","default",":","None",")","."]
code: def forward(self, x, edge_index, edge_weight=None):
      """
      Args:
          x (torch.Tensor): The input node feature embedding.
          edge_index (torch.Tensor): Graph edge index in COO format with shape [2, num_edges].
          edge_weight (torch.Tensor, optional): The one-dimensional relation weight for each edge in
              :obj:`edge_index` (default: None).
      """
      x = torch.matmul(x, self.weight)
  
      if self.cached and self.cached_result is not None:
          if edge_index.size(1) != self.cached_num_edges:
              raise RuntimeError(
                  "Cached {} number of edges, but found {}".format(
                      self.cached_num_edges, edge_index.size(1)
                  )
              )
  
      if not self.cached or self.cached_result is None:
          self.cached_num_edges = edge_index.size(1)
          edge_index, norm = self.norm(
              edge_index, x.size(0), edge_weight, self.improved, x.dtype
          )
          self.cached_result = edge_index, norm
  
      edge_index, norm = self.cached_result
  
      return self.propagate(edge_index, x=x, norm=norm)
  
imports: import numpy
  import torch
  from torch.nn import Parameter
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.utils import add_remaining_self_loops
  from torch_scatter import scatter_add
label_desc: Use image node_id 4 for calling the GCNEncoderLayer obj's underlying member method code with example usage: obj.forward(x, edge_index, edge_weight) and returns: self