xmhuffman
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 asCharacterSetUsedand must be reinserted to recover the original 2-byte character stream. Passcharset_mode='single', charset_byte=CharacterSetUsedtodecode_page/decode_with_tableto have the extension perform that reinsertion. WhenCharacterSetUsed == 0you can skip the kwargs and feed the rawbytesoutput straight tob.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.
Parallel scaling
decode_page and decode_with_table are designed to run inside a
concurrent.futures.ThreadPoolExecutor with no special setup. The
entire per-page work — bit-stream walk plus charset reinsertion when
requested — happens inside a single with nogil: block. Python
objects (the list[bytes] result) are constructed only after the
kernel returns, in one tight pass under the GIL.
The practical effect on a 2,703-page workload (meta.pbix, 7.1M
strings) on an 8-core M-class machine:
| Workers | Wall clock | Speedup vs. n=1 |
|---|---|---|
| 1 | 10.85 s | 1.00× |
| 2 | 6.19 s | 1.75× |
| 4 | 3.92 s | 2.77× |
| 8 | 2.60 s | 4.17× |
Scaling is monotonic up to physical-core count; the function does not fight the GIL on per-string allocation.
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 betweenlatin-1and paired UTF-16-LE based on the page's character-set identifier. Thecharset_mode='single', charset_byte=cboption performs the spec-definedCharacterSetUsedreinsertion as a byte interleave (stillbytesout) so the caller canb.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.
Metadata
Release files for xmhuffman 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xmhuffman-0.3.1.tar.gz | 189.4 kB | Details |
Built distributions (wheels)
Total release size: 8.5 MB
Release files / xmhuffman-0.3.1.tar.gz
| Download URL | xmhuffman-0.3.1.tar.gz |
|---|---|
| Size | 189.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a9fa1e769c842499be6849373769b7ab157bd2e36b951f6eb86d15bb616f1d93
|
|
BLAKE2b-256 checksum How to use checksums |
252f3aeecc7a9934decc13db0bcc66dc719c04bfa333b9d53b3482bb7b1a6318
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp314-cp314-win_amd64.whl
| Download URL | xmhuffman-0.3.1-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 82.2 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
01bba37927f9033aa6e76ba19d98f43c776b33da08c4dcaec7267ee2f7cbdded
|
|
BLAKE2b-256 checksum How to use checksums |
3c1ec0eafddd59a4f4422c665d670553f2bf7ced1861e35978a169ff424ced65
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | xmhuffman-0.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 561.4 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
a6486df345c354a40a98127ad056bb816537f4786a522ab809b987efc77c31be
|
|
BLAKE2b-256 checksum How to use checksums |
578c55dfb34905670a890828697c8ec060fe6e8948b3f05609bc53fc54f1ac11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | xmhuffman-0.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 555.7 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
52b7d95c2944e323d11d8b4eb27ad2a1224e8d54a0ffbd9c608d9b8ccdc0798b
|
|
BLAKE2b-256 checksum How to use checksums |
02cf87325583befb0b65cc2f5c69c8c2b862daec68c678438c2dd4872f61dc6b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp314-cp314-macosx_11_0_universal2.whl
| Download URL | xmhuffman-0.3.1-cp314-cp314-macosx_11_0_universal2.whl |
|---|---|
| Size | 184.0 kB |
| Tags | CPython 3.14 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
1aa9582189f9fdd3811d650b60bc6db21301d9af0f19d728cac29c98239fc146
|
|
BLAKE2b-256 checksum How to use checksums |
52e6691502136c8f7ffbe7e384d94c8fecd801c0a8bb318286fa1f8e12f9679f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp313-cp313-win_amd64.whl
| Download URL | xmhuffman-0.3.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 80.2 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0703e036a7bd718f40209a01e4dd41b7d7e89db0c6b4c6810b91a70e973ba774
|
|
BLAKE2b-256 checksum How to use checksums |
741788fc5292d8fcf73e505ea7f23e75336f3cc849b7cb6229872053a10c5993
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | xmhuffman-0.3.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 573.9 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1e3cb0464530fb2b2ca330a1da81e8dcd5e585f525fdddd856b7f2136a54a124
|
|
BLAKE2b-256 checksum How to use checksums |
d323c9009556643d8002bc01fc282f521b42b8bf8d8740635f608d349b019ae4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | xmhuffman-0.3.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 558.5 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
82dee49ba3c61a100ef627106bb795164eadc2aed9e8ef2c7115518c801760c0
|
|
BLAKE2b-256 checksum How to use checksums |
64d75a8d33753f1397c56cf86651b6b9186dbf7556db5ec83d0dd2dd25938eae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp313-cp313-macosx_11_0_universal2.whl
| Download URL | xmhuffman-0.3.1-cp313-cp313-macosx_11_0_universal2.whl |
|---|---|
| Size | 182.8 kB |
| Tags | CPython 3.13 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
450d595a9ef1a4a4a07283d94d7f565349a2b326ae9c0d21fb87fe730b80e458
|
|
BLAKE2b-256 checksum How to use checksums |
7a8327e74cc28717b7b743dc4aacf8e6506fc95142d56aefbaf9ee7be707220b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp312-cp312-win_amd64.whl
| Download URL | xmhuffman-0.3.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 80.6 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2409b7b7dbbd5a43f8aba0b069ce9da71c18dea7d23affa6d640a6979dec99dd
|
|
BLAKE2b-256 checksum How to use checksums |
1369ec5724a55fed28d9533294cd4243ab6ef62b066a85016f79b833af0318c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | xmhuffman-0.3.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 579.1 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
489528d71cfe8cfc365f9223f9d9b845296af21c4fdd7487a91311fa5ad3bce6
|
|
BLAKE2b-256 checksum How to use checksums |
0ff1c9fde77eea899079f8f18ce3fe91b2539b4c50837cdcbfd56848d5a90f01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | xmhuffman-0.3.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 564.6 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
747f4212598a2da61f27dc6f0c7bc6d7542d4c12bb76eb79f905f812b0de357c
|
|
BLAKE2b-256 checksum How to use checksums |
520ec08f102befed31ccff56897a0631dfbcaf4f038962d4669356d2738ccc6e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp312-cp312-macosx_11_0_universal2.whl
| Download URL | xmhuffman-0.3.1-cp312-cp312-macosx_11_0_universal2.whl |
|---|---|
| Size | 183.6 kB |
| Tags | CPython 3.12 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
646cd191f53763e2b3158afb4ba7c93b36361bd432ef34a8c0afb00790b98f5f
|
|
BLAKE2b-256 checksum How to use checksums |
447c531354ed45e45f65f8f2743e0090dba2d2d56bc311c5a524e82d966797ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp311-cp311-win_amd64.whl
| Download URL | xmhuffman-0.3.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 79.0 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
86edb6c3b4e5c0e0cb0515d92c99e43b5542bc613ad67da559c4aa1a6f839a07
|
|
BLAKE2b-256 checksum How to use checksums |
5009e58a9ba134b81241a3f827493e7d519bc4be4c38c818afe1d38e3311aaa6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | xmhuffman-0.3.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 575.6 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7d758d33e4c3893e81a60b352792f235a492101b813b542bf8cbe22b8a2a4f28
|
|
BLAKE2b-256 checksum How to use checksums |
266f353b67364c678ce8747a8ff245ce89eff07bd2e05b34f7064bf36625a9a7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | xmhuffman-0.3.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 574.3 kB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
1b7ca67e43bdcc299bcc7e461b1108824546fa8316e29d136327a0a3fbdae02d
|
|
BLAKE2b-256 checksum How to use checksums |
be6645ae658d7fe744ccf736043ae487c3df27b95cf23fcecd40099dbb814c6a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp311-cp311-macosx_11_0_universal2.whl
| Download URL | xmhuffman-0.3.1-cp311-cp311-macosx_11_0_universal2.whl |
|---|---|
| Size | 182.8 kB |
| Tags | CPython 3.11 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
9173ae197184b99f842359799dd66af586eb4744a19a1c82b2667ce983d4ca7c
|
|
BLAKE2b-256 checksum How to use checksums |
3fcfdf7089deb7617ad72e17da4cb4fa91a063dfe325ee11fc4d4c092f4b92e3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp310-cp310-win_amd64.whl
| Download URL | xmhuffman-0.3.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 79.2 kB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
46aa7a1c0bce725f052793cc3c92cd153cec3df10bfa9e78dd688ba074744136
|
|
BLAKE2b-256 checksum How to use checksums |
f84110133bda3cf87907994e128d5ee7cdf613c3461dee4460b4426e4cc3be3d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | xmhuffman-0.3.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 550.0 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1017659d93f10274ba01d17b4fee5ee615fae7b98beaed58018dfa0ed1ec7b1f
|
|
BLAKE2b-256 checksum How to use checksums |
bae784027318380a964758936af04238e0c261f22fac4566243d61a447304732
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | xmhuffman-0.3.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 548.9 kB |
| Tags | CPython 3.10 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
94bcb789f739da70c277a9788fc78a194b1f1211de696135bca674f2f4671dbe
|
|
BLAKE2b-256 checksum How to use checksums |
c3ea279779157528e95f3e99edb93ce8c20d70e18dbed5196a3162df5b3c18b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp310-cp310-macosx_11_0_universal2.whl
| Download URL | xmhuffman-0.3.1-cp310-cp310-macosx_11_0_universal2.whl |
|---|---|
| Size | 183.7 kB |
| Tags | CPython 3.10 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
fe092ec9de16d34b1aa7525b95b672c838b5defbb4bc2f98ca3447b1d4eec7d2
|
|
BLAKE2b-256 checksum How to use checksums |
05dfc72571d7dee47ce148bbe8d976e781e3057a52691948ceaf0def9848af10
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp39-cp39-win_amd64.whl
| Download URL | xmhuffman-0.3.1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 79.4 kB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4b69e684a16d2932e9d0438e9d028daefccc728c4a4a88cac9b0705f1b89bb88
|
|
BLAKE2b-256 checksum How to use checksums |
6c78726b8f5541e7f787069fa5006a53811c60829fd9d6f4f413410dfa309722
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
| Download URL | xmhuffman-0.3.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 548.6 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
eb241e6ffeb98d7980b31875b03b2e0a713d4756ba8cb3ac38c5a6c1c58d4b62
|
|
BLAKE2b-256 checksum How to use checksums |
adc98b79ff0468d44c927ec1a3641aaa90428023c2e3625762001ac845df04ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
| Download URL | xmhuffman-0.3.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 546.9 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
8fd4529cb4c88379c2208d733304ab8eae2114c0969e535a2bfae5a252257cf9
|
|
BLAKE2b-256 checksum How to use checksums |
c788a2da8d42cc81d4c160dfb4611430c95ff065342cc0a763d21169e7ab3d21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency logRelease files / xmhuffman-0.3.1-cp39-cp39-macosx_11_0_universal2.whl
| Download URL | xmhuffman-0.3.1-cp39-cp39-macosx_11_0_universal2.whl |
|---|---|
| Size | 184.5 kB |
| Tags | CPython 3.9 macOS 11.0+ universal2 (ARM64, x86-64) |
|
SHA-256 checksum How to use checksums |
b0d7ca25cf62074edc8f129e58720f5de2de501bd806ee7d35125d590438cb61
|
|
BLAKE2b-256 checksum How to use checksums |
e939516d1bc78bda2d0b67cc3a28e7f38a8e2d3b42d5dfd9d69887e231185965
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 14, 2026.
Transparency log