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)
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`.')
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
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`.')
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)
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
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`.")