code: def call_multi_iter_gen_adv_neighbor_with_gradient_tape(
      x, y, model_fn, loss_fn, adv_config, use_while_loop=True
  ):
      with tf.GradientTape() as tape:
          tape.watch(x)
          loss = loss_fn(y, model_fn(x))
      adv_neighbor, _ = adv_lib.gen_adv_neighbor(
          x,
          loss,
          adv_config,
          gradient_tape=tape,
          pgd_labels=y,
          pgd_model_fn=model_fn,
          pgd_loss_fn=loss_fn,
          use_while_loop=use_while_loop,
      )
      return adv_neighbor
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl.testing import parameterized
  import neural_structured_learning.configs
  from neural_structured_learning.lib import adversarial_neighbor
  import numpy
  import tensorflow
  from tensorflow.python.framework import test_util
label_desc: Use image node_id 3 for calling a global function with example usage: call_multi_iter_gen_adv_neighbor_with_gradient_tape(x, y, model_fn, loss_fn, adv_config, use_while_loop) and returns: adv_neighbor