pureini
CloudINI-compatible point-cloud compression for Python, implemented as a Rust/PyO3 extension.
- Reads CloudINI V2, V3, V4, and V5 payloads.
- Writes the current V5 format by default, with V2-V4 output available through
EncodingInfo.version. - Supports no second-stage compression, LZ4, and Zstandard.
- Has no Python runtime dependencies and does not require NumPy, Numba, or LLVM.
- Uses Python's stable ABI for CPython 3.10 and newer.
import pureini
info = pureini.EncodingInfo(
width=1,
height=1,
point_step=4,
fields=[
pureini.PointField(
name="x",
offset=0,
type=pureini.FieldType.FLOAT32,
resolution=0.001,
)
],
)
encoded = pureini.PointcloudEncoder(info).encode(b"\0\0\0\0")
decoded, decoded_info = pureini.PointcloudDecoder().decode(encoded)
The public API is deliberately limited to PointField, EncodingInfo,
FieldType, EncodingOptions, CompressionOption, PointcloudEncoder, and
PointcloudDecoder. Wire-format primitives and header helpers are internal.
Point-cloud cleanup can be fused into the native encode call. This removes invalid XYZ returns, stably groups retained points by a discrete field, and returns the updated layout together with the payload:
encoded, output_point_count, did_filter_invalid_xyz = pureini.PointcloudEncoder(info).encode(
cloud_data,
drop_invalid=True,
sort_field="line",
return_metadata=True,
)
return_metadata=True opts into the tuple result. Without it, encode returns
bytes directly even when preprocessing is enabled. output_point_count is
None when preprocessing leaves the input layout unchanged. point_step
never changes, and transformed clouds are one row high.
Source point data is little-endian by default. Pass is_bigendian=True to
normalize big-endian fields in Rust before preprocessing or encoding.
Native preprocessing is opt-in and releases the GIL; larger counting-sort workloads run in parallel.
Add it to a project with uv add pureini.
Distribution
Release artifacts use CPython's stable ABI and cover Python 3.10 and newer:
- manylinux and musllinux wheels for x86-64 and AArch64;
- macOS wheels for Intel and Apple Silicon;
- Windows x86-64 wheels;
- a source distribution containing the complete Rust crate.
CI tests native wheels on CPython 3.10 and 3.14 and independently rebuilds and tests the source distribution.
Benchmarking
Benchmark a release wheel rather than the editable debug build:
uv build --package pureini --out-dir dist
uv run --isolated --no-project --with dist/pureini-0.8.0-*.whl \
python pureini/benchmarks/benchmark_matrix.py
The matrix uses warmed median timings for structured and random integers,
lossy and lossless XYZ, LZ4, Zstandard, and mixed LiDAR fields. Adjust
--points, --iterations, and --warmups for the target machine.
Compare the fused Rust preprocessing path against the previous warmed Numba pipeline and require a material win:
uv run --with numba python pureini/benchmarks/benchmark_preprocessing.py \
--points 500000 --iterations 30 --warmups 8 --minimum-speedup 1.25
The benchmark validates decoded bytes and layout before timing. Its default
fixture contains 20% invalid XYZ placeholders and 128 interleaved line
groups.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 pureini-0.9.0.tar.gz.
File metadata
- Download URL: pureini-0.9.0.tar.gz
- Upload date:
- Size: 40.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
cae440aba2704b970ef6e3ad8840234c086ec0a0d022a7da700d8d88a9147835
|
|
| MD5 |
3c4447d8618e1bc0d5a09fa2b5f8db53
|
|
| BLAKE2b-256 |
33a15b7e6439b24ce59787a3dd9f9abd61f0ad21a33a76c2f1294907470cff24
|
File details
Details for the file pureini-0.9.0-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 562.2 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
326a8ba33a4f7c2fd13b05d22d56879ad24569f06ddec27afe07e7211d4879ac
|
|
| MD5 |
3615386510c0837be08ffa6f48c8e10d
|
|
| BLAKE2b-256 |
41d1ed9951738f9b367de2c7980621cdb26a63468ca9907c10d377b0f939e378
|
File details
Details for the file pureini-0.9.0-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 1.0 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
01d35a7abce910c8b399b9efe0ebdf4d6bafbc256db952be4bbaff331944ac11
|
|
| MD5 |
6339a3634d56bb56de6b4fb892e48c90
|
|
| BLAKE2b-256 |
0d1e6bb8b013fb93993f8d0986ba48d14de3844f9ddb3a827cc4646b27f5907a
|
File details
Details for the file pureini-0.9.0-cp310-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 950.7 kB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
d37c6e39659eb3280c5830aa96b47c191adfa6ca79fcd905e18e1182f6a2f77b
|
|
| MD5 |
a079f05c161f3299039c387c0aaa87af
|
|
| BLAKE2b-256 |
c65f8d326629ad5ddd9c782baa323cb8f561840cdb006d0b564ac5f55bdc9f0a
|
File details
Details for the file pureini-0.9.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 821.6 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
7c5f20a4835f710bb770762f4d701a1a7c38f8214b8be1bd3d0a9b08f63e02bd
|
|
| MD5 |
3053c892846d6e1e29eaf97404220e70
|
|
| BLAKE2b-256 |
f0b5f2f081c284611cc04f449497c481d87cd01e6e7ffa0458c379f4d6e96044
|
File details
Details for the file pureini-0.9.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 737.4 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
37781b88f95ea0898589fe89aa670f9b847e93118399f14e1f14610f12832d56
|
|
| MD5 |
de4f8a5c70a54522291a5e5332d29c8d
|
|
| BLAKE2b-256 |
fff79741d366535e526c57a27f65a358357612abc1b48119312e654a2f069611
|
File details
Details for the file pureini-0.9.0-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 636.2 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
def1b87d9fcc0d87305c4c330687c3a8d47b043604bf25eec69f663673a1de30
|
|
| MD5 |
8f15d9e00aa2615703cac1963c391ecd
|
|
| BLAKE2b-256 |
6482ee1bb1c3b5ceedaf15827213cdae40e5451e87936fc492794df942abc29a
|
File details
Details for the file pureini-0.9.0-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: pureini-0.9.0-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 725.1 kB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","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 |
0877174123fa6cb69cf399ae5b79ba73cf62ee2bf77892c84c0062186b9169c9
|
|
| MD5 |
3db945f9af572f269d9a34a55d1bfe7a
|
|
| BLAKE2b-256 |
7356fd61376d791c74f4d96798c957319514d40437e966a087774f7a618aed5c
|