Parameter Transformations#
- class BaseParameterTransformation(*args: Any, **kwargs: Any)[source]#
Bases:
ModuleAbstract interface for parameter transformations.
Subclasses provide
unwrap/wrapimplementations that translate between constrained and unconstrained representations of parameters.- abstractmethod unwrap(parameter: BaseParameter[V]) BaseParameter[V][source]#
Transforms a parameter from constrained to unconstrained space.
- Parameters:
parameter – Parameter to transform.
- Returns:
Transformed parameter instance.
- Return type:
- abstractmethod wrap(parameter: BaseParameter[V]) BaseParameter[V][source]#
Transforms a parameter from unconstrained space back to its original domain.
- Parameters:
parameter – Parameter to transform.
- Returns:
Parameter in its original space.
- Return type:
- class MinuitTransform(*args: Any, **kwargs: Any)[source]#
Bases:
BaseParameterTransformationImplements MINUIT-style transformations for bounded parameters.
Both lower and upper bounds must be finite for the transformation to be well-defined.
References
MINUIT User’s Guide, Section 1.2.1
The transformation for parameters with limits.Examples
>>> import evermore as evm >>> from evermore.parameters import transform as tr >>> minuit = tr.MinuitTransform() >>> params = { ... "a": evm.Parameter(2.0, lower=-0.1, upper=2.2, transform=minuit), ... "b": evm.Parameter(0.1, lower=0.0, upper=1.1, transform=minuit), ... } >>> unconstrained = tr.unwrap(params) >>> restored = tr.wrap(unconstrained) >>> restored["a"].value == params["a"].value Array(True, dtype=bool)
- unwrap(parameter: BaseParameter[V]) BaseParameter[V][source]#
Transforms a parameter from constrained to unconstrained space.
- Parameters:
parameter – Parameter to transform.
- Returns:
Transformed parameter instance.
- Return type:
- wrap(parameter: BaseParameter[V]) BaseParameter[V][source]#
Transforms a parameter from unconstrained space back to its original domain.
- Parameters:
parameter – Parameter to transform.
- Returns:
Parameter in its original space.
- Return type:
- class SoftPlusTransform(*args: Any, **kwargs: Any)[source]#
Bases:
BaseParameterTransformationEnsures parameters remain positive by using the softplus bijection.
This transformation does not require explicit bounds;
unwrapmaps to the unconstrained real line andwrapmaps back to the positive reals.Examples
>>> import evermore as evm >>> from evermore.parameters import transform as tr >>> positive = tr.SoftPlusTransform() >>> params = { ... "a": evm.Parameter(2.0, transform=positive), ... "b": evm.Parameter(0.1, transform=positive), ... } >>> unconstrained = tr.unwrap(params) >>> restored = tr.wrap(unconstrained) >>> restored["b"].value Array(0.1, dtype=float32)
- unwrap(parameter: BaseParameter[V]) BaseParameter[V][source]#
Applies the inverse softplus transformation after validating the value.
- wrap(parameter: BaseParameter[V]) BaseParameter[V][source]#
Transforms a parameter from unconstrained space back to its original domain.
- Parameters:
parameter – Parameter to transform.
- Returns:
Parameter in its original space.
- Return type:
- unwrap(params: PyTree[evermore.parameters.parameter.BaseParameter]) PyTree[evermore.parameters.parameter.BaseParameter][source]#
Applies registered transformations to move parameters into unconstrained space.
- Parameters:
params – PyTree that may contain parameters with attached transformations.
- Returns:
PyTree where each parameter has been transformed via
unwrap.
- wrap(params: PyTree[evermore.parameters.parameter.BaseParameter]) PyTree[evermore.parameters.parameter.BaseParameter][source]#
Applies registered transformations to move parameters back to constrained space.
- Parameters:
params – PyTree that may contain parameters with attached transformations.
- Returns:
PyTree where each parameter has been transformed via
wrap.