-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbase.py
100 lines (62 loc) · 2.57 KB
/
base.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import abc
import dataclasses
import enum
import typing
class AbstractSelectionInfo(abc.ABC):
pass
@dataclasses.dataclass
class SelectionInfoEmpty(AbstractSelectionInfo):
pass
@dataclasses.dataclass
class SelectionInfoLabelMonoDirectionalRandom(AbstractSelectionInfo):
from_label: typing.Optional[int] = dataclasses.field(default=None)
@dataclasses.dataclass
class SelectionInfoLabelMonoDirectional(AbstractSelectionInfo):
from_label: typing.Optional[int] = dataclasses.field(default=None)
to_label: typing.Optional[int] = dataclasses.field(default=None)
@dataclasses.dataclass
class SelectionInfoLabelBiDirectionalMirrored(AbstractSelectionInfo):
label_a: typing.Optional[int] = dataclasses.field(default=None)
label_b: typing.Optional[int] = dataclasses.field(default=None)
def get_value_from_percentage(perc: float, value: int) -> int:
return round(value * perc / 100)
@dataclasses.dataclass
class AbstractPerformInfo(abc.ABC):
perc_data_points: float = dataclasses.field(default=0.0)
def get_number_of_data_points(self, total_number: int) -> int:
return get_value_from_percentage(perc=self.perc_data_points, value=total_number)
@abc.abstractmethod
def get_info_as_dict(self) -> typing.Dict[str, typing.Any]:
pass
@abc.abstractmethod
def get_info_clean_as_dict(self) -> typing.Dict[str, typing.Any]:
pass
PERC_POINTS = 'Perc_Points'
PERC_FEATURES = 'Perc_Features'
# todo in dataset generator will just add perc_points and perc_features directly, removing
# these abstract method.
@dataclasses.dataclass
class PerformInfoLabelOnly(AbstractPerformInfo):
def get_info_as_dict(self) -> typing.Dict[str, typing.Any]:
return {PERC_POINTS: self.perc_data_points, PERC_FEATURES: 0.0}
def get_info_clean_as_dict(self) -> typing.Dict[str, typing.Any]:
return {PERC_POINTS: 0.0, PERC_FEATURES: 0.0}
@dataclasses.dataclass
class PerformInfoMonoDirectional(SelectionInfoLabelMonoDirectional, PerformInfoLabelOnly):
pass
class PerformInfoEmpty(PerformInfoLabelOnly):
pass
@dataclasses.dataclass
class PerformInfoBiDirectionalMirrored(SelectionInfoLabelBiDirectionalMirrored, PerformInfoLabelOnly):
pass
@typing.runtime_checkable
class PerformInfoProtocol(typing.Protocol):
def get_info_as_dict(self) -> typing.Dict[str, typing.Any]:
pass
def get_info_clean_as_dict(self) -> typing.Dict[str, typing.Any]:
pass
class ModifiedPartOfPoints(enum.Enum):
X = 'X'
y = 'y'
X_y = 'X_Y'
PoisoningInfo_D = typing.Dict[str, typing.Union[str, int, float, bool]]