Releases: pnkraemer/probdiffeq
v0.8.2
What's Changed
Other Changes
- Attempt to fix publishing issues by @pnkraemer in #840
Full Changelog: v0.8.1...v0.8.2
v0.8.1
What's Changed
Improvements to the documentation
- Make benchmarks faster and more readable by @pnkraemer in #839
Internals
- Remove Taylor-coefficient-scaling in doubling by @pnkraemer in #838
Full Changelog: v0.8.0...v0.8.1
v0.8.0
This is a relatively big release, because it adds a range of new features and breaks some old APIs.
Highlights:
- Pytrees: ODEs can be defined over arbitrary pytrees now. This enables, for example, simulating discretised PDEs as matrix-valued ODEs (avoiding flattening and unflattening arrays at each stage)
- New solvers: Probdiffeq offers blockdiagonal and isotropic TS1 solvers. They behave like the TS0 solvers, but yield more visually pleasing uncertainties. These solvers are partly experimental, so feedback is appreciated. (There is little reason to use TS0 now btw).
- PDE demo: To demo the above two changes, probdiffeq's docs now contain a PDE solver tutorial. This tutorial replicates Figure 1 in https://arxiv.org/abs/2110.11812.
- IWPs: The integrated Wiener process is no longer called "ibm" but now it's a "prior_wiener_integrated".
- Numerical stability: all tests and examples are run in single precision
Beyond this, some internals have been simplified. Existing code should be really easy to update -- consult the quickstart or any of the examples for details.
For more details on the changes, consult the changelog below.
What's Changed
Breaking changes
- Move clipping from the controller to the adaptive solver by @pnkraemer in #825
- Rename
prior_ibmtoprior_wiener_integratedand simplify the initial state by @pnkraemer in #827 - Move vector field from solution routines to corrections by @pnkraemer in #829
New features
- Implement support for pytree-valued differential equations by @pnkraemer in #833
- Run all tests in single precision by @pnkraemer in #835
- Implement an isotropic and blockdiagonal TS1 by @pnkraemer in #836
Internals
- Rename _ExtraImpl to _Strategy to reflect recent variable-name-changes by @pnkraemer in #824
- Tidy up some internals in the adaptive solver by @pnkraemer in #826
- Remove unused MarkovProcess class by @pnkraemer in #828
- Linearisations return conditionals by @pnkraemer in #830
- Undo begin/complete separation in strategies and corrections by @pnkraemer in #831
- Unify all 'conditional' types by @pnkraemer in #832
- Move error normalisation to solvers by @pnkraemer in #834
Other Changes
- Include a PDE tutorial in the documentation by @pnkraemer in #837
Full Changelog: v0.7.2...v0.8.0
v0.7.2
What's Changed
New features
- Implement a closed form Cholesky factor of a Hilbert matrix by @pnkraemer in #817
- Fix a mixup between slr0 and slr1 by @pnkraemer in #819
- Implement damping by @pnkraemer in #820
Improvements to the documentation
- Remove Python 3.14 support claim because we don't test it by @pnkraemer in #818
- Update the docs by @pnkraemer in #821
- Rename some tutorials to make them more accessible by @pnkraemer in #822
- Revise the README by @pnkraemer in #823
Full Changelog: v0.7.1...v0.7.2
v0.7.1
What's Changed
New features
- Improve some documentation and make minor usability adjustments by @pnkraemer in #816
Full Changelog: v0.7.0...v0.7.1
v0.7.0
What's Changed
Breaking changes
- Bump python versions to match JAX's requirements by @pnkraemer in #815
Improvements to the documentation
- Update the citation info for solve_adaptive_save_at by @pnkraemer in #814
Full Changelog: v0.6.3...v0.7.0
v0.6.3
What's Changed
Bugfixes
- Fix a tracer conversion issue by @pnkraemer in #813
Other Changes
- Update the comparison to ProbNumDiffEq.jl by @nathanaelbosch in #811
New Contributors
- @nathanaelbosch made their first contribution in #811
Full Changelog: v0.6.2...v0.6.3
v0.6.2
This release contains a fix to a dependency-related problem (#810) in the previous release.
What's Changed
- Include typing-related extensions as dependencies by @pnkraemer in #812
Full Changelog: v0.6.1...v0.6.2
v0.6.1
This PR mainly contains a bugfix (#808): previously, solution.u_std was incorrect (as visible through its wrong shape). Now, it's corrected (and tested).
What's Changed
New features
- Ensure that solution.u_std and solution.u have the same shapes to fix an error by @pnkraemer in #808
- Document the solution object and make it public by @pnkraemer in #809
Improvements to the documentation
- Update the CI explanation in the docs (it's been a while) by @pnkraemer in #807
Full Changelog: v0.6.0...v0.6.1
v0.6.0
This release improves Probdiffeq's API considerably. Hard-to-access quantities, such as standard deviations of the solution estimate, are now accessible. Global states have been removed, making the library more predictable and "hackable." Some of these changes are not backwards-compatible, but they should be easy to fix (see below).
Key updates:
- Improved access to derivatives, standard deviations, and samples (#786)
- More robust initialisation:
ode_shapeandnum_derivativesare now determined automatically. Simply compute the Taylor coefficients and use them to initialise the SSM (#786). - Simplified API: The solution object is no longer iterable (#800).
- Cleaner solver instantiation: Instead of
solver(strategy(prior, correction)), usesolver(strategy, prior, correction). - Updated Python support: Now compatible with Python 3.12+ (dropped support for 3.9 to align with JAX's policy).
Refer to the PR descriptions below or check the updated documentation for guidance on resolving breaking changes. Most issues should be easy to fix, but feel free to reach out if needed.
What's Changed
Breaking changes
- Turn
tcoeffsinto arguments toprior_ibmto reduce error potential by @pnkraemer in #785 - Remove the need for declaring
ode_shapeandnum_derivativesbefore simulating by @pnkraemer in #786 - Separate strategies from priors and corrections by @pnkraemer in #797
- Move ivpsolve.adaptive and ivpsolve.control* to ivpsolvers because they are solver components by @pnkraemer in #798
- Remove iterability from the Solution object because it is mathematically ill-defined by @pnkraemer in #800
New features
- Increase python versions to include 3.12 and 3.13, and to match JAX's minimum requirement by @pnkraemer in #804
Improvements to the documentation
- Add release.yaml to custom-format release notes by @pnkraemer in #803
- Add 'general troubleshooting' and 'Pleiades-NaNs' to the troubleshooting site by @pnkraemer in #805
Internals
- Replace probdiffeq.util.linop_util with jax.Arrays to improve hackability by @pnkraemer in #787
- Use vulture to detect dead code and remove what the command found by @pnkraemer in #788
- Flatten the directory structure in the tests to mirror the module structure in the source by @pnkraemer in #789
- Remove the pytest-coverage setup because we don't use it (and haven't for a while) by @pnkraemer in #790
- Internal: Simplify the implementation of extrapolations by @pnkraemer in #791
- Internal: Reduce unnecessary complexity in correction code by @pnkraemer in #792
- Internal: Condense strategies into a single class to simplify the source-code by @pnkraemer in #793
- Internal: Simplify the probabilistic-solver implementation by @pnkraemer in #794
- Internal: Move error-scaling (by the error contraction rate) outside of the controller implementations by @pnkraemer in #795
- Internal: Improve function order in ivpsolvers.py and remove residual pytest-cov references by @pnkraemer in #796
- Internal: Remove private
select-style functions because we have easier ways of accessing derivatives now by @pnkraemer in #799
Other Changes
- Fix a typo in release.yaml by @pnkraemer in #806
Full Changelog: v0.5.1...v0.6.0