parameters must now be compiled
This commit is contained in:
@@ -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 = {}
|
||||
|
||||
Reference in New Issue
Block a user