Pure-Python implementation of starfix Arrow logical hasher
Project description
starfix-python
Pure-Python implementation of the starfix Arrow logical hasher.
Produces stable SHA-256 hashes of Arrow tables, record batches, and arrays that are:
- Column-order independent — reordering columns does not change the hash
- Batch-split independent — splitting data across batches does not change the hash
- Cross-language compatible — identical hashes to the Rust implementation
Installation
pip install starfix
Usage
import pyarrow as pa
from starfix import ArrowDigester
schema = pa.schema([
pa.field("id", pa.int32(), nullable=False),
pa.field("value", pa.float64(), nullable=True),
])
# Hash a full table
table = pa.table({"id": [1, 2, 3], "value": [1.1, 2.2, 3.3]}, schema=schema)
digest = ArrowDigester.hash_table(table)
# Streaming: feed record batches incrementally
digester = ArrowDigester(schema)
for batch in batches:
digester.update(batch)
digest = digester.finalize()
Metadata hashing
By default, Arrow schema- and field-level metadata are excluded from the hash,
preserving hash format 0.0.1 stability. Pass include_metadata=True to any
entry point to include them:
# One-shot
digest = ArrowDigester.hash_table(table, include_metadata=True)
# Streaming
digester = ArrowDigester(schema, include_metadata=True)
for batch in batches:
digester.update(batch)
digest = digester.finalize()
When include_metadata=True, adding or changing any metadata key or value on
any field (including nested struct children and list element fields) produces a
different hash. Metadata key ordering is deterministic — the hash is stable
regardless of insertion order.
A schema with no metadata produces the same hash regardless of include_metadata
(empty-metadata invariant).
License
MIT OR Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file starfix-0.3.1.tar.gz.
File metadata
- Download URL: starfix-0.3.1.tar.gz
- Upload date:
- Size: 61.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed63b762332100e97c6ff48b92d109688d668b826234dee0599b0e79973d6444
|
|
| MD5 |
d9f146bd925b53cab847952786c19dae
|
|
| BLAKE2b-256 |
c62e3effd03fad26401e7401eb036812b66da97caa03ef968134d2f2817810c9
|
File details
Details for the file starfix-0.3.1-py3-none-any.whl.
File metadata
- Download URL: starfix-0.3.1-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
742bff74fb9b4408c4ef8db735a1cf8701e56915a4f57ab40ba55aa8cd2a81a9
|
|
| MD5 |
083cd31b03b3590b39b91eedfb3cca02
|
|
| BLAKE2b-256 |
b576bf14ef3ed3da8c9dfe2dce410cc88689b9933fa267df7b6f15d65ea6171d
|