ruPRIM-host 0.1.30

ruPRIM CPU tensor primitives, reductions, indexing and SIMD kernels.
Documentation
use ruda_core::tensor::{DType, host::HostTensor};
use half::{bf16, f16};

pub fn float_cumsum(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::F32 => crate::cumulative::cumsum_f32(tensor, dim),
        DType::F64 => crate::cumulative::cumsum_f64(tensor, dim),
        DType::F16 => {
            crate::cumulative::cumsum_half(tensor, dim, f16::to_f32, f16::from_f32)
        }
        DType::BF16 => {
            crate::cumulative::cumsum_half(tensor, dim, bf16::to_f32, bf16::from_f32)
        }
        _ => panic!("float_cumsum: unsupported dtype {:?}", tensor.dtype()),
    }
}

pub fn float_cumprod(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::F32 => crate::cumulative::cumprod_f32(tensor, dim),
        DType::F64 => crate::cumulative::cumprod_f64(tensor, dim),
        DType::F16 => {
            crate::cumulative::cumprod_half(tensor, dim, f16::to_f32, f16::from_f32)
        }
        DType::BF16 => {
            crate::cumulative::cumprod_half(tensor, dim, bf16::to_f32, bf16::from_f32)
        }
        _ => panic!("float_cumprod: unsupported dtype {:?}", tensor.dtype()),
    }
}

pub fn float_cummin(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::F32 => crate::cumulative::cummin_f32(tensor, dim),
        DType::F64 => crate::cumulative::cummin_f64(tensor, dim),
        DType::F16 => {
            crate::cumulative::cummin_half(tensor, dim, f16::to_f32, f16::from_f32)
        }
        DType::BF16 => {
            crate::cumulative::cummin_half(tensor, dim, bf16::to_f32, bf16::from_f32)
        }
        _ => panic!("float_cummin: unsupported dtype {:?}", tensor.dtype()),
    }
}

pub fn float_cummax(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::F32 => crate::cumulative::cummax_f32(tensor, dim),
        DType::F64 => crate::cumulative::cummax_f64(tensor, dim),
        DType::F16 => {
            crate::cumulative::cummax_half(tensor, dim, f16::to_f32, f16::from_f32)
        }
        DType::BF16 => {
            crate::cumulative::cummax_half(tensor, dim, bf16::to_f32, bf16::from_f32)
        }
        _ => panic!("float_cummax: unsupported dtype {:?}", tensor.dtype()),
    }
}

pub fn int_cumsum(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::I64 => crate::cumulative::cumsum::<i64>(tensor, dim),
        DType::I32 => crate::cumulative::cumsum::<i32>(tensor, dim),
        DType::I16 => crate::cumulative::cumsum::<i16>(tensor, dim),
        DType::I8 => crate::cumulative::cumsum::<i8>(tensor, dim),
        DType::U64 => crate::cumulative::cumsum::<u64>(tensor, dim),
        DType::U32 => crate::cumulative::cumsum::<u32>(tensor, dim),
        DType::U16 => crate::cumulative::cumsum::<u16>(tensor, dim),
        DType::U8 => crate::cumulative::cumsum::<u8>(tensor, dim),
        dt => panic!("int_cumsum: unsupported dtype {:?}", dt),
    }
}

pub fn int_cumprod(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::I64 => crate::cumulative::cumprod::<i64>(tensor, dim),
        DType::I32 => crate::cumulative::cumprod::<i32>(tensor, dim),
        DType::I16 => crate::cumulative::cumprod::<i16>(tensor, dim),
        DType::I8 => crate::cumulative::cumprod::<i8>(tensor, dim),
        DType::U64 => crate::cumulative::cumprod::<u64>(tensor, dim),
        DType::U32 => crate::cumulative::cumprod::<u32>(tensor, dim),
        DType::U16 => crate::cumulative::cumprod::<u16>(tensor, dim),
        DType::U8 => crate::cumulative::cumprod::<u8>(tensor, dim),
        dt => panic!("int_cumprod: unsupported dtype {:?}", dt),
    }
}

pub fn int_cummin(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::I64 => crate::cumulative::cummin::<i64>(tensor, dim),
        DType::I32 => crate::cumulative::cummin::<i32>(tensor, dim),
        DType::I16 => crate::cumulative::cummin::<i16>(tensor, dim),
        DType::I8 => crate::cumulative::cummin::<i8>(tensor, dim),
        DType::U64 => crate::cumulative::cummin::<u64>(tensor, dim),
        DType::U32 => crate::cumulative::cummin::<u32>(tensor, dim),
        DType::U16 => crate::cumulative::cummin::<u16>(tensor, dim),
        DType::U8 => crate::cumulative::cummin::<u8>(tensor, dim),
        dt => panic!("int_cummin: unsupported dtype {:?}", dt),
    }
}

pub fn int_cummax(tensor: HostTensor, dim: usize) -> HostTensor {
    match tensor.dtype() {
        DType::I64 => crate::cumulative::cummax::<i64>(tensor, dim),
        DType::I32 => crate::cumulative::cummax::<i32>(tensor, dim),
        DType::I16 => crate::cumulative::cummax::<i16>(tensor, dim),
        DType::I8 => crate::cumulative::cummax::<i8>(tensor, dim),
        DType::U64 => crate::cumulative::cummax::<u64>(tensor, dim),
        DType::U32 => crate::cumulative::cummax::<u32>(tensor, dim),
        DType::U16 => crate::cumulative::cummax::<u16>(tensor, dim),
        DType::U8 => crate::cumulative::cummax::<u8>(tensor, dim),
        dt => panic!("int_cummax: unsupported dtype {:?}", dt),
    }
}