()
| 61 | } |
| 62 | |
| 63 | fn main() { |
| 64 | // Initialize the lookup table once |
| 65 | initialize_u16_lookup_table(); |
| 66 | println!("done"); |
| 67 | |
| 68 | let size = 64; |
| 69 | let min = 0.0; |
| 70 | let max = 1.0; |
| 71 | let vec1 = (0..size) |
| 72 | .map(|_| { |
| 73 | let mut rng = rand::thread_rng(); |
| 74 | let random_number: f32 = rng.gen_range(min..max); |
| 75 | random_number |
| 76 | }) |
| 77 | .collect::<Vec<f32>>(); |
| 78 | |
| 79 | let vec2 = (0..size) |
| 80 | .map(|_| { |
| 81 | let mut rng = rand::thread_rng(); |
| 82 | let random_number: f32 = rng.gen_range(min..max); |
| 83 | random_number |
| 84 | }) |
| 85 | .collect::<Vec<f32>>(); |
| 86 | |
| 87 | println!("raw vec A :{:?}", vec1); |
| 88 | println!("raw vec B :{:?}", vec2); |
| 89 | |
| 90 | let resolution = 1 as u8; |
| 91 | let quantized_values1: Vec<Vec<u32>> = quantize_to_u32_bits(&vec1.clone(), resolution); |
| 92 | let quantized_values2: Vec<Vec<u32>> = quantize_to_u32_bits(&vec2.clone(), resolution); |
| 93 | |
| 94 | let vector_list1 = VectorQt { |
| 95 | quant_vec: quantized_values1, |
| 96 | resolution: resolution, |
| 97 | }; |
| 98 | let vector_list2 = VectorQt { |
| 99 | quant_vec: quantized_values2, |
| 100 | resolution: resolution, |
| 101 | }; |
| 102 | println!("quantized vec A :{:?}", vector_list1); |
| 103 | println!("quantized vec B :{:?}", vector_list2); |
| 104 | |
| 105 | let normal = cosine_similarity(&vec1, &vec2); |
| 106 | println!("cs <normal>: {}", normal); |
| 107 | println!("\n\n"); |
| 108 | |
| 109 | let scalar_quant_cs = cosine_similarity_new(&vector_list1, &vector_list2); |
| 110 | println!("scalar_quant_cs : {}", scalar_quant_cs); |
| 111 | } |
| 112 | |
| 113 | fn precompute_lookup_table() -> [[u8; 16]; 16] { |
| 114 | let mut table = [[0; 16]; 16]; |
nothing calls this directly
no test coverage detected