@@ -264,24 +264,55 @@ def test_f1_micro_1d_list():
264264 assert 0.5 == f1 (y_true , y_pred , "micro" )
265265
266266
267+ def test_f1_micro_1d_list_zero_division ():
268+ y_true = [1 , 2 , 3 , 4 ]
269+ y_pred = [5 , 6 , 7 , 8 ]
270+ assert 0.0 == f1 (y_true , y_pred , "micro" )
271+ assert 1.0 == f1 (y_true , y_pred , "micro" , 1.0 )
272+ assert np .isnan (f1 (y_true , y_pred , "micro" , np .nan ))
273+
274+
267275def test_f1_micro_2d_list ():
268276 y_true = [[1 , 2 , 3 , 4 ], [1 , 2 , 5 , 6 ]]
269277 y_pred = [[1 , 2 , 5 , 6 ], [1 , 2 , 3 , 4 ]]
270278 assert 0.5 == f1 (y_true , y_pred , "micro" )
271279
272280
281+ def test_f1_micro_2d_list_zero_division ():
282+ y_true = [[1 , 2 , 3 , 4 ], [5 , 6 , 7 , 8 ]]
283+ y_pred = [[5 , 6 , 7 , 8 ], [1 , 2 , 3 , 4 ]]
284+ assert 0.0 == f1 (y_true , y_pred , "micro" )
285+ assert 1.0 == f1 (y_true , y_pred , "micro" , 1.0 )
286+
287+
273288def test_f1_micro_1d_np_array ():
274289 y_true = np .array ([1 , 2 , 3 , 4 ])
275290 y_pred = np .array ([1 , 2 , 5 , 6 ])
276291 assert 0.5 == f1 (y_true , y_pred , "micro" )
277292
278293
294+ def test_f1_micro_1d_np_array_zero_division ():
295+ y_true = np .array ([1 , 2 , 3 , 4 ])
296+ y_pred = np .array ([5 , 6 , 7 , 8 ])
297+ assert 0.0 == f1 (y_true , y_pred , "micro" )
298+ assert 1.0 == f1 (y_true , y_pred , "micro" , 1.0 )
299+ assert np .isnan (f1 (y_true , y_pred , "micro" , np .nan ))
300+
301+
279302def test_f1_micro_2d_np_array ():
280303 y_true = np .array ([[1 , 2 , 3 , 4 ], [1 , 2 , 5 , 6 ]])
281304 y_pred = np .array ([[1 , 2 , 5 , 6 ], [1 , 2 , 3 , 4 ]])
282305 assert 0.5 == f1 (y_true , y_pred , "micro" )
283306
284307
308+ def test_f1_micro_2d_np_array_zero_division ():
309+ y_true = np .array ([[1 , 2 , 3 , 4 ], [5 , 6 , 7 , 8 ]])
310+ y_pred = np .array ([[5 , 6 , 7 , 8 ], [1 , 2 , 3 , 4 ]])
311+ assert 0.0 == f1 (y_true , y_pred , "micro" )
312+ assert 1.0 == f1 (y_true , y_pred , "micro" , 1.0 )
313+ assert np .isnan (f1 (y_true , y_pred , "micro" , np .nan ))
314+
315+
285316def test_f1_micro_3d_np_array ():
286317 y_true = np .array (
287318 [
@@ -299,30 +330,80 @@ def test_f1_micro_3d_np_array():
299330 assert 1 == f1 (y_true , y_true , "micro" )
300331
301332
333+ def test_f1_micro_3d_np_array_zero_division ():
334+ y_true = np .array (
335+ [
336+ [["a" , "b" ], ["c" , "d" ]],
337+ [["e" , "f" ], ["g" , "h" ]],
338+ ]
339+ )
340+ y_pred = np .array (
341+ [
342+ [["i" , "j" ], ["k" , "l" ]],
343+ [["m" , "n" ], ["o" , "p" ]],
344+ ]
345+ )
346+ assert 0.0 == f1 (y_true , y_pred , "micro" )
347+ assert 1.0 == f1 (y_true , y_pred , "micro" , 1.0 )
348+ assert np .isnan (f1 (y_true , y_pred , "micro" , np .nan ))
349+
350+
302351def test_f1_macro_1d_list ():
303352 y_true = [1 , 2 , 3 , 4 ]
304353 y_pred = [1 , 2 , 3 , 4 ]
305354 assert 1 == f1 (y_true , y_pred , "macro" )
306355
307356
357+ def test_f1_macro_1d_list_zero_division ():
358+ y_true = [1 , 2 , 3 , 4 ]
359+ y_pred = [5 , 6 , 7 , 8 ]
360+ assert 0.0 == f1 (y_true , y_pred , "macro" )
361+ assert 1.0 == f1 (y_true , y_pred , "macro" , 1.0 )
362+ assert np .isnan (f1 (y_true , y_pred , "macro" , np .nan ))
363+
364+
308365def test_f1_macro_2d_list ():
309366 y_true = [[1 , 2 , 3 , 4 ], [1 , 2 , 5 , 6 ]]
310367 y_pred = [[1 , 5 , 6 ], [1 , 2 , 3 ]]
311368 assert 0.4285714 == approx (f1 (y_true , y_pred , "macro" ))
312369
313370
371+ def test_f1_macro_2d_list_zero_division ():
372+ y_true = [[1 , 2 , 3 , 4 ], [5 , 6 , 7 , 8 ]]
373+ y_pred = [[5 , 6 , 7 , 8 ], [1 , 2 , 3 , 4 ]]
374+ assert 0.0 == f1 (y_true , y_pred , "macro" )
375+ assert 1.0 == f1 (y_true , y_pred , "macro" , 1.0 )
376+ assert np .isnan (f1 (y_true , y_pred , "macro" , np .nan ))
377+
378+
314379def test_f1_macro_1d_np_array ():
315380 y_true = np .array ([1 , 2 , 3 , 4 ])
316381 y_pred = np .array ([1 , 2 , 3 , 4 ])
317382 assert 1 == f1 (y_true , y_pred , "macro" )
318383
319384
385+ def test_f1_macro_1d_np_array_zero_division ():
386+ y_true = np .array ([1 , 2 , 3 , 4 ])
387+ y_pred = np .array ([5 , 6 , 7 , 8 ])
388+ assert 0.0 == f1 (y_true , y_pred , "macro" )
389+ assert 1.0 == f1 (y_true , y_pred , "macro" , 1.0 )
390+ assert np .isnan (f1 (y_true , y_pred , "macro" , np .nan ))
391+
392+
320393def test_f1_macro_2d_np_array ():
321394 y_true = np .array ([[1 , 2 , 3 , 4 ], [1 , 2 , 5 , 6 ]])
322395 y_pred = np .array ([[1 , 5 , 6 ], [1 , 2 , 3 ]])
323396 assert 0.4285714 == approx (f1 (y_true , y_pred , "macro" ))
324397
325398
399+ def test_f1_macro_2d_np_array_zero_division ():
400+ y_true = np .array ([[1 , 2 , 3 , 4 ], [5 , 6 , 7 , 8 ]])
401+ y_pred = np .array ([[5 , 6 , 7 , 8 ], [1 , 2 , 3 , 4 ]])
402+ assert 0.0 == f1 (y_true , y_pred , "macro" )
403+ assert 1.0 == f1 (y_true , y_pred , "macro" , 1.0 )
404+ assert np .isnan (f1 (y_true , y_pred , "macro" , np .nan ))
405+
406+
326407def test_f1_macro_3d_np_array ():
327408 y_true = np .array (
328409 [
@@ -340,6 +421,24 @@ def test_f1_macro_3d_np_array():
340421 assert 1 == f1 (y_true , y_true , "macro" )
341422
342423
424+ def test_f1_macro_3d_np_array_zero_division ():
425+ y_true = np .array (
426+ [
427+ [["a" , "b" ], ["c" , "d" ]],
428+ [["e" , "f" ], ["g" , "h" ]],
429+ ]
430+ )
431+ y_pred = np .array (
432+ [
433+ [["i" , "j" ], ["k" , "l" ]],
434+ [["m" , "n" ], ["o" , "p" ]],
435+ ]
436+ )
437+ assert 0.0 == f1 (y_true , y_pred , "macro" )
438+ assert 1.0 == f1 (y_true , y_pred , "macro" , 1.0 )
439+ assert np .isnan (f1 (y_true , y_pred , "macro" , np .nan ))
440+
441+
343442def test_empty_levels_2d_list_1 ():
344443 y_true = [["2" , "3" ], ["1" ], ["4" , "5" , "6" ]]
345444 y_pred = [["1" ], ["2" , "3" ], ["4" , "5" , "6" ]]
0 commit comments