Source code for kliff.transforms.parameter_transforms

from typing import TYPE_CHECKING, Dict, List, Union

import numpy as np

if TYPE_CHECKING:
    from kliff.models.parameter import Parameter


[docs] class ParameterTransform: """ Abstract class to transform parameters and inverse transform it back. Subclass can implement - transform - inverse """ def __init__(self, name: str): self.name = name
[docs] def transform( self, model_param: Union["Parameter", np.ndarray] ) -> Union["Parameter", np.ndarray]: raise NotImplementedError
[docs] def inverse_transform( self, model_param: Union["Parameter", np.ndarray] ) -> Union["Parameter", np.ndarray]: raise NotImplementedError
def __call__( self, model_param: Union["Parameter", np.ndarray] ) -> Union["Parameter", np.ndarray]: return self.transform(model_param)
[docs] class LogParameterTransform(ParameterTransform): """ Transform parameters to a log space and transform it back. Args: param_names: names of the parameters to do the transformation; can be a subset of all the parameters. """ def __init__(self, base: float = np.e): super().__init__("log") self.base = base
[docs] def transform( self, model_params: Union["Parameter", np.ndarray] ) -> Union["Parameter", np.ndarray]: return np.log(model_params) / np.log(self.base)
[docs] def inverse_transform( self, model_params: Union["Parameter", np.ndarray] ) -> Union["Parameter", np.ndarray]: return self.base**model_params
def __call__( self, model_params: Union["Parameter", np.ndarray] ) -> Union["Parameter", np.ndarray]: return self.transform(model_params)