Files
microsoft--unilm/PFPO/scripts/mbpp/prepare_mbpp_test_cases_inputs_v1.0.py
2026-07-13 13:24:13 +08:00

66 lines
1.8 KiB
Python

from datasets import load_dataset
import argparse
import json
from tqdm import tqdm
_prompt_w_test_cases = """You are an expert Python programmer, and here is your task:
{}
And here are some test cases in assertion format:
<EXAMPLE TEST CASE INPUT>
{}
</EXAMPLE TEST CASE INPUT>
where only the function name and test cases inputs are included, and the expected outputs are omitted to avoid any confusion.
Now, please **STRICTLY** following the above assertion format to generate **50** more test case inputs for me. Organize your results between <TEST CASE INPUTS> and </TEST CASE INPUTS> tags:
Here is the return format:
<TEST CASE INPUTS>
*assertion inputs 1*
*assertion inputs 2*
...
*assertion inputs 50*
</TEST CASE INPUTS>
Remember my requirements and now let's get started:
"""
PROMPTS = {
"w_test_cases": _prompt_w_test_cases,
}
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--sanitized", default=False, action="store_true")
parser.add_argument("--output_file", type=str, required=True)
parser.add_argument("--prompt_type", type=str, default="vanilla")
args = parser.parse_args()
if args.sanitized:
dataset = load_dataset("mbpp", "sanitized", split="test").to_list()
else:
dataset = load_dataset("mbpp", split="test").to_list()
prompt_key = "prompt" if args.sanitized else "text"
with open(args.output_file, "w") as f:
for item in tqdm(dataset):
query = item[prompt_key]
test_cases = "\n".join([case.split(" == ")[0] for case in item["test_list"]])
assert len(item["test_list"]), item
prompt = PROMPTS[args.prompt_type].format(query, test_cases)
item["prompt"] = prompt
f.write(json.dumps(item) + "\n")
if __name__ == "__main__":
main()