class_docstr: Optimizer for gradient-free attacks in https://arxiv.org/abs/1802.05666.
  
  Gradients estimates are computed using Simultaneous Perturbation Stochastic
  Approximation (SPSA), combined with the ADAM update rule.
code: def _get_delta(self, x, delta):
      x_shape = x.get_shape().as_list()
      delta_x = delta * tf.sign(
          tf.random_uniform(
              [self._num_samples] + x_shape[1:],
              minval=-1.0,
              maxval=1.0,
              dtype=tf_dtype,
          )
      )
      return delta_x
  
imports: import warnings
  import numpy
  from six.moves import xrange
  import tensorflow
  import tensorflow_addons
  from cleverhans.attacks.attack import Attack
  from cleverhans.compat import reduce_mean, reduce_sum, reduce_max
  from cleverhans.model import Model
  from cleverhans import utils_tf
label_desc: Use image node_id 2 for calling the SPSAAdam obj's underlying member method code with example usage: obj._get_delta(x, delta) and returns: delta_x