mirror of
https://github.com/huggingface/candle.git
synced 2025-06-18 19:47:12 +00:00
Add the verbose cpu cast operations.
This commit is contained in:
@ -321,6 +321,10 @@ impl CpuStorage {
|
|||||||
pub(crate) fn to_dtype(&self, layout: &Layout, dtype: DType) -> Result<Self> {
|
pub(crate) fn to_dtype(&self, layout: &Layout, dtype: DType) -> Result<Self> {
|
||||||
// TODO: find a way around the quadratic number of cases below.
|
// TODO: find a way around the quadratic number of cases below.
|
||||||
match (self, dtype) {
|
match (self, dtype) {
|
||||||
|
(Self::U8(storage), DType::BF16) => {
|
||||||
|
let data = unary_map(storage, layout, |v| bf16::from_f32(v as f32));
|
||||||
|
Ok(Self::BF16(data))
|
||||||
|
}
|
||||||
(Self::U32(storage), DType::BF16) => {
|
(Self::U32(storage), DType::BF16) => {
|
||||||
let data = unary_map(storage, layout, |v| bf16::from_f32(v as f32));
|
let data = unary_map(storage, layout, |v| bf16::from_f32(v as f32));
|
||||||
Ok(Self::BF16(data))
|
Ok(Self::BF16(data))
|
||||||
@ -341,6 +345,10 @@ impl CpuStorage {
|
|||||||
let data = unary_map(storage, layout, bf16::from_f64);
|
let data = unary_map(storage, layout, bf16::from_f64);
|
||||||
Ok(Self::BF16(data))
|
Ok(Self::BF16(data))
|
||||||
}
|
}
|
||||||
|
(Self::U8(storage), DType::F16) => {
|
||||||
|
let data = unary_map(storage, layout, |v| f16::from_f32(v as f32));
|
||||||
|
Ok(Self::F16(data))
|
||||||
|
}
|
||||||
(Self::U32(storage), DType::F16) => {
|
(Self::U32(storage), DType::F16) => {
|
||||||
let data = unary_map(storage, layout, |v| f16::from_f32(v as f32));
|
let data = unary_map(storage, layout, |v| f16::from_f32(v as f32));
|
||||||
Ok(Self::F16(data))
|
Ok(Self::F16(data))
|
||||||
@ -361,6 +369,10 @@ impl CpuStorage {
|
|||||||
let data = unary_map(storage, layout, f16::from_f64);
|
let data = unary_map(storage, layout, f16::from_f64);
|
||||||
Ok(Self::F16(data))
|
Ok(Self::F16(data))
|
||||||
}
|
}
|
||||||
|
(Self::U8(storage), DType::F32) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v as f32);
|
||||||
|
Ok(Self::F32(data))
|
||||||
|
}
|
||||||
(Self::U32(storage), DType::F32) => {
|
(Self::U32(storage), DType::F32) => {
|
||||||
let data = unary_map(storage, layout, |v| v as f32);
|
let data = unary_map(storage, layout, |v| v as f32);
|
||||||
Ok(Self::F32(data))
|
Ok(Self::F32(data))
|
||||||
@ -381,6 +393,34 @@ impl CpuStorage {
|
|||||||
let data = unary_map(storage, layout, |v| v as f32);
|
let data = unary_map(storage, layout, |v| v as f32);
|
||||||
Ok(Self::F32(data))
|
Ok(Self::F32(data))
|
||||||
}
|
}
|
||||||
|
(Self::U8(storage), DType::U8) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v);
|
||||||
|
Ok(Self::U8(data))
|
||||||
|
}
|
||||||
|
(Self::BF16(storage), DType::U8) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v.to_f32() as u8);
|
||||||
|
Ok(Self::U8(data))
|
||||||
|
}
|
||||||
|
(Self::F16(storage), DType::U8) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v.to_f32() as u8);
|
||||||
|
Ok(Self::U8(data))
|
||||||
|
}
|
||||||
|
(Self::F32(storage), DType::U8) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v as u8);
|
||||||
|
Ok(Self::U8(data))
|
||||||
|
}
|
||||||
|
(Self::F64(storage), DType::U8) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v as u8);
|
||||||
|
Ok(Self::U8(data))
|
||||||
|
}
|
||||||
|
(Self::U8(storage), DType::U32) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v as u32);
|
||||||
|
Ok(Self::U32(data))
|
||||||
|
}
|
||||||
|
(Self::U32(storage), DType::U8) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v as u8);
|
||||||
|
Ok(Self::U8(data))
|
||||||
|
}
|
||||||
(Self::U32(storage), DType::U32) => {
|
(Self::U32(storage), DType::U32) => {
|
||||||
let data = unary_map(storage, layout, |v| v);
|
let data = unary_map(storage, layout, |v| v);
|
||||||
Ok(Self::U32(data))
|
Ok(Self::U32(data))
|
||||||
@ -401,6 +441,10 @@ impl CpuStorage {
|
|||||||
let data = unary_map(storage, layout, |v| v as u32);
|
let data = unary_map(storage, layout, |v| v as u32);
|
||||||
Ok(Self::U32(data))
|
Ok(Self::U32(data))
|
||||||
}
|
}
|
||||||
|
(Self::U8(storage), DType::F64) => {
|
||||||
|
let data = unary_map(storage, layout, |v| v as f64);
|
||||||
|
Ok(Self::F64(data))
|
||||||
|
}
|
||||||
(Self::U32(storage), DType::F64) => {
|
(Self::U32(storage), DType::F64) => {
|
||||||
let data = unary_map(storage, layout, |v| v as f64);
|
let data = unary_map(storage, layout, |v| v as f64);
|
||||||
Ok(Self::F64(data))
|
Ok(Self::F64(data))
|
||||||
@ -421,7 +465,6 @@ impl CpuStorage {
|
|||||||
let data = unary_map(storage, layout, |v| v);
|
let data = unary_map(storage, layout, |v| v);
|
||||||
Ok(Self::F64(data))
|
Ok(Self::F64(data))
|
||||||
}
|
}
|
||||||
_ => todo!("implement cast for {:?} {dtype:?}", self.dtype()),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user