code: def _add_config_function(
      cls,
      func: Callable,
      name: Union[ConfigItem, List[ConfigItem]],
      option: Optional[str],
      pass_params: Optional[List[ConfigItem]],
  ):
      if PropertyKeys.calculators not in cls.__dict__:
          cls._calculators = {}
  
      calc = ConfigFunction(
          func,
          config_names=name,
          option_name=option,
          pass_params=pass_params,
      )
      if type(calc.config_names) == str:
          config_names = [calc.config_names]
      else:
          config_names = calc.config_names
  
      for n in config_names:
          if n not in cls._calculators:
              cls._calculators[n] = []
          cls._calculators[n].append(calc)
  
imports: import types
  import warnings
  from collections import OrderedDict
  from typing import Dict, List, Callable, Union, Tuple, Optional, Type, Set, Iterable, Any
  from .config_function import ConfigFunction
  from .config_item import ConfigItem
  from .eval_function import EvalFunction
  from .utils import Value
  from ...None import monit
label_desc: Use image node_id 16 for calling the Configs obj's underlying member method code with example usage: obj._add_config_function(cls, func, name, option, pass_params) without return types