Source code for swiftemulator.design.transform
"""
Transformer from an ND array to a model specification object.
"""
from swiftemulator.backend.model_parameters import ModelParameters
from swiftemulator.backend.model_specification import ModelSpecification
import numpy as np
from typing import Optional
[docs]def transform_to_model_spec(
input_array: np.ndarray,
model_specification: ModelSpecification,
prefix_unique_id: Optional[str] = None,
) -> ModelParameters:
"""
Transforms the input nd array (which is of shape n models
by n parameters) to a model parameters object, by re-scaling the
parameters according to the specification.
Parameters
----------
input_array: np.ndarray
Input array, of shape (number of samples, number of parameters).
model_specification: ModelSpecification
Model specification used to rescale the array.
prefix_unique_id: str, optional
An optional prefix for the newly generated unique IDs.
Defaults to no prefix.
Returns
-------
model_parameters: ModelParameters
A model values container with the re-scaled parameters and
associated metadata.
"""
transform = lambda i, l: float((i * (l[1] - l[0])) + l[0])
prefix = prefix_unique_id if prefix_unique_id is not None else ""
number_of_samples = len(input_array)
model_parameters = {
f"{prefix}{key}": {
par: transform(input_array[key][i], model_specification.parameter_limits[i])
for i, par in enumerate(model_specification.parameter_names)
}
for key in range(number_of_samples)
}
return ModelParameters(model_parameters=model_parameters)