[ANN] owl 0.5.0 released

owl 0.5.0

We are happy to announce the new release of owl, a dedicated system for scientific and engineering computing in OCaml.

The project is thoroughly documented at ocaml.xyz where you can find multiple examples of use. Notable demos are the Google Inception demo and the Neural Style Transfer demo

This release, coming a year after the latest 0.4.0 release, includes multiple improvements in terms of fixed bugs, performance and in the internals of the algorithmic differentiation engine.

It also comes with a large rewrite on the way both owl and some of the libraries it depends on are built, hopefully making its installation much easier and more flexible. Currently owl 0.5.0 should compile seamlessly on osx and multiple linux distributions (including debian, fedora and alpine), with the only known exception of ubuntu (that requires a custom manual build of OpenBLAS). You can now also enable experimental features, like the OpenMP/AEOS, or customise the c/c++ build flags, directly when building wih opam by setting or passing the right env variables (refer to owl and eigen READMEs for further information).

This release also reduces he number of dependencies and stubs, moving toward a more modular approach for the framework: the tensorflow graph and plplot bindings are now provided by separate packages, with owl-plplot already released and owl-tensorflow coming soon. A new plot package (and its jupyter integration module) are also in development, allowing to generate plots using gnuplot.

You can read more about it on the official documentation page ocaml.xyz and on the odoc generated one ocaml.xyz/owl.


In conjunction with this release we are also happy to announce the first release of owl-ode and owl-ode-sundials.

The first is a small OCaml library providing the most common numerical ode integrators, in single-step and adaptive versions and fully compatible with owl type system. One interesting feature of owlvis that a larger and larger part of its core supports compilation via js_of_ocaml, owl-ode falls in the category of packages that support compilation to js.
owl-ode also comes with support for symplectic integrators, providing an interesting framework to develop Hamiltonian Monte Carlo methods.

You can access the documentation of owl-ode inclusive of a small tutorial at ocaml.xyz/owl_ode/owl-ode and ocaml.xyz/apidoc/ode.html. Further examples are available on the sources repository.

The second library is a wrapper to the sundialsml library, allowing to use the battle tested cvode directly on owl.

Both libraries are in their early days, and multiple features are still missing, but have been designed keeping in mind the ergonomics and flexibility from day one. To demonstrate this we synced the release with ocaml-cviode, a small OCaml library that provides lower order contact geometric integrators and is fully reliant on owl-ode to do the heavy lifting and provide the integration interface.

The future plans for owl-ode include:

  • making the libraries more robust and better tested
  • complete the sundialsml wrapper and document it
  • add a wrapper to ocaml-odepack
  • replicate Neural ODEs directly in owl

Every help is welcome!

The Owl Dev Team


Congratulations on the release! it’s great to see owl moving forward!

Some minor comments:

  • owl opam installation requires dune < 1.7.1 ?
  • why a new plotting module based on the tried-and-true but really a bit antiquated gnuplot? why not interface with matplotlib or bind the GR framework?
  • if some ocaml core dev would like to help owl, please have a look at [https://github.com/ocaml/ocaml/pull/1726] and try to get it included in 4.08

Thank for your comments!

No, it requires dune 1.2.1 or newer. This is necessary for some of the flag heuristics needed to configure the build on different systems.

The modules are contributed and maintained by owl users, and they are built on top of what they like to use, in this particular case gnuplot. By extracting plplot we are trying to make the plotting situation fully modular so that any new binding and be added as seamlessly as possible, including ones for the javascript backed.

We would be really happy if somebody publishes compatible matplotlib or gr wrappers, we had even discussed about matplotlib recently. We don’t have the work-force for it at the moment.

Oh neat! I was not aware of it.

I just got

↘ downgrade dune          1.7.1 to 1.6.3 [required by owl]

from opam when installing owl 0.5.0, that’s why I asked.

I have it currently installed (and built) with dune 1.7.1.

But I was able to reproduce your issue: I arrived at ocp-index conflicts with dune >= 1.7.0. Removing ocp-index and retrying it actually worked without downgrading owl. For some reasons opam was getting confused by that (maybe the opam file has changed upstream after installing it, I don’t really know).

@n4323 please let me know if that works for you as well

1 Like

I ran into this with ocp-index as well and it is indeed oddly trick to track down. @rjbou has already fixed this with a ocp-index pr to port it to dune but it needs to be merged and released. If she has time at the Mirage retreat this would be a good one to get our opam-repo universe all coinstallable again :slight_smile: