def METHOD_NAME(
    self,
    baselines: Optional[Sequence[Tuple[Tensor, ...]]],
    data: Tuple[Tensor, ...],
    additional_forward_args: Optional[Tuple[Tensor, ...]],
    label: Optional[Union[Tensor]],
    attribution_method_name: str,
    attribution_arguments: Dict,
    model: Module,
) -> Tuple[Tensor, ...]:
    attribution_cls = ATTRIBUTION_NAMES_TO_METHODS[attribution_method_name]
    attribution_method = attribution_cls(model)
    if attribution_method_name in ATTRIBUTION_METHOD_CONFIG:
        param_config = ATTRIBUTION_METHOD_CONFIG[attribution_method_name]
        if param_config.post_process:
            for k, v in attribution_arguments.items():
                if k in param_config.post_process:
                    attribution_arguments[k] = param_config.post_process[k](v)
    # TODO support multiple baselines
    baseline = baselines[0] if baselines and len(baselines) > 0 else None
    label = (
        None
        if not self.use_label_for_attr or label is None or label.nelement() == 0
        else label
    )
    if "baselines" in inspect.signature(attribution_method.attribute).parameters:
        attribution_arguments["baselines"] = baseline
    attr = attribution_method.attribute.__wrapped__(
        attribution_method,  # self
        data,
        additional_forward_args=additional_forward_args,
        target=label,
        **attribution_arguments,
    )
    return attr