Releases: pybop-team/PyBOP
v26.3
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v26.3 - 2026-03-05
Features
- #897 - Adds separate
LogPrior,LogPDFandLogPosteriorclasses and updatesset_target. - #873 - Adds methods for saving result and reconstructing result from saved data.
result.save: saves entire python object using pickle.result.save_data: saves primarily the logger data and any other data required to reconstruct the result from the problem or the sampler (forSamplingResult).Result.load_result: reconstructs theResultobject based on the underlying problem (or sampler forSamplingResult) and the data saved to file. - #862 - Adds pybop.MarginalDistribution, pybop.MultivariateLogNormal.
- #889 - Adds methods for setting the initial state from a voltage to the grouped models.
- #869 - Adds methods for pre-processing current data for linear interpolation.
- #868 - Adds support for Python3.13 (NumPy restricted to <2.4, EP-BOLFI optimiser and PyProBE do not support Python 3.13).
- #871 - Adds a lumped thermal model called
CellTemperature. - #846 - Adds Bayesian optimisation framework and, as an example, the EP-BOLFI optimiser
Bug Fixes
- #890 - Fix the assignment of parameters within a
MetaProblem. - #847 - Update readme and diagram of pybop components so that the diagram is displayed correctly in the readme.
Breaking Changes
- #894 - Distinguish different uses of
sigma, pass the covariance to the samplers, and add parameterget_meanandget_stdfunctions. - #862 - Removes MultivariateParameters class. Instead allows multivariate parameters to be passed via pybamm.ParameterValues (as a pybop.Parameter with a pybop.MarginalDistribution). The pybop.Parameters class now handles multivariate parameters. Multivariate distributions are now defined in the model space instead of the search space.
- #878 - Use "Current [A]" instead of "Current function [A]" in datasets and allow list of control functions.
- #864 - Remove
check_already_existsfromParameterValuesfollowing PyBaMM PR 5339. - #860 - Create a parent class for optimisation and sampling results, move
PosteriorSummaryattributes to theSamplingResultand deprecate thepints.AdaptiveCovarianceMCMCsampler. - #857 - Deprecate the custom PyBaMM model build process for a simulation without an experiment and rename
batch_solveassolve_batchto align with other functions. - #839 - Renames 'prior' as 'distribution'
for pybop.Parameter. Allows construction of apybop.Parameterwith a distribution of typescipy.stats.distributions.rv_frozen. Removesmargins,set_bounds,remove_boundsfrompybop.Parameter.
v25.11
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v25.11 - 2025-11-24
Features
- #815 - Adds function import_pyprobe_result to import a pyprobe.result into a pybop.dataset. Allows for creating a dataset directly from a pybamm.solution object.
Optimisations
- #837 - Update the descriptons in the example scripts and notebooks.
- #833 - Upgrade to Pints 0.5.1, PyBaMM 25.10.1 and NumPy 2, fix some deprecation warnings.
- #816 - Enable simulator multi-processing via the evaluators.
Breaking Changes
- #829 - Create
SamplingResultand best inputs property for results.
v25.10
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v25.10 - 2025-10-31
This release presents a major restructure of PyBOP's base classes. We move from setting up a model, problem, cost,
then optimiser to defining a simulator, cost, problem, and then optimiser. A pybop.pybamm.Simulator is designed
to simulate a pybamm.BaseModel. Optimisation parameters can be passed through a pybamm.ParameterValues class.
To understand how to update your use of PyBOP, please take a look at the example notebooks and scripts.
Breaking Changes
- #820 - Remove the
nameproperty frompybop.Parameter - #821 - Remove the
papersfolder and update Readme. - #809 - Major restructure, including:
- Deprecate Python 3.9 support
- Update initial state setting (requires PyBaMM > 25.8)
- Remove jax methods
- Add PyBaMM and PyBaMM-EIS simulators for rebuilding and running simulations for a given set of input parameters
- Remove PyBaMM wrappers and enable use of PyBaMM model, parameter values and experiment classes
- Remove observers
- Remove standalone class examples
- Improve logging
- Remove Optimisation and MCMCSampler wrapper classes
- Remove Fisher information computation
- Rename
apply_transformargument totransformed - Remove the
update_capacityoption from theDesignProblem - Update sensitivities retrieval (for PyBaMM 25.8)
- Remove uninformative examples
- Move optimiser and sampler options into defined classes
- Add PyBaMM utilities, design variable definitions and the
add_variable_to_modelfunction - Allow plotting via functions on the
OptimisationResult - Separate the cost classes from the
Problem - Replace
FittingProblemandDesignProblemby a singleProblemclass - Rename and reimplement
MultiFittingProblemasMetaProblem - Add
BaseSimulatoras a generic base class for thepybop.pybamm.Simulatorandpybop.pybamm.EISSimulator - Enable
pybop.Parameterobjects to be passed directly to an instance ofpybamm.ParameterValues - Update the method for setting formation concentrations to be part of the model definition
- Rename some example scripts and notebooks
- Update the docs and test workflows
v25.6
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v25.6 - 2025-07-16
Features
- #767 - Adds the
GroupedSPMmodel for parameter identification. - #644 - Adds example applications for common battery experiments.
Optimisations
- #763 - Updates the GITT pulse fitting method to allow iteration over many pulses.
Bug Fixes
- #771 - Match naming of
n_sensitivity_samplesand fix intermittenttest_optimisation_f_guessedtest. - #737 - Sensitivities no longer available for CasadiSolver in Pybamm v25.6 onwards. Updates Hallemans example scripts.
- #705 - Bug fix
fitting_problem.evaulate()failure return type alongside fixes for Pybammv25.4. - #546 - Default Pybamm solver to
IDAKLU, changes required for Pybamm v25.4.1
v25.3
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v25.3 - 2025-03-28
Features
- #649 - Adds verbose outputs to Pints-based optimisers
- #659 - Enables user-defined weightings of the error measures.
- #674 - Adds the reason for stopping to the
OptimisationResult. - #663 - Adds DFN fitting examples alongside synthetic data generation methods.
Optimisations
- #676 - Update the format of the problem sensitivities to a dict.
- #681 - Update the spatial variable defaults of the
GroupedSPMemodel. - #692 - Improvements/fixes for
BaseSamplerandBasePintsSamplerclasses, addsChainProcessorclasses w/ clearer structure.
Bug Fixes
- #678 - Fixed bug where model wasn't plotted for observer classes with
pybop.plot.quick().
Breaking Changes
v25.1
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v25.1 - 2025-02-03
Features
- #636 - Adds
pybop.IRPropPlusoptimiser with corresponding tests. - #635 - Adds support for multi-proposal evaluation of list-like objects to
BaseCostclasses. - #635 - Adds global parameter sensitivity analysis with method
BaseCost.sensitivity_analysis. This is computation is added toOptimisationResultif optimiser argcompute_sensitivitiesisTrue. An additional arg is added to select the number of samples for analysis:n_sensitivity_samples. - [#630] (#632) - Fisher Information Matrix added to
BaseLikelihoodclass. - #619 - Adds
pybop.SimulatingAnnealingoptimiser with corresponding tests. - #565 - DigiBatt added as funding partner.
Optimisations
- #638 - Allows the problem class to accept any domain name.
- #618 - Adds Mean Absolute Error (MAE) and Mean Squared Error (MSE) costs.
- #601 - Deprecates
MultiOptimisationResultby merging withOptimisationResult. - #600 - Removes repetitious functionality within the cost classes.
Bug Fixes
- #602 - Aligns the standard quick plot of
MultiFittingProblemoutputs.
Breaking Changes
- #656 - Completes
ParameterSetchanges from #593 and aligns the simulation options inmodel.predictwith the model properties such as the solver. - #593 - Enables
ParameterSetto systematically return apybamm.ParameterValuesobject within the model class.
New Contributors
- @pipliggins made their first contribution in #573
v24.12
Full Changelog
https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
What's Changed
- v24.9.1 main -> develop by @BradyPlanden in #511
- JuPyter notebook link in README.md file broke because of file structure change by @Dibyendu-IITKGP in #509
- LogPosterior refactor, partial fix for #510 by @BradyPlanden in #512
- chore: update pre-commit hooks by @pre-commit-ci in #516
- bpx is added as an optional dependency by @Dibyendu-IITKGP in #499
- Adds positional args for nox tests session by @BradyPlanden in #519
- chore: update pre-commit hooks by @pre-commit-ci in #523
- Adds transformations notebook by @BradyPlanden in #521
- chore: update pre-commit hooks by @pre-commit-ci in #528
- Add PowerDensity costs by @NicolaCourtier in #530
- Align notebook names by @BradyPlanden in #534
- Refactors OptimisationResult class, adds finite cost check for identified parameters by @BradyPlanden in #527
- Allow linked design parameters by @NicolaCourtier in #533
- Adds Voronoi cost landscape plot by @BradyPlanden in #531
- chore: update pre-commit hooks by @pre-commit-ci in #537
- OptimiseResult().str across examples, adds OCP balancing script by @BradyPlanden in #536
- Allow different lengths for validation plots by @NicolaCourtier in #538
- Adds plotting methods for monte carlo samplers by @BradyPlanden in #409
- chore: update pre-commit hooks by @pre-commit-ci in #539
- Adds ScaledLogLikelihood Class by @BradyPlanden in #541
- Define StandardPlot add_traces and parse_data by @NicolaCourtier in #545
- Update mass and capacity calculations for half-cell models by @NicolaCourtier in #543
- chore: update pre-commit hooks by @pre-commit-ci in #547
- chore: update pre-commit hooks by @pre-commit-ci in #552
- Refactor optimisation args by @BradyPlanden in #551
- Additions to #551 by @BradyPlanden in #555
- Add ECM example with change of parameters by @NicolaCourtier in #557
- chore: update pre-commit hooks by @pre-commit-ci in #558
- Scheduled tests, lychee, default bounds by @BradyPlanden in #562
- Divide examples into folders by @NicolaCourtier in #559
- Update readme by @NicolaCourtier in #564
- chore: update pre-commit hooks by @pre-commit-ci in #568
- Parameter specific learning rates for Gradient Descent by @BradyPlanden in #569
- Unit Hypercube Transformation by @BradyPlanden in #566
- Fix bug with old PyBaMM version being fetched for scheduled tests by @agriyakhetarpal in #572
- chore: update pre-commit hooks by @pre-commit-ci in #574
- Improvement to landscape plots, MCMC summary,
x0log entry by @BradyPlanden in #570 - Update notebooks by @BradyPlanden in #575
- Fixes security risk with download-artifact action by @BradyPlanden in #576
- Fixes #581 -
population_sizesetter by @BradyPlanden in #582 - Add naming utility by @NicolaCourtier in #579
- Multi-start functionality for optimisers by @BradyPlanden in #571
- Fix SciPy cost logs by @NicolaCourtier in #561
- chore: update pre-commit hooks by @pre-commit-ci in #589
- Fix tests on example scripts by @NicolaCourtier in #586
- Scale points for Voronoi plots by @NicolaCourtier in #587
- Add GroupedSPMe model by @NicolaCourtier in #584
- Bug fix
GroupedSPMeto enable experiments by @NicolaCourtier in #592 - Fixes non-finite LogTransformed parameter bounds by @BradyPlanden in #595
- Adds ExponentialDecay Model by @BradyPlanden in #583
- chore: update pre-commit hooks by @pre-commit-ci in #599
- Removes depreciated
Adamoptimiser by @BradyPlanden in #598 - Set minimising for each cost and make a property of BaseOptimiser only by @NicolaCourtier in #588
- Add Hessian check for 2-parameter problems by @NicolaCourtier in #363
- Evaluations in OptimisationResult by @BradyPlanden in #597
- random_search optimiser added in the pints framework by @Dibyendu-IITKGP in #580
- Adds JAX IDAKLU solver integration by @BradyPlanden in #481
- docs: add Dibyendu-IITKGP as a contributor for test by @allcontributors in #606
v24.9.1
What's Changed
Patch release for yanked v24.9.0.
- Shift scheduled test workflow by @BradyPlanden in #496
- Updates to README.md by @BradyPlanden in #501
- Transformation fixes by @BradyPlanden in #495
- Notebook example files added for ECM and folder structure updated. by @Dibyendu-IITKGP in #460
- docs: add Dibyendu-IITKGP as a contributor for example by @allcontributors in #507
- Fixes for LogPosterior w/ GaussianLogLikelihood by @BradyPlanden in #505
New Contributors
- @Dibyendu-IITKGP made their first contribution in #460
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v24.9.0
What's Changed
- Add Lychee link checking by @BradyPlanden in #403
- Additions to ruff rules by @BradyPlanden in #386
- Adds Minkowski and SumofPower Cost by @BradyPlanden in #383
- Add a WeightedCost by @NicolaCourtier in #329
- Adds Transformation class by @BradyPlanden in #357
- Additions for #327 - Enable
DesignCostsinWeightedCostby @BradyPlanden in #413 - Add get_parameter_info to BaseModel by @NicolaCourtier in #423
- Update default init_soc for DesignProblem by @NicolaCourtier in #422
- Add model.clear and remove setters by @NicolaCourtier in #448
- Fix parameter set logic and allow FittingProblem to take init_ocv rather than init_soc by @NicolaCourtier in #425
- Merge model build and rebuild by @NicolaCourtier in #451
- Add MultiFittingProblem class and example by @NicolaCourtier in #364
- Adds support for IDAKLU w/ output variables by @BradyPlanden in #450
- Fixes benchmarks by @BradyPlanden in #457
- Refactors
BaseCost.evaluate/S1intoBaseCost.computeby @BradyPlanden in #455 - Adds EIS prediction methods by @BradyPlanden in #405
- Add functional parameter example by @NicolaCourtier in #442
- Rename quick_plot.py to standard_plots.py by @NicolaCourtier in #469
- Add electrode balancing example by @brosaplanella in #472
- Allow nonlinear constraints #353 by @MarkBlyth in #371
- Updates type hints in
ecm_tau_constraints.pyby @BradyPlanden in #480 - Adds Monte Carlo Samplers by @BradyPlanden in #340
- Adds cost/likelihood class notebook by @BradyPlanden in #470
- Fixes for PyBaMM v24.9 dependency by @BradyPlanden in #485
- Converts notebook plots to pure Plotly by @BradyPlanden in #411
- Refactor update_capacity by @NicolaCourtier in #465
- Create creating_a_model.ipynb by @f-g-r-i-m-m in #471
- Replace
pybop.MAPwithpybop.LogPosteriorby @BradyPlanden in #483 - Multi-dimensional learning rate (sigma0) for AdamW by @BradyPlanden in #462
- Fix transformations by @NicolaCourtier in #474
New Contributors
- @f-g-r-i-m-m made their first contribution in #471
Full Changelog: https://github.com/pybop-team/PyBOP/blob/develop/CHANGELOG.md
v24.6.1
What's Changed
- Release v24.6.1 by @BradyPlanden in #415
- Increments supported PyBaMM version to
>= v24.5
Full Changelog: https://github.com/pybop-team/PyBOP/blob/main/CHANGELOG.md#v2461---2024-07-31