(
quantization_metric: &QuantizationMetric,
storage_type: StorageType,
dim: usize,
prop_file: &RwLock<File>,
version: VersionNumber,
offset_counter: &HNSWIndexFileOffsetCounter
| 42 | |
| 43 | #[allow(clippy::too_many_arguments)] |
| 44 | pub fn create_root_node( |
| 45 | quantization_metric: &QuantizationMetric, |
| 46 | storage_type: StorageType, |
| 47 | dim: usize, |
| 48 | prop_file: &RwLock<File>, |
| 49 | version: VersionNumber, |
| 50 | offset_counter: &HNSWIndexFileOffsetCounter, |
| 51 | cache: &HNSWIndexCache, |
| 52 | values_range: (f32, f32), |
| 53 | hnsw_params: &HNSWHyperParams, |
| 54 | distance_metric: DistanceMetric, |
| 55 | metadata_schema: Option<&MetadataSchema>, |
| 56 | ) -> Result<SharedLatestNode, WaCustomError> { |
| 57 | let vec = (0..dim) |
| 58 | .map(|_| { |
| 59 | let mut rng = rand::thread_rng(); |
| 60 | |
| 61 | let random_number: f32 = rng.gen_range(values_range.0..values_range.1); |
| 62 | random_number |
| 63 | }) |
| 64 | .collect::<Vec<f32>>(); |
| 65 | let vec_hash = InternalId::from(u32::MAX); |
| 66 | |
| 67 | let vector_list = Arc::new(quantization_metric.quantize(&vec, storage_type, values_range)?); |
| 68 | |
| 69 | let mut prop_file_guard = prop_file.write().unwrap(); |
| 70 | let location = write_prop_value_to_file(&vec_hash, &vector_list, &mut prop_file_guard)?; |
| 71 | |
| 72 | let prop_value = Arc::new(NodePropValue { |
| 73 | id: vec_hash, |
| 74 | vec: vector_list, |
| 75 | location, |
| 76 | }); |
| 77 | |
| 78 | let prop_metadata = match metadata_schema { |
| 79 | Some(schema) => { |
| 80 | let mbits = schema.base_dimensions(); |
| 81 | let metadata = Arc::new(Metadata { mag: 0.0, mbits }); |
| 82 | // A root node is similar to a base replica node. Hence |
| 83 | // the replica_id and prop_value's id are same. |
| 84 | let replica_id = vec_hash; |
| 85 | let location = |
| 86 | write_prop_metadata_to_file(replica_id, metadata.clone(), &mut prop_file_guard)?; |
| 87 | Some(Arc::new(NodePropMetadata { |
| 88 | replica_id: vec_hash, |
| 89 | vec: metadata, |
| 90 | location, |
| 91 | })) |
| 92 | } |
| 93 | None => None, |
| 94 | }; |
| 95 | |
| 96 | drop(prop_file_guard); |
| 97 | |
| 98 | let file_id = offset_counter.file_id(); |
| 99 | |
| 100 | let mut root = LazyItem::new( |
| 101 | ProbNode::new( |
no test coverage detected