code: def generate_np(self, x_val, **kwargs):
      
      _, feedable, _feedable_types, hash_key = self.construct_variables(kwargs)
  
      if hash_key not in self.graphs:
        with tf.variable_scope(None, 'attack_%d' % len(self.graphs)):
          # x is a special placeholder we always want to have
          with tf.device('/gpu:0'):
            x = tf.placeholder(tf.float32, shape=x_val.shape, name='x')
  
          inputs, outputs = self.generate(x, **kwargs)
  
          from runner import RunnerMultiGPU
          runner = RunnerMultiGPU(inputs, outputs, sess=self.sess)
          self.graphs[hash_key] = runner
  
      runner = self.graphs[hash_key]
      feed_dict = {'x': x_val}
      for name in feedable:
        feed_dict[name] = feedable[name]
      fvals = runner.run(feed_dict)
      while not runner.is_finished():
        fvals = runner.run()
  
      return fvals['adv_x']
docs: Facilitates testing this attack.