Example #1
0
def test_upgrade_distributions(optuna_version: str) -> None:
    src_db_file = os.path.join(os.path.dirname(__file__),
                               "test_upgrade_assets", f"{optuna_version}.db")
    with tempfile.TemporaryDirectory() as workdir:
        shutil.copyfile(src_db_file, f"{workdir}/sqlite.db")
        storage_url = f"sqlite:///{workdir}/sqlite.db"

        storage = RDBStorage(storage_url,
                             skip_compatibility_check=True,
                             skip_table_creation=True)
        assert storage.get_current_version() == f"v{optuna_version}"
        head_version = storage.get_head_version()
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", category=FutureWarning)
            storage.upgrade()
        assert head_version == storage.get_current_version()

        new_study = load_study(storage=storage, study_name="schema migration")
        new_distribution_dict = new_study.trials[0]._distributions

        assert isinstance(new_distribution_dict["x1"], FloatDistribution)
        assert isinstance(new_distribution_dict["x2"], FloatDistribution)
        assert isinstance(new_distribution_dict["x3"], FloatDistribution)
        assert isinstance(new_distribution_dict["y1"], IntDistribution)
        assert isinstance(new_distribution_dict["y2"], IntDistribution)
        assert isinstance(new_distribution_dict["z"], CategoricalDistribution)

        # Check if Study.optimize can run on new storage.
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", category=UserWarning)
            new_study.optimize(objective_test_upgrade_distributions,
                               n_trials=1)
Example #2
0
    def take_action(self, parsed_args):
        # type: (Namespace) -> None

        if self.app_args.storage is None and self.app_args.config is None:
            raise CLIUsageError(
                "Either --storage or --config option is required.")

        config = optuna.config.load_optuna_config(self.app_args.config)
        storage_url = get_storage_url(self.app_args.storage, config)

        storage = RDBStorage(storage_url, skip_compatibility_check=True)
        current_version = storage.get_current_version()
        head_version = storage.get_head_version()
        known_versions = storage.get_all_versions()
        if current_version == head_version:
            self.logger.info('This storage is up-to-date.')
        elif current_version in known_versions:
            self.logger.info(
                'Upgrading the storage schema to the latest version.')
            storage.upgrade()
            self.logger.info("Completed to upgrade the storage.")
        else:
            self.logger.warning(
                'Your optuna version seems outdated against the storage version. '
                'Please try updating optuna to the latest version by '
                '`$ pip install -U optuna`.')
Example #3
0
def test_upgrade_multi_objective_optimization(optuna_version: str) -> None:
    src_db_file = os.path.join(os.path.dirname(__file__),
                               "test_upgrade_assets", f"{optuna_version}.db")
    with tempfile.TemporaryDirectory() as workdir:
        shutil.copyfile(src_db_file, f"{workdir}/sqlite.db")
        storage_url = f"sqlite:///{workdir}/sqlite.db"

        storage = RDBStorage(storage_url,
                             skip_compatibility_check=True,
                             skip_table_creation=True)
        assert storage.get_current_version() == f"v{optuna_version}"
        head_version = storage.get_head_version()
        with warnings.catch_warnings():
            warnings.simplefilter("ignore", category=FutureWarning)
            storage.upgrade()
        assert head_version == storage.get_current_version()

        # Create a new study.
        study = create_study(storage=storage,
                             directions=["minimize", "minimize"])
        assert len(study.trials) == 0
        study.optimize(mo_objective_test_upgrade, n_trials=1)
        assert len(study.trials) == 1

        # Check empty study.
        study = load_study(storage=storage, study_name="multi_empty")
        assert len(study.trials) == 0
        study.optimize(mo_objective_test_upgrade, n_trials=1)
        assert len(study.trials) == 1

        # Resume multi-objective optimization.
        study = load_study(storage=storage, study_name="multi")
        assert len(study.trials) == 1
        study.optimize(mo_objective_test_upgrade, n_trials=1)
        assert len(study.trials) == 2
        for trial in study.trials:
            assert trial.system_attrs["a"] == 0
            assert trial.user_attrs["b"] == 1
            assert -5 <= trial.params["x"] <= 5
            assert 0 <= trial.params["y"] <= 10
            assert trial.params["z"] in (-5, 0, 5)
            assert -5 <= trial.values[0] < 5
            assert 0 <= trial.values[1] <= 150
        assert study.system_attrs["c"] == 2
        assert study.user_attrs["d"] == 3
Example #4
0
File: cli.py Project: soskek/optuna
    def take_action(self, parsed_args):
        # type: (Namespace) -> None

        storage_url = _check_storage_url(self.app_args.storage)
        storage = RDBStorage(storage_url, skip_compatibility_check=True)
        current_version = storage.get_current_version()
        head_version = storage.get_head_version()
        known_versions = storage.get_all_versions()
        if current_version == head_version:
            self.logger.info('This storage is up-to-date.')
        elif current_version in known_versions:
            self.logger.info('Upgrading the storage schema to the latest version.')
            storage.upgrade()
            self.logger.info("Completed to upgrade the storage.")
        else:
            self.logger.warning('Your optuna version seems outdated against the storage version. '
                                'Please try updating optuna to the latest version by '
                                '`$ pip install -U optuna`.')
Example #5
0
def test_upgrade_distributions(optuna_version: str) -> None:
    src_db_file = os.path.join(
        os.path.dirname(__file__), "test_upgrade_assets", f"{optuna_version}.db"
    )
    with tempfile.TemporaryDirectory() as workdir:
        shutil.copyfile(src_db_file, f"{workdir}/sqlite.db")
        storage_url = f"sqlite:///{workdir}/sqlite.db"

        storage = RDBStorage(storage_url, skip_compatibility_check=True)
        old_study = load_study(storage=storage, study_name="schema migration")
        old_distribution_dict = old_study.trials[0].distributions

        if version.parse(optuna_version) >= version.parse("3.0.0"):
            assert isinstance(old_distribution_dict["x1"], FloatDistribution)
            assert isinstance(old_distribution_dict["x2"], FloatDistribution)
            assert isinstance(old_distribution_dict["x3"], FloatDistribution)
            assert isinstance(old_distribution_dict["y1"], IntDistribution)
            assert isinstance(old_distribution_dict["y2"], IntDistribution)
            assert isinstance(old_distribution_dict["z"], CategoricalDistribution)
        else:
            assert isinstance(old_distribution_dict["x1"], UniformDistribution)
            assert isinstance(old_distribution_dict["x2"], LogUniformDistribution)
            assert isinstance(old_distribution_dict["x3"], DiscreteUniformDistribution)
            assert isinstance(old_distribution_dict["y1"], IntUniformDistribution)
            assert isinstance(old_distribution_dict["y2"], IntLogUniformDistribution)
            assert isinstance(old_distribution_dict["z"], CategoricalDistribution)

        assert storage.get_current_version() == f"v{optuna_version}.a"
        head_version = storage.get_head_version()
        storage.upgrade()
        assert head_version == storage.get_current_version()

        new_study = load_study(storage=storage, study_name="schema migration")
        new_distribution_dict = new_study.trials[0]._distributions

        assert isinstance(new_distribution_dict["x1"], FloatDistribution)
        assert isinstance(new_distribution_dict["x2"], FloatDistribution)
        assert isinstance(new_distribution_dict["x3"], FloatDistribution)
        assert isinstance(new_distribution_dict["y1"], IntDistribution)
        assert isinstance(new_distribution_dict["y2"], IntDistribution)
        assert isinstance(new_distribution_dict["z"], CategoricalDistribution)

        # Check if Study.optimize can run on new storage.
        new_study.optimize(objective_test_upgrade_distributions, n_trials=1)
Example #6
0
def test_upgrade_single_objective_optimization(optuna_version: str) -> None:
    src_db_file = os.path.join(os.path.dirname(__file__),
                               "test_upgrade_assets", f"{optuna_version}.db")
    with tempfile.TemporaryDirectory() as workdir:
        shutil.copyfile(src_db_file, f"{workdir}/sqlite.db")
        storage_url = f"sqlite:///{workdir}/sqlite.db"

        storage = RDBStorage(storage_url,
                             skip_compatibility_check=True,
                             skip_table_creation=True)
        assert storage.get_current_version() == f"v{optuna_version}"
        head_version = storage.get_head_version()
        storage.upgrade()
        assert head_version == storage.get_current_version()

        # Create a new study.
        study = create_study(storage=storage)
        assert len(study.trials) == 0
        study.optimize(objective_test_upgrade, n_trials=1)
        assert len(study.trials) == 1

        # Check empty study.
        study = load_study(storage=storage, study_name="single_empty")
        assert len(study.trials) == 0
        study.optimize(objective_test_upgrade, n_trials=1)
        assert len(study.trials) == 1

        # Resume single objective optimization.
        study = load_study(storage=storage, study_name="single")
        assert len(study.trials) == 1
        study.optimize(objective_test_upgrade, n_trials=1)
        assert len(study.trials) == 2
        for trial in study.trials:
            assert trial.system_attrs["a"] == 0
            assert trial.user_attrs["b"] == 1
            assert trial.intermediate_values[0] == 0.5
            assert -5 <= trial.params["x"] <= 5
            assert 0 <= trial.params["y"] <= 10
            assert trial.params["z"] in (-5, 0, 5)
            assert trial.value is not None and 0 <= trial.value <= 150

        assert study.system_attrs["c"] == 2
        assert study.user_attrs["d"] == 3
Example #7
0
File: cli.py Project: not522/optuna
    def take_action(self, parsed_args: Namespace) -> None:

        storage_url = _check_storage_url(self.app_args.storage)
        if storage_url.startswith("redis"):
            self.logger.info("This storage does not support upgrade yet.")
            return
        storage = RDBStorage(storage_url, skip_compatibility_check=True)
        current_version = storage.get_current_version()
        head_version = storage.get_head_version()
        known_versions = storage.get_all_versions()
        if current_version == head_version:
            self.logger.info("This storage is up-to-date.")
        elif current_version in known_versions:
            self.logger.info(
                "Upgrading the storage schema to the latest version.")
            storage.upgrade()
            self.logger.info("Completed to upgrade the storage.")
        else:
            warnings.warn(
                "Your optuna version seems outdated against the storage version. "
                "Please try updating optuna to the latest version by "
                "`$ pip install -U optuna`.")