pyrazobill
Python client library for the Razobill telemetry decomposition engine. It splits unstructured log lines into structured templates, numbers, and words, and restores original strings bit-for-bit. Built with a high-performance C++20 core and includes a resilient pure-Python fallback.
Lossless invertibility
Traditional log parsers discard formatting, alter timestamps, or leak unseen variable tokens into cluster definitions. Razobill enforces an algebraic invariant across every parse:
$$\forall m \in \Sigma^, \quad \text{RzJoin}(\text{RzSplit}(m)) \equiv m$$
Every byte of whitespace, delimiter punctuation, and parameter data is preserved with zero information destruction.
Quick installation
Install the precompiled binary wheel from PyPI:
pip install pyrazobill
Pre-built binary wheels support Python 3.9 through 3.13 on Linux (manylinux), macOS (arm64, x86_64), and Windows (amd64).
Public API reference
The pyrazobill module exports five primary functions with zero memory leaks:
| Function | Signature | Description |
|---|---|---|
RzSplit |
(line: Union[str, bytes], mode="semantic") -> RzRecord |
Splits a message into template, numbers, and words. |
RzJoin |
(*record) -> Union[str, bytes] |
Reconstructs the exact raw log line byte-for-byte. |
RzTemplate |
(line: Union[str, bytes], mode="semantic") -> Union[str, bytes] |
Extracts the template string without allocating value lists. |
RzHash |
(line: Union[str, bytes]) -> int |
Computes 64-bit xxHash64 (seed 0) matching DuckDB and ClickHouse. |
RzSplitMany |
(lines: Iterable, mode="semantic") -> List[RzRecord] |
Parses an iterable of messages in parallel releasing the GIL. |
Usage
Splitting and joining lines
import pyrazobill as rz
# 1. Parse a log message
line = "Accepted publickey for ubuntu from 192.168.1.100 port 54322 ssh2"
record = rz.RzSplit(line)
print(record.template)
# 'Accepted publickey for {s} from {s} port {i} {s}'
print(record.ints)
# [54322]
print(record.strs)
# ['ubuntu', '192.168.1.100', 'ssh2']
# 2. Compute deterministic 64-bit template hash
print(rz.RzHash(record.template))
# 64-bit integer matching ClickHouse xxHash64() exactly
# 3. Restore the exact original text
restored = rz.RzJoin(*record)
assert restored == line
Batch processing with multi-threading
Use RzSplitMany to parse collections of messages in parallel:
import pyrazobill as rz
lines = [
"Worker 1 finished job in 12 ms",
"Worker 2 finished job in 19 ms",
"Worker 3 finished job in 8 ms",
]
records = rz.RzSplitMany(lines)
for rec in records:
print(rec.template, rec.ints)
RzSplitMany releases the Python GIL, allowing background worker threads to parse chunks simultaneously.
Scientific provenance
Razobill is grounded in information-theoretic invariants established in:
Atta, Moustafa Mahmoud (2026). Latitude and Doubt: An exact ledger of meaning in messages with measurements on the genetic code and on English. Zenodo. DOI: 10.5281/zenodo.23287286
Documentation
Metadata
Release files for pyrazobill 1.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyrazobill-1.1.2.tar.gz | 188.4 kB | Details |
Built distributions (wheels)
Total release size: 4.6 MB
Release files / pyrazobill-1.1.2.tar.gz
| Download URL | pyrazobill-1.1.2.tar.gz |
|---|---|
| Size | 188.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f71150d37b8743d10b4e3c838457ab9e083c81c31c53ee89bfe8956c9e154af8
|
|
BLAKE2b-256 checksum How to use checksums |
b3d86ac7fc108548efb89087fe1875aa9b5b7eb5195ec4243957f3977d163649
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp313-cp313-win_amd64.whl
| Download URL | pyrazobill-1.1.2-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 112.8 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
517672a042c43cc08594a7079959fdebc191badc0f5189763a809e2e22851103
|
|
BLAKE2b-256 checksum How to use checksums |
a5577d1fda7d3ac93e30945df627204131bc1ab1089fb3fbc4cb41d2a7d1df7f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyrazobill-1.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 330.9 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
0710e5c9001bcaacdfd452a4aa846c00e463fd34f8165d7cd8a4a6547fd82d07
|
|
BLAKE2b-256 checksum How to use checksums |
638f6924735f289ca77c0ad2f7e7486147c4ca49f0f9a4d8727ade61295bebb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp313-cp313-macosx_11_0_universal2.whl
| Download URL | pyrazobill-1.1.2-cp313-cp313-macosx_11_0_universal2.whl |
|---|---|
| Size | 442.7 kB |
| Tags | CPython 3.13 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
7a6759312568c93973b3a9cb308b9930cf0a6268d547b85382d886e263271c69
|
|
BLAKE2b-256 checksum How to use checksums |
8d4559d0a10e9d07ddf0c55da21bbebb4a675d5b6ad0b93945e0dd2f927cdc80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp312-cp312-win_amd64.whl
| Download URL | pyrazobill-1.1.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 112.8 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ada2f409fbfa6a3978f83dedf1e69aa740f756026ec086f9f2a2a6b90fbae057
|
|
BLAKE2b-256 checksum How to use checksums |
d5a376461acb0c048fd6a9f4b743c915ef5e7f6a52af6687139162c253a58eba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyrazobill-1.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 330.8 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
6bca2648ec13e7217b5d92a4883cf8dbcbb078c3814409b2b57e3c61431b0e85
|
|
BLAKE2b-256 checksum How to use checksums |
903ebb5aabb1224692e32162de74ab3f101d58b73346639dc06e2484758ec1ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp312-cp312-macosx_11_0_universal2.whl
| Download URL | pyrazobill-1.1.2-cp312-cp312-macosx_11_0_universal2.whl |
|---|---|
| Size | 442.6 kB |
| Tags | CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
fdd0ef7a54b68839e66a85b18633a3dcd7cd0a33395bd143cc0430ffe1e7173a
|
|
BLAKE2b-256 checksum How to use checksums |
e9c7f3305be33cc61bfd0aa098a8f2be3ef6289f67ca5458784de9751a40a940
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp311-cp311-win_amd64.whl
| Download URL | pyrazobill-1.1.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 112.1 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0b2a01a609b18e906fc8d54d2e4f104048d69134e7719c735c10fb62b50bcc4f
|
|
BLAKE2b-256 checksum How to use checksums |
e6102db3992953c31516afa4edf17ff36a4eeffea6388debc842bcbeba75aa45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyrazobill-1.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 330.8 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ad6a60ad1f79be4a0da74dabc775f5252c6924f98754938eb3223ac72392f09a
|
|
BLAKE2b-256 checksum How to use checksums |
a6895429150469b65c2b4b1a14eeccacc0e583e7fccf20ee89216310a31dcb87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp311-cp311-macosx_11_0_universal2.whl
| Download URL | pyrazobill-1.1.2-cp311-cp311-macosx_11_0_universal2.whl |
|---|---|
| Size | 440.8 kB |
| Tags | CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
215fee83c1145d90ec6c9a6a4af378d6e3f20e7ea21ace0a08ec350f3bc4fbca
|
|
BLAKE2b-256 checksum How to use checksums |
effc8542354a59a4ea9ef0ae922bfa8503617c8c74ba620aec03ffb9254bd3ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp310-cp310-win_amd64.whl
| Download URL | pyrazobill-1.1.2-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 111.0 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
44e1e3023653a63294c41c8e42d658051885eb4f46f7e1dd7cabe7d801ddbbb7
|
|
BLAKE2b-256 checksum How to use checksums |
939e4efefe8a10710c70a8b8618b38197e2e4be1368a51a9105b04f1f37d2d4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyrazobill-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 329.4 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
81be75837f01582daaa32486a9b00c8d88e1027a0ebe37e910d87af419e8b75f
|
|
BLAKE2b-256 checksum How to use checksums |
6b0c6de3a271f8098ce851c4a0835669f65a9bc50e6c97a9920e37ae01a0c96f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp310-cp310-macosx_11_0_universal2.whl
| Download URL | pyrazobill-1.1.2-cp310-cp310-macosx_11_0_universal2.whl |
|---|---|
| Size | 437.3 kB |
| Tags | CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
b0ab626ff957765fb0a0a970bda8487f5996a1b0edc54688cfbbdd8b85843e4b
|
|
BLAKE2b-256 checksum How to use checksums |
0cdac992fb7623916b3f6f8dfd4d2c4997468bf23c5daeccefc40fd607a3a022
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp39-cp39-win_amd64.whl
| Download URL | pyrazobill-1.1.2-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 111.1 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
32dc32b944b1488bb70d606114f2eaddeaf677480c227459d87fa17b743b976c
|
|
BLAKE2b-256 checksum How to use checksums |
4bde603925fc24f7220470b3cd383c1aef425893fdebb434889c848738c65b02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | pyrazobill-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 329.6 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
98f275d7c3d53e5189fd96590a429ccdb52107caf5366c287646b631c8018ca9
|
|
BLAKE2b-256 checksum How to use checksums |
1850d076196cba5b801268d6ea2cbd51ecb8255af447d25c37e46695e344a771
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|
Release files / pyrazobill-1.1.2-cp39-cp39-macosx_11_0_universal2.whl
| Download URL | pyrazobill-1.1.2-cp39-cp39-macosx_11_0_universal2.whl |
|---|---|
| Size | 437.4 kB |
| Tags | CPython 3.9 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
4f55b6b116f6cab25939092e3374f57ec54cc61daa740cb412912413c3302af2
|
|
BLAKE2b-256 checksum How to use checksums |
f470bc5bf83f3e5da26d98515ecda095e36ec58303d7e2bb7206d3090c0d6d08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.15
|