Skip to main content

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

pureini-0.9.0.tar.gz (40.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pureini-0.9.0-cp310-abi3-win_amd64.whl (562.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

pureini-0.9.0-cp310-abi3-musllinux_1_2_x86_64.whl (1.0 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

pureini-0.9.0-cp310-abi3-musllinux_1_2_aarch64.whl (950.7 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

pureini-0.9.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (821.6 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

pureini-0.9.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (737.4 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

pureini-0.9.0-cp310-abi3-macosx_11_0_arm64.whl (636.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

pureini-0.9.0-cp310-abi3-macosx_10_12_x86_64.whl (725.1 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

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

Hashes for pureini-0.9.0.tar.gz
Algorithm Hash digest
SHA256 cae440aba2704b970ef6e3ad8840234c086ec0a0d022a7da700d8d88a9147835
MD5 3c4447d8618e1bc0d5a09fa2b5f8db53
BLAKE2b-256 33a15b7e6439b24ce59787a3dd9f9abd61f0ad21a33a76c2f1294907470cff24

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 326a8ba33a4f7c2fd13b05d22d56879ad24569f06ddec27afe07e7211d4879ac
MD5 3615386510c0837be08ffa6f48c8e10d
BLAKE2b-256 41d1ed9951738f9b367de2c7980621cdb26a63468ca9907c10d377b0f939e378

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 01d35a7abce910c8b399b9efe0ebdf4d6bafbc256db952be4bbaff331944ac11
MD5 6339a3634d56bb56de6b4fb892e48c90
BLAKE2b-256 0d1e6bb8b013fb93993f8d0986ba48d14de3844f9ddb3a827cc4646b27f5907a

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d37c6e39659eb3280c5830aa96b47c191adfa6ca79fcd905e18e1182f6a2f77b
MD5 a079f05c161f3299039c387c0aaa87af
BLAKE2b-256 c65f8d326629ad5ddd9c782baa323cb8f561840cdb006d0b564ac5f55bdc9f0a

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c5f20a4835f710bb770762f4d701a1a7c38f8214b8be1bd3d0a9b08f63e02bd
MD5 3053c892846d6e1e29eaf97404220e70
BLAKE2b-256 f0b5f2f081c284611cc04f449497c481d87cd01e6e7ffa0458c379f4d6e96044

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 37781b88f95ea0898589fe89aa670f9b847e93118399f14e1f14610f12832d56
MD5 de4f8a5c70a54522291a5e5332d29c8d
BLAKE2b-256 fff79741d366535e526c57a27f65a358357612abc1b48119312e654a2f069611

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 def1b87d9fcc0d87305c4c330687c3a8d47b043604bf25eec69f663673a1de30
MD5 8f15d9e00aa2615703cac1963c391ecd
BLAKE2b-256 6482ee1bb1c3b5ceedaf15827213cdae40e5451e87936fc492794df942abc29a

See more details on using hashes here.

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

Hashes for pureini-0.9.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0877174123fa6cb69cf399ae5b79ba73cf62ee2bf77892c84c0062186b9169c9
MD5 3db945f9af572f269d9a34a55d1bfe7a
BLAKE2b-256 7356fd61376d791c74f4d96798c957319514d40437e966a087774f7a618aed5c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.10.0

8 files

This release

0.9.0 This release

8 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page