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: DType) -> DType

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 Copy for DType

Source§

impl Debug for DType

Source§

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

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

impl Display for DType

Source§

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

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

impl Eq for DType

Source§

impl Hash for DType

Source§

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

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 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.