MCPcopy Create free account
hub / github.com/cosdata/cosdata / insert_vector

Method insert_vector

org/src/cluster_hierarchy.rs:114–148  ·  view source on GitHub ↗
(&mut self, vector: Vector)

Source from the content-addressed store, hash-verified

112 }
113
114 fn insert_vector(&mut self, vector: Vector) {
115 if self.children.len() < 10 {
116 self.children.push(HierarchicalCluster::new(
117 vector,
118 self.max_size,
119 self.level + 1,
120 ));
121 self.levels_below = 1; // Update levels_below
122 self.update_centroid();
123 return;
124 }
125
126 let mut best_similarity = -1.0;
127 let mut best_child_idx = 0;
128
129 for (idx, child) in self.children.iter().enumerate() {
130 let hypothetical_centroid = child.calculate_hypothetical_centroid(&vector);
131 let similarity = cosine_similarity(&vector, &hypothetical_centroid);
132
133 if similarity > best_similarity {
134 best_similarity = similarity;
135 best_child_idx = idx;
136 }
137 }
138
139 self.children[best_child_idx].insert_vector(vector);
140 // Update levels_below to be 1 + maximum levels among all children
141 self.levels_below = 1 + self
142 .children
143 .iter()
144 .map(|child| child.levels_below)
145 .max()
146 .unwrap_or(0);
147 self.update_centroid();
148 }
149
150 fn analyze_level(&self, target_level: usize, current_level: usize) -> Vec<usize> {
151 if current_level == target_level {

Callers 1

mainFunction · 0.80

Calls 7

update_centroidMethod · 0.80
maxMethod · 0.80
cosine_similarityFunction · 0.70
lenMethod · 0.45
pushMethod · 0.45
iterMethod · 0.45

Tested by

no test coverage detected