Skip to content

Releases: bluescarni/heyoka.py

heyoka.py 7.2.2

01 Feb 12:15
Compare
Choose a tag to compare

This is an incremental release that adds Linux aarch64 (i.e., 64-bit Linux arm) precompiled wheels.

The full changelog, as usual, is available here:

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

heyoka.py 7.2.1

07 Jan 21:36
Compare
Choose a tag to compare

This is a quick bugfix release that works around a thread safety issue in the erfa routines on top of which UTC/TAI conversions are implemented.

As usual, the full changelog is available here:

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

heyoka.py 7.2.0

02 Jan 17:41
b005b6c
Compare
Choose a tag to compare

This new heyoka.py release focuses on clarifying the handling of epochs and dates in the SGP4 propagator. Specifically, Julian dates are now always required to be provided in the UTC scale of time. Internally, epochs and dates are converted to the TAI scale of time in order to ensure accurate propagation even in the presence of leap seconds.

The full changelog, as usual, is available here:

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

heyoka.py 7.0.1

29 Dec 10:00
Compare
Choose a tag to compare

This is a hotfix release that corrects an issue in the unit tests on Python 3.13. Additionally, the documentation is not included any more in the sdist in order to reduce the tarball size and allow upload to PyPI.

As usual, the full changelog is available here:

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

heyoka.py 7.0.0

28 Dec 15:39
Compare
Choose a tag to compare

NOTE: despite the major version bump, there are no API breaking changes.

This is an incremental release which updates the minimum supported Python version to 3.9 and the minimum supported NumPy version to 2 (hence the major version bump).

Other changes include:

  • better tuning for Zen 4 and later CPUs,
  • improved support for non-standard batch sizes (i.e., batch sizes which do not correspond exactly to native SIMD sizes),
  • several improvements and tweaks to the SGP4 propagator,
  • the source distribution is now uploaded to PyPI.

Note also that the parallel compilation feature, added in version 6, has been temporarily disabled due to several LLVM bugs.

As usual, the full changelog is available here:

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

heyoka.py 6.1.2

10 Oct 14:07
Compare
Choose a tag to compare

This is a quick hotfix release that fixes PyPI metadata.

Please see the release notes of version 6.1.0 for a list of changes: https://github.com/bluescarni/heyoka.py/releases/tag/v6.1.0

heyoka.py 6.1.1

10 Oct 13:24
Compare
Choose a tag to compare

This is a quick hotfix release that fixes the uploading of binary wheels to PyPI.

Please see the release notes of version 6.1.0 for a list of changes: https://github.com/bluescarni/heyoka.py/releases/tag/v6.1.0

heyoka.py 6.1.0

10 Oct 13:08
Compare
Choose a tag to compare

This is an incremental release whose main feature is the addition of a proper pyproject.toml file, contributed by @agseaton.

The new pyproject.toml file (which in turn relies on scikit-build-core) provides an alternative way of building heyoka.py which integrates better with modern Python packaging practices 🐍 . The new pyproject.toml-based build system is now being used to produce the binary wheels for heyoka.py.

Another noteworthy change is that, beginning from this version, heyoka.py does not open any more the main compiled module with the non-default RTLD_GLOBAL setting. This hack was necessary in order to make the symbols defined in the heyoka C++ library and its dependencies visible to the JIT runtime, but, thanks to changes in the C++ library, it is not needed any more. The net result should be a lower risk of symbol collisions when the heyoka.py binary wheels are used together with other packages from the scientific Python ecosystem.

As usual, the full changelog is available here:

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

heyoka.py 6.0.0

21 Sep 18:45
Compare
Choose a tag to compare

Improved support for mega-kernels ⚡

The main focus of this new heyoka.py release is improved support for very large computational graphs in both Taylor integrators and compiled functions. Specifically:

  • when compact_mode is active, heyoka.py now splits the LLVM IR code in multiple modules rather than keeping it all in a single module - this leads to noticeable improvements in compilation time;
  • the new parjit boolean flag (that can optionally be passed to the constructors of Taylor integrators and compiled functions) can be used to enable parallel compilation in compact_mode - this can lead to dramatically-reduced compilation times on multicore machines;
  • it is now possible to pass the desired LLVM code model to the constructors of Taylor integrators and compiled functions. By default, the small code model is used, but very large computational graphs (which would error out in previous heyoka versions) might require the large model.

Warning

Due to several LLVM issues around parallel JIT compilation discovered during this latest heyoka.py development cycle, the parjit flag is currently off by default on Unix platforms and completely disabled on Windows. Turning on parjit on Unix platforms is considered safe but can very rarely result in a runtime exception being thrown. See the "known issues" page for more details:

https://bluescarni.github.io/heyoka/known_issues.html

We expect the parjit feature to become more stable in later LLVM releases, at which point it will be turned on by default.

Improvements to the integrator API 🔨

  • It is now possible to initialise a Taylor integrator without providing a set of initial conditions - this will result in a zeroed-out initial state vector.
  • The integrator constructor will now error out if a non-empty array of parameter values with the incorrect size is specified. If an empty array of parameter values is passed on construction, the parameter values in the integrator will be zero-inited.

pow() improvements 💥

Exponentiations with non-numerical exponents are now supported in the right-hand side of ODEs.

As usual, the full changelog is available here:

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

heyoka.py 5.1.0

23 Jul 07:55
Compare
Choose a tag to compare

SGP4 propagation 🌍

heyoka.py 5.1.0 adds an implementation of SGP4, a widely-used analytical propagator for Earth-orbiting objects.

SGP4 uses two-line elements sets (TLEs) (available from websites such as CelesTrak and Space-Track) to predict the future or past states of Earth-orbiting objects via a simplified perturbation model. The positional accuracy of SGP4 is in the order of kilometres for propagations up to a few days from the TLE reference epoch.

heyoka.py's SGP4 implementation is fully differentiable up to arbitrary order, thus enabling applications such as state covariance propagation, state transition matrix computation, gradient-based optimisation, orbit determination, etc.

SGP4 is available either as a low-level function that that produces the analytical formulae of SGP4 in heyoka.py's expression system, or a as a fast high-level propagator class accelerated via multithreaded parallelisation and SIMD vectorisation, providing state-of-the-art propagation performance. For more details, see the tutorial:

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

Logical and relational operators, select() 📝

Another new feature in this release is support for logical and relational operators, as well as the select() primitive, in the heyoka.py expression system.

Relational operators allow to perform comparisons (such as "equal to", "less than", "greater than", etc.) during the evaluation of an expression (e.g., during a numerical integration), yielding a numerical value of 1 (true) or 0 (false). Logical operators allow to combine comparisons via logical AND/OR.

The select() primitive can be used to select one of two expressions based on the result of a comparison, thus providing a primitive form of if/then/else branching in the expression system. Note however that select() will always evaluate both the true and false branches, and thus it is unsuitable for complicated flow control.

manylinux_2_28 🖥️

The Linux binary wheels of heyoka.py are now built on top of the manylinux_2_28 images, instead of the manylinux2014 images. The manylinux2014 images have reached EOL at the end of June 2024.

The full changelog, as usual, is available here:

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