Skip to main content

Cython bindings for Microsoft xVelocity/Vertipaq canonical-Huffman string decoding

Project description

xmhuffman

PyPI version License: MIT

A small, fast Cython extension that decodes the canonical-Huffman string dictionary pages used by xVelocity / Vertipaq column stores — the storage format inside Power BI .pbix files (the DataModel part) and Excel Power Pivot workbooks (xl/model/item.data).

Provides a tight C kernel for what would otherwise be a per-symbol Python loop. On real .pbix files this is 30–50× faster than an equivalent pure-Python implementation and removes a hot path that dominates table extraction time in tools like pbixray.

Installation

pip install xmhuffman

Building from source requires a C compiler and Cython ≥ 3.0:

git clone https://github.com/Hugoberry/xmhuffman-cython
cd xmhuffman-cython
pip install -e .

Usage

The library exposes a tiny surface — one entry point for the common case plus a few lower-level helpers.

Decode a dictionary page

import xmhuffman

# All inputs come straight from the Vertipaq dictionary page metadata:
#   bitstream  — compressed_string_buffer (bytes)
#   encode_array_128 — 128-byte nibble-packed code-length array
#   offsets    — per-string start bit offsets (sequence of u32)
#   total_bits — store_total_bits (end of last string)
strings: list[bytes] = xmhuffman.decode_page(
    bitstream,
    encode_array_128,
    offsets,
    total_bits,
    swap=True,            # apply the byte-pair swap inside the extension
)

Output is list[bytes]. Charset interpretation is the caller's choice (see Character-set modes below): Vertipaq pages declare themselves as either single character set or multiple character set, and the caller decodes the returned bytes accordingly.

Single-charset pages with non-zero CharacterSetUsed

When a single-charset page carries a non-zero CharacterSetUsed byte, the spec requires reinserting that byte as the UTF-16-LE high byte of every decoded character before the byte stream is meaningful as text. xmhuffman can perform that interleave inside the extension:

# charset_mode='single' + charset_byte != 0 returns interleaved bytes,
# each output element being 2 * decoded_length bytes long, ready for
# direct `bytes.decode('utf-16-le')` by the caller.
strings = xmhuffman.decode_page(
    bitstream, encode_array_128, offsets, total_bits,
    swap=True,
    charset_mode='single',
    charset_byte=character_set_used,
)
text = [b.decode('utf-16-le') for b in strings]

For pages with CharacterSetUsed == 0, the default decode_page(...) call is sufficient — b.decode('latin-1') on its output is byte-for-byte equivalent to the interleave path and several times faster, so callers should branch on CharacterSetUsed:

if character_set_used == 0:
    strings = xmhuffman.decode_page(bitstream, encode_array_128,
                                    offsets, total_bits)
    text = [b.decode('latin-1') for b in strings]
else:
    strings = xmhuffman.decode_page(bitstream, encode_array_128,
                                    offsets, total_bits,
                                    charset_mode='single',
                                    charset_byte=character_set_used)
    text = [b.decode('utf-16-le') for b in strings]

For multiple character set pages the raw decoded byte stream is already UTF-16-LE; b[:len(b) & ~1].decode('utf-16-le') is the canonical caller-side path.

Lower-level building blocks

For callers that want to amortize table construction across pages, or just to unit-test pieces:

# Expand the 128-byte nibble-packed array to 256 plain bytes of lengths.
lengths = xmhuffman.decompress_encode_array(encode_array_128)

# Pair-swap a buffer (bytes 2k and 2k+1 swap; trailing odd byte left as-is).
swapped = xmhuffman.swap_bytes(raw)

# Build the flat decode table once, reuse it across decode calls.
table_bytes, max_len = xmhuffman.build_table(encode_array_128)
strings = xmhuffman.decode_with_table(
    bitstream, table_bytes, max_len, offsets, total_bits, swap=True,
)

Format notes

The on-disk format is documented publicly in Microsoft's open specification [MS-XLDM] §2.7.4 — Huffman Compression. Each dictionary page is, schematically:

Field Description
encode_array 128 bytes, two 4-bit code lengths per byte (low nibble = symbol 2i, high = 2i+1). Value 0 means "symbol unused". Per [MS-XLDM] codeword lengths are between 2 and 15 bits.
uiDecodeBits Width of the on-disk primary lookup table (≤ 12). This decoder uses a single flat 2^max_len table instead and ignores uiDecodeBits.
compressed_string_buffer The bitstream itself, with adjacent bytes pair-swapped on disk. No padding between strings.
store_total_bits Total logical bit length; end sentinel for the last string.
vector_of_record_handle_structures Per-record (bit_offset, page_id); sorted offsets per page give the per-string start boundaries.

Codes are classical Huffman, encoded canonically by sorting (length, symbol) ascending and incrementing the code with a left-shift on length changes — exactly the reconstruction described in [MS-XLDM] §2.7.4.1.5.

Character-set modes

[MS-XLDM] §2.7.4.1.4 distinguishes two modes per page:

  • Single character set (character_set_type_identifier = 0x000aba91) — only the low byte of each character is Huffman-encoded; the upper (charset) byte is stored once on the page as CharacterSetUsed and must be reinserted to recover the original 2-byte character stream. Pass charset_mode='single', charset_byte=CharacterSetUsed to decode_page / decode_with_table to have the extension perform that reinsertion. When CharacterSetUsed == 0 you can skip the kwargs and feed the raw bytes output straight to b.decode('latin-1') for the same result at lower cost.
  • Multiple character sets (0x000aba92) — both bytes are encoded; the output byte stream is consumed directly as UTF-16LE.

Reinsertion order is the one the reference encoder/decoder uses: each emitted byte becomes the UTF-16-LE low byte and CharacterSetUsed becomes the high byte, so output element k is exactly bytes([symbol, CharacterSetUsed]) * nwritten.

Performance

Apples-to-apples against an equivalent pure-Python decoder on a few real .pbix files:

File Strings Python ref xmhuffman Speedup
Adventure Works DW 2020 191,489 449 ms 10.0 ms 45×
Sales & Marketing sample 103,290 160 ms 5.3 ms 30×
Retail Analysis sample 9 144 ms 2.9 ms 50×

The kernel does one unaligned 64-bit big-endian load, one shift, one mask, one table lookup and one byte store per output symbol. The decode table is a flat 2^max_len array of uint16_t (≤ 64 KB; usually 1–8 KB) that fits comfortably in L1/L2.

The GIL is released around the inner work, so callers can decode multiple pages or columns from worker threads without contention.

Project layout

xmhuffman-cython/
├── xmhuffman.pyx         # Cython surface
├── xmhuffman.pxd         # C declarations
├── src/xmhuffman_kernel.c    # C kernel
├── include/xmhuffman_kernel.h
├── tests/                # correctness tests
└── bench/                # micro-benchmark

Testing

pip install -e .
pip install pytest
pytest tests/ -v

The basic test suite checks each helper against a pure-Python reference implementation. An additional integration test (tests/test_pbix.py) decodes pages out of real .pbix files and asserts byte-identity with the reference; it is skipped automatically when fixtures aren't available.

Scope and non-goals

  • Not a general-purpose Huffman library. Alphabets are fixed at 256 symbols, codeword lengths are capped at 15 bits, and the bitstream convention is the one used by Vertipaq pages.
  • Not an encoder. Round-tripping pages is out of scope.
  • No Python-string outputs. The decoder returns raw bytes; the caller picks between latin-1 and paired UTF-16-LE based on the page's character-set identifier. The charset_mode='single', charset_byte=cb option performs the spec-defined CharacterSetUsed reinsertion as a byte interleave (still bytes out) so the caller can b.decode('utf-16-le') it directly.

License

MIT. See LICENSE.

Acknowledgements

This package is the third in a family of thin Cython wrappers around Microsoft column-store / compression formats, alongside xpress8-python and xpress9-python.

The format itself is documented publicly in Microsoft's open specification [MS-XLDM] — Spreadsheet Data Model File Format, which the implementation here follows. The Python reference and end-to-end test fixtures come from the pbixray project.

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

xmhuffman-0.2.0.tar.gz (178.4 kB view details)

Uploaded Source

Built Distributions

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

xmhuffman-0.2.0-cp313-cp313-win_amd64.whl (78.8 kB view details)

Uploaded CPython 3.13Windows x86-64

xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (498.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (492.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

xmhuffman-0.2.0-cp313-cp313-macosx_11_0_universal2.whl (171.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ universal2 (ARM64, x86-64)

xmhuffman-0.2.0-cp312-cp312-win_amd64.whl (79.0 kB view details)

Uploaded CPython 3.12Windows x86-64

xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (503.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (495.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

xmhuffman-0.2.0-cp312-cp312-macosx_11_0_universal2.whl (172.8 kB view details)

Uploaded CPython 3.12macOS 11.0+ universal2 (ARM64, x86-64)

xmhuffman-0.2.0-cp311-cp311-win_amd64.whl (77.6 kB view details)

Uploaded CPython 3.11Windows x86-64

xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (513.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (511.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

xmhuffman-0.2.0-cp311-cp311-macosx_11_0_universal2.whl (170.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ universal2 (ARM64, x86-64)

xmhuffman-0.2.0-cp310-cp310-win_amd64.whl (77.4 kB view details)

Uploaded CPython 3.10Windows x86-64

xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (482.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (481.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

xmhuffman-0.2.0-cp310-cp310-macosx_11_0_universal2.whl (171.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ universal2 (ARM64, x86-64)

xmhuffman-0.2.0-cp39-cp39-win_amd64.whl (77.7 kB view details)

Uploaded CPython 3.9Windows x86-64

xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (480.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (479.9 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

xmhuffman-0.2.0-cp39-cp39-macosx_11_0_universal2.whl (171.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ universal2 (ARM64, x86-64)

File details

Details for the file xmhuffman-0.2.0.tar.gz.

File metadata

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

File hashes

Hashes for xmhuffman-0.2.0.tar.gz
Algorithm Hash digest
SHA256 522bbfdf67579459df1cebc83c4074218df358e17777cefbbbf20d8fd0243f5c
MD5 814b8199f61a73656212efc19967bb17
BLAKE2b-256 47791f720091bb6ae3aefe5cafbf1f87afa3ca34efdc015061985c755721c6a6

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0.tar.gz:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: xmhuffman-0.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 78.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xmhuffman-0.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 2be960ff592f50f15d46169e06e46bcbc54adccc85e9649213a3dbc44202bb8f
MD5 2b77bea7841ae842565e2be73d199691
BLAKE2b-256 b6ef22b17bc255ef22dfe1e605b687ac56c17261790d27e6a9b84fd7125496f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp313-cp313-win_amd64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 04d06eb4a9b166be5825dc87b02c128f998e76d285580316505251f99b964edc
MD5 f6273a6b27bc6dabe244b3ae2796400c
BLAKE2b-256 21e0020753754479142f87f91b00b6deaaaffe697c77492f6da1acc3ed9a557f

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8f8f64106ff2856f324caadd8e899aeb7afe794f599861aab9a733db93d7ce2b
MD5 721d8da722220d0e66a72eb704aa5512
BLAKE2b-256 7e6559844045957b43e77189207467da40b402f05281b04905990c76c25fe881

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp313-cp313-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp313-cp313-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 935ef4206af3354e976e561a77db800668fd40e1dc1cb04d95d128d7146c5301
MD5 46822c75afab394364d3fa92751a7f1a
BLAKE2b-256 90bb5e7e684f8521218a7055c23074a572a8f88a5070e97c2a1871edc657d4eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp313-cp313-macosx_11_0_universal2.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: xmhuffman-0.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 79.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xmhuffman-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ea30547cb3f6e442695e24f50fa0c779358aa5b40858ec1ab7c3838f96a4c75a
MD5 2629d20038adef85c82bdbea42e24022
BLAKE2b-256 ca3b27f52b56e53bf3c29ca9767ef226bc264e383862c764d6e4f6a41fcf2ab5

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp312-cp312-win_amd64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 526f45cc4e5e4255de0fe32db32a44476a442860e5d0cb8a6dfda8ed0762bb01
MD5 8249421969ae3d2a4c85b834eee476f2
BLAKE2b-256 37012a39ec786550014d71b701dfc396e96b74fe5f24b6f20e570c86865d0fa5

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b68ab4b89eaa4ee6b3d4c3f4e6e5297ad6f519221c37319ddb68681187cae7a5
MD5 bc6394733e0d0581a70ae1d669f55d25
BLAKE2b-256 2f6c192848de1ba8649e166cd77e79861bd8cb7f9bab00289e68037753d0bb79

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp312-cp312-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp312-cp312-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 d71894f7a38ad2c1e23c349b5048d03f1ec17a7468e879263393f104488a3dd6
MD5 b49a95d045896bfa0b2c5822d1d3a804
BLAKE2b-256 a5368ff4cda5cd0855a630da2c58c3865cc9faf90947b95f8ee22aa350cd6a15

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp312-cp312-macosx_11_0_universal2.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: xmhuffman-0.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 77.6 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xmhuffman-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0ae7174858fdcf63c045d5c11db219dce33a42aad4c6802f854b45dab8a1ad55
MD5 c66a9620322d13c7a1e4fec555c45932
BLAKE2b-256 0f15a547760624a3d9c9beaeaf91824a28c0d88f401a59008b1e8ea030933d4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp311-cp311-win_amd64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bdc4415a66cb62bc7b1aee4bc832695ba26c6953c5c14c12a14df0829ee1ca49
MD5 4982e332e78d695529da59fa788853d3
BLAKE2b-256 752e33ffe93c35bf5e4783ab563ffbe365dd1d97b81b8ba759911bd9fdf5e5a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9fc8183c7f6c0d47cd7aed5c755051c4a3660ca4eab6f6c1723fab2c618b46e3
MD5 c5acc11f43d55a665f5c111baa7e7a5d
BLAKE2b-256 9e1e40ba8e65fbaf125d2c9cddfe63abda8e80771dddac312bae481e747d0606

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp311-cp311-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp311-cp311-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 572014dad1de3ecbe912764213aa7c010ccc22b57d1f8510d3d41301c62f7e7a
MD5 60c225cbd2ff3f89dea71be476a5e4cb
BLAKE2b-256 d439b84bd97161334c24c2afce78bd25f98ea6b13160086acc5f221e7e241740

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp311-cp311-macosx_11_0_universal2.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: xmhuffman-0.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 77.4 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xmhuffman-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 113c76eee58a522c3370c55fd792ed03b1acaa2a80db20f7bc671a0ca8d84a79
MD5 9a60287debc3161021ee53838f903019
BLAKE2b-256 d9eb787d483f516604643f2b16386a8722485512d8179b386e6eb1001085ba74

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp310-cp310-win_amd64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fbdf8ed0d8e19879045a71bdf844d454a32b4d5416dd5da324239653a76816ef
MD5 c75f2270733ed2ac2163dde0a630acab
BLAKE2b-256 9e7679699cb2be3a73189a45f472b2bde188df64888e22613c6ae7e69825fbe0

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 05028658bf5c14f06d6c400ea1be84614edb3b1cfcd749d15ad6f30ff4f9e839
MD5 3ba5d409fdac2f4ee7c87086b8b398ed
BLAKE2b-256 bb668112f8deaa16dcb7899b405fd7e56e61283909eb53b3aae420e8870b524c

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp310-cp310-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp310-cp310-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 1d06d927986621a217ac2798a0ecd834f60f6d03013d8fc6e0d3a978b41e764b
MD5 a48b691b2af5dbaffe1c210ade43924c
BLAKE2b-256 660e92341ff22969b0d68075902b97b7d964475addb3b5fc3f117c0805c1c157

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp310-cp310-macosx_11_0_universal2.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: xmhuffman-0.2.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 77.7 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for xmhuffman-0.2.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6ab61a45e40cd597f5faf3c147bd48acacb512c0ec0e0052748b6705c2600a8b
MD5 4ae649fb3e1b8d1ea0710df73c366b8a
BLAKE2b-256 3feb7207c55390ee411bc0c9f88198c8106e15616312455506d8a8c4defabe74

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp39-cp39-win_amd64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 253dd597263f5b3bc4e7f9dab5cc6b2433a8764172874f605b39e73f9f630090
MD5 d7a2e4aeef0f0ca8fc67e898961cb007
BLAKE2b-256 71d883da3e01a1ae957cf4263ee6aa2cf129fb28067b88f62e067f5ea36939b5

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 eeb28755914adf385ea9597279f04bb97729db35c473da570617fae1d6b883be
MD5 252fbc1348f31e56adaf64091744ca01
BLAKE2b-256 2ba42b088b0adcd2e610d0388e3bb43fd6cfdf4a37fcd77403cc30940f3a820e

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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

File details

Details for the file xmhuffman-0.2.0-cp39-cp39-macosx_11_0_universal2.whl.

File metadata

File hashes

Hashes for xmhuffman-0.2.0-cp39-cp39-macosx_11_0_universal2.whl
Algorithm Hash digest
SHA256 973897d6ccf91c98e946009e5224a6cec20a42561d76630fc51da1abe34d596c
MD5 334d4de6666cfcffbd34c35b348e98c6
BLAKE2b-256 1217378bbe75e0a2220a61b555b773295a33c609fa3485e57b366f9124f31393

See more details on using hashes here.

Provenance

The following attestation bundles were made for xmhuffman-0.2.0-cp39-cp39-macosx_11_0_universal2.whl:

Publisher: build.yml on Hugoberry/xmhuffman-cython

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