def __init__(
        self,
        classifier: "CLASSIFIER_TYPE",
        attacker: str = "deepfool",
        attacker_params: dict[str, Any] | None = None,
        delta: float = 0.2,
        max_iter: int = 20,
        eps: float = 10.0,
        norm: int | float | str = np.inf,
        batch_size: int = 32,
        verbose: bool = True,
    ) -> None:
        """
        :param classifier: A trained classifier.
        :param attacker: Adversarial attack name. Default is 'deepfool'. Supported names: 'carlini', 'carlini_inf',
                         'deepfool', 'fgsm', 'bim', 'pgd', 'margin', 'ead', 'newtonfool', 'jsma', 'vat', 'simba'.
        :param attacker_params: Parameters specific to the adversarial attack. If this parameter is not specified,
                                the default parameters of the chosen attack will be used.
        :param delta: desired accuracy
        :param max_iter: The maximum number of iterations for computing universal perturbation.
        :param eps: Attack step size (input variation).
        :param norm: The norm of the adversarial perturbation. Possible values: "inf", np.inf, 2.
        :param batch_size: Batch size for model evaluations in UniversalPerturbation.
        :param verbose: Show progress bars.
        """
        super().__init__(estimator=classifier)
        self.attacker = attacker
        self.attacker_params = attacker_params
        self.delta = delta
        self.max_iter = max_iter
        self.eps = eps
        self.norm = norm
        self.batch_size = batch_size
        self.verbose = verbose
        self._check_params()

        # Attack properties
        self._fooling_rate: float | None = None
        self._converged: bool | None = None
        self._noise: np.ndarray | None = None

        :param classifier: A trained classifier.
        :param attacker: Adversarial attack name. Default is 'deepfool'. Supported names: 'carlini', 'carlini_inf',
                         'deepfool', 'fgsm', 'bim', 'pgd', 'margin', 'ead', 'newtonfool', 'jsma', 'vat', 'simba'.
        :param attacker_params: Parameters specific to the adversarial attack. If this parameter is not specified,
                                the default parameters of the chosen attack will be used.
        :param delta: desired accuracy
        :param max_iter: The maximum number of iterations for computing universal perturbation.
        :param eps: Attack step size (input variation).
        :param norm: The norm of the adversarial perturbation. Possible values: "inf", np.inf, 2.
        :param batch_size: Batch size for model evaluations in UniversalPerturbation.
        :param verbose: Show progress bars.
        
art/attacks/evasion/universal_perturbation.py