Skip to main content

DType

Enum DType 

Source
pub enum DType {
    F32,
    F16,
    BF16,
    F64,
    I8,
    I16,
    I32,
    I64,
    U8,
    U32,
    Bool,
    C64,
}
Expand description

Scalar element type. Matches hardware-supported types.

Variants§

§

F32

§

F16

§

BF16

§

F64

§

I8

§

I16

§

I32

§

I64

§

U8

§

U32

§

Bool

§

C64

Complex with f32 real and f32 imaginary components, stored interleaved as [re, im, re, im, ...]. 8 bytes per complex element. Element-wise ops (Add/Sub/Mul/Conj) follow the standard complex algebra. Reverse-mode AD on this dtype is not yet wired — Wirtinger conventions (∂/∂z vs ∂/∂z̄) belong to a separate pass that knows to emit conjugate-aware VJPs. The forward path is sufficient for AC analysis and FFT-based workflows that don’t need to differentiate through complex math (and in fact, FFT today already encodes complex as 2N-real-block; this dtype is the natural successor).

Implementations§

Source§

impl DType

Source

pub const fn size_bytes(self) -> usize

Size in bytes of one element.

Source

pub const fn is_float(self) -> bool

Source

pub const fn is_complex(self) -> bool

True for complex-valued dtypes. Complex elementwise ops follow standard complex algebra, distinct from the float real/imag components (e.g. complex multiply ≠ paired-real multiply).

Source

pub const fn is_int(self) -> bool

Source

pub const fn promotion_rank(self) -> u8

Promotion rank — higher means “wider, more expressive”. The promoted dtype of a binary op is max(rank(lhs), rank(rhs)). Borrowed from MAX’s dtype_promotion.py pattern (#55 in PLAN.md): one module owns the table; ops query it instead of re-implementing ad-hoc rules.

Ranks (low → high): 0 = Bool, 1 = U8/I8, 2 = I16/BF16, 3 = F16, 4 = U32/I32, 5 = I64, 6 = F32, 7 = F64. Floats outrank ints of the same width (matches PyTorch / NumPy). BF16 promotes to F32 against F16 since BF16 has wider range but F16 has more mantissa.

Source

pub fn promote(self, other: Self) -> Self

Result dtype for a binary op between self and other. Mixed int+float → float at least as wide as either input. f16 + bf16 → f32 (no clean lossless target).

Trait Implementations§

Source§

impl Clone for DType

Source§

fn clone(&self) -> DType

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for DType

Source§

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

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

impl Display for DType

Source§

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

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

impl Hash for DType

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 DType

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 Copy for DType

Source§

impl Eq for DType

Source§

impl StructuralPartialEq for DType

Auto Trait Implementations§

§

impl Freeze for DType

§

impl RefUnwindSafe for DType

§

impl Send for DType

§

impl Sync for DType

§

impl Unpin for DType

§

impl UnsafeUnpin for DType

§

impl UnwindSafe for DType

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.