class_docstr: Temporal convolution block applied to nodes in the STGCN Layer
  For details see: `"Spatio-Temporal Graph Convolutional Networks:
  A Deep Learning Framework for Traffic Forecasting."
  <https://arxiv.org/abs/1709.04875>`_ Based off the temporal convolution
   introduced in "Convolutional Sequence to Sequence Learning"  <https://arxiv.org/abs/1709.04875>`_
  
  Args:
      in_channels (int): Number of input features.
      out_channels (int): Number of output features.
      kernel_size (int): Convolutional kernel size.
class_docstr_tok: ["Temporal","convolution","block","applied","to","nodes","in","the","STGCN","Layer","For","details","see",":","`","``","Spatio-Temporal","Graph","Convolutional","Networks",":","A","Deep","Learning","Framework","for","Traffic","Forecasting",".","''","<","https",":","\/\/arxiv.org\/abs\/1709.04875",">","`","_","Based","off","the","temporal","convolution","introduced","in","``","Convolutional","Sequence","to","Sequence","Learning","''","<","https",":","\/\/arxiv.org\/abs\/1709.04875",">","`","_","Args",":","in_channels","(","int",")",":","Number","of","input","features",".","out_channels","(","int",")",":","Number","of","output","features",".","kernel_size","(","int",")",":","Convolutional","kernel","size","."]
docstr: Forward pass through temporal convolution block.
  
  Arg types:
      * **X** (torch.FloatTensor) -  Input data of shape
          (batch_size, input_time_steps, num_nodes, in_channels).
  
  Return types:
      * **H** (torch.FloatTensor) - Output data of shape
          (batch_size, in_channels, num_nodes, input_time_steps).
docstr_tok: ["Forward","pass","through","temporal","convolution","block",".","Arg","types",":","*","*","*","X","*","*","(","torch.FloatTensor",")","-","Input","data","of","shape","(","batch_size",",","input_time_steps",",","num_nodes",",","in_channels",")",".","Return","types",":","*","*","*","H","*","*","(","torch.FloatTensor",")","-","Output","data","of","shape","(","batch_size",",","in_channels",",","num_nodes",",","input_time_steps",")","."]
code: def forward(self, X: torch.FloatTensor) -> torch.FloatTensor:
      """Forward pass through temporal convolution block.
  
      Arg types:
          * **X** (torch.FloatTensor) -  Input data of shape
              (batch_size, input_time_steps, num_nodes, in_channels).
  
      Return types:
          * **H** (torch.FloatTensor) - Output data of shape
              (batch_size, in_channels, num_nodes, input_time_steps).
      """
      X = X.permute(0, 3, 2, 1)
      P = self.conv_1(X)
      Q = torch.sigmoid(self.conv_2(X))
      PQ = P * Q
      H = F.relu(PQ + self.conv_3(X))
      H = H.permute(0, 3, 2, 1)
      return H
  
file_path: pytorch_geometric_temporal/torch_geometric_temporal/nn/attention/stgcn.py
imports: import math
  import torch
  import torch.nn
  import torch.nn.functional
  from torch_geometric.nn import ChebConv
label_desc: Use image node_id 2 for calling the TemporalConv obj's underlying member method code with example usage: obj.forward(X) and returns: H