def test_sweep_config_cache(self, hydra_restore_singletons: Any, path: str, monkeypatch: Any) -> None: setup_globals() config_loader = ConfigLoaderImpl( config_search_path=create_config_search_path(path)) master_cfg = config_loader.load_configuration( config_name="config.yaml", strict=False, overrides=["time='${now:%H-%M-%S}'", "home='${env:HOME}'"], run_mode=RunMode.RUN, ) # trigger resolution by type assertion assert type(master_cfg.time) == str assert type(master_cfg.home) == str master_cfg_cache = OmegaConf.get_cache(master_cfg) assert "now" in master_cfg_cache.keys( ) and "env" in master_cfg_cache.keys() assert master_cfg.home == os.environ["HOME"] sweep_cfg = config_loader.load_sweep_config( master_config=master_cfg, sweep_overrides=["time='${now:%H-%M-%S}'", "home='${env:HOME}'"], ) sweep_cfg_cache = OmegaConf.get_cache(sweep_cfg) assert len( sweep_cfg_cache.keys()) == 1 and "now" in sweep_cfg_cache.keys() assert sweep_cfg_cache["now"] == master_cfg_cache["now"] monkeypatch.setenv("HOME", "/another/home/dir/") assert sweep_cfg.home == os.getenv("HOME")
def load_sweep_config( self, master_config: DictConfig, sweep_overrides: List[str] ) -> DictConfig: # Recreate the config for this sweep instance with the appropriate overrides overrides = OmegaConf.to_container(master_config.hydra.overrides.hydra) assert isinstance(overrides, list) overrides = overrides + sweep_overrides sweep_config = self.load_configuration( config_name=master_config.hydra.job.config_name, strict=self.default_strict, overrides=overrides, run_mode=RunMode.RUN, ) with open_dict(sweep_config): sweep_config.hydra.runtime.merge_with(master_config.hydra.runtime) # Partial copy of master config cache, to ensure we get the same resolved values for timestamps cache: Dict[str, Any] = defaultdict(dict, {}) cache_master_config = OmegaConf.get_cache(master_config) for k in ["now"]: if k in cache_master_config: cache[k] = cache_master_config[k] OmegaConf.set_cache(sweep_config, cache) return sweep_config
def test_sweep_config_cache(self, hydra_restore_singletons: Any, path: str, monkeypatch: Any) -> None: setup_globals() monkeypatch.setenv("TEST_ENV", "test_env") config_loader = ConfigLoaderImpl( config_search_path=create_config_search_path(path)) master_cfg = config_loader.load_configuration( config_name="config.yaml", overrides=[ "+time=${now:%H-%M-%S}", "+test_env=${oc.env:TEST_ENV}" ], run_mode=RunMode.RUN, ) # trigger resolution by type assertion assert type(master_cfg.time) == str assert type(master_cfg.test_env) == str master_cfg_cache = OmegaConf.get_cache(master_cfg) assert "now" in master_cfg_cache.keys() # oc.env is not cached as of OmegaConf 2.1 assert "oc.env" not in master_cfg_cache.keys() assert master_cfg.test_env == "test_env" sweep_cfg = config_loader.load_sweep_config( master_config=master_cfg, sweep_overrides=[ "+time=${now:%H-%M-%S}", "+test_env=${oc.env:TEST_ENV}" ], ) sweep_cfg_cache = OmegaConf.get_cache(sweep_cfg) assert len( sweep_cfg_cache.keys()) == 1 and "now" in sweep_cfg_cache.keys() assert sweep_cfg_cache["now"] == master_cfg_cache["now"] monkeypatch.setenv("TEST_ENV", "test_env2") assert sweep_cfg.test_env == "test_env2"
def test_copy_cache(): OmegaConf.register_resolver("random", lambda _: random.randint(0, 10000000)) c1 = OmegaConf.create(dict(k='${random:_}', )) assert c1.k == c1.k c2 = OmegaConf.create(dict(k='${random:_}', )) assert c2.k != c1.k OmegaConf.set_cache(c2, OmegaConf.get_cache(c1)) assert c2.k == c1.k c3 = OmegaConf.create(dict(k='${random:_}', )) assert c3.k != c1.k OmegaConf.copy_cache(c1, c3) assert c3.k == c1.k
def test_copy_cache(restore_resolvers: Any) -> None: OmegaConf.register_resolver("random", lambda _: random.randint(0, 10000000)) d = {"k": "${random:_}"} c1 = OmegaConf.create(d) assert c1.k == c1.k c2 = OmegaConf.create(d) assert c2.k != c1.k OmegaConf.set_cache(c2, OmegaConf.get_cache(c1)) assert c2.k == c1.k c3 = OmegaConf.create(d) assert c3.k != c1.k OmegaConf.copy_cache(c1, c3) assert c3.k == c1.k