Passed
Pull Request — master (#101)
by Simon
01:37
created

CompositeOptimizer.__add__()   A

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 2
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
from typing import Union
2
from .optimizers.backend_stuff.run_search import run_search
3
from .optimizers.backend_stuff.results import Results
4
from .optimizers.backend_stuff.print_results import PrintResults
5
6
7
class CompositeOptimizer:
8
    optimizers: list
9
10
    def __init__(self, *optimizers):
11
        self.optimizers = list(optimizers)
12
13
    def __add__(self, optimizer_instance):
14
        self.optimizers.append(optimizer_instance)
15
        return self
16
17
    def run(
18
        self,
19
        max_time=None,
20
        distribution: str = "multiprocessing",
21
        n_processes: Union[str, int] = "auto",
22
        verbosity: list = ["progress_bar", "print_results", "print_times"],
23
    ):
24
        self.verbosity = verbosity
25
26
        self.collected_searches = []
27
        for optimizer in self.optimizers:
28
            self.collected_searches += optimizer.searches
29
30
        for nth_process, search in enumerate(self.collected_searches):
31
            search.pass_args(max_time, nth_process)
32
33
        self.results_list = run_search(
34
            self.collected_searches, distribution, n_processes
35
        )
36
37
        self.results_ = Results(self.results_list, self.collected_searches)
38
39
        self._print_info()
40
41
    def _print_info(self):
42
        print_res = PrintResults(self.collected_searches, self.verbosity)
43
44
        if self.verbosity:
45
            for _ in range(len(self.collected_searches)):
46
                print("")
47
48
        for results in self.results_list:
49
            nth_process = results["nth_process"]
50
            print_res.print_process(results, nth_process)
51