Spaces:
Runtime error
Runtime error
""" Prepare a benchmark folder for a task. """ | |
import os | |
import subprocess | |
import sys | |
import json | |
benchmarks_dir = os.path.dirname(os.path.realpath(__file__)) + "/benchmarks" | |
def get_task_info(task): | |
"""Get research problem and benchmark folder name for task""" | |
research_problem = None | |
benchmark_folder_name= None | |
# Retrieve task from benchmarks | |
tasks = json.load(open(os.path.join(benchmarks_dir, "tasks.json"))) | |
if task in tasks: | |
research_problem = tasks[task].get("research_problem", None) | |
benchmark_folder_name = tasks[task].get("benchmark_folder_name", None) | |
elif task in os.listdir(benchmarks_dir) and os.path.isdir(os.path.join(benchmarks_dir, task, "env")): | |
# default benchmarks | |
benchmark_folder_name = task | |
else: | |
raise ValueError(f"task {task} not supported in benchmarks") | |
if research_problem is None: | |
research_problem_file = os.path.join(benchmarks_dir, benchmark_folder_name, "scripts", "research_problem.txt") | |
if os.path.exists(research_problem_file): | |
# Load default research problem from file | |
with open(research_problem_file, "r") as f: | |
research_problem = f.read() | |
return benchmark_folder_name, research_problem | |
def prepare_task(benchmark_dir, python="python"): | |
""" Run prepare.py in the scripts folder of the benchmark if it exists and has not been run yet. """ | |
if os.path.exists(os.path.join(benchmark_dir, "scripts", "prepare.py")) and not os.path.exists(os.path.join(benchmark_dir, "scripts", "prepared")): | |
print("Running prepare.py ...") | |
p = subprocess.run([python, "prepare.py"], cwd=os.path.join(benchmark_dir,"scripts")) | |
if p.returncode != 0: | |
print("prepare.py failed") | |
sys.exit(1) | |
else: | |
with open(os.path.join(benchmark_dir, "scripts", "prepared"), "w") as f: | |
f.write("success") | |
print("prepare.py finished") | |
else: | |
print("prepare.py not found or already prepared") | |
if __name__ == "__main__": | |
task = sys.argv[1] | |
if len(sys.argv) > 2: | |
python = sys.argv[2] | |
else: | |
python = "python" | |
benchmark_name, _ = get_task_info(task) | |
benchmark_dir = os.path.join(benchmarks_dir, benchmark_name) | |
prepare_task(benchmark_dir, python=python) |