@call_decorator<EOL><INDENT>def __call__(self, input_or_adv, label=None, unpack=True, epsilons=<NUM_LIT:1000>):<DEDENT>
a = input_or_adv<EOL>del input_or_adv<EOL>del label<EOL>del unpack<EOL>image = a.original_image<EOL>bounds = a.bounds()<EOL>min_, max_ = bounds<EOL>if not isinstance(epsilons, Iterable):<EOL><INDENT>epsilons = np.linspace(<NUM_LIT:0>, <NUM_LIT:1>, num=epsilons + <NUM_LIT:1>)[<NUM_LIT:1>:]<EOL><DEDENT>for epsilon in epsilons:<EOL><INDENT>noise = self._sample_noise(epsilon, image, bounds)<EOL>perturbed = image + epsilon * noise<EOL>perturbed = np.clip(perturbed, min_, max_)<EOL>_, is_adversarial = a.predictions(perturbed)<EOL>if is_adversarial:<EOL><INDENT>return<EOL><DEDENT><DEDENT>
Adds uniform or Gaussian noise to the image, gradually increasing
        the standard deviation until the image is misclassified.

        Parameters
        ----------
        input_or_adv : `numpy.ndarray` or :class:`Adversarial`
            The original, unperturbed input as a `numpy.ndarray` or
            an :class:`Adversarial` instance.
        label : int
            The reference label of the original input. Must be passed
            if `a` is a `numpy.ndarray`, must not be passed if `a` is
            an :class:`Adversarial` instance.
        unpack : bool
            If true, returns the adversarial input, otherwise returns
            the Adversarial object.
        epsilons : int or Iterable[float]
            Either Iterable of noise levels or number of noise levels
            between 0 and 1 that should be tried.