|
1 | 1 | """Test helper functions for nevergrad optimizers.""" |
2 | 2 |
|
3 | | -import warnings |
| 3 | +from typing import get_args |
4 | 4 |
|
5 | | -from optimagic import mark |
| 5 | +import numpy as np |
| 6 | +import pytest |
| 7 | +from numpy.testing import assert_array_almost_equal as aaae |
| 8 | + |
| 9 | +from optimagic import algorithms, mark |
6 | 10 | from optimagic.config import IS_NEVERGRAD_INSTALLED |
| 11 | +from optimagic.optimization.optimize import minimize |
| 12 | +from optimagic.parameters.bounds import Bounds |
7 | 13 |
|
8 | 14 | if IS_NEVERGRAD_INSTALLED: |
9 | | - import cma |
10 | | - |
11 | | - ## Skip warnings during tests |
12 | | - warnings.simplefilter("ignore", cma.evolution_strategy.InjectionWarning) |
| 15 | + import nevergrad as ng |
13 | 16 |
|
14 | 17 |
|
15 | 18 | @mark.least_squares |
@@ -66,67 +69,67 @@ def sos(x): |
66 | 69 | # expected = [[np.array([-2.0]), np.array([-1.0])]] * 2 |
67 | 70 | # assert got == expected |
68 | 71 | ### |
69 | | -################################################################################### |
70 | | - |
71 | | -# # test if all optimizers listed in Literal type hint are valid attributes |
72 | | -# @pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
73 | | -# def test_meta_optimizers_are_valid(): |
74 | | -# opt = algorithms.NevergradMeta |
75 | | -# optimizers = get_args(opt.__annotations__["optimizer"]) |
76 | | -# for optimizer in optimizers: |
77 | | -# try: |
78 | | -# getattr(ng.optimizers, optimizer) |
79 | | -# except AttributeError: |
80 | | -# pytest.fail(f"Optimizer '{optimizer}' not found in Nevergrad") |
81 | | - |
82 | | - |
83 | | -# @pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
84 | | -# def test_ngopt_optimizers_are_valid(): |
85 | | -# opt = algorithms.NevergradNGOpt |
86 | | -# optimizers = get_args(opt.__annotations__["optimizer"]) |
87 | | -# for optimizer in optimizers: |
88 | | -# try: |
89 | | -# getattr(ng.optimizers, optimizer) |
90 | | -# except AttributeError: |
91 | | -# pytest.fail(f"Optimizer '{optimizer}' not found in Nevergrad") |
92 | | - |
93 | | - |
94 | | -# # list of available optimizers in nevergrad_meta |
95 | | -# NEVERGRAD_META = get_args(algorithms.NevergradMeta.__annotations__["optimizer"]) |
96 | | -# # list of available optimizers in nevergrad_ngopt |
97 | | -# NEVERGRAD_NGOPT = get_args(algorithms.NevergradNGOpt.__annotations__["optimizer"]) |
98 | | - |
99 | | - |
100 | | -# # test stochastic_global_algorithm_on_sum_of_squares |
101 | | -# @pytest.mark.slow |
102 | | -# @pytest.mark.parametrize("algorithm", NEVERGRAD_META) |
103 | | -# @pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
104 | | -# def test_meta_optimizers_with_stochastic_global_algorithm_on_sos(algorithm): |
105 | | -# res = minimize( |
106 | | -# fun=sos, |
107 | | -# params=np.array([0.35, 0.35]), |
108 | | -# bounds=Bounds(lower=np.array([0.2, -0.5]), upper=np.array([1, 0.5])), |
109 | | -# algorithm=algorithms.NevergradMeta(algorithm), |
110 | | -# collect_history=False, |
111 | | -# skip_checks=True, |
112 | | -# algo_options={"seed": 12345}, |
113 | | -# ) |
114 | | -# assert res.success in [True, None] |
115 | | -# aaae(res.params, np.array([0.2, 0]), decimal=1) |
116 | | - |
117 | | - |
118 | | -# @pytest.mark.slow |
119 | | -# @pytest.mark.parametrize("algorithm", NEVERGRAD_NGOPT) |
120 | | -# @pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
121 | | -# def test_ngopt_optimizers_with_stochastic_global_algorithm_on_sos(algorithm): |
122 | | -# res = minimize( |
123 | | -# fun=sos, |
124 | | -# params=np.array([0.35, 0.35]), |
125 | | -# bounds=Bounds(lower=np.array([0.2, -0.5]), upper=np.array([1, 0.5])), |
126 | | -# algorithm=algorithms.NevergradNGOpt(algorithm), |
127 | | -# collect_history=False, |
128 | | -# skip_checks=True, |
129 | | -# algo_options={"seed": 12345}, |
130 | | -# ) |
131 | | -# assert res.success in [True, None] |
132 | | -# aaae(res.params, np.array([0.2, 0]), decimal=1) |
| 72 | + |
| 73 | + |
| 74 | +# test if all optimizers listed in Literal type hint are valid attributes |
| 75 | +@pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
| 76 | +def test_meta_optimizers_are_valid(): |
| 77 | + opt = algorithms.NevergradMeta |
| 78 | + optimizers = get_args(opt.__annotations__["optimizer"]) |
| 79 | + for optimizer in optimizers: |
| 80 | + try: |
| 81 | + getattr(ng.optimizers, optimizer) |
| 82 | + except AttributeError: |
| 83 | + pytest.fail(f"Optimizer '{optimizer}' not found in Nevergrad") |
| 84 | + |
| 85 | + |
| 86 | +@pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
| 87 | +def test_ngopt_optimizers_are_valid(): |
| 88 | + opt = algorithms.NevergradNGOpt |
| 89 | + optimizers = get_args(opt.__annotations__["optimizer"]) |
| 90 | + for optimizer in optimizers: |
| 91 | + try: |
| 92 | + getattr(ng.optimizers, optimizer) |
| 93 | + except AttributeError: |
| 94 | + pytest.fail(f"Optimizer '{optimizer}' not found in Nevergrad") |
| 95 | + |
| 96 | + |
| 97 | +# list of available optimizers in nevergrad_meta |
| 98 | +NEVERGRAD_META = get_args(algorithms.NevergradMeta.__annotations__["optimizer"]) |
| 99 | +# list of available optimizers in nevergrad_ngopt |
| 100 | +NEVERGRAD_NGOPT = get_args(algorithms.NevergradNGOpt.__annotations__["optimizer"]) |
| 101 | + |
| 102 | + |
| 103 | +# test stochastic_global_algorithm_on_sum_of_squares |
| 104 | +@pytest.mark.slow |
| 105 | +@pytest.mark.parametrize("algorithm", NEVERGRAD_META) |
| 106 | +@pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
| 107 | +def test_meta_optimizers_with_stochastic_global_algorithm_on_sum_of_squares(algorithm): |
| 108 | + res = minimize( |
| 109 | + fun=sos, |
| 110 | + params=np.array([0.35, 0.35]), |
| 111 | + bounds=Bounds(lower=np.array([0.2, -0.5]), upper=np.array([1, 0.5])), |
| 112 | + algorithm=algorithms.NevergradMeta(algorithm), |
| 113 | + collect_history=False, |
| 114 | + skip_checks=True, |
| 115 | + algo_options={"seed": 12345}, |
| 116 | + ) |
| 117 | + assert res.success in [True, None] |
| 118 | + aaae(res.params, np.array([0.2, 0]), decimal=1) |
| 119 | + |
| 120 | + |
| 121 | +@pytest.mark.slow |
| 122 | +@pytest.mark.parametrize("algorithm", NEVERGRAD_NGOPT) |
| 123 | +@pytest.mark.skipif(not IS_NEVERGRAD_INSTALLED, reason="nevergrad not installed") |
| 124 | +def test_ngopt_optimizers_with_stochastic_global_algorithm_on_sum_of_squares(algorithm): |
| 125 | + res = minimize( |
| 126 | + fun=sos, |
| 127 | + params=np.array([0.35, 0.35]), |
| 128 | + bounds=Bounds(lower=np.array([0.2, -0.5]), upper=np.array([1, 0.5])), |
| 129 | + algorithm=algorithms.NevergradNGOpt(algorithm), |
| 130 | + collect_history=False, |
| 131 | + skip_checks=True, |
| 132 | + algo_options={"seed": 12345}, |
| 133 | + ) |
| 134 | + assert res.success in [True, None] |
| 135 | + aaae(res.params, np.array([0.2, 0]), decimal=1) |
0 commit comments