alkymi - Pythonic task automation
Project description
alkymi ⚗️
Alkymi is a pure Python (3.5+) library for describing and executing tasks and pipelines with built-in caching and conditional evaluation based on checksums.
Alkymi is easy to install, simple to use, and has no dependencies outside of Python's standard library. The code is cross-platform, and allows you to write your pipelines once and deploy to multiple operating systems (tested on Linux, Windows and Mac).
Documentation, including a quickstart guide, is provided here.
Features
- Easily define complex data pipelines as decorated Python functions
- This allows you to run linting, type checking, etc. on your data pipelines
- Return values are automatically cached to disk, regardless of type
- Efficiently checks if pipeline is up-to-date
- Checks if external files have changed, bound functions have changed or if pipeline dependencies have changed
- No domain specific language (DSL) or CLI tool, just regular Python
- Supports caching and conditional evaluation in Jupyter Notebooks
- Cross-platform - works on Linux, Windows and Mac
- Expose recipes as a command-line interface (CLI) using alkymi's Lab type
Sample Usage
For examples of how to use alkymi, see the quickstart guide.
Example code:
import numpy as np
import alkymi as alk
@alk.recipe()
def long_running_task() -> np.ndarray:
# Perform expensive computation here ...
hard_to_compute_result = np.array([42])
# Return value will be automatically cached to disk
return hard_to_compute_result
result = long_running_task.brew() # == np.ndarray([42])
Or one of the examples, e.g. MNIST.
Upcoming Features
The following features are being considered for future implementation:
- Arguments to recipes when calling
brew
inLab
CLI - Type annotations propagated from bound functions to recipes
- Support for call/type checking all recipes (e.g. by adding a
check
command toLab
) - Cache maintenance functionality
- Parallel execution of pipeline
Known Issues
- alkymi currently doesn't check custom objects for altered external files when computing cleanliness (e.g.
MyClass
has aself._some_path
that points to a file somewhere outside alkymi's internal cache) alk.foreach()
currently only supports enumerable inputs of typeList
orDict
- Recipes marked
transient
will always be dirty, and thus always require reevaluation. This functionality should be replaced by a proper means of creating recipes that don't cache outputs, but only run when needed to provide inputs for downstream recipes
Installation
Install via pip:
pip install --user alkymi
Or see the Installation page.
Testing
After installing, you can run the test suite (use the lint
, coverage
and type_check
recipes to perform those
actions):
python3 labfile.py brew test
License
alkymi is licensed under The MIT License as found in the LICENSE.md file
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file alkymi-0.0.5.tar.gz
.
File metadata
- Download URL: alkymi-0.0.5.tar.gz
- Upload date:
- Size: 23.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d19d8882e64339cb268f6592982125a83476782d69433a76508912e4a7b7151d |
|
MD5 | c07409e09369441143b1302bc1e3dba4 |
|
BLAKE2b-256 | 9605c8be6e74de27da05f56365c45627714bf10b8b29d88f4dd849ccbcc9cfc9 |
File details
Details for the file alkymi-0.0.5-py3-none-any.whl
.
File metadata
- Download URL: alkymi-0.0.5-py3-none-any.whl
- Upload date:
- Size: 27.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/51.1.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5c34004019ca80c0556e4ea65d8c6975507c7732e1ccbcbe063b5986301f928 |
|
MD5 | e24f54a0de40fe2cb0f68bb679fc6417 |
|
BLAKE2b-256 | 040618dfe7655ce71b304f333f25ba2a8bbfd445102c3bd2e9335d528f022328 |