Skip to main content

Pure Python implementation of ALP (Adaptive Lossless floating-Point) compression — port of QTSurfer/alp-java.

Project description

alp-py

CI PyPI License

Pure Python implementation of the ALP (Adaptive Lossless floating-Point) compression algorithm.

Based on: Afroozeh & Boncz, "ALP: Adaptive Lossless floating-Point Compression", ACM SIGMOD 2024. (paper · pdf)

Python port of the QTSurfer/alp-java reference implementation. Bit-exact byte-level compatibility with alp-java — files written by either implementation can be read by the other.

Status

Bit-exact aligned with alp-java — encode + decode round-trip verified against fixtures emitted by the Java reference. See the PyPI badge above for the latest version.

Install

pip install alp-codec

Usage

import numpy as np
from alp import encode, decode

values = np.array([65007.28, 65007.31, 65007.30, 65007.32], dtype=np.float64)

# Encode to bytes
blob = encode(values)

# Decode back to a NumPy float64 array
recovered = decode(blob)
assert np.array_equal(values, recovered)

Why ALP

ALP applies semantic compression to decimal floating-point arrays. For a typical financial price column at 2 decimal places it reaches 3-4 bits per value — about an order of magnitude better than Gorilla XOR or block-compressed PLAIN encodings.

The algorithm picks an (e, f) pair per block such that value × 10^e × 2^-f is exactly representable as a small int64, encodes the integers via Frame-Of-Reference + bit-packing, and stores any non-conforming values as outliers with a position list.

Reference implementations

Language Repo Status
Java QTSurfer/alp-java Reference
Python QTSurfer/alp-py This repo

License

Copyright 2026 Wualabs LTD. Apache License 2.0 — see LICENSE.

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

alp_codec-0.8.2.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

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

alp_codec-0.8.2-py3-none-any.whl (11.6 kB view details)

Uploaded Python 3

File details

Details for the file alp_codec-0.8.2.tar.gz.

File metadata

  • Download URL: alp_codec-0.8.2.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for alp_codec-0.8.2.tar.gz
Algorithm Hash digest
SHA256 10772a423fc42486f5e1191f7afd0a040c246833e10cddf029e4f41cd7c17c01
MD5 02da4630d18df39d8fc31a1822861c64
BLAKE2b-256 6d304f9d197cffabbe95ac42e24b5fb9979a0b0b8fff94c5cbf47052f7c7b982

See more details on using hashes here.

Provenance

The following attestation bundles were made for alp_codec-0.8.2.tar.gz:

Publisher: release.yml on QTSurfer/alp-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file alp_codec-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: alp_codec-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 11.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for alp_codec-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8588d7f741e8c44c0f94948ac0fc5ab9048aa90105c1ef995991928dfc80218c
MD5 12b0ef904392c77ee2607e871f646121
BLAKE2b-256 f4f3f71df58ff87310e4b61932b92e5e1bed25d2e3f4db09621cd71b037a1ce1

See more details on using hashes here.

Provenance

The following attestation bundles were made for alp_codec-0.8.2-py3-none-any.whl:

Publisher: release.yml on QTSurfer/alp-py

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page