From 1fef03d3f313cd7c021a5976100c31c505f9efd6 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Tue, 20 May 2025 14:35:11 -0400 Subject: [PATCH 1/3] Update function_optimizer.py --- codeflash/optimization/function_optimizer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/codeflash/optimization/function_optimizer.py b/codeflash/optimization/function_optimizer.py index dc12b2aac..a09734ef8 100644 --- a/codeflash/optimization/function_optimizer.py +++ b/codeflash/optimization/function_optimizer.py @@ -392,6 +392,7 @@ def determine_best_candidate( try: candidate_index = 0 original_len = len(candidates) + # TODO replace while true with something safer, we dont want accidental infinite loops while True: done = True if future_line_profile_results is None else future_line_profile_results.done() if done and (future_line_profile_results is not None): From 9b6dfc4c83fa14af0a655c482181db777018a526 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Tue, 20 May 2025 23:31:01 -0400 Subject: [PATCH 2/3] safer loop --- codeflash/optimization/function_optimizer.py | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/codeflash/optimization/function_optimizer.py b/codeflash/optimization/function_optimizer.py index a09734ef8..5f4a7fd3c 100644 --- a/codeflash/optimization/function_optimizer.py +++ b/codeflash/optimization/function_optimizer.py @@ -392,8 +392,7 @@ def determine_best_candidate( try: candidate_index = 0 original_len = len(candidates) - # TODO replace while true with something safer, we dont want accidental infinite loops - while True: + while candidates: done = True if future_line_profile_results is None else future_line_profile_results.done() if done and (future_line_profile_results is not None): line_profile_results = future_line_profile_results.result() @@ -403,13 +402,7 @@ def determine_best_candidate( f"Added results from line profiler to candidates, total candidates now: {original_len}" ) future_line_profile_results = None - try: - candidate = candidates.popleft() - except IndexError: - if done: - break - time.sleep(0.1) - continue + candidate = candidates.popleft() candidate_index += 1 get_run_tmp_file(Path(f"test_return_values_{candidate_index}.bin")).unlink(missing_ok=True) get_run_tmp_file(Path(f"test_return_values_{candidate_index}.sqlite")).unlink(missing_ok=True) @@ -518,8 +511,15 @@ def determine_best_candidate( self.write_code_and_helpers( self.function_to_optimize_source_code, original_helper_code, self.function_to_optimize.file_path ) - if done and not candidates: - break + if (not len(candidates)) and (not done): # all original candidates processed but lp results haven't been processed + concurrent.futures.wait([future_line_profile_results]) + line_profile_results = future_line_profile_results.result() + candidates.extend(line_profile_results) + original_len += len(line_profile_results) + logger.info( + f"Added results from line profiler to candidates, total candidates now: {original_len}" + ) + future_line_profile_results = None except KeyboardInterrupt as e: self.write_code_and_helpers( self.function_to_optimize_source_code, original_helper_code, self.function_to_optimize.file_path From 9d6efd22fbb1634bdcbb48d29e4c86cb15436386 Mon Sep 17 00:00:00 2001 From: Aseem Saxena Date: Wed, 21 May 2025 16:14:32 -0400 Subject: [PATCH 3/3] precommit fix --- codeflash/optimization/function_optimizer.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/codeflash/optimization/function_optimizer.py b/codeflash/optimization/function_optimizer.py index 753810331..fe4357839 100644 --- a/codeflash/optimization/function_optimizer.py +++ b/codeflash/optimization/function_optimizer.py @@ -511,7 +511,9 @@ def determine_best_candidate( self.write_code_and_helpers( self.function_to_optimize_source_code, original_helper_code, self.function_to_optimize.file_path ) - if (not len(candidates)) and (not done): # all original candidates processed but lp results haven't been processed + if (not len(candidates)) and ( + not done + ): # all original candidates processed but lp results haven't been processed concurrent.futures.wait([future_line_profile_results]) line_profile_results = future_line_profile_results.result() candidates.extend(line_profile_results)