Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
    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,
        )
Exemple #6
0
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.")
Exemple #7
0
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.")
Exemple #8
0
    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
Exemple #9
0
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
    )