| import sys | |
| import os | |
| from typing import Dict, Any | |
| current_dir = os.path.dirname(os.path.abspath(__file__)) | |
| parent_dir = os.path.dirname(current_dir) | |
| if parent_dir not in sys.path: | |
| sys.path.insert(0, parent_dir) | |
| from scoring_api import evaluate | |
| from phase2.candidate_generator import CandidateGenerator | |
| from phase2.validation import CodeValidator | |
| from phase2.selector import CandidateSelector | |
| class IterativeOptimizer: | |
| def __init__(self, target_score: float = 15.0, max_iterations: int = 2): | |
| self.target_score = target_score | |
| self.max_iterations = max_iterations | |
| self.generator = CandidateGenerator() | |
| self.validator = CodeValidator() | |
| self.selector = CandidateSelector() | |
| def optimize(self, initial_code: str) -> Dict[str, Any]: | |
| initial_eval = evaluate(initial_code) | |
| initial_score = initial_eval.get('risk_score', 100) | |
| current_code = initial_code | |
| best_overall_candidate = None | |
| best_overall_score = initial_score | |
| iteration_history = [] | |
| print(f"Initial Code Risk Score: {initial_score} (Target: <= {self.target_score})") | |
| if initial_score <= self.target_score: | |
| print("Code already satisfies target maintainability score.") | |
| return { | |
| 'initial_code': initial_code, | |
| 'final_code': initial_code, | |
| 'initial_score': initial_score, | |
| 'final_score': initial_score, | |
| 'best_candidate_details': None, | |
| 'history': [], | |
| 'iterations_run': 0 | |
| } | |
| for iteration in range(1, self.max_iterations + 1): | |
| print(f"\n--- Starting Optimization Iteration {iteration}/{self.max_iterations} ---") | |
| raw_candidates = self.generator.generate_candidates(current_code) | |
| valid_candidates = self.validator.filter_valid_candidates(initial_code, raw_candidates) | |
| if not valid_candidates: | |
| print("No valid candidates generated in this iteration. Halting optimization.") | |
| break | |
| best_iteration_candidate = self.selector.select_best(valid_candidates) | |
| if best_iteration_candidate is None: | |
| print("Failed to score candidates in this iteration. Halting optimization.") | |
| break | |
| current_score = best_iteration_candidate.get('risk_score', 100) | |
| strategy_used = best_iteration_candidate['candidate_data'].get('strategy', 'Refactor') | |
| print(f"Best candidate in iteration {iteration} [{strategy_used}] achieved risk score: {current_score}") | |
| iteration_history.append({ | |
| 'iteration': iteration, | |
| 'best_candidate': best_iteration_candidate | |
| }) | |
| if current_score < best_overall_score: | |
| best_overall_score = current_score | |
| best_overall_candidate = best_iteration_candidate | |
| current_code = best_iteration_candidate['candidate_data']['code'] | |
| else: | |
| print("No further risk reduction in this iteration.") | |
| if best_overall_score <= self.target_score: | |
| print(f"Target score of {self.target_score} achieved! Stopping early.") | |
| break | |
| final_code = best_overall_candidate['candidate_data']['code'] if best_overall_candidate else current_code | |
| print("\n=== Optimization Process Complete ===") | |
| print(f"Initial Risk Score: {initial_score} -> Final Best Score: {best_overall_score}") | |
| return { | |
| 'initial_code': initial_code, | |
| 'final_code': final_code, | |
| 'initial_score': initial_score, | |
| 'final_score': best_overall_score, | |
| 'best_candidate_details': best_overall_candidate, | |
| 'history': iteration_history, | |
| 'iterations_run': len(iteration_history) | |
| } | |
| if __name__ == '__main__': | |
| try: | |
| sys.stdout.reconfigure(encoding='utf-8') | |
| except Exception: | |
| pass | |
| print('Initializing Iterative Optimizer...') | |
| try: | |
| optimizer = IterativeOptimizer(target_score=10.0, max_iterations=2) | |
| sample_code = ''' | |
| global_counter = 0 | |
| def bloated_pipeline(data): | |
| global global_counter | |
| try: | |
| for x in data: | |
| if x > 0: | |
| for i in range(x): | |
| try: | |
| if i % 2 == 0: | |
| global_counter += 1 | |
| except: | |
| pass | |
| except Exception: | |
| return -1 | |
| return global_counter | |
| ''' | |
| print('Starting optimization on sample code...') | |
| result = optimizer.optimize(sample_code) | |
| print('\n=== Final Optimization Report ===') | |
| print('Initial Code:\n', result['initial_code']) | |
| print('\nFinal Optimized Code:\n', result['final_code']) | |
| print('\nTotal Iterations:', result['iterations_run']) | |
| print('Final Score:', result['final_score']) | |
| except Exception as e: | |
| print(f'Error during execution: {e}') |