Releases: pybop-team/PyBOP
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
v24.6
Full Changelog: https://github.com/pybop-team/PyBOP/blob/main/CHANGELOG.md#v246---2024-07-08
What's Changed
- PR v24.3 into develop by @BradyPlanden in #263
- chore: update pre-commit hooks by @pre-commit-ci in #262
- Add check to CMAES and make XNES default optimiser by @NicolaCourtier in #253
- Add Nelder-Mead optimiser from PINTS by @NicolaCourtier in #254
- Adds pyproject classifers, urls by @BradyPlanden in #267
- Add BPX support by @NicolaCourtier in #246
- Switch to
softprops/action-gh-releaseto upload artifacts for GitHub Releases by @agriyakhetarpal in #268 - Add experimental circuit model fitting notebook by @BradyPlanden in #241
- Adds DFN, MPM, MSMR models by @BradyPlanden in #250
- Update PR template & notebooks by @BradyPlanden in #270
- Add notebooks to examples nox session by @BradyPlanden in #273
- chore: update pre-commit hooks by @pre-commit-ci in #281
- Add Maximum a Posteriori (MAP) by @BradyPlanden in #275
- Increment
Python > 3.8by @BradyPlanden in #285 - Refactor problems by @brosaplanella in #280
- chore: update pre-commit hooks by @pre-commit-ci in #294
- Increment
PyBaMM > 23.5by @BradyPlanden in #252 - Add workflow to test PyBaMM develop branch nightly by @BradyPlanden in #291
- Fix for nightly dependancy workflow by @BradyPlanden in #296
- Change nox backend to
uvby @BradyPlanden in #287 - Updates README, adds additional notebooks, bugfixes to
model.simulateS1by @BradyPlanden in #293 - Fix parallel optimisation and increase coverage by @BradyPlanden in #299
- chore: update pre-commit hooks by @pre-commit-ci in #305
- Adds
"fast with events"as default echem solver by @BradyPlanden in #301 - docs: add brosaplanella as a contributor for code by @allcontributors in #292
- chore: update pre-commit hooks by @pre-commit-ci in #310
- chore: update pre-commit hooks by @pre-commit-ci in #314
- Re-enable testing on both macOS amd64 and macOS arm64 by @agriyakhetarpal in #308
- Install seed packages (
setuptoolsandwheel) by @agriyakhetarpal in #317 - Decrease test suite completion time by @BradyPlanden in #304
- Synchronise scheduled CI completion by @BradyPlanden in #324
- chore: update pre-commit hooks by @pre-commit-ci in #325
- docs: add agriyakhetarpal as a contributor for review by @allcontributors in #318
- Implement GITT example by @brosaplanella in #249
- docs: add muhammedsogut as a contributor for code by @allcontributors in #328
- Fix default option setting in quick_plot by @NicolaCourtier in #331
- Fixes #320 by @BradyPlanden in #321
- Restructure optimisers to enable passing of kwargs by @NicolaCourtier in #255
- Restore IntelLiGent to README by @BradyPlanden in #332
- Initialise PyBaMM models without building and add kwargs by @NicolaCourtier in #256
- chore: update pre-commit hooks by @pre-commit-ci in #336
- Restores Benchmarks by @BradyPlanden in #337
- chore: update pre-commit hooks by @pre-commit-ci in #342
- Add parameters class by @NicolaCourtier in #322
- Renames
model.rebuildvariables, updates import structure, adds type-hints to BaseModel by @BradyPlanden in #315 - Fix failing scheduled test on MSMR by @NicolaCourtier in #348
- Align optimisation result by @NicolaCourtier in #334
- Adds AdamW optimiser by @BradyPlanden in #316
- Fix RMSE gradient by @NicolaCourtier in #355
- chore: update pre-commit hooks by @pre-commit-ci in #356
- Update optim.log to store cost by @NicolaCourtier in #335
- Merge v23.4.1 by @BradyPlanden in #373
- Add new logo by @NicolaCourtier in #374
- chore: update pre-commit hooks by @pre-commit-ci in #370
- Updates for numpy 2 compatibility by @NicolaCourtier in #372
- chore: update pre-commit hooks by @pre-commit-ci in #377
- Suggesting changes to #338 by @NicolaCourtier in #352
- Add model.simulateS1 to benchmarks by @BradyPlanden in #379
- chore: update pre-commit hooks by @pre-commit-ci in #384
- Restore boundaries to pybop.PSO by @BradyPlanden in #381
- Add keys to ParameterSet and update ECM OCV check by @NicolaCourtier in #388
- Update calculation of cyclable lithium capacity by @NicolaCourtier in #349
- Pass Inputs dictionary by @NicolaCourtier in #359
- Updates to likelihoods, bug fix
GaussianLogLikelihoodclass by @BradyPlanden in #338 - Adds cuckoo optimiser by @BradyPlanden in #319
- General additions ahead of v24.6 by @BradyPlanden in #393
- Fix API documentation rendering, version switcher by @BradyPlanden in #398
- v24.6 by @BradyPlanden in #395
New Contributors
- @brosaplanella made their first contribution in #280