- #566 - Adds
UnitHyperCube
transformation class, fixes incorrect application of gradient transformation. - #569 - Adds parameter specific learning rate functionality to GradientDescent optimiser.
- #282 - Restructures the examples directory.
- #396 - Adds
ecm_with_tau.py
example script. - #452 - Extends
cell_mass
andapproximate_capacity
for half-cell models. - #544 - Allows iterative plotting using
StandardPlot
. - #541 - Adds
ScaledLogLikelihood
andBaseMetaLikelihood
classes. - #409 - Adds plotting and convergence methods for Monte Carlo sampling. Includes open-access Tesla 4680 dataset for Bayesian inference example. Fixes transformations for sampling.
- #531 - Adds Voronoi optimiser surface plot (
pybop.plot.surface
) for fast optimiser aligned cost visualisation. - #532 - Adds
linked_parameters
example script which shows how to update linked parameters during design optimisation. - #529 - Adds
GravimetricPowerDensity
andVolumetricPowerDensity
costs, along with the mathjax extension for Sphinx.
- #512 - Refactors
LogPosterior
with attributes pointing to composed likelihood object. - #551 - Refactors Optimiser arguments,
population_size
andmax_iterations
as default args, improves optimiser docstrings
- #505 - Bug fixes for
LogPosterior
with transformedGaussianLogLikelihood
likelihood.
- #531 - Plot methods moved to
pybop.plot
with mostly minimal renaming. For example,pybop.plot_parameters
is nowpybop.plot.parameters
. Other breaking changes include:pybop.plot2d
topybop.plot.contour
. - #526 - Refactor
OptimisationResults
classes, withoptim.run()
now return the full object. Adds finite cost value check for optimised parameters.
v24.9.1 - 2024-09-16
- #495 - Bugfixes for Transformation class, adds
apply_transform
optional arg toBaseCost
for transformation functionality.
v24.9.0 - 2024-09-10
- #462 - Enables multidimensional learning rate for
pybop.AdamW
with updated (more robust) integration testing. Fixes bug inMinkowski
andSumofPower
cost functions for gradient-based optimisers. - #411 - Updates notebooks with README in
examples/
directory, removes kaleido dependency and moves to nbviewer rendering, displays notebook figures withnotebook_connected
plotly renderer - #6 - Adds Monte Carlo functionality, with methods based on Pints' algorithms. A base class is added
BaseSampler
, in addition toPintsBaseSampler
. - #353 - Allow user-defined check_params functions to enforce nonlinear constraints, and enable SciPy constrained optimisation methods
- #222 - Adds an example for performing and electrode balancing.
- #441 - Adds an example for estimating constants within a
pybamm.FunctionalParameter
. - #405 - Adds frequency-domain based EIS prediction methods via
model.simulateEIS
and updates toproblem.evaluate
with examples and tests. - #460 - Notebook example files added for ECM and folder structure updated.
- #450 - Adds support for IDAKLU with output variables, and corresponding examples, tests.
- #364 - Adds the MultiFittingProblem class and the multi_fitting example script.
- #444 - Merge
BaseModel
build()
andrebuild()
functionality. - #435 - Adds SLF001 linting for private members.
- #418 - Wraps the
get_parameter_info
method from PyBaMM to get a dictionary of parameter names and types. - #413 - Adds
DesignCost
functionality toWeightedCost
class with additional tests. - #357 - Adds
Transformation()
class withLogTransformation()
,IdentityTransformation()
, andScaledTransformation()
,ComposedTransformation()
implementations with corresponding examples and tests. - #427 - Adds the nbstripout pre-commit hook to remove unnecessary metadata from notebooks.
- #327 - Adds the
WeightedCost
subclass, defines when to evaluate a problem and adds thespm_weighted_cost
example script. - #393 - Adds Minkowski and SumofPower cost classes, with an example and corresponding tests.
- #403 - Adds lychee link checking action.
- #473 - Bugfixes for transformation class, adds optional
apply_transform
arg toBaseCost.__call__()
, addslog_update()
method toBaseOptimiser
- #464 - Fix order of design
parameter_set
updates and refactorupdate_capacity
. - #468 - Renames
quick_plot.py
tostandard_plots.py
. - #454 - Fixes benchmarking suite.
- #421 - Adds a default value for the initial SOC for design problems.
- #499 - BPX is added as an optional dependency.
- #483 - Replaces
pybop.MAP
withpybop.LogPosterior
with an updated call args and bugfixes. - #436 - API Change: The functionality from
BaseCost.evaluate/S1
&BaseCost._evaluate/S1
is represented inBaseCost.__call__
&BaseCost.compute
.BaseCost.compute
directly acts on the predictions, whileBaseCost.__call__
callsBaseProblem.evaluate/S1
beforeBaseCost.compute
.compute
has optional args for gradient cost calculations. - #424 - Replaces the
init_soc
input toFittingProblem
with the option to pass an initial OCV value, updatesBaseModel
and fixesmulti_model_identification.ipynb
andspm_electrode_design.ipynb
.
v24.6.1 - 2024-07-31
- #313 - Fixes for PyBaMM v24.5, drops support for PyBaMM v23.9, v24.1
v24.6 - 2024-07-08
- #319 - Adds
CuckooSearch
optimiser with corresponding tests. - #359 - Aligning Inputs between problem, observer and model.
- #379 - Adds model.simulateS1 to weekly benchmarks.
- #174 - Adds new logo and updates Readme for accessibility.
- #316 - Adds Adam with weight decay (AdamW) optimiser, adds depreciation warning for pints.Adam implementation.
- #271 - Aligns the output of the optimisers via a generalisation of Result class.
- #315 - Updates init structure to remove circular import issues and minimises dependancy imports across codebase for faster PyBOP module import. Adds type-hints to BaseModel and refactors rebuild parameter variables.
- #236 - Restructures the optimiser classes, adds a new optimisation API through direct construction and keyword arguments, and fixes the setting of
max_iterations
, and_minimising
. Introducespybop.BaseOptimiser
,pybop.BasePintsOptimiser
, andpybop.BaseSciPyOptimiser
classes. - #322 - Add
Parameters
class to store and access multiple parameters in one object. - #321 - Updates Prior classes with BaseClass, adds a
problem.sample_initial_conditions
method to improve stability of SciPy.Minimize optimiser. - #249 - Add WeppnerHuggins model and GITT example.
- #304 - Decreases the testing suite completion time.
- #301 - Updates default echem solver to "fast with events" mode.
- #251 - Increment PyBaMM > v23.5, remove redundant tests within integration tests, increment citation version, fix examples with incorrect model definitions.
- #285 - Drop support for Python 3.8.
- #275 - Adds Maximum a Posteriori (MAP) cost function with corresponding tests.
- #273 - Adds notebooks to nox examples session and updates CI workflows for change.
- #250 - Adds DFN, MPM, MSMR models and moves multiple construction variables to BaseEChem. Adds exception catch on simulate & simulateS1.
- #241 - Adds experimental circuit model fitting notebook with LG M50 data.
- #268 - Fixes the GitHub Release artifact uploads, allowing verification of codesigned binaries and source distributions via
sigstore-python
. - #79 - Adds BPX as a dependency and imports BPX support from PyBaMM.
- #267 - Add classifiers to pyproject.toml, update project.urls.
- #195 - Adds the Nelder-Mead optimiser from PINTS as another option.
- #393 - General integration test fixes. Adds UserWarning when using Plot2d with prior generated bounds.
- #338 - Fixes GaussianLogLikelihood class, adds integration tests, updates non-bounded parameter implementation by applying bounds from priors and
boundary_multiplier
argument. Bugfixes to CMAES construction. - #339 - Updates the calculation of the cyclable lithium capacity in the spme_max_energy example.
- #387 - Adds keys to ParameterSet and updates ECM OCV check.
- #380 - Restore self._boundaries construction for
pybop.PSO
- #372 - Converts
np.array
tonp.asarray
for Numpy v2.0 support. - #165 - Stores the attempted and best parameter values and the best cost for each iteration in the log attribute of the optimiser and updates the associated plots.
- #354 - Fixes the calculation of the gradient in the
RootMeanSquaredError
cost. - #347 - Resets options between MSMR tests to cope with a bug in PyBaMM v23.9 which is fixed in PyBaMM v24.1.
- #337 - Restores benchmarks, relaxes CI schedule for benchmarks and scheduled tests.
- #231 - Allows passing of keyword arguments to PyBaMM models and disables build on initialisation.
- #321 - Improves
integration/test_spm_parameterisation.py
stability, adds flakly pytest plugin, andtest_thevenin_parameterisation.py
integration test. - #330 - Fixes implementation of default plotting options.
- #317 - Installs seed packages into
nox
sessions, ensuring that scheduled tests can pass. - #308 - Enables testing on both macOS Intel and macOS ARM (Silicon) runners and fixes the scheduled tests.
- #299 - Bugfix multiprocessing support for Linux, MacOS, Windows (WSL) and improves coverage.
- #270 - Updates PR template.
- #91 - Adds a check on the number of parameters for CMAES and makes XNES the default optimiser.
- #322 - Add
Parameters
class to store and access multiple parameters in one object (API change). - #285 - Drop support for Python 3.8.
- #251 - Drop support for PyBaMM v23.5
- #236 - Restructures the optimiser classes (API change).
v24.3.1 - 2024-06-17
- #369 - Upper pins Numpy < 2.0 due to breaking Pints' functionality.
v24.3 - 2024-03-25
- #245 - Updates ruff config for import linting.
- #198 - Adds default subplot trace options, removes
[]
in axis plots as per SI standard, add varying signal length to quick_plot, restores design optimisation execption. - #224 - Updated prediction objects to dictionaries, cost class calculations, added
additional_variables
argument to problem class, updated scipy.minimize defualt method to Nelder-Mead, added gradient cost landscape plots with optional argument. - #179 - Adds
asv
configuration for benchmarking and initial benchmark suite. - #218 - Adds likelihood base class,
GaussianLogLikelihoodKnownSigma
,GaussianLogLikelihood
, andProbabilityBased
cost function. As well as addition of a maximum likelihood estimation (MLE) example. - #185 - Adds a pull request template, additional nox sessions
quick
for standard tests + docs,pre-commit
for pre-commit,test
to run all standard tests,doctest
for docs. - #215 - Adds
release_workflow.md
and updatesrelease_action.yaml
- #204 - Splits integration, unit, examples, plots tests, update workflows. Adds pytest
--examples
,--integration
,--plots
args. Adds tests for coverage after removal of examples. Adds examples and integrations nox sessions. Addspybop.RMSE._evaluateS1()
method - #206 - Adds Python 3.12 support with corresponding github actions changes.
- #18 - Adds geometric parameter fitting capability, via
model.rebuild()
withmodel.rebuild_parameters
. - #203 - Adds support for modern Python packaging via a
pyproject.toml
file and configures thepytest
test runner andruff
linter to use their configurations stored as declarative metadata. - #123 - Configures scheduled tests to run against the last three PyPI releases of PyBaMM via dynamic GitHub Actions matrix generation.
- #187 - Adds M1 Github runner to
test_on_push
workflow, updt. self-hosted supported python versions in scheduled tests. - #118 - Adds example jupyter notebooks.
- #151 - Adds a standalone version of the Problem class.
- #12 - Adds initial implementation of an Observer class and an unscented Kalman filter.
- #190 - Adds a second example design cost, namely the VolumetricEnergyDensity.
- #259 - Fix gradient calculation from
model.simulateS1
to remove cross-polution and refactor cost._evaluateS1 for fitting costs. - #233 - Enforces model rebuild on initialisation of a Problem to allow a change of experiment, fixes if statement triggering current function update, updates
predictions
tosimulation
to keep distinction betweenpredict
andsimulate
and addstest_changes
. - #123 - Reinstates check for availability of parameter sets via PyBaMM upon retrieval by
pybop.ParameterSet.pybamm()
. - #196 - Fixes failing observer cost tests.
- #63 - Removes NLOpt Optimiser from future releases. This is to support deployment to the Apple M-Series platform.
- #164 - Fixes convergence issues with gradient-based optimisers, changes default
model.check_params()
to allow infeasible solutions during optimisation iterations. Adds a feasibility check on the optimal parameters. - #211 - Allows a subset of parameter bounds or bounds=None to be passed, returning warnings where needed.
v23.12 - 2023-12-19
- #141 - Adds documentation with Sphinx and PyData Sphinx Theme. Updates docstrings across package, relocates
costs
anddataset
to top-level of package. Adds noxfile session and deployment workflow for docs. - #131 - Adds
SciPyDifferentialEvolution
optimiser, adds functionality for user-selectable maximum iteration limit toSciPyMinimize
,NLoptOptimize
, andBaseOptimiser
classes. - #107 - Adds Equivalent Circuit Model (ECM) with examples, Import/Export parameter methods
ParameterSet.import_parameter
andParameterSet.export_parameters
, updates default FittingProblem.signal definition to"Voltage [V]"
, and testing infrastructure - #127 - Adds Windows and macOS runners to the
test_on_push
action - #114 - Adds standard plotting class
pybop.StandardPlot()
via plotly backend - #114 - Adds
quick_plot()
,plot_convergence()
, andplot_cost2d()
methods - #114 - Adds a SciPy minimize example and logging for non-Pints optimisers
- #116 - Adds PSO, SNES, XNES, ADAM, and IPropMin optimisers to PintsOptimisers() class
- #38 - Restructures the Problem classes ahead of adding a design optimisation example
- #38 - Updates tests and adds a design optimisation example script
spme_max_energy
- #120 - Updates the parameterisation test settings including the number of iterations
- #145 - Reformats Dataset to contain a dictionary and signal into a list of strings
- #182 - Allow square-brackets indexing of Dataset
- Initial release
- Adds Pints, NLOpt, and SciPy optimisers
- Adds SumofSquareError and RootMeanSquareError cost functions
- Adds Parameter and Dataset classes