Skip to main content

erased_compare_into_uninit

Function erased_compare_into_uninit 

Source
pub fn erased_compare_into_uninit(
    dtype: KernelDType,
    op: CompareOp,
    ctx: &ExecContext,
    dest: &mut ErasedRawStridedUninitMut<'_>,
    lhs: &ErasedRawStridedPtr<'_>,
    rhs: &ErasedRawStridedPtr<'_>,
) -> Result<()>
Expand description

Compare two same-dtype operands elementwise into uninitialized bool storage.

Real, signed-integer, and bool operands support every CompareOp with PartialOrd semantics, so any comparison involving NaN is false. Complex operands support only CompareOp::Eq; ordered comparisons return StridedError::UnsupportedOp. The destination dtype must be bool.

§Examples

use core::mem::MaybeUninit;
use strided_kernel::{
    erased_compare_into_uninit, CompareOp, ErasedRawStridedPtr, ErasedRawStridedRef,
    ErasedRawStridedUninitMut, ExecContext, KernelDType,
};

let lhs = [1.0_f64, f64::NAN];
let rhs = [2.0_f64, 0.0];
let lhs = ErasedRawStridedRef::from_slice(&lhs, &[2], &[1], 0).unwrap();
let rhs = ErasedRawStridedRef::from_slice(&rhs, &[2], &[1], 0).unwrap();
let mut out = [MaybeUninit::<bool>::uninit(); 2];
let mut dest = ErasedRawStridedUninitMut::from_uninit_slice(&mut out, &[2], &[1], 0).unwrap();
erased_compare_into_uninit(
    KernelDType::F64,
    CompareOp::Lt,
    &ExecContext::serial(),
    &mut dest,
    &ErasedRawStridedPtr::from_ref(&lhs),
    &ErasedRawStridedPtr::from_ref(&rhs),
)
.unwrap();
// SAFETY: a successful call initializes every reachable element.
assert_eq!(unsafe { [out[0].assume_init(), out[1].assume_init()] }, [true, false]);

§Errors

Returns a typed StridedError for dtype, shape, output-layout, overlap, or unsupported dtype/op contracts. Validation completes before any write.