@@ -44,3 +44,46 @@ def testGettingItems(self):
44
44
# After adding them, all labels should be retrievable
45
45
returned_items = p .get_items (labels )
46
46
self .assertSequenceEqual (data .tolist (), returned_items )
47
+
48
+
49
+ def testGettingItems (self ):
50
+ print ("\n **** Getting the data by layer ****\n " )
51
+
52
+ dim = 16
53
+ num_elements = 10000
54
+
55
+ # Generating sample data
56
+ data = np .float32 (np .random .random ((num_elements , dim )))
57
+ labels = np .arange (0 , num_elements )
58
+
59
+ # Declaring index
60
+ p = hnswlib .Index (space = 'l2' , dim = dim ) # possible options are l2, cosine or ip
61
+
62
+ # Initiating index
63
+ # max_elements - the maximum number of elements, should be known beforehand
64
+ # (probably will be made optional in the future)
65
+ #
66
+ # ef_construction - controls index search speed/build speed tradeoff
67
+ # M - is tightly connected with internal dimensionality of the data
68
+ # strongly affects the memory consumption
69
+
70
+ p .init_index (max_elements = num_elements , ef_construction = 100 , M = 16 )
71
+
72
+ # Controlling the recall by setting ef:
73
+ # higher ef leads to better accuracy, but slower search
74
+ p .set_ef (100 )
75
+
76
+ p .set_num_threads (4 ) # by default using all available cores
77
+
78
+ # Before adding anything, getting any labels should fail
79
+ self .assertRaises (Exception , lambda : p .get_items (labels ))
80
+
81
+ print ("Adding all elements (%d)" % (len (data )))
82
+ p .add_items (data , labels )
83
+
84
+ # After adding them, all labels should be retrievable
85
+ returned_items = p .get_items (labels )
86
+ self .assertSequenceEqual (data .tolist (), returned_items )
87
+
88
+ data = p .getFirstLayer (layer = 0 )
89
+ print (data )
0 commit comments