cast-value
cast-value.py
A Python implementation of the cast_value codec for Zarr,
with zarr-python integration.
What
The cast_value codec defines how to safely convert arrays between integer
and float data types. In Zarr terminology, this codec is an "array -> array"
codec, which means its input and output are both arrays.
You can find the specification for this codec in the zarr-extensions repository.
Why
This codec is commonly used for lossy data compression: when decoded data should be high-precision floats, but the absolute range of the values fits within the range of a smaller integer data type, then encoding the floats as ints before writing data can vastly shrink the stored values.
For example, if your data is a sequence of float64 values like
[100.1, 120.3, 125.5], storing those values as uint8, e.g.
[100, 120, 125], offers 8-fold reduction in storage size, provided the
precision lost due to rounding is acceptable.
Installation
pip install cast-value
For the optional Rust backend (faster for large arrays):
pip install 'cast-value[rs]'
Usage
The codec is automatically registered with zarr-python via the zarr.codecs
entrypoint. When cast-value[rs] is installed, the Rust backend is used;
otherwise it falls back to the pure-NumPy backend.
import numpy as np
import zarr
import zarr.storage
from cast_value import CastValueNumpyV1
codec = CastValueNumpyV1(
data_type="uint8",
rounding="nearest-even",
out_of_range="clamp",
)
# Write float64 data -- values are rounded and clamped to [0, 255]
data = np.array([1.5, 100.7, 255.9, -3.0], dtype=np.float64)
arr = zarr.create_array(store={}, data=data, filters=codec)
# Read it back -- comes back as float64, but with uint8 precision
result = arr[:]
print(f"Array dtype: {arr.dtype}")
print(f"Values written: {data}")
print(f"Values read: {result}")
Array dtype: float64
Values written: [ 1.5 100.7 255.9 -3. ]
Values read: [ 2. 101. 255. 0.]
Development
This project uses uv for dependency management.
Setup
# Clone the repo
git clone https://github.com/zarr-developers/cast-value.py.git
cd cast-value.py
# Install dev dependencies (includes test + benchmark deps)
uv sync --group dev
Running tests
# Run the full test suite
uv run pytest tests
# Run with coverage
uv run pytest tests --cov=cast_value --cov-report=term-missing
Running all checks
# Run the full CI suite locally (tests, linting, type checking)
uvx nox
# Or run just linting and type checking
uvx prek
Building docs
uv sync --group docs
uv run zensical build
# Output is in site/
Running examples
uv run python examples/zarr_integration/zarr_cast_value.py
uv run python examples/benchmarks/bench_numpy_vs_rust.py
Who
Davis Bennett (@d-v-b)
Metadata
Release files for cast-value 0.2.1
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 | |
|---|---|---|---|---|
| cast_value-0.2.1.tar.gz | 99.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cast_value-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 115.0 kB
Release files / cast_value-0.2.1.tar.gz
| Download URL | cast_value-0.2.1.tar.gz |
|---|---|
| Size | 99.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
38173b6fc7e75aaf4f62bf7c46cd506309156a4b988a7ee4dd9f77569f410f1d
|
|
BLAKE2b-256 checksum How to use checksums |
a180d486892982a81ba344193c7bd29b85d3cb353375a2e13a2db2be59e34c62
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 2, 2026.
Transparency logRelease files / cast_value-0.2.1-py3-none-any.whl
| Download URL | cast_value-0.2.1-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1b32e9cccbcac63210f41774942ef4dc92a3b2ddbbc0342642e0b114a373894c
|
|
BLAKE2b-256 checksum How to use checksums |
59b18a0793034fc781b092b2c7827115f5fe63175f985dc246d54d5ea2845353
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 2, 2026.
Transparency logSecurity for cast-value 0.2.1
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for cast_value-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 2, 2026.
Transparency logA 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.