tests._local_test_optimization_strategies._test_strategy_combinations   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 163
Duplicated Lines 60.74 %

Importance

Changes 0
Metric Value
wmc 5
eloc 112
dl 99
loc 163
rs 10
c 0
b 0
f 0

5 Functions

Rating   Name   Duplication   Size   Complexity  
A objective_function() 0 3 1
A test_strategy_combinations_0() 33 33 1
A test_strategy_combinations_2() 33 33 1
A test_strategy_combinations_3() 0 37 1
A test_strategy_combinations_1() 33 33 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
import numpy as np
2
import pytest
3
4
from hyperactive import Hyperactive
5
from hyperactive.optimizers.strategies import CustomOptimizationStrategy
6
7
from ._parametrize import optimizers, optimizers_strat
8
9
10
def objective_function(opt):
11
    score = -(opt["x1"] * opt["x1"] + opt["x2"] * opt["x2"])
12
    return score
13
14
15
search_space = {
16
    "x1": list(np.arange(-3, 3, 1)),
17
    "x2": list(np.arange(-3, 3, 1)),
18
}
19
20
21 View Code Duplication
@pytest.mark.parametrize(*optimizers)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
22
@pytest.mark.parametrize(*optimizers_strat)
23
def test_strategy_combinations_0(Optimizer, Optimizer_strat):
24
    optimizer1 = Optimizer()
25
    optimizer2 = Optimizer_strat()
26
27
    opt_strat = CustomOptimizationStrategy()
28
    opt_strat.add_optimizer(optimizer1, duration=0.5)
29
    opt_strat.add_optimizer(optimizer2, duration=0.5)
30
31
    n_iter = 30
32
33
    hyper = Hyperactive()
34
    hyper.add_search(
35
        objective_function,
36
        search_space,
37
        optimizer=opt_strat,
38
        n_iter=n_iter,
39
        memory=False,
40
    )
41
    hyper.run()
42
43
    search_data = hyper.search_data(objective_function)
44
45
    optimizer1 = hyper.opt_pros[0].optimizer_setup_l[0]["optimizer"]
46
    optimizer2 = hyper.opt_pros[0].optimizer_setup_l[1]["optimizer"]
47
48
    assert len(search_data) == n_iter
49
50
    assert len(optimizer1.search_data) == 15
51
    assert len(optimizer2.search_data) == 15
52
53
    assert optimizer1.best_score <= optimizer2.best_score
54
55
56 View Code Duplication
@pytest.mark.parametrize(*optimizers)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
57
@pytest.mark.parametrize(*optimizers_strat)
58
def test_strategy_combinations_1(Optimizer, Optimizer_strat):
59
    optimizer1 = Optimizer()
60
    optimizer2 = Optimizer_strat()
61
62
    opt_strat = CustomOptimizationStrategy()
63
    opt_strat.add_optimizer(optimizer1, duration=0.1)
64
    opt_strat.add_optimizer(optimizer2, duration=0.9)
65
66
    n_iter = 10
67
68
    hyper = Hyperactive()
69
    hyper.add_search(
70
        objective_function,
71
        search_space,
72
        optimizer=opt_strat,
73
        n_iter=n_iter,
74
        memory=False,
75
    )
76
    hyper.run()
77
78
    search_data = hyper.search_data(objective_function)
79
80
    optimizer1 = hyper.opt_pros[0].optimizer_setup_l[0]["optimizer"]
81
    optimizer2 = hyper.opt_pros[0].optimizer_setup_l[1]["optimizer"]
82
83
    assert len(search_data) == n_iter
84
85
    assert len(optimizer1.search_data) == 1
86
    assert len(optimizer2.search_data) == 9
87
88
    assert optimizer1.best_score <= optimizer2.best_score
89
90
91 View Code Duplication
@pytest.mark.parametrize(*optimizers)
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
92
@pytest.mark.parametrize(*optimizers_strat)
93
def test_strategy_combinations_2(Optimizer, Optimizer_strat):
94
    optimizer1 = Optimizer()
95
    optimizer2 = Optimizer_strat()
96
97
    opt_strat = CustomOptimizationStrategy()
98
    opt_strat.add_optimizer(optimizer1, duration=0.9)
99
    opt_strat.add_optimizer(optimizer2, duration=0.1)
100
101
    n_iter = 10
102
103
    hyper = Hyperactive()
104
    hyper.add_search(
105
        objective_function,
106
        search_space,
107
        optimizer=opt_strat,
108
        n_iter=n_iter,
109
        memory=False,
110
    )
111
    hyper.run()
112
113
    search_data = hyper.search_data(objective_function)
114
115
    optimizer1 = hyper.opt_pros[0].optimizer_setup_l[0]["optimizer"]
116
    optimizer2 = hyper.opt_pros[0].optimizer_setup_l[1]["optimizer"]
117
118
    assert len(search_data) == n_iter
119
120
    assert len(optimizer1.search_data) == 9
121
    assert len(optimizer2.search_data) == 1
122
123
    assert optimizer1.best_score <= optimizer2.best_score
124
125
126
@pytest.mark.parametrize(*optimizers)
127
@pytest.mark.parametrize(*optimizers_strat)
128
def test_strategy_combinations_3(Optimizer, Optimizer_strat):
129
    optimizer1 = Optimizer()
130
    optimizer2 = Optimizer_strat()
131
    optimizer3 = Optimizer_strat()
132
133
    opt_strat = CustomOptimizationStrategy()
134
    opt_strat.add_optimizer(optimizer1, duration=10)
135
    opt_strat.add_optimizer(optimizer2, duration=20)
136
    opt_strat.add_optimizer(optimizer3, duration=30)
137
138
    n_iter = 100
139
140
    hyper = Hyperactive()
141
    hyper.add_search(
142
        objective_function,
143
        search_space,
144
        optimizer=opt_strat,
145
        n_iter=n_iter,
146
        memory=False,
147
    )
148
    hyper.run()
149
150
    search_data = hyper.search_data(objective_function)
151
152
    optimizer1 = hyper.opt_pros[0].optimizer_setup_l[0]["optimizer"]
153
    optimizer2 = hyper.opt_pros[0].optimizer_setup_l[1]["optimizer"]
154
    optimizer3 = hyper.opt_pros[0].optimizer_setup_l[2]["optimizer"]
155
156
    assert len(search_data) == n_iter
157
158
    assert len(optimizer1.search_data) == round(n_iter * 10 / 60)
159
    assert len(optimizer2.search_data) == round(n_iter * 20 / 60)
160
    assert len(optimizer3.search_data) == round(n_iter * 30 / 60)
161
162
    assert optimizer1.best_score <= optimizer2.best_score <= optimizer3.best_score
163