def concrete_forward(self, x: "torch.Tensor") -> "torch.Tensor":
        """
        Performs the forward pass using the equivalent dense representation of the convolutional layer.

        :param x: concrete input to the convolutional layer.
        :return: output of the convolutional layer on x
        """
        x = torch.reshape(x, (x.shape[0], -1))
        if self.bias is None:
            x = torch.matmul(x, torch.transpose(self.dense_weights, 0, 1))
        else:
            x = torch.matmul(x, torch.transpose(self.dense_weights, 0, 1)) + self.bias
        return x.reshape((-1, self.out_channels, self.output_height, self.output_width))

        Performs the forward pass using the equivalent dense representation of the convolutional layer.

        :param x: concrete input to the convolutional layer.
        :return: output of the convolutional layer on x
        
art/estimators/certification/interval/interval.py