Source code for CADETProcess.parameter_space.dependencies

"""Parameter dependency declarations for ParameterSpace.

A ``ParameterDependency`` makes one parameter a deterministic function of
one or more others.  The space resolves dependent parameters in topological
order before writing values into evaluation objects.
"""

from __future__ import annotations

from collections.abc import Callable

from CADETProcess.parameter_space.parameters import ParameterBase

__all__ = ["ParameterDependency"]


[docs] class ParameterDependency: """Declare that one parameter depends on others via a transform. The optimizer sees only independent parameters; ``ParameterSpace.set_values`` resolves all dependent parameters before writing. Parameters ---------- dependent_parameter : ParameterBase The parameter whose value is computed from others. independent_parameters : tuple[ParameterBase, ...] Parameters whose values are passed to *transform*, in order. transform : Callable Called as ``transform(*independent_values)``; must return the value for *dependent_parameter*. """ def __init__( self, dependent_parameter: ParameterBase, independent_parameters: list[ParameterBase], transform: Callable, ) -> None: self.dependent_parameter = dependent_parameter self.independent_parameters = tuple(independent_parameters) self.transform = transform def __repr__(self) -> str: """Return a readable representation.""" inputs = [p.name for p in self.independent_parameters] return ( f"ParameterDependency(" f"dependent={self.dependent_parameter.name!r}, " f"inputs={inputs!r})" )