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

hyperactive.composite_optimizer   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 37
dl 0
loc 51
rs 10
c 0
b 0
f 0
wmc 9

4 Methods

Rating   Name   Duplication   Size   Complexity  
A CompositeOptimizer._print_info() 0 10 4
A CompositeOptimizer.__add__() 0 3 1
A CompositeOptimizer.__init__() 0 2 1
A CompositeOptimizer.run() 0 23 3
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