tests.test_distribution   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 199
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 19
eloc 112
dl 0
loc 199
rs 10
c 0
b 0
f 0

19 Functions

Rating   Name   Duplication   Size   Complexity  
A test_n_processes_1() 0 7 1
A test_n_processes_3() 0 7 1
A test_n_processes_2() 0 7 1
A test_joblib_0() 0 5 1
A test_joblib_1() 0 18 1
A test_n_jobs_1() 0 7 1
A objective_function() 0 4 1
A test_n_jobs_0() 0 7 1
A test_n_processes_4() 0 7 1
A test_pathos_0() 0 5 1
A test_n_processes_5() 0 8 1
A test_multiprocessing_0() 0 5 1
A test_n_jobs_7() 0 5 1
A test_multiprocessing_1() 0 12 1
A test_n_jobs_5() 0 9 1
A test_n_jobs_2() 0 7 1
A test_n_processes_0() 0 7 1
A test_n_jobs_6() 0 11 1
A test_n_jobs_3() 0 5 1
1
"""Test module for distribution functionality."""
2
3
import sys
4
5
import numpy as np
6
import pytest
7
from tqdm import tqdm
8
9
from hyperactive import Hyperactive
10
11
if sys.platform.startswith("win"):
12
    pytest.skip("skip these tests for windows", allow_module_level=True)
13
14
15
def objective_function(opt):
16
    """Return simple quadratic objective function for testing."""
17
    score = -opt["x1"] * opt["x1"]
18
    return score
19
20
21
search_space = {
22
    "x1": list(np.arange(-100, 101, 1)),
23
}
24
25
26
def test_n_jobs_0():
27
    """Test basic n_jobs functionality with 2 parallel jobs."""
28
    hyper = Hyperactive()
29
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
30
    hyper.run()
31
32
    assert len(hyper.results_list) == 2
33
34
35
def test_n_jobs_1():
36
    """Test n_jobs functionality with 4 parallel jobs."""
37
    hyper = Hyperactive()
38
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=4)
39
    hyper.run()
40
41
    assert len(hyper.results_list) == 4
42
43
44
def test_n_jobs_2():
45
    """Test n_jobs functionality with 8 parallel jobs."""
46
    hyper = Hyperactive()
47
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=8)
48
    hyper.run()
49
50
    assert len(hyper.results_list) == 8
51
52
53
def test_n_jobs_3():
54
    """Test default n_jobs behavior (single job)."""
55
    hyper = Hyperactive()
56
    hyper.add_search(objective_function, search_space, n_iter=15)
57
    hyper.run()
58
59
60
def test_n_jobs_5():
61
    """Test multiple searches with n_jobs=2 each."""
62
    hyper = Hyperactive()
63
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
64
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
65
66
    hyper.run()
67
68
    assert len(hyper.results_list) == 4
69
70
71
def test_n_jobs_6():
72
    """Test four searches with n_jobs=2 each."""
73
    hyper = Hyperactive()
74
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
75
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
76
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
77
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
78
79
    hyper.run()
80
81
    assert len(hyper.results_list) == 8
82
83
84
def test_n_jobs_7():
85
    """Test n_jobs=-1 (use all available cores)."""
86
    hyper = Hyperactive()
87
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=-1)
88
    hyper.run()
89
90
91
def test_multiprocessing_0():
92
    """Test multiprocessing distribution backend."""
93
    hyper = Hyperactive(distribution="multiprocessing")
94
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
95
    hyper.run()
96
97
98
def test_multiprocessing_1():
99
    """Test multiprocessing with custom initializer configuration."""
100
    hyper = Hyperactive(
101
        distribution={
102
            "multiprocessing": {
103
                "initializer": tqdm.set_lock,
104
                "initargs": (tqdm.get_lock(),),
105
            }
106
        },
107
    )
108
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
109
    hyper.run()
110
111
112
def test_joblib_0():
113
    """Test joblib distribution backend."""
114
    hyper = Hyperactive(distribution="joblib")
115
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
116
    hyper.run()
117
118
119
def test_joblib_1():
120
    """Test custom joblib wrapper function."""
121
    from joblib import Parallel, delayed
122
123
    def joblib_wrapper(process_func, search_processes_paras, n_jobs, **kwargs):
124
        n_jobs = len(search_processes_paras)
125
126
        jobs = [
127
            delayed(process_func)(*info_dict) for info_dict in search_processes_paras
128
        ]
129
        results = Parallel(n_jobs=n_jobs, *kwargs)(jobs)
130
131
        return results
132
133
    hyper = Hyperactive(distribution=joblib_wrapper)
134
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
135
136
    hyper.run()
137
138
139
def test_pathos_0():
140
    """Test pathos distribution backend."""
141
    hyper = Hyperactive(distribution="pathos")
142
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
143
    hyper.run()
144
145
146
def test_n_processes_0():
147
    """Test n_processes=1 with n_jobs=2."""
148
    hyper = Hyperactive(n_processes=1)
149
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
150
    hyper.run()
151
152
    assert len(hyper.results_list) == 2
153
154
155
def test_n_processes_1():
156
    """Test n_processes=2 with n_jobs=2."""
157
    hyper = Hyperactive(n_processes=2)
158
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
159
    hyper.run()
160
161
    assert len(hyper.results_list) == 2
162
163
164
def test_n_processes_2():
165
    """Test n_processes=4 with n_jobs=2."""
166
    hyper = Hyperactive(n_processes=4)
167
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=2)
168
    hyper.run()
169
170
    assert len(hyper.results_list) == 2
171
172
173
def test_n_processes_3():
174
    """Test n_processes=4 with n_jobs=3."""
175
    hyper = Hyperactive(n_processes=4)
176
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=3)
177
    hyper.run()
178
179
    assert len(hyper.results_list) == 3
180
181
182
def test_n_processes_4():
183
    """Test n_processes=1 with n_jobs=4."""
184
    hyper = Hyperactive(n_processes=1)
185
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=4)
186
    hyper.run()
187
188
    assert len(hyper.results_list) == 4
189
190
191
def test_n_processes_5():
192
    """Test n_processes=1 with multiple searches having n_jobs=4."""
193
    hyper = Hyperactive(n_processes=1)
194
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=4)
195
    hyper.add_search(objective_function, search_space, n_iter=15, n_jobs=4)
196
    hyper.run()
197
198
    assert len(hyper.results_list) == 8
199