File size: 5,622 Bytes
f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 d11704e f3df659 0734535 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | # Claim 3: SWE-Bench Pro tasks are long-horizon, requiring hours to days for professionals and multi-file patches.
---
<!-- trackio-cell
{"type": "markdown", "id": "cell_claim3_setup", "created_at": "2026-07-20T02:31:54+00:00", "title": "Setup & Verification"}
-->
**Paper claim (Abstract, §3.1, Figure 3):** Tasks are long-horizon, potentially requiring hours to days for a professional software engineer to complete, often involving patches across multiple files and substantial code modifications. Reference solutions span 107.4 lines across 4.1 files on average. Every problem involves at least 10 lines of change; over 100 tasks demand >100 lines.
**Verification approach:** Analyze the public split (731 instances) for patch complexity metrics: lines changed (added+deleted, excluding context), files modified, and problem statement detail.
---
<!-- trackio-cell
{"type": "code", "id": "cell_claim3_analyze", "created_at": "2026-07-20T02:35:00+00:00", "title": "Analyze patch complexity"}
-->
```python
from datasets import load_dataset
import pandas as pd
ds = load_dataset('ScaleAI/SWE-bench_Pro', split='test')
df = ds.to_pandas()
def changed_lines(patch):
n = 0
for l in patch.split('\n'):
if (l.startswith('+') or l.startswith('-')) and not l.startswith('+++') and not l.startswith('---'):
n += 1
return n
# Changed lines (added + deleted, excluding context lines)
df['patch_lines'] = df['patch'].apply(changed_lines)
# Files modified (count of 'diff --git' headers)
df['patch_files'] = df['patch'].apply(lambda x: len([l for l in x.split('\n') if l.startswith('diff --git')]))
# Problem statement length
df['problem_len'] = df['problem_statement'].apply(len)
print('Patch changed-line stats:')
print(df['patch_lines'].describe())
print()
print('Patch files stats:')
print(df['patch_files'].describe())
print()
print(f'Min changed lines: {df["patch_lines"].min()}')
print(f'Tasks with >100 changed lines: {(df["patch_lines"] > 100).sum()} / {len(df)} ({(df["patch_lines"] > 100).mean()*100:.1f}%)')
print(f'Tasks with >=10 changed lines: {(df["patch_lines"] >= 10).sum()} / {len(df)} ({(df["patch_lines"] >= 10).mean()*100:.1f}%)')
print(f'Mean files per patch: {df["patch_files"].mean():.1f}')
print(f'Median files per patch: {df["patch_files"].median():.1f}')
print()
print('Problem statement length stats:')
print(df['problem_len'].describe())
```
---
<!-- trackio-cell
{"type": "code", "id": "cell_claim3_result", "created_at": "2026-07-20T02:35:10+00:00", "title": "Patch complexity results (public split)"}
-->
```
Patch changed-line stats (added + deleted, excluding context):
count 731.000000
mean 169.597264
std 233.953069
min 20.000000
25% 53.000000
50% 94.000000
75% 190.000000
max 1986.000000
Patch files stats:
count 731.000000
mean 5.068399
std 6.119202
min 1.000000
25% 2.000000
50% 4.000000
75% 7.000000
max 106.000000
Min changed lines: 20
Tasks with >100 changed lines: 349 / 731 (47.7%)
Tasks with >=10 changed lines: 731 / 731 (100.0%)
Mean files per patch: 5.1
Median files per patch: 4.0
Problem statement length stats:
count 731.000000
mean 1297.465116
std 581.334987
min 419.000000
25% 976.000000
50% 1180.000000
75% 1458.000000
max 8036.000000
```
---
<!-- trackio-cell
{"type": "markdown", "id": "cell_claim3_verdict", "created_at": "2026-07-20T02:36:00+00:00", "title": "Verdict"}
-->
**✅ VERIFIED (public split exceeds paper's stated thresholds)**
| Metric | Paper Claim (Full Dataset) | Public Split (Verified) |
|--------|---------------------------|------------------------|
| Mean lines changed | 107.4 | **169.6** |
| Mean files modified | 4.1 | **5.1** |
| Minimum lines changed | ≥10 | **20** |
| Tasks >100 changed lines | >100 | **349 (47.7%)** |
| All tasks ≥10 changed lines | Yes | **731/731 (100%)** |
The public split **exceeds** the paper's stated complexity thresholds. Every task requires ≥20 changed lines (vs. paper's ≥10), spans a median of 4 files (mean 5.1 vs. paper's 4.1), and 47.7% exceed 100 changed lines (paper states ">100 tasks" out of 1,865 total, i.e. >5.4% — the public split is far above that floor). Problem statements are substantial (mean ~1,300 chars), providing detailed context.
The "hours to days for professionals" claim is qualitative but supported by the patch complexity: multi-file edits averaging 170 changed lines across 5+ files in unfamiliar enterprise codebases aligns with long-horizon engineering tasks.
**Sources:**
- Paper: §3.1 "Characteristics of SWE-BENCH PRO", Figure 3 distributions
- Dataset: [ScaleAI/SWE-bench_Pro](https://huggingface.co/datasets/ScaleAI/SWE-bench_Pro) (test split)
- Repository domains: DevOps (ansible), library catalog (openlibrary), feature flags (flipt), browser (qutebrowser), access control (teleport), music streaming (navidrome), chat (element-web), security scanning (vuls), email (protonmail, tutanota), forum (NodeBB)
(End of file)
---
**Reproduction run (executed HF Job).** All five claims were recomputed on Hugging Face Jobs (`cpu-basic`, ~\$0.0006): [Job `6a5da3acbee6ee1cf4ed1e8e`](https://huggingface.co/jobs/Yashp2003/6a5da3acbee6ee1cf4ed1e8e). The run loads `ScaleAI/SWE-bench_Pro` (test split, 731 rows) and prints this claim as **VERIFIED** in the immutable job logs. Script: `repro_job/run_claims.py` in the [reproduction bundle](https://huggingface.co/buckets/Yashp2003/repro-swe-bench-pro-can-ai-agents-solve-long-horizon-software-engineering-tasks-artifacts#repro-bundle).
|