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

        Args:
            x (torch.Tensor): Input tensor of shape (batch, channel, height, width, 2),
                              where the last dimension represents the real and imaginary parts.

        Returns:
            torch.Tensor: Output tensor containing the normalized real and imaginary components,
                          with the same shape as the input tensor.
        """
        # Apply batch normalization to the real part
        real = self.bn_re(x[..., 0])
        # Apply batch normalization to the imaginary part
        imag = self.bn_im(x[..., 1])
        # Stack the normalized real and imaginary parts back together
        output = torch.stack((real, imag), dim=-1)

        return output

        Forward pass through the complex batch normalization layer.

        Args:
            x (torch.Tensor): Input tensor of shape (batch, channel, height, width, 2),
                              where the last dimension represents the real and imaginary parts.

        Returns:
            torch.Tensor: Output tensor containing the normalized real and imaginary components,
                          with the same shape as the input tensor.
        
clearvoice/clearvoice/models/frcrn_se/complex_nn.py