-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode_efficiency.py
More file actions
104 lines (91 loc) · 2.87 KB
/
code_efficiency.py
File metadata and controls
104 lines (91 loc) · 2.87 KB
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
import time
import sys
import traceback
import os
import ast
# Log file setup
LOG_FILE = os.path.join(os.path.dirname(__file__), "devstral_eval_log.txt")
def log_message(message, error=False):
"""Log a message with timestamp to both console and file."""
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
formatted = f"[{timestamp}] {message}"
print(formatted)
try:
with open(LOG_FILE, "a") as f:
f.write(formatted + "\n")
except Exception as e:
if not error:
print(f"Failed to write to log: {e}")
def evaluate_complexity(code):
"""Measure code complexity based on AST node count."""
try:
tree = ast.parse(code)
num_nodes = len(list(ast.walk(tree)))
log_message(f"Code complexity (AST nodes): {num_nodes}")
return num_nodes
except Exception as e:
log_message(f"AST parsing failed: {e}", error=True)
traceback.print_exc(file=sys.stdout)
return 0
def safe_exec(code, namespace):
"""Safely execute generated code and return success."""
try:
exec(code, namespace)
log_message("Code executed successfully.")
return True
except Exception as e:
log_message(f"Execution error: {e}", error=True)
traceback.print_exc(file=sys.stdout)
return False
def generate_code_snippet(code_template):
"""Generate code from template, measure time, complexity, and validity."""
start_time = time.perf_counter()
try:
compiled_code = compile(code_template, "<string>", "exec")
log_message("Code generated successfully.")
except Exception as e:
log_message(f"Error compiling code: {e}", error=True)
traceback.print_exc(file=sys.stdout)
return None, 0
end_time = time.perf_counter()
elapsed = end_time - start_time
log_message(f"Generated code in {elapsed:.4f} seconds")
complexity = evaluate_complexity(code_template)
success = safe_exec(compiled_code, {})
return compiled_code, elapsed, complexity, success
def generate_function():
"""Generate a simple function."""
code = """
def add(a, b):
return a + b
"""
return generate_code_snippet(code)
def generate_class():
"""Generate a simple class."""
code = """
class Calculator:
def add(self, a, b):
return a + b
"""
return generate_code_snippet(code)
def generate_cli_tool():
"""Generate a CLI tool."""
code = """
import sys
def main():
print("Hello, World!")
if __name__ == "__main__":
main()
"""
return generate_code_snippet(code)
def main():
"""Main function to coordinate the evaluation process."""
try:
generate_function()
generate_class()
generate_cli_tool()
except Exception as e:
log_message(f"Error during evaluation process: {e}", error=True)
traceback.print_exc(file=sys.stdout)
if __name__ == "__main__":
main()