Skip to content

MasonMcGill/artisan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Artisan

Artisan is a lightweight experiment-management library with support for gradual typing. It allows you to write code like this:

class SineWave(artisan.Artifact):
    'sin(2πf⋅t + φ) for t ∈ [0, 1sec), sampled at 44.1kHz.'

    class Spec(Protocol):
        f: float; 'Frequency'
        φ: float = 0.0; 'Phase shift'

    def __init__(self, spec: Spec) -> None:
        self.t = np.linspace(0, 1, 44100)
        self.x = np.sin(2 * np.pi * spec.f * self.t + spec.φ)

to generate file trees like this:

├── SineWave_0000/
│   ├── _meta_.json
│   ├── t.cbor
│   └── x.cbor
└── SineWave_0001/
    ├── _meta_.json
    ├── t.cbor
    └── x.cbor

that can be viewed as customizable, live-updated, interactive documents like this:

-- artisan-ui screenshot --

to facilitate an explorable, explainable, composable-component-based approach to scientific, analytical, and artistic programming. Complete documentation is available on Read the Docs.

Installation

> pip install artisan-builder

Artisan works with CPython and PyPy 3.6+.

Development

To install the project's dependencies:

To run the test suite:

> poetry run pytest

To build the HTML documentation:

> poetry run task build-docs

To build the HTML documentation with live-previewing:

> poetry run task serve-docs

About

A build system for explainable science

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages