class_docstr: An implementation of the Diffusion Convolutional Gated Recurrent Unit.
  For details see: `"Diffusion Convolutional Recurrent Neural Network:
  Data-Driven Traffic Forecasting" <https://arxiv.org/abs/1707.01926>`_
  
  Args:
      in_channels (int): Number of input features.
      out_channels (int): Number of output features.
      K (int): Filter size :math:`K`.
      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 matrix is not present
  when the forward pass is called it is 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.
  
  Return types:
      * **H** (PyTorch Float Tensor) - Hidden 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","matrix","is","not","present","when","the","forward","pass","is","called","it","is","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",".","Return","types",":","*","*","*","H","*","*","(","PyTorch","Float","Tensor",")","-","Hidden","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,
  ) -> torch.FloatTensor:
      r"""Making a forward pass. If edge weights are not present the forward pass
      defaults to an unweighted graph. If the hidden state matrix is not present
      when the forward pass is called it is 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.
  
      Return types:
          * **H** (PyTorch Float Tensor) - Hidden state matrix for all nodes.
      """
      H = self._set_hidden_state(X, H)
      Z = self._calculate_update_gate(X, edge_index, edge_weight, H)
      R = self._calculate_reset_gate(X, edge_index, edge_weight, H)
      H_tilde = self._calculate_candidate_state(
          X, edge_index, edge_weight, H, R
      )
      H = self._calculate_hidden_state(Z, H, H_tilde)
      return H
  
imports: import math
  import torch
  from torch_geometric.utils import to_dense_adj, dense_to_sparse
  from torch_geometric.nn.conv import MessagePassing
label_desc: Use image node_id 11 for calling the DCRNN obj's underlying member method code with example usage: obj.forward(X, edge_index, edge_weight, H) and returns: H