Implementation Status
Which spec features each Hurray implementation actually provides. Rows are format features, taken from Compliance; columns are implementations.
| Implementation | Covers |
|---|---|
hurray-core + hurray-io | Rust reference implementation |
hurray-python | Python bindings (PyO3) |
hurray-ffi | C ABI surface |
This page is generated, never hand-written. Tag coverage is read back out of the decoders one byte at a time, each capability is proven by an encode → decode round-trip, the Python column is introspected from the compiled module, and the C column is the set of symbols the generated header exports. CI regenerates the page and fails if it differs from the committed copy, so a feature an implementation gains — or loses — cannot pass unreported.
What no probe can detect carries a declared status and a justification, listed under the table it appears in.
Legend
- ✅ Implemented
- ◐ Partly implemented — see the note
- ❌ Not implemented
- ➖ Not this layer's to implement — see the note
- 📄 Specified, implemented nowhere — see the note
Adding a third-party implementation is a column, not a redesign: append an [[implementations]] block to website/coverage-matrix.toml with default = "no", then override that per section or per row as the implementation covers more. No row changes shape.
Conformance Levels
The three levels defined in Compliance. Level 2 implies Level 1, and Level 3 implies Level 2.
| Feature | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|
| Level 1 — Reader | ✅ | ✅ | ◐ (a) |
| Level 2 — Writer | ✅ | ✅ | ❌ |
| Level 3 — Network transport | 📄 (b) | 📄 (b) | 📄 (b) |
- (a)
hurray_descriptor_decodeparses and validates a descriptor throughhurray-core, so the reading itself is complete, but the C surface exposes only the type tag, layout tag, rank, shape, byte offset, and buffer table. Layout-specific payload fields — CSRnnz, tile shape, the block table — have no accessor, so a C caller cannot yet interpret every Tier 1 layout it can decode. - (b) No crate implements any part of the Level 3 transport: none of the message types, capability flags, or the RDMA data plane appear anywhere in
hurray-core,hurray-io,hurray-ffi,hurray-python, orhurray-inspect.hurray-ioimplements the stream framing and the file container — Levels 1 and 2 — and stops there. The protocol is specified so that an implementation has something to build against; scheduling one is tracked separately.
Element Types
Tier 1 types are mandatory for every conforming implementation; Tier 2 types are optional.
Extension types (0xF0–0xFE) are listed under Optional Descriptor
Sections, since the type tag and its describing section
are one feature on the wire.
| Feature | Tag | Tier | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|---|---|
float16 | 0x01 | 1 | ✅ | ✅ | ➖ |
bfloat16 | 0x02 | 1 | ✅ | ✅ | ➖ |
float32 | 0x03 | 1 | ✅ | ✅ | ➖ |
float64 | 0x04 | 1 | ✅ | ✅ | ➖ |
int8 | 0x10 | 1 | ✅ | ✅ | ➖ |
uint8 | 0x11 | 1 | ✅ | ✅ | ➖ |
int16 | 0x12 | 1 | ✅ | ✅ | ➖ |
uint16 | 0x13 | 1 | ✅ | ✅ | ➖ |
int32 | 0x14 | 1 | ✅ | ✅ | ➖ |
uint32 | 0x15 | 1 | ✅ | ✅ | ➖ |
int64 | 0x16 | 1 | ✅ | ✅ | ➖ |
uint64 | 0x17 | 1 | ✅ | ✅ | ➖ |
bool | 0x20 | 1 | ✅ | ✅ | ➖ |
float8_e4m3 | 0x40 | 2 | ✅ | ✅ | ➖ |
float8_e5m2 | 0x41 | 2 | ✅ | ✅ | ➖ |
float8_e8m0 | 0x42 | 2 | ✅ | ✅ | ➖ |
float4_e2m1 | 0x43 | 2 | ✅ | ✅ | ➖ |
float6_e2m3 | 0x44 | 2 | ✅ | ✅ | ➖ |
float6_e3m2 | 0x45 | 2 | ✅ | ✅ | ➖ |
float128 | 0x46 | 2 | ✅ | ✅ | ➖ |
int4 | 0x48 | 2 | ✅ | ✅ | ➖ |
uint4 | 0x49 | 2 | ✅ | ✅ | ➖ |
int2 | 0x4A | 2 | ✅ | ✅ | ➖ |
uint2 | 0x4B | 2 | ✅ | ✅ | ➖ |
complex64 | 0x50 | 2 | ✅ | ✅ | ➖ |
complex128 | 0x51 | 2 | ✅ | ✅ | ➖ |
hurray-ffi— The C ABI reports the raw tag byte (hurray_descriptor_element_type_tag,hurray_descriptor_layout_tag) and never interprets it. There is no per-tag support to report at this layer: a C caller decides for itself which tags it can handle, and gains a new one without any change tohurray-ffi.
Memory Layouts
Tier 1 layouts (0x01–0x0B) are mandatory for reading; Hilbert (0x40) is Tier 2.
| Feature | Tag | Tier | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|---|---|
| Row-major | 0x01 | 1 | ✅ | ✅ | ➖ |
| Column-major | 0x02 | 1 | ✅ | ✅ | ➖ |
| Strided | 0x03 | 1 | ✅ | ✅ | ➖ |
| Tiled / blocked | 0x04 | 1 | ✅ | ✅ | ➖ |
| Morton (Z-order) | 0x05 | 1 | ✅ | ✅ | ➖ |
| COO | 0x06 | 1 | ✅ | ✅ | ➖ |
| CSR | 0x07 | 1 | ✅ | ✅ | ➖ |
| CSC | 0x08 | 1 | ✅ | ✅ | ➖ |
| CSF | 0x09 | 1 | ✅ | ✅ | ➖ |
| Block-paged | 0x0A | 1 | ✅ | ✅ | ➖ |
| Composite / virtual | 0x0B | 1 | ✅ | ✅ | ➖ |
| Hilbert curve | 0x40 | 2 | ✅ | ✅ | ➖ |
hurray-ffi— The C ABI reports the raw tag byte (hurray_descriptor_element_type_tag,hurray_descriptor_layout_tag) and never interprets it. There is no per-tag support to report at this layer: a C caller decides for itself which tags it can handle, and gains a new one without any change tohurray-ffi.
Quantization Schemes
Carried in the optional quantization section. Support means encoding and decoding the scheme descriptor; performing the dequantization arithmetic is a compute concern and outside the format's scope.
| Feature | Tag | Tier | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|---|---|
| Per-tensor affine | 0x01 | 1 | ✅ | ✅ | ➖ |
| Per-channel affine | 0x02 | 1 | ✅ | ✅ | ➖ |
| Per-block affine | 0x03 | 1 | ✅ | ✅ | ➖ |
| NF4 (NormalFloat4) | 0x04 | 2 | ✅ | ✅ | ➖ |
| MXFP (OCP Microscaling) | 0x05 | 2 | ✅ | ✅ | ➖ |
hurray-ffi— The C ABI reports the raw tag byte (hurray_descriptor_element_type_tag,hurray_descriptor_layout_tag) and never interprets it. There is no per-tag support to report at this layer: a C caller decides for itself which tags it can handle, and gains a new one without any change tohurray-ffi.
Optional Descriptor Sections
Sections a descriptor may carry beyond the fixed header, each gated by a flag bit. A
reader that does not understand one skips it using descriptor_length, so none of these
is required at any conformance level.
| Feature | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|
| Quantization | ✅ | ✅ | ❌ |
| Shard | ✅ | ✅ | ❌ |
| Statistics | ✅ | ✅ | ❌ |
Extension type (0xF0–0xFE) | ✅ | ✅ | ❌ |
| Composite member | ✅ | ✅ | ❌ |
Streaming and File Interchange
The two framings that share the descriptor encoding: the self-delimiting stream format and the HRRYFILE container.
| Feature | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|
| Stream — write | ✅ | ✅ | ❌ |
| Stream — read | ✅ | ✅ | ❌ |
| Stream — composite tensors | ✅ | ✅ | ❌ |
| File — write | ✅ | ✅ | ❌ |
| File — read | ✅ | ✅ | ❌ |
| File — KV metadata section | ✅ | ✅ | ❌ |
| File — composite tensors | ✅ | ✅ | ❌ |
Network Transport (Level 3)
The cross-machine protocol in Interchange. Specified in full, implemented nowhere — see the note below the table.
| Feature | hurray-core + hurray-io | hurray-python | hurray-ffi |
|---|---|---|---|
Session establishment (CLIENT_HELLO / SERVER_HELLO) | 📄 | 📄 | 📄 |
Tensor transfer (TENSOR_REQUEST / TENSOR_DESCRIPTOR / TENSOR_DATA / TENSOR_DATA_END) | 📄 | 📄 | 📄 |
Control messages (ERROR / PING / PONG) | 📄 | 📄 | 📄 |
Client push (TENSOR_PUT / TENSOR_PUT_ACK) | 📄 | 📄 | 📄 |
Layout negotiation (supported_layouts, ALLOW_TRANSCODE) | 📄 | 📄 | 📄 |
On-the-fly transcoding (TRANSCODING) | 📄 | 📄 | 📄 |
Parallel shard transfers (PARALLEL_STREAMS, PARALLEL_OK) | 📄 | 📄 | 📄 |
RDMA data plane (RDMA_DATA_PLANE, RDMA_REGISTER, RDMA_READY) | 📄 | 📄 | 📄 |
- Every column — No crate implements any part of the Level 3 transport: none of the message types, capability flags, or the RDMA data plane appear anywhere in
hurray-core,hurray-io,hurray-ffi,hurray-python, orhurray-inspect.hurray-ioimplements the stream framing and the file container — Levels 1 and 2 — and stops there. The protocol is specified so that an implementation has something to build against; scheduling one is tracked separately.