class_docstr: Each experiment has different configurations or algorithms.
  An experiment can have multiple runs.
  
  Keyword Arguments:
      name (str, optional): name of the experiment
      python_file (str, optional): path of the Python file that
          created the experiment
      comment (str, optional): a short description of the experiment
      writers (Set[str], optional): list of writers to write stat to
      ignore_callers: (Set[str], optional): list of files to ignore when
          automatically determining ``python_file``
      tags (Set[str], optional): Set of tags for experiment
code: def calc_configs(
      self,
      configs: Union[Configs, Dict[str, any]],
      configs_override: Optional[Dict[str, any]],
  ):
      if configs_override is None:
          configs_override = {}
      if global_params_singleton().configs is not None:
          configs_override.update(global_params_singleton().configs)
  
      if self.configs_processor is None:
          self.configs_processor = ConfigProcessor(
              configs, configs_override
          )
          if (
              self.run.distributed_rank
              == self.run.distributed_main_rank
          ):
              logger.log()
      else:
          assert isinstance(configs, dict)
  
          if configs_override is not None:
              configs.update(configs_override)
          self.configs_processor.update_configs(configs)
  
imports: import json
  import os
  import pathlib
  import time
  from typing import Optional, Set, Dict, Union, TYPE_CHECKING
  from labml import logger
  from labml.logger import Text
  from labml.utils import get_caller_file
  from labml.utils.git_info import get_git_status
  from labml.utils.notice import labml_notice
  from ..app.dynamic import DynamicUpdateHandler
  from ..configs.base import Configs
  from ..configs.dynamic_hyperparam import DynamicHyperParam
  from ..configs.processor import ConfigProcessor, FileConfigsSaver
  from ..experiment.experiment_run import Run
  from ..experiment.watcher import ExperimentWatcher
  from ..lab import lab_singleton
  from ..monitor import monitor_singleton
  from ..tracker import tracker_singleton
  from ..util import is_ipynb
label_desc: Use image node_id 4 for calling the Experiment obj's underlying member method code with example usage: obj.calc_configs(configs, configs_override) without return types