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}')