Source code for pybop.costs.evaluation
import numpy as np
[docs]
class Evaluation:
"""
A class to store cost evaluations, inspired by pybamm.Solution.
"""
def __init__(
self,
values: np.ndarray = None,
sensitivities: dict[str, np.ndarray] | None = None,
):
self.values = np.atleast_1d(values)
self.sensitivities = sensitivities
[docs]
def preallocate(self, inputs, calculate_sensitivities: bool = None):
self.all_inputs = inputs
n_inputs = len(inputs)
self.values = np.empty(n_inputs)
if calculate_sensitivities:
parameter_names = inputs[0].keys()
self.sensitivities = {key: np.empty(n_inputs) for key in parameter_names}
else:
self.sensitivities = None
[docs]
def insert_result(
self, i: int, value: float, sensitivities: dict[str, np.ndarray] | None = None
):
self.values[i] = value
if sensitivities is not None:
for key, value in sensitivities.items():
self.sensitivities[key][i] = value
[docs]
def get_values(self) -> np.ndarray | tuple[np.ndarray, dict[str, np.ndarray]]:
if self.sensitivities is None:
return self.values
return self.values, self.sensitivities
[docs]
def __len__(self):
return len(self.values)