parameters must now be compiled

This commit is contained in:
Benoît Sierro
2023-07-26 15:01:08 +02:00
parent 7edadb45d9
commit d72409f339

View File

@@ -450,6 +450,13 @@ class Parameters:
setattr(self, k, v)
self.__post_init__()
def __setattr__(self, k, v):
if self._frozen:
raise AttributeError(
f"cannot set attribute to frozen {self.__class__.__name__} instance"
)
object.__setattr__(self, k, v)
def get_evaluator(self):
evaluator = Evaluator.default(self.full_field)
evaluator.set(self._param_dico.copy())
@@ -462,7 +469,15 @@ class Parameters:
param["version"] = __version__
return param
def compile(self, exhaustive=False):
def compute(self, p_name: str, *other_p_names: str) -> Any | tuple[Any]:
evaluator = self.get_evaluator()
first = evaluator.compute(p_name)
if other_p_names:
return (first, *(evaluator.compute(p) for p in other_p_names))
else:
return first
def compile(self, exhaustive=False) -> Parameters:
to_compute = MANDATORY_PARAMETERS
evaluator = self.get_evaluator()
for k in to_compute:
@@ -474,7 +489,11 @@ class Parameters:
evaluator.compute(p)
except Exception:
pass
return self.__class__(**{k: v for k, v in evaluator.params.items() if k in self._p_names})
computed = self.__class__(
**{k: v for k, v in evaluator.params.items() if k in self._p_names}
)
computed._frozen = True
return computed
def pretty_str(self, params: Iterable[str] = None, exclude=None) -> str:
"""return a pretty formatted string describing the parameters"""
@@ -522,6 +541,7 @@ class Parameters:
"effective_area_arr",
"nonlinear_op",
"linear_op",
"c_to_a_factor",
}
types = (np.ndarray, float, int, str, list, tuple, dict, Path)
out = {}