use bytemuck::{Pod, Zeroable};
use half::f16;
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ4_0 {
pub d: f16, pub qs: [u8; 16], }
impl BlockQ4_0 {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 18;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ4_1 {
pub d: f16,
pub m: f16,
pub qs: [u8; 16],
}
impl BlockQ4_1 {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 20;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ5_0 {
pub d: f16,
pub qh: [u8; 4],
pub qs: [u8; 16],
}
impl BlockQ5_0 {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 22;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ5_1 {
pub d: f16,
pub m: f16,
pub qh: [u8; 4],
pub qs: [u8; 16],
}
impl BlockQ5_1 {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 24;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ8_0 {
pub d: f16,
pub qs: [i8; 32],
}
impl BlockQ8_0 {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 34;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ8_1 {
pub d: f32,
pub qs: [i8; 32],
}
impl BlockQ8_1 {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 36;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ2K {
pub scales: [u8; 16],
pub qs: [u8; 64],
pub d: f16,
pub dmin: f16,
}
impl BlockQ2K {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 84;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ3K {
pub hmask: [u8; 32],
pub qs: [u8; 64],
pub scales: [u8; 12],
pub d: f16,
}
impl BlockQ3K {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 110;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ4K {
pub d: f16,
pub dmin: f16,
pub scales: [u8; 12],
pub qs: [u8; 128],
}
impl BlockQ4K {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 144;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ5K {
pub d: f16,
pub dmin: f16,
pub scales: [u8; 12],
pub qh: [u8; 32],
pub qs: [u8; 128],
}
impl BlockQ5K {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 176;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ6K {
pub ql: [u8; 128],
pub qh: [u8; 64],
pub scales: [i8; 16],
pub d: f16,
}
impl BlockQ6K {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 210;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockQ8K {
pub d: f32,
pub qs: [i8; 256],
pub bsums: [i16; 16],
}
impl BlockQ8K {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 292;
}
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ1S {
pub d: f16, pub qs: [u8; 32], pub qh: [u16; 8], }
impl BlockIQ1S {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 50; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ1M {
pub qs: [u8; 32], pub qh: [u8; 16], pub scales: [u8; 8], }
impl BlockIQ1M {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 56; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ2XXS {
pub d: f16, pub qs: [u16; 32], }
impl BlockIQ2XXS {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 66; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ2XS {
pub d: f16, pub qs: [u16; 32], pub scales: [u8; 8], }
impl BlockIQ2XS {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 74; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ2S {
pub d: f16, pub qs: [u8; 64], pub qh: [u8; 8], pub scales: [u8; 8], }
impl BlockIQ2S {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 82; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ3XXS {
pub d: f16, pub qs: [u8; 96], }
impl BlockIQ3XXS {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 98; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ3S {
pub d: f16, pub qs: [u8; 64], pub qh: [u8; 32], pub signs: [u8; 8], pub scales: [u8; 4], }
impl BlockIQ3S {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 110; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ4XS {
pub d: f16, pub scales_h: u16, pub scales_l: [u8; 4], pub qs: [u8; 128], }
impl BlockIQ4XS {
pub const BLOCK_SIZE: usize = 256;
pub const TYPE_SIZE: usize = 136; }
#[repr(C)]
#[derive(Debug, Clone, Copy, Pod, Zeroable)]
pub struct BlockIQ4NL {
pub d: f16, pub qs: [u8; 16], }
impl BlockIQ4NL {
pub const BLOCK_SIZE: usize = 32;
pub const TYPE_SIZE: usize = 18; }
const _: () = {
assert!(std::mem::size_of::<BlockQ4_0>() == BlockQ4_0::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ4_1>() == BlockQ4_1::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ5_0>() == BlockQ5_0::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ5_1>() == BlockQ5_1::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ8_0>() == BlockQ8_0::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ8_1>() == BlockQ8_1::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ2K>() == BlockQ2K::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ3K>() == BlockQ3K::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ4K>() == BlockQ4K::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ5K>() == BlockQ5K::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ6K>() == BlockQ6K::TYPE_SIZE);
assert!(std::mem::size_of::<BlockQ8K>() == BlockQ8K::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ1S>() == BlockIQ1S::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ1M>() == BlockIQ1M::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ2XXS>() == BlockIQ2XXS::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ2XS>() == BlockIQ2XS::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ2S>() == BlockIQ2S::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ3XXS>() == BlockIQ3XXS::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ3S>() == BlockIQ3S::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ4XS>() == BlockIQ4XS::TYPE_SIZE);
assert!(std::mem::size_of::<BlockIQ4NL>() == BlockIQ4NL::TYPE_SIZE);
};