@call_decorator<EOL><INDENT>def __call__(self, input_or_adv, label=None, unpack=True,<EOL>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>min_, max_ = a.bounds()<EOL>target = (max_ + min_) / <NUM_LIT:2><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>perturbed = (<NUM_LIT:1> - epsilon) * image + epsilon * target<EOL>_, is_adversarial = a.predictions(perturbed)<EOL>if is_adversarial:<EOL><INDENT>return<EOL><DEDENT><DEDENT>
Reduces the contrast of the image until it 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 contrast levels or number of contrast
            levels between 1 and 0 that should be tried. Epsilons are
            one minus the contrast level.