code: def __init__(
      self,
      model: torch.nn.Module,
      config_list: List[Dict],
      evaluator: Evaluator | None = None,
      existed_wrappers: Dict[str, ModuleWrapper] | None = None,
  ):
      super().__init__(model, config_list, evaluator, existed_wrappers)
  
      # `skip_first_step`, `interval_steps` and `total_times` are used by `register_trigger`.
      # `skip_first_step` controls if generating masks at the first step.
      # `interval_steps` is the optimize step interval for generating masks.
      # `total_times` is the total generation times of masks.
      self.interval_steps = -1
      self.total_times: int | Literal["unlimited"] = 1
      # here is a reserved interface for potential iterative pruning needs,
      # first_step_gen controls if the masks generated on the first step.
      self.first_step_gen = False
  
imports: from __future__ import annotations
  import logging
  from typing import Dict, List, Literal, Tuple, overload
  import torch
  from .tools import _DATA, _METRICS, _MASKS, active_sparse_targets_filter, norm_metrics, fpgm_metrics, generate_sparsity
  from ..base.compressor import Compressor, Pruner
  from ..base.target_space import PruningTargetSpace
  from ..base.wrapper import ModuleWrapper
  from ..utils.evaluator import Evaluator
label_desc: Use image node_id 3 to create a new _NormPruner object from inherited base classes: Pruner with example: obj = _NormPruner(model, config_list, evaluator, existed_wrappers)