pub(crate) type Bitlen = u32;
pub(crate) type Weight = u32;
pub(crate) type DeltaLookback = u32;
pub const BITS_TO_ENCODE_ANS_SIZE_LOG: Bitlen = 4;
pub const BITS_TO_ENCODE_MODE_VARIANT: Bitlen = 4;
pub const BITS_TO_ENCODE_DELTA_ENCODING_VARIANT: Bitlen = 4;
pub const BITS_TO_ENCODE_DELTA_ENCODING_ORDER: Bitlen = 3;
pub const BITS_TO_ENCODE_DELTA_CONV_QUANTIZATION: Bitlen = 5;
pub const BITS_TO_ENCODE_DELTA_CONV_N_WEIGHTS: Bitlen = 5;
pub const BITS_TO_ENCODE_DELTA_LOOKBACK_WINDOW_N_LOG: Bitlen = 5;
pub const BITS_TO_ENCODE_DELTA_LOOKBACK_STATE_N_LOG: Bitlen = 4;
pub const BITS_TO_ENCODE_N_BINS: Bitlen = 15;
pub const BITS_TO_ENCODE_QUANTIZE_K: Bitlen = 8;
pub const BITS_TO_ENCODE_DICT_LEN: Bitlen = 25;
pub const OVERSHOOT_PADDING: usize = 9;
pub const MAX_BATCH_LATENT_VAR_SIZE: usize =
FULL_BATCH_N * (MAX_SUPPORTED_PRECISION_BYTES + MAX_ANS_BYTES) + OVERSHOOT_PADDING;
pub const MAX_ANS_BITS: Bitlen = 14;
pub const MAX_ANS_BYTES: usize = MAX_ANS_BITS.div_ceil(8) as usize;
pub const LIMITED_UNOPTIMIZED_BINS_LOG: Bitlen = 6;
pub const MAX_COMPRESSION_LEVEL: usize = 12;
pub const MAX_CONSECUTIVE_DELTA_ORDER: usize = 7;
pub const MAX_CONV1_DELTA_ORDER: usize = 32;
pub const MAX_CONV1_DELTA_QUANTIZATION: Bitlen = (1 << BITS_TO_ENCODE_DELTA_CONV_QUANTIZATION) - 1;
pub const MAX_ENTRIES: usize = 1 << 24;
pub const MAX_SUPPORTED_PRECISION: Bitlen = 128;
pub const MAX_SUPPORTED_PRECISION_BYTES: usize = (MAX_SUPPORTED_PRECISION / 8) as usize;
pub const MULT_REQUIRED_BITS_SAVED_PER_NUM: f64 = 0.5;
pub const QUANT_REQUIRED_BITS_SAVED_PER_NUM: f64 = 1.5;
pub const CLASSIC_MEMORIZABLE_BINS_LOG: Bitlen = 8;
pub const DEFAULT_COMPRESSION_LEVEL: usize = 8;
pub const DEFAULT_MAX_PAGE_N: usize = 1 << 18;
pub const ANS_INTERLEAVING: usize = 4;
pub const FULL_BATCH_N: usize = 256;
#[cfg(test)]
mod tests {
use crate::constants::*;
fn bits_to_encode(max_value: usize) -> Bitlen {
usize::BITS - max_value.leading_zeros()
}
fn assert_can_encode(n_bits: Bitlen, max_number: usize) {
assert!(n_bits >= bits_to_encode(max_number));
}
#[test]
fn test_bits_to_encode_delta_encoding_order() {
assert_can_encode(
BITS_TO_ENCODE_DELTA_ENCODING_ORDER,
MAX_CONSECUTIVE_DELTA_ORDER,
);
}
#[test]
fn test_ans_interleaving_fits_in_u64() {
assert!(ANS_INTERLEAVING * MAX_ANS_BITS as usize <= 57);
}
}