class_docstr: A factory for an expression for the following tuple per (optionally
  adversarial) example:
    - bool per indicating whether each the example was classified correctly
    - probability assigned to that prediction
code: def __call__(self):
      x_batch = self.model.make_input_placeholder()
      y_batch = self.model.make_label_placeholder()
  
      if LooseVersion(tf.__version__) < LooseVersion("1.0.0"):
          raise NotImplementedError()
  
      if self.attack is None:
          x_input = x_batch
      else:
          attack_params = self.attack_params
          if attack_params is None:
              attack_params = {}
          x_input = self.attack.generate(
              x_batch, y=y_batch, **attack_params
          )
  
      predictions = self.model.get_probs(x_input)
      correct = tf.equal(
          tf.argmax(y_batch, axis=-1), tf.argmax(predictions, axis=-1)
      )
      max_probs = tf.reduce_max(predictions, axis=1)
  
      return (x_batch, y_batch), (correct, max_probs)
  
imports: from distutils.version import LooseVersion
  import warnings
  import numpy
  from six.moves import range
  import tensorflow
  import cleverhans
  from cleverhans import canary
  from cleverhans.utils import create_logger
  from cleverhans.utils_tf import infer_devices
label_desc: Use image node_id 4 for calling the _CorrectAndProbFactory obj's underlying member method code with example usage: obj.__call__() and returns: x_batch,  y_batch,  correct,  max_probs