class_docstr: Composite Attack class with 1+ base attacks and 1+ restarts.
  
  For each example, this attack evaluates each base attack with N restarts and
  take the one with the highest loss.
class_docstr_tok: ["Composite","Attack","class","with","1+","base","attacks","and","1+","restarts",".","For","each","example",",","this","attack","evaluates","each","base","attack","with","N","restarts","and","take","the","one","with","the","highest","loss","."]
docstr: Constructs an Attack object wrapping a base attack with restarts.
  
  Args:
    base_attack_names: List of base attacks, any of ('l1', 'l2', 'linf').
    restart: Number of restarts for each attack.
docstr_tok: ["Constructs","an","Attack","object","wrapping","a","base","attack","with","restarts",".","Args",":","base_attack_names",":","List","of","base","attacks",",","any","of","(","'l1","'",",","'l2","'",",","'linf","'",")",".","restart",":","Number","of","restarts","for","each","attack","."]
code: def __init__(self, base_attack_names, restart):
      """Constructs an Attack object wrapping a base attack with restarts.
  
      Args:
        base_attack_names: List of base attacks, any of ('l1', 'l2', 'linf').
        restart: Number of restarts for each attack.
      """
      self.restart = restart
      self.attacks = list(map(construct_attack, base_attack_names))
      logging.info("UNION CONFIG CREATION: %s", self.__dict__)
  
imports: from absl import logging
  import gin
  import neural_structured_learning
  from multi_representation_adversary.cleverhans_adapter import sparse_l1_descent
  from multi_representation_adversary.cleverhans_adapter import utils_tf
  import numpy
  import tensorflow.compat.v2
label_desc: Use image node_id 1 to create a new UnionAttack object from inherited base classes: Attack with example: obj = UnionAttack(base_attack_names, restart)