def forward(self, input):
        """Forward pass of the UniDeepFsmn model.

        Args:
            input (torch.Tensor): The input tensor with shape (batch_size, input_dim).

        Returns:
            torch.Tensor: The output tensor after processing through the model.
        """
        # Apply ReLU activation after linear transformation
        f1 = F.relu(self.linear(input))

        # Project to output dimension
        p1 = self.project(f1)

        # Unsqueeze to add a new dimension for the convolution operation
        x = th.unsqueeze(p1, 1)

        # Permute dimensions for the convolutional layer input
        x_per = x.permute(0, 3, 2, 1)

        # Pad the input for convolutional layer
        y = F.pad(x_per, [0, 0, self.lorder - 1, self.lorder - 1])

        # Apply convolution and add the result back to the original input
        out = x_per + self.conv1(y)

        # Permute dimensions back to original format for output
        out1 = out.permute(0, 3, 2, 1)

        # Return the combined output
        return input + out1.squeeze()
Forward pass of the UniDeepFsmn model.

        Args:
            input (torch.Tensor): The input tensor with shape (batch_size, input_dim).

        Returns:
            torch.Tensor: The output tensor after processing through the model.
        
clearvoice/clearvoice/models/mossformer_gan_se/fsmn.py