class_docstr: Class which converts the supplied pytorch model into an equivalent model
  which uses abstract operations
class_docstr_tok: ["Class","which","converts","the","supplied","pytorch","model","into","an","equivalent","model","which","uses","abstract","operations"]
docstr: Do the forward pass using the concrete operations
  
  :param in_x: regular (concrete) data.
docstr_tok: ["Do","the","forward","pass","using","the","concrete","operations",":","param","in_x",":","regular","(","concrete",")","data","."]
code: def concrete_forward(
      self, in_x: Union[np.ndarray, "torch.Tensor"]
  ) -> "torch.Tensor":
      """
      Do the forward pass using the concrete operations
  
      :param in_x: regular (concrete) data.
      """
  
      if isinstance(in_x, np.ndarray):
          x = torch.from_numpy(in_x.astype("float32")).to(self.device)
      else:
          x = in_x
  
      for op_num, op in enumerate(self.ops):
          # as reshapes are not modules we infer when the reshape from convolutional to dense occurs
          if self.reshape_op_num == op_num:
              x = x.reshape((x.shape[0], -1))
          x = op.concrete_forward(x)
      return x
  
imports: from typing import List, Optional, Tuple, Union, Callable, Any, TYPE_CHECKING
  import logging
  import math
  import warnings
  import sys
  import numpy
  import torch
  from art.estimators.certification.deep_z.deep_z import ZonoConv, ZonoDenseLayer, ZonoReLU, ZonoBounds
  from art.estimators.classification.pytorch import PyTorchClassifier
label_desc: Use image node_id 4 for calling the ConvertedModel obj's underlying member method code with example usage: obj.concrete_forward(in_x) and returns: x