This release is mostly about enhancements and cleanup of `libpyre` and `libjournal`:
- The new `pyre::flow` namespace contains the basic support for building data processing workflows. It is a pure C++ implementation of the ideas in `pyre.flow`, and will eventually become the foundation on which the python package is built. While still in the early stages of development, it is capable of expressing complicated dependency graphs with a relatively frictionless interface. The focus has been on running large datasets through the graph, but there is support for computing efficiently with nodes that carry small data packets.
- The support for visualizing rasters in `pyre::viz` was reimplemented using `pyre::flow` nodes. The new implementation uses arbitrarily shaped data tiles at each stage of the visualization pipeline, enabling a very powerful caching mechanism when needed. The data products and factories are templated on data types and storage mechanisms, making it easy to adopt the engine to a variety of computing contexts. The old implementation got an extensive makeover and is now in `pyre::viz::iterators`.
- The new `pyre::cuda::memory` namespace contains allocators for all CUDA memory models. They are modeled after the ones in `pyre::memory`. This normalizes the allocation interface and allows higher level objects, such as `pyre::grid` instances, to be built on top of CUDA memory wherever permitted. The code was generously donated by SebastiaanVanPaasen and biancagi; many thanks!
- Several holes to the interface of the `null_t` channel in `journal` were plugged to eliminate errors seen when channels like `debug_t` and `firewall_t` are optimized away.
At the python level:
- The support for h5 saw several improvements: new bindings for property lists, including creation and access lists for files and datasets, as well as support for attributes. There was a thorough investigation of ways to optimize access to h5 files in S3 buckets with spectacular results.
- There is now a new `smith` template for bootstrapping `basic` projects.
On the housekeeping front:
- There is now a home for `benchmarks` to host code that tests complex capabilities or measures implementation performance. These are essentially test drivers that are built on demand and not a part of the normal build of the code.
- There were many enhancements in the support for building with 'mm' and 'cmake', in the generation of `docker` images, on the way GitHub actions run the project CI, as well as the generation of binary distributions for `pypi` and `conda-forge`
Finally, this release contains an embedding of the `mm` build system as it is being absorbed by `merlin`. The goal is to eventually automate the build for all projects that are built on `pyre` without the need to clone any other repositories.
What's Changed
* Added support for flow diagrams by aivazis in https://github.com/pyre/pyre/pull/110
* Memory allocators for CUDA pinned and mapped memory by biancagi in https://github.com/pyre/pyre/pull/98
**Full Changelog**: https://github.com/pyre/pyre/compare/v1.12.3...v1.12.4