Skip to main content

DataType

Enum DataType 

Source
#[non_exhaustive]
pub enum DataType {
Show 31 variants U8, U16, U32, I8, I16, I32, I64, U64, Vec2U32, Vec4U32, Bool, Bytes, Array { element_size: usize, }, F16, BF16, F32, F64, Tensor, Handle(TypeId), Vec { element: Box<Self>, count: u8, }, TensorShaped { element: Box<Self>, shape: SmallVec<[u32; 4]>, }, SparseCsr { element: Box<Self>, }, SparseCoo { element: Box<Self>, }, SparseBsr { element: Box<Self>, block_rows: u32, block_cols: u32, }, F8E4M3, F8E5M2, I4, FP4, NF4, DeviceMesh { axes: SmallVec<[u32; 3]>, }, Opaque(ExtensionDataTypeId),
}
Expand description

Canonical data types supported by the vyre IR frozen data contract.

Integer-first by design. GPU floating-point is nondeterministic across vendors through different rounding, fused multiply-add, and subnormal handling. Integer arithmetic is deterministic everywhere. F32 is supported for primitives that require it, with conformance validated per-backend. vyre::ir::DataType re-exports this same type; conformance metadata should use this canonical contract path. Example: DataType::Vec4U32 records a four-word lane value and has a minimum byte width of 16.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

U8

Unsigned 8-bit integer.

§

U16

Unsigned 16-bit integer.

§

U32

Unsigned 32-bit integer. The fundamental GPU word.

§

I8

Signed 8-bit integer.

§

I16

Signed 16-bit integer.

§

I32

Signed 32-bit integer.

§

I64

Signed 64-bit integer.

§

U64

Unsigned 64-bit integer, emulated as vec2<u32> with low and high words.

§

Vec2U32

Two-component u32 vector.

§

Vec4U32

Four-component u32 vector.

§

Bool

Boolean value stored as a GPU word.

§

Bytes

Variable-length byte buffer.

§

Array

Fixed-element-size array.

Each element is element_size bytes. The total byte count is N * element_size where N is encoded by the value.

Fields

§element_size: usize

Byte size of each element.

§

F16

Strict IEEE 754 binary16 floating-point.

§

BF16

Strict bfloat16 floating-point.

§

F32

IEEE 754 binary32 floating-point.

§

F64

Strict IEEE 754 binary64 floating-point.

§

Tensor

Multi-dimensional tensor value.

§

Handle(TypeId)

Opaque backend resource handle.

§

Vec

Generic fixed-lane vector.

Fields

§element: Box<Self>

Lane element type.

§count: u8

Lane count.

§

TensorShaped

Tensor with explicit element type and rank-limited shape.

Fields

§element: Box<Self>

Tensor element type.

§shape: SmallVec<[u32; 4]>

Tensor dimensions. Four dimensions stay inline.

§

SparseCsr

Sparse-CSR tensor: compressed sparse row layout. Element type lives in the dense values buffer; structure (indptr + col_idx) is laid out separately by the consumer per the documented CSR contract. Size depends on nnz; conservative sentinel applies.

Wire encoding: tag 0x16 followed by the element type tag.

Fields

§element: Box<Self>

Element type of the dense values buffer.

§

SparseCoo

Sparse-COO tensor: coordinate-list layout with (row, col, val) triples. Simpler than CSR but less cache-friendly; lowering passes typically convert COO → CSR before dispatch.

Wire encoding: tag 0x17 followed by the element type tag.

Fields

§element: Box<Self>

Element type of each triple’s value.

§

SparseBsr

Sparse-BSR tensor: block-sparse rows with fixed block size. Favored by quantized LLM weight matrices (50%+ sparsity at block-granularity retains line-rate GEMM).

Wire encoding: tag 0x18 followed by block_rows u32, block_cols u32, then the element type tag.

Fields

§element: Box<Self>

Element type.

§block_rows: u32

Block height in elements.

§block_cols: u32

Block width in elements.

§

F8E4M3

8-bit float (E4M3 format, per FP8 spec) for quantized inference.

§

F8E5M2

8-bit float (E5M2 format, per FP8 spec) — wider range than E4M3.

§

I4

4-bit signed integer for aggressive LLM weight quantization.

§

FP4

4-bit float for LLM-class inference.

§

NF4

4-bit “normal-float” (per QLoRA paper) for LLM weight compression.

§

DeviceMesh

Device-mesh handle — topology identifier consumed by collective ops (all_reduce, all_gather, reduce_scatter, broadcast). Shape is informational; actual topology is resolved through the backend’s mesh registry.

Fields

§axes: SmallVec<[u32; 3]>

Device count along each mesh axis. 1-D = pure ring/tree; 2-D = torus; higher-D = hypercube.

§

Opaque(ExtensionDataTypeId)

Extension-declared data type.

The ExtensionDataTypeId is stable across process runs and resolves to a &'static dyn ExtensionDataType via vyre::dialect::extension::resolve_data_type (in vyre-core). Wire encoding of Opaque is 0x80 ++ u32 extension_id — see docs/wire-format.md §Extensions.

The builtin const methods on DataType (min_bytes, max_bytes, size_bytes, is_float_family) return conservative sentinels for Opaque because the real values live behind the trait and are not known at compile time. Consumers that need the actual values should resolve the trait via the vyre-core registry.

Implementations§

Source§

impl DataType

Source

pub const fn min_bytes(&self) -> usize

Minimum byte count to represent one value of this type.

Source

pub const fn max_bytes(&self) -> Option<usize>

Maximum byte count for one value of this type.

Returns None for truly unbounded types; currently all variants have a hard ceiling. Fixed-width types return Some(min_bytes()).

Source

pub const fn element_size(&self) -> Option<usize>

Element size for array-typed outputs, or None for scalar types.

Source

pub const fn size_bytes(&self) -> Option<usize>

Fixed scalar element size in bytes, or None for variable-size types.

Scalar types return their natural width (U32Some(4), Vec4U32Some(16)). Bytes returns Some(1) because each element is one byte. Array returns Some(element_size). Tensor returns None because it has no fixed per-element size.

Source

pub const fn is_float_family(&self) -> bool

Whether this type belongs to the strict floating-point conformance family.

Trait Implementations§

Source§

impl Clone for DataType

Source§

fn clone(&self) -> DataType

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DataType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for DataType

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for DataType

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for DataType

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for DataType

Source§

fn eq(&self, other: &DataType) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for DataType

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for DataType

Source§

impl StructuralPartialEq for DataType

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,