Releases: dynamicslab/pysindy
v2.0.0
It has been nearly three years since the last release of pysindy.
There were a variety of typing holes or incompatibility with
scikit-learn that required breaking backwards compatibility
to fix. Moreover, much documentation was not testable. This
meant that docs were frequently broken on backwards-incompatible
changes.
In the interim, the only solution was to use the master branch
and keep up to date with the repo changes. Now, however, there's
a place to archive old example notebooks, and enough of the
necessary incompatible changes are made. So it's possible to maintain a
2.x branch and continue to improve documentation.
TL;DR: Several new optimizers, feature library & differentiation improvements, smaller call signatures for pysindy model, simpler constraints.
What's Changed
- PyProject-centric Build System with Setuptools in #332
- Save DifferentiationMethod smoothed values in #244
- Simpler inputs in #362
- Implicit multiple trajectories in #376
- Move
unbias
argument fromSINDy.fit()
toBaseOptimizer
in #380 - BUG Fixed coef_ for sparse_indices in #385
- CLN: Remove fit_intercept in optimizers in #388
- Allow STLSQ to only sparsify/regularize a subset of indices in #408
- feat(optimizers): Enable pickling of MIOSR optimizer in #458
- Make AxesArray handle slicing correctly in #451
- Bayesian SINDy in #440
- Make TrappingSR3 a subclass of ConstrainedSR3 in #435
- Differentiation of Multidimensional Arrays in SINDyDerivative in #476
- BUG: #414 remove user warning suppression in #528
- CLN(pde_library): remove unused constructor argument in #537
- ENH: #455 Make IdentityLibrary a subclass of Polynomial Library in #533
- Trapping, extended to (a) enstrophy, and (b) local trapping in #536
- ENH: #448 print flush in #527
- CI: Add raw build and import step (should fail) in #543
- BUG #394 fix prox and regularization in #544
- ENH(sr3): refactor threshold and thresholder property in #548
- Fix ssr in #559
- Extract common functionality from
SINDy
to_BaseSINDy
in #562 - Pickle SR3 and subordinate classes in #586
- BLD: Limit numpy to <2.0 in #596
- Fix default n_subset based on replace flag (bootstrap logic) in #618
- Make FROLS.history_ as a list in #619
- Issue 386 Fix: Remove
t_default
and requiret
passed explicitly in SINDY.fit() and SINDY.score() in #628 - Move feature_names from SINDy.init() to SINDy.fit() in #635
New Contributors
- @ludgerpaehler made their first contribution in #332
- @yb6599 made their first contribution in #371
- @mikkelbue made their first contribution in #440
- @himkwtn made their first contribution in #528
- @nehalsinghmangat made their first contribution in #559
- @s-kat0 made their first contribution in #618
Full Changelog: v1.7.5...v2.0.0
2.0.0rc3
Modern Numpy
This release candidate includes changes to improve
dependency management of pysindy, most notably,
numpy 2.0 compatibility. There's also a mathematically
interesting change to default sampling: see #618.
The goal of these release candidates is to allow
sindy-related projects to specify a range of pysindy
dependencies and not need to pin a github direct URL.
New Contributors
Full Changelog: v2.0.0-rc2...v2.0.0-rc3
2.0.0rc2
MIOSR, SBR, and Trapping Extended
This release candidate includes many updates since
v2.0.0-rc1 was introduced several years ago. It includes
three new optimizers as well as a dramatically simplified
pysindy.SINDy API.
Nothing functional is likely to change between now
and a full release of v2.0.0. The RC only stands
in until the documentation can be updated to the
current API.
Small fixes to docs and scs version
What's Changed
- Think we have now actually fixed the example notebook documentation building so that they should all render properly on the readthedocs documentation site.
- Fixed the SCS version requirements to avoid errors in TrappingSR3 with certain versions of Python.
- Switched CI to test newer Python version 3.8, 3.9, 3.10.
Small doc fixes
What's Changed
- Made fixes to the example notebook documentation building so that they should all render properly on the readthedocs documentation site.
Parametric library and benchmarks
What's Changed
- Added ParameterizedLibrary by @znicolaou in #273 from this recent paper https://arxiv.org/abs/2301.02673. SINDy with control parameters (SINDyCP) is described further in the examples.
- Added big benchmark functionality by @OliviaZ0826, @akaptano and @znicolaou from #266 from this recent paper https://arxiv.org/abs/2302.10787. Big benchmarks are shown using the dysts database and the results/functionality can also be found in the examples.
- Added StableLinearSR3 optimizer by @akaptano from #269 that allows users to build arbitrarily large linear models that are guaranteed to be stable for any initial condition. Also allows for any number of linear equality and inequality constraints on the coefficients.
- Fixed a few minor bugs with the Gurobipy version, the sphinx setup with the development tools in requirements-dev.txt, and flake8 website move from gitlab to GitHub.
v1.7.2
What's Changed
Added new mixed-integer optimization algorithm called MIOSR.
Added new external unit tests of all the jupyter notebook examples.
Made Gurobipy and cvxpy optional dependencies. Gurobipy is required for using MIOSR and cvxpy is needed for using inequality-constrained optimizers, the trapping SINDy algorithm, or the SINDy-PI algorithm.
Ensembling functionality moved to the "EnsembleOptimizer", see updated Example 1 notebook for this.
v1.7.1
Should fix the compatibility errors with scikit-learn >= 1.0
What's Changed
- Add common virtual environment directories to .gitignore by @Jacob-Stevens-Haas in #177
- ENH: Raise explicit error when FROLS has linearly dependent columns. by @Jacob-Stevens-Haas in #193
- BUG: SINDyDerivative set_params() missed sklearn interface by @Jacob-Stevens-Haas in #207
AxesArray and EnsemblingOptimizer
This is a pre-release of major version 2 of SINDY
This pre-release preserves a significant amount of backwards compatibility that
will be removed in 2.0.0.
Internal array structure is made explicit via the
AxesArray
class. AxesArray
objects carry axis label attributes, such as
arr.ax_time
, as well as shape attributes, such as arr.n_spatial
.
Currently, these attributes are incorrect when slicing, but are preserved in
nearly all other operations.
This release also adds an EnsemblingOptimizer
class to handle data and library
bagging. While passing ensembling parameters via feature libraries and SINDy
objects is still supported, they simply dispatch to an EnsemblingOptimizer
.
Stable versions of 2.x will remove this backwards compatibility, forcing the
use of the EnsemblingOptimizer
. In addition, ensembling both data and
library terms creates each ensemble member from one data bag and one library
bag. Previously, each ensemble member came from one library bag and another
ensemble of data bags, which required nested loops and
time.
Problems that might be fixed before 2.0.0:
- Allow passing
AxesArray
objects to pysindy directly - add
__getitem__
and__setitem__
toAxesArray
to handle slicing correctly and
re-enableAxesWarning
s when trying to create anAxesArray
with missing or
incompatible axes labels. - Fix binder links to example documentation
Additional changes possible in version 2.0.0: - New method for SINDyPI?
- Derivative methods now also return smoothed X values.
Revamped weak SINDy
We have implemented new techniques for computing the weak formulation of SINDy, reducing the runtime by at least an order of magnitude. The "num_pts_per_domain" option in the weak formulation is now deprecated, and see the revamped Example 12 notebook for the new performance. This release also addresses Issues #155 #158 #159 #164. We have some minor fixes planned for the future, and hope to have a version of model.predict and model.simulate working for the weak formulation in the coming few months.