class_docstr: X3D transformation: 1x1x1, Tx3x3 (channelwise, num_groups=dim_in), 1x1x1,
      augmented with (optional) SE (squeeze-excitation) on the 3x3x3 output.
      T is the temporal kernel size (defaulting to 3)
class_docstr_tok: ["X3D","transformation",":","1x1x1",",","Tx3x3","(","channelwise",",","num_groups=dim_in",")",",","1x1x1",",","augmented","with","(","optional",")","SE","(","squeeze-excitation",")","on","the","3x3x3","output",".","T","is","the","temporal","kernel","size","(","defaulting","to","3",")"]
code: def _construct(
      self,
      dim_in,
      dim_out,
      stride,
      dim_inner,
      num_groups,
      dilation,
      norm_module,
  ):
      (str1x1, str3x3) = (
          (stride, 1) if self._stride_1x1 else (1, stride)
      )
  
      # 1x1x1, BN, ReLU.
      self.a = nn.Conv3d(
          dim_in,
          dim_inner,
          kernel_size=[1, 1, 1],
          stride=[1, str1x1, str1x1],
          padding=[0, 0, 0],
          bias=False,
      )
      self.a_bn = norm_module(
          num_features=dim_inner, eps=self._eps, momentum=self._bn_mmt
      )
      self.a_relu = nn.ReLU(inplace=self._inplace_relu)
  
      # Tx3x3, BN, ReLU.
      self.b = nn.Conv3d(
          dim_inner,
          dim_inner,
          [self.temp_kernel_size, 3, 3],
          stride=[1, str3x3, str3x3],
          padding=[int(self.temp_kernel_size // 2), dilation, dilation],
          groups=num_groups,
          bias=False,
          dilation=[1, dilation, dilation],
      )
      self.b_bn = norm_module(
          num_features=dim_inner, eps=self._eps, momentum=self._bn_mmt
      )
  
      # Apply SE attention or not
      use_se = True if (self._block_idx + 1) % 2 else False
      if self._se_ratio > 0.0 and use_se:
          self.se = SE(dim_inner, self._se_ratio)
  
      if self._swish_inner:
          self.b_relu = Swish()
      else:
          self.b_relu = nn.ReLU(inplace=self._inplace_relu)
  
      # 1x1x1, BN.
      self.c = nn.Conv3d(
          dim_inner,
          dim_out,
          kernel_size=[1, 1, 1],
          stride=[1, 1, 1],
          padding=[0, 0, 0],
          bias=False,
      )
      self.c_bn = norm_module(
          num_features=dim_out, eps=self._eps, momentum=self._bn_mmt
      )
      self.c_bn.transform_final_bn = True
  
imports: import torch
  import torch.nn
  from slowfast.models.common import drop_path
  from slowfast.models.nonlocal_helper import Nonlocal
  from slowfast.models.operators import SE, Swish
label_desc: Use image node_id 2 for calling the X3DTransform obj's underlying member method code with example usage: obj._construct(dim_in, dim_out, stride, dim_inner, num_groups, dilation, norm_module) without return types