class_docstr: Two-Stream Adaptive Graph Convolutional Network.
  
  For details see this paper: `"Two-Stream Adaptive Graph Convolutional Networks for
  Skeleton-Based Action Recognition." <https://arxiv.org/abs/1805.07694>`_.
  This implementation is based on the authors Github Repo https://github.com/lshiwjx/2s-AGCN.
  It's used by the author for classifying actions from sequences of 3D body joint coordinates.
  
  Args:
      in_channels (int): Number of input features.
      out_channels (int): Number of output features.
      edge_index (PyTorch LongTensor): Graph edge indices.
      num_nodes (int): Number of nodes in the network.
      stride (int, optional): Time strides during temporal convolution. (default: :obj:`1`)
      residual (bool, optional): Applying residual connection. (default: :obj:`True`)
      adaptive (bool, optional): Adaptive node connection weights. (default: :obj:`True`)
      attention (bool, optional): Applying spatial-temporal-channel-attention.
      (default: :obj:`True`)
class_docstr_tok: ["Two-Stream","Adaptive","Graph","Convolutional","Network",".","For","details","see","this","paper",":","`","``","Two-Stream","Adaptive","Graph","Convolutional","Networks","for","Skeleton-Based","Action","Recognition",".","''","<","https",":","\/\/arxiv.org\/abs\/1805.07694",">","`","_",".","This","implementation","is","based","on","the","authors","Github","Repo","https",":","\/\/github.com\/lshiwjx\/2s-AGCN",".","It","'s","used","by","the","author","for","classifying","actions","from","sequences","of","3D","body","joint","coordinates",".","Args",":","in_channels","(","int",")",":","Number","of","input","features",".","out_channels","(","int",")",":","Number","of","output","features",".","edge_index","(","PyTorch","LongTensor",")",":","Graph","edge","indices",".","num_nodes","(","int",")",":","Number","of","nodes","in","the","network",".","stride","(","int",",","optional",")",":","Time","strides","during","temporal","convolution",".","(","default",":",":","obj",":","`","1","`",")","residual","(","bool",",","optional",")",":","Applying","residual","connection",".","(","default",":",":","obj",":","`","True","`",")","adaptive","(","bool",",","optional",")",":","Adaptive","node","connection","weights",".","(","default",":",":","obj",":","`","True","`",")","attention","(","bool",",","optional",")",":","Applying","spatial-temporal-channel-attention",".","(","default",":",":","obj",":","`","True","`",")"]
docstr: Making a forward pass.
  
  Arg types:
      * **X** (PyTorch FloatTensor) - Node features for T time periods,
      with shape (B, F_in, T_in, N_nodes).
  
  Return types:
      * **X** (PyTorch FloatTensor)* - Sequence of node features,
      with shape (B, out_channels, T_in//stride, N_nodes).
docstr_tok: ["Making","a","forward","pass",".","Arg","types",":","*","*","*","X","*","*","(","PyTorch","FloatTensor",")","-","Node","features","for","T","time","periods",",","with","shape","(","B",",","F_in",",","T_in",",","N_nodes",")",".","Return","types",":","*","*","*","X","*","*","(","PyTorch","FloatTensor",")","*","-","Sequence","of","node","features",",","with","shape","(","B",",","out_channels",",","T_in\/\/stride",",","N_nodes",")","."]
code: def forward(self, x):
      """
      Making a forward pass.
  
      Arg types:
          * **X** (PyTorch FloatTensor) - Node features for T time periods,
          with shape (B, F_in, T_in, N_nodes).
  
      Return types:
          * **X** (PyTorch FloatTensor)* - Sequence of node features,
          with shape (B, out_channels, T_in//stride, N_nodes).
      """
      y = self.relu(self.tcn1(self.gcn1(x)) + self.residual(x))
      return y
  
imports: import math
  import torch
  import numpy
  import torch.nn
  from torch.autograd import Variable
  from torch_geometric.utils.to_dense_adj import to_dense_adj
  import torch.nn.functional
label_desc: Use image node_id 2 for calling the AAGCN obj's underlying member method code with example usage: obj.forward(x) and returns: y