heyoka.py

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

MPL-2.0 License

Downloads
2.4K
Stars
70
Committers
3

Bot releases are visible (Hide)

heyoka.py - heyoka.py 0.18.0

Published by bluescarni over 2 years ago

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

Automatic parallelisation 🚀

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 🪐

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

  • 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

heyoka.py - heyoka.py 0.17.0

Published by bluescarni over 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 🚀

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

heyoka.py - heyoka.py 0.16.0

Published by bluescarni almost 3 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 ⏩

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 📈

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 🚀

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 ☑️

  • 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

heyoka.py - heyoka.py 0.15.1

Published by bluescarni about 3 years ago

This is a quick bugfix 🐛 release that fixes an issue in the conversion of SymPy rationals to the heyoka.py expression system.

The full changelog is available here:

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

heyoka.py - heyoka.py 0.15.0

Published by bluescarni about 3 years ago

This is one of the biggest releases of heyoka.py to date, featuring various new capabilities, a major change in the expression system and several fixes.

Reference semantics for funcs

A fundamental change debuting in heyoka.py 0.15.0 is that function nodes in the expression system now use reference semantics, instead of value semantics. This change is motivated by various use cases involving large symbolic expressions with a high degree of internal repetition (including, e.g., artificial neural networks), which can now be handled by the expression system orders of magnitude more efficiently (from the point of view of both CPU and memory utilisation).

New features in the expression system 🖋️

  • It is now possible to compute the symbolic derivative of an expression with respect to a parameter.
  • Numerical constants can now be defined in a symbolic way. The symbolic π constant is now available in the expression system, using this new framework.
  • The two-argument inverse tangent function atan2() has been added to the expression system.

The VSOP2013 solution 🪐

An implementation of the VSOP2013 analytical solution for the motion of the planets of the Solar System has been added to the expression system. This means that it is now possible to formulate differential equations containing the positions/velocities of the planets of the Solar System as functions of time.

A tutorial introducing this new feature is available here:

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

Improved support for PPC64 💻

Thanks to the generosity of OSU's Open Source Lab, who provided remote access to a PowerPC workstation, heyoka.py now features much better support for 64-bit PowerPC processors. In particular, heyoka.py is now able to take advantage of the hardware-accelerated quadruple-precision arithmetic capabilities of recent PowerPC processors.

Other changes ☑️

  • Performance improvements to event detection.
  • Various fixes and improvements to the build system.
  • Fix a corner-case issue in the implementation of the kepE() function.

Full changelog

As usual, the full changelog is available here:

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

heyoka.py - heyoka.py 0.14.0

Published by bluescarni about 3 years ago

This new release of heyoka.py implements an important improvement in the automatic deduction of the cooldown value for terminal events, which should now be more reliable than before.

The full changelog, as usual, is available here:

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

heyoka.py - heyoka.py 0.12.0

Published by bluescarni about 3 years ago

The 0.12.0 release of heyoka.py features two important additions:

  • serialisation support,
  • support for 64-bit ARM CPUs.

Serialisation

Serialisation allows to save/load heyoka.py objects via Python's pickle module. A tutorial showcasing this new feature is available here:

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

Please pay attention to the very important CAVEATS highlighted at the beginning of the tutorial!

Support for non-x86 CPUs

This is the first version of heyoka.py officially supporting 64-bit ARM processors. ARM builds have been added to the continuous integration pipeline, courtesy of CircleCI.

heyoka.py - heyoka.py 0.11.0

Published by bluescarni over 3 years ago

This is a minor release to keep the release number of heyoka.py in sync with the release number of the heyoka C++ library. Apart from a new tutorial notebook and a few doc fixes, there are no functional changes with respect to version 0.10.0.

The full changelog, as usual, is available here:

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

heyoka.py - heyoka.py 0.10.0

Published by bluescarni over 3 years ago

The latest version of heyoka.py comes with an important new feature, the ability to convert heyoka.py expressions to/from SymPy expressions. A tutorial showcasing this new feature is available here.

Additionally, this release introduces a change in the API of the callbacks that can (optionally) be passed to the propagate_*() methods. Also, this release features a new pairwise product primitive and various improvements to the automatic simplification capabilities of the expression system.

As usual, the detailed changelog is available here:

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

heyoka.py - heyoka.py 0.9.0

Published by bluescarni over 3 years ago

This release includes two new functions in the expression system: the inverse of Kepler's elliptic equation and time polynomials.

Additionally, this release features also performance improvements and various internal cleanups.

The full changelog, as usual, is available here:

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

heyoka.py - heyoka.py 0.8.0

Published by bluescarni over 3 years ago

This new release of heyoka.py features a couple of breaking changes in the event detection API. The changes are explained in detail here:

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

The release contains also a couple of new features for the propagate_*() functions. As usual, the full changelog is available here:

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

heyoka.py - heyoka.py 0.7.0

Published by bluescarni over 3 years ago

This new release of heyoka.py comes with several feature additions and a couple of fixes.

One important improvement is that the time coordinate in the adaptive integrators is now represented internally in double-length format, which greatly increases time accuracy.

As usual, the full changelog is available here:

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

heyoka.py - heyoka.py 0.6.1

Published by bluescarni over 3 years ago

This is a small incremental release that bumps up the minimum required version of the heyoka C++ library to 0.6.1.

The full changelog, as usual, is available here:

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

heyoka.py - heyoka.py 0.6.0

Published by bluescarni over 3 years ago

This new version of heyoka.py comes with a big new feature, event detection. Various tutorials exploring this new feature are available:

https://bluescarni.github.io/heyoka.py/advanced_tutorials.html#event-detection

Another important new feature is that propagate_grid() can now be used with the batch integrator.

The full changelog is available here:

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

heyoka.py - heyoka.py 0.5.0

Published by bluescarni over 3 years ago

This is a minor release that features additions and improvements to the expression system. In particular, the symbolic differentiation capabilities of heyoka's expression system are now available also in Python.

The full changelog, as usual, is available here:

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

heyoka.py - heyoka.py 0.4.0

Published by bluescarni over 3 years ago

This new release of heyoka.py comes with several new features:

  • support for outputting the Taylor coefficients that were used to perform a single time step,
  • support for dense (continuous) output,
  • efficient propagation over a time grid via dense output,
  • new automatic simplifications in the expression system,
  • a new function powi() for exponentiation with natural exponents.

There is also an important bugfix regarding a division by zero in certain corner cases when using pow() with small natural exponents.

As usual, the full changelog is available here:

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

heyoka.py - heyoka.py 0.3.0

Published by bluescarni over 3 years ago

This is the initial release of heyoka.py.

Package Rankings
Top 11.67% on Pypi.org
Top 41.85% on Conda-forge.org