"git@developer.sourcefind.cn:tianlh/lightgbm-dcu.git" did not exist on "f53116af34b0080c83f8becd3dc79dc41b06d11b"
Unverified Commit 163416d2 authored by James Lamb's avatar James Lamb Committed by GitHub
Browse files

[python-package] fix mypy errors related to eval result parsing in callbacks (#6096)

parent 0b3d9da2
...@@ -131,6 +131,11 @@ class _RecordEvaluationCallback: ...@@ -131,6 +131,11 @@ class _RecordEvaluationCallback:
self.eval_result = eval_result self.eval_result = eval_result
def _init(self, env: CallbackEnv) -> None: def _init(self, env: CallbackEnv) -> None:
if env.evaluation_result_list is None:
raise RuntimeError(
"record_evaluation() callback enabled but no evaluation results found. This is a probably bug in LightGBM. "
"Please report it at https://github.com/microsoft/LightGBM/issues"
)
self.eval_result.clear() self.eval_result.clear()
for item in env.evaluation_result_list: for item in env.evaluation_result_list:
if len(item) == 4: # regular train if len(item) == 4: # regular train
...@@ -147,6 +152,11 @@ class _RecordEvaluationCallback: ...@@ -147,6 +152,11 @@ class _RecordEvaluationCallback:
def __call__(self, env: CallbackEnv) -> None: def __call__(self, env: CallbackEnv) -> None:
if env.iteration == env.begin_iteration: if env.iteration == env.begin_iteration:
self._init(env) self._init(env)
if env.evaluation_result_list is None:
raise RuntimeError(
"record_evaluation() callback enabled but no evaluation results found. This is a probably bug in LightGBM. "
"Please report it at https://github.com/microsoft/LightGBM/issues"
)
for item in env.evaluation_result_list: for item in env.evaluation_result_list:
if len(item) == 4: if len(item) == 4:
data_name, eval_name, result = item[:3] data_name, eval_name, result = item[:3]
...@@ -285,6 +295,10 @@ class _EarlyStoppingCallback: ...@@ -285,6 +295,10 @@ class _EarlyStoppingCallback:
return (ds_name == "cv_agg" and eval_name == "train") or ds_name == train_name return (ds_name == "cv_agg" and eval_name == "train") or ds_name == train_name
def _init(self, env: CallbackEnv) -> None: def _init(self, env: CallbackEnv) -> None:
if env.evaluation_result_list is None or env.evaluation_result_list == []:
raise ValueError(
"For early stopping, at least one dataset and eval metric is required for evaluation"
)
is_dart = any(env.params.get(alias, "") == 'dart' for alias in _ConfigAliases.get("boosting")) is_dart = any(env.params.get(alias, "") == 'dart' for alias in _ConfigAliases.get("boosting"))
only_train_set = ( only_train_set = (
len(env.evaluation_result_list) == 1 len(env.evaluation_result_list) == 1
...@@ -300,9 +314,6 @@ class _EarlyStoppingCallback: ...@@ -300,9 +314,6 @@ class _EarlyStoppingCallback:
elif only_train_set: elif only_train_set:
_log_warning('Only training set found, disabling early stopping.') _log_warning('Only training set found, disabling early stopping.')
return return
if not env.evaluation_result_list:
raise ValueError('For early stopping, '
'at least one dataset and eval metric is required for evaluation')
if self.stopping_rounds <= 0: if self.stopping_rounds <= 0:
raise ValueError("stopping_rounds should be greater than zero.") raise ValueError("stopping_rounds should be greater than zero.")
...@@ -364,6 +375,11 @@ class _EarlyStoppingCallback: ...@@ -364,6 +375,11 @@ class _EarlyStoppingCallback:
self._init(env) self._init(env)
if not self.enabled: if not self.enabled:
return return
if env.evaluation_result_list is None:
raise RuntimeError(
"early_stopping() callback enabled but no evaluation results found. This is a probably bug in LightGBM. "
"Please report it at https://github.com/microsoft/LightGBM/issues"
)
# self.best_score_list is initialized to an empty list # self.best_score_list is initialized to an empty list
first_time_updating_best_score_list = (self.best_score_list == []) first_time_updating_best_score_list = (self.best_score_list == [])
for i in range(len(env.evaluation_result_list)): for i in range(len(env.evaluation_result_list)):
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment