diff --git a/libsigopt/compute/expected_improvement.py b/libsigopt/compute/expected_improvement.py index 3c04a42..d3b8c32 100644 --- a/libsigopt/compute/expected_improvement.py +++ b/libsigopt/compute/expected_improvement.py @@ -164,6 +164,7 @@ def __init__( self, predictor, num_points_to_sample, + *, points_being_sampled=None, num_mc_iterations=DEFAULT_MC_ITERATIONS_TOTAL_QEI, num_mc_iterations_per_loop=DEFAULT_MC_ITERATIONS_PER_LOOP_QEI, @@ -332,6 +333,7 @@ def __init__( predictor, num_points_to_sample, failure_model, + *, points_being_sampled=None, num_mc_iterations=DEFAULT_MC_ITERATIONS_TOTAL_QEIWF, num_mc_iterations_per_loop=DEFAULT_MC_ITERATIONS_PER_LOOP_QEIWF, @@ -339,7 +341,7 @@ def __init__( super().__init__( predictor, num_points_to_sample, - points_being_sampled, + points_being_sampled=points_being_sampled, num_mc_iterations=num_mc_iterations, num_mc_iterations_per_loop=num_mc_iterations_per_loop, ) diff --git a/libsigopt/compute/log_likelihood.py b/libsigopt/compute/log_likelihood.py index 8949788..331504f 100644 --- a/libsigopt/compute/log_likelihood.py +++ b/libsigopt/compute/log_likelihood.py @@ -30,6 +30,7 @@ def __init__( covariance, historical_data, mean_poly_indices=None, + *, use_auto_noise=False, log_domain=False, scaling_factor=DEFAULT_LOG_LIKELIHOOD_SCALING_FACTOR, diff --git a/libsigopt/compute/misc/multimetric.py b/libsigopt/compute/misc/multimetric.py index e8df8c1..772380d 100644 --- a/libsigopt/compute/misc/multimetric.py +++ b/libsigopt/compute/misc/multimetric.py @@ -329,6 +329,7 @@ def force_minimum_successful_points(optimizing_metric, points_sampled_values, po return modified_points_sampled_failures +# pylint: disable=too-many-positional-arguments def filter_convex_combination( multimetric_info, points_sampled_points, @@ -567,3 +568,6 @@ def filter_multimetric_points_sampled_spe( if multimetric_info.method != EPSILON_CONSTRAINT: modified_points_sampled_values[points_sampled_failures] = modified_lie_value return modified_points_sampled_points, modified_points_sampled_values + + +# pylint: enable=too-many-positional-arguments diff --git a/libsigopt/compute/sigopt_parzen_estimator.py b/libsigopt/compute/sigopt_parzen_estimator.py index 1d5ba84..5717890 100644 --- a/libsigopt/compute/sigopt_parzen_estimator.py +++ b/libsigopt/compute/sigopt_parzen_estimator.py @@ -34,6 +34,7 @@ class SigOptParzenEstimator(ScipyOptimizable): def __init__( self, + *, lower_covariance, greater_covariance, points_sampled_points, diff --git a/libsigopt/compute/vectorized_optimizers.py b/libsigopt/compute/vectorized_optimizers.py index c2b06e7..38508b9 100644 --- a/libsigopt/compute/vectorized_optimizers.py +++ b/libsigopt/compute/vectorized_optimizers.py @@ -19,7 +19,7 @@ class VectorizedOptimizer(Optimizer): optimizer_name: str optimizer_parameters_type: type - def __init__(self, domain, acquisition_function, num_multistarts, optimizer_parameters, maxiter): + def __init__(self, domain, acquisition_function, num_multistarts, *, optimizer_parameters, maxiter): """ This is the base class for vectorized _maximization_. """ @@ -144,10 +144,17 @@ def __init__( domain, acquisition_function, num_multistarts, + *, optimizer_parameters=None, maxiter=None, ): - super().__init__(domain, acquisition_function, num_multistarts, optimizer_parameters, maxiter) + super().__init__( + domain, + acquisition_function, + num_multistarts=num_multistarts, + optimizer_parameters=optimizer_parameters, + maxiter=maxiter, + ) self.strategy = self.optimizer_parameters.strategy self.mutation = self.optimizer_parameters.mutation self.crossover_probability = self.optimizer_parameters.crossover_probability @@ -219,10 +226,13 @@ def __init__( domain, acquisition_function, num_multistarts, + *, optimizer_parameters=None, maxiter=None, ): - super().__init__(domain, acquisition_function, num_multistarts, optimizer_parameters, maxiter) + super().__init__( + domain, acquisition_function, num_multistarts, optimizer_parameters=optimizer_parameters, maxiter=maxiter + ) self.learning_rate = self.optimizer_parameters.learning_rate assert self.learning_rate >= 0 self.beta_1 = self.optimizer_parameters.beta_1 diff --git a/libsigopt/views/rest/gp_hyper_opt_multimetric.py b/libsigopt/views/rest/gp_hyper_opt_multimetric.py index 907e35f..dbda8a5 100644 --- a/libsigopt/views/rest/gp_hyper_opt_multimetric.py +++ b/libsigopt/views/rest/gp_hyper_opt_multimetric.py @@ -41,6 +41,7 @@ def form_one_hot_hyperparameter_domain( use_auto_noise, discrete_lower_limit, task_cost_populated, + *, select_hyper_opt_in_log_domain=SELECT_HYPER_OPT_IN_LOG_DOMAIN, ): ALPHA_LOWER_FACTOR = 0.001 diff --git a/libsigopt/views/rest/spe_next_points.py b/libsigopt/views/rest/spe_next_points.py index b5c33c2..538a135 100644 --- a/libsigopt/views/rest/spe_next_points.py +++ b/libsigopt/views/rest/spe_next_points.py @@ -193,6 +193,7 @@ def draw_samples( sigopt_parzen_estimator, num_to_sample, domain, + *, num_multistarts=SPE_NUM_MULTISTARTS, batch_size=SPE_BATCH_SIZE, rejection_samples_limit=SPE_REJECTION_SAMPLES_LIMIT, diff --git a/libsigopt/views/view.py b/libsigopt/views/view.py index 9324e6a..e566583 100644 --- a/libsigopt/views/view.py +++ b/libsigopt/views/view.py @@ -338,6 +338,7 @@ def form_single_gaussian_process( filtered_points_sampled_values, filtered_points_sampled_value_vars, filtered_scaled_lie_value, + *, hyperparameter_dict, ): one_hot_historical_data = HistoricalData(self.dim_with_task) @@ -390,7 +391,7 @@ def form_gaussian_process_for_acquisition_function(self): filtered_points_sampled_values[:, i], filtered_points_sampled_value_vars[:, i], filtered_scaled_lie_value[i], - self.params["model_info"].hyperparameters[metric_index], + hyperparameter_dict=self.params["model_info"].hyperparameters[metric_index], ) gaussian_process_list.append(gp) assert isinstance(self.multimetric_info.params, ConvexCombinationParams) @@ -408,7 +409,7 @@ def form_gaussian_process_for_acquisition_function(self): filtered_points_sampled_values, filtered_points_sampled_value_vars, filtered_scaled_lie_value, - self.params["model_info"].hyperparameters[metric_index], + hyperparameter_dict=self.params["model_info"].hyperparameters[metric_index], ) return main_gaussian_process @@ -436,7 +437,7 @@ def _form_gp_for_probabilistic_failures(self, relative_index, for_af_values=True points_sampled_values[:, relative_index], points_sampled_value_vars[:, relative_index], scaled_lie_values[relative_index], - self.params["model_info"].hyperparameters[metric_indexes[relative_index]], + hyperparameter_dict=self.params["model_info"].hyperparameters[metric_indexes[relative_index]], ) # TODO(RTL-85): I think a lot of this workflow can be cleanup up with find_epsilon_constraint_value better now diff --git a/requirements-dev.txt b/requirements-dev.txt index a8851fc..5bae8ad 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,5 +2,5 @@ build==1.2.2.post1 flaky==3.8.1 mock==5.1.0 pre-commit==3.8.0 -pylint==3.2.7 +pylint==3.3.0 pytest==8.3.3 diff --git a/test/testaux/numerical_test_case.py b/test/testaux/numerical_test_case.py index 704fd12..cad56a3 100644 --- a/test/testaux/numerical_test_case.py +++ b/test/testaux/numerical_test_case.py @@ -58,7 +58,7 @@ def assert_vector_within_relative_norm(value, truth, tol, norm=2): assert err / mag < tol, f"error = {err} / magnitude = {mag} > tol = {tol}" @staticmethod - def check_gradient_with_finite_difference(x, func, grad, fd_step, tol, use_complex=False): + def check_gradient_with_finite_difference(x, func, grad, fd_step, tol, *, use_complex=False): """ Approximate gradient using finite difference using either the centered method or complex step. """ diff --git a/test/testcompute/spe_test.py b/test/testcompute/spe_test.py index 359d1d6..31daf2e 100644 --- a/test/testcompute/spe_test.py +++ b/test/testcompute/spe_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import random import numpy @@ -94,20 +95,20 @@ def test_default(self, form_multimetric_info, phase): assert phase == EPSILON_CONSTRAINT with pytest.raises(SPEInsufficientDataError): SigOptParzenEstimator( - C0RadialMatern(hparams), - greater_covariance, - points_sampled.points, - points_sampled.values, - gamma, + lower_covariance=C0RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points_sampled.points, + points_sampled_values=points_sampled.values, + gamma=gamma, ) return spe = SigOptParzenEstimator( - C0RadialMatern(hparams), - greater_covariance, - points_sampled.points, - points_sampled.values, - gamma, + lower_covariance=C0RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points_sampled.points, + points_sampled_values=points_sampled.values, + gamma=gamma, ) lpdf, gpdf, ei_vals = spe.evaluate_expected_improvement(points_to_sample) assert all(lpdf) > 0 and all(gpdf) > 0 and all(ei_vals) > 0 and len(ei_vals) == len(points_to_sample) @@ -116,11 +117,11 @@ def test_default(self, form_multimetric_info, phase): spe.evaluate_grad_expected_improvement(points_to_sample) spe = SigOptParzenEstimator( - C4RadialMatern(hparams), - greater_covariance, - points_sampled.points, - points_sampled.values, - gamma, + lower_covariance=C4RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points_sampled.points, + points_sampled_values=points_sampled.values, + gamma=gamma, ) assert spe.differentiable ei_grad = spe.evaluate_grad_expected_improvement(points_to_sample) @@ -152,11 +153,11 @@ def test_greater_lower_split(self, form_multimetric_info, phase): # NOTE: max is used here since we don't apply MMI to values when creating SigOptParzenEstimator numpy.place(values, failures, numpy.max(values)) spe = SigOptParzenEstimator( - C0RadialMatern(hparams), - greater_covariance, - points, - values, - gamma, + lower_covariance=C0RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points, + points_sampled_values=values, + gamma=gamma, ) sorted_indexed = numpy.argsort(values) points_sorted = points[sorted_indexed, :] @@ -193,11 +194,11 @@ def test_insufficient_data(self, form_multimetric_info, phase): ) with pytest.raises(SPEInsufficientDataError): SigOptParzenEstimator( - C0RadialMatern(hparams), - greater_covariance, - points_sampled.points, - points_sampled.values, - gamma, + lower_covariance=C0RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points_sampled.points, + points_sampled_values=points_sampled.values, + gamma=gamma, ) @pytest.mark.parametrize( @@ -224,11 +225,11 @@ def test_insufficient_data_with_forget_factor(self, form_multimetric_info, phase ) with pytest.raises(SPEInsufficientDataError): SigOptParzenEstimator( - C0RadialMatern(hparams), - greater_covariance, - points_sampled.points, - points_sampled.values, - gamma, + lower_covariance=C0RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points_sampled.points, + points_sampled_values=points_sampled.values, + gamma=gamma, forget_factor=0.5, ) @@ -237,11 +238,11 @@ def test_append_and_clear_lies(self): points_sampled_points = domain.generate_quasi_random_points_in_domain(num_sampled) points_sampled_values = numpy.random.rand(num_sampled) spe = SigOptParzenEstimator( - C0RadialMatern(hparams), - greater_covariance, - points_sampled_points, - points_sampled_values, - gamma, + lower_covariance=C0RadialMatern(hparams), + greater_covariance=greater_covariance, + points_sampled_points=points_sampled_points, + points_sampled_values=points_sampled_values, + gamma=gamma, ) assert spe.lower_points is not None assert spe.greater_points is not None diff --git a/test/testviews/rest/gp_ei_test.py b/test/testviews/rest/gp_ei_test.py index 1438ae3..69f72aa 100644 --- a/test/testviews/rest/gp_ei_test.py +++ b/test/testviews/rest/gp_ei_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import pytest from testviews.zigopt_input_utils import ZigoptSimulator diff --git a/test/testviews/rest/gp_hyper_opt_test.py b/test/testviews/rest/gp_hyper_opt_test.py index 6ffc145..ae6dd57 100644 --- a/test/testviews/rest/gp_hyper_opt_test.py +++ b/test/testviews/rest/gp_hyper_opt_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments from copy import deepcopy import numpy diff --git a/test/testviews/rest/gp_next_points_test.py b/test/testviews/rest/gp_next_points_test.py index c2fc81b..2799e16 100644 --- a/test/testviews/rest/gp_next_points_test.py +++ b/test/testviews/rest/gp_next_points_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import numpy import pytest from flaky import flaky diff --git a/test/testviews/rest/search_next_points_test.py b/test/testviews/rest/search_next_points_test.py index 6f0e42b..3a5c21b 100644 --- a/test/testviews/rest/search_next_points_test.py +++ b/test/testviews/rest/search_next_points_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import numpy import pytest from mock import patch diff --git a/test/testviews/rest/spe_next_points_test.py b/test/testviews/rest/spe_next_points_test.py index 102897c..c6b96fe 100644 --- a/test/testviews/rest/spe_next_points_test.py +++ b/test/testviews/rest/spe_next_points_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import numpy import pytest from flaky import flaky diff --git a/test/testviews/rest/spe_search_next_points_test.py b/test/testviews/rest/spe_search_next_points_test.py index 561cd69..cc7ab71 100644 --- a/test/testviews/rest/spe_search_next_points_test.py +++ b/test/testviews/rest/spe_search_next_points_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import numpy import pytest from testviews.zigopt_input_utils import ZigoptSimulator diff --git a/test/testviews/view_test.py b/test/testviews/view_test.py index 65fce02..cf47156 100644 --- a/test/testviews/view_test.py +++ b/test/testviews/view_test.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import numpy import pytest from testviews.zigopt_input_utils import ZigoptSimulator, form_points_sampled diff --git a/test/testviews/zigopt_input_utils.py b/test/testviews/zigopt_input_utils.py index 0c2e90a..f1a84d7 100644 --- a/test/testviews/zigopt_input_utils.py +++ b/test/testviews/zigopt_input_utils.py @@ -1,6 +1,7 @@ # Copyright © 2022 Intel Corporation # # SPDX-License-Identifier: Apache License 2.0 +# pylint: disable=too-many-positional-arguments import numpy from libsigopt.aux.adapter_info_containers import DomainInfo, GPModelInfo, MetricsInfo, PointsContainer