@@ -16,6 +16,49 @@ def test_early_stop_rejects_invalid_patience() -> None:
1616 early_stop (key = "val_loss" , patience = 0 )
1717
1818
19+ def test_early_stop_explicit_min_mode_matches_default () -> None :
20+ events = [{"val_loss" : loss } for loss in [5.0 , 4.0 , 4.0 , 4.0 , 3.0 ]]
21+
22+ result_default = list (early_stop (key = "val_loss" , patience = 2 )(events ))
23+ result_explicit = list (early_stop (key = "val_loss" , patience = 2 , mode = "min" , min_delta = 0.0 )(events ))
24+
25+ assert result_explicit == result_default
26+
27+
28+ def test_early_stop_supports_max_mode () -> None :
29+ events = [{"val_acc" : value } for value in [0.50 , 0.60 , 0.60 , 0.59 , 0.70 ]]
30+
31+ result = list (early_stop (key = "val_acc" , patience = 2 , mode = "max" )(events ))
32+
33+ assert [event ["val_acc" ] for event in result ] == [0.50 , 0.60 , 0.60 , 0.59 ]
34+
35+
36+ def test_early_stop_min_delta_for_min_mode () -> None :
37+ events = [{"val_loss" : value } for value in [1.00 , 0.95 , 0.92 , 0.85 ]]
38+
39+ result = list (early_stop (key = "val_loss" , patience = 2 , min_delta = 0.1 )(events ))
40+
41+ assert [event ["val_loss" ] for event in result ] == [1.00 , 0.95 , 0.92 ]
42+
43+
44+ def test_early_stop_min_delta_for_max_mode () -> None :
45+ events = [{"val_acc" : value } for value in [0.50 , 0.53 , 0.56 , 0.57 , 0.58 ]]
46+
47+ result = list (early_stop (key = "val_acc" , patience = 2 , mode = "max" , min_delta = 0.05 )(events ))
48+
49+ assert [event ["val_acc" ] for event in result ] == [0.50 , 0.53 , 0.56 , 0.57 , 0.58 ]
50+
51+
52+ def test_early_stop_rejects_invalid_mode () -> None :
53+ with pytest .raises (ValueError ):
54+ early_stop (key = "val_loss" , patience = 2 , mode = "lower" ) # type: ignore[arg-type]
55+
56+
57+ def test_early_stop_rejects_negative_min_delta () -> None :
58+ with pytest .raises (ValueError ):
59+ early_stop (key = "val_loss" , patience = 2 , min_delta = - 0.1 )
60+
61+
1962def test_early_stop_is_pipe_stage () -> None :
2063 events = [{"val_loss" : loss } for loss in [5.0 , 4.0 , 4.0 , 4.0 , 3.0 ]]
2164
0 commit comments