docstr: :param experiment: the experiment config
  :param env: substitution variables, e.g. a HOME directory. generally use all caps.
  :return: the experiment
docstr_tok: [":","param","experiment",":","the","experiment","config",":","param","env",":","substitution","variables",",","e.g",".","a","HOME","directory",".","generally","use","all","caps",".",":","return",":","the","experiment"]
code: def __init__(self, experiment: Union[str, Path, Dict], **env):
      """
      :param experiment: the experiment config
      :param env: substitution variables, e.g. a HOME directory. generally use all caps.
      :return: the experiment
      """
  
      self.config: Dict[
          str, Any
      ] = ExperimentConfig.load_experiment_config(experiment)
  
      self.builds_started: List[str] = []
      self.builders = [
          CallableInstantiator(),
          DictInstantiator(),
          ListInstantiator(),
          FromMappingInstantiator(REGISTRY, "Registry"),
          FromMappingInstantiator(self, "Experiment objects"),
          FromEnvironmentVariableInstantiator(env),
      ]
  
      self.builder: ObjectBuilder = ObjectBuilder(self.builders)
  
      self.experiment: Dict[str, Any] = {}
  
      for key, value_config in self.config.items():
          if key not in self.experiment:
              self.build(key)
  
imports: import logging
  import os
  import traceback
  from abc import ABCMeta, abstractmethod
  from pathlib import Path
  from typing import Any, Callable, Dict, List, Mapping, Type, Union
  import toml
  import yaml
label_desc: Use image node_id 2 to create a new ExperimentConfig object from inherited base classes: Mapping with example: obj = ExperimentConfig(experiment)