pub const FDX_MAGIC: u32 = 0x4644_5800;
pub const FDX_VERSION_1: u32 = 1;
pub const FDX_VERSION_MAX: u32 = 1;
pub const FDX_SYM_NONE: u32 = 0xFFFF_FFFF;
pub const FDX_SESSION_NONE: u32 = 0;
pub const FDX_DTYPE_NONE: u16 = 0xFFFF;
pub const FDX_BUFFER_INLINE: u32 = 0xFFFF_FFFF;
pub const FDX_BUFFER_NONE: u32 = 0xFFFF_FFFE;
pub const FDX_BLOCK_UNMAPPED: u32 = 0xFFFF_FFFF;
pub const FDX_FLAG_HAS_DTYPE_EXT: u32 = 1 << 0;
pub const FDX_FLAG_HAS_QUANT: u32 = 1 << 1;
pub const FDX_FLAG_HAS_SYMBOLIC: u32 = 1 << 2;
pub const FDX_FLAG_HAS_TILING: u32 = 1 << 3;
pub const FDX_FLAG_IS_BUNDLE: u32 = 1 << 4;
pub const FDX_FLAG_MEANING_REQUIRES_EXT: u32 = 1 << 5;
pub const FDX_FLAG_READ_ONLY: u32 = 1 << 6;
pub const FDX_FLAG_HAS_GATHER: u32 = 1 << 7;
pub const FDX_FLAG_HAS_AFFINE_EXTENT: u32 = 1 << 8;
pub const FDX_FLAG_ALL: [u32; 9] = [
FDX_FLAG_HAS_DTYPE_EXT,
FDX_FLAG_HAS_QUANT,
FDX_FLAG_HAS_SYMBOLIC,
FDX_FLAG_HAS_TILING,
FDX_FLAG_IS_BUNDLE,
FDX_FLAG_MEANING_REQUIRES_EXT,
FDX_FLAG_READ_ONLY,
FDX_FLAG_HAS_GATHER,
FDX_FLAG_HAS_AFFINE_EXTENT,
];
pub const FDX_FLAG_MEANING_BEARING: &[u32] = &[
FDX_FLAG_HAS_DTYPE_EXT,
FDX_FLAG_HAS_QUANT,
FDX_FLAG_HAS_GATHER,
];
pub const FDX_EXTENT_SCALAR: u16 = 0;
pub const FDX_EXTENT_RANGE: u16 = 1;
pub const FDX_EXTENT_AFFINE: u16 = 2;
pub const FDX_AFFINE_MAX_TERMS: usize = 4;
pub const FDX_CAP_KIND_EXPLICIT: u16 = 0;
pub const FDX_CAP_KIND_AFFINE_MAX: u16 = 1;
pub const FDX_GATHER_NONE: u16 = 0;
pub const FDX_GATHER_PAGED_BLOCKS: u16 = 1;
pub const FDX_QUANT_NONE: u16 = 0xFFFF;
pub const FDX_QUANT_GGML_BLOCK: u16 = 0;
pub const FDX_QUANT_MX: u16 = 1;
pub const FDX_QUANT_AFFINE_INT: u16 = 2;
pub const FDX_QUANT_AFFINE_FLOAT: u16 = 3;
pub const FDX_QUANT_AFFINE_BLOCK: u16 = 4;
pub const FDX_SCALE_GRAN_PER_TENSOR: u8 = 0;
pub const FDX_SCALE_GRAN_PER_TOKEN: u8 = 1;
pub const FDX_SCALE_GRAN_PER_CHANNEL: u8 = 2;
pub const FDX_SCALE_GRAN_PER_BLOCK: u8 = 3;
pub const FDX_SCALE_PLACEMENT_INLINE: u8 = 0;
pub const FDX_SCALE_PLACEMENT_SEPARATE_BUFFER: u8 = 1;
pub const FDX_SCALE_PLACEMENT_BROADCAST_PER_AXIS: u8 = 2;
pub const FDX_BUFFER_ROLE_DATA: u8 = 0;
pub const FDX_BUFFER_ROLE_SCALE: u8 = 1;
pub const FDX_BUFFER_ROLE_ZERO_POINT: u8 = 2;
pub const FDX_BUFFER_ROLE_BUNDLE_BACKING: u8 = 3;
pub const FDX_BUFFER_ROLE_AUX: u8 = 4;
pub const FDX_BUFFER_ROLE_POOL: u8 = 5;
pub const FDX_BUFFER_ROLE_BLOCK_TABLE: u8 = 6;
pub const FDX_BUFFER_ROLE_CONTEXT_LENS: u8 = 7;
pub const FDX_TIER_DEVICE: u8 = 0;
pub const FDX_TIER_HOST: u8 = 1;
pub const FDX_TIER_DISK_MMAP: u8 = 2;
pub const FDX_SUBSTRATE_HOST_BYTES: u8 = 0;
pub const FDX_SUBSTRATE_CUDA_UNTYPED: u8 = 1;
pub const FDX_SUBSTRATE_VULKAN_BUFFER: u8 = 2;
pub const FDX_SUBSTRATE_METAL_BUFFER: u8 = 3;
pub const FDX_BACKEND_CPU: u8 = 0;
pub const FDX_BACKEND_CUDA: u8 = 1;
pub const FDX_BACKEND_VULKAN: u8 = 2;
pub const FDX_BACKEND_METAL: u8 = 3;
pub const FDX_STORAGE_SHARED: u8 = 0;
pub const FDX_STORAGE_SESSION: u8 = 1;
pub const FDX_STORAGE_TRANSIENT: u8 = 2;
pub const FDX_GGML_F32: u16 = 0;
pub const FDX_GGML_F16: u16 = 1;
pub const FDX_GGML_Q4_0: u16 = 2;
pub const FDX_GGML_Q4_1: u16 = 3;
pub const FDX_GGML_Q5_0: u16 = 6;
pub const FDX_GGML_Q5_1: u16 = 7;
pub const FDX_GGML_Q8_0: u16 = 8;
pub const FDX_GGML_Q8_1: u16 = 9;
pub const FDX_GGML_Q2K: u16 = 10;
pub const FDX_GGML_Q3K: u16 = 11;
pub const FDX_GGML_Q4K: u16 = 12;
pub const FDX_GGML_Q5K: u16 = 13;
pub const FDX_GGML_Q6K: u16 = 14;
pub const FDX_GGML_Q8K: u16 = 15;
pub const FDX_GGML_IQ4_NL: u16 = 20;
pub const FDX_GGML_IQ4_XS: u16 = 23;
pub const FDX_GGML_IQ2_XXS: u16 = 16;
pub const FDX_GGML_IQ2_XS: u16 = 17;
pub const FDX_GGML_IQ3_XXS: u16 = 18;
pub const FDX_GGML_IQ1_S: u16 = 19;
pub const FDX_GGML_IQ3_S: u16 = 21;
pub const FDX_GGML_IQ2_S: u16 = 22;
pub const FDX_GGML_IQ1_M: u16 = 29;
pub const FDX_GGML_TQ1_0: u16 = 34;
pub const FDX_GGML_TQ2_0: u16 = 35;
pub const FDX_GGML_MXFP4: u16 = 39;
pub const FDX_GGML_NVFP4: u16 = 40;
pub const FDX_GGML_BF16: u16 = 30;
pub const FDX_DTYPE_U8: u16 = 0;
pub const FDX_DTYPE_I8: u16 = 1;
pub const FDX_DTYPE_U32: u16 = 2;
pub const FDX_DTYPE_I16: u16 = 3;
pub const FDX_DTYPE_I32: u16 = 4;
pub const FDX_DTYPE_I64: u16 = 5;
pub const FDX_DTYPE_BF16: u16 = 6;
pub const FDX_DTYPE_F16: u16 = 7;
pub const FDX_DTYPE_F32: u16 = 8;
pub const FDX_DTYPE_F64: u16 = 9;
pub const FDX_DTYPE_F8E4M3: u16 = 10;
pub const FDX_DTYPE_F6E2M3: u16 = 11;
pub const FDX_DTYPE_F6E3M2: u16 = 12;
pub const FDX_DTYPE_F4: u16 = 13;
pub const FDX_DTYPE_F8E8M0: u16 = 14;
pub const FDX_DTYPE_I4: u16 = 0x0102;
pub const FDX_DTYPE_U4: u16 = 0x0103;
pub const FDX_DTYPE_B1: u16 = 0x0104;
pub const FDX_DTYPE_COMPLEX64: u16 = 0x0200;
pub const FDX_DTYPE_BOOL: u16 = 0x0201;
pub const FDX_PACKING_BYTE_ALIGNED: u8 = 0;
pub const FDX_PACKING_DENSE_SUBBYTE: u8 = 1;
pub const FDX_PACKING_MX_BLOCK: u8 = 2;
pub const FDX_PACKING_GGML_BLOCK: u8 = 3;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn fdx_flag_bits_are_unique_single_bits() {
let mut seen = 0u32;
for &f in &FDX_FLAG_ALL {
assert_eq!(f.count_ones(), 1, "flag {f:#x} must be exactly one bit");
assert_eq!(seen & f, 0, "flag {f:#x} collides with an earlier flag");
seen |= f;
}
assert_eq!(seen.count_ones() as usize, FDX_FLAG_ALL.len());
assert_ne!(
FDX_FLAG_HAS_GATHER & FDX_FLAG_MEANING_REQUIRES_EXT,
FDX_FLAG_HAS_GATHER
);
}
#[test]
fn fdx_quant_family_codes_are_distinct() {
let fams = [
FDX_QUANT_GGML_BLOCK,
FDX_QUANT_MX,
FDX_QUANT_AFFINE_INT,
FDX_QUANT_AFFINE_FLOAT,
FDX_QUANT_AFFINE_BLOCK,
];
for (i, a) in fams.iter().enumerate() {
for b in &fams[i + 1..] {
assert_ne!(a, b, "quant family codes must be distinct");
}
assert_ne!(*a, FDX_QUANT_NONE, "a real family must not equal NONE");
}
}
#[test]
fn fdx_constant_sentinels() {
assert_eq!(FDX_MAGIC, 0x4644_5800);
assert_eq!(FDX_AFFINE_MAX_TERMS, 4);
assert_eq!(FDX_DTYPE_NONE, 0xFFFF);
assert_eq!(FDX_SYM_NONE, 0xFFFF_FFFF);
assert_eq!(FDX_BUFFER_INLINE, 0xFFFF_FFFF);
assert_eq!(FDX_SCALE_GRAN_PER_BLOCK, 3);
}
#[test]
fn fdx_low_bit_logical_codes_are_distinct_and_out_of_fuel_range() {
let low_bit = [FDX_DTYPE_I4, FDX_DTYPE_U4, FDX_DTYPE_B1];
for (i, a) in low_bit.iter().enumerate() {
for b in &low_bit[i + 1..] {
assert_ne!(a, b, "low-bit logical codes must be distinct");
}
assert!(
*a > FDX_DTYPE_F8E8M0,
"low-bit code {a:#06x} must sit above the Fuel range"
);
assert!(
*a < 0x0200,
"low-bit code {a:#06x} must sit in the 0x01xx family"
);
assert_ne!(*a, FDX_DTYPE_NONE);
}
}
}