code: def deprecated_api_warning(name_dict, cls_name=None):
      """A decorator to check if some arguments are deprecate and try to replace
      deprecate src_arg_name to dst_arg_name.
  
      Args:
          name_dict(dict):
              key (str): Deprecate argument names.
              val (str): Expected argument names.
  
      Returns:
          func: New function.
      """
  
      def api_warning_wrapper(old_func):
          @functools.wraps(old_func)
          def new_func(*args, **kwargs):
              # get the arg spec of the decorated method
              args_info = getfullargspec(old_func)
              # get name of the function
              func_name = old_func.__name__
              if cls_name is not None:
                  func_name = f"{cls_name}.{func_name}"
              if args:
                  arg_names = args_info.args[: len(args)]
                  for src_arg_name, dst_arg_name in name_dict.items():
                      if src_arg_name in arg_names:
                          warnings.warn(
                              f'"{src_arg_name}" is deprecated in '
                              f'`{func_name}`, please use "{dst_arg_name}" '
                              "instead"
                          )
                          arg_names[
                              arg_names.index(src_arg_name)
                          ] = dst_arg_name
              if kwargs:
                  for src_arg_name, dst_arg_name in name_dict.items():
                      if src_arg_name in kwargs:
                          assert dst_arg_name not in kwargs, (
                              f"The expected behavior is to replace "
                              f"the deprecated key `{src_arg_name}` to "
                              f"new key `{dst_arg_name}`, but got them "
                              f"in the arguments at the same time, which "
                              f"is confusing. `{src_arg_name} will be "
                              f"deprecated in the future, please "
                              f"use `{dst_arg_name}` instead."
                          )
  
                          warnings.warn(
                              f'"{src_arg_name}" is deprecated in '
                              f'`{func_name}`, please use "{dst_arg_name}" '
                              "instead"
                          )
                          kwargs[dst_arg_name] = kwargs.pop(
                              src_arg_name
                          )
  
              # apply converted arguments to the decorated method
              output = old_func(*args, **kwargs)
              return output
  
          return new_func
  
      return api_warning_wrapper
  
imports: import collections.abc
  import functools
  import itertools
  import subprocess
  import warnings
  from collections import abc
  from importlib import import_module
  from inspect import getfullargspec
  from itertools import repeat
label_desc: Use image node_id 17 for calling a global function with example usage: deprecated_api_warning(name_dict, cls_name) and returns: api_warning_wrapper, new_func, output