Completed
Push — master ( f62864...bebaaf )
by Wojtek
02:41
created

grortir/main/model/stages/calls_stage.py (2 issues)

Labels
Severity
1
"""Module contains class CallsStage."""
2 1
from grortir.main.model.core.abstract_stage import AbstractStage
3
4
5 1
class CallsStage(AbstractStage):
6
    """Implementation of basic stage.
7
8
    Cost is calculated by number of calls of cost function.
9
    Attributes:
10
        cost (float): Actual cost of stage.
11
        max_calls (int): Maximum possible calls of cost quality function
12
        name (str): Name of stage
13
        maximum_acceptable_quality (float): max expected quality
14
    """
15
16 1
    def __init__(self, name, max_calls, input_vector=(),
17
                 maximum_acceptable_quality=1e-8):
18
        """Constructor."""
19 1
        super().__init__(input_vector)
20 1
        self.max_calls = max_calls
21 1
        self.name = name
22 1
        self.control_params = [0] * len(self.input_vector)
23 1
        self.maximum_acceptable_quality = maximum_acceptable_quality
24 1
        self.cost = 0
25
26 1
    def get_quality(self, control_params=None):
27
        """
28
        Return quality of actual output.
29
30
        Returns:
31
            quality (float): quality
32
33
        """
34 1
        if control_params is None:
35 1
            control_params = self.control_params[:]
36 1
        self.cost += 1
37 1
        return self.calculate_quality(control_params)
38
39 1
    def calculate_quality(self, control_params):
40
        """
41
        Function for calculating quality.
42
43
        Returns:
44
            quality (float): quality
45
46
        Raises:
47
            AssertionError: If length of `control_params`
48
                is not equal length of `current_vector`
49
        """
50 1
        assert len(control_params) == len(self.current_vector)
51 1
        quality = 0
52 1
        for i in enumerate(control_params):
53 1
            quality += (control_params[i[0]] - self.current_vector[
54
                i[0]]) ** 2
55 1
        return quality
56
57 1
    def get_cost(self):
58
        """
59
        Return actual cost of stage.
60
61
        Returns:
62
            cost (float): cost
63
        """
64 1
        return self.cost
65
66 1
    def could_be_optimized(self):
67
        """Return answer if it is still possible to optimize that stage."""
68 1
        return self.get_cost() < self.max_calls
69
70 1
    def is_enough_quality(self, value):
0 ignored issues
show
Arguments number differs from overridden 'is_enough_quality' method
Loading history...
71
        """Return True if value is proper quality."""
72 1
        return value <= self.maximum_acceptable_quality
73
74 1
    def get_output_of_stage(self):
0 ignored issues
show
Arguments number differs from overridden 'get_output_of_stage' method
Loading history...
75
        """Return output of stage."""
76
        return None
77