From 2c1f546c1f2f19b33a63ebdf488570294fb873b8 Mon Sep 17 00:00:00 2001 From: konglingbai Date: Wed, 24 Dec 2025 22:20:18 +0800 Subject: [PATCH 1/2] [fix] handler_mod func don't work when dealing None end date --- qlib/workflow/task/gen.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/qlib/workflow/task/gen.py b/qlib/workflow/task/gen.py index bd98e501db1..7517e21f9b2 100644 --- a/qlib/workflow/task/gen.py +++ b/qlib/workflow/task/gen.py @@ -106,12 +106,11 @@ def handler_mod(task: dict, rolling_gen): rg (RollingGen): an instance of RollingGen """ try: - interval = rolling_gen.ta.cal_interval( - task["dataset"]["kwargs"]["handler"]["kwargs"]["end_time"], - task["dataset"]["kwargs"]["segments"][rolling_gen.test_key][1], - ) - # if end_time < the end of test_segments, then change end_time to allow load more data - if interval < 0: + handler_end_time = task["dataset"]["kwargs"]["handler"]["kwargs"]["end_time"] + test_seg_end_time = task["dataset"]["kwargs"]["segments"][rolling_gen.test_key][1] + # if the end of test_segments is None (open-ended segment, i.e., "until now") or end_time < the end of test_segments, + # then change end_time to allow load more data + if test_seg_end_time is None or rolling_gen.ta.cal_interval(handler_end_time, test_seg_end_time) < 0: task["dataset"]["kwargs"]["handler"]["kwargs"]["end_time"] = copy.deepcopy( task["dataset"]["kwargs"]["segments"][rolling_gen.test_key][1] ) From d16bd6c2b94f296d55aef6e06e4314e81ff89a5d Mon Sep 17 00:00:00 2001 From: Linlang Date: Thu, 25 Dec 2025 17:35:22 +0800 Subject: [PATCH 2/2] refactor: avoid deep access by extracting handler_kwargs and using get(end_time) --- qlib/workflow/task/gen.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/qlib/workflow/task/gen.py b/qlib/workflow/task/gen.py index 7517e21f9b2..f13a4af7c1f 100644 --- a/qlib/workflow/task/gen.py +++ b/qlib/workflow/task/gen.py @@ -106,14 +106,13 @@ def handler_mod(task: dict, rolling_gen): rg (RollingGen): an instance of RollingGen """ try: - handler_end_time = task["dataset"]["kwargs"]["handler"]["kwargs"]["end_time"] + handler_kwargs = task["dataset"]["kwargs"]["handler"]["kwargs"] + handler_end_time = handler_kwargs.get("end_time") test_seg_end_time = task["dataset"]["kwargs"]["segments"][rolling_gen.test_key][1] - # if the end of test_segments is None (open-ended segment, i.e., "until now") or end_time < the end of test_segments, + # if the end of test_segments is None (open-ended segment, i.e., "until now") or end_time < the end of test_segments, # then change end_time to allow load more data if test_seg_end_time is None or rolling_gen.ta.cal_interval(handler_end_time, test_seg_end_time) < 0: - task["dataset"]["kwargs"]["handler"]["kwargs"]["end_time"] = copy.deepcopy( - task["dataset"]["kwargs"]["segments"][rolling_gen.test_key][1] - ) + handler_kwargs["end_time"] = copy.deepcopy(test_seg_end_time) except KeyError: # Maybe dataset do not have handler, then do nothing. pass