code: def _apply_attack(
      self,
      inputs: Any,
      preproc_input: Any,
      attack_kwargs: Optional[Dict[str, Any]],
      param: Union[int, float],
  ) -> Tuple[Any, Any]:
      if attack_kwargs is None:
          attack_kwargs = {}
      if self.apply_before_preproc:
          attacked_inp = self.attack(
              inputs, **attack_kwargs, **{self.arg_name: param}
          )
          preproc_attacked_inp = (
              self.preproc_fn(attacked_inp)
              if self.preproc_fn
              else attacked_inp
          )
      else:
          attacked_inp = self.attack(
              preproc_input, **attack_kwargs, **{self.arg_name: param}
          )
          preproc_attacked_inp = attacked_inp
      return preproc_attacked_inp, attacked_inp
  
file_path: captum/captum/robust/_core/metrics/min_param_perturbation.py
imports: import math
  from enum import Enum
  from typing import Any, Callable, cast, Dict, Generator, List, Optional, Tuple, Union
  import torch
  from captum._utils.common import _expand_additional_forward_args, _format_additional_forward_args, _reduce_list
  from captum._utils.typing import TargetType
  from captum.log import log_usage
  from captum.robust._core.perturbation import Perturbation
  from torch import Tensor
label_desc: Use image node_id 3 for calling the MinParamPerturbation obj's underlying member method code with example usage: obj._apply_attack(inputs, preproc_input, attack_kwargs, param) and returns: preproc_attacked_inp,  attacked_inp