serialize
Canonical encoding, decoding and hashing for workflow objects.
A Task is identified by a fingerprint: a digest of what it is and what it was given. That only works if the same parameters always encode to the same bytes, so this module turns arbitrary python values into a JSON tree with a fixed shape, then hashes its canonical text.
Two modes exist. "fingerprint" encodes values for hashing: an array becomes a digest of its bytes and a value left at None is dropped. "document" encodes values for storage: an array becomes a nested list and nothing is dropped, so most values read back. A function, a partial, or a value with no encoding of its own is named rather than reproduced in either mode, and a dataframe has no document form at all; decoding any of them raises.
Stability rests on json, repr of a float, numpy’s byte layout and blake2b, none of which change between python versions, and – for frames and quantities only – on pandas’ object hash and pint’s short unit format. Python’s own hash is never used: it is salted per process.
Functions
| Name | Description |
|---|---|
| canonical_json | Return the canonical JSON text of an object. |
| combine_hashes | Return one digest standing for an ordered series of digests. |
| decode | Return the object a document-mode encoding stands for. |
| digest | Return a stable 16 character digest of any encodable object. |
| encode | Return a JSON-safe tree standing for an object. |
| model_values | Return a model’s fields and extras, as the objects they are. |