File size: 5,195 Bytes
38bc0dc | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | 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}')
|