Python packages
Six packages carry the UMP contract into Python. Analysts mostly need two of them. The rest sit underneath, or serve the apps.
The prose and the published JSON Schemas are normative; the Python packages are informative reference implementations. Where they disagree, the spec wins and the package has a bug. The schemas page lists the published files.
Pick a package
Section titled “Pick a package”| Package | Import | What it is for | Who uses it |
|---|---|---|---|
| babelfin | import babelfin as fin | The analyst front door: estimands, numbers with intervals, gate checks, models, workflows and the core API from a notebook. | Analysts in notebooks and scripts |
| finprint | import finprint as fp | Records pandas prep as a transform recipe beside the output file, then verifies or reapplies it. | Analysts preparing data |
| ump-workflow | import ump_workflow as uw | Saves a fitted notebook model as a hashed bundle of data and source, and runs it on new data. Can serve one bundle over HTTP. | Analysts sharing models, and whoever runs them next |
| ump-spec | import ump_spec | The contract itself: Pydantic models, JSON Schemas, rule functions, the gate catalogue and Merkle maths. | Tool builders and every other package |
| ump-intake | import ump_intake as ui | Turns a client delivery (CSV, XLSX, connector rows) into a canonical weekly panel and ties it to the printed totals. | Data onboarding services |
| ump-sdk | import ump_sdk | Typed HTTP clients and a FastAPI app factory with the house conventions. | Service and adapter authors |
How they fit together
Section titled “How they fit together”Babelfin wraps ump-spec and calls ump-workflow for bundles. Finprint stands alone; babelfin picks it up through an optional extra. Ump-intake and ump-sdk serve the apps and adapters, and babelfin uses the SDK clients when it talks to a running core.
Install from the repository
The packages are not on PyPI yet. Each one is its own uv project (Python 3.12, own lockfile). Install editable from a checkout:
pip install -e 'packages/babelfin[recipe,plot]' # pulls in ump-spec; recipe adds finprintpip install -e 'packages/finprint[notebook]' # finprint alone, with the IPython extensionQuote the extras in zsh, which treats [...] as a glob.
- Work through the Learn notebooks, which use babelfin and finprint end to end.
- Look up exact signatures in the API reference.