class_docstr: R(2+1)D basic stem module. Assume a single pathway.
  Performs spatial convolution, temporal convolution, BN, and Relu following by a
      spatiotemporal pooling.
code: def _construct_stem(self, dim_in, dim_out):
      assert (
          self.stride[1] == self.stride[2]
      ), "Only support identical height stride and width stride"
      self.conv = r2plus1_unit(
          dim_in,
          dim_out,
          self.stride[0],  # temporal_stride
          self.stride[1],  # spatial_stride
          1,  # groups
          self.inplace_relu,
          self.bn_eps,
          self.bn_mmt,
          dim_mid=45,  # hard-coded middle channels
      )
      self.bn = nn.BatchNorm3d(
          dim_out, eps=self.bn_eps, momentum=self.bn_mmt
      )
      self.relu = nn.ReLU(self.inplace_relu)
      if self.maxpool:
          self.pool_layer = nn.MaxPool3d(
              kernel_size=[1, 3, 3], stride=[1, 2, 2], padding=[0, 1, 1]
          )
  
imports: from typing import Sequence
  import torch.nn
  from .r2plus1_util import r2plus1_unit
label_desc: Use image node_id 2 for calling the R2Plus1DStemSinglePathway obj's underlying member method code with example usage: obj._construct_stem(dim_in, dim_out) without return types