Code Duplication    Length = 19-19 lines in 2 locations

pyclustering/cluster/agglomerative.py 2 locations

@@ 250-268 (lines=19) @@
247
        self.__centers.pop(indexes[1]);    # remove merged center.
248
    
249
    
250
    def __merge_by_complete_link(self):
251
        """!
252
        @brief Merges the most similar clusters in line with complete link type.
253
        
254
        """
255
        
256
        minimum_complete_distance = float('Inf');
257
        indexes = None;
258
        
259
        for index_cluster1 in range(0, len(self.__clusters)):
260
            for index_cluster2 in range(index_cluster1 + 1, len(self.__clusters)):
261
                candidate_maximum_distance = self.__calculate_farthest_distance(index_cluster1, index_cluster2);
262
                
263
                if (candidate_maximum_distance < minimum_complete_distance):
264
                    minimum_complete_distance = candidate_maximum_distance;
265
                    indexes = [index_cluster1, index_cluster2];
266
267
        self.__clusters[indexes[0]] += self.__clusters[indexes[1]];  
268
        self.__clusters.pop(indexes[1]);   # remove merged cluster.        
269
    
270
    
271
    def __calculate_farthest_distance(self, index_cluster1, index_cluster2):
@@ 208-226 (lines=19) @@
205
        
206
        minimum_average_distance = float('Inf');
207
        
208
        for index_cluster1 in range(0, len(self.__clusters)):
209
            for index_cluster2 in range(index_cluster1 + 1, len(self.__clusters)):
210
                
211
                # Find farthest objects
212
                candidate_average_distance = 0.0;
213
                for index_object1 in self.__clusters[index_cluster1]:
214
                    for index_object2 in self.__clusters[index_cluster2]:
215
                        candidate_average_distance += euclidean_distance_sqrt(self.__pointer_data[index_object1], self.__pointer_data[index_object2]);
216
                
217
                candidate_average_distance /= (len(self.__clusters[index_cluster1]) + len(self.__clusters[index_cluster2]));
218
                
219
                if (candidate_average_distance < minimum_average_distance):
220
                    minimum_average_distance = candidate_average_distance;
221
                    indexes = [index_cluster1, index_cluster2];
222
        
223
        self.__clusters[indexes[0]] += self.__clusters[indexes[1]];  
224
        self.__clusters.pop(indexes[1]);   # remove merged cluster.  
225
        
226
    
227
    def __merge_by_centroid_link(self):
228
        """!
229
        @brief Merges the most similar clusters in line with centroid link type.