use core::marker::PhantomData;
use anybytes::Bytes;
use crate::blob::{Blob, BlobEncoding, TryFromBlob};
use crate::macros::entity;
use crate::metadata::{self, MetaDescribe};
use crate::trible::Fragment;
pub const TENSOR_HEADER_LEN: usize = 256;
pub const MAX_RANK: usize = TENSOR_HEADER_LEN / 8;
pub trait TensorElement: MetaDescribe + 'static {
const BITS: usize;
fn payload_len(elems: usize) -> usize {
elems.saturating_mul(Self::BITS).div_ceil(8)
}
}
pub struct Tensor<T: TensorElement, const RANK: usize>(PhantomData<T>);
impl<T: TensorElement, const RANK: usize> BlobEncoding for Tensor<T, RANK> {}
impl<T: TensorElement, const RANK: usize> MetaDescribe for Tensor<T, RANK> {
fn describe() -> Fragment {
let mut core = entity! {
metadata::array_item_schema*: T::describe(),
metadata::tensor_rank: RANK as i64,
metadata::tag: metadata::KIND_BLOB_ENCODING,
};
let id = core.root().expect("rooted");
let id_ref = crate::id::ExclusiveId::force_ref(&id);
core += entity! { id_ref @
metadata::name: "tensor",
metadata::description:
"Typed tensor: fixed 256-byte header carrying logical \
dimensions, followed by the payload. Self-describing, so a \
handle is interpretable without accompanying facts.",
};
core
}
}
#[derive(Debug, PartialEq, Eq)]
pub enum TensorError {
TooShort { len: usize },
LengthMismatch { expected: usize, found: usize },
RankTooLarge { rank: usize },
}
impl core::fmt::Display for TensorError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
TensorError::TooShort { len } => {
write!(
f,
"tensor blob is {len} bytes, shorter than its {TENSOR_HEADER_LEN}-byte header"
)
}
TensorError::LengthMismatch { expected, found } => {
write!(f, "tensor payload is {found} bytes, dims imply {expected}")
}
TensorError::RankTooLarge { rank } => {
write!(
f,
"rank {rank} exceeds the {MAX_RANK} a fixed header can hold"
)
}
}
}
}
impl core::error::Error for TensorError {}
#[derive(Debug)]
pub struct TensorView {
dims: Vec<u64>,
payload: Bytes,
}
impl TensorView {
pub fn dims(&self) -> &[u64] {
&self.dims
}
pub fn elems(&self) -> usize {
self.dims.iter().product::<u64>() as usize
}
pub fn payload(&self) -> &Bytes {
&self.payload
}
}
pub fn tensor_blob<T: TensorElement, const RANK: usize>(
dims: [u64; RANK],
payload: Bytes,
) -> Result<Blob<Tensor<T, RANK>>, TensorError> {
if RANK > MAX_RANK {
return Err(TensorError::RankTooLarge { rank: RANK });
}
let elems: u64 = dims.iter().product();
let expected = T::payload_len(elems as usize);
if payload.len() != expected {
return Err(TensorError::LengthMismatch {
expected,
found: payload.len(),
});
}
let mut bytes = Vec::with_capacity(TENSOR_HEADER_LEN + payload.len());
for d in dims {
bytes.extend_from_slice(&d.to_le_bytes());
}
debug_assert_eq!(bytes.len(), RANK * 8);
bytes.resize(TENSOR_HEADER_LEN, 0);
bytes.extend_from_slice(&payload);
Ok(Blob::new(Bytes::from_source(bytes)))
}
impl<T: TensorElement, const RANK: usize> TryFromBlob<Tensor<T, RANK>> for TensorView {
type Error = TensorError;
fn try_from_blob(blob: Blob<Tensor<T, RANK>>) -> Result<Self, Self::Error> {
let bytes = blob.bytes;
if bytes.len() < TENSOR_HEADER_LEN {
return Err(TensorError::TooShort { len: bytes.len() });
}
if RANK > MAX_RANK {
return Err(TensorError::RankTooLarge { rank: RANK });
}
let mut dims = Vec::with_capacity(RANK);
for i in 0..RANK {
let at = i * 8;
dims.push(u64::from_le_bytes(
bytes[at..at + 8].try_into().expect("8 bytes"),
));
}
let elems: u64 = dims.iter().product();
let expected = T::payload_len(elems as usize);
let payload = bytes.slice(TENSOR_HEADER_LEN..);
if payload.len() != expected {
return Err(TensorError::LengthMismatch {
expected,
found: payload.len(),
});
}
Ok(TensorView { dims, payload })
}
}
pub mod elements {
use super::TensorElement;
use crate::macros::entity;
use crate::metadata::{self, MetaDescribe};
use crate::trible::Fragment;
macro_rules! dense_element {
($marker:ident, $bits:expr, $id:expr, $doc:expr) => {
#[doc = $doc]
pub struct $marker;
impl MetaDescribe for $marker {
fn describe() -> Fragment {
let id = crate::id_hex!($id);
entity! { crate::id::ExclusiveId::force_ref(&id) @
metadata::name: stringify!($marker),
metadata::description: $doc,
}
}
}
impl TensorElement for $marker {
const BITS: usize = $bits;
}
};
}
dense_element!(
F32,
32,
"92F4DB8D84519C8D6E212CB810FF40D4",
"32-bit IEEE-754 float."
);
dense_element!(
F64,
64,
"FA3AD8DEC844D5F409AB728269B7A3FE",
"64-bit IEEE-754 float."
);
dense_element!(
F16,
16,
"0E7E69818968BCD97A540DE30B9E605D",
"16-bit IEEE-754 half float."
);
dense_element!(
BF16,
16,
"8656DFBC50009089603533E4558D05C6",
"16-bit bfloat."
);
dense_element!(
U8,
8,
"D16AC7C02F25E4799F4D47EB1E51EF6E",
"Unsigned 8-bit integer."
);
dense_element!(
E4M3,
8,
"5453AA907D7EDF3A61B07E0DFBA53CFC",
"8-bit float, 4-bit exponent, 3-bit mantissa."
);
pub struct NVFP4;
pub const NVFP4_BLOCK: usize = 16;
impl MetaDescribe for NVFP4 {
fn describe() -> Fragment {
let id = crate::id_hex!("7C1AD2F9BEEE5EEF42F168DCD2A10BC1");
entity! { crate::id::ExclusiveId::force_ref(&id) @
metadata::name: "NVFP4",
metadata::description:
"NVFP4: E2M1 elements, blocks of 16, E4M3 block scales, \
one FP32 global scale. Scales travel in the payload.",
}
}
}
impl TensorElement for NVFP4 {
const BITS: usize = 4;
fn payload_len(elems: usize) -> usize {
let packed = elems.div_ceil(2);
let blocks = elems.div_ceil(NVFP4_BLOCK);
packed + blocks + 4
}
}
}
#[cfg(test)]
mod tests {
use super::elements::{BF16, F32, NVFP4, NVFP4_BLOCK};
use super::*;
fn payload(n: usize) -> Bytes {
Bytes::from_source(vec![0u8; n])
}
#[test]
fn element_and_rank_both_discriminate_the_encoding() {
let f32_2 = <Tensor<F32, 2> as MetaDescribe>::id();
let bf16_2 = <Tensor<BF16, 2> as MetaDescribe>::id();
let f32_3 = <Tensor<F32, 3> as MetaDescribe>::id();
assert_ne!(f32_2, bf16_2, "element type must discriminate");
assert_ne!(f32_2, f32_3, "rank must discriminate");
assert_eq!(
f32_2,
<Tensor<F32, 2> as MetaDescribe>::id(),
"and be stable"
);
}
#[test]
fn dims_and_payload_survive_a_roundtrip() {
let blob = tensor_blob::<F32, 2>([3, 4], payload(3 * 4 * 4)).expect("well formed");
let view: TensorView = blob.try_from_blob().expect("decodes");
assert_eq!(view.dims(), &[3, 4]);
assert_eq!(view.elems(), 12);
assert_eq!(view.payload().len(), 48);
}
#[test]
fn a_packed_tensor_states_its_logical_shape() {
let elems = 4096usize;
let expected = elems / 2 + elems / NVFP4_BLOCK + 4;
let blob = tensor_blob::<NVFP4, 1>([elems as u64], payload(expected)).expect("well formed");
let view: TensorView = blob.try_from_blob().expect("decodes");
assert_eq!(
view.dims(),
&[4096],
"logical, not the 2048 bytes it packs into"
);
assert_eq!(view.elems(), 4096);
assert!(view.payload().len() < elems, "and it really is packed");
}
#[test]
fn nvfp4_payload_accounts_for_its_own_scales() {
assert_eq!(
NVFP4::payload_len(16),
8 + 1 + 4,
"8 packed + 1 block scale + global"
);
assert_eq!(NVFP4::payload_len(32), 16 + 2 + 4);
assert_eq!(
F32::payload_len(32),
128,
"a dense format is just its elements"
);
}
#[test]
fn one_inkling_expert_is_a_rank_2_nvfp4_tensor() {
let (rows, cols) = (4096usize, 4096usize);
let elems = rows * cols;
let packed = elems / 2;
let block_scales = elems / NVFP4_BLOCK;
assert_eq!(
packed,
4096 * 2048,
"matches the checkpoint's packed last dim"
);
assert_eq!(
block_scales,
4096 * 256,
"matches the scale tensor's last dim"
);
assert_eq!(
NVFP4::payload_len(elems),
packed + block_scales + 4,
"one expert carries one global scale"
);
let blob = tensor_blob::<NVFP4, 2>(
[rows as u64, cols as u64],
payload(NVFP4::payload_len(elems)),
)
.expect("well formed");
let view: TensorView = blob.try_from_blob().expect("decodes");
assert_eq!(view.dims(), &[4096, 4096], "logical, not the packed 2048");
}
#[test]
fn a_payload_that_contradicts_the_dims_is_refused() {
let err = tensor_blob::<F32, 2>([3, 4], payload(40)).expect_err("must refuse");
assert_eq!(
err,
TensorError::LengthMismatch {
expected: 48,
found: 40
}
);
}
#[test]
fn reading_a_tensor_at_the_wrong_rank_is_refused() {
let blob = tensor_blob::<F32, 2>([3, 4], payload(48)).expect("well formed");
let wrong: Blob<Tensor<F32, 3>> = blob.transmute();
let err = <TensorView as TryFromBlob<Tensor<F32, 3>>>::try_from_blob(wrong)
.expect_err("must refuse");
assert_eq!(
err,
TensorError::LengthMismatch {
expected: 0,
found: 48
}
);
}
#[test]
fn the_header_is_nothing_but_dimensions() {
assert_eq!(MAX_RANK, 32, "one u64 per 8 bytes of a 256-byte header");
let blob = tensor_blob::<F32, 3>([2, 3, 4], payload(2 * 3 * 4 * 4)).expect("ok");
for (i, expect) in [2u64, 3, 4].iter().enumerate() {
let at = i * 8;
let got = u64::from_le_bytes(blob.bytes[at..at + 8].try_into().unwrap());
assert_eq!(got, *expect, "dim {i} sits at offset {at}");
}
assert!(
blob.bytes[24..TENSOR_HEADER_LEN].iter().all(|b| *b == 0),
"the rest is padding, not a marker"
);
}
#[test]
fn the_payload_offset_does_not_depend_on_rank() {
assert_eq!(TENSOR_HEADER_LEN % 256, 0);
let r1 = tensor_blob::<F32, 1>([2], payload(8)).expect("ok");
let r4 = tensor_blob::<F32, 4>([1, 1, 1, 2], payload(8)).expect("ok");
assert_eq!(r1.bytes.len(), r4.bytes.len(), "same payload, same total");
}
}
#[cfg(test)]
mod shape_check_reach {
use super::elements::{F32, F64};
use super::*;
fn payload(n: usize) -> Bytes {
Bytes::from_source(vec![0u8; n])
}
#[test]
fn one_check_catches_several_different_mistakes() {
assert!(tensor_blob::<F32, 2>([3, 4], payload(40)).is_err());
assert!(tensor_blob::<F32, 2>([3, 4], payload(96)).is_err());
assert!(tensor_blob::<F64, 2>([3, 4], payload(48)).is_err());
let blob = tensor_blob::<F32, 2>([3, 4], payload(48)).expect("ok");
let wrong: Blob<Tensor<F32, 3>> = blob.transmute();
assert!(<TensorView as TryFromBlob<Tensor<F32, 3>>>::try_from_blob(wrong).is_err());
let blob = tensor_blob::<F32, 3>([2, 3, 4], payload(96)).expect("ok");
let wrong: Blob<Tensor<F32, 2>> = blob.transmute();
assert!(<TensorView as TryFromBlob<Tensor<F32, 2>>>::try_from_blob(wrong).is_err());
}
#[test]
fn a_trailing_unit_dimension_is_genuinely_the_same_tensor() {
let blob = tensor_blob::<F32, 3>([3, 4, 1], payload(48)).expect("ok");
let as_rank2: Blob<Tensor<F32, 2>> = blob.transmute();
let view: TensorView =
<TensorView as TryFromBlob<Tensor<F32, 2>>>::try_from_blob(as_rank2).expect("passes");
assert_eq!(view.dims(), &[3, 4]);
assert_eq!(view.elems(), 12, "same elements, same order");
}
}