def batch_predictions(<EOL>self, images, greedy=False, strict=True, return_details=False):
if strict:<EOL><INDENT>in_bounds = self.in_bounds(images)<EOL>assert in_bounds<EOL><DEDENT>self._total_prediction_calls += len(images)<EOL>predictions = self.__model.batch_predictions(images)<EOL>assert predictions.ndim == <NUM_LIT:2><EOL>assert predictions.shape[<NUM_LIT:0>] == images.shape[<NUM_LIT:0>]<EOL>if return_details:<EOL><INDENT>assert greedy<EOL><DEDENT>adversarials = []<EOL>for i in range(len(predictions)):<EOL><INDENT>if strict:<EOL><INDENT>in_bounds_i = True<EOL><DEDENT>else:<EOL><INDENT>in_bounds_i = self.in_bounds(images[i])<EOL><DEDENT>is_adversarial, is_best, distance = self.__is_adversarial(<EOL>images[i], predictions[i], in_bounds_i)<EOL>if is_adversarial and greedy:<EOL><INDENT>if return_details:<EOL><INDENT>return predictions, is_adversarial, i, is_best, distance<EOL><DEDENT>else:<EOL><INDENT>return predictions, is_adversarial, i<EOL><DEDENT><DEDENT>adversarials.append(is_adversarial)<EOL><DEDENT>if greedy:  <EOL><INDENT>if return_details:<EOL><INDENT>return predictions, False, None, False, None<EOL><DEDENT>else:<EOL><INDENT>return predictions, False, None<EOL><DEDENT><DEDENT>is_adversarial = np.array(adversarials)<EOL>assert is_adversarial.ndim == <NUM_LIT:1><EOL>assert is_adversarial.shape[<NUM_LIT:0>] == images.shape[<NUM_LIT:0>]<EOL>return predictions, is_adversarial<EOL>
Interface to model.batch_predictions for attacks.

        Parameters
        ----------
        images : `numpy.ndarray`
            Batch of inputs with shape as expected by the model.
        greedy : bool
            Whether the first adversarial should be returned.
        strict : bool
            Controls if the bounds for the pixel values should be checked.