class_docstr: Applies a 2D convolution over an input
  
  Args:
      in_channels (int): :math:`C_{in}` from an expected input of size :math:`(N, C_{in}, H_{in}, W_{in})`
      out_channels (int): :math:`C_{out}` from an expected output of size :math:`(N, C_{out}, H_{out}, W_{out})`
      kernel_size (Union[int, Tuple[int, int]]): Kernel size for convolution.
      stride (Union[int, Tuple[int, int]]): Stride for convolution. Default: 1
      groups (Optional[int]): Number of groups in convolution. Default: 1
      bias (Optional[bool]): Use bias. Default: ``False``
      use_norm (Optional[bool]): Use normalization layer after convolution. Default: ``True``
      use_act (Optional[bool]): Use activation layer after convolution (or convolution and normalization).
                              Default: ``True``
  
  Shape:
      - Input: :math:`(N, C_{in}, H_{in}, W_{in})`
      - Output: :math:`(N, C_{out}, H_{out}, W_{out})`
  
  .. note::
      For depth-wise convolution, `groups=C_{in}=C_{out}`.
class_docstr_tok: ["Applies","a","2D","convolution","over","an","input","Args",":","in_channels","(","int",")",":",":","math",":","`","C_","{","in","}","`","from","an","expected","input","of","size",":","math",":","`","(","N",",","C_","{","in","}",",","H_","{","in","}",",","W_","{","in","}",")","`","out_channels","(","int",")",":",":","math",":","`","C_","{","out","}","`","from","an","expected","output","of","size",":","math",":","`","(","N",",","C_","{","out","}",",","H_","{","out","}",",","W_","{","out","}",")","`","kernel_size","(","Union","[","int",",","Tuple","[","int",",","int","]","]",")",":","Kernel","size","for","convolution",".","stride","(","Union","[","int",",","Tuple","[","int",",","int","]","]",")",":","Stride","for","convolution",".","Default",":","1","groups","(","Optional","[","int","]",")",":","Number","of","groups","in","convolution",".","Default",":","1","bias","(","Optional","[","bool","]",")",":","Use","bias",".","Default",":","``","False","``","use_norm","(","Optional","[","bool","]",")",":","Use","normalization","layer","after","convolution",".","Default",":","``","True","``","use_act","(","Optional","[","bool","]",")",":","Use","activation","layer","after","convolution","(","or","convolution","and","normalization",")",".","Default",":","``","True","``","Shape",":","-","Input",":",":","math",":","`","(","N",",","C_","{","in","}",",","H_","{","in","}",",","W_","{","in","}",")","`","-","Output",":",":","math",":","`","(","N",",","C_","{","out","}",",","H_","{","out","}",",","W_","{","out","}",")","`","..","note",":",":","For","depth-wise","convolution",",","`","groups=C_","{","in","}","=C_","{","out","}","`","."]
code: def forward(self, x: Tensor) -> Tensor:
      return self.block(x)
  
imports: from typing import Optional, Tuple, Union, Dict
  import math
  import torch
  import torch.nn
  from torch import Tensor
  from torch.nn import functional
  from transformer import TransformerEncoder
  from model_config import get_config
label_desc: Use image node_id 2 for calling the ConvLayer obj's underlying member method code with example usage: obj.forward(x) and returns: self