aegis_sim.parameterization.parameter

  1import logging
  2
  3
  4class Parameter:
  5    def __init__(
  6        self,
  7        key,
  8        name,
  9        domain,
 10        default,
 11        info,
 12        dtype,
 13        drange,
 14        info_extended=None,
 15        inrange=lambda x: True,
 16        serverrange=lambda x: True,
 17        serverrange_info="",
 18        evalrange=None,
 19        presets={},
 20        show_in_docs=True,
 21        show_in_gui=True,
 22        previous_keys=[],
 23    ):
 24        self.key = key
 25        self.name = name
 26        self.domain = domain
 27        self.default = default
 28        self.info = info
 29        self.info_extended = info_extended
 30        self.dtype = dtype
 31        self.drange = drange
 32        self.inrange = inrange
 33        self.serverrange = serverrange
 34        self.serverrange_info = serverrange_info
 35        self.evalrange = evalrange
 36        self.presets = presets
 37        self.show_in_docs = show_in_docs
 38        self.show_in_gui = show_in_gui
 39        self.previous_keys = previous_keys
 40
 41    def convert(self, value):
 42        if value is None or value == "":
 43            return self.default
 44        elif self.dtype == bool:
 45            return value in ("True", "true", True)
 46        else:
 47            return self.dtype(value)
 48
 49    def valid(self, value):
 50        # Not valid if wrong data type
 51        if not isinstance(value, self.dtype):
 52            logging.error(f"Value {value} is not of valid type {self.dtype} but of type {type(value)}.")
 53            return False
 54
 55        # Not valid if not in range
 56        if not self.inrange(value):
 57            return False
 58
 59        # Valid
 60        return True
 61
 62    def get_name(self):
 63        if self.name:
 64            return self.name
 65        name = self.key.replace("_", " ").strip().lower()
 66        return name
 67
 68    def validate_dtype(self, value):
 69        can_be_none = self.default is None
 70        # given custom value is None which is a valid data type
 71        if can_be_none and value is None:
 72            return
 73        # given custom value is of valid data type
 74        if isinstance(value, self.dtype):
 75            return
 76        # given custom value is int but float is valid
 77        if self.dtype is float and isinstance(value, int):
 78            return
 79        raise TypeError(
 80            f"You set {self.key} to be '{value}' which is of type {type(value)} but it should be {self.dtype} {'or None' if can_be_none else ''}"
 81        )
 82
 83    def validate_inrange(self, value):
 84        if self.inrange(value):
 85            return
 86        raise ValueError(f"{self.key} is set to be '{value}' which is outside of the valid range '{self.drange}'.")
 87
 88    def validate_serverrange(self, value):
 89        if self.serverrange(value):
 90            return
 91        raise ValueError(
 92            f"{self.key} is set to be '{value}' which is outside of the valid server range '{self.drange}'."
 93        )
 94
 95    def generate_full_evalrange(self):
 96        if self.evalrange is not None:
 97            n_datapoints = 10
 98            from numpy import linspace
 99
100            return linspace(self.evalrange[0], self.evalrange[1], n_datapoints)
class Parameter:
  5class Parameter:
  6    def __init__(
  7        self,
  8        key,
  9        name,
 10        domain,
 11        default,
 12        info,
 13        dtype,
 14        drange,
 15        info_extended=None,
 16        inrange=lambda x: True,
 17        serverrange=lambda x: True,
 18        serverrange_info="",
 19        evalrange=None,
 20        presets={},
 21        show_in_docs=True,
 22        show_in_gui=True,
 23        previous_keys=[],
 24    ):
 25        self.key = key
 26        self.name = name
 27        self.domain = domain
 28        self.default = default
 29        self.info = info
 30        self.info_extended = info_extended
 31        self.dtype = dtype
 32        self.drange = drange
 33        self.inrange = inrange
 34        self.serverrange = serverrange
 35        self.serverrange_info = serverrange_info
 36        self.evalrange = evalrange
 37        self.presets = presets
 38        self.show_in_docs = show_in_docs
 39        self.show_in_gui = show_in_gui
 40        self.previous_keys = previous_keys
 41
 42    def convert(self, value):
 43        if value is None or value == "":
 44            return self.default
 45        elif self.dtype == bool:
 46            return value in ("True", "true", True)
 47        else:
 48            return self.dtype(value)
 49
 50    def valid(self, value):
 51        # Not valid if wrong data type
 52        if not isinstance(value, self.dtype):
 53            logging.error(f"Value {value} is not of valid type {self.dtype} but of type {type(value)}.")
 54            return False
 55
 56        # Not valid if not in range
 57        if not self.inrange(value):
 58            return False
 59
 60        # Valid
 61        return True
 62
 63    def get_name(self):
 64        if self.name:
 65            return self.name
 66        name = self.key.replace("_", " ").strip().lower()
 67        return name
 68
 69    def validate_dtype(self, value):
 70        can_be_none = self.default is None
 71        # given custom value is None which is a valid data type
 72        if can_be_none and value is None:
 73            return
 74        # given custom value is of valid data type
 75        if isinstance(value, self.dtype):
 76            return
 77        # given custom value is int but float is valid
 78        if self.dtype is float and isinstance(value, int):
 79            return
 80        raise TypeError(
 81            f"You set {self.key} to be '{value}' which is of type {type(value)} but it should be {self.dtype} {'or None' if can_be_none else ''}"
 82        )
 83
 84    def validate_inrange(self, value):
 85        if self.inrange(value):
 86            return
 87        raise ValueError(f"{self.key} is set to be '{value}' which is outside of the valid range '{self.drange}'.")
 88
 89    def validate_serverrange(self, value):
 90        if self.serverrange(value):
 91            return
 92        raise ValueError(
 93            f"{self.key} is set to be '{value}' which is outside of the valid server range '{self.drange}'."
 94        )
 95
 96    def generate_full_evalrange(self):
 97        if self.evalrange is not None:
 98            n_datapoints = 10
 99            from numpy import linspace
100
101            return linspace(self.evalrange[0], self.evalrange[1], n_datapoints)
Parameter( key, name, domain, default, info, dtype, drange, info_extended=None, inrange=<function Parameter.<lambda>>, serverrange=<function Parameter.<lambda>>, serverrange_info='', evalrange=None, presets={}, show_in_docs=True, show_in_gui=True, previous_keys=[])
 6    def __init__(
 7        self,
 8        key,
 9        name,
10        domain,
11        default,
12        info,
13        dtype,
14        drange,
15        info_extended=None,
16        inrange=lambda x: True,
17        serverrange=lambda x: True,
18        serverrange_info="",
19        evalrange=None,
20        presets={},
21        show_in_docs=True,
22        show_in_gui=True,
23        previous_keys=[],
24    ):
25        self.key = key
26        self.name = name
27        self.domain = domain
28        self.default = default
29        self.info = info
30        self.info_extended = info_extended
31        self.dtype = dtype
32        self.drange = drange
33        self.inrange = inrange
34        self.serverrange = serverrange
35        self.serverrange_info = serverrange_info
36        self.evalrange = evalrange
37        self.presets = presets
38        self.show_in_docs = show_in_docs
39        self.show_in_gui = show_in_gui
40        self.previous_keys = previous_keys
key
name
domain
default
info
info_extended
dtype
drange
inrange
serverrange
serverrange_info
evalrange
presets
show_in_docs
show_in_gui
previous_keys
def convert(self, value):
42    def convert(self, value):
43        if value is None or value == "":
44            return self.default
45        elif self.dtype == bool:
46            return value in ("True", "true", True)
47        else:
48            return self.dtype(value)
def valid(self, value):
50    def valid(self, value):
51        # Not valid if wrong data type
52        if not isinstance(value, self.dtype):
53            logging.error(f"Value {value} is not of valid type {self.dtype} but of type {type(value)}.")
54            return False
55
56        # Not valid if not in range
57        if not self.inrange(value):
58            return False
59
60        # Valid
61        return True
def get_name(self):
63    def get_name(self):
64        if self.name:
65            return self.name
66        name = self.key.replace("_", " ").strip().lower()
67        return name
def validate_dtype(self, value):
69    def validate_dtype(self, value):
70        can_be_none = self.default is None
71        # given custom value is None which is a valid data type
72        if can_be_none and value is None:
73            return
74        # given custom value is of valid data type
75        if isinstance(value, self.dtype):
76            return
77        # given custom value is int but float is valid
78        if self.dtype is float and isinstance(value, int):
79            return
80        raise TypeError(
81            f"You set {self.key} to be '{value}' which is of type {type(value)} but it should be {self.dtype} {'or None' if can_be_none else ''}"
82        )
def validate_inrange(self, value):
84    def validate_inrange(self, value):
85        if self.inrange(value):
86            return
87        raise ValueError(f"{self.key} is set to be '{value}' which is outside of the valid range '{self.drange}'.")
def validate_serverrange(self, value):
89    def validate_serverrange(self, value):
90        if self.serverrange(value):
91            return
92        raise ValueError(
93            f"{self.key} is set to be '{value}' which is outside of the valid server range '{self.drange}'."
94        )
def generate_full_evalrange(self):
 96    def generate_full_evalrange(self):
 97        if self.evalrange is not None:
 98            n_datapoints = 10
 99            from numpy import linspace
100
101            return linspace(self.evalrange[0], self.evalrange[1], n_datapoints)