class_docstr: Implementation of 2+1d Convolution by factorizing 3D Convolution into an 1D temporal
  Convolution and a 2D spatial Convolution with Normalization and Activation module
  in between:
  
  ::
  
                      Conv_t (or Conv_xy if conv_xy_first = True)
                                         ↓
                                   Normalization
                                         ↓
                                     Activation
                                         ↓
                      Conv_xy (or Conv_t if conv_xy_first = True)
  
  The 2+1d Convolution is used to build the R(2+1)D network.
class_docstr_tok: ["Implementation","of","2+1d","Convolution","by","factorizing","3D","Convolution","into","an","1D","temporal","Convolution","and","a","2D","spatial","Convolution","with","Normalization","and","Activation","module","in","between",":",":",":","Conv_t","(","or","Conv_xy","if","conv_xy_first","=","True",")","\u2193","Normalization","\u2193","Activation","\u2193","Conv_xy","(","or","Conv_t","if","conv_xy_first","=","True",")","The","2+1d","Convolution","is","used","to","build","the","R","(","2+1",")","D","network","."]
code: def forward(self, x: torch.Tensor) -> torch.Tensor:
      x = self.conv_xy(x) if self.conv_xy_first else self.conv_t(x)
      x = self.norm(x) if self.norm else x
      x = self.activation(x) if self.activation else x
      x = self.conv_t(x) if self.conv_xy_first else self.conv_xy(x)
      return x
  
file_path: pytorchvideo/pytorchvideo/layers/convolutions.py
imports: from typing import Callable, Optional, Tuple
  import torch
  import torch.nn
  from pytorchvideo.layers.utils import set_attributes
  from torch.nn.common_types import _size_3_t
label_desc: Use image node_id 2 for calling the Conv2plus1d obj's underlying member method code with example usage: obj.forward(x) and returns: x