code: def conv2d(self, x_in: Connection, w_in: Connection, receptive_field_size, filters_number, stride=1, padding=1,
                 name=""):
          
          x_cols = self.tensor_3d_to_cols(x_in, receptive_field_size, stride=stride, padding=padding)
          mul = self.transpose(self.matrix_multiply(x_cols, w_in), 0, 2, 1)
  
          #output_width = self.sum(self.div(self.sum(self.sum(self.shape(x_in, 2), self.constant(-1 * receptive_field_size)),
          #                        self.constant(2 * padding)), self.constant(stride)), self.constant(1))
          # output_height = (h - f + 2 * p) / s + 1
  
          output = self.reshape(mul, (-1, filters_number, receptive_field_size, receptive_field_size))
  
          output.name = name
          return output
docs: Computes a 2-D convolution given 4-D input and filter tensors.