Heyoka.py Versions Save

Python library for ODE integration via Taylor's method and LLVM

v0.21.4

1 year ago

v0.21.3

1 year ago

v0.21.2

1 year ago

v0.21.1

1 year ago

v0.21.0

1 year ago

v0.20.0

1 year ago

This new heyoka.py release comes with a big new feature and several small fixes and additions.

Arbitrary-precision computations :heavy_division_sign:

Taylor integrators shine in high-accuracy applications, and now, with heyoka.py, you can get as accurate as you want!

In addition to double and extended-precision computations, heyoka.py now also supports computations in arbitrary precision. In other words, you can perform numerical integrations with an arbitrarily high accuracy, limited in principle only by the available memory.

Arbitrary-precision computations require the heyoka C++ library to be built with support for the mp++ multiprecision library (see the heyoka installation instructions for more details). A tutorial illustrating how to set up numerical integrations in arbitrary precision is available in the documentation.

Fixes :lady_beetle:

  • fix build issue with Python 3.11;
  • fix several small issues in the real128 API.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka.py/changelog.html

v0.19.0

1 year ago

This new version of heyoka.py comes with two big new features and a few fixes.

Extended-precision computations :heavy_division_sign:

Extended-precision computations are now fully supported with an API identical to double-precision computations. A tutorial explaining this new feature is available here:

https://bluescarni.github.io/heyoka.py/notebooks/ext_precision.html

Note that, as a consequence of this new feature, heyoka.py is now more strict than it used to be with respect to type conversions, and this could result in TypeError exceptions being raised in user code after upgrading. Please see the "Breaking Changes" section in the documentation for more details and solutions:

https://bluescarni.github.io/heyoka.py/breaking_changes.html#bchanges-0-19-0

Compiled functions :rocket:

It is now possible to compile just-in-time functions defined via the heyoka.py expression system. Compiled functions provide fast function evaluation capabilities for scalar and vector arguments. A tutorial describing this new feature is available here:

https://bluescarni.github.io/heyoka.py/notebooks/compiled_functions.html

Fixes :bug:

  • heyoka.py now compiles without deprecation warnings against the latest versions of the fmt library

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka.py/changelog.html

v0.18.0

2 years ago

This new version of heyoka.py comes with a big new feature and several fixes.

Automatic parallelisation :rocket:

heyoka.py is now capable of automatically performing multithreaded fine-grained parallelisation within an individual integration step. Parallel mode is easily enabled, and it can lead to substantial speed-ups, especially for large ODE systems and/or extended precision computations.

A tutorial exploring this new feature is available here:

https://bluescarni.github.io/heyoka.py/notebooks/parallel_mode.html

Astrodynamics :ringed_planet:

  • It is now possible to construct (N+1)-body problems - that is, N-body problems expressed in the reference frame of one of the bodies (rather than in an inertial reference frame).
  • A fast Kepler solver (supporting both scalar values and NumPy arrays) is now available.

Fixes & clean-ups :lady_beetle:

  • Several small issues in the implementation of propagate_grid() were identified and fixed.
  • heyoka.py now depends on the Intel TBB library.
  • heyoka.py does not depend any more on the spdlog library.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka.py/changelog.html

v0.17.0

2 years ago

This new version of heyoka.py comes with a big new feature, several quality-of-life improvements and a few fixes.

Ensemble propagations :rocket:

The big new feature is support for ensemble propagations. In ensemble mode, multiple distinct instances of the same ODE system are integrated in parallel, typically using different sets of initial conditions and/or runtime parameters. Monte Carlo simulations and parameter searches are two typical examples of tasks in which ensemble mode is particularly useful.

The combination of ensemble mode with batch integrators can lead to substantial speedups (e.g., a floating-point throughput increase of 23x was observed on a modern desktop computer using 8 threads of execution, see here).

Quality of life improvements

  • Several functions in the batch integration API now also accept scalar time values in input, instead of just vectors. This change improves the usability of batch mode by reducing the amount of typing necessary to interact with batch integrators;
  • a function to compute the suggested SIMD size for the CPU in use was added;
  • it is now possible to access the internal representation of the integrator's time variable as a double-length float.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka.py/changelog.html

v0.16.0

2 years ago

This is another big release for heyoka.py, featuring 2 major new features and substantial performance improvements.

Event detection support in batch mode :fast_forward:

Event detection is now available in the batch mode Taylor integrator. As a result, the batch mode integrator has now feature parity with the scalar mode integrator.

The batch mode event detection API is very similar to scalar mode. A tutorial describing the new feature is available here:

https://bluescarni.github.io/heyoka.py/notebooks/Batch%20mode%20overview.html#event-detection

Continuous output :chart_with_upwards_trend:

Debuting in this release is support for continuous output for the propagate_for/until() methods of the scalar and batch integrators.

Continuous output allows to compute the value of the solution of the ODE system at any time within the integration time interval covered by propagate_for/until(). Tutorials are available here:

https://bluescarni.github.io/heyoka.py/notebooks/Dense%20output.html#continuous-output

https://bluescarni.github.io/heyoka.py/notebooks/Batch%20mode%20overview.html#continuous-output

This feature has been inspired by a similar feature available in the DifferentialEquations.jl package.

Performance improvements :rocket:

As a result of various micro-optimisations, performance for large ODE systems in compact mode has improved by up to 15%.

Additionally, fast event exclusion checking is now implemented as a JIT-compiled function, which leads to a ~30% reduction in the event detection overhead.

Miscellanea :ballot_box_with_check:

  • Fix potential issue with data aliasing in corner cases.
  • Fix wrong counting of integration steps in case of interruption by a terminal event.

The full changelog, as usual, is available here:

https://bluescarni.github.io/heyoka.py/changelog.html