class_docstr: An implementation of the the Integrated Graph Convolutional Long Short Term
  Memory Cell. For details see this paper: `"GC-LSTM: Graph Convolution Embedded LSTM
  for Dynamic Link Prediction." <https://arxiv.org/abs/1812.04206>`_
  
  Args:
      in_channels (int): Number of input features.
      out_channels (int): Number of output features.
      K (int): Chebyshev filter size :math:`K`.
      normalization (str, optional): The normalization scheme for the graph
          Laplacian (default: :obj:`"sym"`):
  
          1. :obj:`None`: No normalization
          :math:`\mathbf{L} = \mathbf{D} - \mathbf{A}`
  
          2. :obj:`"sym"`: Symmetric normalization
          :math:`\mathbf{L} = \mathbf{I} - \mathbf{D}^{-1/2} \mathbf{A}
          \mathbf{D}^{-1/2}`
  
          3. :obj:`"rw"`: Random-walk normalization
          :math:`\mathbf{L} = \mathbf{I} - \mathbf{D}^{-1} \mathbf{A}`
  
          You need to pass :obj:`lambda_max` to the :meth:`forward` method of
          this operator in case the normalization is non-symmetric.
          :obj:`\lambda_max` should be a :class:`torch.Tensor` of size
          :obj:`[num_graphs]` in a mini-batch scenario and a
          scalar/zero-dimensional tensor when operating on single graphs.
          You can pre-compute :obj:`lambda_max` via the
          :class:`torch_geometric.transforms.LaplacianLambdaMax` transform.
      bias (bool, optional): If set to :obj:`False`, the layer will not learn
          an additive bias. (default: :obj:`True`)
class_docstr_tok: ["An","implementation","of","the","the","Integrated","Graph","Convolutional","Long","Short","Term","Memory","Cell",".","For","details","see","this","paper",":","`","``","GC-LSTM",":","Graph","Convolution","Embedded","LSTM","for","Dynamic","Link","Prediction",".","''","<","https",":","\/\/arxiv.org\/abs\/1812.04206",">","`","_","Args",":","in_channels","(","int",")",":","Number","of","input","features",".","out_channels","(","int",")",":","Number","of","output","features",".","K","(","int",")",":","Chebyshev","filter","size",":","math",":","`","K","`",".","normalization","(","str",",","optional",")",":","The","normalization","scheme","for","the","graph","Laplacian","(","default",":",":","obj",":","`","``","sym","''","`",")",":","1.",":","obj",":","`","None","`",":","No","normalization",":","math",":","`","\\mathbf","{","L","}","=","\\mathbf","{","D","}","-","\\mathbf","{","A","}","`","2.",":","obj",":","`","``","sym","''","`",":","Symmetric","normalization",":","math",":","`","\\mathbf","{","L","}","=","\\mathbf","{","I","}","-","\\mathbf","{","D","}","^","{","-1\/2","}","\\mathbf","{","A","}","\\mathbf","{","D","}","^","{","-1\/2","}","`","3.",":","obj",":","`","``","rw","''","`",":","Random-walk","normalization",":","math",":","`","\\mathbf","{","L","}","=","\\mathbf","{","I","}","-","\\mathbf","{","D","}","^","{","-1","}","\\mathbf","{","A","}","`","You","need","to","pass",":","obj",":","`","lambda_max","`","to","the",":","meth",":","`","forward","`","method","of","this","operator","in","case","the","normalization","is","non-symmetric",".",":","obj",":","`","\\lambda_max","`","should","be","a",":","class",":","`","torch.Tensor","`","of","size",":","obj",":","`","[","num_graphs","]","`","in","a","mini-batch","scenario","and","a","scalar\/zero-dimensional","tensor","when","operating","on","single","graphs",".","You","can","pre-compute",":","obj",":","`","lambda_max","`","via","the",":","class",":","`","torch_geometric.transforms.LaplacianLambdaMax","`","transform",".","bias","(","bool",",","optional",")",":","If","set","to",":","obj",":","`","False","`",",","the","layer","will","not","learn","an","additive","bias",".","(","default",":",":","obj",":","`","True","`",")"]
docstr: Making a forward pass. If edge weights are not present the forward pass
  defaults to an unweighted graph. If the hidden state and cell state
  matrices are not present when the forward pass is called these are
  initialized with zeros.
  
  Arg types:
      * **X** *(PyTorch Float Tensor)* - Node features.
      * **edge_index** *(PyTorch Long Tensor)* - Graph edge indices.
      * **edge_weight** *(PyTorch Long Tensor, optional)* - Edge weight vector.
      * **H** *(PyTorch Float Tensor, optional)* - Hidden state matrix for all nodes.
      * **C** *(PyTorch Float Tensor, optional)* - Cell state matrix for all nodes.
      * **lambda_max** *(PyTorch Tensor, optional but mandatory if normalization is not sym)* - Largest eigenvalue of Laplacian.
  
  Return types:
      * **H** *(PyTorch Float Tensor)* - Hidden state matrix for all nodes.
      * **C** *(PyTorch Float Tensor)* - Cell state matrix for all nodes.
docstr_tok: ["Making","a","forward","pass",".","If","edge","weights","are","not","present","the","forward","pass","defaults","to","an","unweighted","graph",".","If","the","hidden","state","and","cell","state","matrices","are","not","present","when","the","forward","pass","is","called","these","are","initialized","with","zeros",".","Arg","types",":","*","*","*","X","*","*","*","(","PyTorch","Float","Tensor",")","*","-","Node","features",".","*","*","*","edge_index","*","*","*","(","PyTorch","Long","Tensor",")","*","-","Graph","edge","indices",".","*","*","*","edge_weight","*","*","*","(","PyTorch","Long","Tensor",",","optional",")","*","-","Edge","weight","vector",".","*","*","*","H","*","*","*","(","PyTorch","Float","Tensor",",","optional",")","*","-","Hidden","state","matrix","for","all","nodes",".","*","*","*","C","*","*","*","(","PyTorch","Float","Tensor",",","optional",")","*","-","Cell","state","matrix","for","all","nodes",".","*","*","*","lambda_max","*","*","*","(","PyTorch","Tensor",",","optional","but","mandatory","if","normalization","is","not","sym",")","*","-","Largest","eigenvalue","of","Laplacian",".","Return","types",":","*","*","*","H","*","*","*","(","PyTorch","Float","Tensor",")","*","-","Hidden","state","matrix","for","all","nodes",".","*","*","*","C","*","*","*","(","PyTorch","Float","Tensor",")","*","-","Cell","state","matrix","for","all","nodes","."]
code: def forward(
      self,
      X: torch.FloatTensor,
      edge_index: torch.LongTensor,
      edge_weight: torch.FloatTensor = None,
      H: torch.FloatTensor = None,
      C: torch.FloatTensor = None,
      lambda_max: torch.Tensor = None,
  ) -> torch.FloatTensor:
      """
      Making a forward pass. If edge weights are not present the forward pass
      defaults to an unweighted graph. If the hidden state and cell state
      matrices are not present when the forward pass is called these are
      initialized with zeros.
  
      Arg types:
          * **X** *(PyTorch Float Tensor)* - Node features.
          * **edge_index** *(PyTorch Long Tensor)* - Graph edge indices.
          * **edge_weight** *(PyTorch Long Tensor, optional)* - Edge weight vector.
          * **H** *(PyTorch Float Tensor, optional)* - Hidden state matrix for all nodes.
          * **C** *(PyTorch Float Tensor, optional)* - Cell state matrix for all nodes.
          * **lambda_max** *(PyTorch Tensor, optional but mandatory if normalization is not sym)* - Largest eigenvalue of Laplacian.
  
      Return types:
          * **H** *(PyTorch Float Tensor)* - Hidden state matrix for all nodes.
          * **C** *(PyTorch Float Tensor)* - Cell state matrix for all nodes.
      """
      H = self._set_hidden_state(X, H)
      C = self._set_cell_state(X, C)
      I = self._calculate_input_gate(
          X, edge_index, edge_weight, H, C, lambda_max
      )
      F = self._calculate_forget_gate(
          X, edge_index, edge_weight, H, C, lambda_max
      )
      C = self._calculate_cell_state(
          X, edge_index, edge_weight, H, C, I, F, lambda_max
      )
      O = self._calculate_output_gate(
          X, edge_index, edge_weight, H, C, lambda_max
      )
      H = self._calculate_hidden_state(O, C)
      return H, C
  
imports: import torch
  from torch.nn import Parameter
  from torch_geometric.nn import ChebConv
  from torch_geometric.nn.inits import glorot, zeros
label_desc: Use image node_id 15 for calling the GCLSTM obj's underlying member method code with example usage: obj.forward(X, edge_index, edge_weight, H, C, lambda_max) and returns: H,  C