code: def generate(self, x, **kwargs):
      
      assert self.sess is not None, \
          'Cannot use `generate` when no `sess` was provided'
      from cleverhans.utils_tf import jacobian_graph
  
      # Parse and save attack-specific parameters
      assert self.parse_params(**kwargs)
  
      # Define graph wrt to this input placeholder
      logits = self.model.get_logits(x)
      self.nb_classes = logits.get_shape().as_list()[-1]
      assert self.nb_candidate <= self.nb_classes, \
          'nb_candidate should not be greater than nb_classes'
      preds = tf.reshape(
          tf.nn.top_k(logits, k=self.nb_candidate)[0],
          [-1, self.nb_candidate])
      # grads will be the shape [batch_size, nb_candidate, image_size]
      grads = tf.stack(jacobian_graph(preds, x, self.nb_candidate), axis=1)
  
      # Define graph
      def deepfool_wrap(x_val):
        """deepfool function for py_func"""
        return deepfool_batch(self.sess, x, preds, logits, grads, x_val,
                              self.nb_candidate, self.overshoot,
                              self.max_iter, self.clip_min, self.clip_max,
                              self.nb_classes)
  
      wrap = tf.py_func(deepfool_wrap, [x], self.tf_dtype)
      wrap.set_shape(x.get_shape())
      return wrap
docs: Generate symbolic graph for adversarial examples and return.
  
      :param x: The model's symbolic inputs.
      :param kwargs: See `parse_params`