As part of my work I often bake delicious code, and I always share my recipes. Here are some of the latest.
milad
: Moment Invariants Local Atomic Descriptor
Milad is a code I created as part of my research to explore ways to encode atomic environments (or any point clouds) in a rotationally invariant fingerprint that can be decoded back into the original environment (modulo global rotation.) If that sounds like something that’s up your street then check out the paper, here:
AiiDA
: a scalable computational infrastructure for automated reproducible workflows and data provenance
I was the principal architect of the workflow engine in AiiDA, a highly-scalable and robust workflow engine for scientific workflows. AiiDA has been used in a large number of scientific works with plugins having been written for a large number of community codes, and best of all it’s FOSS! Papers:
mincePy
: Python object storage with versioning made simple
I created mincePy because I wanted to collaborate on scientific projects as easily as it is to work together on a Google Doc, or source code in a github repository.
MincePy uses MongoDB to let you store, find and keep versions of any Python object (numpy arrays, pandas DataFrames
, pytorch networks, etc) in real time from anywhere in the world.
pyOS
: A fresh way to interact with your python objects as though they were files on your filesystem
PyOS builds on mincePy to provide a bash-like shell where instead of files you have Python objects and instead of a local disk you are connected to a database.
kiwiPy
: Robust, high-volume, message based communication made easy
KiwiPy is a high-level client for RabbitMQ. It takes the pain out of creating robust message queues which are an essential part of any automated scientific workflow.
Lost your connection the supercomputer? Laptop crashed whilst running a long, multi-step, workflow? Need to launch 10k processes and be certain that they all complete? KiwiPy takes care of all this and more, with a minimal learning curve.
Paper:
plumPy
: A python workflows library that supports writing Processes with a well defined set of inputs and outputs that can be chained together and nested.
PlumPy is a key component of the AiiDA workflow engine and is used to create Processes with well-defined inputs and outputs and manage their lifecycle in a robust and dependable way. It can be used entirely independently of AiiDA and is a perfect fit wherever a state machine with inputs, outputs and state transitions is needed, particularly where persistence (i.e. saving and loading of state) is useful.