| import json |
| import multiprocessing |
| import os |
|
|
| from evalplus._experimental.type_mut_for_eff import TypedMutEffGen |
| from evalplus.data import HUMANEVAL_PLUS_INPUTS_PATH, get_human_eval_plus |
|
|
| HUMANEVAL_PLUS_BIG_INPUTS_PATH = "/home/yuyao/eval-plus/HumanEvalPlusBigInputs" |
|
|
|
|
| def main(): |
| problems = get_human_eval_plus() |
| for p in problems: |
| print(f"{p['task_id']}...") |
| filename = p["task_id"].replace("/", "_") |
| big_input_path = os.path.join( |
| HUMANEVAL_PLUS_BIG_INPUTS_PATH, f"{filename}.json" |
| ) |
|
|
| if os.path.exists(big_input_path): |
| continue |
| inputs = p["base_input"] |
| signature = p["entry_point"] |
| contract_code = p["prompt"] + p["contract"] + p["canonical_solution"] |
|
|
| def input_generation(inputs, signature, contract_code): |
| try: |
| gen = TypedMutEffGen(inputs, signature, contract_code) |
| new_inputs = gen.generate() |
| results.append(new_inputs) |
| except: |
| with open("fail.txt", "a") as f: |
| f.write(f"{signature} failed") |
| results.append("fail") |
|
|
| manager = multiprocessing.Manager() |
| results = manager.list() |
| proc = multiprocessing.Process( |
| target=input_generation, args=(inputs, signature, contract_code) |
| ) |
| proc.start() |
| proc.join(timeout=300) |
| if proc.is_alive(): |
| proc.terminate() |
| proc.kill() |
| continue |
| if len(results) == 0 or type(results[0]) == str: |
| continue |
| new_inputs = results[0] |
|
|
| new_input_dict = dict() |
| new_input_dict["task_id"] = p["task_id"] |
| new_input_dict["inputs"] = [] |
| new_input_dict["sd"] = [] |
| for item in new_inputs: |
| new_input_dict["inputs"].append(item.inputs) |
| new_input_dict["sd"].append(item.fluctuate_ratio) |
| with open( |
| os.path.join(HUMANEVAL_PLUS_BIG_INPUTS_PATH, f"{filename}.json"), "w" |
| ) as f: |
| json.dump(new_input_dict, f) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|