| import json | |
| from typing import Callable, List | |
| def check_id(data: dict, task_id: str): | |
| assert data[task_id]["task_id"] == f"HumanEval/{task_id}" | |
| def evolve(src_file: str, tgt_file: str, fix: Callable): | |
| with open(src_file) as f: | |
| data = [json.loads(line) for line in f.readlines() if line] | |
| data = fix(data) | |
| with open(tgt_file, "wb") as f: | |
| for x in data: | |
| f.write((json.dumps(x) + "\n").encode("utf-8")) | |
| def replay_contract(data: dict, tid: int) -> dict: | |
| code = data[tid]["prompt"] + data[tid]["contract"] | |
| exec(code) | |
| func = locals()[data[tid]["entry_point"]] | |
| new_inputs = [] | |
| for inputs in data[tid]["plus_input"]: | |
| try: | |
| func(*inputs) | |
| new_inputs.append(inputs) | |
| except Exception as e: | |
| assert str(e) == "invalid inputs" | |
| before, after = len(data[tid]["plus_input"]), len(new_inputs) | |
| data[tid]["plus_input"] = new_inputs | |
| print(f"HumanEval/{tid}: {before} -> {after}") | |
| return before - after | |
| def debug_output(version: str, tasks: List[int]): | |
| with open(f"HumanEvalPlus-{version}.jsonl") as f: | |
| data = [json.loads(line) for line in f.readlines() if line] | |
| data = {x["task_id"]: x for x in data} | |
| for tid in tasks: | |
| title = f"HumanEval/{tid}:\n" | |
| code = ( | |
| data[f"HumanEval/{tid}"]["prompt"] | |
| + data[f"HumanEval/{tid}"]["contract"] | |
| + data[f"HumanEval/{tid}"]["canonical_solution"] | |
| ) | |
| print(title) | |
| print(code) | |
| exec(code) | |
| print("====================================") | |