class_docstr: L-infinity Basic Iterative Method with Adam optimizer
  
  Args:
      rel_stepsize: Stepsize relative to epsilon.
      abs_stepsize: If given, it takes precedence over rel_stepsize.
      steps : Number of update steps.
      random_start : Controls whether to randomly start within allowed epsilon ball.
code: def get_optimizer(self, x: ep.Tensor, stepsize: float) -> Optimizer:
      return AdamOptimizer(
          x,
          stepsize,
          self.adam_beta1,
          self.adam_beta2,
          self.adam_epsilon,
      )
  
imports: from typing import Optional
  from .gradient_descent_base import L1BaseGradientDescent
  from .gradient_descent_base import L2BaseGradientDescent
  from .gradient_descent_base import LinfBaseGradientDescent
  from .gradient_descent_base import AdamOptimizer, Optimizer
  import eagerpy
label_desc: Use image node_id 2 for calling the LinfAdamBasicIterativeAttack obj's underlying member method code with example usage: obj.get_optimizer(x, stepsize) and returns: AdamOptimizer