Version 1.0.0 of heyoka.py is here, and it brings several new features and important changes.
Semantic versioning
Starting from this release, heyoka.py adopts the [semantic versioning](https://semver.org/) numbering scheme. In particular:
- the MAJOR version will be increased in case of backwards-incompatible changes in the public API,
- the MINOR version will be increased in case of backwards-compatible additions to the public API,
- the PATCH version will be increased in case of backwards-compatible bugfixes.
Note that, due to the lack of API docs at the present time, heyoka.py's public API is somewhat fuzzily defined by the [C++](https://bluescarni.github.io/heyoka/index.html) and [Python](https://bluescarni.github.io/heyoka.py/index.html) tutorials.
Overhaul of the expression system
The biggest user-facing change in this release is a comprehensive internal overhaul of the expression system, including:
- the removal of several ad-hoc primitives with somewhat redundant functionality (e.g., ``square()``, ``sqrt()``, ``sum_sq()``, etc.);
- the implementation of several automated simplifications/normalisations, mostly inspired by the behaviour of [SymPy](https://www.sympy.org);
- the re-implementation of sums and products as multivariate functions.
Users are encouraged to read [this tutorial](https://bluescarni.github.io/heyoka.py/notebooks/ex_system_revisited.html) in order to understand how to best take advantage of the revamped expression system.
New API to compute high-order derivatives
A new function called ``diff_tensors()`` is available to compute efficiently high-order derivative tensors. Please see [this tutorial](https://bluescarni.github.io/heyoka.py/notebooks/ex_system_revisited.html#computing-derivatives) for an introduction to this new feature.
Improvements to step callbacks
Step callbacks can now optionally implement a ``pre_hook()`` method that will be invoked once before the first step in a time-limited propagation is performed. This feature can be useful to implement an init/setup phase in the callback before the numerical integration starts. The [tutorial](https://bluescarni.github.io/heyoka.py/notebooks/The%20adaptive%20integrator.html#time-limited-propagation) has been updated to include this new feature.
Additionally, in multi-threaded [ensemble propagations](https://bluescarni.github.io/heyoka.py/notebooks/ensemble_mode.html) the step callback is now copied for each iteration of the ensemble, rather than being shared among all the iterations. This behaviour should reduce the risk of data races.
New ``model`` submodule
A new ``model`` submodule has been introduced, which includes functions to generate the dynamics for several commonly-used dynamical models (e.g., pendulum, N-body, etc.). The ``make_nbody_sys()`` helper has been replaced by an equivalent function in the ``model`` submodule. More models are planned to be added in the near future.
Miscellanea
- Substitution of generic subexpressions has been implemented;
- the screen output of expressions is now truncated for very large expressions;
- several other quality-of-life improvements.
As usual, the full changelog is available here:
https://bluescarni.github.io/heyoka.py/changelog.html