class_docstr: The Signum optimizer that takes the sign of gradient or momentum.
  
  The optimizer updates the weight by::
  
      rescaled_grad = rescale_grad * clip(grad, clip_gradient) + wd * weight
      state = momentum * state + (1-momentum)*rescaled_grad
      weight = (1 - lr * wd_lh) * weight - lr * sign(state)
  
  References
  ----------
  Jeremy Bernstein, Yu-Xiang Wang, Kamyar Azizzadenesheli & Anima Anandkumar. (2018).
  signSGD: Compressed Optimisation for Non-Convex Problems. In ICML'18.
  
  See: https://arxiv.org/abs/1802.04434
  
  For details of the update algorithm see
  :class:`~mxnet.ndarray.signsgd_update` and :class:`~mxnet.ndarray.signum_update`.
  
  This optimizer accepts the following parameters in addition to those accepted
  by :class:`.Optimizer`.
  
  Parameters
  ----------
  learning_rate : float, default 0.01
      The initial learning rate. If None, the optimization will use the
      learning rate from ``lr_scheduler``. If not None, it will overwrite
      the learning rate in ``lr_scheduler``. If None and ``lr_scheduler``
      is also None, then it will be set to 0.01 by default.
  momentum : float, optional
     The momentum value.
  wd_lh : float, optional
     The amount of decoupled weight decay regularization, see details in the original paper at:\
     https://arxiv.org/abs/1711.05101
  use_fused_step : bool, default True
      Whether or not to use fused kernels for optimizer.
      When use_fused_step=False, step is called,
      otherwise, fused_step is called.
docstr: Perform an optimization step using gradients and states.
  
  Parameters
  ----------
  indices : list of int
      List of unique indices of the parameters into the individual learning rates
      and weight decays. Learning rates and weight decay may be set via `set_lr_mult()`
      and `set_wd_mult()`, respectively.
  weights : list of NDArray
      List of parameters to be updated.
  grads : list of NDArray
      List of gradients of the objective with respect to this parameter.
  states : List of any obj
      List of state returned by `create_state()`.
docstr_tok: ["Perform","an","optimization","step","using","gradients","and","states",".","Parameters","--","--","--","--","--","indices",":","list","of","int","List","of","unique","indices","of","the","parameters","into","the","individual","learning","rates","and","weight","decays",".","Learning","rates","and","weight","decay","may","be","set","via","`","set_lr_mult","(",")","`","and","`","set_wd_mult","(",")","`",",","respectively",".","weights",":","list","of","NDArray","List","of","parameters","to","be","updated",".","grads",":","list","of","NDArray","List","of","gradients","of","the","objective","with","respect","to","this","parameter",".","states",":","List","of","any","obj","List","of","state","returned","by","`","create_state","(",")","`","."]
code: def step(self, indices, weights, grads, states):
      """Perform an optimization step using gradients and states.
  
      Parameters
      ----------
      indices : list of int
          List of unique indices of the parameters into the individual learning rates
          and weight decays. Learning rates and weight decay may be set via `set_lr_mult()`
          and `set_wd_mult()`, respectively.
      weights : list of NDArray
          List of parameters to be updated.
      grads : list of NDArray
          List of gradients of the objective with respect to this parameter.
      states : List of any obj
          List of state returned by `create_state()`.
      """
      for index, weight, grad, state in zip(
          indices, weights, grads, states
      ):
          self._update_count(index)
          lr = self._get_lr(index)
          wd = self._get_wd(index)
  
          if state is not None:
              # preprocess grad
              grad *= self.rescale_grad
              if self.clip_gradient is not None:
                  grad = clip(
                      grad, -self.clip_gradient, self.clip_gradient
                  )
              grad += wd * weight
  
              # update mom
              mom = state
              mom[:] *= self.momentum
              mom[:] -= (1 - self.momentum) * grad
  
              # update weight
              weight[:] *= 1 - lr * self.wd_lh
              weight[:] += lr * ((mom > 0) - (mom < 0))
          else:
              # update weight
              weight[:] *= 1 - lr * (wd + self.wd_lh)
              weight[:] -= lr * ((grad > 0) - (grad < 0))
  
file_path: mxnet/python/mxnet/optimizer/signum.py
imports: from __future__ import absolute_import
  from ..ndarray import zeros, clip
  from ..ndarray import signsgd_update, signum_update
  from .optimizer import Optimizer, register
label_desc: Use image node_id 3 for calling the Signum obj's underlying member method code with example usage: obj.step(indices, weights, grads, states) without return types