Digital Baker Personal website of a computational physicist

Codes

As part of my work I often bake delicious code, and I always share my recipes. Here are some of the latest.

milad

milad: Moment Invariants Local Atomic Descriptor

milad

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:

Uhrin, M. (2021). Through the eyes of a descriptor: Constructing complete, invertible, descriptions of atomic environments.

AiiDA

AiiDA: a scalable computational infrastructure for automated reproducible workflows and data provenance

AiiDA Documentation Main paper Engine paper

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:

Uhrin, M., Huber, S. P., Yu, J., Marzari, N., & Pizzi, G. (2021). Workflows in AiiDA: Engineering a high-throughput, event-based engine for robust and modular computational workflows.

Huber, S. P., Zoupanos, S., Uhrin, M., Talirz, L., Kahle, L., Häuselmann, R., … Pizzi, G. (2020). AiiDA 1.0, a scalable computational infrastructure for automated reproducible workflows and data provenance.

mincePy

mincePy: Python object storage with versioning made simple

mincePy Documentation

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

pyOS: A fresh way to interact with your python objects as though they were files on your filesystem

pyOS Documentation

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

kiwiPy: Robust, high-volume, message based communication made easy

kiwiPy Documentation paper

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:

Uhrin, M., & Huber, S. (2020). kiwiPy: Robust, high-volume, messaging for big-data and computational science workflows.

plumPy

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 Documentation

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.