@@ -103,7 +103,7 @@ def test_generate_knntriplets_under_edge(k_genuine, k_impostor, T_test):
103
103
104
104
105
105
@pytest .mark .parametrize ("k_genuine, k_impostor," ,
106
- [(2 , 3 ), (3 , 3 ), (2 , 4 ), (3 , 4 )])
106
+ [(3 , 3 ), (2 , 4 ), (3 , 4 ), (10 , 9 ), ( 144 , 33 )])
107
107
def test_generate_knntriplets (k_genuine , k_impostor ):
108
108
"""Checks edge and over the edge cases of knn triplet construction with not
109
109
enough neighbors"""
@@ -118,8 +118,23 @@ def test_generate_knntriplets(k_genuine, k_impostor):
118
118
X = np .array ([[0 , 0 ], [2 , 2 ], [4 , 4 ], [8 , 8 ], [16 , 16 ], [32 , 32 ], [33 , 33 ]])
119
119
y = np .array ([1 , 1 , 1 , 2 , 2 , 2 , - 1 ])
120
120
121
- T = Constraints (y ).generate_knntriplets (X , k_genuine , k_impostor )
122
-
121
+ msg1 = ("The class 1 has 3 elements, which is not sufficient to "
122
+ f"generate { k_genuine + 1 } genuine neighbors "
123
+ "as specified by k_genuine" )
124
+ msg2 = ("The class 2 has 3 elements, which is not sufficient to "
125
+ f"generate { k_genuine + 1 } genuine neighbors "
126
+ "as specified by k_genuine" )
127
+ msg3 = ("The class 1 has 3 elements of other classes, which is "
128
+ f"not sufficient to generate { k_impostor } impostor "
129
+ "neighbors as specified by k_impostor" )
130
+ msg4 = ("The class 2 has 3 elements of other classes, which is "
131
+ f"not sufficient to generate { k_impostor } impostor "
132
+ "neighbors as specified by k_impostor" )
133
+ msgs = [msg1 , msg2 , msg3 , msg4 ]
134
+ with pytest .warns (UserWarning ) as user_warning :
135
+ T = Constraints (y ).generate_knntriplets (X , k_genuine , k_impostor )
136
+ assert any ([[msg in str (warn .message ) for msg in msgs ]
137
+ for warn in user_warning ])
123
138
assert np .array_equal (sorted (T .tolist ()), T_test )
124
139
125
140
0 commit comments