Skip to main content

Arrow-native Level 1 bit-pattern decoders (encodings) for fletchr, with byteforge kernels behind the built-ins.

Project description

fletchr-encodings

Arrow-native Level 1 bit-pattern decoders ("encodings") for the fletchr ecosystem.

An encoding turns the raw bits of a fletchr.uintn(bits=N) column into a number — unsigned/signed integer, IEEE 754 float, MIL-STD-1750A, BCD, and so on. This package owns the Arrow boundary (bits-from-type, validity-bitmap preservation) and a plugin system so users can add their own codecs. The built-in codecs wrap byteforge's numpy/C kernels, but byteforge is an implementation detail behind the built-ins — the public surface is entirely fletchr's own.

This is the Level 1 backend referenced by fletchr-measurand's SPEC-decode.md; Level 2 (engineering-unit scaling) lives in fletchr-measurand.

Public API

from fletchr_encodings import create_encoding, decode_array, list_encodings
from fletchr_uintn import uintn_array

raw = uintn_array([0x00, 0x7F, 0x80, 0xFF], bits=8)

# Resolve by canonical name and decode (bits read from the array type):
decode_array(raw, "2c").to_pylist()        # -> [0, 127, -128, -1]

# Or pass a resolved Encoding instance:
enc = create_encoding("2c")
decode_array(raw, enc)

Functions

Function Purpose
decode_array(arr, encoding) Decode a 1-D UIntNArray or 2-D FixedSizeListArray<UIntN>. encoding is a canonical name or an Encoding. Validates storage compatibility, reads the bit width from the type, preserves the validity bitmap.
create_encoding(name, *, bits=None) Resolve a canonical name to an Encoding. bits (optional) validates storage compatibility eagerly. Raises UnknownEncodingError on an unknown name.
list_encodings() Sorted list of registered canonical names (loads plugins first).
register_plugin_group(group) Add an entry-point group for downstream meta-packages.
load_plugins(*paths, strict=False) Explicitly import plugin modules (notebooks/tests).

Key design points

  • Bits come from the type, not a constructor arg. An Encoding is stateless with respect to width; a single instance decodes any width it supports. The width is read from the column's fletchr.uintn type at decode time.
  • Validity bitmap preserved end to end. Nulls in raw bits stay null in the decoded array.
  • One canonical name per encoding, no aliases. The name is both the registry key and the value written to fletchr.encoding field metadata, so the registry is 1:1 with the SPEC-decode table.
  • Level 1 output dtype is natural: integral encodings stay integral (u/bcd/gray/boolean → unsigned; 2c/1c/sm/ob → signed), floats decode to their natural width (ieee16 → float16, ieee32 → float32, ieee64 → float64, other floats → float64). Level 2 (in fletchr-measurand) promotes everything to float64.

Built-in encodings

Name Decodes to Required storage
u unsigned int (identity) uintn(bits=N)
sm signed int uintn(bits=N), N>=2
1c signed int uintn(bits=N), N>=2
2c signed int uintn(bits=N), N>=2
ob signed int uintn(bits=N), N>=2
ieee16 / ieee32 / ieee64 float16 / float32 / float64 uintn(bits=16/32/64)
1750a32 / 1750a48 float64 uintn(bits=32/48)
bcd unsigned int uintn(bits=N), N % 4 == 0
boolean unsigned int (0/1) uintn(bits=1)
gray unsigned int uintn(bits=N)
ibm32 / ibm64 float64 uintn(bits=32/64)
dec32 / dec64 / dec64g float64 uintn(bits=32/64)
ti32 / ti40 float64 uintn(bits=32/40)

A storage-width mismatch (e.g. ieee32 on a bits=16 column) raises EncodingError before any decode happens, per the SPEC's storage-compatibility rule.

Custom encodings (plugins)

Subclass Encoding, give it a canonical name, and implement _decode_np. Subclassing alone registers it; declaring the module in the fletchr_encodings.plugins entry-point group makes it discoverable without an explicit import. See custom-encodings.md.

from fletchr_encodings import Encoding

class CrcPacked(Encoding):
    name = "crc_packed"
    def _decode_np(self, dns, bits):
        ...   # your own numpy; keep padding bits masked

A width-constrained codec declares fixed_bits or overrides supports_bits; _decode_np must keep padding bits masked (the input is guaranteed < 2**bits).

License

MIT — 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

fletchr_encodings-0.0.1rc1.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

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

fletchr_encodings-0.0.1rc1-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file fletchr_encodings-0.0.1rc1.tar.gz.

File metadata

  • Download URL: fletchr_encodings-0.0.1rc1.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","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 fletchr_encodings-0.0.1rc1.tar.gz
Algorithm Hash digest
SHA256 75f2f4f126f58d8e2ec0af18e0f86db48c20e1e1dda54ce9eac313d04d66cd2c
MD5 6add625c230c1edd9cbcceac7accc084
BLAKE2b-256 c387b26ba545c07d0b463a22aa2d6edf5f756c94f8852b856031a727d503862a

See more details on using hashes here.

File details

Details for the file fletchr_encodings-0.0.1rc1-py3-none-any.whl.

File metadata

  • Download URL: fletchr_encodings-0.0.1rc1-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","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 fletchr_encodings-0.0.1rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 4a9d2571147f552d713ccc480707e417a413b76fb7b3dd1248a32b8d7a3d7a1f
MD5 7168ecb4c061da14a01b681f9c2fa293
BLAKE2b-256 cacdf43ed4333021f4347b2602c6bba352867546e73bc072767e1f1c49317663

See more details on using hashes here.

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