Compute parameter with temporary value

This commit is contained in:
Benoît Sierro
2023-08-03 10:46:47 +02:00
parent 9e1394d6f3
commit 18839d4528

View File

@@ -484,16 +484,18 @@ class Parameters:
param["version"] = __version__ param["version"] = __version__
return param return param
def compute(self, p_name: str, *other_p_names: str) -> Any | tuple[Any]: def compute(self, p_name: str, *other_p_names: str, **with_values: Any) -> Any | tuple[Any]:
""" """
compute a single or a set of value compute a single or a set of value
Parameters Parameters
---------- ----------
p_name : str p_name : str, positional only
parameter to compute parameter to compute0
other_p_names : str other_p_names : str, positional only
other parameters to compute other parameters to compute
with_values : Any, keyword only
compute the desired parameters as if self is updated with `with_values`.
Returns Returns
------- -------
@@ -501,8 +503,18 @@ class Parameters:
returns the computed `p_name` directly returns the computed `p_name` directly
else else
returns a tuple of corresponding values to (p_name, other_p_names[0], ...) returns a tuple of corresponding values to (p_name, other_p_names[0], ...)
Examples
--------
>>> params = Parameters(width=5e-10, shape="gaussian", gamma=1, beta2=5e-20)
>>> base_power = params.compute("peak_power", soliton_num=2)
>>> print(base_power)
>>> print(params.soliton_num)
1.1090354888959124
None
""" """
evaluator = self.get_evaluator() evaluator = self.get_evaluator()
evaluator.set(**with_values)
first = evaluator.compute(p_name) first = evaluator.compute(p_name)
if other_p_names: if other_p_names:
return (first, *(evaluator.compute(p) for p in other_p_names)) return (first, *(evaluator.compute(p) for p in other_p_names))