Skip to main content

Element

Trait Element 

Source
pub trait Element:
    Copy
    + Clone
    + Send
    + Sync
    + Pod
    + Zeroable
    + 'static
    + Add<Output = Self>
    + Sub<Output = Self>
    + Mul<Output = Self>
    + Div<Output = Self>
    + PartialOrd {
    const DTYPE: DType;

    // Required methods
    fn to_f64(self) -> f64;
    fn from_f64(v: f64) -> Self;
    fn zero() -> Self;
    fn one() -> Self;

    // Provided methods
    fn to_f32(self) -> f32 { ... }
    fn from_f32(v: f32) -> Self { ... }
}
Expand description

Trait for types that can be elements of a tensor

This trait connects Rust’s type system to numr’s runtime dtype system. It’s implemented for all primitive numeric types.

§Bounds

  • Copy + Clone + Send + Sync + 'static - Basic trait requirements
  • Pod + Zeroable - Safe memory transmutation (bytemuck)
  • Add + Sub + Mul + Div - Arithmetic operations (Output = Self)
  • PartialOrd - Comparison for min/max operations

Note: Neg is NOT required since unsigned types don’t support it. Negation is handled via to_f64/from_f64 conversion in kernels.

Required Associated Constants§

Source

const DTYPE: DType

The corresponding DType for this Rust type

Required Methods§

Source

fn to_f64(self) -> f64

Convert to f64 for generic numeric operations

§Complex Number Behavior

For complex types (Complex64, Complex128), this returns the magnitude (|z|), not the real part. This is consistent with:

  • PartialOrd using magnitude for comparison
  • The need for a single scalar representation

If you need the real part, access .re directly on the complex type.

Source

fn from_f64(v: f64) -> Self

Convert from f64 to this type

§Complex Number Behavior

For complex types, this creates a real number (imaginary part = 0).

Source

fn zero() -> Self

Zero value

Source

fn one() -> Self

One value

Provided Methods§

Source

fn to_f32(self) -> f32

Convert to f32

Default implementation goes through f64. Types that have direct f32 conversion (f16, bf16, fp8) override this for efficiency.

Source

fn from_f32(v: f32) -> Self

Convert from f32 to this type

Default implementation goes through f64. Types that have direct f32 conversion (f16, bf16, fp8) override this for efficiency.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Element for f32

Source§

const DTYPE: DType = DType::F32

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn to_f32(self) -> f32

Source§

fn from_f32(v: f32) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for f64

Source§

const DTYPE: DType = DType::F64

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn to_f32(self) -> f32

Source§

fn from_f32(v: f32) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for i8

Source§

const DTYPE: DType = DType::I8

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for i16

Source§

const DTYPE: DType = DType::I16

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for i32

Source§

const DTYPE: DType = DType::I32

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for i64

Source§

const DTYPE: DType = DType::I64

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for u8

Source§

const DTYPE: DType = DType::U8

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for u16

Source§

const DTYPE: DType = DType::U16

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for u32

Source§

const DTYPE: DType = DType::U32

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for u64

Source§

const DTYPE: DType = DType::U64

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for bf16

Available on crate feature f16 only.
Source§

const DTYPE: DType = DType::BF16

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn to_f32(self) -> f32

Source§

fn from_f32(v: f32) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Source§

impl Element for f16

Available on crate feature f16 only.
Source§

const DTYPE: DType = DType::F16

Source§

fn to_f64(self) -> f64

Source§

fn from_f64(v: f64) -> Self

Source§

fn to_f32(self) -> f32

Source§

fn from_f32(v: f32) -> Self

Source§

fn zero() -> Self

Source§

fn one() -> Self

Implementors§

Source§

impl Element for Complex64

Source§

const DTYPE: DType = DType::Complex64

Source§

impl Element for Complex128

Source§

const DTYPE: DType = DType::Complex128

Source§

impl Element for FP8E4M3

Source§

const DTYPE: DType = DType::FP8E4M3

Source§

impl Element for FP8E5M2

Source§

const DTYPE: DType = DType::FP8E5M2