Source code for pybop.simulators.base_simulator

from copy import copy

from pybop.parameters.parameter import Inputs, Parameter, Parameters
from pybop.simulators.failed_solution import FailedSolution
from pybop.simulators.solution import Solution


[docs] class BaseSimulator: """ Base simulator. """ def __init__(self, parameters: Parameters | dict | None = None): if parameters is None: parameters = Parameters() elif not isinstance(parameters, Parameters): try: parameters = self.get_parameters_from_dict(parameters) except Exception: raise TypeError( "Parameters must be a dictionary of pybop.Parameter objects " "or a pybop.Parameters object." ) from None self.parameters = parameters
[docs] def get_parameters_from_dict(self, parameter_values: dict): """Extract any pybop.Parameter objects and replace with the "[input]" string.""" parameters = Parameters() for name, param in parameter_values.items(): if isinstance(param, Parameter): parameters.add(name, param) parameter_values.update({name: "[input]"}) return parameters
[docs] def set_output_variables(self, target: list[str]): return NotImplementedError
[docs] def solve( self, inputs: "Inputs | list[Inputs] | None" = None, calculate_sensitivities: bool = False, ) -> Solution | list[Solution]: """ Returns the output of a simulation for one or more sets of inputs as a dictionary, along with the sensitivities of the output with respect to the input parameters if calculate_sensitivities=True. """ if not isinstance(inputs, list): return self.solve_batch( inputs=[inputs], calculate_sensitivities=calculate_sensitivities )[0] return self.solve_batch( inputs=inputs, calculate_sensitivities=calculate_sensitivities )
[docs] def solve_batch( self, inputs: "list[Inputs]", calculate_sensitivities: bool = False, ) -> list[Solution | FailedSolution]: """ Run the simulation for each set of inputs and return dict-like simulation results and (optionally) the sensitivities with respect to each input parameter. Parameters ---------- inputs : list[Inputs] A list of input parameters. calculate_sensitivities : bool Whether to also return the sensitivities (default: False). Returns ------- list[Solution] A list of len(inputs) containing the simulation result(s) and (optionally) the sensitivities with respect to each input parameter. """ return NotImplementedError
@property def has_sensitivities(self): return False
[docs] def copy(self): """Return a copy of the simulator.""" return copy(self)