def test_save_load_experiment_and_generation_strategy(self): experiment, generation_strategy = self.init_experiment_and_generation_strategy( save_generation_strategy=False) db_exp, db_gs = self.with_db_settings._load_experiment_and_generation_strategy( experiment.name) self.assertIsNotNone(db_exp) self.assertIsNone(db_gs) experiment, generation_strategy = self.init_experiment_and_generation_strategy( save_experiment=False, save_generation_strategy=False) ( exp_saved, gs_saved, ) = self.with_db_settings._maybe_save_experiment_and_generation_strategy( experiment, generation_strategy) self.assertTrue(exp_saved) self.assertTrue(gs_saved) db_exp, db_gs = self.with_db_settings._load_experiment_and_generation_strategy( experiment.name) self.assertIsNotNone(db_exp) self.assertEqual(db_exp, experiment) self.assertIsNotNone(db_gs) self.assertEqual(db_gs.name, generation_strategy.name) simple_experiment = get_simple_experiment() _save_experiment(simple_experiment, encoder=self.with_db_settings.db_settings.encoder) with self.assertRaisesRegex(ValueError, "Service API only"): self.with_db_settings._load_experiment_and_generation_strategy( simple_experiment.name)
def _save_experiment_to_db_if_possible( self, experiment: Experiment, suppress_all_errors: bool = False) -> bool: """Saves attached experiment and generation strategy if DB settings are set on this `WithDBSettingsBase` instance. Args: experiment: Experiment to save new trials in DB. suppress_all_errors: Flag for `retry_on_exception` that makes the decorator suppress the thrown exception even if it occurred in all the retries (exception is still logged). Returns: bool: Whether the experiment was saved. """ if self.db_settings_set: start_time = time.time() _save_experiment(experiment, encoder=self.db_settings.encoder) logger.debug( f"Saved experiment {experiment.name} in " f"{_round_floats_for_logging(time.time() - start_time)} seconds." ) return True return False
def save_experiment(experiment: Experiment, db_settings: DBSettings) -> None: """ Save experiment to db. Args: experiment: `Experiment` object. db_settings: Defines behavior for loading/saving experiment to/from db. """ init_engine_and_session_factory(creator=db_settings.creator, url=db_settings.url) _save_experiment(experiment, encoder=db_settings.encoder)
def save_experiment(experiment: Experiment, db_settings: DBSettings) -> None: """ Save experiment to db. Args: experiment: `Experiment` object. db_settings: Specifies decoder and xdb tier where experiment is stored. """ initialize_db(db_settings) _save_experiment(experiment, db_settings.encoder)
def setUp(self): self.generation_strategy = get_generation_strategy( with_experiment=True) self.experiment = self.generation_strategy.experiment init_test_engine_and_session_factory(force_init=True) self.with_db_settings = WithDBSettingsBase(db_settings=DBSettings( url="sqlite://")) _save_experiment(self.experiment, encoder=self.with_db_settings.db_settings.encoder) _save_generation_strategy( generation_strategy=self.generation_strategy, encoder=self.with_db_settings.db_settings.encoder, )
def save_experiment(experiment: Experiment, db_settings: DBSettings) -> None: """ Save experiment to db. Args: experiment: `Experiment` object. db_settings: Defines behavior for loading/saving experiment to/from db. """ init_engine_and_session_factory(creator=db_settings.creator, url=db_settings.url) start_time = time.time() _save_experiment(experiment, encoder=db_settings.encoder) logger.debug( f"Saved experiment {experiment.name} in " f"{_round_floats_for_logging(time.time() - start_time)} seconds.")
def _save_experiment_to_db_if_possible( experiment: Experiment, encoder: Encoder, decoder: Decoder, suppress_all_errors: bool, ) -> None: start_time = time.time() _save_experiment( experiment, encoder=encoder, decoder=decoder, ) logger.debug( f"Saved experiment {experiment.name} in " f"{_round_floats_for_logging(time.time() - start_time)} seconds.")
def init_experiment_and_generation_strategy( self, save_experiment: bool = True, save_generation_strategy: bool = True ) -> Tuple[Experiment, GenerationStrategy]: """ Generate a random Experiment and associated generation_strategy """ generation_strategy = self.get_random_generation_strategy() experiment = self.get_random_experiment() generation_strategy.experiment = experiment if save_experiment: _save_experiment(experiment, encoder=self.with_db_settings.db_settings.encoder) if save_generation_strategy: _save_generation_strategy( generation_strategy=generation_strategy, encoder=self.with_db_settings.db_settings.encoder, ) return experiment, generation_strategy
def save_experiment( experiment: Experiment, db_settings: DBSettings, overwrite_existing_experiment: bool = False, ) -> None: """ Save experiment to db. Args: experiment: `Experiment` object. db_settings: Defines behavior for loading/saving experiment to/from db. overwrite_existing_experiment: If the experiment being created has the same name as some experiment already stored, this flag determines whether to overwrite the existing experiment. Defaults to False. """ init_engine_and_session_factory(creator=db_settings.creator, url=db_settings.url) _save_experiment( experiment, encoder=db_settings.encoder, overwrite=overwrite_existing_experiment )