class_docstr: Fast Adaptive Boundary Attack (Linf, L2, L1)
  https://arxiv.org/abs/1907.02044
  
  :param predict:       forward pass function
  :param norm:          Lp-norm to minimize ('Linf', 'L2', 'L1' supported)
  :param n_restarts:    number of random restarts
  :param n_iter:        number of iterations
  :param eps:           epsilon for the random restarts
  :param alpha_max:     alpha_max
  :param eta:           overshooting
  :param beta:          backward step
  :param device:        device to use ('cuda' or 'cpu')
docstr: FAB-attack implementation in pytorch 
docstr_tok: ["FAB-attack","implementation","in","pytorch"]
code: def __init__(
      self,
      predict,
      norm="Linf",
      n_restarts=1,
      n_iter=100,
      eps=None,
      alpha_max=0.1,
      eta=1.05,
      beta=0.9,
      loss_fn=None,
      verbose=False,
  ):
      """FAB-attack implementation in pytorch"""
  
      super(FABAttack, self).__init__(
          predict, loss_fn=None, clip_min=0.0, clip_max=1.0
      )
  
      self.norm = norm
      self.n_restarts = n_restarts
      self.n_iter = n_iter
      self.eps = (
          eps if eps is not None else DEFAULT_EPS_DICT_BY_NORM[norm]
      )
      self.alpha_max = alpha_max
      self.eta = eta
      self.beta = beta
      self.targeted = False
      self.verbose = verbose
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  import torch
  import time
  from advertorch.utils import replicate_input
  from advertorch.attacks.utils import zero_gradients
  from .base import Attack
  from .base import LabelMixin
label_desc: Use image node_id 1 to create a new FABAttack object from inherited base classes: Attack, LabelMixin with example: obj = FABAttack(predict, norm, n_restarts, n_iter, eps, alpha_max, eta, beta, loss_fn, verbose)