From 9f314b376a8b42d9b200bc1c733ffd9b9d875d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Fri, 13 May 2022 12:06:06 +0200 Subject: [PATCH] added Rule to EvalStats. slots in CurrentState --- src/scgenerator/evaluator.py | 8 +++++--- src/scgenerator/operators.py | 23 ++++++++++++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/scgenerator/evaluator.py b/src/scgenerator/evaluator.py index 8ccdcc7..810f0fa 100644 --- a/src/scgenerator/evaluator.py +++ b/src/scgenerator/evaluator.py @@ -98,6 +98,7 @@ class Rule: @dataclass class EvalStat: priority: float = np.inf + rule: Rule = None class Evaluator: @@ -238,7 +239,7 @@ class Evaluator: + success_str + f"using {rule.func.__name__} from {rule.func.__module__}" ) - self.set_value(param_name, returned_value, param_priority) + self.set_value(param_name, returned_value, param_priority, rule) if param_name == target: value = returned_value break @@ -262,7 +263,7 @@ class Evaluator: else: value = default self.logger.info(prefix + f"using default value of {value} for {target}") - self.set_value(target, value, 0) + self.set_value(target, value, 0, None) last_target = self.__curent_lookup.pop() assert target == last_target self.__failed_rules[target] = [] @@ -275,9 +276,10 @@ class Evaluator: def __getitem__(self, key: str) -> Any: return self.params[key] - def set_value(self, key: str, value: Any, priority: int): + def set_value(self, key: str, value: Any, priority: int, rule: Rule): self.params[key] = value self.eval_stats[key].priority = priority + self.eval_stats[key].rule = rule def validate_condition(self, rule: Rule) -> bool: try: diff --git a/src/scgenerator/operators.py b/src/scgenerator/operators.py index c8506aa..d91b53b 100644 --- a/src/scgenerator/operators.py +++ b/src/scgenerator/operators.py @@ -24,10 +24,23 @@ class CurrentState: step: int C_to_A_factor: np.ndarray converter: Callable[[np.ndarray], np.ndarray] - __spectrum: np.ndarray = None - __spec2: np.ndarray = None - __field: np.ndarray = None - __field2: np.ndarray = None + __spectrum: np.ndarray + __spec2: np.ndarray + __field: np.ndarray + __field2: np.ndarray + + __slots__ = [ + "length", + "z", + "current_step_size", + "step", + "C_to_A_factor", + "converter", + "_CurrentState__spectrum", + "_CurrentState__spec2", + "_CurrentState__field", + "_CurrentState__field2", + ] def __init__( self, @@ -45,7 +58,7 @@ class CurrentState: self.step = step self.C_to_A_factor = C_to_A_factor self.converter = converter - self.__spectrum = spectrum + self.spectrum = spectrum @property def z_ratio(self) -> float: