class_docstr: Separable Conv2D in pytorch
  
  Args:
      in_c (`int`):
          Number of channels in the input image.
      out_c (`int`):
          Number of channels produced by the convolution.
      kernel_size (`Union[int, Tuple]`):
          Size of the convolving kernel.
      stride (`Union[int, Tuple]`):
          Stride of the convolution.
      in_f (`int`):
          Padding parameter.
      in_t (`int`):
          Padding parameter.
      fuller (`bool=False`):
          Whether to use group in conv2 layer.
      activation (`nn.Module=nn.ReLU()`):
          Activation layer.
      relu_after_bn (`bool=False`):
          Whether to add ReLU after batch norm.
code: def forward(self, x):
      if not self.hacked:
          x = self.pad1(x)
      x = self.conv1(x)
      if self.relu_after_bn:
          x = self.ln1(x)
          x = self.relu1(x)
      else:
          x = self.relu1(x)
          x = self.ln1(x)
      if not self.hacked:
          x = self.pad2(x)
      x = self.conv2(x)
      if self.relu_after_bn:
          x = self.ln2(x)
          x = self.relu2(x)
      else:
          x = self.relu2(x)
          x = self.ln2(x)
      return x
  
imports: import torch
  from torch import nn
  from typing import Union, Tuple
label_desc: Use image node_id 3 for calling the SeparableConv2d obj's underlying member method code with example usage: obj.forward(x) and returns: x