def forward(self, x):
        """
        Forward pass through the complex convolutional layer.

        Args:
            x (torch.Tensor): Input tensor of shape (batch, channel, axis1, axis2, 2) 
                             representing the real and imaginary parts.

        Returns:
            torch.Tensor: Output tensor containing the convolved real and imaginary parts.
        """
        # Apply convolution to the real and imaginary parts
        real = self.conv_re(x[..., 0]) - self.conv_im(x[..., 1])
        imaginary = self.conv_re(x[..., 1]) + self.conv_im(x[..., 0])
        output = torch.stack((real, imaginary), dim=-1)  # Stack real and imaginary components

        return output

        Forward pass through the complex convolutional layer.

        Args:
            x (torch.Tensor): Input tensor of shape (batch, channel, axis1, axis2, 2) 
                             representing the real and imaginary parts.

        Returns:
            torch.Tensor: Output tensor containing the convolved real and imaginary parts.
        
clearvoice/clearvoice/models/frcrn_se/complex_nn.py