Passed
Push — master ( 61a8e6...a7d091 )
by Simon
03:21
created

hyperactive.core.Core.init_p_bar()   A

Complexity

Conditions 2

Size

Total Lines 5
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 5
rs 10
c 0
b 0
f 0
cc 2
nop 3
1
# Author: Simon Blanke
2
# Email: [email protected]
3
# License: MIT License
4
5
6
import random
7
import numpy as np
8
import multiprocessing
9
10
from .util import merge_dicts
11
12
13
class Core:
14
    def __init__(self, *args, **kwargs):
15
        kwargs_base = {
16
            "n_iter": 10,
17
            "max_time": None,
18
            "optimizer": "RandomSearch",
19
            "n_jobs": 1,
20
            "verbosity": 2,
21
            "warnings": True,
22
            "random_state": None,
23
            "warm_start": False,
24
            "memory": True,
25
            "scatter_init": False,
26
            "meta_learn": False,
27
            "proxy_dataset": False,
28
            "get_search_path": False,
29
        }
30
31
        self.search_config = args[0]
32
        self.opt_para = dict()
33
34
        if "optimizer" in kwargs and isinstance(kwargs["optimizer"], dict):
35
            opt = list(kwargs["optimizer"].keys())[0]
36
            self.opt_para = kwargs["optimizer"][opt]
37
38
            kwargs["optimizer"] = opt
39
40
        kwargs_base = merge_dicts(kwargs_base, kwargs)
41
        self._set_general_args(kwargs_base)
42
43
        self.model_list = list(self.search_config.keys())
44
        self.n_models = len(self.model_list)
45
46
        self.set_n_jobs()
47
        self._n_process_range = range(0, int(self.n_jobs))
48
49
        if self.max_time:
50
            self.max_time = self.max_time * 3600
51
52
    def _set_general_args(self, kwargs_base):
53
        self.n_iter = kwargs_base["n_iter"]
54
        self.max_time = kwargs_base["max_time"]
55
        self.optimizer = kwargs_base["optimizer"]
56
        self.n_jobs = kwargs_base["n_jobs"]
57
        self.verbosity = kwargs_base["verbosity"]
58
        self.warnings = kwargs_base["warnings"]
59
        self.random_state = kwargs_base["random_state"]
60
        self.warm_start = kwargs_base["warm_start"]
61
        self.memory = kwargs_base["memory"]
62
        self.scatter_init = kwargs_base["scatter_init"]
63
        self.meta_learn = kwargs_base["meta_learn"]
64
        self.get_search_path = kwargs_base["get_search_path"]
65
66
    def _set_random_seed(self, thread=0):
67
        """Sets the random seed separately for each thread (to avoid getting the same results in each thread)"""
68
        if self.random_state:
69
            rand = int(self.random_state)
70
        else:
71
            rand = 0
72
73
        random.seed(rand + thread)
74
        np.random.seed(rand + thread)
75
76
    def set_n_jobs(self):
77
        """Sets the number of jobs to run in parallel"""
78
        num_cores = multiprocessing.cpu_count()
79
        if self.n_jobs == -1 or self.n_jobs > num_cores:
80
            self.n_jobs = num_cores
81