class_docstr: Momentum-based Gradient Descent Optimizer
  
  Args:
      x : Optimization variable for initialization of accumulation grad
      stepsize : Stepsize for gradient descent
      momentum : Momentum factor for accumulation grad
      normalize_fn : Function to normalize the gradient
class_docstr_tok: ["Momentum-based","Gradient","Descent","Optimizer","Args",":","x",":","Optimization","variable","for","initialization","of","accumulation","grad","stepsize",":","Stepsize","for","gradient","descent","momentum",":","Momentum","factor","for","accumulation","grad","normalize_fn",":","Function","to","normalize","the","gradient"]
code: def __call__(self, gradient: ep.Tensor) -> ep.Tensor:
      self.accumulation_grad = (
          self.momentum * self.accumulation_grad + gradient
      )
      return self.stepsize * self.normalize(self.accumulation_grad)
  
imports: from functools import partial
  from typing import Callable, Optional
  from foolbox.attacks.gradient_descent_base import normalize_lp_norms
  from .basic_iterative_method import Optimizer, L1BasicIterativeAttack, L2BasicIterativeAttack, LinfBasicIterativeAttack
  import eagerpy
label_desc: Use image node_id 2 for calling the GDMOptimizer obj's underlying member method code with example usage: obj.__call__(gradient) and returns: unknown