class_docstr: An implementation of the Evolving Graph Convolutional without Hidden Layer.
  For details see this paper: `"EvolveGCN: Evolving Graph Convolutional
  Networks for Dynamic Graph." <https://arxiv.org/abs/1902.10191>`_
  Args:
      in_channels (int): Number of filters.
      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`)
      normalize (bool, optional): Whether to add self-loops and apply
          symmetric normalization. (default: :obj:`True`)
      add_self_loops (bool, optional): If set to :obj:`False`, will not add
          self-loops to the input graph. (default: :obj:`True`)
docstr: Making a forward pass.
  Arg types:
      * **X** *(PyTorch Float Tensor)* - Node embedding.
      * **edge_index** *(PyTorch Long Tensor)* - Graph edge indices.
      * **edge_weight** *(PyTorch Float Tensor, optional)* - Edge weight vector.
  Return types:
      * **X** *(PyTorch Float Tensor)* - Output matrix for all nodes.
docstr_tok: ["Making","a","forward","pass",".","Arg","types",":","*","*","*","X","*","*","*","(","PyTorch","Float","Tensor",")","*","-","Node","embedding",".","*","*","*","edge_index","*","*","*","(","PyTorch","Long","Tensor",")","*","-","Graph","edge","indices",".","*","*","*","edge_weight","*","*","*","(","PyTorch","Float","Tensor",",","optional",")","*","-","Edge","weight","vector",".","Return","types",":","*","*","*","X","*","*","*","(","PyTorch","Float","Tensor",")","*","-","Output","matrix","for","all","nodes","."]
code: def forward(
      self,
      X: torch.FloatTensor,
      edge_index: torch.LongTensor,
      edge_weight: torch.FloatTensor = None,
  ) -> torch.FloatTensor:
      """
      Making a forward pass.
      Arg types:
          * **X** *(PyTorch Float Tensor)* - Node embedding.
          * **edge_index** *(PyTorch Long Tensor)* - Graph edge indices.
          * **edge_weight** *(PyTorch Float Tensor, optional)* - Edge weight vector.
      Return types:
          * **X** *(PyTorch Float Tensor)* - Output matrix for all nodes.
      """
  
      if self.weight is None:
          _, self.weight = self.recurrent_layer(
              self.initial_weight, self.initial_weight
          )
      else:
          _, self.weight = self.recurrent_layer(
              self.weight, self.weight
          )
      X = self.conv_layer(
          self.weight.squeeze(dim=0), X, edge_index, edge_weight
      )
      return X
  
imports: from typing import Optional, Tuple
  import torch
  from torch import Tensor
  from torch.nn import GRU
  from torch_geometric.typing import Adj, OptTensor
  from torch_sparse import SparseTensor
  from torch_geometric.nn.inits import glorot
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.nn.conv.gcn_conv import gcn_norm
label_desc: Use image node_id 5 for calling the EvolveGCNO obj's underlying member method code with example usage: obj.forward(X, edge_index, edge_weight) and returns: X