diff --git a/cml/shared/parameter.py b/cml/shared/parameter.py index d5a4dd972d17b95bbc91a4ed7395176cf9effdbb..b75e4dd8b4105731250ef3d39ca26404e5c615f8 100644 --- a/cml/shared/parameter.py +++ b/cml/shared/parameter.py @@ -11,7 +11,18 @@ class SetFeatures: return self.set_features def __set__(self, instance, value): - self.set_features = [int(i) for i in value.split(",")] + if isinstance(value, list): + try: + self.set_features = [int(i) for i in value] + except ValueError: + # TODO (dmt): Provide proper exception handling + raise Exception("Fehler") + + elif isinstance(value, str): + self.set_features = [int(i) for i in value.split(",")] + + else: + raise Exception("Fehler") class CutTimeStamp: @@ -143,7 +154,14 @@ class LearnblockMinimum: return self.learnblock_minimum def __set__(self, instance, value): - self.learnblock_minimum = value + if isinstance(value, int): + self.learnblock_minimum = value + + elif isinstance(value, str): + try: + self.learnblock_minimu = int(value) + except Exception as error: + print(error) class MaxCategories: @@ -154,7 +172,14 @@ class MaxCategories: return self.max_categories def __set__(self, instance, value): - self.max_categories = value + if isinstance(value, int): + self.max_categories = value + + elif isinstance(value, str): + try: + self.max_categories = int(value) + except Exception as error: + print(error) class SigmaZetaCutoff: @@ -165,7 +190,13 @@ class SigmaZetaCutoff: return self.sigma_zeta_cutoff def __set__(self, instance, value): - self.sigma_zeta_cutoff = value + if isinstance(value, float): + self.sigma_zeta_cutoff = value + elif isinstance(value, str): + try: + self.sigma_zeta_cutoff = float(value) + except Exception as error: + print(error) class MinCategorySize: @@ -176,7 +207,14 @@ class MinCategorySize: return self.min_category_size def __set__(self, instance, value): - self.min_category_size = value + if isinstance(value, int): + self.min_category_size = value + + elif isinstance(value, str): + try: + self.min_category_size = int(value) + except Exception as error: + print(error) class MaxModelTargets: diff --git a/cml/shared/settings.py b/cml/shared/settings.py index bad5ac4a51bc7a2db89f479f32d7bb3f1b0b78ab..3b72d416bc6522a40fc2121d205863d80e81cae1 100644 --- a/cml/shared/settings.py +++ b/cml/shared/settings.py @@ -78,6 +78,14 @@ class BlockProcessingSettings: sigma_zeta_cutoff: float = SigmaZetaCutoff() +@dataclass +class ConstructionSettings: + max_categories: int = MaxCategories() + min_category_size: int = MinCategorySize() + max_model_targets: int = MaxModelTargets() + max_target_error: float = MaxTargetError() + + @dataclass class DeconstructionSettings: pass @@ -101,6 +109,11 @@ def specific_settings_factory(settings_type: str): Settings.STACK_ITERATIONS, Settings.LEARN_BLOCK_MINIMUM, Settings.SIGMA_ZETA_CUTOFF)]), + "construction": starmap( + ConstructionSettings, [(Settings.MAX_CATEGORIES, + Settings.MIN_CATEGORY_SIZE, + Settings.MAX_MODEL_TARGETS, + Settings.MAX_TARGET_ERROR)]), "deconstruction": starmap( DeconstructionSettings, [()] ) @@ -116,7 +129,7 @@ def read_settings(path: str): configure_main_settings_class(config) except AttributeError as e: # TODO (dmt): Implement proper error handling. - pass + raise Exception("Fehler") def configure_main_settings_class(config): @@ -140,3 +153,9 @@ def configure_main_settings_class(config): Settings.STACK_ITERATIONS = block_processing["stack_iterations"] Settings.LEARN_BLOCK_MINIMUM = block_processing["learn_block_minimum"] Settings.SIGMA_ZETA_CUTOFF = block_processing["sigma_zeta_cutoff"] + + construction = config["CONSTRUCTION"] + Settings.MAX_TARGET_ERROR = construction["max_target_error"] + Settings.MAX_MODEL_TARGETS = construction["max_model_targets"] + Settings.MAX_CATEGORIES = construction["max_categories"] + Settings.MIN_CATEGORY_SIZE = construction["min_category_size"] diff --git a/cml/static/settings.ini b/cml/static/settings.ini index c5c42cdea110f2693280219d23cfc978e5033671..a4e8fcef3e466a867643d145a141b5cfee481d96 100644 --- a/cml/static/settings.ini +++ b/cml/static/settings.ini @@ -17,3 +17,9 @@ max_blocks = 100 stack_iterations = 100 learn_block_minimum = 1 sigma_zeta_cutoff = 0.8 + +[CONSTRUCTION] +max_categories = 10 +min_category_size = 10 +max_model_targets = 10 +max_target_error = 0.2