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
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
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 )