def forward(self, x: torch.Tensor) -> torch.Tensor:
        """
        Apply the filter bank to the input signal.

        Parameters
        ----------
        x : torch.Tensor
            Input tensor of shape (batch_size, n_chans, time_points).

        Returns
        -------
        torch.Tensor
            Filtered output tensor of shape (batch_size, n_bands, n_chans, filtered_time_points).
        """
        outs = []
        if self.method_iir:
            for b, a in zip(self.b_list, self.a_list):
                # Pass numerator and denominator directly
                outs.append(self._apply_iir(x=x, b_coeffs=b, a_coeffs=a))
        else:
            for fir in self.fir_list:
                # Pass FIR filter directly
                outs.append(self._apply_fir(x=x, filt=fir, n_chans=self.n_chans))

        return torch.cat(outs, dim=1)

        Apply the filter bank to the input signal.

        Parameters
        ----------
        x : torch.Tensor
            Input tensor of shape (batch_size, n_chans, time_points).

        Returns
        -------
        torch.Tensor
            Filtered output tensor of shape (batch_size, n_bands, n_chans, filtered_time_points).
        
braindecode/modules/filter.py