uro(myces)
uromyces is a toy Rust re-implementation of parts of Beancount's functionality.
How to use / run
You can use the provided Makefile to set up a virtualenv (at .venv) and
install uromyces in it with make dev and then try out e.g.
uro check -v $BEANCOUNT_FILE to run a bean-check like script that will do a
full parse and print out any errors. There is also a uro compare command to
print out differences between Beancount and uromyces.
For more elaborate playing around it's probably best to write a Python script
that uses the uromyces.load_file function.
Components
Just like Beancount, this tries to go from an input file to an usable result of entries.
It does so in the following series of steps.
- Parse single files with a tree-sitter grammar to obtain abstract syntax trees.
- Convert the syntax tree to produce Rust data structures.
- Combine the parsed results from multiple files and run initial validations.
- Booking
- Plugins
- Validation
Performance
On my personal ledger, this is faster than Beancount as follows:
- parsing is about 2x faster
- booking is about 40x faster
- plugins for documents, implicit prices and validations each about 10x faster
Parsing
There's quite some room for improvement in the parser surely, it hasn't been the focus so far. Since the parser does more work per-file, parallelisation with rayon maybe could give nice speed-ups for users who have multiple includes. There's a couple other Rust parser implementations for Beancount already, maybe one of them could be adapted as well. With caching, the parsing performance should not be that relevant since we only need to reparse files that changed.
Imcremental computation
In the context of Fava, using salsa-rs ("A generic framework for on-demand, incrementalized computation.") seems like a good fit to speed up the incremental re-parses and more of a modified ledger.
Differences to Beancount (V3)
- Not a lot of attention has been placed on generating the same kinds of errors. So, e.g., for a transaction that does not balance, the error messages from Beancount might be quite different.
- The automatic filling of missing currencies is stricter (less powerful) than the one by Beancount and only takes the account balances into account to infer cost currencies. IMHO leaving out currencies should be discouraged and making this depend on the previous account balance seems error-prone.
- Likewise, the interpolation is less powerful. For example it won't be able to interpolate a missing total cost. Interpolating total cost seems to be rather an edge case anyway.
- The (deprecated) total cost syntax (
{{}}) is not supported. - Deprecated options are not supported.
- The options
account_rounding,infer_tolerance_from_cost, andplugin_processing_modeare not supported.
Etymology
The name is derived from the genus of rust fungi that can befall bean plants.
Metadata
Release files for uromyces 0.0.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| uromyces-0.0.5.tar.gz | 290.3 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| uromyces-0.0.5-cp310-abi3-win_arm64.whl | CPython 3.10 | abi3 | Windows ARM64 | Details |
| uromyces-0.0.5-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| uromyces-0.0.5-cp310-abi3-manylinux_2_28_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| uromyces-0.0.5-cp310-abi3-manylinux_2_28_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| uromyces-0.0.5-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| uromyces-0.0.5-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 8.9 MB
Release files / uromyces-0.0.5.tar.gz
| Download URL | uromyces-0.0.5.tar.gz |
|---|---|
| Size | 290.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
225904d91861c582e9c2e3a89175bb35a8570b15fdb020a1fb72248aa74a2965
|
|
BLAKE2b-256 checksum How to use checksums |
8e976c91f77102c093f6179b4c7a70e5582b952f8787b28e8ff97f58542ea8dc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / uromyces-0.0.5-cp310-abi3-win_arm64.whl
| Download URL | uromyces-0.0.5-cp310-abi3-win_arm64.whl |
|---|---|
| Size | 1.2 MB |
| Tags | CPython 3.10 Windows ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
a5658a7d2544421962636beec66d3257acacb7bf757a407cf8ee81f9876319d6
|
|
BLAKE2b-256 checksum How to use checksums |
5ed92967dd287f892e6b39f24e95b528b4d6b038f12d50f4c73e51dea23b7d4b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / uromyces-0.0.5-cp310-abi3-win_amd64.whl
| Download URL | uromyces-0.0.5-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 1.3 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
da66f8f86ff6862255c750c94ff54a8185b3f3a6808b7f98510f264d267eab7e
|
|
BLAKE2b-256 checksum How to use checksums |
727893b65450a30463b6500da1c9354c60606a0043ad8960267b3e40dd5f976e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / uromyces-0.0.5-cp310-abi3-manylinux_2_28_x86_64.whl
| Download URL | uromyces-0.0.5-cp310-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b781dbb568d897a7ffb5c4e7134be493e245d2750565dac2bd25c27390fae0b2
|
|
BLAKE2b-256 checksum How to use checksums |
ce2ca89e7f8d74e2fae08c5dc92fcc88cc5d26041d1eb1200d52360e7441b013
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / uromyces-0.0.5-cp310-abi3-manylinux_2_28_aarch64.whl
| Download URL | uromyces-0.0.5-cp310-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
b55854227785647986bcd1c44188543576ff42114c690dac1ccad5598c161a90
|
|
BLAKE2b-256 checksum How to use checksums |
ae2150d3d6f30e4f925422eb1d4e1343882f0162b2796e965c599b0488f0ba42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / uromyces-0.0.5-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | uromyces-0.0.5-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
194037a5dacdbadef200f5b065d6aae436a3e20cd57106ec4f4dbe03c7fa7375
|
|
BLAKE2b-256 checksum How to use checksums |
e024f1f63fd6cc409bcf1302e2b36d4a6d520fa97f4f061a00b048a7e7f7281d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / uromyces-0.0.5-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | uromyces-0.0.5-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
7bfe2a58d71bc326268d04f9d2d2fbd153f13010e5d34f8e5bdfd9ad74987981
|
|
BLAKE2b-256 checksum How to use checksums |
e589c895c9a6d27c7b3529296d0b1e7dca00929442bd005f379537f1affcc184
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for uromyces 0.0.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.