Source code for pybop.simulators.base_simulator

from copy import copy

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


[docs] class BaseSimulator: """ Base simulator. """ def __init__(self, parameters: Parameters | None = None): if parameters is None: parameters = Parameters() # Check if parameters is a list of pybop.Parameter objects elif isinstance(parameters, list): if all(isinstance(param, Parameter) for param in parameters): parameters = Parameters(*parameters) else: raise TypeError( "All elements in the list must be pybop.Parameter objects." ) # Check if parameters is a single pybop.Parameter object elif isinstance(parameters, Parameter): parameters = Parameters(parameters) # Check if parameters is already a pybop.Parameters object elif not isinstance(parameters, Parameters): raise TypeError( "The input parameters must be a pybop.Parameter, a list of pybop.Parameter objects, or a pybop.Parameters object." )
[docs] self.parameters = 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.batch_solve( inputs=[inputs], calculate_sensitivities=calculate_sensitivities )[0] return self.batch_solve( inputs=inputs, calculate_sensitivities=calculate_sensitivities )
[docs] def batch_solve( 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
[docs] def has_sensitivities(self): return False
[docs] def copy(self): """Return a copy of the simulator.""" return copy(self)