@@ -1023,6 +1023,7 @@ def process_single_candidate(
10231023 eval_ctx : CandidateEvaluationContext ,
10241024 exp_type : str ,
10251025 function_references : str ,
1026+ normalized_original : str ,
10261027 ) -> BestOptimization | None :
10271028 """Process a single optimization candidate.
10281029
@@ -1033,8 +1034,24 @@ def process_single_candidate(
10331034 get_run_tmp_file (Path (f"test_return_values_{ candidate_index } .bin" )).unlink (missing_ok = True )
10341035 get_run_tmp_file (Path (f"test_return_values_{ candidate_index } .sqlite" )).unlink (missing_ok = True )
10351036
1036- logger .info (f"h3|Optimization candidate { candidate_index } /{ total_candidates } :" )
10371037 candidate = candidate_node .candidate
1038+
1039+ normalized_code = normalize_code (candidate .source_code .flat .strip ())
1040+
1041+ if normalized_code == normalized_original :
1042+ logger .info (f"h3|Candidate { candidate_index } /{ total_candidates } : Identical to original code, skipping." )
1043+ console .rule ()
1044+ return None
1045+
1046+ if normalized_code in eval_ctx .ast_code_to_id :
1047+ logger .info (
1048+ f"h3|Candidate { candidate_index } /{ total_candidates } : Duplicate of a previous candidate, skipping."
1049+ )
1050+ eval_ctx .handle_duplicate_candidate (candidate , normalized_code , code_context )
1051+ console .rule ()
1052+ return None
1053+
1054+ logger .info (f"h3|Optimization candidate { candidate_index } /{ total_candidates } :" )
10381055 # Use correct extension based on language
10391056 ext = self .language_support .file_extensions [0 ]
10401057 code_print (
@@ -1062,13 +1079,6 @@ def process_single_candidate(
10621079 )
10631080 return None
10641081
1065- # Check for duplicate candidates
1066- normalized_code = normalize_code (candidate .source_code .flat .strip ())
1067- if normalized_code in eval_ctx .ast_code_to_id :
1068- logger .info ("Current candidate has been encountered before in testing, Skipping optimization candidate." )
1069- eval_ctx .handle_duplicate_candidate (candidate , normalized_code , code_context )
1070- return None
1071-
10721082 eval_ctx .register_new_candidate (normalized_code , candidate , code_context )
10731083
10741084 # Run the optimized candidate
@@ -1238,6 +1248,7 @@ def determine_best_candidate(
12381248 self .future_adaptive_optimizations ,
12391249 )
12401250 candidate_index = 0
1251+ normalized_original = normalize_code (code_context .read_writable_code .flat .strip ())
12411252
12421253 # Process candidates using queue-based approach
12431254 while not processor .is_done ():
@@ -1259,6 +1270,7 @@ def determine_best_candidate(
12591270 eval_ctx = eval_ctx ,
12601271 exp_type = exp_type ,
12611272 function_references = function_references ,
1273+ normalized_original = normalized_original ,
12621274 )
12631275 except KeyboardInterrupt as e :
12641276 logger .exception (f"Optimization interrupted: { e } " )
0 commit comments