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

run_search   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 58
Duplicated Lines 51.72 %

Importance

Changes 0
Metric Value
eloc 35
dl 30
loc 58
rs 10
c 0
b 0
f 0
wmc 8

3 Functions

Rating   Name   Duplication   Size   Complexity  
A proxy() 0 2 1
A _get_distribution() 12 12 4
A run_search() 18 18 3

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
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
6
from .distribution import (
7
    single_process,
8
    joblib_wrapper,
9
    multiprocessing_wrapper,
10
    pathos_wrapper,
11
)
12
from .process import _process_
13
14
15
def proxy(args):
16
    return _process_(*args)
17
18
19
dist_dict = {
20
    "joblib": (joblib_wrapper, _process_),
21
    "multiprocessing": (multiprocessing_wrapper, proxy),
22
    "pathos": (pathos_wrapper, proxy),
23
}
24
25
26 View Code Duplication
def _get_distribution(distribution):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
27
    if hasattr(distribution, "__call__"):
28
        return (distribution, _process_), {}
29
30
    elif isinstance(distribution, dict):
31
        dist_key = list(distribution.keys())[0]
32
        dist_paras = list(distribution.values())[0]
33
34
        return dist_dict[dist_key], dist_paras
35
36
    elif isinstance(distribution, str):
37
        return dist_dict[distribution], {}
38
39
40 View Code Duplication
def run_search(opt_pros, distribution, n_processes):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
41
    opts = list(opt_pros.values())
42
43
    processes = list(opt_pros.keys())
44
    optimizers = list(opt_pros.values())
45
    process_infos = list(zip(processes, optimizers))
46
47
    if n_processes == "auto":
48
        n_processes = len(process_infos)
49
50
    if n_processes == 1:
51
        results_list = single_process(_process_, process_infos)
52
    else:
53
        (distribution, process_func), dist_paras = _get_distribution(distribution)
54
55
        results_list = distribution(process_func, process_infos, n_processes)
56
57
    return results_list
58