class_docstr: Class implementing a convolutional layer in the interval/box domain.
class_docstr_tok: ["Class","implementing","a","convolutional","layer","in","the","interval\/box","domain","."]
docstr: 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
docstr_tok: ["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"]
code: 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)
      )
  
imports: from typing import List, Union, Tuple, Optional
  import torch
  import numpy
label_desc: Use image node_id 5 for calling the PyTorchIntervalConv2D obj's underlying member method code with example usage: obj.concrete_forward(x) and returns: x