From eae75a5fd6f022de94a488b4207d2c60524c14d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Wed, 16 Aug 2023 12:05:18 +0200 Subject: [PATCH] change: new display infos --- src/scgenerator/evaluator.py | 2 +- src/scgenerator/parameter.py | 27 ++++++++++++++++----------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/scgenerator/evaluator.py b/src/scgenerator/evaluator.py index 28eaa09..6ce3380 100644 --- a/src/scgenerator/evaluator.py +++ b/src/scgenerator/evaluator.py @@ -283,7 +283,7 @@ class Evaluator: rules_stack: list[Rule], errors: EvaluatorErrorTree, ) -> Any: - if target in param_chain_map: + if target in param_chain_map and param_chain_map[target].value is not None: return param_chain_map[target].value if target not in self.rules or len(self.rules[target]) == 0: raise NoValidRuleError(target) diff --git a/src/scgenerator/parameter.py b/src/scgenerator/parameter.py index 321f50c..da60eed 100644 --- a/src/scgenerator/parameter.py +++ b/src/scgenerator/parameter.py @@ -21,18 +21,22 @@ T = TypeVar("T") DISPLAY_INFO = {} +def _format_display_info(name: str, value) -> str: + try: + return DISPLAY_INFO[name](value) + except KeyError: + return format(value, ".9g") + + def format_value(name: str, value) -> str: if value is True or value is False: return str(value) elif isinstance(value, (float, int)): - try: - return DISPLAY_INFO[name](value) - except KeyError: - return format(value, ".9g") + return _format_display_info(name, value) elif isinstance(value, np.ndarray): return np.array2string(value) elif isinstance(value, (list, tuple)): - return "-".join([str(v) for v in value]) + return ", ".join([_format_display_info(name, v) for v in value]) elif isinstance(value, str): p = Path(value) if p.exists(): @@ -388,12 +392,13 @@ class Parameters: repeat: int = Parameter(positive(int), default=1) t_num: int = Parameter(positive(int), default=4096) z_num: int = Parameter(positive(int), default=128) - time_window: float = Parameter(positive(float, int)) - dt: float = Parameter(in_range_excl(0, 10e-15)) + time_window: float = Parameter(positive(float, int), display_info=(1e12, "ps")) + dt: float = Parameter(in_range_excl(0, 10e-15), display_info=(1e15, "fs")) tolerated_error: float = Parameter(in_range_excl(1e-15, 1e-3), default=1e-11) step_size: float = Parameter(non_negative(float, int), default=0) wavelength_window: tuple[float, float] = Parameter( - validator_and(float_pair, validator_list(in_range_incl(100e-9, 10000e-9))) + validator_and(float_pair, validator_list(in_range_incl(100e-9, 10000e-9))), + display_info=(1e9, "nm"), ) interpolation_degree: int = Parameter(validator_and(type_checker(int), in_range_incl(2, 18))) prev_sim_dir: str = Parameter(string) @@ -421,9 +426,9 @@ class Parameters: w_c: np.ndarray = Parameter(type_checker(np.ndarray)) w0: float = Parameter(positive(float)) t: np.ndarray = Parameter(type_checker(np.ndarray)) - dispersion_length: float = Parameter(non_negative(float, int)) - nonlinear_length: float = Parameter(non_negative(float, int)) - soliton_length: float = Parameter(non_negative(float, int)) + dispersion_length: float = Parameter(non_negative(float, int), display_info=(1e2, "cm")) + nonlinear_length: float = Parameter(non_negative(float, int), display_info=(1e2, "cm")) + soliton_length: float = Parameter(non_negative(float, int), display_info=(1e2, "cm")) adapt_step_size: bool = Parameter(boolean) hr_w: np.ndarray = Parameter(type_checker(np.ndarray)) z_targets: np.ndarray = Parameter(type_checker(np.ndarray))