From 03e26e55ff489fa1dbaa3bb7736cd32eb01905b2 Mon Sep 17 00:00:00 2001 From: WinstonLiyt <104308117+WinstonLiyt@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:01:07 +0800 Subject: [PATCH] fix_some_errors_when_debug_factor (#84) * update all code * update --- .../coder/factor_coder/CoSTEER/evolving_agent.py | 2 +- rdagent/components/coder/factor_coder/factor.py | 14 ++++++++------ .../qlib/factor_experiment_loader/pdf_loader.py | 3 ++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/rdagent/components/coder/factor_coder/CoSTEER/evolving_agent.py b/rdagent/components/coder/factor_coder/CoSTEER/evolving_agent.py index feee0ef7..e6ad776b 100644 --- a/rdagent/components/coder/factor_coder/CoSTEER/evolving_agent.py +++ b/rdagent/components/coder/factor_coder/CoSTEER/evolving_agent.py @@ -14,6 +14,6 @@ class FactorRAGEvoAgent(RAGEvoAgent): assert len(evo.sub_workspace_list) == len(feedback) for index in range(len(evo.sub_workspace_list)): - if not feedback[index].final_decision: + if feedback[index] is not None and not feedback[index].final_decision: evo.sub_workspace_list[index].clear() return evo diff --git a/rdagent/components/coder/factor_coder/factor.py b/rdagent/components/coder/factor_coder/factor.py index bdf84036..5c9b7390 100644 --- a/rdagent/components/coder/factor_coder/factor.py +++ b/rdagent/components/coder/factor_coder/factor.py @@ -141,6 +141,7 @@ class FactorFBWorkspace(FBWorkspace): self.link_data_to_workspace(source_data_path, self.workspace_path) execution_feedback = self.FB_EXECUTION_SUCCEEDED + execution_success = False try: subprocess.check_output( f"{FACTOR_IMPLEMENT_SETTINGS.python_bin} {code_path}", @@ -149,6 +150,7 @@ class FactorFBWorkspace(FBWorkspace): stderr=subprocess.STDOUT, timeout=FACTOR_IMPLEMENT_SETTINGS.file_based_execution_timeout, ) + execution_success = True except subprocess.CalledProcessError as e: import site @@ -169,18 +171,18 @@ class FactorFBWorkspace(FBWorkspace): raise RuntimeErrorException(execution_feedback) workspace_output_file_path = self.workspace_path / "result.h5" - if not workspace_output_file_path.exists(): - execution_feedback += self.FB_OUTPUT_FILE_NOT_FOUND - executed_factor_value_dataframe = None - if self.raise_exception: - raise NoOutputException(execution_feedback) - else: + if workspace_output_file_path.exists() and execution_success: try: executed_factor_value_dataframe = pd.read_hdf(workspace_output_file_path) execution_feedback += self.FB_OUTPUT_FILE_FOUND except Exception as e: execution_feedback += f"Error found when reading hdf file: {e}"[:1000] executed_factor_value_dataframe = None + else: + execution_feedback += self.FB_OUTPUT_FILE_NOT_FOUND + executed_factor_value_dataframe = None + if self.raise_exception: + raise NoOutputException(execution_feedback) if store_result and executed_factor_value_dataframe is not None: self.executed_factor_value_dataframe = executed_factor_value_dataframe diff --git a/rdagent/scenarios/qlib/factor_experiment_loader/pdf_loader.py b/rdagent/scenarios/qlib/factor_experiment_loader/pdf_loader.py index 5fd0d209..c9390fc7 100644 --- a/rdagent/scenarios/qlib/factor_experiment_loader/pdf_loader.py +++ b/rdagent/scenarios/qlib/factor_experiment_loader/pdf_loader.py @@ -196,7 +196,7 @@ def __extract_factor_and_formulation_from_one_report( factor_dict, ) for factor_name in factor_dict: - if factor_name not in factor_to_formulation: + if factor_name not in factor_to_formulation or "formulation" not in factor_to_formulation[factor_name] or "variables" not in factor_to_formulation[factor_name]: continue final_factor_dict_to_one_report.setdefault(factor_name, {}) @@ -515,4 +515,5 @@ class FactorExperimentLoaderFromPDFfiles(FactorExperimentLoader): factor_viability, filtered_factor_dict = check_factor_viability(factor_dict) # factor_dict, duplication_names_list = deduplicate_factors_by_llm(factor_dict, factor_viability) + return FactorExperimentLoaderFromDict().load(filtered_factor_dict)