Yashp2003's picture
add analyze.py reproduction script
7516dea verified
Raw
History Blame Contribute Delete
2.07 kB
import json, statistics, os
from collections import Counter
from datasets import load_dataset
OUT = os.environ.get("OUT_DIR", ".")
os.makedirs(OUT, exist_ok=True)
ds = load_dataset("ScaleAI/SWE-bench_Pro", split="test")
n = len(ds)
repos = sorted(set(ds["repo"]))
repo_counts = dict(Counter(ds["repo"]))
# Claim 1: public subset size
# Claim 2: public set = 11 repos (held-out 12 + commercial 18 not public)
# Claim 3: multi-file long-horizon patches
patch_files = []
for ex in ds:
p = ex["patch"] or ""
files = set()
for line in p.splitlines():
if line.startswith("diff --git"):
files.add(line)
patch_files.append(len(files))
multi = sum(1 for x in patch_files if x > 1)
# Claim 4: human-verified context adequacy
ps_lens = [len(ex["problem_statement"] or "") for ex in ds]
has_tp = sum(1 for ex in ds if ex["test_patch"] and len(ex["test_patch"].strip()) > 0)
has_req = sum(1 for ex in ds if ex["requirements"] and len(str(ex["requirements"]).strip()) > 0)
has_iface = sum(1 for ex in ds if ex["interface"] and len(str(ex["interface"]).strip()) > 0)
has_dh = sum(1 for ex in ds if ex["dockerhub_tag"])
# Claim 5: domain / language diversity + containerized env (contamination-resistant)
langs = sorted(set(ds["repo_language"]))
result = {
"public_instances": n,
"public_repos": len(repos),
"repo_counts": repo_counts,
"languages": langs,
"patch_files_min": min(patch_files),
"patch_files_max": max(patch_files),
"patch_files_mean": round(statistics.mean(patch_files), 2),
"patch_files_median": statistics.median(patch_files),
"instances_multi_file": multi,
"instances_multi_file_pct": round(100 * multi / n, 1),
"ps_chars_mean": round(statistics.mean(ps_lens)),
"ps_all_have_context": all(x > 200 for x in ps_lens),
"has_test_patch": has_tp,
"has_requirements": has_req,
"has_interface": has_iface,
"has_dockerhub_tag": has_dh,
}
with open(os.path.join(OUT, "results.json"), "w") as f:
json.dump(result, f, indent=2)
print(json.dumps(result, indent=2))