-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Workflow Progress: 75%|███████████████████████████ | 3/4 [31:05<10:21, 621.75s/step, loop_index=0, step_index=3, step_name=feedback]2025-12-24 15:44:40.508 | INFO | rdagent.utils.workflow.loop:_run_step:213 - Start Loop 0, Step 3: feedback
Workflow Progress: 100%|██████████████████████████████| 4/4 [31:05<00:00, 466.31s/step, loop_index=1, step_index=0, step_name=direct_exp_gen]
╭──────────────────────────────────────────────────── Traceback (most recent call last) ────────────────────────────────────────────────────╮
│ /data/RD-Agent/rdagent/app/qlib_rd_loop/factor_from_report.py:173 in main │
│ │
│ 170 │ else: │
│ 171 │ │ model_loop = FactorReportLoop(report_folder=report_folder) │
│ 172 │ │
│ ❱ 173 │ asyncio.run(model_loop.run(all_duration=all_duration)) │
│ 174 │
│ 175 │
│ 176 if name == "main": │
│ │
│ ╭──────────────────────────────────────────────── locals ─────────────────────────────────────────────────╮ │
│ │ all_duration = None │ │
│ │ checkout = 'True' │ │
│ │ model_loop = <rdagent.app.qlib_rd_loop.factor_from_report.FactorReportLoop object at 0x7f6cd7983070> │ │
│ │ path = None │ │
│ │ report_folder = 'git_ignore_folder/reports' │ │
│ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /data/anaconda3/envs/rdagent/lib/python3.10/asyncio/runners.py:44 in run │
│ │
│ 41 │ │ events.set_event_loop(loop) │
│ 42 │ │ if debug is not None: │
│ 43 │ │ │ loop.set_debug(debug) │
│ ❱ 44 │ │ return loop.run_until_complete(main) │
│ 45 │ finally: │
│ 46 │ │ try: │
│ 47 │ │ │ _cancel_all_tasks(loop) │
│ │
│ ╭──────────────────────────────── locals ────────────────────────────────╮ │
│ │ debug = None │ │
│ │ loop = <_UnixSelectorEventLoop running=False closed=True debug=False> │ │
│ │ main = <coroutine object LoopBase.run at 0x7f6cd65ab450> │ │
│ ╰────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /data/anaconda3/envs/rdagent/lib/python3.10/asyncio/base_events.py:649 in run_until_complete │
│ │
│ 646 │ │ if not future.done(): │
│ 647 │ │ │ raise RuntimeError('Event loop stopped before Future completed.') │
│ 648 │ │ │
│ ❱ 649 │ │ return future.result() │
│ 650 │ │
│ 651 │ def stop(self): │
│ 652 │ │ """Stop running the event loop. │
│ │
│ ╭─────────────────────────────────────────────────────────────── locals ────────────────────────────────────────────────────────────────╮ │
│ │ future = <Task finished name='Task-1' coro=<LoopBase.run() done, defined at /data/RD-Agent/rdagent/utils/workflow/loop.py:341> │ │
│ │ exception=TypeError("'QlibFactorExperiment' object is not subscriptable")> │ │
│ │ new_task = True │ │
│ │ self = <_UnixSelectorEventLoop running=False closed=True debug=False> │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /data/RD-Agent/rdagent/utils/workflow/loop.py:379 in run │
│ │
│ 376 │ │ │ │ │ │ *[self.execute_loop() for _ in range(RD_AGENT_SETTINGS.get_max_p │
│ 377 │ │ │ │ │ ] │
│ 378 │ │ │ │ ] │
│ ❱ 379 │ │ │ │ await asyncio.gather(*tasks) │
│ 380 │ │ │ │ break │
│ 381 │ │ │ except self.LoopResumeError as e: │
│ 382 │ │ │ │ logger.warning(f"Stop all the routines and resume loop: {e}") │
│ │
│ ╭─────────────────────────────────────────────────────────────── locals ────────────────────────────────────────────────────────────────╮ │
│ │ all_duration = None │ │
│ │ loop_n = None │ │
│ │ self = <rdagent.app.qlib_rd_loop.factor_from_report.FactorReportLoop object at 0x7f6cd7983070> │ │
│ │ step_n = None │ │
│ │ t = <Task finished name='Task-3' coro=<LoopBase.execute_loop() done, defined at │ │
│ │ /data/RD-Agent/rdagent/utils/workflow/loop.py:324> exception=TypeError("'QlibFactorExperiment' object is not │ │
│ │ subscriptable")> │ │
│ │ tasks = [ │ │
│ │ │ <Task finished name='Task-2' coro=<LoopBase.kickoff_loop() done, defined at │ │
│ │ /data/RD-Agent/rdagent/utils/workflow/loop.py:301> result=None>, │ │
│ │ │ <Task finished name='Task-3' coro=<LoopBase.execute_loop() done, defined at │ │
│ │ /data/RD-Agent/rdagent/utils/workflow/loop.py:324> exception=TypeError("'QlibFactorExperiment' object is not │ │
│ │ subscriptable")> │ │
│ │ ] │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /data/RD-Agent/rdagent/utils/workflow/loop.py:335 in execute_loop │
│ │
│ 332 │ │ │ │ if self.step_idx[li] == len(self.steps) - 1: │
│ 333 │ │ │ │ │ # NOTE: assume the last step is record, it will be fast and affect t │
│ 334 │ │ │ │ │ # if it is the last step, run it directly () │
│ ❱ 335 │ │ │ │ │ await self._run_step(li) │
│ 336 │ │ │ │ else: │
│ 337 │ │ │ │ │ # await the step; parallel running happens here! │
│ 338 │ │ │ │ │ # Only trigger subprocess if we have more than one process. │
│ │
│ ╭──────────────────────────────────────────── locals ────────────────────────────────────────────╮ │
│ │ li = 0 │ │
│ │ self = <rdagent.app.qlib_rd_loop.factor_from_report.FactorReportLoop object at 0x7f6cd7983070> │ │
│ ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /data/RD-Agent/rdagent/utils/workflow/loop.py:242 in _run_step │
│ │
│ 239 │ │ │ │ │ │ │ result = await func(self.loop_prev_out[li]) │
│ 240 │ │ │ │ │ │ else: │
│ 241 │ │ │ │ │ │ │ # Default: run sync function directly │
│ ❱ 242 │ │ │ │ │ │ │ result = func(self.loop_prev_out[li]) │
│ 243 │ │ │ │ │ # Store result in the nested dictionary │
│ 244 │ │ │ │ │ self.loop_prev_out[li][name] = result │
│ 245 │ │ │ │ except Exception as e: │
│ │
│ ╭─────────────────────────────────────────────────────────────── locals ────────────────────────────────────────────────────────────────╮ │
│ │ current_step = 4 │ │
│ │ end = datetime.datetime(2025, 12, 24, 7, 44, 40, 509221, tzinfo=datetime.timezone.utc) │ │
│ │ force_subproc = False │ │
│ │ func = <bound method FactorReportLoop.feedback of <rdagent.app.qlib_rd_loop.factor_from_report.FactorReportLoop object at │ │
│ │ 0x7f6cd7983070>> │ │
│ │ li = 0 │ │
│ │ name = 'feedback' │ │
│ │ next_step = 0 │ │
│ │ next_step_idx = 4 │ │
│ │ self = <rdagent.app.qlib_rd_loop.factor_from_report.FactorReportLoop object at 0x7f6cd7983070> │ │
│ │ si = 3 │ │
│ │ start = datetime.datetime(2025, 12, 24, 7, 44, 40, 508955, tzinfo=datetime.timezone.utc) │ │
│ │ step_forward = True │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │
│ /data/RD-Agent/rdagent/app/qlib_rd_loop/factor_from_report.py:150 in feedback │
│ │
│ 147 │ │ │ │ decision=False, │
│ 148 │ │ │ ) │
│ 149 │ │ │ logger.log_object(feedback, tag="feedback") │
│ ❱ 150 │ │ │ self.trace.hist.append((prev_out["direct_exp_gen"]["exp_gen"], feedback)) │
│ 151 │ │ else: │
│ 152 │ │ │ feedback = self.summarizer.generate_feedback(prev_out["running"], self.trace │
│ 153 │ │ │ logger.log_object(feedback, tag="feedback") │
│ │
│ ╭─────────────────────────────────────────────────────────────── locals ────────────────────────────────────────────────────────────────╮ │
│ │ e = CoderError('Failed to run this experiment, because [1271695:MainThread](2025-12-24 15:44:04,732) INFO - qlib.qrun - │ │
│ │ [cli.py:78] - Render the template with the context: {}\n[1271695:MainThread](2025-12-24 15:44:04,744) INFO - │ │
│ │ qlib.Initialization - [config.py:420] - default_conf: client.\n[1271695:MainThread](2025-12-24 15:44:04,746) INFO - │ │
│ │ qlib.Initialization - [init.py:74] - qlib successfully initialized based on client │ │
│ │ settings.\n[1271695:MainThread](2025-12-24 15:44:04,746) INFO - qlib.Initialization - [init.py:76] - │ │
│ │ data_path={'__DEFAULT_FREQ': │ │
│ │ PosixPath('/root/.qlib/qlib_data/cn_data')}\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/mlflow/trac… │ │
│ │ FutureWarning: The filesystem tracking backend (e.g., './mlruns') will be deprecated in February 2026. Consider │ │
│ │ transitioning to a database backend (e.g., 'sqlite:///mlflow.db') to take advantage of the latest MLflow features. See │ │
│ │ mlflow/mlflow#18534 for more details and migration guidance. For migrating existing data, │ │
│ │ https://github.com/mlflow/mlflow-export-import can be used.\n return FileStore(store_uri, │ │
│ │ store_uri)\n[1271695:MainThread](2025-12-24 15:44:04,755) WARNING - qlib.workflow - [expm.py:231] - No valid experiment │ │
│ │ found. Create a new experiment with name workflow.\n[1271695:MainThread](2025-12-24 15:44:04,758) INFO - qlib.workflow - │ │
│ │ [exp.py:258] - Experiment 775926038887504147 starts running ...\n[1271695:MainThread](2025-12-24 15:44:05,102) INFO - │ │
│ │ qlib.workflow - [recorder.py:345] - Recorder 8c76937e37534d2dba4804218fbb0551 starts running under Experiment │ │
│ │ 775926038887504147 ...\n[1271695:MainThread](2025-12-24 15:44:19,577) INFO - qlib.timer - [log.py:127] - Time cost: │ │
│ │ 12.737s | Loading data Done\n[1271695:MainThread](2025-12-24 15:44:20,367) INFO - qlib.timer - [log.py:127] - Time cost: │ │
│ │ 0.015s | FilterCol │ │
│ │ Done\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/data/dataset/processor.py:296: │ │
│ │ SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame.\nTry using │ │
│ │ .loc[row_indexer,col_indexer] = value instead\n\nSee the caveats in the documentation: │ │
│ │ https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n df[self.cols] = │ │
│ │ X\n[1271695:MainThread](2025-12-24 15:44:20,745) INFO - qlib.timer - [log.py:127] - Time cost: 0.377s | RobustZScoreNorm │ │
│ │ Done\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/data/dataset/processor.py:192: │ │
│ │ SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame.\nTry using │ │
│ │ .loc[row_indexer,col_indexer] = value instead\n\nSee the caveats in the documentation: │ │
│ │ https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n │ │
│ │ df[self.fields_group] = df[self.fields_group].fillna(self.fill_value)\n[1271695:MainThread](2025-12-24 15:44:20,841) INFO │ │
│ │ - qlib.timer - [log.py:127] - Time cost: 0.096s | Fillna Done\n[1271695:MainThread](2025-12-24 15:44:20,911) INFO - │ │
│ │ qlib.timer - [log.py:127] - Time cost: 0.023s | DropnaLabel │ │
│ │ Done\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/data/dataset/processor.py:358: │ │
│ │ SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame.\nTry using │ │
│ │ .loc[row_indexer,col_indexer] = value instead\n\nSee the caveats in the documentation: │ │
│ │ https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n df[cols] = │ │
│ │ t\n[1271695:MainThread](2025-12-24 15:44:21,088) INFO - qlib.timer - [log.py:127] - Time cost: 0.176s | CSRankNorm │ │
│ │ Done\n[1271695:MainThread](2025-12-24 15:44:21,089) INFO - qlib.timer - [log.py:127] - Time cost: 1.511s | fit & process │ │
│ │ data Done\n[1271695:MainThread](2025-12-24 15:44:21,090) INFO - qlib.timer - [log.py:127] - Time cost: 14.250s | Init data │ │
│ │ Done\n[1271695:MainThread](2025-12-24 15:44:22,808) INFO - qlib.fill_placeholder - [init.py:798] - lookes like │ │
│ │ a placeholder, but it can't match to any given values\nGym has been unmaintained since 2022 and does not support NumPy │ │
│ │ 2.0 amongst other critical functionality.\nPlease upgrade to Gymnasium, the maintained drop-in replacement of Gym, or │ │
│ │ contact the authors of your software and request that they upgrade.\nUsers of this version of Gym should be able to simply │ │
│ │ replace 'import gym' with 'import gymnasium as gym' in the vast majority of cases.\nSee the migration guide at │ │
│ │ https://gymnasium.farama.org/introduction/migration_guide/ for additional information.\n[1271695:MainThread](2025-12-24 │ │
│ │ 15:44:23,037) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of │ │
│ │ the Experiment 775926038887504147\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: │ │
│ │ 0%| | 0/1 [00:00<?, ?it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading │ │
│ │ artifacts: 100%|██████████| 1/1 [00:00<00:00, 320.20it/s]\nDownloading artifacts: 100%|██████████| 1/1 [00:00<00:00, │ │
│ │ 313.08it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 0%| | 0/1 │ │
│ │ [00:00<?, ?it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 100%|██████████| │ │
│ │ 1/1 [00:00<00:00, 456.70it/s]\nDownloading artifacts: 100%|██████████| 1/1 [00:00<00:00, 444.55it/s]\n\nDownloading │ │
│ │ artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 0%| | 0/1 [00:00<?, │ │
│ │ ?it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 100%|██████████| 1/1 │ │
│ │ [00:00<00:00, 303.34it/s]\nDownloading artifacts: 100%|██████████| 1/1 [00:00<00:00, │ │
│ │ 297.49it/s]\n[1271695:MainThread](2025-12-24 15:44:23,513) INFO - qlib.backtest caller - [init.py:93] - Create new │ │
│ │ exchange\n[1271695:MainThread](2025-12-24 15:44:25,853) WARNING - qlib.online operator - [exchange.py:219] - $close field │ │
│ │ data contains nan.\n[1271695:MainThread](2025-12-24 15:44:25,854) WARNING - qlib.online operator - [exchange.py:219] - │ │
│ │ $close field data contains nan.\n[1271695:MainThread](2025-12-24 15:44:38,517) INFO - qlib.timer - [log.py:127] - Time │ │
│ │ cost: 0.000s | waiting async_log Done\n[1271695:MainThread](2025-12-24 15:44:38,519) ERROR - qlib.workflow - │ │
│ │ [utils.py:41] - An exception has been raised[ImportError: cannot import name 'eye_array' from 'scipy.sparse' │ │
│ │ (/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/scipy/sparse/init.py)].\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/bin/qrun", line 7, in \n sys.exit(run())\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/cli.py", line 153, in run\n │ │
│ │ fire.Fire(workflow)\n File "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/fire/core.py", line 135, in │ │
│ │ Fire\n component_trace = _Fire(component, args, parsed_flag_args, context, name)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/fire/core.py", line 468, in _Fire\n component, │ │
│ │ remaining_args = _CallAndUpdateTrace(\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/fire/core.py", line 684, in _CallAndUpdateTrace\n │ │
│ │ component = fn(*varargs, **kwargs)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/cli.py", line 147, in workflow\n recorder │ │
│ │ = task_train(config.get("task"), experiment_name=experiment_name)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/model/trainer.py", line 127, in task_train\n │ │
│ │ _exe_task(task_config)\n File "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/model/trainer.py", │ │
│ │ line 71, in _exe_task\n r.generate()\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/record_temp.py", line 236, in generate\n │ │
│ │ artifact_dict = self._generate(*args, **kwargs)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/record_temp.py", line 483, in _generate\n │ │
│ │ portfolio_metric_dict, indicator_dict = normal_backtest(\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/backtest/init.py", line 266, in backtest\n │ │
│ │ trade_strategy, trade_executor = get_strategy_executor(\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/backtest/init.py", line 209, in │ │
│ │ get_strategy_executor\n trade_strategy = init_instance_by_config(strategy, accept_types=BaseStrategy)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/utils/mod.py", line 177, in init_instance_by_config\n │ │
│ │ klass, cls_kwargs = get_callable_kwargs(config, default_module=default_module)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/utils/mod.py", line 100, in get_callable_kwargs\n │ │
│ │ module = get_module_by_module_path(m_path)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/utils/mod.py", line 45, in │ │
│ │ get_module_by_module_path\n module = importlib.import_module(module_path)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/importlib/init.py", line 126, in import_module\n return │ │
│ │ _bootstrap._gcd_import(name[level:], package, level)\n File "", line 1050, in _gcd_import\n │ │
│ │ File "", line 1027, in _find_and_load\n File "", line 1006, in │ │
│ │ _find_and_load_unlocked\n File "", line 688, in _load_unlocked\n File "<frozen │ │
│ │ importlib._bootstrap_external>", line 883, in exec_module\n File "", line 241, in │ │
│ │ _call_with_frames_removed\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/init.py", line 5, in \n │ │
│ │ from .signal_strategy import (\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/signal_strategy.py", line 22, in │ │
│ │ \n from qlib.contrib.strategy.optimizer import EnhancedIndexingOptimizer\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/optimizer/init.py", line 6, in │ │
│ │ \n from .enhanced_indexing import EnhancedIndexingOptimizer\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/optimizer/enhanced_indexing.py", │ │
│ │ line 5, in \n import cvxpy as cp\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/init.py", line 56, in \n from │ │
│ │ cvxpy.problems.problem import Problem as Problem\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/problems/problem.py", line 38, in \n from │ │
│ │ cvxpy.reductions import InverseData\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/init.py", line 24, in \n │ │
│ │ from cvxpy.reductions.dcp2cone.dcp2cone import Dcp2Cone\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/dcp2cone/dcp2cone.py", line 27, in │ │
│ │ \n from cvxpy.reductions.qp2quad_form.canonicalizers import QUAD_CANON_METHODS as quad_canon_methods\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/qp2quad_form/canonicalizers/init.py", │ │
│ │ line 24, in \n from cvxpy.reductions.qp2quad_form.canonicalizers.quad_over_lin_canon import *\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/qp2quad_form/canonicalizers/quad_over_li… │ │
│ │ line 17, in \n from scipy.sparse import eye_array\nTraining until validation scores don't improve for 50 │ │
│ │ rounds\n[20]\ttrain's l2: 0.987372\tvalid's l2: 0.993568\n[40]\ttrain's l2: 0.982951\tvalid's l2: │ │
│ │ 0.993464\n[60]\ttrain's l2: 0.979255\tvalid's l2: 0.993592\n[80]\ttrain's l2: 0.975992\tvalid's l2: 0.993831\nEarly │ │
│ │ stopping, best iteration is:\n[33]\ttrain's l2: 0.984242\tvalid's l2: 0.993447\n'The following are prediction results │ │
│ │ of the LGBModel model.'\n score\ndatetime instrument \n2017-01-03 SH600000 │ │
│ │ 0.026617\n SH600005 -0.042882\n SH600008 0.002217\n SH600009 0.033928\n │ │
│ │ SH600010 0.019995\n{'IC': 0.026776687523340698,\n 'ICIR': 0.22048558031034682,\n 'Rank IC': │ │
│ │ 0.039476654180915303,\n 'Rank ICIR': 0.3277049225666994}\nImportError: cannot import name 'eye_array' from │ │
│ │ 'scipy.sparse' (/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/scipy/sparse/init.py)\n') │ │
│ │ feedback = <rdagent.core.proposal.HypothesisFeedback object at 0x7f6cd58d3e50> │ │
│ │ prev_out = { │ │
│ │ │ '_LOOP_IDX': 0, │ │
│ │ │ 'direct_exp_gen': <rdagent.scenarios.qlib.experiment.factor_experiment.QlibFactorExperiment object at 0x7f6cdfecb760>, │ │
│ │ │ 'coding': <rdagent.scenarios.qlib.experiment.factor_experiment.QlibFactorExperiment object at 0x7f6cdfecb760>, │ │
│ │ │ 'running': None, │ │
│ │ │ '_EXCEPTION': CoderError('Failed to run this experiment, because [1271695:MainThread](2025-12-24 15:44:04,732) INFO - │ │
│ │ qlib.qrun - [cli.py:78] - Render the template with the context: {}\n[1271695:MainThread](2025-12-24 15:44:04,744) INFO - │ │
│ │ qlib.Initialization - [config.py:420] - default_conf: client.\n[1271695:MainThread](2025-12-24 15:44:04,746) INFO - │ │
│ │ qlib.Initialization - [init.py:74] - qlib successfully initialized based on client │ │
│ │ settings.\n[1271695:MainThread](2025-12-24 15:44:04,746) INFO - qlib.Initialization - [init.py:76] - │ │
│ │ data_path={'__DEFAULT_FREQ': │ │
│ │ PosixPath('/root/.qlib/qlib_data/cn_data')}\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/mlflow/trac… │ │
│ │ FutureWarning: The filesystem tracking backend (e.g., './mlruns') will be deprecated in February 2026. Consider │ │
│ │ transitioning to a database backend (e.g., 'sqlite:///mlflow.db') to take advantage of the latest MLflow features. See │ │
│ │ mlflow/mlflow#18534 for more details and migration guidance. For migrating existing data, │ │
│ │ https://github.com/mlflow/mlflow-export-import can be used.\n return FileStore(store_uri, │ │
│ │ store_uri)\n[1271695:MainThread](2025-12-24 15:44:04,755) WARNING - qlib.workflow - [expm.py:231] - No valid experiment │ │
│ │ found. Create a new experiment with name workflow.\n[1271695:MainThread](2025-12-24 15:44:04,758) INFO - qlib.workflow - │ │
│ │ [exp.py:258] - Experiment 775926038887504147 starts running ...\n[1271695:MainThread](2025-12-24 15:44:05,102) INFO - │ │
│ │ qlib.workflow - [recorder.py:345] - Recorder 8c76937e37534d2dba4804218fbb0551 starts running under Experiment │ │
│ │ 775926038887504147 ...\n[1271695:MainThread](2025-12-24 15:44:19,577) INFO - qlib.timer - [log.py:127] - Time cost: │ │
│ │ 12.737s | Loading data Done\n[1271695:MainThread](2025-12-24 15:44:20,367) INFO - qlib.timer - [log.py:127] - Time cost: │ │
│ │ 0.015s | FilterCol │ │
│ │ Done\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/data/dataset/processor.py:296: │ │
│ │ SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame.\nTry using │ │
│ │ .loc[row_indexer,col_indexer] = value instead\n\nSee the caveats in the documentation: │ │
│ │ https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n df[self.cols] = │ │
│ │ X\n[1271695:MainThread](2025-12-24 15:44:20,745) INFO - qlib.timer - [log.py:127] - Time cost: 0.377s | RobustZScoreNorm │ │
│ │ Done\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/data/dataset/processor.py:192: │ │
│ │ SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame.\nTry using │ │
│ │ .loc[row_indexer,col_indexer] = value instead\n\nSee the caveats in the documentation: │ │
│ │ https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n │ │
│ │ df[self.fields_group] = df[self.fields_group].fillna(self.fill_value)\n[1271695:MainThread](2025-12-24 15:44:20,841) INFO │ │
│ │ - qlib.timer - [log.py:127] - Time cost: 0.096s | Fillna Done\n[1271695:MainThread](2025-12-24 15:44:20,911) INFO - │ │
│ │ qlib.timer - [log.py:127] - Time cost: 0.023s | DropnaLabel │ │
│ │ Done\n/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/data/dataset/processor.py:358: │ │
│ │ SettingWithCopyWarning: \nA value is trying to be set on a copy of a slice from a DataFrame.\nTry using │ │
│ │ .loc[row_indexer,col_indexer] = value instead\n\nSee the caveats in the documentation: │ │
│ │ https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n df[cols] = │ │
│ │ t\n[1271695:MainThread](2025-12-24 15:44:21,088) INFO - qlib.timer - [log.py:127] - Time cost: 0.176s | CSRankNorm │ │
│ │ Done\n[1271695:MainThread](2025-12-24 15:44:21,089) INFO - qlib.timer - [log.py:127] - Time cost: 1.511s | fit & process │ │
│ │ data Done\n[1271695:MainThread](2025-12-24 15:44:21,090) INFO - qlib.timer - [log.py:127] - Time cost: 14.250s | Init data │ │
│ │ Done\n[1271695:MainThread](2025-12-24 15:44:22,808) INFO - qlib.fill_placeholder - [init.py:798] - lookes like │ │
│ │ a placeholder, but it can't match to any given values\nGym has been unmaintained since 2022 and does not support NumPy │ │
│ │ 2.0 amongst other critical functionality.\nPlease upgrade to Gymnasium, the maintained drop-in replacement of Gym, or │ │
│ │ contact the authors of your software and request that they upgrade.\nUsers of this version of Gym should be able to simply │ │
│ │ replace 'import gym' with 'import gymnasium as gym' in the vast majority of cases.\nSee the migration guide at │ │
│ │ https://gymnasium.farama.org/introduction/migration_guide/ for additional information.\n[1271695:MainThread](2025-12-24 │ │
│ │ 15:44:23,037) INFO - qlib.workflow - [record_temp.py:198] - Signal record 'pred.pkl' has been saved as the artifact of │ │
│ │ the Experiment 775926038887504147\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: │ │
│ │ 0%| | 0/1 [00:00<?, ?it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading │ │
│ │ artifacts: 100%|██████████| 1/1 [00:00<00:00, 320.20it/s]\nDownloading artifacts: 100%|██████████| 1/1 [00:00<00:00, │ │
│ │ 313.08it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 0%| | 0/1 │ │
│ │ [00:00<?, ?it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 100%|██████████| │ │
│ │ 1/1 [00:00<00:00, 456.70it/s]\nDownloading artifacts: 100%|██████████| 1/1 [00:00<00:00, 444.55it/s]\n\nDownloading │ │
│ │ artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 0%| | 0/1 [00:00<?, │ │
│ │ ?it/s]\n\nDownloading artifacts: 0%| | 0/1 [00:00<?, ?it/s]\nDownloading artifacts: 100%|██████████| 1/1 │ │
│ │ [00:00<00:00, 303.34it/s]\nDownloading artifacts: 100%|██████████| 1/1 [00:00<00:00, │ │
│ │ 297.49it/s]\n[1271695:MainThread](2025-12-24 15:44:23,513) INFO - qlib.backtest caller - [init.py:93] - Create new │ │
│ │ exchange\n[1271695:MainThread](2025-12-24 15:44:25,853) WARNING - qlib.online operator - [exchange.py:219] - $close field │ │
│ │ data contains nan.\n[1271695:MainThread](2025-12-24 15:44:25,854) WARNING - qlib.online operator - [exchange.py:219] - │ │
│ │ $close field data contains nan.\n[1271695:MainThread](2025-12-24 15:44:38,517) INFO - qlib.timer - [log.py:127] - Time │ │
│ │ cost: 0.000s | waiting async_log Done\n[1271695:MainThread](2025-12-24 15:44:38,519) ERROR - qlib.workflow - │ │
│ │ [utils.py:41] - An exception has been raised[ImportError: cannot import name 'eye_array' from 'scipy.sparse' │ │
│ │ (/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/scipy/sparse/init.py)].\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/bin/qrun", line 7, in \n sys.exit(run())\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/cli.py", line 153, in run\n │ │
│ │ fire.Fire(workflow)\n File "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/fire/core.py", line 135, in │ │
│ │ Fire\n component_trace = _Fire(component, args, parsed_flag_args, context, name)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/fire/core.py", line 468, in _Fire\n component, │ │
│ │ remaining_args = _CallAndUpdateTrace(\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/fire/core.py", line 684, in _CallAndUpdateTrace\n │ │
│ │ component = fn(*varargs, **kwargs)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/cli.py", line 147, in workflow\n recorder │ │
│ │ = task_train(config.get("task"), experiment_name=experiment_name)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/model/trainer.py", line 127, in task_train\n │ │
│ │ _exe_task(task_config)\n File "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/model/trainer.py", │ │
│ │ line 71, in _exe_task\n r.generate()\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/record_temp.py", line 236, in generate\n │ │
│ │ artifact_dict = self._generate(*args, **kwargs)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/workflow/record_temp.py", line 483, in _generate\n │ │
│ │ portfolio_metric_dict, indicator_dict = normal_backtest(\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/backtest/init.py", line 266, in backtest\n │ │
│ │ trade_strategy, trade_executor = get_strategy_executor(\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/backtest/init.py", line 209, in │ │
│ │ get_strategy_executor\n trade_strategy = init_instance_by_config(strategy, accept_types=BaseStrategy)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/utils/mod.py", line 177, in init_instance_by_config\n │ │
│ │ klass, cls_kwargs = get_callable_kwargs(config, default_module=default_module)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/utils/mod.py", line 100, in get_callable_kwargs\n │ │
│ │ module = get_module_by_module_path(m_path)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/utils/mod.py", line 45, in │ │
│ │ get_module_by_module_path\n module = importlib.import_module(module_path)\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/importlib/init.py", line 126, in import_module\n return │ │
│ │ _bootstrap._gcd_import(name[level:], package, level)\n File "", line 1050, in _gcd_import\n │ │
│ │ File "", line 1027, in _find_and_load\n File "", line 1006, in │ │
│ │ _find_and_load_unlocked\n File "", line 688, in _load_unlocked\n File "<frozen │ │
│ │ importlib._bootstrap_external>", line 883, in exec_module\n File "", line 241, in │ │
│ │ _call_with_frames_removed\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/init.py", line 5, in \n │ │
│ │ from .signal_strategy import (\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/signal_strategy.py", line 22, in │ │
│ │ \n from qlib.contrib.strategy.optimizer import EnhancedIndexingOptimizer\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/optimizer/init.py", line 6, in │ │
│ │ \n from .enhanced_indexing import EnhancedIndexingOptimizer\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/qlib/contrib/strategy/optimizer/enhanced_indexing.py", │ │
│ │ line 5, in \n import cvxpy as cp\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/init.py", line 56, in \n from │ │
│ │ cvxpy.problems.problem import Problem as Problem\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/problems/problem.py", line 38, in \n from │ │
│ │ cvxpy.reductions import InverseData\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/init.py", line 24, in \n │ │
│ │ from cvxpy.reductions.dcp2cone.dcp2cone import Dcp2Cone\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/dcp2cone/dcp2cone.py", line 27, in │ │
│ │ \n from cvxpy.reductions.qp2quad_form.canonicalizers import QUAD_CANON_METHODS as quad_canon_methods\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/qp2quad_form/canonicalizers/init.py", │ │
│ │ line 24, in \n from cvxpy.reductions.qp2quad_form.canonicalizers.quad_over_lin_canon import *\n File │ │
│ │ "/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/cvxpy/reductions/qp2quad_form/canonicalizers/quad_over_li… │ │
│ │ line 17, in \n from scipy.sparse import eye_array\nTraining until validation scores don't improve for 50 │ │
│ │ rounds\n[20]\ttrain's l2: 0.987372\tvalid's l2: 0.993568\n[40]\ttrain's l2: 0.982951\tvalid's l2: │ │
│ │ 0.993464\n[60]\ttrain's l2: 0.979255\tvalid's l2: 0.993592\n[80]\ttrain's l2: 0.975992\tvalid's l2: 0.993831\nEarly │ │
│ │ stopping, best iteration is:\n[33]\ttrain's l2: 0.984242\tvalid's l2: 0.993447\n'The following are prediction results │ │
│ │ of the LGBModel model.'\n score\ndatetime instrument \n2017-01-03 SH600000 │ │
│ │ 0.026617\n SH600005 -0.042882\n SH600008 0.002217\n SH600009 0.033928\n │ │
│ │ SH600010 0.019995\n{'IC': 0.026776687523340698,\n 'ICIR': 0.22048558031034682,\n 'Rank IC': │ │
│ │ 0.039476654180915303,\n 'Rank ICIR': 0.3277049225666994}\nImportError: cannot import name 'eye_array' from │ │
│ │ 'scipy.sparse' (/data/anaconda3/envs/rdagent4qlib/lib/python3.10/site-packages/scipy/sparse/init.py)\n') │ │
│ │ } │ │
│ │ self = <rdagent.app.qlib_rd_loop.factor_from_report.FactorReportLoop object at 0x7f6cd7983070>