code: def generate(self, x, **kwargs):
      
      assert self.sess is not None, \
          'Cannot use `generate` when no `sess` was provided'
      self.parse_params(**kwargs)
  
      labels, nb_classes = self.get_or_guess_labels(x, kwargs)
  
      attack = CWL2(self.sess, self.model, self.batch_size, self.confidence,
                    'y_target' in kwargs, self.learning_rate,
                    self.binary_search_steps, self.max_iterations,
                    self.abort_early, self.initial_const, self.clip_min,
                    self.clip_max, nb_classes,
                    x.get_shape().as_list()[1:])
  
      def cw_wrap(x_val, y_val):
        return np.array(attack.attack(x_val, y_val), dtype=self.np_dtype)
  
      wrap = tf.py_func(cw_wrap, [x, labels], self.tf_dtype)
      wrap.set_shape(x.get_shape())
  
      return wrap
docs: Return a tensor that constructs adversarial examples for the given
      input. Generate uses tf.py_func in order to operate over tensors.
  
      :param x: A tensor with the inputs.
      :param kwargs: See `parse_params`