cast-value-rs 0.4.2


pip install cast-value-rs

  Latest version

Released: Aug 13, 2026


Meta
Requires Python: >=3.9

Classifiers

Development Status
  • 4 - Beta

Intended Audience
  • Developers
  • Science/Research

License
  • OSI Approved :: Apache Software License
  • OSI Approved :: MIT License

Programming Language
  • Rust
  • Python :: Implementation :: CPython
  • Python :: Implementation :: PyPy

Topic
  • Scientific/Engineering

Typing
  • Typed

cast-value-rs

Python bindings for cast-value.rs, a Rust implementation of the cast_value Zarr codec.

The cast_value codec converts array elements between numeric data types as part of the Zarr v3 codec pipeline. This package exposes that conversion to Python as a pair of numpy-aware functions.

The hot path applies per-element work -- scalar map lookups, rounding, and range checking -- to every value in the array. In pure Python/numpy this requires multiple passes over the data; the Rust implementation fuses all steps into a single pass over contiguous memory, avoiding intermediate allocations.

Installation

pip install cast-value-rs

Usage

import numpy as np
from cast_value_rs import cast_array

# Convert float64 to uint8 with clamping.
data = np.array([1.7, 2.3, 300.0, -5.0], dtype=np.float64)
result = cast_array(
    data,
    target_dtype="uint8",
    rounding_mode="nearest-even",
    out_of_range_mode="clamp",
)
print(result)  # [2, 2, 255, 0]

target_dtype accepts a string name, a numpy dtype object, or a numpy scalar type:

cast_array(data, target_dtype="uint8", ...)
cast_array(data, target_dtype=np.dtype("uint8"), ...)
cast_array(data, target_dtype=np.uint8, ...)

A scalar map handles special values such as NaN before conversion:

from math import nan, inf

result = cast_array(
    np.array([1.0, nan, inf], dtype=np.float64),
    target_dtype="uint8",
    rounding_mode="nearest-even",
    out_of_range_mode="clamp",
    scalar_map_entries={nan: 0, inf: 255},
)
print(result)  # [1, 0, 255]

Use cast_array_into to write into a pre-allocated array instead of allocating a new one:

from cast_value_rs import cast_array_into

src = np.array([1.0, 2.0, 3.0], dtype=np.float64)
dst = np.zeros(3, dtype=np.uint8)
cast_array_into(
    src, dst,
    rounding_mode="nearest-even",
    out_of_range_mode="clamp",
)
print(dst)  # [1, 2, 3]

Supported types and modes

Category Values
Signed integers int8, int16, int32, int64
Unsigned integers uint8, uint16, uint32, uint64
Floats float16, float32, float64
Rounding modes nearest-even, towards-zero, towards-positive, towards-negative, nearest-away
Out-of-range modes clamp, wrap, or None to raise an error

Documentation

Full documentation, including the Rust API, is at https://zarr-developers.github.io/cast-value.rs/.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython (additional flags: t) 3.14 PyPy 3.9 (pp73) PyPy 3.10 (pp73) PyPy 3.11 (pp73)
macosx_10_12_x86_64
macosx_11_0_arm64
manylinux1_i686
manylinux2014_aarch64
manylinux2014_armv7l
manylinux2014_ppc64le
manylinux2014_s390x
manylinux2014_x86_64
manylinux_2_17_aarch64
manylinux_2_17_armv7l
manylinux_2_17_ppc64le
manylinux_2_17_s390x
manylinux_2_17_x86_64
manylinux_2_5_i686
musllinux_1_2_aarch64
musllinux_1_2_armv7l
musllinux_1_2_i686
musllinux_1_2_x86_64
win32
win_amd64
win_arm64

Files in release

cast_value_rs-0.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (475.7KiB)
cast_value_rs-0.4.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (536.7KiB)
cast_value_rs-0.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (637.3KiB)
cast_value_rs-0.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (536.5KiB)
cast_value_rs-0.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.0KiB)
cast_value_rs-0.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (560.3KiB)
cast_value_rs-0.4.2-cp310-cp310-musllinux_1_2_aarch64.whl (649.0KiB)
cast_value_rs-0.4.2-cp310-cp310-musllinux_1_2_armv7l.whl (806.2KiB)
cast_value_rs-0.4.2-cp310-cp310-musllinux_1_2_i686.whl (751.8KiB)
cast_value_rs-0.4.2-cp310-cp310-musllinux_1_2_x86_64.whl (719.8KiB)
cast_value_rs-0.4.2-cp310-cp310-win_amd64.whl (416.2KiB)
cast_value_rs-0.4.2-cp311-cp311-macosx_10_12_x86_64.whl (510.4KiB)
cast_value_rs-0.4.2-cp311-cp311-macosx_11_0_arm64.whl (469.7KiB)
cast_value_rs-0.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (475.4KiB)
cast_value_rs-0.4.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (536.5KiB)
cast_value_rs-0.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (637.1KiB)
cast_value_rs-0.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (536.3KiB)
cast_value_rs-0.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (517.9KiB)
cast_value_rs-0.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (559.8KiB)
cast_value_rs-0.4.2-cp311-cp311-musllinux_1_2_aarch64.whl (648.7KiB)
cast_value_rs-0.4.2-cp311-cp311-musllinux_1_2_armv7l.whl (806.0KiB)
cast_value_rs-0.4.2-cp311-cp311-musllinux_1_2_i686.whl (751.7KiB)
cast_value_rs-0.4.2-cp311-cp311-musllinux_1_2_x86_64.whl (719.3KiB)
cast_value_rs-0.4.2-cp311-cp311-win_amd64.whl (416.1KiB)
cast_value_rs-0.4.2-cp312-cp312-macosx_10_12_x86_64.whl (482.8KiB)
cast_value_rs-0.4.2-cp312-cp312-macosx_11_0_arm64.whl (447.7KiB)
cast_value_rs-0.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (476.2KiB)
cast_value_rs-0.4.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (542.5KiB)
cast_value_rs-0.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (635.6KiB)
cast_value_rs-0.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (547.9KiB)
cast_value_rs-0.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (536.3KiB)
cast_value_rs-0.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (577.2KiB)
cast_value_rs-0.4.2-cp312-cp312-musllinux_1_2_aarch64.whl (649.6KiB)
cast_value_rs-0.4.2-cp312-cp312-musllinux_1_2_armv7l.whl (811.6KiB)
cast_value_rs-0.4.2-cp312-cp312-musllinux_1_2_i686.whl (770.0KiB)
cast_value_rs-0.4.2-cp312-cp312-musllinux_1_2_x86_64.whl (735.4KiB)
cast_value_rs-0.4.2-cp312-cp312-win_amd64.whl (431.7KiB)
cast_value_rs-0.4.2-cp312-cp312-win_arm64.whl (388.5KiB)
cast_value_rs-0.4.2-cp313-cp313-macosx_10_12_x86_64.whl (482.8KiB)
cast_value_rs-0.4.2-cp313-cp313-macosx_11_0_arm64.whl (447.9KiB)
cast_value_rs-0.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (475.9KiB)
cast_value_rs-0.4.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (542.2KiB)
cast_value_rs-0.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (635.7KiB)
cast_value_rs-0.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl (547.7KiB)
cast_value_rs-0.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (536.0KiB)
cast_value_rs-0.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl (577.0KiB)
cast_value_rs-0.4.2-cp313-cp313-musllinux_1_2_aarch64.whl (649.5KiB)
cast_value_rs-0.4.2-cp313-cp313-musllinux_1_2_armv7l.whl (811.4KiB)
cast_value_rs-0.4.2-cp313-cp313-musllinux_1_2_i686.whl (769.7KiB)
cast_value_rs-0.4.2-cp313-cp313-musllinux_1_2_x86_64.whl (735.2KiB)
cast_value_rs-0.4.2-cp313-cp313-win_amd64.whl (431.7KiB)
cast_value_rs-0.4.2-cp313-cp313-win_arm64.whl (388.5KiB)
cast_value_rs-0.4.2-cp314-cp314-macosx_10_12_x86_64.whl (484.1KiB)
cast_value_rs-0.4.2-cp314-cp314-macosx_11_0_arm64.whl (447.7KiB)
cast_value_rs-0.4.2-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (475.4KiB)
cast_value_rs-0.4.2-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (542.3KiB)
cast_value_rs-0.4.2-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (635.1KiB)
cast_value_rs-0.4.2-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl (548.3KiB)
cast_value_rs-0.4.2-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (535.8KiB)
cast_value_rs-0.4.2-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl (577.0KiB)
cast_value_rs-0.4.2-cp314-cp314-musllinux_1_2_aarch64.whl (648.6KiB)
cast_value_rs-0.4.2-cp314-cp314-musllinux_1_2_armv7l.whl (811.2KiB)
cast_value_rs-0.4.2-cp314-cp314-musllinux_1_2_i686.whl (769.4KiB)
cast_value_rs-0.4.2-cp314-cp314-musllinux_1_2_x86_64.whl (735.4KiB)
cast_value_rs-0.4.2-cp314-cp314-win32.whl (378.0KiB)
cast_value_rs-0.4.2-cp314-cp314-win_amd64.whl (431.8KiB)
cast_value_rs-0.4.2-cp314-cp314-win_arm64.whl (388.9KiB)
cast_value_rs-0.4.2-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (473.8KiB)
cast_value_rs-0.4.2-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (526.0KiB)
cast_value_rs-0.4.2-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (634.1KiB)
cast_value_rs-0.4.2-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl (542.2KiB)
cast_value_rs-0.4.2-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (535.1KiB)
cast_value_rs-0.4.2-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl (561.3KiB)
cast_value_rs-0.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl (646.9KiB)
cast_value_rs-0.4.2-cp314-cp314t-musllinux_1_2_armv7l.whl (795.6KiB)
cast_value_rs-0.4.2-cp314-cp314t-musllinux_1_2_i686.whl (764.0KiB)
cast_value_rs-0.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl (736.4KiB)
cast_value_rs-0.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (476.5KiB)
cast_value_rs-0.4.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (537.3KiB)
cast_value_rs-0.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (637.8KiB)
cast_value_rs-0.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (537.2KiB)
cast_value_rs-0.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (518.5KiB)
cast_value_rs-0.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (560.8KiB)
cast_value_rs-0.4.2-cp39-cp39-musllinux_1_2_aarch64.whl (649.7KiB)
cast_value_rs-0.4.2-cp39-cp39-musllinux_1_2_armv7l.whl (806.7KiB)
cast_value_rs-0.4.2-cp39-cp39-musllinux_1_2_i686.whl (752.6KiB)
cast_value_rs-0.4.2-cp39-cp39-musllinux_1_2_x86_64.whl (720.4KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (474.9KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (526.1KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (634.6KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (535.7KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl (648.0KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl (795.6KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl (759.3KiB)
cast_value_rs-0.4.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl (731.7KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (474.7KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (526.1KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (634.6KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (535.5KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (531.5KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl (565.6KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (647.8KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl (795.3KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-musllinux_1_2_i686.whl (758.9KiB)
cast_value_rs-0.4.2-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (731.6KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (475.8KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (526.7KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (636.4KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (536.8KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl (648.8KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-musllinux_1_2_armv7l.whl (796.2KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl (760.7KiB)
cast_value_rs-0.4.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl (732.7KiB)
cast_value_rs-0.4.2.tar.gz (84.8KiB)
No dependencies