Skip to main content

ComptimeFloat

Struct ComptimeFloat 

Source
pub struct ComptimeFloat<F>(/* private fields */)
where
    F: FloatBits;
Expand description

A finite float usable as a comptime kernel parameter.

Plain floats can’t back a Hash/Eq key because NaN breaks reflexivity, which is required for anything used as a kernel cache key (e.g. through KernelId::info). ComptimeFloat closes that gap by comparing and hashing bit patterns instead, after rejecting non-finite input and normalizing -0.0 to 0.0 so numerically equal values always compare equal.

This is only appropriate for values that are genuinely arbitrary floats. If a value is always an exact ratio of two integers (e.g. derived from tensor shapes), prefer Ratio: it is exact and avoids bit-pattern comparisons entirely.

Implementations§

Source§

impl<F> ComptimeFloat<F>
where F: FloatBits,

Source

pub fn new(val: F) -> Result<ComptimeFloat<F>, InvalidComptimeFloat<F>>

Wrap val, rejecting non-finite input.

Source

pub fn get(self) -> F

The wrapped value.

Trait Implementations§

Source§

impl<F> Clone for ComptimeFloat<F>
where F: Clone + FloatBits,

Source§

fn clone(&self) -> ComptimeFloat<F>

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<F> Copy for ComptimeFloat<F>
where F: Copy + FloatBits,

Source§

impl<F> Debug for ComptimeFloat<F>
where F: Debug + FloatBits,

Source§

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

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

impl<F> Display for ComptimeFloat<F>
where F: FloatBits,

Source§

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

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

impl<F> Eq for ComptimeFloat<F>
where F: FloatBits,

Source§

impl<F> Hash for ComptimeFloat<F>
where F: FloatBits,

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<F> PartialEq for ComptimeFloat<F>
where F: FloatBits,

Source§

fn eq(&self, other: &ComptimeFloat<F>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

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

Inequality operator !=. Read more

Auto Trait Implementations§

§

impl<F> Freeze for ComptimeFloat<F>
where F: Freeze,

§

impl<F> RefUnwindSafe for ComptimeFloat<F>
where F: RefUnwindSafe,

§

impl<F> Send for ComptimeFloat<F>
where F: Send,

§

impl<F> Sync for ComptimeFloat<F>
where F: Sync,

§

impl<F> Unpin for ComptimeFloat<F>
where F: Unpin,

§

impl<F> UnsafeUnpin for ComptimeFloat<F>
where F: UnsafeUnpin,

§

impl<F> UnwindSafe for ComptimeFloat<F>
where F: UnwindSafe,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

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> CompilationArg for T
where T: Clone + PartialEq + Eq + Hash + Debug + Send + Sync + 'static,

Source§

fn dynamic_cast<Arg: CompilationArg>(&self) -> Arg

Compilation args should be the same even with different element types. However, it isn’t possible to enforce it with the type system. So, we make the compilation args serializable and dynamically cast them. Read more
Source§

impl<T> CubeComptime for T
where T: Debug + Hash + Eq + Clone + Copy,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> IntoComptime for T

Source§

fn comptime(self) -> Self

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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> TuneInputs for T
where T: Clone + Send + Sync + 'static,

Source§

type At<'a> = T

The concrete input type at lifetime 'a.