From 9026fd91b88d9795d0451119fef4a0b9ee5c79f3 Mon Sep 17 00:00:00 2001 From: Tim Mensinger Date: Tue, 21 Jan 2025 09:58:44 +0100 Subject: [PATCH] Fix (or ignore) new mypy errors --- .tools/envs/testenv-linux.yml | 2 +- .tools/envs/testenv-numpy.yml | 2 +- .tools/envs/testenv-others.yml | 2 +- .tools/envs/testenv-pandas.yml | 2 +- src/optimagic/differentiation/derivatives.py | 8 ++++---- src/optimagic/examples/criterion_functions.py | 2 +- src/optimagic/logging/logger.py | 5 ++++- src/optimagic/optimization/multistart.py | 6 ++++-- src/optimagic/optimizers/scipy_optimizers.py | 6 +----- 9 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.tools/envs/testenv-linux.yml b/.tools/envs/testenv-linux.yml index 68a5bdb8b..3ebccc613 100644 --- a/.tools/envs/testenv-linux.yml +++ b/.tools/envs/testenv-linux.yml @@ -23,7 +23,7 @@ dependencies: - scipy>=1.2.1 # run, tests - sqlalchemy # run, tests - seaborn # dev, tests - - mypy=1.13 # dev, tests + - mypy=1.14.1 # dev, tests - pyyaml # dev, tests - jinja2 # dev, tests - annotated-types # dev, tests diff --git a/.tools/envs/testenv-numpy.yml b/.tools/envs/testenv-numpy.yml index 0e811e586..869502f63 100644 --- a/.tools/envs/testenv-numpy.yml +++ b/.tools/envs/testenv-numpy.yml @@ -21,7 +21,7 @@ dependencies: - scipy>=1.2.1 # run, tests - sqlalchemy # run, tests - seaborn # dev, tests - - mypy=1.13 # dev, tests + - mypy=1.14.1 # dev, tests - pyyaml # dev, tests - jinja2 # dev, tests - annotated-types # dev, tests diff --git a/.tools/envs/testenv-others.yml b/.tools/envs/testenv-others.yml index 33be68ecc..86838f4cc 100644 --- a/.tools/envs/testenv-others.yml +++ b/.tools/envs/testenv-others.yml @@ -21,7 +21,7 @@ dependencies: - scipy>=1.2.1 # run, tests - sqlalchemy # run, tests - seaborn # dev, tests - - mypy=1.13 # dev, tests + - mypy=1.14.1 # dev, tests - pyyaml # dev, tests - jinja2 # dev, tests - annotated-types # dev, tests diff --git a/.tools/envs/testenv-pandas.yml b/.tools/envs/testenv-pandas.yml index 23f5f4055..d1298314b 100644 --- a/.tools/envs/testenv-pandas.yml +++ b/.tools/envs/testenv-pandas.yml @@ -21,7 +21,7 @@ dependencies: - scipy>=1.2.1 # run, tests - sqlalchemy # run, tests - seaborn # dev, tests - - mypy=1.13 # dev, tests + - mypy=1.14.1 # dev, tests - pyyaml # dev, tests - jinja2 # dev, tests - annotated-types # dev, tests diff --git a/src/optimagic/differentiation/derivatives.py b/src/optimagic/differentiation/derivatives.py index 065b9b2ad..f0f9d7653 100644 --- a/src/optimagic/differentiation/derivatives.py +++ b/src/optimagic/differentiation/derivatives.py @@ -328,7 +328,7 @@ def first_derivative( f0 = np.array(f0, dtype=np.float64) # convert the raw evaluations to numpy arrays - raw_evals = _convert_evals_to_numpy( + raw_evals_arr = _convert_evals_to_numpy( raw_evals=raw_evals, unpacker=unpacker, registry=registry, @@ -337,9 +337,9 @@ def first_derivative( ) # apply finite difference formulae - evals_data = np.array(raw_evals).reshape(2, n_steps, len(x), -1) - evals_data = np.transpose(evals_data, axes=(0, 1, 3, 2)) - evals = Evals(pos=evals_data[0], neg=evals_data[1]) + evals_data = np.array(raw_evals_arr).reshape(2, n_steps, len(x), -1) + evals_data_transposed = np.transpose(evals_data, axes=(0, 1, 3, 2)) + evals = Evals(pos=evals_data_transposed[0], neg=evals_data_transposed[1]) jac_candidates = {} for m in ["forward", "backward", "central"]: diff --git a/src/optimagic/examples/criterion_functions.py b/src/optimagic/examples/criterion_functions.py index 5474a76f4..1ac139c6a 100644 --- a/src/optimagic/examples/criterion_functions.py +++ b/src/optimagic/examples/criterion_functions.py @@ -114,7 +114,7 @@ def rosenbrock_gradient(params: PyTree) -> PyTree: l4 = np.delete(x, [0]) l4 = np.append(l4, 0) l5 = np.full((len(x) - 1), 2) - l5 = np.append(l5, 0) + l5 = np.append(l5, 0) # type: ignore[assignment] flat = 100 * (4 * (l1**3) + 2 * l2 - 2 * (l3**2) - 4 * (l4 * x)) + 2 * l1 - l5 return _unflatten_gradient(flat, params) diff --git a/src/optimagic/logging/logger.py b/src/optimagic/logging/logger.py index 5cd80fa6a..7165022a4 100644 --- a/src/optimagic/logging/logger.py +++ b/src/optimagic/logging/logger.py @@ -187,7 +187,10 @@ def _build_history_dataframe(self) -> pd.DataFrame: times = np.array(history["time"]) times -= times[0] - history["time"] = times.tolist() + # For numpy arrays with ndim = 0, tolist() returns a scalar, which violates the + # type hinting list[Any] from above. As history["time"] is always a list, this + # case is safe to ignore. + history["time"] = times.tolist() # type: ignore[assignment] df = pd.DataFrame(history) df = df.merge( diff --git a/src/optimagic/optimization/multistart.py b/src/optimagic/optimization/multistart.py index c3d4cf3e1..9b7544430 100644 --- a/src/optimagic/optimization/multistart.py +++ b/src/optimagic/optimization/multistart.py @@ -313,9 +313,11 @@ def run_explorations( """ internal_problem = internal_problem.with_step_id(step_id) - x_list = list(sample) + x_list: list[NDArray[np.float64]] = list(sample) - raw_values = np.array(internal_problem.exploration_fun(x_list, n_cores=n_cores)) + raw_values = np.asarray( + internal_problem.exploration_fun(x_list, n_cores=n_cores), dtype=np.float64 + ) is_valid = np.isfinite(raw_values) diff --git a/src/optimagic/optimizers/scipy_optimizers.py b/src/optimagic/optimizers/scipy_optimizers.py index d980183c8..1893f251a 100644 --- a/src/optimagic/optimizers/scipy_optimizers.py +++ b/src/optimagic/optimizers/scipy_optimizers.py @@ -799,11 +799,7 @@ def _solve_internal_problem( ) raw_res = scipy.optimize.brute( func=problem.fun, - ranges=tuple( - map( - tuple, np.column_stack((problem.bounds.lower, problem.bounds.upper)) - ) - ), + ranges=tuple(zip(problem.bounds.lower, problem.bounds.upper, strict=False)), Ns=self.n_grid_points, full_output=True, finish=self.polishing_function,