class_docstr: Abstract base class for preprocessing defences implemented in TensorFlow v2 that support efficient
  preprocessor-chaining.
docstr: Apply preprocessing to input `x` and labels `y`.
  
  :param x: Sample to smooth with shape `(batch_size, width, height, depth)`.
  :param y: Labels of the sample `x`. This function does not affect them in any way.
  :return: Smoothed sample.
docstr_tok: ["Apply","preprocessing","to","input","`","x","`","and","labels","`","y","`",".",":","param","x",":","Sample","to","smooth","with","shape","`","(","batch_size",",","width",",","height",",","depth",")","`",".",":","param","y",":","Labels","of","the","sample","`","x","`",".","This","function","does","not","affect","them","in","any","way",".",":","return",":","Smoothed","sample","."]
code: def __call__(
      self, x: np.ndarray, y: Optional[np.ndarray] = None
  ) -> Tuple[np.ndarray, Optional[np.ndarray]]:
      """
      Apply preprocessing to input `x` and labels `y`.
  
      :param x: Sample to smooth with shape `(batch_size, width, height, depth)`.
      :param y: Labels of the sample `x`. This function does not affect them in any way.
      :return: Smoothed sample.
      """
      import tensorflow as tf
  
      x_tensor = tf.convert_to_tensor(x)
      if y is not None:
          y = tf.convert_to_tensor(y)
  
      x_tensor, y = self.forward(x_tensor, y)
  
      x_result = x_tensor.numpy()
      if y is not None:
          y = y.numpy()
      return x_result, y
  
imports: from __future__ import absolute_import, division, print_function, unicode_literals
  import abc
  from typing import List, Optional, Tuple, Any, TYPE_CHECKING
  import numpy
  from art import config
label_desc: Use image node_id 3 for calling the PreprocessorTensorFlowV2 obj's underlying member method code with example usage: obj.__call__(x, y) and returns: x_result,  y