code: def __collect_calculator(self, classes: List[Type["Configs"]]):
      for c in classes:
          if PropertyKeys.calculators not in c.__dict__:
              continue
          for k, calculators in c.__dict__[
              PropertyKeys.calculators
          ].items():
              if k not in self.__types:
                  raise RuntimeError(
                      f"{k} calculator is present but the config declaration is missing"
                  )
              for v in calculators:
                  if k not in self.__options:
                      self.__options[k] = OrderedDict()
                  if v.option_name in self.__options[k]:
                      if v != self.__options[k][v.option_name]:
                          warnings.warn(
                              f"Overriding option for {k}: {v.option_name}",
                              Warning,
                              stacklevel=5,
                          )
  
                  self.__options[k][v.option_name] = v
  
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 3 for calling the Configs obj's underlying member method code with example usage: obj.__collect_calculator(classes) without return types