#![cfg_attr(not(feature = "std"), no_std)]
extern crate alloc;
#[cfg(feature = "kernels")]
pub mod dequantize;
#[cfg(feature = "kernels")]
pub mod dequantize_tiled;
#[cfg(feature = "kernels")]
pub mod quantize;
#[cfg(feature = "kernels")]
pub mod layout;
#[cfg(feature = "kernels")]
pub mod scale;
pub use cubecl_common::quant::scheme;
#[cfg(feature = "kernels")]
pub(crate) mod utils {
use crate::scheme::{QuantScheme, QuantStore};
use cubecl::ir::{ElemType, UIntKind};
pub(crate) fn check_block_size_compat(scheme: &QuantScheme, div: usize) {
if let Some(block_size) = scheme.block_size() {
let block_size = *block_size.as_slice().last().unwrap() as usize;
assert!(
block_size.is_multiple_of(div),
"Block size must be divisible by {div}, got block_size={block_size}"
);
}
}
pub(crate) fn packed_storage_elem(scheme: &QuantScheme) -> ElemType {
match scheme.store {
QuantStore::PackedU32(_) => ElemType::UInt(UIntKind::U32),
store => panic!("Unsupported packed storage {store:?}"),
}
}
}