From 30417018f93c1d8f083c2f7205b21c5445b29b39 Mon Sep 17 00:00:00 2001 From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com> Date: Fri, 28 Nov 2025 17:16:58 +0000 Subject: [PATCH 01/37] More updates from restructure (#844) * Update data readme * Add axis labels * Update descriptions * Add cost names * Remove multiprocessing import * Update applications --- examples/data/README.md | 2 +- .../battery_parameterisation/gitt_fitting.py | 1 + .../stoichiometry_fitting.py | 2 + pybop/__init__.py | 22 +-- pybop/_utils.py | 2 - pybop/applications/base_method.py | 142 ++++++++++----- pybop/applications/gitt_methods.py | 164 +++++++++--------- pybop/applications/ocp_methods.py | 119 ++++++------- pybop/costs/base_cost.py | 5 + pybop/costs/error_measures.py | 13 +- tests/unit/test_import.py | 19 -- 11 files changed, 248 insertions(+), 243 deletions(-) diff --git a/examples/data/README.md b/examples/data/README.md index 8f65d70c2..4d46dbbec 100644 --- a/examples/data/README.md +++ b/examples/data/README.md @@ -1,2 +1,2 @@ ## Data directory -This directory contains both the experimental and synthetic data used in the examples. +This directory contains the experimental data used in the examples. diff --git a/examples/scripts/battery_parameterisation/gitt_fitting.py b/examples/scripts/battery_parameterisation/gitt_fitting.py index eed45cb53..405b4ffc1 100644 --- a/examples/scripts/battery_parameterisation/gitt_fitting.py +++ b/examples/scripts/battery_parameterisation/gitt_fitting.py @@ -72,6 +72,7 @@ # Run the identified model identified_model = pybop.lithium_ion.SPDiffusion(build=True) +grouped_parameter_values.update(gitt_fit.best_inputs) grouped_parameter_values["Current function [A]"] = pybamm.Interpolant( dataset["Time [s]"], dataset["Current function [A]"], pybamm.t ) diff --git a/examples/scripts/battery_parameterisation/stoichiometry_fitting.py b/examples/scripts/battery_parameterisation/stoichiometry_fitting.py index e73ddbfb5..a98277730 100644 --- a/examples/scripts/battery_parameterisation/stoichiometry_fitting.py +++ b/examples/scripts/battery_parameterisation/stoichiometry_fitting.py @@ -36,4 +36,6 @@ def noise(sigma): fitted_dataset["Voltage [V]"], ], trace_names=["Ground truth", "Data vs. stoichiometry"], + xaxis_title="Stoichiometry", + yaxis_title="Voltage / V", ) diff --git a/pybop/__init__.py b/pybop/__init__.py index b815915c8..a56b2e996 100644 --- a/pybop/__init__.py +++ b/pybop/__init__.py @@ -8,24 +8,6 @@ import sys from os import path -# -# Multiprocessing -# -try: - import multiprocessing as mp - if sys.platform == "win32": - mp.set_start_method("spawn") - else: - mp.set_start_method("fork") -except Exception as e: # pragma: no cover - error_message = ( - "Multiprocessing context could not be set. " - "Continuing import without setting context.\n" - f"Error: {e}" - ) # pragma: no cover - print(error_message) # pragma: no cover - pass # pragma: no cover - # # Version info # @@ -118,7 +100,7 @@ from ._evaluation import PopulationEvaluator, ScalarEvaluator, SequentialEvaluator # -# Optimisation logging +# Optimisation logging and result # from ._logging import Logger from ._result import OptimisationResult @@ -182,7 +164,7 @@ ) # -# Classification classes +# Analysis # from .analysis.classification import classify_using_hessian diff --git a/pybop/_utils.py b/pybop/_utils.py index 8932c5722..5b754b547 100644 --- a/pybop/_utils.py +++ b/pybop/_utils.py @@ -17,7 +17,6 @@ def is_numeric(x): @dataclass(frozen=True) class FailedVariable: """ - Check if a variable is numeric. Container for a failed PyBaMM variable that returns np.inf. Args: @@ -41,7 +40,6 @@ def __post_init__(self) -> None: class FailedSolution: """ - return isinstance(x, int | float | np.number) Container for a failed PyBaMM solution that returns [np.inf] for all processed variables. This class mimics the interface of a successful PyBaMM solution but returns diff --git a/pybop/applications/base_method.py b/pybop/applications/base_method.py index 7b9e68ef2..4b8c1c5ab 100644 --- a/pybop/applications/base_method.py +++ b/pybop/applications/base_method.py @@ -13,41 +13,88 @@ class BaseApplication: A base class for PyBOP's application methods. """ - def check_monotonicity(self, voltage): - if not ( - all(x < y for x, y in zip(voltage, voltage[1:], strict=False)) - or all(x > y for x, y in zip(voltage, voltage[1:], strict=False)) - ): - warnings.warn("OCV is not strictly monotonic.", stacklevel=1) + def check_monotonicity(self, voltage: np.ndarray) -> None: + """ + Check if voltage data is monotonic and warn if not. + + Parameters + ---------- + voltage : np.ndarray + Voltage array to check for monotonicity. + """ + is_increasing = np.all(np.diff(voltage) > 0) + is_decreasing = np.all(np.diff(voltage) < 0) + + if not (is_increasing or is_decreasing): + warnings.warn("OCV is not strictly monotonic.", stacklevel=2) class Interpolant: """ A class that returns a pybamm.Interpolant to pybamm models and otherwise a numeric interpolant. + + Parameters + ---------- + x : array_like + Input coordinates. + y : array_like + Output values corresponding to x. + name : str, optional + Name for the interpolant when used in PyBaMM. + bounds_error : bool, optional + If True, raise error when interpolating outside bounds. + fill_value : str or float, optional + Value to use for out-of-bounds interpolation. + axis : int, optional + Axis along which to interpolate. """ def __init__( - self, x, y, name=None, bounds_error=False, fill_value="extrapolate", axis=0 + self, + x: np.ndarray, + y: np.ndarray, + name: str | None = None, + bounds_error: bool = False, + fill_value: str | float = "extrapolate", + axis: int = 0, ): self.x = np.asarray(x) self.y = np.asarray(y) self.name = name - self.interp1d = interpolate.interp1d( - x, - y, + self._interp_func = self._create_interpolant(bounds_error, fill_value, axis) + + def _create_interpolant( + self, bounds_error: bool, fill_value: str | float, axis: int + ): + """Create the scipy interpolation function.""" + return interpolate.interp1d( + self.x, + self.y, bounds_error=bounds_error, fill_value=fill_value, axis=axis, ) - def __call__(self, x): + def __call__(self, x: float | np.ndarray): + """ + Evaluate the interpolant at given points. + + Parameters + ---------- + x : float or array_like + Points at which to evaluate the interpolant. + + Returns + ------- + float, array_like, or PybammInterpolant + Interpolated values or PyBaMM interpolant object. + """ try: - # Try to evaluate the interpolant numerically, this will return an - # error if x is a PyBaMM object - return self.interp1d(x) - except (Exception, SystemExit, KeyboardInterrupt): - # Evaluate the interpolant as a PyBaMM function for use in a model + # Try numeric evaluation first + return self._interp_func(x) + except Exception: + # Fall back to PyBaMM interpolant for symbolic evaluation return PybammInterpolant(self.x, self.y, x, name=self.name) @@ -62,56 +109,59 @@ class InverseOCV: The open-circuit voltage as a function of stoichiometry. optimiser : pybop.BaseOptimiser, optional The optimisation algorithm to use (default: pybop.SciPyMinimize). - verbose : bool, optional - If True, progress messages are printed (default: False). + optimiser_options : pybop.OptimiserOptions, optional + Options for the optimiser. """ def __init__( self, ocv_function: Callable, - optimiser: pybop.BaseOptimiser | None = pybop.SciPyMinimize, - verbose: bool = False, + optimiser: pybop.BaseOptimiser | None = None, + optimiser_options: pybop.OptimiserOptions | None = None, ): - self.ocv_function = ocv_function - self.optimiser = optimiser - self.verbose = verbose - - def __call__(self, ocv_value: float): - """ - Estimate and return the stoichiometry. - - Parameters - ---------- - ocv_value : float - The open-circuit voltage value [V] for which to estimate the stoichiometry. + self.optimiser = optimiser or pybop.SciPyMinimize + self.optimiser_options = optimiser_options or self.optimiser.default_options() - Returns - ------- - float - The stoichiometry corresponding to the open-circuit voltage value. - """ - ocv_function = self.ocv_function - - self.parameters = pybop.Parameters( + parameters = pybop.Parameters( {"Root": pybop.Parameter(initial_value=0.5, bounds=[0, 1])} ) # Set up a root-finding cost function class OCVRoot(pybop.BaseSimulator): + def __init__(self, ocv_value: float): + super().__init__(parameters=parameters) + self.ocv_value = ocv_value + def batch_solve(self, inputs, calculate_sensitivities: bool = False): solutions = [] for x in inputs: - diff = np.abs(ocv_function(x["Root"]) - ocv_value) + diff = np.abs(ocv_function(x["Root"]) - self.ocv_value) sol = pybop.Solution() sol.set_solution_variable("Difference", data=np.asarray([diff])) solutions.append(sol) return solutions + self.ocv_root = OCVRoot + # Minimise to find the stoichiometry - cost = pybop.DesignCost(target="Difference") - cost.minimising = True - problem = pybop.Problem(OCVRoot(self.parameters), cost) - options = pybop.SciPyMinimizeOptions(verbose=self.verbose) - optim = self.optimiser(problem=problem, options=options) + self.cost = pybop.DesignCost(target="Difference") + self.cost.minimising = True + + def __call__(self, ocv_value: float) -> float: + """ + Estimate and return the stoichiometry. + + Parameters + ---------- + ocv_value : float + The open-circuit voltage value [V] for which to estimate the stoichiometry. + + Returns + ------- + float + The stoichiometry corresponding to the open-circuit voltage value. + """ + problem = pybop.Problem(self.ocv_root(ocv_value), self.cost) + optim = self.optimiser(problem, options=self.optimiser_options) result = optim.run() return result.best_inputs["Root"] diff --git a/pybop/applications/gitt_methods.py b/pybop/applications/gitt_methods.py index ea240741d..06d5f7ac6 100644 --- a/pybop/applications/gitt_methods.py +++ b/pybop/applications/gitt_methods.py @@ -1,5 +1,3 @@ -from copy import copy - import numpy as np from pybamm import ParameterValues @@ -12,69 +10,66 @@ class GITTPulseFit(BaseApplication): """ Fit the diffusion timescale of one pulse from a galvanostatic intermittent titration technique (GITT) measurement using the diffusion model for a single, - spherical particle representing the working electrode. + spherical particle representing one electrode. The cost function requires a "domain"-based weighting to fit (possibly non-uniform) data consistently across the observed time period. Parameters ---------- - gitt_pulse : pybop.Dataset - A dataset containing the "Time [s]", "Current function [A]" and "Voltage [V]" - for one pulse obtained from a GITT measurement. parameter_values : pybamm.ParameterValues A parameter set containing values for the parameters of the SPDiffusion model. cost : pybop.ErrorMeasure | pybop.LogLikelihood, optional The cost function to quantify the error (default: pybop.RootMeanSquaredError). optimiser : pybop.BaseOptimiser, optional The optimisation algorithm to use (default: pybop.SciPyMinimize). - verbose : bool, optional - If True, progress messages are printed (default: True). + optimiser_options : pybop.OptimiserOptions, optional + Options for the optimiser. """ def __init__( self, parameter_values: ParameterValues, cost: pybop.ErrorMeasure | pybop.LogLikelihood | None = None, - optimiser: pybop.BaseOptimiser | None = pybop.SciPyMinimize, - verbose: bool = True, + optimiser: pybop.BaseOptimiser | None = None, + optimiser_options: pybop.OptimiserOptions | None = None, ): - self.parameter_values = parameter_values + self.parameter_values = parameter_values.copy() self.parameters = { "Particle diffusion time scale [s]": pybop.Parameter(bounds=[0, np.inf]), "Series resistance [Ohm]": pybop.Parameter(bounds=[0, np.inf]), } - self.model = pybop.lithium_ion.SPDiffusion(build=True) self.cost = cost or pybop.RootMeanSquaredError - self.verbose = verbose - self.optimiser = optimiser - self.optim = None - self.result = None + self.optimiser = optimiser or pybop.SciPyMinimize + self.optimiser_options = optimiser_options or self.optimiser.default_options() + + # Create model + self.model = pybop.lithium_ion.SPDiffusion() + self.problem = None - def __call__(self, gitt_pulse: pybop.Dataset) -> pybop.OptimisationResult: - # Update starting point + def __call__( + self, + gitt_pulse: pybop.Dataset, + initial_parameter_values: dict[str, float] | None = None, + ) -> pybop.OptimisationResult: + # Update parameter values + parameter_values = self.parameter_values.copy() + if initial_parameter_values is not None: + parameter_values.update(initial_parameter_values) for key, param in self.parameters.items(): - param.update_initial_value(self.parameter_values[key]) - self.parameter_values.update(self.parameters) + param.update_initial_value(parameter_values[key]) + parameter_values.update(self.parameters) # Define the problem simulator = pybop.pybamm.Simulator( - self.model, - parameter_values=self.parameter_values, - protocol=gitt_pulse, + self.model, parameter_values=parameter_values, protocol=gitt_pulse ) cost = self.cost(gitt_pulse, weighting="domain") self.problem = pybop.Problem(simulator=simulator, cost=cost) + optim = self.optimiser(self.problem, options=self.optimiser_options) + result = optim.run() - # Build and run the optimisation problem - options = pybop.SciPyMinimizeOptions(verbose=self.verbose, tol=1e-8) - self.optim = self.optimiser(problem=self.problem, options=options) - self.result = self.optim.run() - self.parameter_values.update(self.problem.parameters.to_dict(self.result.x)) - - # pybop.plot.problem(problem=problem, inputs=self.result.best_inputs) - - return self.result + return result class GITTFit(BaseApplication): @@ -95,8 +90,8 @@ class GITTFit(BaseApplication): The cost function to quantify the error (default: pybop.RootMeanSquaredError). optimiser : pybop.BaseOptimiser, optional The optimisation algorithm to use (default: pybop.SciPyMinimize). - verbose : bool, optional - If True, progress messages are printed (default: False). + optimiser_options : pybop.OptimiserOptions, optional + Options for the optimiser. """ def __init__( @@ -105,20 +100,24 @@ def __init__( pulse_index: list[np.ndarray], parameter_values: ParameterValues, cost: pybop.ErrorMeasure | pybop.LogLikelihood | None = None, - optimiser: pybop.BaseOptimiser | None = pybop.SciPyMinimize, - verbose: bool = False, + optimiser: pybop.BaseOptimiser | None = None, + optimiser_options: pybop.OptimiserOptions | None = None, ): self.gitt_dataset = gitt_dataset self.pulse_index = pulse_index - self.parameter_values = parameter_values self.cost = cost or pybop.RootMeanSquaredError - self.optimiser = optimiser - self.verbose = verbose - self.gitt_pulse = pybop.GITTPulseFit( - parameter_values=self.parameter_values.copy(), + self.optimiser = optimiser or pybop.SciPyMinimize + self.optimiser_options = optimiser_options or self.optimiser.default_options() + + # Set up OCV root-finding function + self.inverse_ocp = pybop.InverseOCV(parameter_values["Electrode OCP [V]"]) + + # Initialise single pulse fitter + self.pulse_fit = GITTPulseFit( + parameter_values=parameter_values, cost=self.cost, optimiser=self.optimiser, - verbose=self.verbose, + optimiser_options=self.optimiser_options, ) def __call__(self) -> pybop.Dataset: @@ -127,53 +126,52 @@ def __call__(self) -> pybop.Dataset: stoichiometry = [] diffusion_time = [] series_resistance = [] - final_costs = [] - - inverse_ocp = pybop.InverseOCV(self.parameter_values["Electrode OCP [V]"]) + best_cost = [] + initial_parameter_values = {} for index in self.pulse_index: - # Estimate the initial stoichiometry from the initial voltage - self.gitt_pulse.parameter_values["Initial stoichiometry"] = inverse_ocp( - self.gitt_dataset["Voltage [V]"][index[0]] - ) - - # Check that initial current is zero - if self.gitt_dataset["Current function [A]"][index[0]] != 0: - raise ValueError( - "The initial current in the pulse dataset must be zero." - ) - - # Estimate the parameters for this pulse try: - gitt_result = self.gitt_pulse( - gitt_pulse=self.gitt_dataset.get_subset(index) - ) - self.pulses.append(copy(self.gitt_pulse.optim)) + # Check that initial current is zero + pulse_data = self.gitt_dataset.get_subset(index) + if pulse_data["Current function [A]"][0] != 0: + raise ValueError( + "The initial current in the pulse dataset must be zero." + ) + + # Estimate the initial stoichiometry from the initial voltage + initial_sto = self.inverse_ocp(pulse_data["Voltage [V]"][0]) + initial_parameter_values.update({"Initial stoichiometry": initial_sto}) + + # Estimate the parameters for this pulse + pulse_result = self.pulse_fit(pulse_data, initial_parameter_values) # Log the result + self.pulses.append(pulse_result) diffusion_time.append( - self.gitt_pulse.parameter_values[ - "Particle diffusion time scale [s]" - ] + pulse_result.best_inputs["Particle diffusion time scale [s]"] ) series_resistance.append( - self.gitt_pulse.parameter_values["Series resistance [Ohm]"] - ) - stoichiometry.append( - self.gitt_pulse.parameter_values["Initial stoichiometry"] + pulse_result.best_inputs["Series resistance [Ohm]"] ) - final_costs.append(gitt_result.best_cost) + stoichiometry.append(initial_sto) + best_cost.append(pulse_result.best_cost) - except (Exception, SystemExit, KeyboardInterrupt): + # Pass the optimised parameters to the next pulse + initial_parameter_values = pulse_result.best_inputs + + except (SystemExit, KeyboardInterrupt) as e: + if self.optimiser_options.verbose: + print(f"Failed to process pulse at index {index}: {e}") self.pulses.append(None) # Save parameters versus stoichiometry (ascending) + cost_name = add_spaces(self.cost.__name__) + " [V]" self.parameter_data = pybop.Dataset( { "Stoichiometry": np.asarray(stoichiometry), "Particle diffusion time scale [s]": np.asarray(diffusion_time), "Series resistance [Ohm]": np.asarray(series_resistance), - add_spaces(self.cost.__name__) + " [V]": np.asarray(final_costs), + cost_name: np.asarray(best_cost), } if len(stoichiometry) > 1 and stoichiometry[-1] > stoichiometry[0] else { @@ -182,23 +180,19 @@ def __call__(self) -> pybop.Dataset: np.asarray(diffusion_time) ), "Series resistance [Ohm]": np.flipud(np.asarray(series_resistance)), - add_spaces(self.cost.__name__) + " [V]": np.flipud( - np.asarray(final_costs) - ), + cost_name: np.flipud(np.asarray(best_cost)), }, domain="Stoichiometry", ) - # Update parameter set - self.parameter_values.update( - { - "Particle diffusion time scale [s]": np.mean( - self.parameter_data["Particle diffusion time scale [s]"], - ), - "Series resistance [Ohm]": np.mean( - self.parameter_data["Series resistance [Ohm]"], - ), - } - ) + # Compute mean values + self.best_inputs = { + "Particle diffusion time scale [s]": np.mean( + self.parameter_data["Particle diffusion time scale [s]"] + ), + "Series resistance [Ohm]": np.mean( + self.parameter_data["Series resistance [Ohm]"] + ), + } return self.parameter_data diff --git a/pybop/applications/ocp_methods.py b/pybop/applications/ocp_methods.py index d028426df..3bb19bc74 100644 --- a/pybop/applications/ocp_methods.py +++ b/pybop/applications/ocp_methods.py @@ -44,11 +44,14 @@ def __call__(self) -> pybop.Dataset: self.ocp_charge["Stoichiometry"], self.ocp_charge["Voltage [V]"] ) - if np.sign( + # Determine electrode type and stoichiometry range + is_full_cell = np.sign( self.ocp_charge["Stoichiometry"][-1] - self.ocp_charge["Stoichiometry"][0] ) == np.sign( self.ocp_charge["Voltage [V]"][-1] - self.ocp_charge["Voltage [V]"][0] - ): + ) + + if is_full_cell: # Increasing stoichiometry corresponds to increasing voltage (full cell) sto_min = np.min(self.ocp_charge["Stoichiometry"]) sto_max = np.max(self.ocp_discharge["Stoichiometry"]) @@ -64,9 +67,8 @@ def __call__(self) -> pybop.Dataset: # Generate evenly spaced data for dataset creation self.sto_evenly_spaced = np.linspace(sto_min, sto_max, self.n_sto_points) - # Define a linear transition from the charge branch at low voltage - # to the charge branch at high voltage - transition = np.linspace(0, 1, len(self.sto_evenly_spaced)) + # Generate coefficients for linear transition + transition = np.linspace(0, 1, self.n_sto_points) voltage_merge = (1 - transition) * low_sto_fit( self.sto_evenly_spaced ) + transition * high_sto_fit(self.sto_evenly_spaced) @@ -75,13 +77,12 @@ def __call__(self) -> pybop.Dataset: {"Stoichiometry": self.sto_evenly_spaced, "Voltage [V]": voltage_merge} ) self.check_monotonicity(voltage_merge) - return self.dataset class OCPAverage(BaseApplication): """ - Estimate the equlilibrium open-circuit potential (OCP) by averaging the charge + Estimate the equilibrium open-circuit potential (OCP) by averaging the charge and discharge branches, using a method loosely based on method 4(a) proposed by Lu et al. (2021) available at: https://doi.org/10.1149/1945-7111/ac11a5 @@ -102,8 +103,8 @@ class OCPAverage(BaseApplication): The cost function to quantify the error (default: pybop.RootMeanSquaredError). optimiser : pybop.BaseOptimiser, optional The optimisation algorithm to use (default: pybop.SciPyMinimize). - verbose : bool, optional - If True, progress messages are printed (default: True). + optimiser_options : pybop.OptimiserOptions, optional + Options for the optimiser. """ def __init__( @@ -113,43 +114,40 @@ def __init__( n_sto_points: int = 101, allow_stretching: bool = True, cost: pybop.ErrorMeasure | pybop.LogLikelihood | None = None, - optimiser: pybop.BaseOptimiser | None = pybop.SciPyMinimize, - verbose: bool = True, + optimiser: pybop.BaseOptimiser | None = None, + optimiser_options: pybop.OptimiserOptions | None = None, ): self.ocp_discharge = ocp_discharge self.ocp_charge = ocp_charge self.n_sto_points = n_sto_points self.allow_stretching = allow_stretching self.cost = cost or pybop.RootMeanSquaredError - self.optimiser = optimiser - self.verbose = verbose + self.optimiser = optimiser or pybop.SciPyMinimize + self.optimiser_options = optimiser_options or self.optimiser.default_options() + + # Define a function to compute the differential capacity + def differential_capacity_interpolant(stoichiometry, voltage): + return pybop.Interpolant( + stoichiometry, np.nan_to_num(np.gradient(stoichiometry, voltage)) + ) + + self.differential_capacity_interpolant = differential_capacity_interpolant def __call__(self) -> pybop.Dataset: # Use the discharge branch as the target to fit voltage_discharge = pybop.Interpolant( self.ocp_discharge["Stoichiometry"], self.ocp_discharge["Voltage [V]"] ) - differential_capacity_discharge = pybop.Interpolant( - self.ocp_discharge["Stoichiometry"], - np.nan_to_num( - np.gradient( - self.ocp_discharge["Stoichiometry"], - self.ocp_discharge["Voltage [V]"], - ) - ), + differential_capacity_discharge = self.differential_capacity_interpolant( + self.ocp_discharge["Stoichiometry"], self.ocp_discharge["Voltage [V]"] ) # Use the charge branch as the model output voltage_charge = pybop.Interpolant( self.ocp_charge["Stoichiometry"], self.ocp_charge["Voltage [V]"] ) - differential_capacity_charge = pybop.Interpolant( - self.ocp_charge["Stoichiometry"], - np.nan_to_num( - np.gradient( - self.ocp_charge["Stoichiometry"], self.ocp_charge["Voltage [V]"] - ) - ), + differential_capacity_charge = self.differential_capacity_interpolant( + self.ocp_charge["Stoichiometry"], self.ocp_charge["Voltage [V]"] ) # Generate evenly spaced data for fitting @@ -171,19 +169,10 @@ def __call__(self) -> pybop.Dataset: # Define the optimisation parameters self.parameters = pybop.Parameters( - { - "shift": pybop.Parameter( - initial_value=0.05, - ), - } + {"shift": pybop.Parameter(initial_value=0.05)} ) if self.allow_stretching: - self.parameters.add( - "stretch", - pybop.Parameter( - initial_value=1.0, - ), - ) + self.parameters.add("stretch", pybop.Parameter(initial_value=1.0)) # Create the fitting problem class OCVCurve(pybop.BaseSimulator): @@ -239,9 +228,10 @@ def batch_solve(self, inputs, calculate_sensitivities: bool = False): self.problem = pybop.Problem(simulator=OCVCurve(self.parameters), cost=cost) # Optimise the fit between the charge and discharge branches - options = pybop.SciPyMinimizeOptions(verbose=self.verbose) - self.optim = self.optimiser(problem=self.problem, options=options) - self.result = self.optim.run() + optim = self.optimiser(problem=self.problem, options=self.optimiser_options) + self.result = optim.run() + + # Extract parameter values self.stretch = ( np.sqrt(self.result.best_inputs["stretch"]) if self.allow_stretching @@ -249,11 +239,12 @@ def batch_solve(self, inputs, calculate_sensitivities: bool = False): ) self.shift = self.result.best_inputs["shift"] / (self.stretch + 1.0) - if self.verbose: + if self.optimiser_options.verbose: print( f"The stoichiometry stretch and shift values are ({self.stretch}, {self.shift})." ) + # Create transformation functions def stretch_and_shift(sto): return self.stretch * sto + self.shift @@ -269,6 +260,7 @@ def inverse_stretch_and_shift(sto): stretch_and_shift(np.max(self.ocp_discharge["Stoichiometry"])), inverse_stretch_and_shift(np.max(self.ocp_charge["Stoichiometry"])), ) + sto_range = np.linspace(sto_min, sto_max, self.n_sto_points) voltage = ( voltage_discharge(inverse_stretch_and_shift(sto_range)) @@ -279,7 +271,6 @@ def inverse_stretch_and_shift(sto): {"Stoichiometry": sto_range, "Voltage [V]": voltage} ) self.check_monotonicity(voltage) - return self.dataset @@ -299,8 +290,8 @@ class OCPCapacityToStoichiometry(BaseApplication): The cost function to quantify the error (default: pybop.RootMeanSquaredError). optimiser : pybop.BaseOptimiser, optional The optimisation algorithm to use (default: pybop.SciPyMinimize). - verbose : bool, optional - If True, progress messages are printed (default: True). + optimiser_options : pybop.OptimiserOptions, optional + Options for the optimiser. """ def __init__( @@ -308,30 +299,28 @@ def __init__( ocv_dataset: pybop.Dataset, ocv_function: Callable, cost: pybop.ErrorMeasure | pybop.LogLikelihood | None = None, - optimiser: pybop.BaseOptimiser | None = pybop.SciPyMinimize, - verbose: bool = True, + optimiser: pybop.BaseOptimiser | None = None, + optimiser_options: pybop.OptimiserOptions | None = None, ): self.ocv_dataset = ocv_dataset self.ocv_dataset.domain = "Charge capacity [A.h]" self.ocv_function = ocv_function - cost = cost or pybop.RootMeanSquaredError - self.cost = cost(self.ocv_dataset, weighting="domain") - self.optimiser = optimiser - self.verbose = verbose + self.cost = cost or pybop.RootMeanSquaredError + self.optimiser = optimiser or pybop.SciPyMinimize + self.optimiser_options = optimiser_options or self.optimiser.default_options() def __call__(self) -> pybop.Dataset: # Use the OCV dataset as the target to fit and the OCV function as the model + cost = self.cost(self.ocv_dataset, weighting="domain") # Define the optimisation parameters - self.parameters = pybop.Parameters( + capacity_range = np.max(self.ocv_dataset["Charge capacity [A.h]"]) - np.min( + self.ocv_dataset["Charge capacity [A.h]"] + ) + parameters = pybop.Parameters( { - "shift": pybop.Parameter( - initial_value=0, - ), - "stretch": pybop.Parameter( - initial_value=np.max(self.ocv_dataset["Charge capacity [A.h]"]) - - np.min(self.ocv_dataset["Charge capacity [A.h]"]), - ), + "shift": pybop.Parameter(initial_value=0), + "stretch": pybop.Parameter(initial_value=capacity_range), } ) @@ -357,16 +346,16 @@ def batch_solve(self, inputs, calculate_sensitivities: bool = False): solutions.append(sol) return solutions - problem = pybop.Problem(simulator=OCVCurve(self.parameters), cost=self.cost) + problem = pybop.Problem(simulator=OCVCurve(parameters), cost=cost) # Optimise the fit between the OCV function and the dataset - options = pybop.SciPyMinimizeOptions(verbose=self.verbose) - self.optim = self.optimiser(problem=problem, options=options) - self.result = self.optim.run() + optim = self.optimiser(problem, options=self.optimiser_options) + self.result = optim.run() + self.stretch = self.result.best_inputs["stretch"] self.shift = self.result.best_inputs["shift"] - if self.verbose: + if self.optimiser_options.verbose: print( f"The capacity stretch and shift values are ({self.stretch} A.h, {self.shift} A.h)." ) diff --git a/pybop/costs/base_cost.py b/pybop/costs/base_cost.py index a9644345d..b67a54cb1 100644 --- a/pybop/costs/base_cost.py +++ b/pybop/costs/base_cost.py @@ -1,5 +1,6 @@ import numpy as np +from pybop._utils import add_spaces from pybop.parameters.parameter import Inputs, Parameters from pybop.simulators.solution import Solution @@ -106,6 +107,10 @@ def failure(self, calculate_sensitivities: bool = True): else: return np.inf if self.minimising else -np.inf + @property + def name(self): + return add_spaces(type(self).__name__) + @property def n_parameters(self): return len(self.parameters) diff --git a/pybop/costs/error_measures.py b/pybop/costs/error_measures.py index c6ed7c4fe..b4baf6e39 100644 --- a/pybop/costs/error_measures.py +++ b/pybop/costs/error_measures.py @@ -2,7 +2,7 @@ import pybamm from pybop._dataset import Dataset -from pybop._utils import FailedSolution, add_spaces +from pybop._utils import FailedSolution from pybop.costs.base_cost import BaseCost from pybop.parameters.parameter import Inputs from pybop.simulators.solution import Solution @@ -182,10 +182,6 @@ def __call__( """ raise NotImplementedError - @property - def name(self): - return add_spaces(type(self).__name__) - @property def target_data(self): return self._target_data @@ -365,6 +361,10 @@ def __call__( return e + @property + def __name__(self): + return f"Minkowski distance (p = {self.p})" + class SumOfPower(ErrorMeasure): """ @@ -427,3 +427,6 @@ def __call__( return e, de return e + + def __name__(self): + return f"Sum of Power (p = {self.p})" diff --git a/tests/unit/test_import.py b/tests/unit/test_import.py index 5843c0d10..f3fc23d19 100644 --- a/tests/unit/test_import.py +++ b/tests/unit/test_import.py @@ -1,6 +1,4 @@ -import importlib import sys -from unittest.mock import patch import pytest @@ -8,23 +6,6 @@ class TestImport: pytestmark = pytest.mark.unit - def test_multiprocessing_init_non_win32(self, monkeypatch): - """Test multiprocessing init on non-Windows platforms""" - monkeypatch.setattr(sys, "platform", "linux") - # Unload pybop and its sub-modules - self.unload_pybop() - with patch("multiprocessing.set_start_method") as mock_set_start_method: - importlib.import_module("pybop") - mock_set_start_method.assert_called_once_with("fork") - - def test_multiprocessing_init_win32(self, monkeypatch): - """Test multiprocessing init on Windows""" - monkeypatch.setattr(sys, "platform", "win32") - self.unload_pybop() - with patch("multiprocessing.set_start_method") as mock_set_start_method: - importlib.import_module("pybop") - mock_set_start_method.assert_called_once_with("spawn") - def unload_pybop(self): """ Unload pybop and its sub-modules. Credit PyBaMM team: From c01f27d8bcac9c87ca6582add2cea291db635420 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 1 Dec 2025 19:41:32 +0000 Subject: [PATCH 02/37] chore: update pre-commit hooks (#845) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/astral-sh/ruff-pre-commit: v0.14.3 → v0.14.7](https://github.com/astral-sh/ruff-pre-commit/compare/v0.14.3...v0.14.7) - [github.com/kynan/nbstripout: 0.8.1 → 0.8.2](https://github.com/kynan/nbstripout/compare/0.8.1...0.8.2) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4a5bebe76..bd608c64f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -5,7 +5,7 @@ ci: repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.14.3" + rev: "v0.14.7" hooks: - id: ruff args: [--fix, --show-fixes] @@ -35,7 +35,7 @@ repos: - id: rst-inline-touching-normal - repo: https://github.com/kynan/nbstripout - rev: 0.8.1 + rev: 0.8.2 hooks: - id: nbstripout args: ['--keep-output', '--drop-empty-cells'] From 8a3e3fcff8ae76c82ecf87e1c83bb985deba44dd Mon Sep 17 00:00:00 2001 From: Sarah Roggendorf <33656497+SarahRo@users.noreply.github.com> Date: Wed, 3 Dec 2025 10:45:17 +0000 Subject: [PATCH 03/37] Fix image not displaying in readme (#847) * replace image in readme * replace image again * switch to relative path * add background * add background * update changelog --- CHANGELOG.md | 2 ++ README.md | 2 +- assets/PyBOP_components.svg | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 assets/PyBOP_components.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index f3264eb74..1c20f4bb4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ## Bug Fixes +- [#847](https://github.com/pybop-team/PyBOP/pull/847) - Update readme and diagram of pybop components so that the diagram is displayed correctly in the readme. + ## Breaking Changes # [v25.11](https://github.com/pybop-team/PyBOP/tree/v25.11) - 2025-11-24 diff --git a/README.md b/README.md index 909cec3aa..42a46bb7d 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ To understand how to update your use of PyBOP, please take a look at the example

- A diagram showing the main PyBOP classes: the Simulator and Cost, which together define the optimisation Problem, and the Optimiser or Sampler which generates the Result. + A diagram showing the main PyBOP classes: the Simulator and Cost, which together define the optimisation Problem, and the Optimiser or Sampler which generates the Result.

## 💻 Installation diff --git a/assets/PyBOP_components.svg b/assets/PyBOP_components.svg new file mode 100644 index 000000000..9210bce21 --- /dev/null +++ b/assets/PyBOP_components.svg @@ -0,0 +1,4 @@ + + + +
Problem
Problem
Cost
Cost
Simulator
Simulator
model
model
protocol
protocol
target
target
options
options
Optimiser / Sampler
Optimiser / Sampler
model parameters
model param...
cost parameters
cost parame...
Solution
Solution
Evaluation
Evaluation
Result
Result
evaluate
evaluate
run
run
solve
solve
Inputs
Inputs
Text is not SVG - cannot display
From 460b6e3e419ee4aa8a28d29351826834dc3db443 Mon Sep 17 00:00:00 2001 From: Dibyendu-IITKGP <32595915+Dibyendu-IITKGP@users.noreply.github.com> Date: Sun, 7 Dec 2025 12:25:30 +0000 Subject: [PATCH 04/37] Finite difference calculations of the Hessian matrix are updated, new example notebook is added for sensitivity analysis using SALib. (#838) * finite difference calculations are updated, new example notebook added for sensitivity analysis * style: pre-commit fixes * updated * style: pre-commit fixes * updated * updated * style: pre-commit fixes * integration test updated * integration test updated * integration test updated * test updated * tests updated * tests updated * style: pre-commit fixes * tests updated * style: pre-commit fixes * tests updated * tests updated * tests updated * tests updated * tests updated * style: pre-commit fixes * modified the eample notebook * style: pre-commit fixes * unit test added * integration test renamed * unit test updated * Add normalise option * Update notebooks --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com> --- CHANGELOG.md | 2 + .../ecm_multipulse_identification.ipynb | 95 +- .../sensitivity_analysis_hessian.ipynb | 19073 ++++++++++++++++ .../sensitivity_analysis_salib.ipynb | 829 + pybop/__init__.py | 2 +- pybop/analysis/classification.py | 149 +- ...test_classification.py => test_hessian.py} | 118 +- tests/unit/test_classification.py | 90 + 8 files changed, 20316 insertions(+), 42 deletions(-) create mode 100644 examples/notebooks/battery_parameterisation/sensitivity_analysis_hessian.ipynb create mode 100644 examples/notebooks/battery_parameterisation/sensitivity_analysis_salib.ipynb rename tests/integration/{test_classification.py => test_hessian.py} (60%) create mode 100644 tests/unit/test_classification.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c20f4bb4..d81deccd2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,8 @@ ## Bug Fixes +- [#834](https://github.com/pybop-team/PyBOP/issues/834) - Finite difference calculations of the Hessian matrix are updated. A new notebbok file is added which demonstrates sensitivity analysis using SALib. + ## Breaking Changes - [#829](https://github.com/pybop-team/PyBOP/pull/829) - Create `SamplingResult` and best inputs property for results. diff --git a/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb b/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb index dc2caa6f3..9996508cf 100644 --- a/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb +++ b/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb @@ -9,7 +9,7 @@ "\n", "## Estimating ECM parameters from multi-pulse HPPC data\n", "\n", - "This notebook provides example usage for estimating stationary parameters for a two RC branch Thevenin model using multi-pulse HPPC data.\n", + "This notebook provides example usage for estimating stationary parameters for a two RC branch Thevenin model using multi-pulse HPPC data. With the estimated parameters, a thermal model is created and simulated.\n", "\n", "### Setting up the Environment\n", "\n", @@ -60,7 +60,7 @@ "source": [ "## Setting up the model\n", "\n", - "In this example, we use the Thevenin model with two RC elements and the default parameter value for the \"Open-circuit voltage [V]\", as provided by the original PyBaMM class. The other relevant parameters for the ECM model implementation are updated as per the cell specification." + "In this example, we use the Thevenin model with two RC elements and the default parameter value for the \"Open-circuit voltage [V]\", as provided by the original PyBaMM class. To update this, provide a function definition that matches this [function](https://github.com/pybamm-team/PyBaMM/blob/1943aa5ab2895b5378220595923dbae3d66b13c9/pybamm/input/parameters/ecm/example_set.py#L17). The other relevant parameters for the ECM model implementation are updated as per the cell specification." ] }, { @@ -161,9 +161,9 @@ "data": { "text/html": [ "
\n", - "
\n", - "
\n", - "
\n", - "
\n", - "
\n", + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pybop.plot.problem(problem, inputs=result.best_inputs, title=\"Optimised Comparison\");" + ] + }, + { + "cell_type": "markdown", + "id": "14", + "metadata": {}, + "source": [ + "## Performing sensitivity analysis\n", + "\n", + "We use the Sobol and Morris methods from SALib to perform sensitivity analysis on the two RC pair model. More information on the sensitivity analysis methods available from SALib can be found [here](https://salib.readthedocs.io/en/latest/)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "15", + "metadata": {}, + "outputs": [], + "source": [ + "# Define the SALib problem dictionary for sensitivity analysis\n", + "salib_dict = {\n", + " \"names\": problem.parameters.names,\n", + " \"bounds\": problem.parameters.get_bounds_array(),\n", + " \"num_vars\": len(problem.parameters),\n", + "}" + ] + }, + { + "cell_type": "markdown", + "id": "16", + "metadata": {}, + "source": [ + "Let's create a helper function to evaluate the samples in a loop, using the `pybop.Problem` to evaluate the cost for each set of input parameters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17", + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate_samples(param_values: np.ndarray):\n", + " \"\"\"\n", + " param_values: np.ndarray shape (N, n_params)\n", + " returns: np.ndarray Y shape (N,)\n", + " \"\"\"\n", + " t0 = time.time()\n", + " N = param_values.shape[0]\n", + " cost_values = np.empty(N)\n", + " # Loop over 1/10th of the array at a time\n", + " n = 0\n", + " for params in np.array_split(param_values, 10):\n", + " n_i = len(params)\n", + " cost_values[n : n + n_i] = problem.evaluate(params).values\n", + " n += n_i\n", + " print(\n", + " f\"Eval {n}/{N}, elapsed time={time.time() - t0:.1f} s, last cost={cost_values[n - 1]:.6g}\"\n", + " )\n", + " return cost_values" + ] + }, + { + "cell_type": "markdown", + "id": "18", + "metadata": {}, + "source": [ + "## Sobol sensitivity analysis\n", + "\n", + "Choose a base sample size N (use N=512 or higher for better estimates) and generate a set of samples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Running model for Saltelli sample of size: (896, 5)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 90/896, elapsed time=1.4 s, last cost=0.155896\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 180/896, elapsed time=2.7 s, last cost=2.91953\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 270/896, elapsed time=4.0 s, last cost=3.443\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 360/896, elapsed time=5.3 s, last cost=0.0400496\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 450/896, elapsed time=6.5 s, last cost=2.15141\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 540/896, elapsed time=7.9 s, last cost=6.34475\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 629/896, elapsed time=9.1 s, last cost=2.45682\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 718/896, elapsed time=10.7 s, last cost=3.48555\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 807/896, elapsed time=11.8 s, last cost=6.53673\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 896/896, elapsed time=13.1 s, last cost=3.19176\n" + ] + } + ], + "source": [ + "N = 128\n", + "param_values = sobol_sample.sample(salib_dict, N, calc_second_order=False)\n", + "\n", + "print(\"Running model for Saltelli sample of size:\", param_values.shape)\n", + "Y_saltelli = evaluate_samples(param_values)" + ] + }, + { + "cell_type": "markdown", + "id": "20", + "metadata": {}, + "source": [ + "Use the samples to analyse the Sobol indices." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ST ST_conf\n", + "R0 [Ohm] 0.991417 0.164807\n", + "R1 [Ohm] 0.018585 0.005463\n", + "R2 [Ohm] 0.001103 0.000744\n", + "Tau1 [s] 0.008247 0.003998\n", + "Tau2 [s] 0.001137 0.000547\n", + " S1 S1_conf\n", + "R0 [Ohm] 0.972346 0.222216\n", + "R1 [Ohm] 0.014623 0.026848\n", + "R2 [Ohm] -0.000235 0.007942\n", + "Tau1 [s] 0.010430 0.023832\n", + "Tau2 [s] -0.002567 0.008329\n", + "Sobol S1: [ 9.72345726e-01 1.46225250e-02 -2.35067959e-04 1.04295189e-02\n", + " -2.56709598e-03]\n", + "Sobol ST: [0.99141718 0.01858489 0.00110346 0.00824684 0.00113709]\n" + ] + } + ], + "source": [ + "Si = sobol.analyze(\n", + " salib_dict, Y_saltelli, calc_second_order=False, print_to_console=True\n", + ")\n", + "print(\"Sobol S1:\", Si[\"S1\"])\n", + "print(\"Sobol ST:\", Si[\"ST\"])" + ] + }, + { + "cell_type": "markdown", + "id": "22", + "metadata": {}, + "source": [ + "Plot the results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "23", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AFgAwR8AAACwAII/AAAAYAEEfwAAAMACCP4AAACABRD8AQAAAAsg+AMAAAAWQPAHAAAALKBCBv9Ro0bJZrPle0yaNMml24yOjja3FR0d7dJtXauBAwcWeF9mz57t7rIAAABQCq46+M+ePbtAeLTZbPL19VVERIR69eqlyMhIZWRkFNnPvn379Oabb2rcuHG66aab5OvrK5vNpnr16l3rvhTg5+en8PBwhYeHy263F7luamqqli5dqjvuuEN16tSRv7+/goOD1axZM40fP17ffPON0+pyl9DQUPP98Pb2dnc5AAAAKEVeJWkcHh5uPk9ISNDp06d1+vRpbdq0SUuXLtWmTZsUGhpaaNu7775bR48eLcnmr2jw4MFatmzZFdfbvHmzxowZoxMnTpiv2e12paWl6eDBgzp48KDefvtt9enTR++//76qVKniwqpd57333jOfd+3aVdu3b3djNQAAAChNJRrqc+bMGfORlJSko0ePaty4cZKkPXv26LHHHnPY1sfHRzfeeKPGjBmjN954Q8OHDy9JKdds9erV6tu3r06cOKGaNWsqMjJSMTExiouLU2pqqg4cOKBJkybJy8tLGzZs0C233KJz5865pVYAAADgWpXojP/l6tSpo7feekt//PGHvv76a61Zs0ZvvvmmAgMDC6x74MABeXp6mj+fP3/emaUUy4EDBzRmzBhlZmaqZcuW2rp1q6pWrZpvnaZNm2rBggXq2bOn7rrrLh0+fFhDhw7Vli1bSr1eAAAA4Fq55OLe3r17S5LS09P1v//9r9B18oZ+d5k+fbqSk5Pl6+urtWvXFgj9efXt21fTp0+XJG3dulVffvllkX2fPXtWjz/+uOrXr29ea3D//ffr4MGDha6/bds283oJSfrll180ZMgQRUREyN/fX82aNdMrr7yizMxMs83OnTs1cOBA1ahRQ35+fmrRooUWLVokwzCu9q0AAABABeeS4J83eGZlZbliEyV2+vRprV+/XpI0ZMgQNWnS5IptJk+erKCgIEnSokWLHK4XFRWl66+/XgsXLjSHBZ07d06rV69Wu3bt9PPPPxe5nQ0bNqhdu3ZatWqVkpOTzWsNnnzySXNIVGRkpLp06aLPPvtMKSkpSktLU1RUlB555BFNmzatOG8BAAAALMQlwX/jxo2SJJvNpvr167tiEyW2bds2ZWdnS5LuueeeYrUJ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Dz7QoEGDVL9+fVWqVElBQUH6y1/+ouHDh+vTTz8tcT3uZrfbzffDz8/P3eUAAACgFHmVpHF4eLj5PCEhQadPn9bp06e1adMmLV26VJs2bSo0cE+cOFGRkZHmzx4eHrLb7YqNjdXu3bu1e/duLVy4UOvXr9ctt9xyzfV16NChWGff9+/fr6FDh+rgwYPma4GBgcrOztYff/yhP/74Q//617/Utm1brV69WvXq1bvmmtzp2Wef1bPPPitJGjVqlJYvX+7migAAAFBaSjTU58yZM+YjKSlJR48e1bhx4yRJe/bs0WOPPVZou4yMDFWrVk1PPPGEdu3apdTUVF26dEkJCQmKjIxUlSpVdPbsWfXr10/nz58vSYlX9O2336pz5846ePCgQkND9Y9//EOnT59WQkKCkpKSFB0drTlz5iggIED/+c9/1K5du3x/IAAAAADlgVPH+NepU0dvvfWWbrvtNknSmjVrlJiYWGC9Bx98UNHR0Zo/f77at28vb29vSTln2ceOHavPP/9ckhQTE6OlS5c6s8R8zp07p8GDByspKUm1atXSjz/+qClTpqh69ermOnXr1tXMmTO1fft2hYSE6Ny5c7r33nuVmprqsroAAAAAZ3PJxb29e/eWJKWnp+t///tfgeXt2rWTv7+/w/bt27dX8+bNJUk//vijK0qUJL300ks6c+aMJOn9999Xw4YNHa7bunVrLVy4UJIUFRWld955p8i+ExISNH36dDVt2lT+/v6qUqWK7rjjDv3www+Frh8dHW1eLxEdHW1+e1KnTh35+fmpYcOGmj59upKSksw2//3vfzVs2DDVrl1bfn5+atSokebOnVvk9RUAAACwJpcEf8MwzOdZWVnX1EfuxafX2v5KMjIyzOsMunbtqq5du16xzbBhw8w/DhYtWuRwvdOnT+umm27S888/r6NHj8rDw0MxMTH68ssvdeutt2rTpk1Fbmffvn268cYbFRkZqbi4OGVmZurPP//U888/rz59+igjI0Nffvml2rVrpw8++EAJCQlKT0/X4cOHNWPGDA0fPrz4bwQAAAAswSXBf+PGjZJypresX7/+Vbe/cOGC/vvf/0qSWrZs6dTacu3Zs0fx8fGSpHvuuadYbfJOC3rgwAGdPXu20PUefvhh+fj46Ouvv1ZSUpISExP1n//8R02aNFF6errGjx+v7Oxsh9sZO3as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pwYMGGD+bLfb5efnp/Pnz2vTpk3atGmT1q1bp1WrVsnDo/T/tvHz85OUcyGwqzz77LOaNWuW+XNAQIAMw9CRI0d05MgRbd68Wa1bt1bXrl1dVgMAAADKj3J5xj8gIEATJkzQ5s2bFRcXp7i4OMXHx+vixYt6/fXXZbfbtXbtWr3xxhulXtuFCxf03//+V5LUsmVLl2zj6NGj5vUPU6ZM0cmTJ5WUlKSEhATFxsZqx44deuihhxQUFFSi7aSlpSk+Pj7fAwAAAOVTuQz+bdu21ZIlS9SjR49801JWrlxZjz32mN555x1J0sKFC0u9thkzZig9PV1eXl4aNWqUS7bxww8/KDs7W40bN9Y//vEPRUREmMuCg4PVqVMnLVq0SDfffHOJtjNv3jwFBwebj9q1a5e0dECStG3bNnM4XXlV1JBAAADKonIZ/K+kX79+kqQ//vijVGcEWr16tZYsWSJJevLJJ9WkSROXbCckJESSlJCQYE556grTpk0zv1GJi4vT8ePHXbYtOFba97r46aefNHv2bL322mtO3xcAAOA+5XKMv5QTepcsWaIvvvhCBw4cMOervtyJEydUvXp1l9ezY8cOc1782267Tc8++6zLttW2bVuFhYXp9OnTateunSZOnKgePXqoSZMmTj2D6uvrK19fX6f1dyUv7r9QattypadbhTm1v9K+18VPP/2kOXPmqG7dupo0adJVtwcAAGVTuQz+hw4dUvfu3XXixAnztYCAAIWEhJgX8549e1aSXHpGPNfu3bvVr18/paSkqGPHjvr000/l5eW6tzYkJEQrV67U0KFDFRUVpUcffVRSzjCfW2+9Vffdd58GDx5sTjWK8q283esCAACUTeVyqM/o0aN14sQJ1atXT2vXrtXFixeVlJSkc+fO6cyZMzp58qS5rqtvV79792717t1bCQkJat++vTZs2FAqd6nt0aOHjhw5ohUrVmjkyJFq1KiR4uLi9Pnnn2v48OFq1apVvvcBAAAA1lbugv/x48e1a9cuSdLKlSt17733qnLlyvnWKersZ+6Z+NTUVIfrxMXFFauWXbt2qVevXoqPj1f79u21cePGEs+kczUqVaqk4cOHa9myZTp06JBOnDihl156SX5+fvm+CYB17d+/XyNGjFDdunXl5+en0NBQdejQQa+99prS0tIKrG+z2cwha0ePHi1wzcDs2bPNdZOTk7Vy5UqNGDFCN954o6pWrSpfX19FRERo4MCB2rBhg0v37cyZM3ryySd13XXXqVKlSqpUqZKuu+46PfXUU+Y3fpe7/ILcP/74Q+PHj1f9+vXl6+tb4P4eJ0+e1IQJE1S7dm35+vqqVq1aGj16tA4fPlysGtPT07V48WJ169ZNYWFh8vHxUfXq1TVgwIAi35/cGrdt26Zz585pypQpaty4sQICAsr1BdEAAPcqd0N98l5g2qpVq0LX2bJli8P2oaGhkqRz584pLS2t0DHsP/zwwxXr2LVrV74z/V999VWphv7C1KxZU0899ZTi4+P1/PPPa/PmzW6tB+61YMECTZ061fzWKzg4WElJSdq9e7d2796t9957T1999ZVq1KhhtgkPD1dKSori4+Pl4eGhqlWr5usz77dZa9asMf9IsNlsstvt8vLy0unTp/Xpp5/q008/1dSpU/XKK684fd+2b9+ugQMHKjY2VlLOH8GS9Ntvv+m3335TZGSkPvvsM3Xq1MlhH7t27dKECROUmJiogICAAkPj9u3bpx49eujSpUuScq6XiIuL07Jly/TJJ5/o7bffLrLGo0ePql+/foqKipL0f+/R2bNn9dlnn+mzzz7TxIkT9eabbzrs4/Dhw7r//vt19uxZ+fn5MXwPAFAi5e6Mf3BwsPn8559/LrA8ISFBc+fOddj+hhtukJQzBGjdunUFlqekpGjBggVF1pA39Hfo0EEbN27MN62oqxV2pjav3As63XHzMpQNX3zxhaZMmSLDMDRgwAD9+eefio2NVWJiolasWKGgoCD98ssvuvfee/PdaO7MmTN6/fXXJUm1a9fWmTNn8j2eeOIJc93Q0FA98cQT+u6775SYmKjY2FglJSXp1KlTmjNnjry9vfWPf/xDn332mVP37fjx42bob968ubn9xMREffvtt2rSpIkuXbqkAQMGFDncbcKECbruuuv0448/KikpSYmJidq0aZOknH9H7rrrLl26dEl16tTRpk2bzHtl7Nq1S7Vr19aECRMc9p2UlKTevXsrKipKXbt21bZt25SSkqLY2FjFxsbq1VdfVWBgoJYsWWK+34WZPHmyQkJCtHXrViUlJSk+Pl6///77tb95AABLK3fJsFmzZqpTp44kacyYMdq7d6+5bPfu3eratat5hq4wtWrVMs8CTpkyRVu2bDGDz969e9WjRw+d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AaACGDduXL4z5q1atTIeeugh45133jF+/fVXh2faDcMwTpw4YYbradOmFbrOlClTDEmGt7e3cerUqXzLcoO/JGPGjBmFth82bJghyahcubKRkpJivp6cnGxUrlzZ/EahMAsXLjT737NnT75lrg7+koxZs2YV2v7uu+82JBk9evQosKx58+ZmqM/KyiqwfMmSJWb/lwf/rKwso1GjRoYkY+nSpQ7rv/POOw1JxuOPP15g2Ztvvml+8/L1118bhmEYEyZMMP+YufyPBQDWQPAHgAogIyPDmDFjhlGpUqV8w0tyH9WqVTMmT55snDlzpkDb119/3ZBk+Pn5mWfqLxcTE2MOO1m4cGG+ZbnB39/f32H7Q4cOmbV89tln5ut5z4w7+qYiMzPTqFGjhiHJmDJlSr5lrg7+vr6+RkJCQqHtly9fbr63ef3888/mPm3evLnQtllZWUbNmjULDf7ffPONIckICwsr9I+GXB999JEhyWjatGmhy3P/MImIiDCWLl1q1rR27VqHfQKo2Li4FwAqAC8vLz377LM6efKk3n//fT3wwAO64YYb5OPjI0k6d+6cFixYoBYtWug///lPvrZ79uyRJLVp08bhjb1CQ0PVunXrfOtfrnXr1g7bN2rUSLVq1SrQPvd57dq11bhx40Lbenp66rbbbity266Se1FtYSIiIiRJMTEx+V7PrdHLy0udO3cutK2Hh4fDO/bu3LlTkhQXF6eIiAhVr1690Me4ceMkSUePHi20n8jISNWpU0enTp3ShAkTJEkPPPCA7r333iL2GEBFRvAHgAokODhYw4YN09tvv62ffvpJcXFx2rx5s/r37y9JunDhgu655558s9GcO3dOkq54I6vc4J67/uWu1D53ed72ztq2qwQFBTlc5uWVMyN2ZmZmvtdzawwLC5Ovr6/D9rn7dLlTp05JkjIyMnT27FmHj0uXLkmSw+lZQ0NDtWjRIvPnBg0a6PXXX3dYD4CKj+APABWYn5+fevTooc8++0wjR46UJJ04cUJfffWVmyuDI7lTl7Zr105GzpDcKz4cefvtt83nJ0+e1OHDh11eP4Cyi+APABYxfvx48/nvv/9uPq9WrZqknD8IipK7PHf9y508ebLI9rnL87Z31rbLktwaL1y4oPT0dIfrOXq/qlevLsnxEJ7ieuONN/TZZ5/J09NTzZs3V1pamu6//34lJyeXqF8A5RfBHwAsIu9Y9bxDUPKO3Y+Liyu0bWxsbL5rAQqzZ88eJSYmFrrs8OHDZnjP3V7e5ydOnNChQ4cKbZuVlaVvvvmmyG2XJbn7lJmZqR07dhS6TnZ2trZt21boso4dO0qSzpw5c83XNPz666968sknJUkzZ87Uv//9b4WEhOjAgQOaPHnyNfUJoPwj+ANAOXfkyBGHoTmv5cuXm89vuukm8/k999wjLy8vpaam6qWXXiq07QsvvKC0tDR5e3vrnnvuKXSdlJQUvfLKK4Uumzt3riSpcuXK6tmzp/l6z549VaVKFUk5d8stzNKlS81x70OGDHGwd2XH9ddfr2bNmkmSnn/+eWVnZxdY591333X4LUe3bt30l7/8RZI0efLkIr81kApeXJySkqL7779fqamp6tSpk5555hnVrVtXb731liTprbfe0scff3zV+wWg/CP4A0A5FxUVpWbNmqlfv35asWKFoqOjzWUZGRnav3+/Ro8erVdffVWS1LZtW3Xq1Mlcp2bNmnr88cclSS+++KJmzZql2NhYSTln+mfMmKH58+dLkqZMmaIaNWoUWkdwcLCee+45zZs3TwkJCZJyhrs8/vjj5h8dM2bMkJ+fn9nG39/fDPwrV67UxIkTdfbsWUlScnKyFi5cqEmTJkmSBg8erJtvvrkE71Tpef755yVJ33zzjYYOHWqG/NTUVC1ZskSPPPKIQkJCCm3r5eWlJUuWyMvLS999951uvfVWbd26VRkZGeY6f/75p5YsWaI2bdpo8eLF+dpPnjxZv/32m0JCQvTBBx/I09NTkjRo0CCNHTtWkjRu3DgdP37c2bsNoKxz1zyiAADn+OqrrwrM2+/j42NUrlzZvKNv7uOmm24yTp48WaCPtLQ047777jPX8/DwMEJDQw0PDw/ztSFDhhjp6ekF2ubO4z9y5Ehj8ODBhiTD09PTCA0Nzbf9ESNGOJyXfvLkyfluQBYaGmreVEyS0a1bNyM+Pr5AO1fP41/YXXVz5c637+ij9Jlnnsn33ufdp86dOxvTpk0rchvr1q0zgoKCzPbe3t5GlSpVzPsp5D7mzp1rtvn444+LnK8/KSnJaNq0qVkDd+8FrIUz/gBQzvXq1Uv/+9//9Prrr2vQoEFq1qyZfH19FRsbq4CAADVq1Ej33XefVq1apR9//NGcfz4vHx8frV69Wh999JH69OmjKlWqKCEhQVWqVFGfPn30ySef6MMPP5S3t3eRtaxcuVKLFy9Wq1atlJmZqUqVKql9+/ZasWKFli9fLg+Pwj92Xn31VX399de65557FB4ersTERAUFBalbt2569913tXnz5iKn1iyL5s6dqy+++EK33Xab7Ha70tLS1KxZM7344ovaunWreY8FRwYOHKjDhw9r1qxZatu2rQIDAxUbGytfX1/dcMMNeuCBB7Ru3TpzLP/x48f1wAMPSJLGjh1b6Hz9AQEBWrlypXx9fbVjxw5zCBYAa7AZRhHzgAEAAACoEDjjDwAAAFgAwR8AAACwAII/AAAAYAEEfwAAAMACCP4AAACABRD8AQAAAAsg+AMAAAAWQPAHAAAALIDgDwAAAFgAwR8AAACwAII/AAAAYAEEfwAAAMACCP4AAACABRD8AQAAAAv4fxqTYEgfbVO9AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.rcParams.update({\"font.size\": 18, \"font.weight\": \"normal\"})\n", + "plt.figure(figsize=(8, 5))\n", + "labels = salib_dict[\"names\"]\n", + "plt.barh(labels, Si[\"ST\"], xerr=Si[\"ST_conf\"], color=\"skyblue\", label=\"Total order\")\n", + "# uncomment the below line to see first order indices\n", + "# plt.barh(labels, Si[\"S1\"], xerr=Si[\"S1_conf\"], color=\"orange\", alpha=0.7, label=\"First order\")\n", + "plt.xlabel(\"Sobol index\", fontweight=\"normal\")\n", + "plt.legend()\n", + "plt.gca().invert_yaxis()\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "24", + "metadata": {}, + "source": [ + "## Morris sensitivity analysis\n", + "\n", + "Generate a set of samples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "25", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Morris sample generated: (24, 5)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 3/24, elapsed time=0.2 s, last cost=9.98395\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 6/24, elapsed time=0.4 s, last cost=1.30937\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 9/24, elapsed time=0.7 s, last cost=0.0330074\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 12/24, elapsed time=0.9 s, last cost=0.140275\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 14/24, elapsed time=1.1 s, last cost=6.45869\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 16/24, elapsed time=1.3 s, last cost=0.315565\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 18/24, elapsed time=1.4 s, last cost=0.322637\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 20/24, elapsed time=1.6 s, last cost=0.567131\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 22/24, elapsed time=1.7 s, last cost=6.64031\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Eval 24/24, elapsed time=1.9 s, last cost=8.7264\n", + "Model evaluations complete: (24,)\n", + "[7.02927617 7.60795018 9.98394694 1.33636604 1.30936964 1.3093725\n", + " 3.18786692 3.90932627 0.03300742 0.03482044 0.14028371 0.14027547\n", + " 7.19636823 6.45868702 6.45864622 0.3155649 0.3226275 0.32263744\n", + " 0.56708676 0.56713068 7.60961218 6.64031222 8.87236197 8.72639956]\n" + ] + } + ], + "source": [ + "# User settings\n", + "r = 10 # number of candidate trajectories (will generate r*(k+1) samples)\n", + "levels = 4 # number of grid levels for each parameter\n", + "optimal_k = 4 # number of optimal trajectories to select (< r)\n", + "fail_val = 1e5 # threshold to mark failed runs\n", + "seed = 123 # random seed for reproducibility\n", + "\n", + "# Generate Morris samples\n", + "param_values_morris = morris_sample.sample(\n", + " salib_dict,\n", + " N=r,\n", + " num_levels=levels,\n", + " optimal_trajectories=optimal_k,\n", + " local_optimization=False,\n", + " seed=seed,\n", + ")\n", + "print(\"Morris sample generated:\", param_values_morris.shape)\n", + "\n", + "# Evaluate model for all samples\n", + "Y_morris = evaluate_samples(param_values_morris)\n", + "print(\"Model evaluations complete:\", Y_morris.shape)\n", + "print(Y_morris)" + ] + }, + { + "cell_type": "markdown", + "id": "26", + "metadata": {}, + "source": [ + "Reshape the samples into trajectories and identify failures. Then analyse the Morris indices." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total trajectories: 4, Failed trajectories: 0, Valid trajectories: 4\n", + "Valid samples shape: (24, 5) Valid Y shape: (24,)\n", + " mu mu_star sigma mu_star_conf\n", + "R0 [Ohm] 9.641048 9.641048 2.987019 2.328316\n", + "R1 [Ohm] 1.965099 2.044197 1.799502 1.546974\n", + "R2 [Ohm] 0.066828 0.068188 0.103008 0.088456\n", + "Tau1 [s] -0.487570 0.487570 0.569701 0.520493\n", + "Tau2 [s] -0.363501 0.363507 0.726966 0.719571\n", + "\n", + "Morris mu* (clean): [9.641048461758706 2.044196618906839 0.06818791206851062\n", + " 0.4875702106674279 0.36350694628871716]\n", + "Morris sigma (clean): [2.9870195 1.79950199 0.10300767 0.56970091 0.72696612]\n" + ] + } + ], + "source": [ + "k = salib_dict[\"num_vars\"] # number of parameters\n", + "r_total = int(param_values_morris.shape[0] / (k + 1))\n", + "\n", + "samples_reshaped = param_values_morris.reshape((r_total, k + 1, k))\n", + "Y_reshaped = Y_morris.reshape((r_total, k + 1))\n", + "\n", + "traj_has_fail = np.any(Y_reshaped > fail_val, axis=1)\n", + "n_fail_traj = np.sum(traj_has_fail)\n", + "n_valid_traj = r_total - n_fail_traj\n", + "\n", + "print(\n", + " f\"Total trajectories: {r_total}, Failed trajectories: {n_fail_traj}, Valid trajectories: {n_valid_traj}\"\n", + ")\n", + "\n", + "if n_valid_traj == 0:\n", + " raise RuntimeError(\n", + " \"All trajectories failed — cannot compute Morris indices. \"\n", + " \"Consider reducing penalty or tightening bounds.\"\n", + " )\n", + "\n", + "# Keep only valid trajectories\n", + "valid_idx = np.where(~traj_has_fail)[0]\n", + "samples_valid = samples_reshaped[valid_idx].reshape((n_valid_traj * (k + 1), k))\n", + "Y_valid = Y_reshaped[valid_idx].reshape((n_valid_traj * (k + 1),))\n", + "\n", + "print(\"Valid samples shape:\", samples_valid.shape, \"Valid Y shape:\", Y_valid.shape)\n", + "\n", + "# Recompute Morris indices on valid trajectories\n", + "morris_res = morris_analyze.analyze(\n", + " salib_dict, samples_valid, Y_valid, num_levels=levels, print_to_console=True\n", + ")\n", + "\n", + "print(\"\\nMorris mu* (clean):\", morris_res[\"mu_star\"])\n", + "print(\"Morris sigma (clean):\", morris_res[\"sigma\"])" + ] + }, + { + "cell_type": "markdown", + "id": "28", + "metadata": {}, + "source": [ + "Plot the results of Morris's method." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "29", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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AhERERER6TDZycqwYcOk940bN8akSZMwatQomJmZqV1H9hEXIiIiIiKi7GQnK8bGxhg+fDgmTZqEli1byqojMDBQbvNERERERKTjZCcrYWFhsLa21mAoRERERERE/0/2bmBHjhzB3r171S5/4MABbN26VW5zRERERERUxshOVtzd3TF16lS1y0+fPh0eHh5ymyMiIiIiojKmSOesZG1TrK3yRERERERUdmnlBPu8xMXFcfcvIiIiIiJSW7EkK/7+/oiOjkbFihWLozkiIiIiItIBau8G5uPjAx8fnxzXoqKi0LlzZ5XPiKKImJgYPHjwAIIgoEuXLvIjJSIiIiKiMkXtZCUwMBB+fn45rqWmpua6pkqdOnXg6elZiNCIiIiIiKgsUztZ6dixY46vFyxYAHNzc0yfPl3lM3p6erC0tESDBg3QsWNH6Ovryw6UiIiIiIjKFrWTlQ4dOqBDhw7S11nJyvz587USGBERERERlW2yT7APCAjgSAkREREREWmN7GSlatWqmoyDiIiIiIgoh2I7Z0UTkpKScOLECSxevBiDBw9G1apVIQgCBEEo8uJ9T09Pqa78Xs+ePdPMhyEiIiIionypNbJSvXp1AEDNmjVx+vTpHNcKQxAEPH/+vNDPZfn777/Ru3dv2c+rQ6FQwNbWVuV9AwPZg1FERERERFQIav3mHRgYCAAwNjbOda0wBEEo9DPvs7GxQdOmTaXXv/71L7x+/brI9WZp06aN2tsxExERERGR9qiVrGzZsgUAYGVlletacXJ1dUVUVFSOa999912xx0FERERERNqnVrLi5uam1jVt4+5jRERERERlh+wFGC9fvgQA2Nvb55geRkREREREpAmydwNzdnZG9erVc03L+tA9ePAADRo0gKmpKczNzVGnTh2MHz8et2/fLunQiIiIiIjKFNnJirm5OaysrODk5KTJeEpcZGQkHj16BBMTE6SkpODJkyfw8vJCs2bN8MMPP5R0eEREREREZYbsaWDOzs54+vQp0tPTdWItSa1atbB8+XIMGDAA1apVg0KhQGpqKvz8/DBnzhzcvHkTS5YsgY2NDaZPn66ynpSUFKSkpEhfx8XFAQCUSiWUSqXG486qUxt1U8lhv+om9qtuYr/qHvapbsqvX9nXpZcgiqIo58F58+ZhyZIlOHToEPr166fpuNTm7OyMoKAgzJ8/v8gH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MCIiIiIiIm3R2MhKcnIyoqOjoVQq8y1XpUoVTTVJREREREQ6rEjJSlJSEpYvX46dO3fi2bNnBZYXBAFpaWlFaZKIiIiIiMoI2clKTEwM2rdvjwcPHkAURbWeUbccERERERGR7GRl0aJFuH//PhQKBaZMmYIBAwbAyckJBgYam1lGRERERERlmOzM4tChQxAEAatWrcKkSZM0GRMREREREZH83cBCQ0Ohp6eHsWPHajIeIiIiIiIiAEUYWbG1tUVycjKMjY01GQ8RERERERGAIoystGvXDrGxsQgNDdVkPERERERERACKkKzMmjULBgYGWLRokSbjISIiIiIiAlCEZKVZs2bw9vaGj48Pxo0bhxcvXmgyLiIiIiIiKuNkr1mpXr06AEBfXx/e3t7w9vaGra0tLCwsVD4jCAKeP38ut0kiIiIiIipDZCcrgYGBua69ffsWb9++VfmMIAhymyMiIiIiojJGdrKyZcsWTcZBRERERESUg+xkxc3NTZNxFCgpKQnnz5/HzZs3cevWLdy8eRMvX74EAMyfPx+enp5FbiM8PBzLly/HsWPH8PLlS5iYmOCjjz6Cm5sbxo0bx5EhIiIiIqJiJDtZKW5///03evfurbX6b968iR49ekjT2MzNzREfH49Lly7h0qVL2LdvH44cOQJDQ0OtxUBERERERP9P9m5gJcHGxgZdunTBzJkzsXPnTjg6Omqk3tjYWPTt2xdv375F3bp1cf36dcTHxyMxMRFr166FQqHAqVOnMHXqVI20R0REREREBftgRlZcXV0RFRWV49p3332nkbpXrlyJ169fw8TEBH/++SeqVasGADA0NMRXX32FuLg4zJkzBxs2bMDUqVNRu3ZtjbRLRERERESqqTWyoq+vD319fXz00Ue5rhXmZWAgPzfS19eX/WxBtm7dCgAYMWKElKhkN2XKFJibmyM9PR07duzQWhxERERERPT/1EpWRFGUXnldK8yrtPnnn3+khfq9evXKs4y5uTlcXV0BAKdPny622IiIiIiIyjK1hjrOnTsHADA1Nc117UN3//596X2DBg1UlmvQoAFOnDiBhw8fFkdYRERERERlnlrJSocOHdS69iEKCwuT3lesWFFluax7cXFxSEhIgLm5eZ7lUlJSkJKSIn0dFxcHAFAqlVAqlZoIOYesOrVRN5Uc9qtuYr/qJvar7mGf6qb8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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "labels = salib_dict[\"names\"]\n", + "plt.figure(figsize=(8, 5))\n", + "plt.scatter(morris_res[\"mu_star\"], morris_res[\"sigma\"], s=60, color=\"teal\")\n", + "for i, txt in enumerate(labels):\n", + " plt.text(morris_res[\"mu_star\"][i] * 1, morris_res[\"sigma\"][i] * 1.1, txt)\n", + "plt.xlabel(\"mu* (overall influence)\")\n", + "plt.ylabel(\"sigma (nonlinearity / interactions)\")\n", + "plt.title(\"Morris screening\")\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "30", + "metadata": {}, + "source": [ + "## Concluding thoughts\n", + "\n", + "This notebook illustrates how to extract EC parameters from a HPPC pulse using PyBOP. A sensitivity analysis of the model is performed using the Sobol and Morris methods from the SALib module. Other methods from SALib can also be used. More information can be found [here](https://salib.readthedocs.io/en/latest/)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pybop-env", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pybop/__init__.py b/pybop/__init__.py index a56b2e996..3e6b2d846 100644 --- a/pybop/__init__.py +++ b/pybop/__init__.py @@ -166,7 +166,7 @@ # # Analysis # -from .analysis.classification import classify_using_hessian +from .analysis.classification import classify_using_hessian, plot_hessian_eigenvectors # # Applications diff --git a/pybop/analysis/classification.py b/pybop/analysis/classification.py index 69c204276..857715e6f 100644 --- a/pybop/analysis/classification.py +++ b/pybop/analysis/classification.py @@ -6,7 +6,8 @@ def classify_using_hessian( result: OptimisationResult, dx=None, - cost_tolerance: float | None = 1e-5, + cost_tolerance: float = 1e-5, + normalise: bool = True, ): """ A simple check for parameter correlations based on numerical approximation @@ -21,6 +22,9 @@ def classify_using_hessian( bounds and as the perturbation distance in the finite difference calculations. cost_tolerance : float, optional A small positive tolerance used for cost value comparisons (default: 1e-5). + normalise : bool, optional + If True, the Hessian is scaled by the step size in the parameters so that the + Hessian entries are in the same unit as the cost values (default: True). """ x = result.x dx = np.asarray(dx) if dx is not None else np.maximum(x, 1e-40) * 1e-2 @@ -28,6 +32,13 @@ def classify_using_hessian( problem = result.optim.problem parameters = problem.parameters minimising = result.minimising + cost_tolerance = float(cost_tolerance) + + # Prepare outputs + stationarity_confirmed = False + cfd_hessian = np.full((2, 2), np.nan, dtype=float) + eigenvalues = np.array([np.nan, np.nan], dtype=float) + eigenvectors = np.full((2, 2), np.nan, dtype=float) def cost(x): return problem.evaluate(x).values @@ -76,15 +87,16 @@ def check_proximity_to_bounds(parameters, x, dx, names) -> str: message += check_proximity_to_bounds(parameters, x, dx, names) else: - # Estimate the Hessian using second-order accurate central finite differences - # cfd_hessian = np.zeros((2, 2)) + # By default, normalise Hessian with respect to the finite differencing step in the + # parameter values, in order to compute eigenvalues in the same unit as the cost + + # Estimate the normalised Hessian using second-order accurate central finite differences # cfd_hessian[0, 0] = costs[2,1,0] - 2 * costs[1,1,0] + costs[0,1,0] # cfd_hessian[0, 1] = (costs[2,2,0] - costs[2,0,0] + costs[0,0,0] - costs[0,2,0]) / 4 # cfd_hessian[1, 0] = cfd_hessian[0, 1] # cfd_hessian[1, 1] = costs[1,2,0] - 2 * costs[1,1,0] + costs[1,0,0] - # Estimate the Hessian using fourth-order accurate central finite differences - cfd_hessian = np.zeros((2, 2)) + # Estimate the normalised Hessian using fourth-order accurate central finite differences cfd_hessian[0, 0] = ( -costs[2, 1, 1] + 16 * costs[2, 1, 0] @@ -105,6 +117,13 @@ def check_proximity_to_bounds(parameters, x, dx, names) -> str: - costs[1, 0, 1] ) / 12 + if not normalise: + # Replace the normalised Hessian by the true Hessian + cfd_hessian[0, 0] /= dx[0] ** 2 + cfd_hessian[0, 1] /= dx[0] * dx[1] + cfd_hessian[1, 0] /= dx[0] * dx[1] + cfd_hessian[1, 1] /= dx[1] ** 2 + # Compute the eigenvalues and sort into ascending order eigenvalues, eigenvectors = np.linalg.eig(cfd_hessian) idx = eigenvalues.argsort() @@ -113,10 +132,13 @@ def check_proximity_to_bounds(parameters, x, dx, names) -> str: # Classify the result if np.all(eigenvalues > cost_tolerance): + stationarity_confirmed = True message = "The optimiser has located a minimum." elif np.all(eigenvalues < -cost_tolerance): + stationarity_confirmed = True message = "The optimiser has located a maximum." elif np.all(np.abs(eigenvalues) > cost_tolerance): + stationarity_confirmed = True message = "The optimiser has located a saddle point." elif np.all(np.abs(eigenvalues) < cost_tolerance): message = f"The cost variation is smaller than the cost tolerance: {cost_tolerance}." @@ -138,5 +160,120 @@ def check_proximity_to_bounds(parameters, x, dx, names) -> str: if np.allclose(best_cost, diagonal_costs, atol=cost_tolerance, rtol=0): message += " There may be a correlation between these parameters." + if normalise: + # Now, after the checks, replace the normalised Hessian by the true Hessian + cfd_hessian[0, 0] /= dx[0] ** 2 + cfd_hessian[0, 1] /= dx[0] * dx[1] + cfd_hessian[1, 0] /= dx[0] * dx[1] + cfd_hessian[1, 1] /= dx[1] ** 2 + + # Scale the results to match the true Hessian + for k in range(eigenvectors.shape[1]): + vec = eigenvectors[:, k] * dx + eigenvectors[:, k] = vec / np.linalg.norm(vec) + eigenvalues /= dx**2 + print(message) - return message + + # Pack everything useful into a dictionary + return { + "message": message, + "cost": cost, + "cfd_hessian": cfd_hessian, + "stationarity_confirmed": stationarity_confirmed, + "eigenvalues": eigenvalues, + "eigenvectors": eigenvectors, + "x": x, + "dx": dx, + "names": names, + "best_cost": best_cost, + } + + +def plot_hessian_eigenvectors(info, steps: int = 10): + """ + A function to plot the eigenvectors computed for the Hessian at an optimal point. + + Parameters + ---------- + info : dict + The output from pybop.classify_using_Hessian. + steps : int + Grid resolution per axis. + """ + import matplotlib.pyplot as plt + + cost = info["cost"] + x = info["x"] + dx = info["dx"] + names = info["names"] + eigenvalues = info["eigenvalues"] + eigenvectors = info["eigenvectors"] + + # Build a plotting span around x + span_multiplier = 4.0 + span0 = (x[0] - span_multiplier * dx[0], x[0] + span_multiplier * dx[0]) + span1 = (x[1] - span_multiplier * dx[1], x[1] + span_multiplier * dx[1]) + param0 = np.linspace(span0[0], span0[1], steps) + param1 = np.linspace(span1[0], span1[1], steps) + + # Evaluate cost on the grid + Z = np.empty((steps, steps), dtype=float) + for i in range(steps): + for j in range(steps): + p = np.array([param0[i], param1[j]], dtype=float) + try: + Z[i, j] = float(cost(p)) + except Exception: + Z[i, j] = np.nan + + # Pack everything useful into a dictionary + info.update( + { + "span0": span0, + "span1": span1, + "param0": param0, + "param1": param1, + "Z": Z, + } + ) + + # Cost contours + fig, ax = plt.subplots(figsize=(6, 5)) + ax.scatter( + [x[0]], [x[1]], marker="x", s=60, label=f"Result (cost={info['best_cost']:.3g})" + ) + Z[~np.isfinite(Z)] = np.nan + if Z.size == 0: + ax.text( + 0.5, 0.5, "No finite cost values on contour grid", ha="center", va="center" + ) + else: + vmin, vmax = np.nanmin(Z), np.nanmax(Z) + levels = np.linspace(vmin, vmax, 10) + cs = ax.contour(param0, param1, Z.T, levels=levels) + ax.clabel(cs, inline=1, fontsize=8) + + # Add eigenvectors + if info["stationarity_confirmed"]: + colours = ["red", "purple"] + for k, val in enumerate(eigenvalues): + vec = eigenvectors[:, k] + if np.isfinite(vec).all(): + ax.axline( + x, + slope=vec[1] / vec[0], + color=colours[k], + linestyle="--", + linewidth=1.2, + label=f"eig {k} (λ={val:.3g})", + ) + + ax.set_xlim(info["span0"]) + ax.set_ylim(info["span1"]) + ax.set_xlabel(names[0]) + ax.set_ylabel(names[1]) + ax.set_title("Cost contours") + ax.legend(loc="best") + + return fig, ax diff --git a/tests/integration/test_classification.py b/tests/integration/test_hessian.py similarity index 60% rename from tests/integration/test_classification.py rename to tests/integration/test_hessian.py index 0b4fc8477..65cc504fa 100644 --- a/tests/integration/test_classification.py +++ b/tests/integration/test_hessian.py @@ -95,18 +95,97 @@ def test_classify_using_hessian(self, simulator, dataset): logger.extend_log(x_search=[x0], x_model=[x0], cost=[problem(x0)]) result = pybop.OptimisationResult(optim=optim, logger=logger, time=1.0) + info = pybop.classify_using_hessian(result) + pybop.plot_hessian_eigenvectors(info, steps=3) + + assert isinstance(info, dict) + for k in ( + "message", + "cfd_hessian", + "eigenvalues", + "eigenvectors", + "x", + "dx", + "names", + "best_cost", + "span0", + "span1", + "param0", + "param1", + "Z", + ): + assert k in info + assert info["cfd_hessian"].shape == (2, 2) + assert info["eigenvalues"].shape == (2,) + assert info["eigenvectors"].shape == (2, 2) + assert info["x"].shape == (2,) + assert info["dx"].shape == (2,) + assert len(info["names"]) == 2 + assert isinstance(info["best_cost"], float) + assert isinstance(info["span0"], tuple) + assert len(info["span0"]) == 2 + assert isinstance(info["span1"], tuple) + assert len(info["span1"]) == 2 + assert info["Z"].ndim == 2 + assert info["Z"].shape[0] == info["Z"].shape[1] # grid is square + + # Hessian may be NaN on some model combinations + H = info["cfd_hessian"] + + if np.isfinite(H).all(): + # finite and (approximately) symmetric + assert np.allclose(H, H.T, atol=1e-8) + # Eigenvalues should be sorted ascending (only meaningful if finite) + evals = info["eigenvalues"] + assert evals[0] <= evals[1] + # Eigenvectors should be finite and non-zero norm + evecs = info["eigenvectors"] + assert np.isfinite(evecs).all() + for k in range(evecs.shape[1]): + nrm = np.linalg.norm(evecs[:, k]) + assert nrm > 0.0 + else: + # If full Hessian contains NaNs, try to use eigenvalues/eigenvectors + evals = info.get("eigenvalues", None) + evecs = info.get("eigenvectors", None) + + if evals is not None and np.all(np.isfinite(evals)): + # If eigenvalues are finite we can still check ordering + assert evals[0] <= evals[1] + + elif evecs is not None and np.isfinite(evecs).all(): + # If eigenvectors are finite, check their norms + for k in range(evecs.shape[1]): + nrm = np.linalg.norm(evecs[:, k]) + assert nrm > 0.0 + + else: + # Fallback: ensure the Z grid exists (this confirms classification ran) + assert isinstance(info.get("Z", None), np.ndarray) + + # Check the grid Z contains at least some finite values + Z = info["Z"] + assert np.isfinite(Z).any() + + # Check p0 and p1 + p0 = info["param0"] + p1 = info["param1"] + x_center = info.get("x", np.asarray(x)) + assert p0.min() < x_center[0] < p0.max() + assert p1.min() < x_center[1] < p1.max() + if np.all(x == np.asarray([0.05, 0.05])): - message = pybop.classify_using_hessian(result) - assert message == "The optimiser has located a minimum." + info = pybop.classify_using_hessian(result) + assert info["message"] == "The optimiser has located a minimum." elif np.all(x == np.asarray([0.1, 0.05])): - message = pybop.classify_using_hessian(result) - assert message == ( + info = pybop.classify_using_hessian(result) + assert info["message"] == ( "The optimiser has not converged to a stationary point." " The result is near the upper bound of R0 [Ohm]." ) elif np.all(x == np.asarray([0.05, 0.01])): - message = pybop.classify_using_hessian(result) - assert message == ( + info = pybop.classify_using_hessian(result) + assert info["message"] == ( "The optimiser has not converged to a stationary point." " The result is near the lower bound of R1 [Ohm]." ) @@ -122,11 +201,8 @@ def test_classify_using_hessian(self, simulator, dataset): logger.extend_log(x_search=[x], x_model=[x], cost=[problem(x)]) result = pybop.OptimisationResult(optim=optim, logger=logger, time=1.0) - message = pybop.classify_using_hessian(result) - assert message == "The optimiser has located a maximum." - - # message = pybop.classify_using_hessian(result) - # assert message == "The optimiser has located a saddle point." + info = pybop.classify_using_hessian(result) + assert info["message"] == "The optimiser has located a maximum." def test_insensitive_classify_using_hessian(self, model, parameter_values): param_R0_a = pybop.Parameter(bounds=[0, 0.002]) @@ -166,25 +242,25 @@ def test_insensitive_classify_using_hessian(self, model, parameter_values): logger.extend_log(x_search=[x], x_model=[x], cost=[problem(x)]) result = pybop.OptimisationResult(optim=optim, logger=logger, time=1.0) - message = pybop.classify_using_hessian(result) - assert message == ( + info = pybop.classify_using_hessian(result) + expected1 = ( "The cost variation is too small to classify with certainty." " The cost is insensitive to a change of 1e-42 in R0_b [Ohm]." ) + expected2 = "The cost variation is smaller than the cost tolerance: 0.01." + assert info["message"] in {expected1, expected2} - message = pybop.classify_using_hessian(result, dx=[0.0001, 0.0001]) - assert message == ( + info = pybop.classify_using_hessian(result, dx=[0.0001, 0.0001]) + assert info["message"] == ( "The optimiser has located a minimum." " There may be a correlation between these parameters." ) - message = pybop.classify_using_hessian(result, cost_tolerance=1e-2) - assert message == ( - "The cost variation is smaller than the cost tolerance: 0.01." - ) + info = pybop.classify_using_hessian(result, cost_tolerance=1e-2) + assert info["message"] in {expected1, expected2} - message = pybop.classify_using_hessian(result, dx=[1, 1]) - assert message == ( + info = pybop.classify_using_hessian(result, dx=[1, 1]) + assert info["message"] == ( "Classification cannot proceed due to infinite cost value(s)." " The result is near the upper bound of R0_a [Ohm]." ) diff --git a/tests/unit/test_classification.py b/tests/unit/test_classification.py new file mode 100644 index 000000000..d25ef98cc --- /dev/null +++ b/tests/unit/test_classification.py @@ -0,0 +1,90 @@ +import numpy as np +import pytest + +import pybop +from pybop.costs.evaluation import Evaluation + + +class SeparableParaboloidProblem(pybop.Problem): + """ + Simple paraboloid cost: + f(x) = (x0 - c0)**2 + (x1 - c1)**2 + c + """ + + def __init__(self, centre: np.ndarray, c: float = 0.0): + super().__init__(simulator=None, cost=None) + self.parameters = pybop.Parameters( + { + "x0": pybop.Parameter(bounds=[-10, 10]), + "x1": pybop.Parameter(bounds=[-10, 10]), + } + ) + self.c0 = centre[0] + self.c1 = centre[1] + self.c = float(c) + + def evaluate_batch(self, inputs, calculate_sensitivities=False): + val = [] + for x in inputs: + val.append((x["x0"] - self.c0) ** 2 + (x["x1"] - self.c1) ** 2 + self.c) + return Evaluation(values=np.array(val)) + + +@pytest.fixture(params=[np.asarray([0.0, 0.0]), np.asarray([0.05, 0.05])]) +def optimisation_result(request): + """ + Build a result where result.x is the true minimiser (the paraboloid centre). + That ensures classify_using_hessian computes a finite Hessian and eigenvalues. + """ + centre = np.asarray(request.param, dtype=float) + problem = SeparableParaboloidProblem(centre=centre, c=1.0) # small offset c + optim = pybop.XNES(problem) + + logger = pybop.Logger(minimising=True) + logger.iteration = 1 + logger.extend_log( + x_search=[centre], + x_model=[centre], + cost=problem.evaluate(centre).values, + ) + return pybop.OptimisationResult(optim=optim, logger=logger, time=1.0) + + +@pytest.mark.unit +def test_classify_paraboloid_minimum_and_grid(optimisation_result): + result = optimisation_result + + dx = np.asarray([1e-3, 1e-3]) + steps = 3 + + info = pybop.classify_using_hessian(result, dx=dx, cost_tolerance=1e-8) + pybop.plot_hessian_eigenvectors(info, steps=steps) + + # Basic structure checks + assert isinstance(info, dict) + assert info["cfd_hessian"].shape == (2, 2) + assert info["eigenvalues"].shape == (2,) + assert info["eigenvectors"].shape == (2, 2) + assert info["x"].shape == (2,) + assert info["dx"].shape == (2,) + assert isinstance(info["names"], list) and len(info["names"]) == 2 + assert isinstance(info["best_cost"], float) + assert isinstance(info["span0"], tuple) and len(info["span0"]) == 2 + assert isinstance(info["span1"], tuple) and len(info["span1"]) == 2 + + # Grid checks: a finite paraboloid evaluates to finite values everywhere + assert info["Z"].shape == (steps, steps) + assert np.isfinite(info["Z"]).all() + + # Hessian should be finite and symmetric (within numerical tolerance) + H = info["cfd_hessian"] + assert np.isfinite(H).all() + assert np.allclose(H, H.T, atol=1e-8) + + # Eigenvalues are sorted ascending and finite + evals = info["eigenvalues"] + assert evals[0] <= evals[1] + assert np.isfinite(evals).all() + + # Because the paraboloid is convex and result.x is the minimiser, expect a minimum + assert "minimum" in info["message"].lower() From a4cd7665fea28a68504ae3807e4a2303e67e74ca Mon Sep 17 00:00:00 2001 From: Sarah Roggendorf <33656497+SarahRo@users.noreply.github.com> Date: Sun, 7 Dec 2025 13:30:24 +0000 Subject: [PATCH 05/37] Restructure priors (#839) * rename BasePrior as Distribution * initialise distribution with stats.rv_continuous/stats.distributions.rv_frozen * distributions as subclasses of Parameter * clean up class structure * tidy up some details * remove unnecessary changes, remove unused method * fix failing tests * improve test coverage * remove margin from ParameterInfo * update __call_ function * remove set_bounds and remove_bounds methods * remove ParameterBounds object * remove ParameterDistribution object * Rename ParameterInfo -> Parameter * improve coverage * rename files * update changelog * Update examples * Update descriptions --------- Co-authored-by: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com> --- CHANGELOG.md | 2 + benchmarks/benchmark_optim_construction.py | 6 +- benchmarks/benchmark_parameterisation.py | 6 +- .../benchmark_track_parameterisation.py | 6 +- .../echem_identification_pitfalls.ipynb | 6 +- .../ecm_monte_carlo_sampling.ipynb | 9 +- .../ecm_multipulse_identification.ipynb | 19 +- .../ecm_scipy_constraints.ipynb | 9 +- .../electrode_balancing.ipynb | 6 +- .../lgm50_pulse_validation.ipynb | 15 +- .../pouch_cell_identification.ipynb | 8 +- .../sensitivity_analysis_salib.ipynb | 15 +- .../comparing_cost_functions.ipynb | 8 +- .../optimiser_calibration.ipynb | 2 +- .../energy_based_electrode_design.ipynb | 8 +- .../maximum_a_posteriori.ipynb | 4 +- .../optimising_with_adamw.ipynb | 8 +- .../setting_optimiser_options.ipynb | 7 +- .../ecm_tau_redefined.py | 21 +- .../full_cell_balancing.py | 28 ++- .../battery_parameterisation/simple_dfn.py | 14 +- .../battery_parameterisation/simple_ecm.py | 14 +- .../battery_parameterisation/simple_eis.py | 6 +- .../comparison_examples/gitt_models.py | 5 +- .../multi_start_optimisation.py | 4 +- .../design_optimisation/maximising_energy.py | 6 +- .../design_optimisation/maximising_power.py | 10 +- .../getting_started/exponential_decay.py | 4 +- .../fitting_multiple_problems.py | 4 +- .../getting_started/functional_parameters.py | 4 +- .../getting_started/linked_parameters.py | 14 +- .../getting_started/maximum_a_posteriori.py | 6 +- .../getting_started/maximum_likelihood.py | 9 +- .../getting_started/monte_carlo_sampling.py | 4 +- .../getting_started/optimising_with_adamw.py | 10 +- .../optimising_with_scipy_minimize.py | 14 +- .../optimising_with_simulated_annealing.py | 14 +- .../pints_ask_tell_interface.py | 4 +- .../scripts/getting_started/weighted_cost.py | 10 +- multiprocessing_bench.py | 8 +- noxfile.py | 2 +- pybop/__init__.py | 2 +- pybop/costs/likelihoods.py | 25 +- pybop/optimisers/base_optimiser.py | 6 +- .../{priors.py => distributions.py} | 216 ++++++++++++------ pybop/parameters/parameter.py | 192 ++++++---------- pybop/problems/problem.py | 2 +- pybop/simulators/base_simulator.py | 9 +- .../integration/test_eis_parameterisation.py | 11 +- tests/integration/test_half_cell_model.py | 12 +- tests/integration/test_hessian.py | 14 +- .../test_model_experiment_changes.py | 19 +- tests/integration/test_monte_carlo.py | 10 +- .../integration/test_monte_carlo_thevenin.py | 19 +- .../integration/test_optimisation_options.py | 10 +- .../integration/test_spm_parameterisations.py | 88 +++++-- .../test_thevenin_parameterisation.py | 14 +- tests/integration/test_transformation.py | 14 +- tests/integration/test_weighted_cost.py | 20 +- tests/unit/test_classifier.py | 4 +- tests/unit/test_cost.py | 11 +- .../{test_priors.py => test_distributions.py} | 88 +++---- tests/unit/test_evaluation.py | 10 +- tests/unit/test_likelihoods.py | 10 +- tests/unit/test_optimisation.py | 149 +++++++++--- tests/unit/test_parameters.py | 96 +++++--- tests/unit/test_plots.py | 78 +++++-- tests/unit/test_posterior.py | 29 ++- tests/unit/test_problem.py | 14 +- tests/unit/test_sampling.py | 19 +- tests/unit/test_simulator.py | 55 +++++ 71 files changed, 1008 insertions(+), 597 deletions(-) rename pybop/parameters/{priors.py => distributions.py} (62%) rename tests/unit/{test_priors.py => test_distributions.py} (61%) create mode 100644 tests/unit/test_simulator.py diff --git a/CHANGELOG.md b/CHANGELOG.md index d81deccd2..51ddb4bbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ ## Breaking Changes +- [#839](https://github.com/pybop-team/PyBOP/pull/839) - Renames 'prior' as 'distribution' ``for pybop.Parameter``. Allows construction of a ``pybop.Parameter`` with a distribution of type ``scipy.stats.distributions.rv_frozen``. Removes ``margins``, ``set_bounds``, ``remove_bounds`` from ``pybop.Parameter``. + # [v25.11](https://github.com/pybop-team/PyBOP/tree/v25.11) - 2025-11-24 ## Features diff --git a/benchmarks/benchmark_optim_construction.py b/benchmarks/benchmark_optim_construction.py index 3298d59a8..41e9bb5ec 100644 --- a/benchmarks/benchmark_optim_construction.py +++ b/benchmarks/benchmark_optim_construction.py @@ -51,13 +51,11 @@ def setup(self, model, parameter_set, optimiser): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.02), - bounds=[0.375, 0.7], + pybop.Gaussian(0.6, 0.02, truncated_at=[0.375, 0.7]), initial_value=0.63, ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.02), - bounds=[0.375, 0.625], + pybop.Gaussian(0.5, 0.02, truncated_at=[0.375, 0.625]), initial_value=0.51, ), } diff --git a/benchmarks/benchmark_parameterisation.py b/benchmarks/benchmark_parameterisation.py index 8d3d66380..b5edbd5cc 100644 --- a/benchmarks/benchmark_parameterisation.py +++ b/benchmarks/benchmark_parameterisation.py @@ -67,12 +67,10 @@ def setup(self, model, parameter_set, optimiser): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.03), - bounds=[0.375, 0.7], + pybop.Gaussian(0.55, 0.03, truncated_at=[0.375, 0.7]), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.03), - bounds=[0.375, 0.7], + pybop.Gaussian(0.55, 0.03, truncated_at=[0.375, 0.7]), ), } ) diff --git a/benchmarks/benchmark_track_parameterisation.py b/benchmarks/benchmark_track_parameterisation.py index cd4dc9bee..7891e55f3 100644 --- a/benchmarks/benchmark_track_parameterisation.py +++ b/benchmarks/benchmark_track_parameterisation.py @@ -67,12 +67,10 @@ def setup(self, model, parameter_set, optimiser): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.03), - bounds=[0.375, 0.7], + pybop.Gaussian(0.55, 0.03, truncated_at=[0.375, 0.7]), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.03), - bounds=[0.375, 0.7], + pybop.Gaussian(0.55, 0.03, truncated_at=[0.375, 0.7]), ), } ) diff --git a/examples/notebooks/battery_parameterisation/echem_identification_pitfalls.ipynb b/examples/notebooks/battery_parameterisation/echem_identification_pitfalls.ipynb index f5b3795e4..221e33c37 100644 --- a/examples/notebooks/battery_parameterisation/echem_identification_pitfalls.ipynb +++ b/examples/notebooks/battery_parameterisation/echem_identification_pitfalls.ipynb @@ -207,12 +207,10 @@ "source": [ "parameters = {\n", " \"Negative electrode thickness [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(8.52e-05, 0.05e-05),\n", - " bounds=[75e-06, 95e-06],\n", + " pybop.Gaussian(8.52e-05, 0.05e-05, truncated_at=[75e-06, 95e-06]),\n", " ),\n", " \"Positive electrode thickness [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(7.56e-05, 0.05e-05),\n", - " bounds=[65e-06, 85e-06],\n", + " pybop.Gaussian(7.56e-05, 0.05e-05, truncated_at=[65e-06, 85e-06]),\n", " ),\n", "}\n", "true_values = [parameter_values[p] for p in parameters.keys()]\n", diff --git a/examples/notebooks/battery_parameterisation/ecm_monte_carlo_sampling.ipynb b/examples/notebooks/battery_parameterisation/ecm_monte_carlo_sampling.ipynb index aee2d7a2f..4b02d9de9 100644 --- a/examples/notebooks/battery_parameterisation/ecm_monte_carlo_sampling.ipynb +++ b/examples/notebooks/battery_parameterisation/ecm_monte_carlo_sampling.ipynb @@ -292,16 +292,13 @@ "parameter_values.update(\n", " {\n", " \"R0 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(3e-3, 1e-3),\n", - " bounds=[1e-5, 1e-2],\n", + " pybop.Gaussian(3e-3, 1e-3, truncated_at=[1e-5, 1e-2]),\n", " ),\n", " \"R1 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(5e-3, 1e-3),\n", - " bounds=[1e-5, 1e-2],\n", + " pybop.Gaussian(5e-3, 1e-3, truncated_at=[1e-5, 1e-2]),\n", " ),\n", " \"R2 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(1e-4, 5e-5),\n", - " bounds=[1e-5, 1e-2],\n", + " pybop.Gaussian(1e-4, 5e-5, truncated_at=[1e-5, 1e-2]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb b/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb index 9996508cf..88cbe10ff 100644 --- a/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb +++ b/examples/notebooks/battery_parameterisation/ecm_multipulse_identification.ipynb @@ -274,24 +274,19 @@ "parameter_values.update(\n", " {\n", " \"R0 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(r0_guess, r0_guess / 10),\n", - " bounds=[0, 0.1],\n", + " pybop.Gaussian(r0_guess, r0_guess / 10, truncated_at=[0, 0.1]),\n", " ),\n", " \"R1 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(r0_guess, r0_guess / 10),\n", - " bounds=[0, 0.1],\n", - " ),\n", - " \"C1 [F]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(500, 100),\n", - " bounds=[100, 1000],\n", + " pybop.Gaussian(r0_guess, r0_guess / 10, truncated_at=[0, 0.1]),\n", " ),\n", " \"R2 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(r0_guess, r0_guess / 10),\n", - " bounds=[0, 0.1],\n", + " pybop.Gaussian(r0_guess, r0_guess / 10, truncated_at=[0, 0.1]),\n", + " ),\n", + " \"C1 [F]\": pybop.Parameter(\n", + " pybop.Gaussian(500, 100, truncated_at=[100, 1000]),\n", " ),\n", " \"C2 [F]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(2000, 500),\n", - " bounds=[1000, 10000],\n", + " pybop.Gaussian(2000, 500, truncated_at=[1000, 10000]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/battery_parameterisation/ecm_scipy_constraints.ipynb b/examples/notebooks/battery_parameterisation/ecm_scipy_constraints.ipynb index 78c51dfca..f60cf1684 100644 --- a/examples/notebooks/battery_parameterisation/ecm_scipy_constraints.ipynb +++ b/examples/notebooks/battery_parameterisation/ecm_scipy_constraints.ipynb @@ -147,16 +147,13 @@ "parameter_values.update(\n", " {\n", " \"R0 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(1e-2, 1e-3),\n", - " bounds=[1e-3, 1e-1],\n", + " pybop.Gaussian(1e-2, 1e-3, truncated_at=[1e-3, 1e-1]),\n", " ),\n", " \"R1 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(4e-3, 1e-4),\n", - " bounds=[1e-5, 1e-2],\n", + " pybop.Gaussian(4e-3, 1e-4, truncated_at=[1e-5, 1e-2]),\n", " ),\n", " \"C1 [F]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(7000, 300),\n", - " bounds=[1e3, 1e5],\n", + " pybop.Gaussian(7000, 300, truncated_at=[1e3, 1e5]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/battery_parameterisation/electrode_balancing.ipynb b/examples/notebooks/battery_parameterisation/electrode_balancing.ipynb index 3db30060a..370ea2b77 100644 --- a/examples/notebooks/battery_parameterisation/electrode_balancing.ipynb +++ b/examples/notebooks/battery_parameterisation/electrode_balancing.ipynb @@ -114,14 +114,12 @@ "parameter_values.update(\n", " {\n", " \"Initial SoC\": pybop.Parameter(\n", - " prior=pybop.Uniform(0, 0.5),\n", + " pybop.Uniform(0, 0.5),\n", " initial_value=0.05,\n", - " bounds=[0, 0.5],\n", " ),\n", " \"Cell capacity [A.h]\": pybop.Parameter(\n", + " pybop.Uniform(0.01, 50),\n", " initial_value=20,\n", - " prior=pybop.Uniform(0.01, 50),\n", - " bounds=[0.01, 50],\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/battery_parameterisation/lgm50_pulse_validation.ipynb b/examples/notebooks/battery_parameterisation/lgm50_pulse_validation.ipynb index 3533bf2f8..85663aeac 100644 --- a/examples/notebooks/battery_parameterisation/lgm50_pulse_validation.ipynb +++ b/examples/notebooks/battery_parameterisation/lgm50_pulse_validation.ipynb @@ -281,24 +281,19 @@ "parameter_values.update(\n", " {\n", " \"R0 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.005, 0.0001),\n", - " bounds=[1e-6, 2e-1],\n", + " pybop.Gaussian(0.005, 0.0001, truncated_at=[1e-6, 2e-1]),\n", " ),\n", " \"R1 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.0001, 0.0001),\n", - " bounds=[1e-6, 1],\n", + " pybop.Gaussian(0.0001, 0.0001, truncated_at=[1e-6, 1]),\n", " ),\n", " \"R2 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.0001, 0.0001),\n", - " bounds=[1e-6, 1],\n", + " pybop.Gaussian(0.0001, 0.0001, truncated_at=[1e-6, 1]),\n", " ),\n", " \"C1 [F]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(3000, 2500),\n", - " bounds=[0.5, 1e4],\n", + " pybop.Gaussian(3000, 2500, truncated_at=[0.5, 1e4]),\n", " ),\n", " \"C2 [F]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(3000, 2500),\n", - " bounds=[0.5, 1e4],\n", + " pybop.Gaussian(3000, 2500, truncated_at=[0.5, 1e4]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/battery_parameterisation/pouch_cell_identification.ipynb b/examples/notebooks/battery_parameterisation/pouch_cell_identification.ipynb index 27149d34b..466b89c2d 100644 --- a/examples/notebooks/battery_parameterisation/pouch_cell_identification.ipynb +++ b/examples/notebooks/battery_parameterisation/pouch_cell_identification.ipynb @@ -145,7 +145,7 @@ "source": [ "## Identifying the parameters\n", "\n", - "To set up the parameter estimation process, we select the parameters for estimation and set up their prior distributions and bounds." + "To set up the parameter estimation process, we select the parameters for estimation and set up their distributions and bounds." ] }, { @@ -159,12 +159,10 @@ "parameter_values.update(\n", " {\n", " \"Negative electrode active material volume fraction\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.7, 0.05),\n", - " bounds=[0.45, 0.9],\n", + " pybop.Gaussian(0.7, 0.05, truncated_at=[0.45, 0.9]),\n", " ),\n", " \"Positive electrode active material volume fraction\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.58, 0.05),\n", - " bounds=[0.5, 0.8],\n", + " pybop.Gaussian(0.58, 0.05, truncated_at=[0.5, 0.8]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/battery_parameterisation/sensitivity_analysis_salib.ipynb b/examples/notebooks/battery_parameterisation/sensitivity_analysis_salib.ipynb index 6fd7b5eca..bcd6e3360 100644 --- a/examples/notebooks/battery_parameterisation/sensitivity_analysis_salib.ipynb +++ b/examples/notebooks/battery_parameterisation/sensitivity_analysis_salib.ipynb @@ -157,24 +157,19 @@ "parameter_values.update(\n", " {\n", " \"R0 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(r_guess, r_guess / 10),\n", - " bounds=[1e-06, 0.1],\n", + " pybop.Gaussian(r_guess, r_guess / 10, truncated_at=[1e-06, 0.1]),\n", " ),\n", " \"R1 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(r_guess, r_guess / 10),\n", - " bounds=[1e-06, 0.02],\n", + " pybop.Gaussian(r_guess, r_guess / 10, truncated_at=[1e-06, 0.02]),\n", " ),\n", " \"R2 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(r_guess, r_guess / 10),\n", - " bounds=[1e-06, 0.02],\n", + " pybop.Gaussian(r_guess, r_guess / 10, truncated_at=[1e-06, 0.02]),\n", " ),\n", " \"Tau1 [s]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.004, 0.0004),\n", - " bounds=[1e-03, 10],\n", + " pybop.Gaussian(0.004, 0.0004, truncated_at=[1e-03, 10]),\n", " ),\n", " \"Tau2 [s]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(20, 2),\n", - " bounds=[10, 100],\n", + " pybop.Gaussian(20, 2, truncated_at=[10, 100]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/comparison_examples/comparing_cost_functions.ipynb b/examples/notebooks/comparison_examples/comparing_cost_functions.ipynb index 0cdb44d00..882615261 100644 --- a/examples/notebooks/comparison_examples/comparing_cost_functions.ipynb +++ b/examples/notebooks/comparison_examples/comparing_cost_functions.ipynb @@ -106,12 +106,10 @@ "parameter_values.update(\n", " {\n", " \"Positive electrode thickness [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(7.56e-05, 0.5e-05),\n", - " bounds=[65e-06, 10e-05],\n", + " pybop.Gaussian(7.56e-05, 0.5e-05, truncated_at=[65e-06, 10e-05]),\n", " ),\n", " \"Positive particle radius [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(5.22e-06, 0.5e-06),\n", - " bounds=[2e-06, 9e-06],\n", + " pybop.Gaussian(5.22e-06, 0.5e-06, truncated_at=[2e-06, 9e-06]),\n", " ),\n", " }\n", ")\n", @@ -215,7 +213,7 @@ } ], "source": [ - "samples = simulator.parameters.sample_from_priors(2)\n", + "samples = simulator.parameters.sample_from_distributions(2)\n", "print(\"Samples:\", samples)\n", "inputs = [simulator.parameters.to_dict(s) for s in samples]\n", "solution = simulator.solve(inputs)\n", diff --git a/examples/notebooks/comparison_examples/optimiser_calibration.ipynb b/examples/notebooks/comparison_examples/optimiser_calibration.ipynb index 6525b29f2..4d4f2564d 100644 --- a/examples/notebooks/comparison_examples/optimiser_calibration.ipynb +++ b/examples/notebooks/comparison_examples/optimiser_calibration.ipynb @@ -109,7 +109,7 @@ "source": [ "## Identifying the parameters\n", "\n", - "We select the parameters for estimation and set up their prior distributions and bounds:" + "We select the parameters for estimation and set up their distributions and bounds:" ] }, { diff --git a/examples/notebooks/design_optimisation/energy_based_electrode_design.ipynb b/examples/notebooks/design_optimisation/energy_based_electrode_design.ipynb index f10425e70..b606ae4f1 100644 --- a/examples/notebooks/design_optimisation/energy_based_electrode_design.ipynb +++ b/examples/notebooks/design_optimisation/energy_based_electrode_design.ipynb @@ -91,7 +91,7 @@ "id": "ffS3CF_704qA" }, "source": [ - "Next, we define the model parameters for optimisation. Furthermore, PyBOP provides functionality to define a prior for the parameters. The initial parameters values used in the optimisation will be randomly drawn from the prior distribution." + "Next, we define the model parameters for optimisation. Furthermore, PyBOP provides functionality to define a distribution for the parameters. The initial parameters values used in the optimisation will be randomly drawn from the prior distribution." ] }, { @@ -105,12 +105,10 @@ "parameter_values.update(\n", " {\n", " \"Positive electrode thickness [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(7.56e-05, 0.05e-05),\n", - " bounds=[65e-06, 10e-05],\n", + " pybop.Gaussian(7.56e-05, 0.05e-05, truncated_at=[65e-06, 10e-05]),\n", " ),\n", " \"Positive particle radius [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(5.22e-06, 0.05e-06),\n", - " bounds=[2e-06, 9e-06],\n", + " pybop.Gaussian(5.22e-06, 0.05e-06, truncated_at=[2e-06, 9e-06]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/getting_started/maximum_a_posteriori.ipynb b/examples/notebooks/getting_started/maximum_a_posteriori.ipynb index 46d8d1bd9..a9589ce9c 100644 --- a/examples/notebooks/getting_started/maximum_a_posteriori.ipynb +++ b/examples/notebooks/getting_started/maximum_a_posteriori.ipynb @@ -166,10 +166,10 @@ "source": [ "parameters = {\n", " \"Negative particle radius [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(4e-6, 1e-6),\n", + " pybop.Gaussian(4e-6, 1e-6),\n", " ),\n", " \"Positive particle radius [m]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(5e-6, 1e-6),\n", + " pybop.Gaussian(5e-6, 1e-6),\n", " ),\n", "}\n", "true_values = [parameter_values[p] for p in parameters.keys()]\n", diff --git a/examples/notebooks/getting_started/optimising_with_adamw.ipynb b/examples/notebooks/getting_started/optimising_with_adamw.ipynb index 41148e622..13819c043 100644 --- a/examples/notebooks/getting_started/optimising_with_adamw.ipynb +++ b/examples/notebooks/getting_started/optimising_with_adamw.ipynb @@ -99,7 +99,7 @@ "source": [ "## Identifying the parameters\n", "\n", - "We select the model parameters for estimation and set up their prior distributions and bounds:" + "We select the model parameters for estimation and set up their distributions and bounds:" ] }, { @@ -113,12 +113,10 @@ "parameter_values.update(\n", " {\n", " \"Negative electrode active material volume fraction\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.6, 0.02),\n", - " bounds=[0.5, 0.8],\n", + " pybop.Gaussian(0.6, 0.02, truncated_at=[0.5, 0.8]),\n", " ),\n", " \"Positive electrode active material volume fraction\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.48, 0.02),\n", - " bounds=[0.4, 0.7],\n", + " pybop.Gaussian(0.48, 0.02, truncated_at=[0.4, 0.7]),\n", " ),\n", " }\n", ")" diff --git a/examples/notebooks/getting_started/setting_optimiser_options.ipynb b/examples/notebooks/getting_started/setting_optimiser_options.ipynb index aa25dbbc6..e1ddd8ace 100644 --- a/examples/notebooks/getting_started/setting_optimiser_options.ipynb +++ b/examples/notebooks/getting_started/setting_optimiser_options.ipynb @@ -86,8 +86,11 @@ "parameter_values.update(\n", " {\n", " \"R0 [Ohm]\": pybop.Parameter(\n", - " prior=pybop.Gaussian(0.0002, 0.0001),\n", - " bounds=[1e-4, 1e-2],\n", + " pybop.Gaussian(\n", + " 0.0002,\n", + " 0.0001,\n", + " truncated_at=[1e-4, 1e-2],\n", + " )\n", " )\n", " }\n", ")\n", diff --git a/examples/scripts/battery_parameterisation/ecm_tau_redefined.py b/examples/scripts/battery_parameterisation/ecm_tau_redefined.py index ae110a133..3f91007c6 100644 --- a/examples/scripts/battery_parameterisation/ecm_tau_redefined.py +++ b/examples/scripts/battery_parameterisation/ecm_tau_redefined.py @@ -96,16 +96,25 @@ parameter_values.update( { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.0002, 0.0001), - bounds=[1e-4, 1e-2], + pybop.Gaussian( + 0.0002, + 0.0001, + truncated_at=[1e-4, 1e-2], + ), ), "R1 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.0001, 0.0001), - bounds=[1e-5, 1e-2], + pybop.Gaussian( + 0.0001, + 0.0001, + truncated_at=[1e-5, 1e-2], + ), ), "tau1 [s]": pybop.Parameter( - prior=pybop.Gaussian(1.0, 0.025), - bounds=[0, 3.0], + pybop.Gaussian( + 1.0, + 0.025, + truncated_at=[0, 3.0], + ), ), } ) diff --git a/examples/scripts/battery_parameterisation/full_cell_balancing.py b/examples/scripts/battery_parameterisation/full_cell_balancing.py index e87f5614d..1b87344cb 100644 --- a/examples/scripts/battery_parameterisation/full_cell_balancing.py +++ b/examples/scripts/battery_parameterisation/full_cell_balancing.py @@ -62,23 +62,35 @@ def noisy(data, sigma): parameter_values.update( { "Maximum concentration in negative electrode [mol.m-3]": pybop.Parameter( - prior=pybop.Gaussian(cs_n_max, 6e3), - bounds=[cs_n_max * 0.75, cs_n_max * 1.25], + pybop.Gaussian( + cs_n_max, + 6e3, + truncated_at=[cs_n_max * 0.75, cs_n_max * 1.25], + ), initial_value=cs_n_max * 0.8, ), "Maximum concentration in positive electrode [mol.m-3]": pybop.Parameter( - prior=pybop.Gaussian(cs_p_max, 6e3), - bounds=[cs_p_max * 0.75, cs_p_max * 1.25], + pybop.Gaussian( + cs_p_max, + 6e3, + truncated_at=[cs_p_max * 0.75, cs_p_max * 1.25], + ), initial_value=cs_p_max * 0.8, ), "Initial concentration in negative electrode [mol.m-3]": pybop.Parameter( - prior=pybop.Gaussian(cs_n_init, 6e3), - bounds=[cs_n_max * 0.75, cs_n_max * 1.25], + pybop.Gaussian( + cs_n_init, + 6e3, + truncated_at=[cs_n_max * 0.75, cs_n_max * 1.25], + ), initial_value=cs_n_max * 0.8, ), "Initial concentration in positive electrode [mol.m-3]": pybop.Parameter( - prior=pybop.Gaussian(cs_p_init, 6e3), - bounds=[0, cs_p_max * 0.5], + pybop.Gaussian( + cs_p_init, + 6e3, + truncated_at=[0, cs_p_max * 0.5], + ), initial_value=cs_p_max * 0.2, ), } diff --git a/examples/scripts/battery_parameterisation/simple_dfn.py b/examples/scripts/battery_parameterisation/simple_dfn.py index 4185f7abe..f3e404313 100644 --- a/examples/scripts/battery_parameterisation/simple_dfn.py +++ b/examples/scripts/battery_parameterisation/simple_dfn.py @@ -45,14 +45,20 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), + pybop.Gaussian( + 0.68, + 0.05, + truncated_at=[0.4, 0.9], + ), initial_value=0.65, - bounds=[0.4, 0.9], ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), + pybop.Gaussian( + 0.58, + 0.05, + truncated_at=[0.4, 0.9], + ), initial_value=0.65, - bounds=[0.4, 0.9], ), } ) diff --git a/examples/scripts/battery_parameterisation/simple_ecm.py b/examples/scripts/battery_parameterisation/simple_ecm.py index 931336e33..3b30d8dae 100644 --- a/examples/scripts/battery_parameterisation/simple_ecm.py +++ b/examples/scripts/battery_parameterisation/simple_ecm.py @@ -79,12 +79,18 @@ parameter_values.update( { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.0002, 0.0001), - bounds=[1e-4, 1e-2], + pybop.Gaussian( + 0.0002, + 0.0001, + truncated_at=[1e-4, 1e-2], + ) ), "R1 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.0001, 0.0001), - bounds=[1e-5, 1e-3], + pybop.Gaussian( + 0.0001, + 0.0001, + truncated_at=[1e-5, 1e-3], + ) ), } ) diff --git a/examples/scripts/battery_parameterisation/simple_eis.py b/examples/scripts/battery_parameterisation/simple_eis.py index 518b248e8..ec4b17fc6 100644 --- a/examples/scripts/battery_parameterisation/simple_eis.py +++ b/examples/scripts/battery_parameterisation/simple_eis.py @@ -63,12 +63,10 @@ def noisy(data, sigma): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.4, 0.75), - bounds=[0.375, 0.75], + pybop.Uniform(0.4, 0.75) ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.4, 0.75), - bounds=[0.375, 0.75], + pybop.Uniform(0.4, 0.75) ), } ) diff --git a/examples/scripts/comparison_examples/gitt_models.py b/examples/scripts/comparison_examples/gitt_models.py index b8660029f..933e395ef 100644 --- a/examples/scripts/comparison_examples/gitt_models.py +++ b/examples/scripts/comparison_examples/gitt_models.py @@ -35,10 +35,7 @@ for model in [pybop.lithium_ion.WeppnerHuggins(), pybop.lithium_ion.SPDiffusion()]: # GITT target parameter - diffusion_parameter = pybop.Parameter( - prior=pybop.Gaussian(5000, 1000), - ) - + diffusion_parameter = pybop.Parameter(pybop.Gaussian(5000, 1000)) if isinstance(model, pybop.lithium_ion.WeppnerHuggins): # Group parameter values grouped_parameter_values = ( diff --git a/examples/scripts/comparison_examples/multi_start_optimisation.py b/examples/scripts/comparison_examples/multi_start_optimisation.py index e637ba204..c842bfda2 100644 --- a/examples/scripts/comparison_examples/multi_start_optimisation.py +++ b/examples/scripts/comparison_examples/multi_start_optimisation.py @@ -35,10 +35,10 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.65, 0.1), + pybop.Gaussian(0.65, 0.1) ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.1), + pybop.Gaussian(0.55, 0.1) ), } ) diff --git a/examples/scripts/design_optimisation/maximising_energy.py b/examples/scripts/design_optimisation/maximising_energy.py index 710a4dbea..46436300f 100644 --- a/examples/scripts/design_optimisation/maximising_energy.py +++ b/examples/scripts/design_optimisation/maximising_energy.py @@ -46,12 +46,10 @@ parameter_values.update( { "Positive electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(7.56e-05, 0.1e-05), - bounds=[65e-06, 10e-05], + pybop.Gaussian(7.56e-05, 0.1e-05, truncated_at=[65e-06, 10e-05]), ), "Positive particle radius [m]": pybop.Parameter( - prior=pybop.Gaussian(5.22e-06, 0.1e-06), - bounds=[2e-06, 9e-06], + pybop.Gaussian(5.22e-06, 0.1e-06, truncated_at=[2e-06, 9e-06]), ), } ) diff --git a/examples/scripts/design_optimisation/maximising_power.py b/examples/scripts/design_optimisation/maximising_power.py index 8395e6717..bd4d980a8 100644 --- a/examples/scripts/design_optimisation/maximising_power.py +++ b/examples/scripts/design_optimisation/maximising_power.py @@ -46,12 +46,14 @@ parameter_values.update( { "Positive electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(7.56e-05, 0.5e-05), - bounds=[65e-06, 10e-05], + pybop.Gaussian(7.56e-05, 0.5e-05, truncated_at=[65e-06, 10e-05]), ), "Nominal cell capacity [A.h]": pybop.Parameter( # controls the C-rate in the experiment - prior=pybop.Gaussian(discharge_rate, 0.2), - bounds=[0.8 * discharge_rate, 1.2 * discharge_rate], + pybop.Gaussian( + discharge_rate, + 0.2, + truncated_at=[0.8 * discharge_rate, 1.2 * discharge_rate], + ), ), } ) diff --git a/examples/scripts/getting_started/exponential_decay.py b/examples/scripts/getting_started/exponential_decay.py index ae6a53b1a..d0cf47edb 100644 --- a/examples/scripts/getting_started/exponential_decay.py +++ b/examples/scripts/getting_started/exponential_decay.py @@ -30,8 +30,8 @@ def noisy(data, sigma): # Fitting parameters parameter_values.update( { - "k": pybop.Parameter(prior=pybop.Gaussian(0.5, 0.05)), - "y0": pybop.Parameter(prior=pybop.Gaussian(0.2, 0.05)), + "k": pybop.Parameter(pybop.Gaussian(0.5, 0.05)), + "y0": pybop.Parameter(pybop.Gaussian(0.2, 0.05)), } ) diff --git a/examples/scripts/getting_started/fitting_multiple_problems.py b/examples/scripts/getting_started/fitting_multiple_problems.py index 9fdeddfd9..1ecd17509 100644 --- a/examples/scripts/getting_started/fitting_multiple_problems.py +++ b/examples/scripts/getting_started/fitting_multiple_problems.py @@ -48,10 +48,10 @@ param_copy.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), + pybop.Gaussian(0.68, 0.05), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), + pybop.Gaussian(0.58, 0.05), ), } ) diff --git a/examples/scripts/getting_started/functional_parameters.py b/examples/scripts/getting_started/functional_parameters.py index 2b783b7dd..c3c8d3905 100644 --- a/examples/scripts/getting_started/functional_parameters.py +++ b/examples/scripts/getting_started/functional_parameters.py @@ -67,10 +67,10 @@ def positive_electrode_exchange_current_density(c_e, c_s_surf, c_s_max, T): parameter_values.update( { "Positive electrode reference exchange-current density [A.m-2]": pybop.Parameter( - prior=pybop.Gaussian(1, 0.1), + distribution=pybop.Gaussian(1, 0.1), ), "Positive electrode charge transfer coefficient": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.1), + distribution=pybop.Gaussian(0.5, 0.1), ), } ) diff --git a/examples/scripts/getting_started/linked_parameters.py b/examples/scripts/getting_started/linked_parameters.py index a44806890..505d620bb 100644 --- a/examples/scripts/getting_started/linked_parameters.py +++ b/examples/scripts/getting_started/linked_parameters.py @@ -64,12 +64,18 @@ parameter_values.update( { "Positive electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(7.56e-05, 0.1e-05), - bounds=[65e-06, 10e-05], + distribution=pybop.Gaussian( + 7.56e-05, + 0.1e-05, + truncated_at=[65e-06, 10e-05], + ), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.15), - bounds=[0.1, 0.9], + distribution=pybop.Gaussian( + 0.6, + 0.15, + truncated_at=[0.1, 0.9], + ), ), } ) diff --git a/examples/scripts/getting_started/maximum_a_posteriori.py b/examples/scripts/getting_started/maximum_a_posteriori.py index cfd791c08..937f4aa55 100644 --- a/examples/scripts/getting_started/maximum_a_posteriori.py +++ b/examples/scripts/getting_started/maximum_a_posteriori.py @@ -40,14 +40,12 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.3, 0.8), - bounds=[0.3, 0.8], + distribution=pybop.Uniform(0.3, 0.8), initial_value=0.653, transformation=pybop.LogTransformation(), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.3, 0.8), - bounds=[0.4, 0.7], + distribution=pybop.Uniform(0.3, 0.8), initial_value=0.657, transformation=pybop.LogTransformation(), ), diff --git a/examples/scripts/getting_started/maximum_likelihood.py b/examples/scripts/getting_started/maximum_likelihood.py index 5664b5274..3d74dfa15 100644 --- a/examples/scripts/getting_started/maximum_likelihood.py +++ b/examples/scripts/getting_started/maximum_likelihood.py @@ -36,11 +36,14 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.05), - bounds=[0.5, 0.8], + distribution=pybop.Gaussian( + 0.6, + 0.05, + truncated_at=[0.5, 0.8], + ) ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.48, 0.05), + distribution=pybop.Gaussian(0.48, 0.05), ), } ) diff --git a/examples/scripts/getting_started/monte_carlo_sampling.py b/examples/scripts/getting_started/monte_carlo_sampling.py index c8e50874e..37faaafa5 100644 --- a/examples/scripts/getting_started/monte_carlo_sampling.py +++ b/examples/scripts/getting_started/monte_carlo_sampling.py @@ -39,11 +39,11 @@ def noisy(data, sigma): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.02), + distribution=pybop.Gaussian(0.68, 0.02), transformation=pybop.LogTransformation(), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.65, 0.02), + distribution=pybop.Gaussian(0.65, 0.02), transformation=pybop.LogTransformation(), ), } diff --git a/examples/scripts/getting_started/optimising_with_adamw.py b/examples/scripts/getting_started/optimising_with_adamw.py index f1c60c9c9..ffad9388a 100644 --- a/examples/scripts/getting_started/optimising_with_adamw.py +++ b/examples/scripts/getting_started/optimising_with_adamw.py @@ -32,14 +32,16 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), + distribution=pybop.Gaussian( + 0.68, + 0.05, + truncated_at=[0.4, 0.9], + ), initial_value=0.45, - bounds=[0.4, 0.9], ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), + distribution=pybop.Gaussian(0.58, 0.05, truncated_at=[0.4, 0.9]), initial_value=0.45, - bounds=[0.4, 0.9], ), } ) diff --git a/examples/scripts/getting_started/optimising_with_scipy_minimize.py b/examples/scripts/getting_started/optimising_with_scipy_minimize.py index be6d0c180..8300ad71d 100644 --- a/examples/scripts/getting_started/optimising_with_scipy_minimize.py +++ b/examples/scripts/getting_started/optimising_with_scipy_minimize.py @@ -42,12 +42,18 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.05), - bounds=[0.5, 0.8], + distribution=pybop.Gaussian( + 0.6, + 0.05, + truncated_at=[0.5, 0.8], + ), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.48, 0.05), - bounds=[0.4, 0.7], + distribution=pybop.Gaussian( + 0.48, + 0.05, + truncated_at=[0.4, 0.7], + ), ), } ) diff --git a/examples/scripts/getting_started/optimising_with_simulated_annealing.py b/examples/scripts/getting_started/optimising_with_simulated_annealing.py index 3113486fe..0f8fb6859 100644 --- a/examples/scripts/getting_started/optimising_with_simulated_annealing.py +++ b/examples/scripts/getting_started/optimising_with_simulated_annealing.py @@ -36,12 +36,18 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.1), - bounds=[0.4, 0.85], + distribution=pybop.Gaussian( + 0.6, + 0.1, + truncated_at=[0.4, 0.85], + ), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.1), - bounds=[0.4, 0.85], + distribution=pybop.Gaussian( + 0.6, + 0.1, + truncated_at=[0.4, 0.85], + ), ), } ) diff --git a/examples/scripts/getting_started/pints_ask_tell_interface.py b/examples/scripts/getting_started/pints_ask_tell_interface.py index 52e698660..bd6de0d04 100644 --- a/examples/scripts/getting_started/pints_ask_tell_interface.py +++ b/examples/scripts/getting_started/pints_ask_tell_interface.py @@ -29,10 +29,10 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.05), + distribution=pybop.Gaussian(0.55, 0.05), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.05), + distribution=pybop.Gaussian(0.55, 0.05), ), } ) diff --git a/examples/scripts/getting_started/weighted_cost.py b/examples/scripts/getting_started/weighted_cost.py index e40706a31..4c9e264da 100644 --- a/examples/scripts/getting_started/weighted_cost.py +++ b/examples/scripts/getting_started/weighted_cost.py @@ -54,12 +54,14 @@ def noisy(data, sigma): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), - bounds=[0.5, 0.8], + distribution=pybop.Gaussian(0.68, 0.05, truncated_at=[0.5, 0.8]) ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), - bounds=[0.4, 0.7], + distribution=pybop.Gaussian( + 0.58, + 0.05, + truncated_at=[0.4, 0.7], + ) ), } ) diff --git a/multiprocessing_bench.py b/multiprocessing_bench.py index 5ee7dc7ab..db18e76f2 100644 --- a/multiprocessing_bench.py +++ b/multiprocessing_bench.py @@ -33,14 +33,12 @@ parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), + pybop.Gaussian(0.68, 0.05, truncated_at=[0.4, 0.9]), initial_value=0.65, - bounds=[0.4, 0.9], ), - "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), + "Positive electrode active material volume fraction": pybop.ParameterDistrbution( + pybop.Gaussian(0.58, 0.05, truncated_at=[0.4, 0.9]), initial_value=0.65, - bounds=[0.4, 0.9], ), } ) diff --git a/noxfile.py b/noxfile.py index bac75313a..687b240f4 100644 --- a/noxfile.py +++ b/noxfile.py @@ -114,7 +114,6 @@ def run_tests(session): "--integration", "--nbmake", "--examples", - "--notebooks", "-n", "auto", *specific_tests, @@ -151,6 +150,7 @@ def run_quick(session): """ run_tests(session) run_doc_tests(session) + notebooks(session) @nox.session diff --git a/pybop/__init__.py b/pybop/__init__.py index 3e6b2d846..ad5b90035 100644 --- a/pybop/__init__.py +++ b/pybop/__init__.py @@ -48,7 +48,7 @@ # Parameter classes # from .parameters.parameter import Parameter, Parameters -from .parameters.priors import BasePrior, Gaussian, Uniform, Exponential, JointPrior +from .parameters.distributions import (Distribution, Gaussian, Uniform, Exponential, JointDistribution) # # Model classes diff --git a/pybop/costs/likelihoods.py b/pybop/costs/likelihoods.py index 46388bf1d..6ad8f5396 100644 --- a/pybop/costs/likelihoods.py +++ b/pybop/costs/likelihoods.py @@ -3,8 +3,8 @@ from pybop._dataset import Dataset from pybop.costs.error_measures import ErrorMeasure +from pybop.parameters.distributions import Distribution, JointDistribution, Uniform from pybop.parameters.parameter import Inputs, Parameter, Parameters -from pybop.parameters.priors import BasePrior, JointPrior, Uniform class LogLikelihood(ErrorMeasure): @@ -133,9 +133,8 @@ def _add_single_sigma(self, index, value): sigma = value elif isinstance(value, int | float): sigma = Parameter( + distribution=Uniform(1e-8 * value, 3 * value), initial_value=value, - prior=Uniform(1e-8 * value, 3 * value), - bounds=[1e-8, 3 * value], ) else: raise TypeError( @@ -198,16 +197,16 @@ class LogPosterior(LogLikelihood): --------------------- log_likelihood : LogLikelihood The likelihood class of type ``LogLikelihood``. - prior : Optional, Union[pybop.BasePrior, stats.rv_continuous] - The prior class of type ``BasePrior`` or ``stats.rv_continuous``. - If not provided, the prior class will be taken from the parameter priors + prior : Optional, Union[pybop.Parameter, stats.distributions.rv_frozen] + The prior class of type ``Parameter``, ``Distribution`` or ``stats.distributions.rv_frozen``. + If not provided, the prior class will be taken from the parameter distributions constructed in the `pybop.Parameters` class. """ def __init__( self, log_likelihood: LogLikelihood, - prior: BasePrior | stats.rv_continuous | None = None, + prior: Parameter | stats.distributions.rv_frozen | Distribution | None = None, ): dataset = Dataset(log_likelihood.dataset) dataset.domain = log_likelihood.domain @@ -219,9 +218,17 @@ def __init__( def set_joint_prior(self): if self.prior is None: - self.joint_prior = JointPrior(*self.parameters.priors()) - else: + self.joint_prior = JointDistribution(*self.parameters.distributions()) + elif isinstance(self.prior, (stats.distributions.rv_frozen)): + self.joint_prior = Distribution(self.prior) + elif isinstance(self.prior, Parameter): + self.joint_prior = self.prior.distribution + elif isinstance(self.prior, Distribution): self.joint_prior = self.prior + else: + raise TypeError( + "All priors must either be of type pybop.Parameter, pybop.Distribution or scipy.stats.distributions.rv_frozen" + ) def __call__( self, diff --git a/pybop/optimisers/base_optimiser.py b/pybop/optimisers/base_optimiser.py index f46542bee..9f8055e60 100644 --- a/pybop/optimisers/base_optimiser.py +++ b/pybop/optimisers/base_optimiser.py @@ -144,9 +144,9 @@ def run(self) -> OptimisationResult: results = [] for i in range(self._multistart): if i >= 1: - if not self.problem.parameters.priors(): - raise RuntimeError("Priors must be provided for multi-start") - initial_values = self.problem.parameters.sample_from_priors(1)[0] + if not self.problem.parameters.distributions(): + raise RuntimeError("Distributions must be provided for multi-start") + initial_values = self.problem.parameters.sample_from_distributions(1)[0] self.problem.parameters.update(initial_values=initial_values) self._set_up_optimiser() results.append(self._run()) diff --git a/pybop/parameters/priors.py b/pybop/parameters/distributions.py similarity index 62% rename from pybop/parameters/priors.py rename to pybop/parameters/distributions.py index 12574c736..7562c2bbb 100644 --- a/pybop/parameters/priors.py +++ b/pybop/parameters/distributions.py @@ -2,27 +2,29 @@ import scipy.stats as stats -class BasePrior: +class Distribution: """ - A base class for defining prior distributions. + A base class for defining parameter distributions. - This class provides a foundation for implementing various prior distributions. + This class provides a foundation for implementing various distributions. It includes methods for calculating the probability density function (PDF), log probability density function (log PDF), and generating random variates from the distribution. Attributes ---------- - distribution : scipy.stats.rv_continuous + distribution : scipy.stats.distributions.rv_frozen The underlying continuous random variable distribution. - loc : float - The location parameter of the distribution. - scale : float - The scale parameter of the distribution. """ - def __init__(self): - pass + def __init__( + self, + distribution: stats.distributions.rv_frozen | None = None, + ): + self.distribution = distribution + + def support(self): + return self.distribution.support() def pdf(self, x): """ @@ -38,7 +40,10 @@ def pdf(self, x): float The probability density function value at x. """ - return self.distribution.pdf(x, loc=self.loc, scale=self.scale) + if self.distribution is None: + raise NotImplementedError + else: + return self.distribution.pdf(x) def logpdf(self, x): """ @@ -54,7 +59,10 @@ def logpdf(self, x): float The logarithm of the probability density function value at x. """ - return self.distribution.logpdf(x, loc=self.loc, scale=self.scale) + if self.distribution is None: + raise NotImplementedError + else: + return self.distribution.logpdf(x) def icdf(self, q): """ @@ -70,7 +78,10 @@ def icdf(self, q): float The inverse cumulative distribution function value at q. """ - return self.distribution.ppf(q, loc=self.loc, scale=self.scale) + if self.distribution is None: + raise NotImplementedError + else: + return self.distribution.ppf(q) def cdf(self, x): """ @@ -86,7 +97,10 @@ def cdf(self, x): float The cumulative distribution function value at x. """ - return self.distribution.cdf(x, loc=self.loc, scale=self.scale) + if self.distribution is None: + raise NotImplementedError + else: + return self.distribution.cdf(x) def rvs(self, size=1, random_state=None): """ @@ -118,9 +132,10 @@ def rvs(self, size=1, random_state=None): if isinstance(size, tuple) and any(s < 1 for s in size): raise ValueError("size must be a tuple of positive integers") - return self.distribution.rvs( - loc=self.loc, scale=self.scale, size=size, random_state=random_state - ) + if self.distribution is None: + raise NotImplementedError + else: + return self.distribution.rvs(size=size, random_state=random_state) def logpdfS1(self, x): """ @@ -156,12 +171,15 @@ def _dlogpdf_dx(self, x): float The value(s) of the first derivative at x. """ - # Use a finite difference approximation of the gradient - delta = max(abs(x) * 1e-3, np.finfo(float).eps) - log_prior_upper = self.joint_prior.logpdf(x + delta) - log_prior_lower = self.joint_prior.logpdf(x - delta) + if self.distribution is None: + raise NotImplementedError + else: + # Use a finite difference approximation of the gradient + delta = max(abs(x) * 1e-3, np.finfo(float).eps) + log_distribution_upper = self.logpdf(x + delta) + log_distribution_lower = self.logpdf(x - delta) - return (log_prior_upper - log_prior_lower) / (2 * delta) + return (log_distribution_upper - log_distribution_lower) / (2 * delta) def verify(self, x): """ @@ -174,29 +192,35 @@ def verify(self, x): return x def __repr__(self): - """Return a string representation of the object.""" - return f"{self.__class__.__name__}, loc: {self.loc}, scale: {self.scale}" + """ + Returns a string representation of the object. + """ + return f"{self.__class__.__name__}, mean: {self.mean()}, standard deviation: {self.std()}" - @property def mean(self): - """The mean of the distribution.""" - return self.distribution.mean(loc=self.loc, scale=self.scale) + """ + Get the mean of the distribution. - @property - def sigma(self): - """The standard deviation of the distribution.""" - return self.distribution.std(loc=self.loc, scale=self.scale) + Returns + ------- + float + The mean of the distribution. + """ + return self.distribution.mean() - def bounds(self) -> tuple[float, float] | None: - """Get the bounds of the distribution, if any.""" - upper = self.distribution.ppf(1, loc=self.loc, scale=self.scale) - lower = self.distribution.ppf(0, loc=self.loc, scale=self.scale) - if np.isinf(upper) and np.isinf(lower): - return None - return (lower, upper) + def std(self): + """ + Get the standard deviation of the distribution. + + Returns + ------- + float + The standard deviation of the distribution. + """ + return self.distribution.std() -class Gaussian(BasePrior): +class Gaussian(Distribution): """ Represents a Gaussian (normal) distribution with a given mean and standard deviation. @@ -211,13 +235,26 @@ class Gaussian(BasePrior): The standard deviation (sigma) of the Gaussian distribution. """ - def __init__(self, mean, sigma, random_state=None): - super().__init__() + def __init__( + self, + mean, + sigma, + truncated_at: list[float] = None, + ): + if truncated_at is not None: + distribution = stats.truncnorm( + (truncated_at[0] - mean) / sigma, + (truncated_at[1] - mean) / sigma, + loc=mean, + scale=sigma, + ) + else: + distribution = stats.norm(loc=mean, scale=sigma) + super().__init__(distribution) self.name = "Gaussian" + self._n_parameters = 1 self.loc = mean self.scale = sigma - self.distribution = stats.norm - self._n_parameters = 1 def _dlogpdf_dx(self, x): """ @@ -236,7 +273,7 @@ def _dlogpdf_dx(self, x): return (self.loc - x) / self.scale**2 -class Uniform(BasePrior): +class Uniform(Distribution): """ Represents a uniform distribution over a specified interval. @@ -251,14 +288,15 @@ class Uniform(BasePrior): The upper bound of the distribution. """ - def __init__(self, lower, upper, random_state=None): - super().__init__() + def __init__( + self, + lower, + upper, + ): + super().__init__(stats.uniform(loc=lower, scale=upper - lower)) self.name = "Uniform" self.lower = lower self.upper = upper - self.loc = lower - self.scale = upper - lower - self.distribution = stats.uniform self._n_parameters = 1 def _dlogpdf_dx(self, x): @@ -277,8 +315,20 @@ def _dlogpdf_dx(self, x): """ return np.zeros_like(x) + def mean(self): + """ + Returns the mean of the distribution. + """ + return (self.upper - self.lower) / 2 -class Exponential(BasePrior): + def __repr__(self): + """ + Returns a string representation of the object. + """ + return f"{self.__class__.__name__}, lower: {self.lower}, upper: {self.upper}" + + +class Exponential(Distribution): """ Represents an exponential distribution with a specified scale parameter. @@ -291,13 +341,16 @@ class Exponential(BasePrior): The scale parameter (lambda) of the exponential distribution. """ - def __init__(self, loc=0, scale=1, random_state=None): - super().__init__() + def __init__( + self, + scale: float, + loc: float = 0, + ): + super().__init__(stats.expon(loc=loc, scale=scale)) self.name = "Exponential" + self._n_parameters = 1 self.loc = loc self.scale = scale - self.distribution = stats.expon - self._n_parameters = 1 def _dlogpdf_dx(self, x): """ @@ -315,32 +368,48 @@ def _dlogpdf_dx(self, x): """ return -1 / self.scale * np.ones_like(x) + def __repr__(self): + """ + Returns a string representation of the object. + """ + return f"{self.__class__.__name__}, loc: {self.loc}, scale: {self.scale}" + -class JointPrior(BasePrior): +class JointDistribution(Distribution): """ - Represents a joint prior distribution composed of multiple prior distributions. + Represents a joint distribution composed of multiple distributions. Parameters ---------- - priors : BasePrior - One or more prior distributions to combine into a joint distribution. + distributions : Distribution + One or more distributions to combine into a joint distribution. """ - def __init__(self, *priors: BasePrior): + def __init__(self, *distributions: Distribution | stats.distributions.rv_frozen): super().__init__() - if all(prior is None for prior in priors): + if all(distribution is None for distribution in distributions): return - if not all(isinstance(prior, BasePrior) for prior in priors): - raise ValueError("All priors must be instances of BasePrior") + if not all( + isinstance(distribution, (Distribution, stats.distributions.rv_frozen)) + for distribution in distributions + ): + raise ValueError( + "All distributions must be instances of Distribution or scipy.stats.distributions.rv_frozen" + ) - self._n_parameters = len(priors) - self._priors: list[BasePrior] = list(priors) + self._n_parameters = len(distributions) + self._distributions: list[Distribution] = [ + distribution + if isinstance(distribution, Distribution) + else Distribution(distribution) + for distribution in distributions + ] def logpdf(self, x: float | np.ndarray) -> float: """ - Evaluates the joint log-prior distribution at a given point. + Evaluates the log of the joint distribution at a given point. Parameters ---------- @@ -358,11 +427,14 @@ def logpdf(self, x: float | np.ndarray) -> float: f"Input x must have length {self._n_parameters}, got {len(x)}" ) - return sum(prior.logpdf(x) for prior, x in zip(self._priors, x, strict=False)) + return sum( + distribution.logpdf(x) + for distribution, x in zip(self._distributions, x, strict=False) + ) def logpdfS1(self, x: float | np.ndarray) -> tuple[float, np.ndarray]: """ - Evaluates the first derivative of the joint log-prior distribution at a given point. + Evaluates the first derivative of the log of the joint distribution at a given point. Parameters ---------- @@ -383,8 +455,8 @@ def logpdfS1(self, x: float | np.ndarray) -> tuple[float, np.ndarray]: log_probs = [] derivatives = [] - for prior, xi in zip(self._priors, x, strict=False): - p, dp = prior.logpdfS1(xi) + for distribution, xi in zip(self._distributions, x, strict=False): + p, dp = distribution.logpdfS1(xi) log_probs.append(p) derivatives.append(dp) @@ -397,5 +469,7 @@ def logpdfS1(self, x: float | np.ndarray) -> tuple[float, np.ndarray]: return output, doutput.T def __repr__(self) -> str: - priors_repr = ", ".join([repr(prior) for prior in self._priors]) - return f"{self.__class__.__name__}(priors: [{priors_repr}])" + distributions_repr = "; ".join( + [repr(distribution) for distribution in self._distributions] + ) + return f"{self.__class__.__name__}(distributions: [{distributions_repr}])" diff --git a/pybop/parameters/parameter.py b/pybop/parameters/parameter.py index ba68f15a7..b041c3a73 100644 --- a/pybop/parameters/parameter.py +++ b/pybop/parameters/parameter.py @@ -7,9 +7,10 @@ from typing import Any import numpy as np +import scipy.stats as stats from numpy.typing import NDArray -from pybop.parameters.priors import BasePrior, Uniform +from pybop.parameters.distributions import Distribution from pybop.transformation.base_transformation import Transformation from pybop.transformation.transformations import ( ComposedTransformation, @@ -90,47 +91,56 @@ class Parameter: """ Represents a parameter within the PyBOP framework. - This class encapsulates the definition of a parameter, including its name, prior - distribution, initial value, bounds, and a margin to ensure the parameter stays - within feasible limits during optimisation or sampling. + This class encapsulates the definition of a parameter, including its + initial value, bounds. Parameters ---------- - initial_value : NumericValue, optional - Initial parameter value + distribution : stats.distribution.rv_frozen | Distribution + Distribution of the parameter bounds : tuple[float, float], optional Parameter bounds as (lower, upper) - prior : pybop.BasePrior, optional - Prior distribution object + initial_value : NumericValue, optional + Initial parameter value transformation : Transformation, optional Parameter transformation - margin : float, default=1e-4 - Safety margin for bounds sampling """ def __init__( self, - *, - initial_value: float = None, + distribution: stats.distributions.rv_frozen | Distribution | None = None, bounds: BoundsPair | None = None, - prior: BasePrior | None = None, + initial_value: float = None, transformation: Transformation | None = None, - margin: float = 1e-4, ) -> None: - self._prior = prior + self._distribution = distribution + self._bounds = None self._transformation = transformation or IdentityTransformation() - # Set bounds with validation - self._bounds: Bounds | None = None + if self._distribution is not None: + lower, upper = self._distribution.support() + if np.isinf(lower) and np.isinf(upper): + self._bounds = None + else: + self._bounds = Bounds(lower, upper) + if bounds is not None: + if distribution is not None: + raise ParameterError( + "Bounds can only be set if no distribution is provided. If a bounded distribution is needed, please ensure the distribution itself is bounded." + ) + # Set bounds with validation self._bounds = Bounds(bounds[0], bounds[1]) - if self._prior is None and all(np.isfinite(np.asarray(bounds))): - self._prior = Uniform(bounds[0], bounds[1]) - self._set_margin(margin) + # Add uniform distribution for finite bounds in order to sample initial values + if all(np.isfinite(np.asarray(bounds))): + self._distribution = stats.uniform( + loc=bounds[0], scale=bounds[1] - bounds[0] + ) + + if initial_value is None and self._distribution is not None: + initial_value = self.sample_from_distribution()[0] # Validate and set values - if initial_value is None and self._prior is not None: - initial_value = self.sample_from_prior()[0] self._initial_value = ( float(initial_value) if initial_value is not None else None ) @@ -138,7 +148,7 @@ def __init__( # Validate initial values are within bounds self._validate_values_within_bounds() - def sample_from_prior( + def sample_from_distribution( self, n_samples: int = 1, *, @@ -146,7 +156,7 @@ def sample_from_prior( transformed: bool = False, ) -> NDArray[np.floating] | None: """ - Sample from parameter's prior distribution. + Sample from parameter's distribution. Parameters ---------- @@ -160,21 +170,14 @@ def sample_from_prior( Returns ------- NDArray[np.floating] or None - Array of samples, or None if no prior exists + Array of samples, or None if no distribution exists exists """ - if self._prior is None: + if self._distribution is None: return None - samples = self._prior.rvs(n_samples, random_state=random_state) + samples = self._distribution.rvs(n_samples, random_state=random_state) samples = np.atleast_1d(samples).astype(float) - # Apply bounds clipping if bounds exist - if self._bounds is not None: - offset = self._margin * self._bounds.width() - effective_lower = self._bounds.lower + offset - effective_upper = self._bounds.upper - offset - samples = np.clip(samples, effective_lower, effective_upper) - if transformed: samples = np.array([self._transformation.to_search(s)[0] for s in samples]) @@ -193,34 +196,7 @@ def update_initial_value(self, value: NumericValue) -> None: def __repr__(self) -> str: """String representation of the parameter.""" - return f"Parameter: Prior: {self.prior} \n Bounds: {self.bounds}" - - def _set_margin(self, margin: float) -> None: - """ - Set the margin to a specified positive value less than 1. - - The margin is used to ensure parameter samples are not drawn exactly at the bounds, - which may be problematic in some optimization or sampling algorithms. - """ - if not 0 < margin < 1: - raise ParameterValidationError("Margin must be between 0 and 1") - self._margin = margin - - def set_bounds(self, bounds: BoundsPair) -> None: - """ - Set new parameter bounds. - - Parameters - ---------- - bounds : tuple[float, float] - New bounds as (lower, upper) - """ - if bounds is None or ( - not np.isfinite(bounds[0]) and not np.isfinite(bounds[1]) - ): - self._bounds = None - else: - self._bounds = Bounds(bounds[0], bounds[1]) + return f"Parameter - Distribution: {self._distribution}, Bounds: ({self.bounds[0]}, {self.bounds[1]}), Initial value: {self.initial_value}" def _validate_values_within_bounds(self) -> None: """Validate that initial values are within bounds.""" @@ -239,8 +215,8 @@ def get_initial_value_transformed(self) -> NDArray | None: return self._transformation.to_search(self._initial_value)[0] def __call__(self, *unused_args, **unused_kwargs) -> float: - "Return the current value. The unused arguments are to pass pybamm.ParameterValues checks." - return self._current_value + "Return the initial value. The unused arguments are to pass pybamm.ParameterValues checks." + return self._initial_value @property def initial_value(self) -> float: @@ -254,17 +230,13 @@ def bounds(self) -> BoundsPair | None: ) @property - def prior(self) -> Any | None: - return self._prior + def distribution(self) -> Any | None: + return self._distribution @property def transformation(self) -> Transformation: return self._transformation - def __hash__(self) -> int: - """Hash based on name.""" - return hash(self._name) - class Parameters: """ @@ -291,6 +263,9 @@ def __init__(self, parameters: dict | Parameters = None) -> None: def __getitem__(self, name: str) -> Parameter: return self.get(name) + def __setitem__(self, name: str, param: Parameter) -> None: + self.set(name, param) + def __len__(self) -> int: return len(self._parameters) @@ -326,7 +301,7 @@ def _add( raise TypeError("Expected Parameter instance") if name in self._parameters: - raise ParameterError(f"Parameter '{name}' already exists") + raise ParameterError(f"Parameter for '{name}' already exists") self._parameters[name] = parameter @@ -338,7 +313,7 @@ def remove(self, name: str) -> Parameter: if not isinstance(name, str): raise TypeError("The input name is not a string.") if name not in self._parameters: - raise ParameterNotFoundError(f"Parameter '{name}' not found") + raise ParameterNotFoundError(f"Parameter for '{name}' not found") return self._parameters.pop(name) def join(self, parameters=None): @@ -358,9 +333,17 @@ def join(self, parameters=None): def get(self, name: str) -> Parameter: """Get a parameter by name.""" if name not in self._parameters: - raise ParameterNotFoundError(f"Parameter '{name}' not found") + raise ParameterNotFoundError(f"Parameter for '{name}' not found") return self._parameters[name] + def set(self, name: str, param: Parameter) -> None: + """Get a parameter by name.""" + if name not in self._parameters: + raise ParameterNotFoundError(f"Parameter for '{name}' not found") + if not isinstance(param, Parameter): + raise TypeError({"Paremeter must be of type pybop.ParemterInfo"}) + self._parameters[name] = param + def get_bounds(self, transformed: bool = False) -> dict: """ Get bounds, for either all or no parameters. @@ -412,7 +395,6 @@ def update( self, *, initial_values: ArrayLike | Inputs | None = None, - bounds: Sequence[BoundsPair] | dict[str, BoundsPair] | None = None, **individual_updates: dict[str, Any], ) -> None: """ @@ -434,24 +416,10 @@ def update( if isinstance(updates, dict): if "initial_value" in updates: param.update_initial_value(updates["initial_value"]) - if "bounds" in updates: - param.set_bounds(updates["bounds"]) # Handle bulk updates if initial_values is not None: self._bulk_update_initial_values(initial_values) - if bounds is not None: - # Allow conversion from get_bounds output type to Sequence[BoundsPair] type - if isinstance(bounds, dict) and "upper" in bounds.keys(): - converted_bounds = [] - for i in range(len(bounds["lower"])): - converted_bounds.append([bounds["lower"][i], bounds["upper"][i]]) - bounds = converted_bounds - self._bulk_update_bounds(bounds) - - def remove_bounds(self) -> None: - for param in self._parameters.values(): - param.set_bounds(None) def _bulk_update_initial_values(self, values: ArrayLike | Inputs) -> None: """Update initial values in bulk.""" @@ -471,26 +439,7 @@ def _bulk_update_initial_values(self, values: ArrayLike | Inputs) -> None: for param, value in zip(param_list, values_array, strict=False): param.update_initial_value(value) - def _bulk_update_bounds( - self, bounds: Sequence[BoundsPair] | dict[str, BoundsPair] - ) -> None: - """Update bounds in bulk.""" - if isinstance(bounds, dict): - for name, bound_pair in bounds.items(): - self.get(name).set_bounds(bound_pair) - else: - param_list = list(self._parameters.values()) - - if len(bounds) != len(param_list): - raise ParameterValidationError( - f"Bounds array length {len(bounds)} doesn't match " - f"parameter count {len(param_list)}" - ) - - for param, bound_pair in zip(param_list, bounds, strict=False): - param.set_bounds(bound_pair) - - def sample_from_priors( + def sample_from_distributions( self, n_samples: int = 1, *, @@ -498,17 +447,17 @@ def sample_from_priors( transformed: bool = False, ) -> NDArray[np.floating] | None: """ - Sample from all parameter priors. + Sample from all parameter distributions. Returns ------- NDArray[np.floating] or None - Array of shape (n_samples, n_parameters) or None if any prior is missing + Array of shape (n_samples, n_parameters) or None if any distribution is missing """ all_samples = [] for param in self._parameters.values(): - samples = param.sample_from_prior( + samples = param.sample_from_distribution( n_samples, random_state=random_state, transformed=transformed ) if samples is None: @@ -530,8 +479,8 @@ def get_sigma0(self, transformed: bool = False) -> list: for param in self._parameters.values(): sig = None - if hasattr(param.prior, "sigma"): - sig = param.prior.sigma + if param.distribution is not None and hasattr(param.distribution, "std"): + sig = param.distribution.std() elif param.bounds is not None: lower, upper = param.bounds if np.isfinite(upper - lower): @@ -547,12 +496,12 @@ def get_sigma0(self, transformed: bool = False) -> list: sigma0.extend([sig or 0.05]) return sigma0 - def priors(self) -> list: - """Return the prior distribution of each parameter.""" + def distributions(self) -> list: + """Return the initial distribution of each parameter.""" return [ - param.prior + param.distribution for param in self._parameters.values() - if param.prior is not None + if param.distribution is not None ] def get_initial_values(self, *, transformed: bool = False) -> NDArray[np.floating]: @@ -573,9 +522,9 @@ def get_initial_values(self, *, transformed: bool = False) -> NDArray[np.floatin for name, param in self._parameters.items(): value = param.initial_value if value is None: - # Try to sample from prior if available - if param.prior is not None: - samples = param.sample_from_prior(1, transformed=transformed) + # Try to sample from distribution if available + if param.distribution is not None: + samples = param.sample_from_distribution(1, transformed=transformed) if samples is not None: param.update_initial_value(samples[0]) value = samples[0] if transformed else param.initial_value @@ -667,8 +616,7 @@ def verify_inputs(self, inputs: Inputs) -> bool: def __repr__(self) -> str: param_summary = "\n".join( - f" {name}: prior= {param.prior}, bounds={param.bounds}" - for name, param in self._parameters.items() + f" {name}: {param}" for name, param in self._parameters.items() ) return f"Parameters({len(self)}):\n{param_summary}" diff --git a/pybop/problems/problem.py b/pybop/problems/problem.py index f49bd04e0..ae2cfaab4 100644 --- a/pybop/problems/problem.py +++ b/pybop/problems/problem.py @@ -270,7 +270,7 @@ def get_finite_initial_cost(self): cost0 = np.abs(self.evaluate(x0).values[0]) nsamples = 0 while np.isinf(cost0) and nsamples < 10: - x0 = self.parameters.sample_from_priors()[0] + x0 = self.parameters.sample_from_distributions()[0] if x0 is None: break diff --git a/pybop/simulators/base_simulator.py b/pybop/simulators/base_simulator.py index a18923560..ea3545304 100644 --- a/pybop/simulators/base_simulator.py +++ b/pybop/simulators/base_simulator.py @@ -10,24 +10,21 @@ class BaseSimulator: Base simulator. """ - def __init__(self, parameters: Parameters | None = None): + def __init__(self, parameters: Parameters | dict | None = None): if parameters is None: parameters = Parameters() # Check if parameters is a list of pybop.Parameter objects - elif isinstance(parameters, list): + elif isinstance(parameters, dict): 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." + "The input parameters must be a a dictionary of Parameter objects or a pybop.Parameters object." ) self.parameters = parameters diff --git a/tests/integration/test_eis_parameterisation.py b/tests/integration/test_eis_parameterisation.py index 3e4fcd250..be20b0019 100644 --- a/tests/integration/test_eis_parameterisation.py +++ b/tests/integration/test_eis_parameterisation.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -41,14 +42,12 @@ def parameter_values(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.3, 0.9), - initial_value=pybop.Uniform(0.4, 0.75).rvs()[0], - bounds=[0.375, 0.775], + distribution=stats.uniform(loc=0.3, scale=0.9 - 0.3), + initial_value=stats.uniform(loc=0.4, scale=0.75 - 0.4).rvs(), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.3, 0.9), - initial_value=pybop.Uniform(0.4, 0.75).rvs()[0], - bounds=[0.375, 0.775], + distribution=stats.uniform(loc=0.3, scale=0.9 - 0.3), + initial_value=stats.uniform(loc=0.4, scale=0.75 - 0.4).rvs(), ), } diff --git a/tests/integration/test_half_cell_model.py b/tests/integration/test_half_cell_model.py index b8ae0069d..269c69796 100644 --- a/tests/integration/test_half_cell_model.py +++ b/tests/integration/test_half_cell_model.py @@ -2,6 +2,7 @@ import pybamm import pytest from pybamm import Parameter +from scipy import stats import pybop @@ -68,7 +69,7 @@ def parameter_values(self, model): def parameters(self): return { "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.4, 0.75), + stats.uniform(0.4, 0.75 - 0.4), # no bounds ), } @@ -114,9 +115,12 @@ def design_problem(self, model, parameter_values): parameter_values.update( { "Positive electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(5e-05, 5e-06), - bounds=[2e-06, 10e-05], - ), + distribution=pybop.Gaussian( + 5e-05, + 5e-06, + truncated_at=[2e-06, 10e-05], + ), + ) } ) experiment = pybamm.Experiment( diff --git a/tests/integration/test_hessian.py b/tests/integration/test_hessian.py index 65cc504fa..2f624e86b 100644 --- a/tests/integration/test_hessian.py +++ b/tests/integration/test_hessian.py @@ -26,12 +26,18 @@ def parameters(self, request): self.ground_truth = request.param return { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.05, 0.01), - bounds=[0.02, 0.08], + distribution=pybop.Gaussian( + 0.05, + 0.01, + truncated_at=[0.02, 0.08], + ) ), "R1 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.05, 0.01), - bounds=[0.02, 0.08], + distribution=pybop.Gaussian( + 0.05, + 0.01, + truncated_at=[0.02, 0.08], + ) ), } diff --git a/tests/integration/test_model_experiment_changes.py b/tests/integration/test_model_experiment_changes.py index bdb81bcb2..7332f1683 100644 --- a/tests/integration/test_model_experiment_changes.py +++ b/tests/integration/test_model_experiment_changes.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -17,8 +18,11 @@ class TestModelAndExperimentChanges: [ { "Negative particle radius [m]": pybop.Parameter( # geometric parameter - prior=pybop.Gaussian(6e-06, 0.1e-6), - bounds=[1e-6, 9e-6], + distribution=pybop.Gaussian( + 6e-06, + 0.1e-6, + truncated_at=[1e-6, 9e-6], + ), initial_value=5.86e-6, ), }, @@ -27,8 +31,11 @@ class TestModelAndExperimentChanges: [ { "Positive particle diffusivity [m2.s-1]": pybop.Parameter( # non-geometric parameter - prior=pybop.Gaussian(3.43e-15, 1e-15), - bounds=[1e-15, 5e-15], + distribution=pybop.Gaussian( + 3.43e-15, + 1e-15, + truncated_at=[1e-15, 5e-15], + ), initial_value=4e-15, ), }, @@ -157,7 +164,7 @@ def test_multi_fitting_problem(self, solver): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), + distribution=stats.norm(loc=0.68, scale=0.05), ) } ) @@ -180,7 +187,7 @@ def test_multi_fitting_problem(self, solver): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), + distribution=stats.norm(loc=0.68, scale=0.05), ) } ) diff --git a/tests/integration/test_monte_carlo.py b/tests/integration/test_monte_carlo.py index 5697b68f5..9584eaa85 100644 --- a/tests/integration/test_monte_carlo.py +++ b/tests/integration/test_monte_carlo.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop from pybop import ( @@ -51,13 +52,12 @@ def model_and_parameter_values(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.575, 0.05), - initial_value=pybop.Uniform(0.4, 0.7).rvs()[0], - bounds=[0.375, 0.725], + pybop.Gaussian(0.575, 0.05, truncated_at=[0.375, 0.725]), + initial_value=stats.uniform(0.4, 0.7 - 0.4).rvs(), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.525, 0.05), - initial_value=pybop.Uniform(0.4, 0.7).rvs()[0], + stats.norm(loc=0.525, scale=0.05), + initial_value=stats.uniform(0.4, 0.7 - 0.4).rvs(), # no bounds ), } diff --git a/tests/integration/test_monte_carlo_thevenin.py b/tests/integration/test_monte_carlo_thevenin.py index 5b772a691..19edda208 100644 --- a/tests/integration/test_monte_carlo_thevenin.py +++ b/tests/integration/test_monte_carlo_thevenin.py @@ -3,6 +3,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop from pybop import ( @@ -69,16 +70,22 @@ def parameter_values(self, model): def parameters(self): return { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(5e-2, 5e-3), + distribution=pybop.Gaussian( + 5e-2, + 5e-3, + truncated_at=[1e-4, 1e-1], + ), transformation=pybop.LogTransformation(), - initial_value=pybop.Uniform(2e-3, 8e-2).rvs()[0], - bounds=[1e-4, 1e-1], + initial_value=stats.uniform(2e-3, 8e-2 - 2e-3).rvs(), ), "R1 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(5e-2, 5e-3), + distribution=pybop.Gaussian( + 5e-2, + 5e-3, + truncated_at=[1e-4, 1e-1], + ), transformation=pybop.LogTransformation(), - initial_value=pybop.Uniform(2e-3, 8e-2).rvs()[0], - bounds=[1e-4, 1e-1], + initial_value=stats.uniform(2e-3, 8e-2 - 2e-3).rvs(), ), } diff --git a/tests/integration/test_optimisation_options.py b/tests/integration/test_optimisation_options.py index 26faa516a..b9bff0a16 100644 --- a/tests/integration/test_optimisation_options.py +++ b/tests/integration/test_optimisation_options.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -40,11 +41,14 @@ def parameter_values(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.05), - bounds=[0.375, 0.75], + distribution=pybop.Gaussian( + 0.55, + 0.05, + truncated_at=[0.375, 0.75], + ), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.05), + stats.norm(loc=0.55, scale=0.05), # no bounds ), } diff --git a/tests/integration/test_spm_parameterisations.py b/tests/integration/test_spm_parameterisations.py index 3af763fd5..7a9366efa 100644 --- a/tests/integration/test_spm_parameterisations.py +++ b/tests/integration/test_spm_parameterisations.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -43,14 +44,25 @@ def model_and_parameter_values(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.3, 0.9), - initial_value=pybop.Uniform(0.4, 0.75).rvs()[0], - bounds=[0.3, 0.8], + stats.uniform(0.3, 0.9 - 0.3), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.3, 0.9), - initial_value=pybop.Uniform(0.4, 0.75).rvs()[0], - # no bounds + stats.uniform(0.3, 0.9 - 0.3), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), + ), + } + + @pytest.fixture + def priors(self): + return { + "Negative electrode active material volume fraction": pybop.Parameter( + pybop.Uniform(0.3, 0.9), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), + ), + "Positive electrode active material volume fraction": pybop.Parameter( + pybop.Uniform(0.3, 0.9), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), ), } @@ -85,13 +97,18 @@ def optimiser(self, request): return request.param @pytest.fixture - def optim(self, optimiser, model_and_parameter_values, parameters, cost_class): + def optim( + self, optimiser, model_and_parameter_values, parameters, priors, cost_class + ): model, parameter_values = model_and_parameter_values parameter_values.set_initial_state(0.6) dataset = self.get_data(model, parameter_values) # Define the problem - parameter_values.update(parameters) + if cost_class is pybop.LogPosterior: + parameter_values.update(priors) + else: + parameter_values.update(parameters) simulator = pybop.pybamm.Simulator( model, parameter_values=parameter_values, protocol=dataset ) @@ -132,9 +149,30 @@ def optim(self, optimiser, model_and_parameter_values, parameters, cost_class): ]: bounds = {"lower": [0.375, 0.375], "upper": [0.775, 0.775]} if isinstance(cost, pybop.GaussianLogLikelihood): - bounds["lower"].append(0.0) - bounds["upper"].append(0.05) - problem.parameters.update(bounds=bounds) + cost.set_sigma0( + pybop.Parameter( + distribution=pybop.Uniform( + max(1e-8 * self.sigma0, 0.0), min(3 * self.sigma0, 0.05) + ), + initial_value=self.sigma0, + ) + ) + problem.parameters["Negative electrode active material volume fraction"] = ( + pybop.Parameter( + stats.uniform( + bounds["lower"][0], bounds["upper"][0] - bounds["lower"][0] + ), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), + ) + ) + problem.parameters["Positive electrode active material volume fraction"] = ( + pybop.Parameter( + stats.uniform( + bounds["lower"][1], bounds["upper"][1] - bounds["lower"][1] + ), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), + ) + ) # Create optimiser optim = optimiser(problem, options=options) @@ -231,9 +269,31 @@ def test_multiple_signals(self, multi_optimiser, two_signal_problem): if multi_optimiser is pybop.SciPyDifferentialEvolution: bounds = {"lower": [0.375, 0.375], "upper": [0.775, 0.775]} if isinstance(two_signal_problem.cost, pybop.GaussianLogLikelihood): - bounds["lower"].extend([0.0, 0.0]) - bounds["upper"].extend([0.05, 0.05]) - two_signal_problem.parameters.update(bounds=bounds) + two_signal_problem.cost.set_sigma0( + pybop.Parameter( + distribution=pybop.Uniform( + max(1e-8 * self.sigma0 * 4, 0.0), + min(3 * self.sigma0 * 4, 0.05), + ), + initial_value=self.sigma0 * 4, + ) + ) + two_signal_problem.parameters[ + "Negative electrode active material volume fraction" + ] = pybop.Parameter( + stats.uniform( + bounds["lower"][0], bounds["upper"][0] - bounds["lower"][0] + ), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), + ) + two_signal_problem.parameters[ + "Positive electrode active material volume fraction" + ] = pybop.Parameter( + stats.uniform( + bounds["lower"][1], bounds["upper"][1] - bounds["lower"][1] + ), + initial_value=stats.uniform(0.4, 0.75 - 0.4).rvs(), + ) # Test each optimiser optim = multi_optimiser(two_signal_problem, options=options) diff --git a/tests/integration/test_thevenin_parameterisation.py b/tests/integration/test_thevenin_parameterisation.py index dee6786a7..9510c0efd 100644 --- a/tests/integration/test_thevenin_parameterisation.py +++ b/tests/integration/test_thevenin_parameterisation.py @@ -51,13 +51,19 @@ def parameter_values(self, model): def parameters(self): return { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.05, 0.01), - bounds=[1e-6, 0.1], + distribution=pybop.Gaussian( + 0.05, + 0.01, + truncated_at=[1e-6, 0.1], + ), transformation=pybop.LogTransformation(), ), "R1 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.05, 0.01), - bounds=[1e-6, 0.1], + distribution=pybop.Gaussian( + 0.05, + 0.01, + truncated_at=[1e-6, 0.1], + ), transformation=pybop.LogTransformation(), ), } diff --git a/tests/integration/test_transformation.py b/tests/integration/test_transformation.py index df7a0392b..b158d4fea 100644 --- a/tests/integration/test_transformation.py +++ b/tests/integration/test_transformation.py @@ -65,13 +65,19 @@ def parameter_values(self, model): def parameters(self, transformation_r0, transformation_r1): return { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.05, 0.02), - bounds=[1e-4, 0.1], + distribution=pybop.Gaussian( + 0.05, + 0.02, + truncated_at=[1e-4, 0.1], + ), transformation=transformation_r0, ), "R1 [Ohm]": pybop.Parameter( - prior=pybop.Gaussian(0.05, 0.02), - bounds=[1e-4, 0.1], + distribution=pybop.Gaussian( + 0.05, + 0.02, + truncated_at=[1e-4, 0.1], + ), transformation=transformation_r1, ), } diff --git a/tests/integration/test_weighted_cost.py b/tests/integration/test_weighted_cost.py index 1ded34cc7..fb6746af8 100644 --- a/tests/integration/test_weighted_cost.py +++ b/tests/integration/test_weighted_cost.py @@ -2,6 +2,7 @@ import pybamm import pytest from pybamm import Parameter +from scipy import stats import pybop @@ -67,11 +68,10 @@ def parameter_values(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.4, 0.75), - bounds=[0.375, 0.75], + stats.uniform(0.4, 0.75 - 0.4), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Uniform(0.4, 0.75), + stats.uniform(0.4, 0.75 - 0.4), # no bounds ), } @@ -144,12 +144,18 @@ def weighted_design_cost(self, model, parameter_values, design_targets): parameter_values.update( { "Positive electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(5e-05, 5e-06), - bounds=[2e-06, 10e-05], + distribution=pybop.Gaussian( + 5e-05, + 5e-06, + truncated_at=[2e-06, 10e-05], + ) ), "Negative electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(5e-05, 5e-06), - bounds=[2e-06, 10e-05], + distribution=pybop.Gaussian( + 5e-05, + 5e-06, + truncated_at=[2e-06, 10e-05], + ) ), } ) diff --git a/tests/unit/test_classifier.py b/tests/unit/test_classifier.py index 9a7ed02c8..f371302e5 100644 --- a/tests/unit/test_classifier.py +++ b/tests/unit/test_classifier.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -34,8 +35,7 @@ def problem(self): parameter_values.update( { "R0 [Ohm]": pybop.Parameter( - prior=pybop.Uniform(0.001, 0.1), - bounds=[1e-4, 0.1], + distribution=stats.uniform(loc=0.001, scale=0.1 - 0.001) ) } ) diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py index b02ab880b..c75ef6f97 100644 --- a/tests/unit/test_cost.py +++ b/tests/unit/test_cost.py @@ -29,8 +29,9 @@ def ground_truth(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.01), - bounds=[0.375, 0.625], + distribution=pybop.Gaussian( + truncated_at=[0.375, 0.625], mean=0.5, sigma=0.010 + ) ) } @@ -403,8 +404,10 @@ def test_weighted_fitting_cost(self, noisy_problem, parameters, dataset): problem_4 = pybop.Problem(simulator, cost4) weighted_4 = pybop.Problem(simulator, weighted_cost_4) sigma = 0.01 - assert np.isfinite(cost4.parameters["Sigma for output 1"].prior.logpdf(sigma)) - assert np.isfinite(weighted_4.evaluate([0.5, sigma]).values) + assert np.isfinite( + cost4.parameters["Sigma for output 1"].distribution.logpdf(sigma) + ) + assert np.isfinite(weighted_4([0.5, sigma])) np.testing.assert_allclose( weighted_4.evaluate([0.6, sigma]).values, problem_1.evaluate([0.6]).values diff --git a/tests/unit/test_priors.py b/tests/unit/test_distributions.py similarity index 61% rename from tests/unit/test_priors.py rename to tests/unit/test_distributions.py index 40de309a1..a921e5998 100644 --- a/tests/unit/test_priors.py +++ b/tests/unit/test_distributions.py @@ -4,9 +4,9 @@ import pybop -class TestPriors: +class TestDistributions: """ - A class to test the priors. + A class to test the distribution. """ pytestmark = pytest.mark.unit @@ -24,18 +24,22 @@ def Exponential(self): return pybop.Exponential(scale=1) @pytest.fixture - def JointPrior1(self, Gaussian, Uniform): - return pybop.JointPrior(Gaussian, Uniform) + def JointDistribution1(self, Gaussian, Uniform): + return pybop.JointDistribution(Gaussian, Uniform) @pytest.fixture - def JointPrior2(self, Gaussian, Exponential): - return pybop.JointPrior(Gaussian, Exponential) - - def test_base_prior(self): - base = pybop.BasePrior() - assert isinstance(base, pybop.BasePrior) - - def test_priors(self, Gaussian, Uniform, Exponential, JointPrior1, JointPrior2): + def JointDistribution2(self, Gaussian, Exponential): + return pybop.JointDistribution(Gaussian, Exponential) + + def test_distribution_class(self): + base = pybop.Distribution() + assert isinstance(base, pybop.Distribution) + with pytest.raises(NotImplementedError): + base.logpdfS1(0.0) + + def test_distributions( + self, Gaussian, Uniform, Exponential, JointDistribution1, JointDistribution2 + ): # Test pdf np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4) np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4) @@ -57,10 +61,10 @@ def test_priors(self, Gaussian, Uniform, Exponential, JointPrior1, JointPrior2): np.testing.assert_allclose(Exponential.cdf(1), 0.6321205588285577, atol=1e-4) # Test logpdf - assert JointPrior1.logpdf([0.5, 0.5]) == Gaussian.logpdf(0.5) + Uniform.logpdf( + assert JointDistribution1.logpdf([0.5, 0.5]) == Gaussian.logpdf( 0.5 - ) - assert JointPrior2.logpdf([0.5, 1]) == Gaussian.logpdf( + ) + Uniform.logpdf(0.5) + assert JointDistribution2.logpdf([0.5, 1]) == Gaussian.logpdf( 0.5 ) + Exponential.logpdf(1) @@ -79,46 +83,48 @@ def test_priors(self, Gaussian, Uniform, Exponential, JointPrior1, JointPrior2): assert p == Exponential.logpdf(1) assert dp == Exponential.logpdf(1) - # Test JointPrior1.logpdfS1 - p, dp = JointPrior1.logpdfS1([0.5, 0.5]) + # Test JointDistribution1.logpdfS1 + p, dp = JointDistribution1.logpdfS1([0.5, 0.5]) assert p == Gaussian.logpdf(0.5) + Uniform.logpdf(0.5) np.testing.assert_allclose(dp, np.array([0.0, 0.0]), atol=1e-4) - # Test JointPrior.logpdfS1 - p, dp = JointPrior2.logpdfS1([0.5, 1]) + # Test JointDistribution.logpdfS1 + p, dp = JointDistribution2.logpdfS1([0.5, 1]) assert p == Gaussian.logpdf(0.5) + Exponential.logpdf(1) np.testing.assert_allclose( dp, np.array([0.0, Exponential.logpdf(1)]), atol=1e-4 ) - # Test JointPrior1 non-symmetric + # Test JointDistribution1 non-symmetric with pytest.raises(AssertionError): np.testing.assert_allclose( - JointPrior1.logpdf([0.4, 0.5]), - JointPrior1.logpdf([0.5, 0.4]), + JointDistribution1.logpdf([0.4, 0.5]), + JointDistribution1.logpdf([0.5, 0.4]), atol=1e-4, ) - # Test JointPrior2 non-symmetric + # Test JointDistribution2 non-symmetric with pytest.raises(AssertionError): np.testing.assert_allclose( - JointPrior2.logpdf([0.4, 1]), JointPrior2.logpdf([1, 0.4]), atol=1e-4 + JointDistribution2.logpdf([0.4, 1]), + JointDistribution2.logpdf([1, 0.4]), + atol=1e-4, ) - # Test JointPrior with incorrect dimensions + # Test JointDistribution with incorrect dimensions with pytest.raises(ValueError, match="Input x must have length 2, got 1"): - JointPrior1.logpdf([0.4]) + JointDistribution1.logpdf([0.4]) with pytest.raises(ValueError, match="Input x must have length 2, got 1"): - JointPrior1.logpdfS1([0.4]) + JointDistribution1.logpdfS1([0.4]) # Test properties - assert Uniform.mean == (Uniform.upper - Uniform.lower) / 2 + assert Uniform.mean() == (Uniform.upper - Uniform.lower) / 2 np.testing.assert_allclose( - Uniform.sigma, (Uniform.upper - Uniform.lower) / (2 * np.sqrt(3)), atol=1e-8 + Uniform.std(), (Uniform.upper - Uniform.lower) / (2 * np.sqrt(3)), atol=1e-8 ) - assert Exponential.mean == Exponential.scale - assert Exponential.sigma == Exponential.scale + assert Exponential.mean() == Exponential.scale + assert Exponential.std() == Exponential.scale def test_gaussian_rvs(self, Gaussian): samples = Gaussian.rvs(size=500) @@ -143,13 +149,13 @@ def test_exponential_rvs(self, Exponential): mean = np.mean(samples) assert abs(mean - 1) < 0.2 - def test_repr(self, Gaussian, Uniform, Exponential, JointPrior1): - assert repr(Gaussian) == "Gaussian, loc: 0.5, scale: 1" - assert repr(Uniform) == "Uniform, loc: 0, scale: 1" + def test_repr(self, Gaussian, Uniform, Exponential, JointDistribution1): + assert repr(Gaussian) == "Gaussian, mean: 0.5, standard deviation: 1.0" + assert repr(Uniform) == "Uniform, lower: 0, upper: 1" assert repr(Exponential) == "Exponential, loc: 0, scale: 1" assert ( - repr(JointPrior1) - == "JointPrior(priors: [Gaussian, loc: 0.5, scale: 1, Uniform, loc: 0, scale: 1])" + repr(JointDistribution1) + == "JointDistribution(distributions: [Gaussian, mean: 0.5, standard deviation: 1.0; Uniform, lower: 0, upper: 1])" ) def test_invalid_size(self, Gaussian, Uniform, Exponential): @@ -160,12 +166,12 @@ def test_invalid_size(self, Gaussian, Uniform, Exponential): with pytest.raises(ValueError): Exponential.rvs(-1) - def test_incorrect_composed_priors(self, Gaussian, Uniform): + def test_incorrect_composed_distributions(self, Gaussian, Uniform): with pytest.raises( - ValueError, match="All priors must be instances of BasePrior" + ValueError, match="All distributions must be instances of Distribution" ): - pybop.JointPrior(Gaussian, Uniform, "string") + pybop.JointDistribution(Gaussian, Uniform, "string") with pytest.raises( - ValueError, match="All priors must be instances of BasePrior" + ValueError, match="All distributions must be instances of Distribution" ): - pybop.JointPrior(Gaussian, Uniform, 0.5) + pybop.JointDistribution(Gaussian, Uniform, 0.5) diff --git a/tests/unit/test_evaluation.py b/tests/unit/test_evaluation.py index b9457cc9f..5e1ab5b45 100644 --- a/tests/unit/test_evaluation.py +++ b/tests/unit/test_evaluation.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -29,14 +30,17 @@ def model(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.01), - bounds=[0.375, 0.625], + distribution=pybop.Gaussian( + 0.5, + 0.01, + truncated_at=[0.375, 0.625], + ), transformation=pybop.ScaledTransformation( coefficient=1 / 0.25, intercept=-0.375 ), ), "Positive electrode Bruggeman coefficient (electrode)": pybop.Parameter( - prior=pybop.Gaussian(1.5, 0.1), + distribution=stats.norm(loc=1.5, scale=0.1), transformation=pybop.LogTransformation(), ), } diff --git a/tests/unit/test_likelihoods.py b/tests/unit/test_likelihoods.py index 9b5993c15..272121362 100644 --- a/tests/unit/test_likelihoods.py +++ b/tests/unit/test_likelihoods.py @@ -1,6 +1,7 @@ import numpy as np import pybamm import pytest +from scipy import stats import pybop @@ -29,8 +30,11 @@ def ground_truth(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.01), - bounds=[0.375, 0.625], + distribution=pybop.Gaussian( + 0.5, + 0.01, + truncated_at=[0.375, 0.625], + ) ) } @@ -112,7 +116,7 @@ def test_gaussian_log_likelihood(self, simulator, dataset): assert grad_likelihood[0][1] <= 0 # Test construction with sigma as a Parameter - sigma = pybop.Parameter(prior=pybop.Uniform(0.4, 0.6)) + sigma = pybop.Parameter(stats.uniform(loc=0.4, scale=0.6 - 0.4)) likelihood = pybop.GaussianLogLikelihood(dataset, sigma0=sigma) # Test invalid sigma diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py index 67c265076..98f201590 100644 --- a/tests/unit/test_optimisation.py +++ b/tests/unit/test_optimisation.py @@ -32,21 +32,26 @@ def dataset(self): def one_parameter(self): return { "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.02), - bounds=[0.48, 0.52], - ) + pybop.Gaussian(0.5, 0.02, truncated_at=(0.48, 0.52)) + ), } @pytest.fixture def two_parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.02), - bounds=[0.58, 0.62], + distribution=pybop.Gaussian( + 0.6, + 0.02, + truncated_at=[0.58, 0.62], + ) ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.05), - bounds=[0.48, 0.52], + distribution=pybop.Gaussian( + 0.5, + 0.05, + truncated_at=[0.48, 0.52], + ) ), } @@ -74,6 +79,41 @@ def two_param_problem(self, model, two_parameters, dataset): cost = pybop.SumSquaredError(dataset) return pybop.Problem(simulator, cost) + @pytest.fixture + def problem_no_bounds(self, model, one_parameter, dataset): + parameter_values = model.default_parameter_values + parameter_values.update( + { + "Positive electrode active material volume fraction": pybop.Parameter( + pybop.Gaussian(0.5, 0.02) + ), + } + ) + simulator = pybop.pybamm.Simulator( + model, parameter_values=parameter_values, protocol=dataset + ) + cost = pybop.SumSquaredError(dataset) + return pybop.Problem(simulator, cost) + + @pytest.fixture + def two_param_problem_no_bounds(self, model, two_parameters, dataset): + parameter_values = model.default_parameter_values + parameter_values.update( + { + "Negative electrode active material volume fraction": pybop.Parameter( + distribution=pybop.Gaussian(0.6, 0.02) + ), + "Positive electrode active material volume fraction": pybop.Parameter( + distribution=pybop.Gaussian(0.5, 0.05) + ), + } + ) + simulator = pybop.pybamm.Simulator( + model, parameter_values=parameter_values, protocol=dataset + ) + cost = pybop.SumSquaredError(dataset) + return pybop.Problem(simulator, cost) + @pytest.mark.parametrize( "optimiser, expected_name, sensitivities", [ @@ -98,7 +138,12 @@ def two_param_problem(self, model, two_parameters, dataset): ], ) def test_optimiser_classes( - self, two_param_problem, optimiser, expected_name, sensitivities + self, + two_param_problem, + two_param_problem_no_bounds, + optimiser, + expected_name, + sensitivities, ): # Test class construction problem = two_param_problem @@ -112,8 +157,7 @@ def test_optimiser_classes( pybop.PSO ]: # Test construction without bounds - problem.parameters.remove_bounds() - optim = optimiser(problem) + optim = optimiser(two_param_problem_no_bounds) assert all(np.isinf(optim.problem.parameters.get_bounds()["lower"])) assert all(np.isinf(optim.problem.parameters.get_bounds()["upper"])) @@ -165,7 +209,7 @@ def check_multistart(optim, n_iters, multistarts): multistart_optim = optimiser(problem, options=options) check_multistart(multistart_optim, 6, 2) - bounds = {"upper": [0.53], "lower": [0.47]} + bounds = {"upper": 0.53, "lower": 0.47} if optimiser in [pybop.GradientDescent, pybop.AdamW, pybop.NelderMead]: optim = optimiser(problem) assert optim._optimiser._boundaries is None @@ -173,11 +217,27 @@ def check_multistart(optim, n_iters, multistarts): with pytest.raises( ValueError, match="Either all bounds or no bounds must be set" ): - problem.parameters.update(bounds={"upper": [np.inf], "lower": [0.57]}) + problem.parameters[ + "Positive electrode active material volume fraction" + ] = pybop.Parameter( + pybop.Gaussian(0.5, 0.02, truncated_at=(0.57, np.inf)) + ) optimiser(problem) - problem.parameters.update(bounds=bounds) + problem.parameters["Positive electrode active material volume fraction"] = ( + pybop.Parameter( + pybop.Gaussian( + 0.5, 0.02, truncated_at=(bounds["lower"], bounds["upper"]) + ) + ) + ) elif issubclass(optimiser, pybop.BasePintsOptimiser): - problem.parameters.update(bounds=bounds) + problem.parameters["Positive electrode active material volume fraction"] = ( + pybop.Parameter( + pybop.Gaussian( + 0.5, 0.02, truncated_at=(bounds["lower"], bounds["upper"]) + ) + ) + ) optim = optimiser(problem) assert optim._optimiser._boundaries is not None @@ -224,7 +284,12 @@ def check_multistart(optim, n_iters, multistarts): optim.optimiser.tell([0.1]) if optimiser is pybop.GradientDescent: - assert optim.optimiser.learning_rate() == 0.02 + assert ( + optim.optimiser.learning_rate() + == problem.parameters[ + "Positive electrode active material volume fraction" + ].distribution.std() + ) optim.optimiser.set_learning_rate(0.1) assert optim.optimiser.learning_rate() == 0.1 assert optim.optimiser.n_hyper_parameters() == 1 @@ -308,18 +373,30 @@ def check_multistart(optim, n_iters, multistarts): assert optim._logger.x_model[0] == x0_new assert optim._logger.x_model[-1] != x0 - def test_cuckoo_no_bounds(self, problem): - problem.parameters.remove_bounds() + def test_cuckoo_no_bounds(self, problem_no_bounds): options = pybop.PintsOptions(max_iterations=1) - optim = pybop.CuckooSearch(problem, options=options) + optim = pybop.CuckooSearch(problem_no_bounds, options=options) optim.run() assert all(np.isinf(optim.problem.parameters.get_bounds()["lower"])) assert all(np.isinf(optim.problem.parameters.get_bounds()["upper"])) - def test_randomsearch_bounds(self, two_param_problem): + def test_randomsearch_bounds(self, two_param_problem, two_param_problem_no_bounds): # Test clip_candidates with bound bounds = {"upper": [0.62, 0.54], "lower": [0.58, 0.46]} - two_param_problem.parameters.update(bounds=bounds) + two_param_problem.parameters[ + "Negative electrode active material volume fraction" + ] = pybop.Parameter( + distribution=pybop.Gaussian( + 0.6, 0.02, truncated_at=(bounds["lower"][0], bounds["upper"][0]) + ) + ) + two_param_problem.parameters[ + "Positive electrode active material volume fraction" + ] = pybop.Parameter( + distribution=pybop.Gaussian( + 0.5, 0.05, truncated_at=(bounds["lower"][1], bounds["upper"][1]) + ) + ) options = pybop.PintsOptions(max_iterations=1) optim = pybop.RandomSearch(two_param_problem, options=options) candidates = np.array([[0.57, 0.55], [0.63, 0.44]]) @@ -328,18 +405,16 @@ def test_randomsearch_bounds(self, two_param_problem): assert np.allclose(clipped_candidates, expected_clipped) # Test clip_candidates without bound - two_param_problem.parameters.remove_bounds() - optim = pybop.RandomSearch(two_param_problem, options=options) + optim = pybop.RandomSearch(two_param_problem_no_bounds, options=options) candidates = np.array([[0.57, 0.52], [0.63, 0.58]]) clipped_candidates = optim.optimiser.clip_candidates(candidates) assert np.allclose(clipped_candidates, candidates) - def test_randomsearch_ask_without_bounds(self, two_param_problem): + def test_randomsearch_ask_without_bounds(self, two_param_problem_no_bounds): # Initialize optimiser without boundaries - two_param_problem.parameters.remove_bounds() - two_param_problem.parameters.update(initial_values=[0.6, 0.55]) + two_param_problem_no_bounds.parameters.update(initial_values=[0.6, 0.55]) options = pybop.PintsOptions(max_iterations=1) - optim = pybop.RandomSearch(two_param_problem, options=options) + optim = pybop.RandomSearch(two_param_problem_no_bounds, options=options) # Set population size, generate candidates optim.set_population_size(2) @@ -520,3 +595,25 @@ def test_optimisation_result(self, problem): assert result.n_iterations in result._n_iterations assert result.n_evaluations in result._n_evaluations assert result.x0 in result._x0 + + def test_multistart_fails_without_distribution(self, model, dataset): + # parameter with inifinite bound (no distribution) + parameter_values = model.default_parameter_values + param = pybop.Parameter(bounds=(0.5, np.inf), initial_value=0.8) + parameter_values.update( + {"Positive electrode active material volume fraction": param} + ) + simulator = pybop.pybamm.Simulator( + model, parameter_values=parameter_values, protocol=dataset + ) + cost = pybop.SumSquaredError(dataset) + problem = pybop.Problem(simulator, cost) + + # Setup optimiser + options = pybop.PintsOptions(max_iterations=1, multistart=3) + optim = pybop.XNES(problem, options=options) + + with pytest.raises( + RuntimeError, match="Distributions must be provided for multi-start" + ): + optim.run() diff --git a/tests/unit/test_parameters.py b/tests/unit/test_parameters.py index d17ed2ee8..095f3d73b 100644 --- a/tests/unit/test_parameters.py +++ b/tests/unit/test_parameters.py @@ -1,5 +1,6 @@ import numpy as np import pytest +from scipy import stats import pybop from pybop.parameters.parameter import ( @@ -19,8 +20,11 @@ class TestParameter: @pytest.fixture def parameter(self): return pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.02), - bounds=[0.375, 0.7], + distribution=pybop.Gaussian( + 0.6, + 0.02, + truncated_at=[0.375, 0.7], + ), initial_value=0.6, ) @@ -29,31 +33,35 @@ def name(self): return "Negative electrode active material volume fraction" def test_parameter_construction(self, parameter): - assert parameter.prior.mean == 0.6 - assert parameter.prior.sigma == 0.02 assert parameter.bounds == [0.375, 0.7] assert parameter.initial_value == 0.6 + assert parameter() == 0.6 + + # test error if bounds and distribution + with pytest.raises( + ParameterError, + match="Bounds can only be set if no distribution is provided. If a bounded distribution is needed, please ensure the distribution itself is bounded.", + ): + pybop.Parameter(distribution=stats.norm(0.3, 0.1), bounds=(0.4, 0.8)) def test_parameter_repr(self, parameter): assert ( repr(parameter) - == "Parameter: Prior: Gaussian, loc: 0.6, scale: 0.02 \n Bounds: [0.375, 0.7]" + == f"Parameter - Distribution: Gaussian, mean: {parameter.distribution.mean()}, standard deviation: {parameter.distribution.std()}, Bounds: (0.375, 0.7), Initial value: 0.6" ) def test_parameter_sampling(self, parameter): - samples = parameter.sample_from_prior(n_samples=500) + samples = parameter.sample_from_distribution(n_samples=500) assert (samples >= 0.375).all() and (samples <= 0.7).all() + parameter = pybop.Parameter(bounds=(0, np.inf)) + assert parameter.sample_from_distribution() is None + def test_parameter_update(self, parameter): # Test initial value update parameter.update_initial_value(value=0.654) assert parameter.initial_value == 0.654 - def test_parameter_margin(self, parameter): - assert parameter._margin == 1e-4 - parameter._set_margin(margin=1e-3) - assert parameter._margin == 1e-3 - def test_no_bounds(self, name): parameter = pybop.Parameter() assert parameter.bounds is None @@ -64,12 +72,6 @@ def test_no_bounds(self, name): assert not np.isfinite(list(bounds.values())).all() def test_invalid_inputs(self, parameter): - # Test error with invalid value - with pytest.raises( - ParameterValidationError, match="Margin must be between 0 and 1" - ): - parameter._set_margin(margin=-1) - # Test error with opposite bounds with pytest.raises( ParameterValidationError, match="must be less than upper bound" @@ -78,8 +80,11 @@ def test_invalid_inputs(self, parameter): def test_sample_initial_values(self): parameter = pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.02), - bounds=[0.375, 0.7], + distribution=pybop.Gaussian( + 0.6, + 0.02, + truncated_at=[0.375, 0.7], + ) ) sample = parameter._initial_value assert (sample >= 0.375) and (sample <= 0.7) @@ -95,8 +100,11 @@ class TestParameters: @pytest.fixture def parameter(self): return pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.02), - bounds=[0.375, 0.7], + distribution=pybop.Gaussian( + 0.6, + 0.02, + truncated_at=[0.375, 0.7], + ), initial_value=0.6, ) @@ -120,8 +128,11 @@ def test_parameters_construction(self, name, parameter): { name: parameter, "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.02), - bounds=[0.375, 0.7], + distribution=pybop.Gaussian( + 0.6, + 0.02, + truncated_at=[0.375, 0.7], + ), initial_value=0.6, ), } @@ -131,6 +142,14 @@ def test_parameters_construction(self, name, parameter): with pytest.raises(ParameterError, match="already exists"): params.add(name, parameter) + # setting parameters with wrong input + with pytest.raises(ParameterNotFoundError, match="not found"): + params["not a parameter"] = pybop.Parameter(initial_value=0.8) + with pytest.raises( + TypeError, match="Paremeter must be of type pybop.ParemterInfo" + ): + params[name] = pybop.Gaussian(0.5, 0.02) + params.remove(name=name) with pytest.raises(ParameterNotFoundError, match="not found"): params.remove(name="Negative electrode active material volume fraction") @@ -180,9 +199,12 @@ def test_parameters_transformation(self, name): params = pybop.Parameters( { name: pybop.Parameter( - prior=pybop.Gaussian(0.01, 0.2), + distribution=pybop.Gaussian( + 0.01, + 0.2, + truncated_at=[-1, 1], + ), transformation=pybop.LogTransformation(), - bounds=[-1, 1], ) } ) @@ -192,28 +214,23 @@ def test_parameters_transformation(self, name): ): params.get_bounds(transformed=True) - def test_parameters_update(self, name, parameter): - params = pybop.Parameters({name: parameter}) - params.update(bounds=[[0.38, 0.68]]) - assert parameter.bounds == [0.38, 0.68] - params.update(bounds=dict(lower=[0.37], upper=[0.7])) - assert parameter.bounds == [0.37, 0.7] - def test_parameters_sampling(self, name, parameter): parameter._transformation = pybop.ScaledTransformation( coefficient=0.2, intercept=-1 ) params = pybop.Parameters({name: parameter}) params.construct_transformation() - samples = params.sample_from_priors(n_samples=500, transformed=True) + samples = params.sample_from_distributions(n_samples=500, transformed=True) assert (samples >= -0.125).all() and (samples <= -0.06).all() parameter._transformation = None - def test_get_sigma(self, name, parameter): + def test_get_sigma(self, name): + parameter = pybop.Parameter(stats.norm(loc=0.6, scale=0.02)) params = pybop.Parameters({name: parameter}) - assert params.get_sigma0() == [0.02] + assert params.get_sigma0() == pytest.approx([0.02]) - parameter._prior = None + parameter = pybop.Parameter(bounds=(0.375, 0.7)) + parameter._distribution = None params = pybop.Parameters({name: parameter}) assert params.get_sigma0() == [ 0.05 * (parameter.bounds[1] - parameter.bounds[0]) @@ -227,6 +244,11 @@ def test_initial_values_without_attributes(self): with pytest.raises(ParameterError, match="has no initial value"): parameter.get_initial_values() + def test_get_initial_values_if_none(self, name, parameter): + params = pybop.Parameters({name: parameter}) + params[name]._initial_value = None + assert params.get_initial_values() is not None + def test_parameters_init(self, name, parameter): # Error if parameters not dictionary or pybop.Parameters with pytest.raises( @@ -248,5 +270,5 @@ def test_parameters_repr(self, name, parameter): params = pybop.Parameters({name: parameter}) assert ( repr(params) - == "Parameters(1):\n Negative electrode active material volume fraction: prior= Gaussian, loc: 0.6, scale: 0.02, bounds=[0.375, 0.7]" + == f"Parameters(1):\n Negative electrode active material volume fraction: Parameter - Distribution: Gaussian, mean: {parameter.distribution.mean()}, standard deviation: {parameter.distribution.std()}, Bounds: (0.375, 0.7), Initial value: 0.6" ) diff --git a/tests/unit/test_plots.py b/tests/unit/test_plots.py index 6cb9e2d35..0f1ad654e 100644 --- a/tests/unit/test_plots.py +++ b/tests/unit/test_plots.py @@ -33,15 +33,38 @@ def model(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), - bounds=[0.5, 0.8], + distribution=pybop.Gaussian( + 0.68, + 0.05, + truncated_at=[0.5, 0.8], + ), + transformation=pybop.ScaledTransformation( + coefficient=1 / 0.3, intercept=-0.5 + ), + ), + "Positive electrode active material volume fraction": pybop.Parameter( + distribution=pybop.Gaussian( + 0.58, + 0.05, + truncated_at=[0.4, 0.7], + ), + transformation=pybop.ScaledTransformation( + coefficient=1 / 0.3, intercept=-0.4 + ), + ), + } + + @pytest.fixture + def parameters_no_bounds(self): + return { + "Negative electrode active material volume fraction": pybop.Parameter( + distribution=pybop.Gaussian(0.68, 0.05), transformation=pybop.ScaledTransformation( coefficient=1 / 0.3, intercept=-0.5 ), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), - bounds=[0.4, 0.7], + distribution=pybop.Gaussian(0.58, 0.05), transformation=pybop.ScaledTransformation( coefficient=1 / 0.3, intercept=-0.4 ), @@ -79,6 +102,16 @@ def fitting_problem(self, model, parameters, dataset): cost = pybop.SumSquaredError(dataset) return pybop.Problem(simulator, cost) + @pytest.fixture + def fitting_problem_no_bounds(self, model, parameters_no_bounds, dataset): + parameter_values = model.default_parameter_values + parameter_values.update(parameters_no_bounds) + simulator = pybop.pybamm.Simulator( + model, parameter_values=parameter_values, protocol=dataset + ) + cost = pybop.SumSquaredError(dataset) + return pybop.Problem(simulator, cost) + @pytest.fixture def experiment(self): return pybamm.Experiment(["Discharge at 1C for 10 minutes (20 second period)"]) @@ -103,16 +136,15 @@ def test_problem_plots(self, fitting_problem, design_problem): fitting_problem, inputs=fitting_problem.parameters.to_dict([0.6, 0.6]) ) - def test_cost_plots(self, fitting_problem): + def test_cost_plots(self, fitting_problem, fitting_problem_no_bounds): # Test plot of Cost objects pybop.plot.contour(fitting_problem, gradient=True, steps=5) pybop.plot.contour(fitting_problem, gradient=True, steps=5, transformed=True) # Test without bounds - fitting_problem.parameters.remove_bounds() with pytest.raises(ValueError, match="All parameters require bounds for plot."): - pybop.plot.contour(fitting_problem, steps=5) + pybop.plot.contour(fitting_problem_no_bounds, steps=5) # Test with bounds pybop.plot.contour( @@ -199,9 +231,12 @@ def test_contour_incorrect_number_of_parameters(self, model, dataset): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.68, 0.05), - bounds=[0.5, 0.8], - ), + distribution=pybop.Gaussian( + 0.68, + 0.05, + truncated_at=[0.5, 0.8], + ), + ) } ) simulator = pybop.pybamm.Simulator( @@ -218,12 +253,18 @@ def test_contour_incorrect_number_of_parameters(self, model, dataset): parameter_values.update( { "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.58, 0.05), - bounds=[0.4, 0.7], + pybop.Gaussian( + 0.58, + 0.05, + truncated_at=[0.4, 0.7], + ), ), "Positive particle radius [m]": pybop.Parameter( - prior=pybop.Gaussian(4.8e-06, 0.05e-06), - bounds=[4e-06, 6e-06], + distribution=pybop.Gaussian( + 4.8e-06, + 0.05e-06, + truncated_at=[4e-06, 6e-06], + ), ), } ) @@ -243,9 +284,12 @@ def test_nyquist(self): parameter_values.update( { "Positive electrode thickness [m]": pybop.Parameter( - prior=pybop.Gaussian(60e-6, 1e-6), - bounds=[10e-6, 80e-6], - ) + distribution=pybop.Gaussian( + 60e-6, + 1e-6, + truncated_at=[10e-6, 80e-6], + ), + ), } ) diff --git a/tests/unit/test_posterior.py b/tests/unit/test_posterior.py index 1b6ddd9a0..d5ca85c42 100644 --- a/tests/unit/test_posterior.py +++ b/tests/unit/test_posterior.py @@ -33,8 +33,11 @@ def parameter_values(self, model, ground_truth): def parameter(self, ground_truth): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.5, 0.01), - bounds=[0.375, 0.625], + distribution=pybop.Gaussian( + 0.5, + 0.01, + truncated_at=[0.375, 0.625], + ), initial_value=ground_truth, ) } @@ -83,6 +86,22 @@ def test_log_posterior_construction(self, simulator, parameter, likelihood, prio assert problem.parameters[key] is parameter[key] assert problem._cost.parameters is problem.parameters + # Test construction with Parameter + posterior = pybop.LogPosterior( + likelihood, prior=pybop.Parameter(distribution=prior) + ) + problem = pybop.Problem( + simulator, posterior + ) # uses posterior.set_joint_prior() + assert posterior.joint_prior == prior + + with pytest.raises( + TypeError, + match="All priors must either be of type pybop.Parameter, pybop.Distribution or scipy.stats.distributions.rv_frozen", + ): + posterior = pybop.LogPosterior(likelihood, prior=st.norm) + posterior.set_joint_prior() + def test_log_posterior_construction_no_prior(self, simulator, likelihood): # Test log posterior construction without prior posterior = pybop.LogPosterior(likelihood, prior=None) @@ -90,10 +109,10 @@ def test_log_posterior_construction_no_prior(self, simulator, likelihood): problem._cost.set_joint_prior() assert problem._cost.joint_prior is not None - assert isinstance(problem._cost.joint_prior, pybop.JointPrior) + assert isinstance(problem._cost.joint_prior, pybop.JointDistribution) - for i, p in enumerate(problem._cost.joint_prior._priors): - assert p == problem.parameters.priors()[i] + for i, p in enumerate(problem.parameters.distributions()): + assert p == problem._cost.joint_prior._distributions[i] @pytest.fixture def problem(self, simulator, likelihood, prior): diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py index 88ad5400c..81adefee7 100644 --- a/tests/unit/test_problem.py +++ b/tests/unit/test_problem.py @@ -22,12 +22,18 @@ def model(self): def parameters(self): return { "Negative particle radius [m]": pybop.Parameter( - prior=pybop.Gaussian(2e-05, 0.1e-5), - bounds=[1e-6, 5e-5], + distribution=pybop.Gaussian( + 2e-05, + 0.1e-5, + truncated_at=[1e-6, 5e-5], + ) ), "Positive particle radius [m]": pybop.Parameter( - prior=pybop.Gaussian(0.5e-05, 0.1e-5), - bounds=[1e-6, 5e-5], + distribution=pybop.Gaussian( + 0.5e-05, + 0.1e-5, + truncated_at=[1e-6, 5e-5], + ) ), } diff --git a/tests/unit/test_sampling.py b/tests/unit/test_sampling.py index eb75f736a..4d832e655 100644 --- a/tests/unit/test_sampling.py +++ b/tests/unit/test_sampling.py @@ -49,12 +49,18 @@ def dataset(self): def parameters(self): return { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.2), - bounds=[0.58, 0.62], + distribution=pybop.Gaussian( + 0.6, + 0.2, + truncated_at=[0.58, 0.62], + ), ), "Positive electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.55, 0.05), - bounds=[0.53, 0.57], + distribution=pybop.Gaussian( + 0.55, + 0.05, + truncated_at=[0.53, 0.57], + ), ), } @@ -72,7 +78,7 @@ def posterior_problem(self, model, parameters, dataset): likelihood = pybop.GaussianLogLikelihoodKnownSigma(dataset, sigma0=0.01) prior1 = pybop.Gaussian(0.7, 0.02) prior2 = pybop.Gaussian(0.6, 0.02) - composed_prior = pybop.JointPrior(prior1, prior2) + composed_prior = pybop.JointDistribution(prior1, prior2) posterior = pybop.LogPosterior(likelihood, prior=composed_prior) return pybop.Problem(simulator, posterior) @@ -165,8 +171,7 @@ def test_single_parameter_sampling(self, model, dataset, MCMC, n_chains): parameter_values.update( { "Negative electrode active material volume fraction": pybop.Parameter( - prior=pybop.Gaussian(0.6, 0.2), - bounds=[0.58, 0.62], + distribution=pybop.Gaussian(0.6, 0.2, truncated_at=[0.58, 0.62]) ) } ) diff --git a/tests/unit/test_simulator.py b/tests/unit/test_simulator.py new file mode 100644 index 000000000..d6aeae421 --- /dev/null +++ b/tests/unit/test_simulator.py @@ -0,0 +1,55 @@ +import pytest + +import pybop +from pybop.simulators.base_simulator import BaseSimulator + + +class TestSimulator: + """ + A class to test the BaseSimulator class. + """ + + pytestmark = pytest.mark.unit + + def test_parameter_errors_constructor(self): + params = { + "Negative particle radius [m]": pybop.Gaussian( + 2e-05, + 0.1e-5, + truncated_at=[1e-6, 5e-5], + ), + "Positive particle radius [m]": pybop.Gaussian( + 0.5e-05, + 0.1e-5, + truncated_at=[1e-6, 5e-5], + ), + } + + with pytest.raises( + TypeError, + match="All elements in the list must be pybop.Parameter objects.", + ): + BaseSimulator(params) + + params = [ + pybop.Parameter( + pybop.Gaussian( + 2e-05, + 0.1e-5, + truncated_at=[1e-6, 5e-5], + ) + ), + pybop.Parameter( + pybop.Gaussian( + 2e-05, + 0.1e-5, + truncated_at=[1e-6, 5e-5], + ) + ), + ] + + with pytest.raises( + TypeError, + match="The input parameters must be a a dictionary of Parameter objects or a pybop.Parameters object.", + ): + BaseSimulator(params) From 6b9b280fec9ed37bf8f81ce388935e93108f8289 Mon Sep 17 00:00:00 2001 From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com> Date: Mon, 8 Dec 2025 14:27:45 +0000 Subject: [PATCH 06/37] Update for new PyProBE release (#852) --- pybop/_dataset.py | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pybop/_dataset.py b/pybop/_dataset.py index 4cf0a6359..7cdf41953 100644 --- a/pybop/_dataset.py +++ b/pybop/_dataset.py @@ -15,7 +15,7 @@ def get( """Get result data as numpy ndarray""" @property - def column_list(self) -> list[str]: + def columns(self) -> list[str]: """List of column data""" @@ -219,8 +219,8 @@ def import_pyprobe_result( for i, col in enumerate(pybop_columns): if ( pyprobe_columns[i] == "Cycle" - and "Cycle" not in result.column_list - and "Step" in result.column_list + and "Cycle" not in result.columns + and "Step" in result.columns ): warnings.warn( "No cycle information present. Cycles will be inferred from the step numbers.", diff --git a/pyproject.toml b/pyproject.toml index c58206c05..262da1bab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,7 @@ bpx = [ ] pyprobe = [ - "PyProBE-Data;python_version>='3.11'" + "PyProBE-Data>=2.5.0;python_version>='3.11'" ] all = ["pybop[plot,scifem,bpx,pyprobe]"] From b843f6769992f591d18bf32467b268c3f518c52a Mon Sep 17 00:00:00 2001 From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com> Date: Mon, 8 Dec 2025 15:01:39 +0000 Subject: [PATCH 07/37] Add JOSS paper citation, code and figures (#851) * Add JOSS template and compilation action * Increment the upload action * Add workflow dispatch trigger * Fix typo * Update ref format * Add sketch * Add architecture figure * Add refs * Add table * Update tables * Add review refs * Add some equations * Add ref * Update Omega and table refs * Minor formatting * updt summary, tables, statement of need * fix: feedback from initial internal review * add pdf asset for JOSS inclusion * small additions, test JOSS CI on pdf figure rendering * updates to statement of need, architecture * update tables, monte carlo additions * Minor updates and formatting * Pre-commit * Add joss plotting scripts * Add example plotting scripts and plots * Add example design plots * Add example plots to paper * Update figures and text. * feat: adds multi-dimensional learning rate gradient descent implementation * Update plots, article, adds shell script for plot combination * adds contour figure, shell updates, clean-up * feat: adds kwargs to plots, effective sample size has option combined samples arg * feat: improve contour and surface plots, add x0 entry to optimiser log * plots: update final position legend entry * Updates contour plots, adds MCMC sampling to param_plots, fixes typos * Updates and typo to article, adds posterior plot, updates design plot, w/ corresponding code * proofreading, update parameterisation example for RMSE cost, align figure styles * update heuristic parameter convergence plot, add tex preprint format. * adds numerical impedance predictions, figs, citation. updts nyquist grids, * Adds Agriya w/ correct affiliation, updts tex pre-print * Fix typos, update table format * Update paper.md Dave's edits - up to the end of the first paragraph in the 'architecture' section * fixes: internal review feedback, minus figures * Edits to paper (#578) * Edits to paper * Add citation * feat: updates figures, contour plot into plotly subplots. * feat: align object name method, adds plotly express to PlotlyManager, * Update paper.md minor tweaks up to the end of 'statement of need' * Update paper.md Dave changes up to 'background' * Update paper.md Dave changes up to "next, we demonstrate.." * Update paper.md text changes until 'design optimisation' * Update paper.md more of dave's changes; minor things plus removed fig 1 * adds percentile to posterior figure, rebuilds pdf. * Update paper.md Dave's edits until the end of fig 7 * Update paper.md end of editing for now * Updates from review, adds bib entries, improves design plot * update and vectorise figures. * Minor clarifications * Updates figures, /joss directory -> /papers * Restores workflow, MCMC table * Update Agriya's affiliation (#748) * feat: remove redudant sections post restructure * feat: updates for restructured arch * feat: grammar, typos, etc. * refactor: updates to architecture section, update architecture figure * fix: paper build workflow * feat: rewrites for conciseness, update architecture figure * Clean up bib * Update text * Update diagram * Update contributors link * Remove table 1 * Update figures * Update table 2 * Align figures * Update paper.pdf * Refine text in paper.md for clarity and consistency edits up to table 1 * Fix formatting and improve clarity in paper.md changes to end of table 2 * Refine terminology and descriptions in paper.md Updated terminology for clarity and precision in the paper. * Larger figure labels * Negative sign * Update paper.pdf * Add equal-contrib field for authors * Rename Quansight PBC to Quansight (#841) * Re-run for consistency with release * Update UK to United Kingdom in affiliations * Update CITATION.cff * Add JOSS badge * Remove old versions * Delete PyBOP-high-level.pdf * Remove Plotly express * Update for new PyProBE release --------- Co-authored-by: Brady Planden Co-authored-by: David Howey Co-authored-by: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Co-authored-by: bradyplanden --- .github/workflows/draft-pdf.yml | 31 + .gitignore | 3 + CITATION.cff | 83 +- README.md | 1 + papers/joss/design_plots.py | 164 +++ .../joss/figures/PyBOP_components.drawio.pdf | Bin 0 -> 73630 bytes .../joss/figures/combined/contour_subplot.pdf | Bin 0 -> 164478 bytes papers/joss/figures/combined/converge.pdf | Bin 0 -> 27681 bytes papers/joss/figures/combined/design.pdf | Bin 0 -> 33369 bytes papers/joss/figures/combined/impedance.pdf | Bin 0 -> 27072 bytes .../combined/optimisers_parameters.pdf | Bin 0 -> 106468 bytes papers/joss/figures/combined/posteriors.pdf | Bin 0 -> 252802 bytes .../joss/figures/combined/sim-landscape.pdf | Bin 0 -> 33094 bytes .../individual/convergence_maximising.pdf | Bin 0 -> 15783 bytes .../individual/convergence_minimising.pdf | Bin 0 -> 14567 bytes .../figures/individual/design_gravimetric.pdf | Bin 0 -> 18574 bytes .../figures/individual/design_prediction.pdf | Bin 0 -> 17983 bytes .../individual/evolution_parameters.pdf | Bin 0 -> 46660 bytes .../individual/gradient_parameters.pdf | Bin 0 -> 24990 bytes .../individual/heuristic_parameters.pdf | Bin 0 -> 40448 bytes .../figures/individual/impedance_contour.pdf | Bin 0 -> 17945 bytes .../figures/individual/impedance_spectrum.pdf | Bin 0 -> 12489 bytes papers/joss/figures/individual/landscape.pdf | Bin 0 -> 19062 bytes papers/joss/figures/individual/simulation.pdf | Bin 0 -> 17406 bytes papers/joss/image_combine.sh | 9 + papers/joss/paper.bib | 380 ++++++ papers/joss/paper.md | 188 +++ papers/joss/param_plots.py | 1028 +++++++++++++++++ pybop/plot/nyquist.py | 26 +- 29 files changed, 1863 insertions(+), 50 deletions(-) create mode 100644 .github/workflows/draft-pdf.yml create mode 100644 papers/joss/design_plots.py create mode 100644 papers/joss/figures/PyBOP_components.drawio.pdf create mode 100644 papers/joss/figures/combined/contour_subplot.pdf create mode 100644 papers/joss/figures/combined/converge.pdf create mode 100644 papers/joss/figures/combined/design.pdf create mode 100644 papers/joss/figures/combined/impedance.pdf create mode 100644 papers/joss/figures/combined/optimisers_parameters.pdf create mode 100644 papers/joss/figures/combined/posteriors.pdf create mode 100644 papers/joss/figures/combined/sim-landscape.pdf create mode 100644 papers/joss/figures/individual/convergence_maximising.pdf create mode 100644 papers/joss/figures/individual/convergence_minimising.pdf create mode 100644 papers/joss/figures/individual/design_gravimetric.pdf create mode 100644 papers/joss/figures/individual/design_prediction.pdf create mode 100644 papers/joss/figures/individual/evolution_parameters.pdf create mode 100644 papers/joss/figures/individual/gradient_parameters.pdf create mode 100644 papers/joss/figures/individual/heuristic_parameters.pdf create mode 100644 papers/joss/figures/individual/impedance_contour.pdf create mode 100644 papers/joss/figures/individual/impedance_spectrum.pdf create mode 100644 papers/joss/figures/individual/landscape.pdf create mode 100644 papers/joss/figures/individual/simulation.pdf create mode 100755 papers/joss/image_combine.sh create mode 100644 papers/joss/paper.bib create mode 100644 papers/joss/paper.md create mode 100644 papers/joss/param_plots.py diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml new file mode 100644 index 000000000..7ef4b7759 --- /dev/null +++ b/.github/workflows/draft-pdf.yml @@ -0,0 +1,31 @@ +name: JossPaperCompilation + +on: + push: + paths: + - papers/joss/** + pull_request: + paths: + - 'papers/joss/**' + workflow_dispatch: +jobs: + paper: + runs-on: ubuntu-latest + name: Paper Draft + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build draft PDF + uses: openjournals/openjournals-draft-action@master + with: + journal: joss + # This should be the path to the paper within your repo. + paper-path: papers/joss/paper.md + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: paper + # This is the output path where Pandoc will write the compiled + # PDF. Note, this should be the same directory as the input + # paper.md + path: papers/joss/paper.pdf diff --git a/.gitignore b/.gitignore index b2123edf4..a2b444c1d 100644 --- a/.gitignore +++ b/.gitignore @@ -323,3 +323,6 @@ results/ # Pycharm *.idea/ + +# JOSS +jats/ diff --git a/CITATION.cff b/CITATION.cff index 1f7be5c7a..fcadd20ac 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,35 +1,62 @@ -cff-version: 1.2.0 -title: 'PyBOP: A Python package for battery model optimisation and parameterisation' -message: >- - If you use this software, please cite the article below. +cff-version: "1.2.0" authors: - - given-names: Brady - family-names: Planden +- family-names: Planden + given-names: Brady + orcid: "https://orcid.org/0000-0002-1082-9125" +- family-names: Courtier + given-names: Nicola E. + orcid: "https://orcid.org/0000-0002-5714-1096" +- family-names: Robinson + given-names: Martin + orcid: "https://orcid.org/0000-0002-1572-6782" +- family-names: Khetarpal + given-names: Agriya + orcid: "https://orcid.org/0000-0002-1112-1786" +- family-names: Planella + given-names: Ferran Brosa + orcid: "https://orcid.org/0000-0001-6363-2812" +- family-names: Howey + given-names: David A. + orcid: "https://orcid.org/0000-0002-0620-3955" +contact: +- family-names: Howey + given-names: David A. + orcid: "https://orcid.org/0000-0002-0620-3955" +doi: 10.5281/zenodo.17711656 +message: If you use this software, please cite our article in the + Journal of Open Source Software. +preferred-citation: + authors: + - family-names: Planden + given-names: Brady orcid: "https://orcid.org/0000-0002-1082-9125" - - given-names: Nicola E. - family-names: Courtier + - family-names: Courtier + given-names: Nicola E. orcid: "https://orcid.org/0000-0002-5714-1096" - - given-names: Martin - family-names: Robinson + - family-names: Robinson + given-names: Martin orcid: "https://orcid.org/0000-0002-1572-6782" - - given-names: Agriya - family-names: Khetarpal + - family-names: Khetarpal + given-names: Agriya orcid: "https://orcid.org/0000-0002-1112-1786" - - given-names: Ferran - family-names: Brosa Planella + - family-names: Planella + given-names: Ferran Brosa orcid: "https://orcid.org/0000-0001-6363-2812" - - given-names: David A. - family-names: Howey + - family-names: Howey + given-names: David A. orcid: "https://orcid.org/0000-0002-0620-3955" - -keywords: - - "python" - - "battery models" - - "parameter inference" - - "optimization" - -journal: "arXiv" -date-released: 2024-12-20 -doi: 10.48550/arXiv.2412.15859 -version: "25.11" # Update this alongside new releases -repository-code: 'https://www.github.com/pybop-team/pybop' + date-published: 2025-12-03 + doi: 10.21105/joss.07874 + issn: 2475-9066 + issue: 116 + journal: Journal of Open Source Software + publisher: + name: Open Journals + start: 7874 + title: "PyBOP: A Python package for battery model optimisation and + parameterisation" + type: article + url: "https://joss.theoj.org/papers/10.21105/joss.07874" + volume: 10 +title: "PyBOP: A Python package for battery model optimisation and + parameterisation" diff --git a/README.md b/README.md index 42a46bb7d..58c94e269 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ [![nbviewer](https://raw.githubusercontent.com/jupyter/design/master/logos/Badges/nbviewer_badge.svg)](https://nbviewer.org/github/pybop-team/PyBOP/tree/develop/examples/notebooks/) [![Static Badge](https://img.shields.io/badge/https%3A%2F%2Fpybop-team.github.io%2Fpybop-bench%2F?label=Benchmarks)](https://pybop-team.github.io/pybop-bench/) [![Releases](https://img.shields.io/github/v/release/pybop-team/PyBOP?color=gold)](https://github.com/pybop-team/PyBOP/releases) + [![DOI](https://joss.theoj.org/papers/10.21105/joss.07874/status.svg)](https://doi.org/10.21105/joss.07874) [Main Branch Examples](https://github.com/pybop-team/PyBOP/tree/main/examples) [Develop Branch Examples](https://github.com/pybop-team/PyBOP/tree/develop/examples) diff --git a/papers/joss/design_plots.py b/papers/joss/design_plots.py new file mode 100644 index 000000000..c7aec3231 --- /dev/null +++ b/papers/joss/design_plots.py @@ -0,0 +1,164 @@ +# A script to generate design optimisation plots for the JOSS paper. + + +import numpy as np +import pybamm +from pybamm import Parameter + +import pybop +from pybop.plot import PlotlyManager + +go = PlotlyManager().go +np.random.seed(8) +axis_font_size = 24 +tick_font_size = 20 + +# Choose which plots to show and save +create_plot = {} +create_plot["gravimetric"] = True # takes longer +create_plot["prediction"] = True + +# Define model and parameter values +model = pybamm.lithium_ion.SPMe() +pybop.pybamm.add_variable_to_model(model, "Gravimetric energy density [W.h.kg-1]") +parameter_values = pybamm.ParameterValues("Chen2020") +pybop.pybamm.set_formation_concentrations(parameter_values) +parameter_values.update( + { + "Electrolyte density [kg.m-3]": Parameter("Separator density [kg.m-3]"), + "Negative electrode active material density [kg.m-3]": Parameter( + "Negative electrode density [kg.m-3]" + ), + "Negative electrode carbon-binder density [kg.m-3]": Parameter( + "Negative electrode density [kg.m-3]" + ), + "Positive electrode active material density [kg.m-3]": Parameter( + "Positive electrode density [kg.m-3]" + ), + "Positive electrode carbon-binder density [kg.m-3]": Parameter( + "Positive electrode density [kg.m-3]" + ), + "Positive electrode porosity": 1.0 + - Parameter("Positive electrode active material volume fraction"), + "Cell mass [kg]": pybop.pybamm.cell_mass(), + }, + check_already_exists=False, +) + +# Fitting parameters +parameter_values.update( + { + "Positive electrode thickness [m]": pybop.Parameter( + initial_value=8.88e-05, + prior=pybop.Gaussian(7.56e-05, 3e-05), + bounds=[50e-06, 120e-06], + transformation=pybop.UnitHyperCube(lower=50e-6, upper=120e-6), + ), + "Positive electrode active material volume fraction": pybop.Parameter( + initial_value=0.42, + prior=pybop.Gaussian(0.58, 0.1), + bounds=[0.3, 0.825], + transformation=pybop.UnitHyperCube(lower=0.3, upper=0.825), + ), + } +) + +# Define test protocol +experiment = pybamm.Experiment(["Discharge at 1C until 2.5 V (10 second period)"]) +Q = parameter_values["Nominal cell capacity [A.h]"] +print(f"The 1C rate is {Q} A.") + +# Generate problem +simulator = pybop.pybamm.Simulator( + model, + parameter_values=parameter_values, + protocol=experiment, + solver=pybamm.IDAKLUSolver(atol=1e-6, rtol=1e-6), +) +cost = pybop.DesignCost(target="Gravimetric energy density [W.h.kg-1]") +problem = pybop.Problem(simulator, cost) + +# Set up the optimiser +options = pybop.PintsOptions(max_iterations=250, max_unchanged_iterations=45) +optim = pybop.NelderMead(problem, options=options) + +# Run optimisation +result = optim.run() +print(result) +print("Estimated parameters:", result.x) +print(f"Initial gravimetric energy density: {problem(result.x0):.1f} W.h.kg-1") +print(f"Optimised gravimetric energy density: {problem(result.x):.1f} W.h.kg-1") + +if create_plot["gravimetric"]: + # Plot the cost landscape with optimisation path + gravimetric_fig = pybop.plot.contour( + result, + steps=25, + show=False, + xaxis=dict( + title=dict( + text="Positive electrode thickness / m", font_size=axis_font_size + ), + tickfont_size=tick_font_size, + exponentformat="power", + ), + yaxis=dict(title_font_size=axis_font_size, tickfont_size=tick_font_size), + legend=dict( + orientation="h", + yanchor="bottom", + y=1.02, + xanchor="right", + x=1, + font_size=tick_font_size, + ), + coloraxis_colorbar=dict(tickfont_size=tick_font_size), + margin=dict(t=50), + title=None, + ) + gravimetric_fig.write_image("figures/individual/design_gravimetric.pdf") + +if create_plot["prediction"]: + # Plot the timeseries output + problem.target = "Voltage [V]" + figs = pybop.plot.problem( + problem, + inputs=result.best_inputs, + title=None, + legend=dict( + orientation="h", + yanchor="bottom", + y=1.02, + xanchor="right", + x=1, + font_size=tick_font_size - 2, + ), + xaxis=dict( + showline=True, + linewidth=1, + linecolor="black", + mirror=True, + title_font_size=axis_font_size, + tickfont_size=tick_font_size, + ), + yaxis=dict( + showline=True, + linewidth=1, + linecolor="black", + mirror=True, + title_font_size=axis_font_size, + tickfont_size=tick_font_size, + ), + margin=dict(t=60, b=84, r=50, l=15), + show=False, + ) + + prediction_fig = figs[0] + prediction_fig.data[1].update(line=dict(color="#00CC97")) + prediction_fig.data[ + 0 + ].name = f"Initial: {problem(result.x0):.1f} W h kg-1" + prediction_fig.data[ + 1 + ].name = f"Optimised: {problem(result.x):.1f} W h kg-1" + prediction_fig.show() + prediction_fig.write_image("figures/individual/design_prediction.pdf") diff --git a/papers/joss/figures/PyBOP_components.drawio.pdf b/papers/joss/figures/PyBOP_components.drawio.pdf new file mode 100644 index 0000000000000000000000000000000000000000..efcb9074b757044ebec1c082d745a7e1fb5f7bc2 GIT binary patch literal 73630 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 PtEk*iJ|!b_2Ws$tSe@6X literal 0 HcmV?d00001 diff --git a/papers/joss/figures/combined/contour_subplot.pdf b/papers/joss/figures/combined/contour_subplot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6cabccc5abdd64a25df536d49dfbde059eaeb99d GIT binary patch literal 164478 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 literal 0 HcmV?d00001 diff --git a/papers/joss/figures/combined/impedance.pdf b/papers/joss/figures/combined/impedance.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1d99778419887009853a32de90bbaf9d70ebe16c GIT binary patch literal 27072 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
~VpZmq}dJ;%}FGv=TX2-@G2cUDpB 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 literal 0 HcmV?d00001 diff --git a/papers/joss/figures/combined/posteriors.pdf b/papers/joss/figures/combined/posteriors.pdf new file mode 100644 index 0000000000000000000000000000000000000000..abae4216ec0c38071f3250dd5ed9ef98a73317b7 GIT binary patch literal 252802 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