Skip to content

Latest commit

 

History

History
415 lines (311 loc) · 36.9 KB

File metadata and controls

415 lines (311 loc) · 36.9 KB

Features

  • #969 - Updates synthetic data and adds example script for thermal parameterisation.
  • #965 - Adds synthetic data and example scripts for OCV parameterisation.
  • #963 - Adds an example for generating synthetic data from a specification and exporting it to a PyProBE-compatible parquet file.
  • #928 - Adds the option to choose matplotlib as the plotting library for plotting functions. Additionally, figures and axes can be created manually and passed as keyword arguments to plotting functions. An example notebook plotting.ipynb was added to the getting_started directory to demonstrate usage of the new features.
  • #962 - Separate the surface from the bulk temperature in the CellTemperature model.
  • #918 - Adds a plot for predictions sampled from a posterior distribution (pybop.plot.predictive).
  • #940 - Adds support for Python 3.14 (EP-BOLFI optimiser and PyProBE still restricted to Python 3.12 or below).

Optimisations

  • #967 - Add Dataset.get_discontinuities and update the pybop.pybamm.RecommendedSolver options.
  • #946 - Use vectorized evaluation for SciPy differential evolution by default instead of multiprocessing workers.
  • #925 - Add UnboundedDistribution and the get_transformed_distribution functionality.

Bug Fixes

  • #915 - Fixes axis labels for non-standard domain names, adds Dataset length property and adds kind property to Interpolant.
  • #911 - Fixes the passing of the cost log to the Voronoi surface plot.
  • #905 - Remove restriction on numpy.

Breaking Changes

  • #928 - Deprecates StandardPlot and StandardSubplot in favour of new standardised backend functionality.
  • #960 - Remove asv benchmarking.
  • #938 - Make SALib an optional dependency and remove sensitivity_analysis in favour of using SALib directly.
  • #942 - Adds evaluate_batch to the costs and ensures that an Evaluation is returned.

v26.3 - 2026-03-05

Features

  • #897 - Adds separate LogPrior, LogPDF and LogPosterior classes and updates set_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 (for SamplingResult). Result.load_result: reconstructs the Result object based on the underlying problem (or sampler for SamplingResult) 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

Optimisations

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 parameter get_mean and get_std functions.
  • #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_exists from ParameterValues following PyBaMM PR 5339.
  • #860 - Create a parent class for optimisation and sampling results, move PosteriorSummary attributes to the SamplingResult and deprecate the pints.AdaptiveCovarianceMCMC sampler.
  • #857 - Deprecate the custom PyBaMM model build process for a simulation without an experiment and rename batch_solve as solve_batch to align with other functions.
  • #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 - 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.

Bug Fixes

  • #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 - Create SamplingResult and best inputs property for results.

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 name property from pybop.Parameter
  • #821 - Remove the papers folder 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_transform argument to transformed
  • Remove the update_capacity option from the DesignProblem
  • 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_model function
  • Allow plotting via functions on the OptimisationResult
  • Separate the cost classes from the Problem
  • Replace FittingProblem and DesignProblem by a single Problem class
  • Rename and reimplement MultiFittingProblem as MetaProblem
  • Add BaseSimulator as a generic base class for the pybop.pybamm.Simulator and pybop.pybamm.EISSimulator
  • Enable pybop.Parameter objects to be passed directly to an instance of pybamm.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 - 2025-07-16

Features

  • #767 - Adds the GroupedSPM model 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_samples and fix intermittent test_optimisation_f_guessed test.
  • #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 Pybamm v25.4.
  • #546 - Default Pybamm solver to IDAKLU, changes required for Pybamm v25.4.1

Breaking Changes

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 GroupedSPMe model.
  • #692 - Improvements/fixes for BaseSampler and BasePintsSampler classes, adds ChainProcessor classes w/ clearer structure.

Bug Fixes

  • #678 - Fixed bug where model wasn't plotted for observer classes with pybop.plot.quick().

Breaking Changes

  • #684 - Updates plot.quick to plot.problem for clarity.
  • #661 - Adds pybop.CostInterface which aligns the optimisers and samplers with a unified call_cost in which transformations and sign inversions are applied. Also includes bug fixes for transformations and gradient calculations.

v25.1 - 2025-02-03

Features

  • #636 - Adds pybop.IRPropPlus optimiser with corresponding tests.
  • #635 - Adds support for multi-proposal evaluation of list-like objects to BaseCost classes.
  • #635 - Adds global parameter sensitivity analysis with method BaseCost.sensitivity_analysis. This is computation is added to OptimisationResult if optimiser arg compute_sensitivities is True. An additional arg is added to select the number of samples for analysis: n_sensitivity_samples.
  • [#630] (pybop-team#632) - Fisher Information Matrix added to BaseLikelihood class.
  • #619 - Adds pybop.SimulatingAnnealing optimiser 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 MultiOptimisationResult by merging with OptimisationResult.
  • #600 - Removes repetitious functionality within the cost classes.

Bug Fixes

  • #602 - Aligns the standard quick plot of MultiFittingProblem outputs.

Breaking Changes

  • #656 - Completes ParameterSet changes from #593 and aligns the simulation options in model.predict with the model properties such as the solver.
  • #593 - Enables ParameterSet to systematically return a pybamm.ParameterValues object within the model class.

v24.12 - 2024-12-21

Features

  • #481 - Adds experimental support for PyBaMM's jaxified IDAKLU solver. Includes Jax-specific cost functions pybop.JaxSumSquareError and pybop.JaxLogNormalLikelihood. Adds Jax optional dependency to PyBaMM dependency.
  • #597 - Adds number of function evaluations n_evaluations to OptimisationResult.
  • #362 - Adds the classify_using_Hessian functionality to classify the optimised result.
  • #584 - Adds the GroupedSPMe model for parameter identification.
  • #571 - Adds Multistart functionality to optimisers via initialisation arg multistart.
  • #582 - Fixes population_size arg for Pints' based optimisers, reshapes parameters.rvs to be parameter instances.
  • #570 - Updates the contour and surface plots, adds mixed chain effective sample size computation, x0 to optim.log
  • #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 and approximate_capacity for half-cell models.
  • #544 - Allows iterative plotting using StandardPlot.
  • #541 - Adds ScaledLogLikelihood and BaseMetaLikelihood 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 and VolumetricPowerDensity costs, along with the mathjax extension for Sphinx.

Optimisations

  • #580 - Random Search optimiser is implimented.
  • #588 - Makes minimising a property of BaseOptimiser set by the cost class.
  • #512 - Refactors LogPosterior with attributes pointing to composed likelihood object.
  • #551 - Refactors Optimiser arguments, population_size and max_iterations as default args, improves optimiser docstrings

Bug Fixes

  • #595 - Fixes non-finite LogTransformed bounds for indices of zero.
  • #561 - Bug fixes the sign of the SciPy cost logs for maximised costs.
  • #505 - Bug fixes for LogPosterior with transformed GaussianLogLikelihood likelihood.

Breaking Changes

  • #481 - problem.model is now a copied instance of model
  • #598 - Depreciated Adam optimiser has been removed, see AdamW for replacement.
  • #531 - Plot methods moved to pybop.plot with mostly minimal renaming. For example, pybop.plot_parameters is now pybop.plot.parameters. Other breaking changes include: pybop.plot2d to pybop.plot.contour.
  • #526 - Refactor OptimisationResults classes, with optim.run() now return the full object. Adds finite cost value check for optimised parameters.

v24.9.1 - 2024-09-16

Features

Bug Fixes

  • #495 - Bugfixes for Transformation class, adds apply_transform optional arg to BaseCost for transformation functionality.

Breaking Changes

v24.9.0 - 2024-09-10

Features

  • #462 - Enables multidimensional learning rate for pybop.AdamW with updated (more robust) integration testing. Fixes bug in Minkowski and SumofPower 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 with notebook_connected plotly renderer
  • #6 - Adds Monte Carlo functionality, with methods based on Pints' algorithms. A base class is added BaseSampler, in addition to PintsBaseSampler.
  • #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 to problem.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() and rebuild() 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 to WeightedCost class with additional tests.
  • #357 - Adds Transformation() class with LogTransformation(), IdentityTransformation(), and ScaledTransformation(), 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 the spm_weighted_cost example script.
  • #393 - Adds Minkowski and SumofPower cost classes, with an example and corresponding tests.
  • #403 - Adds lychee link checking action.

Bug Fixes

  • #473 - Bugfixes for transformation class, adds optional apply_transform arg to BaseCost.__call__(), adds log_update() method to BaseOptimiser.
  • #464 - Fix order of design parameter_set updates and refactor update_capacity.
  • #468 - Renames quick_plot.py to standard_plots.py.
  • #454 - Fixes benchmarking suite.
  • #421 - Adds a default value for the initial SOC for design problems.

Breaking Changes

  • #499 - BPX is added as an optional dependency.
  • #483 - Replaces pybop.MAP with pybop.LogPosterior with an updated call args and bugfixes.
  • #436 - API Change: The functionality from BaseCost.evaluate/S1 & BaseCost._evaluate/S1 is represented in BaseCost.__call__ & BaseCost.compute. BaseCost.compute directly acts on the predictions, while BaseCost.__call__ calls BaseProblem.evaluate/S1 before BaseCost.compute. compute has optional args for gradient cost calculations.
  • #424 - Replaces the init_soc input to FittingProblem with the option to pass an initial OCV value, updates BaseModel and fixes multi_model_identification.ipynb and spm_electrode_design.ipynb.

v24.6.1 - 2024-07-31

Features

  • #313 - Fixes for PyBaMM v24.5, drops support for PyBaMM v23.9, v24.1

Bug Fixes

Breaking Changes

v24.6 - 2024-07-08

Features

  • #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. Introduces pybop.BaseOptimiser, pybop.BasePintsOptimiser, and pybop.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.

Bug Fixes

  • #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 to np.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, and test_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.

Breaking Changes

  • #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

Features

Bug Fixes

  • #369 - Upper pins Numpy < 2.0 due to breaking Pints' functionality.

v24.3 - 2024-03-25

Features

  • #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, and ProbabilityBased 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 updates release_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. Adds pybop.RMSE._evaluateS1() method
  • #206 - Adds Python 3.12 support with corresponding github actions changes.
  • #18 - Adds geometric parameter fitting capability, via model.rebuild() with model.rebuild_parameters.
  • #203 - Adds support for modern Python packaging via a pyproject.toml file and configures the pytest test runner and ruff 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.

Bug Fixes

  • #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 to simulation to keep distinction between predict and simulate and adds test_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

Features

  • #141 - Adds documentation with Sphinx and PyData Sphinx Theme. Updates docstrings across package, relocates costs and dataset 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 to SciPyMinimize, NLoptOptimize, and BaseOptimiser classes.
  • #107 - Adds Equivalent Circuit Model (ECM) with examples, Import/Export parameter methods ParameterSet.import_parameter and ParameterSet.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(), and plot_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

Bug Fixes

  • #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