class_docstr: A simple and fast gradient-based adversarial attack.
  
  Implements the `DeepFool`_ L-Infinity attack.
  
  Args:
      steps : Maximum number of steps to perform.
      candidates : Limit on the number of the most likely classes that should
          be considered. A small value is usually sufficient and much faster.
      overshoot : How much to overshoot the boundary.
      loss  Loss function to use inside the update function.
  
  
  .. _DeepFool:
          Seyed-Mohsen Moosavi-Dezfooli, Alhussein Fawzi, Pascal Frossard,
          "DeepFool: a simple and accurate method to fool deep neural
          networks", https://arxiv.org/abs/1511.04599
code: def get_perturbations(
      self, distances: ep.Tensor, grads: ep.Tensor
  ) -> ep.Tensor:
      return atleast_kd(distances, grads.ndim) * grads.sign()
  
imports: from typing import Union, Optional, Tuple, Any, Callable
  from typing_extensions import Literal
  import eagerpy
  import logging
  from abc import ABC
  from abc import abstractmethod
  from ..devutils import flatten
  from ..devutils import atleast_kd
  from ..models import Model
  from ..criteria import Criterion
  from ..distances import l2, linf
  from .base import MinimizationAttack
  from .base import T
  from .base import get_criterion
  from .base import raise_if_kwargs
  from .base import verify_input_bounds
label_desc: Use image node_id 2 for calling the LinfDeepFoolAttack obj's underlying member method code with example usage: obj.get_perturbations(distances, grads) and returns: unknown