<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://jatinganhotra.dev/feed.xml" rel="self" type="application/atom+xml"/><link href="https://jatinganhotra.dev/" rel="alternate" type="text/html" hreflang="en"/><updated>2026-06-28T03:54:09+00:00</updated><id>https://jatinganhotra.dev/feed.xml</id><title type="html">blank</title><subtitle>Senior Software Engineer at IBM Research specializing in autonomous SWE-Agents for intelligent code generation, issue localization, and software testing. </subtitle><entry><title type="html">Hidden Naming Contracts in SWE-Agent Benchmarks</title><link href="https://jatinganhotra.dev/blog/swe-agents/2026/04/05/hidden-naming-contracts-in-swe-agent-benchmarks.html" rel="alternate" type="text/html" title="Hidden Naming Contracts in SWE-Agent Benchmarks"/><published>2026-04-05T00:00:00+00:00</published><updated>2026-04-05T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2026/04/05/hidden-naming-contracts-in-swe-agent-benchmarks</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2026/04/05/hidden-naming-contracts-in-swe-agent-benchmarks.html"><![CDATA[<p>AI coding benchmarks now influence research priorities, product strategy, and engineering adoption decisions. Over the last year, SWE-bench has become a key benchmark for evaluating AI coding agents, and that momentum has pushed the community to build additional SWE-bench-style benchmarks beyond Python.</p> <p>As I have explored in earlier analyses on <a href="https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation.html">single-file saturation</a> and <a href="https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard.html">difficulty distribution</a>, benchmark scores are only as trustworthy as the instances behind them. In this post, I look at a different failure mode: <strong>hidden naming contracts</strong>.</p> <p>A hidden naming contract appears when benchmark tests require specific identifiers introduced in the reference solution, even though those names were never made explicit in the issue text. In that setting, an agent can produce a behaviorally correct fix and still be graded as wrong because it chose a different symbol name.</p> <h2 id="the-core-failure-mode">The Core Failure Mode</h2> <p>A typical SWE-bench-style instance has four parts:</p> <ul> <li>an issue description</li> <li>a base repository snapshot</li> <li>a reference solution</li> <li>executable tests</li> </ul> <p>The intended contract is behavioral correctness: if a submitted patch fixes the issue, the tests should pass.</p> <p>The problem starts when tests directly call symbols that were newly introduced in the reference solution. Evaluation then requires not only solving the behavior, but also reproducing a naming choice that may never have been stated anywhere.</p> <h3 id="a-concrete-example">A Concrete Example</h3> <p>Consider <code class="language-plaintext highlighter-rouge">scikit-learn__scikit-learn-12682</code> from <code class="language-plaintext highlighter-rouge">SWE-bench_Verified</code>.</p> <p>The issue reports that <code class="language-plaintext highlighter-rouge">SparseCoder</code> does not expose <code class="language-plaintext highlighter-rouge">max_iter</code> for <code class="language-plaintext highlighter-rouge">Lasso</code>, which leads to convergence warnings. The name <code class="language-plaintext highlighter-rouge">transform_max_iter</code> is not mentioned in the issue and does not exist elsewhere in the codebase at the base commit.</p> <p>The reference patch introduces a new <code class="language-plaintext highlighter-rouge">transform_max_iter</code> parameter:</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># sklearn/decomposition/dict_learning.py
</span><span class="k">class</span> <span class="nc">SparseCoder</span><span class="p">(</span><span class="n">BaseEstimator</span><span class="p">,</span> <span class="n">SparseCodingMixin</span><span class="p">):</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="n">self</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">,</span> <span class="n">transform_algorithm</span><span class="o">=</span><span class="sh">'</span><span class="s">omp</span><span class="sh">'</span><span class="p">,</span>
                 <span class="n">transform_n_nonzero_coefs</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">transform_alpha</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span>
                 <span class="n">split_sign</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">n_jobs</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">positive_code</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
                 <span class="n">transform_max_iter</span><span class="o">=</span><span class="mi">1000</span><span class="p">):</span>
        <span class="n">self</span><span class="p">.</span><span class="nf">_set_sparse_coding_params</span><span class="p">(...,</span> <span class="n">transform_max_iter</span><span class="p">)</span>
</code></pre></div></div> <p>The test patch then calls that exact parameter name:</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">test_max_iter</span><span class="p">():</span>
    <span class="k">with</span> <span class="n">pytest</span><span class="p">.</span><span class="nf">warns</span><span class="p">(</span><span class="n">ConvergenceWarning</span><span class="p">):</span>
        <span class="n">model</span> <span class="o">=</span> <span class="nc">SparseCoder</span><span class="p">(</span>
            <span class="n">D_multi</span><span class="p">,</span>
            <span class="n">transform_algorithm</span><span class="o">=</span><span class="n">transform_algorithm</span><span class="p">,</span>
            <span class="n">transform_max_iter</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
        <span class="p">)</span>
        <span class="n">model</span><span class="p">.</span><span class="nf">fit_transform</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>

    <span class="k">with</span> <span class="n">pytest</span><span class="p">.</span><span class="nf">warns</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span> <span class="k">as</span> <span class="n">record</span><span class="p">:</span>
        <span class="n">model</span> <span class="o">=</span> <span class="nc">SparseCoder</span><span class="p">(</span>
            <span class="n">D_multi</span><span class="p">,</span>
            <span class="n">transform_algorithm</span><span class="o">=</span><span class="n">transform_algorithm</span><span class="p">,</span>
            <span class="n">transform_max_iter</span><span class="o">=</span><span class="mi">2000</span><span class="p">,</span>
        <span class="p">)</span>
        <span class="n">model</span><span class="p">.</span><span class="nf">fit_transform</span><span class="p">(</span><span class="n">X</span><span class="p">)</span>
</code></pre></div></div> <p>An agent could implement the same functionality with <code class="language-plaintext highlighter-rouge">lasso_max_iter</code>, <code class="language-plaintext highlighter-rouge">max_transform_iterations</code>, or another reasonable name and still fail evaluation. The behavioral fix is there, but the hidden naming contract is not satisfied.</p> <h2 id="what-the-scan-found">What the Scan Found</h2> <p>I analyzed six SWE-bench-style datasets:</p> <ul> <li><a href="https://huggingface.co/datasets/SWE-bench/SWE-bench">SWE-bench/SWE-bench</a></li> <li><a href="https://huggingface.co/datasets/SWE-bench/SWE-bench_Verified">SWE-bench/SWE-bench_Verified</a></li> <li><a href="https://huggingface.co/datasets/SWE-bench/SWE-bench_Multilingual">SWE-bench/SWE-bench_Multilingual</a></li> <li><a href="https://huggingface.co/datasets/ScaleAI/SWE-bench_Pro">ScaleAI/SWE-bench_Pro</a></li> <li><a href="https://huggingface.co/datasets/ByteDance-Seed/Multi-SWE-bench">ByteDance-Seed/Multi-SWE-bench</a></li> <li><a href="https://huggingface.co/datasets/AmazonScience/SWE-PolyBench">AmazonScience/SWE-PolyBench</a></li> </ul> <p>In a screening pass across all 7,567 instances, I found 2,167 instances (<strong>28.6%</strong>) where tests reference symbols newly introduced in the reference solution.</p> <p>That 28.6% number is a screening signal, not a final estimate of confirmed false negatives. Some coupled symbols are fair because the name is explicit in the issue text or already established in the codebase. To isolate the highest-risk cases, I ran two refinement checks:</p> <ol> <li>Is the symbol name mentioned in the issue text?</li> <li>Does the symbol already exist elsewhere in the repository?</li> </ol> <p>I treat the intersection as <strong>high-risk coupling</strong>: symbols that are neither mentioned in the issue nor present in the codebase.</p> <h2 id="high-risk-coupling-by-benchmark">High-Risk Coupling by Benchmark</h2> <table> <thead> <tr> <th>Benchmark</th> <th style="text-align: right">Total<br/>Instances</th> <th style="text-align: right">Coupled<br/>Instances</th> <th style="text-align: right">High-Risk<br/>Coupling<br/>(% of Total)</th> </tr> </thead> <tbody> <tr> <td>SWE-bench/SWE-bench</td> <td style="text-align: right">2,294</td> <td style="text-align: right">574</td> <td style="text-align: right">34 (1.5%)</td> </tr> <tr> <td>SWE-bench/SWE-bench_Verified</td> <td style="text-align: right">500</td> <td style="text-align: right">87</td> <td style="text-align: right">4 (0.8%)</td> </tr> <tr> <td>SWE-bench/SWE-bench_Multilingual</td> <td style="text-align: right">300</td> <td style="text-align: right">15</td> <td style="text-align: right">0 (0.0%)</td> </tr> <tr> <td>ScaleAI/SWE-bench_Pro</td> <td style="text-align: right">731</td> <td style="text-align: right">363</td> <td style="text-align: right">80 (10.9%)</td> </tr> <tr> <td>ByteDance-Seed/Multi-SWE-bench</td> <td style="text-align: right">1,632</td> <td style="text-align: right">593</td> <td style="text-align: right">89 (5.5%)</td> </tr> <tr> <td>AmazonScience/SWE-PolyBench</td> <td style="text-align: right">2,110</td> <td style="text-align: right">535</td> <td style="text-align: right">68 (3.2%)</td> </tr> </tbody> </table> <p>The main takeaway is that this problem is concentrated rather than uniform.</p> <ul> <li><code class="language-plaintext highlighter-rouge">SWE-bench_Pro</code> is the clear outlier at 10.9% high-risk coupling.</li> <li><code class="language-plaintext highlighter-rouge">Multi-SWE-bench</code> is meaningfully elevated at 5.5%.</li> <li><code class="language-plaintext highlighter-rouge">SWE-bench_Verified</code> and <code class="language-plaintext highlighter-rouge">SWE-bench_Multilingual</code> are much cleaner on this specific failure mode.</li> </ul> <p>That pattern suggests curation helps, but it does not eliminate the issue.</p> <h2 id="where-the-risk-concentrates">Where the Risk Concentrates</h2> <p>The high-risk subset becomes easier to interpret if we also look at the two refinement signals separately:</p> <table> <thead> <tr> <th>Benchmark</th> <th style="text-align: right">Coupled</th> <th style="text-align: right">None Mentioned<br/>in Issue</th> <th style="text-align: right">None Exist<br/>in Codebase</th> <th style="text-align: right">High-Risk</th> </tr> </thead> <tbody> <tr> <td>SWE-bench/SWE-bench</td> <td style="text-align: right">574</td> <td style="text-align: right">233</td> <td style="text-align: right">38</td> <td style="text-align: right">34</td> </tr> <tr> <td>SWE-bench/SWE-bench_Verified</td> <td style="text-align: right">87</td> <td style="text-align: right">32</td> <td style="text-align: right">4</td> <td style="text-align: right">4</td> </tr> <tr> <td>SWE-bench/SWE-bench_Multilingual</td> <td style="text-align: right">15</td> <td style="text-align: right">9</td> <td style="text-align: right">0</td> <td style="text-align: right">0</td> </tr> <tr> <td>ScaleAI/SWE-bench_Pro</td> <td style="text-align: right">363</td> <td style="text-align: right">210</td> <td style="text-align: right">92</td> <td style="text-align: right">80</td> </tr> <tr> <td>ByteDance-Seed/Multi-SWE-bench</td> <td style="text-align: right">593</td> <td style="text-align: right">296</td> <td style="text-align: right">104</td> <td style="text-align: right">89</td> </tr> <tr> <td>AmazonScience/SWE-PolyBench</td> <td style="text-align: right">535</td> <td style="text-align: right">280</td> <td style="text-align: right">73</td> <td style="text-align: right">68</td> </tr> </tbody> </table> <p>Two things stand out.</p> <p>First, many coupled instances provide no naming hint in the issue text. For most datasets, roughly 40% to 60% of coupled instances fall into that bucket.</p> <p>Second, codebase priors help in many cases, but not equally across benchmarks. In <code class="language-plaintext highlighter-rouge">SWE-bench_Verified</code>, most coupled symbols already exist somewhere else in the repository, which gives agents a chance to infer the naming pattern through exploration. In <code class="language-plaintext highlighter-rouge">SWE-bench_Pro</code> and <code class="language-plaintext highlighter-rouge">Multi-SWE-bench</code>, that safety net is much weaker.</p> <p>This is why the raw coupling rate and the high-risk rate both matter. The raw rate tells us how often tests are structurally tied to reference naming. The high-risk rate tells us where that coupling is most likely to generate false negatives.</p> <h2 id="why-this-matters-for-leaderboards">Why This Matters for Leaderboards</h2> <h3 id="1-scores-can-move-at-the-margin">1. Scores can move at the margin</h3> <p>In <code class="language-plaintext highlighter-rouge">SWE-bench_Pro</code>, high-risk coupling appears in 10.9% of all instances. If only a fraction of those behave as false negatives in practice, that is still enough to shift scores by one to several points, which can reorder closely clustered systems.</p> <h3 id="2-cross-benchmark-comparisons-get-noisier">2. Cross-benchmark comparisons get noisier</h3> <p>A model may appear to improve or regress partly because one benchmark family embeds more hidden naming contracts than another. That makes benchmark-to-benchmark comparisons less clean than leaderboard tables suggest.</p> <h3 id="3-curation-helps-but-one-clean-metric-is-not-the-whole-story">3. Curation helps, but one clean metric is not the whole story</h3> <p>The low rates in <code class="language-plaintext highlighter-rouge">SWE-bench_Verified</code> and <code class="language-plaintext highlighter-rouge">SWE-bench_Multilingual</code> are encouraging for this particular failure mode. But low hidden-contract rates should not be read as a blanket validation of a benchmark’s frontier-tracking quality. Benchmarks can still have other issues, including overly narrow tests, overly wide tests, or contamination.</p> <p>Recent benchmark audits make the same broader point from a different direction. My analysis is narrower: it is a scalable programmatic scan for one subtype of narrow-test risk.</p> <h2 id="what-benchmark-maintainers-should-change">What Benchmark Maintainers Should Change</h2> <h3 id="1-prefer-behavior-first-assertions-where-feasible">1. Prefer behavior-first assertions where feasible</h3> <p>Tests should verify the intended behavior, not accidentally require the exact reference implementation.</p> <h3 id="2-make-naming-requirements-explicit-when-they-are-part-of-the-task">2. Make naming requirements explicit when they are part of the task</h3> <p>Some fixes genuinely require a specific API, method name, or parameter name for compatibility reasons. In those cases, the naming requirement should be written into the issue statement rather than hidden in the tests.</p> <h3 id="3-publish-diagnostic-metadata-alongside-headline-scores">3. Publish diagnostic metadata alongside headline scores</h3> <p>Leaderboards should ideally report not just one aggregate score, but also benchmark diagnostics such as coupling prevalence, high-risk hidden-contract rates, and whether a score was computed on a filtered subset that excludes known problematic instances.</p> <h3 id="4-keep-a-human-review-loop-in-benchmark-maintenance">4. Keep a human review loop in benchmark maintenance</h3> <p>The cleanest benchmarks in this analysis are also the ones with stronger curation signals. That supports a practical maintenance rule: programmatic scans can pre-screen risky instances, but human review is still needed before release.</p> <h2 id="conclusion">Conclusion</h2> <p>Software engineering allows multiple valid implementations, and evaluations should reflect that reality. A benchmark should reward behaviorally correct fixes, not force agents to rediscover one unstated naming choice from a hidden reference patch.</p> <p>Hidden naming contracts are not the entire benchmark-reliability story, but they are a measurable and actionable part of it. If we want benchmark scores to be more robust, one straightforward step is to identify and remove instances where tests silently depend on names that the task never actually required.</p> <blockquote class="block-danger"> <p>A coding agent should not be graded as wrong for solving the right problem with the wrong unstated identifier.</p> </blockquote> <hr/> <h2 id="methodology">Methodology</h2> <p>The analysis uses a simple pipeline:</p> <ol> <li>Parse gold patches and extract symbols introduced on added lines.</li> <li>Parse test patches and look for references to those symbols.</li> <li>Filter out overly generic names that are likely to match coincidentally.</li> <li>For coupled instances, check whether the symbol appears in the issue text.</li> <li>For coupled instances, check whether the symbol already exists elsewhere in the repository at the base commit.</li> </ol> <p>The symbol extraction step uses language-specific patterns for Python, Java, JavaScript or TypeScript, Go, Rust, and C or C++.</p> <p>This post reports <strong>filtered counts</strong> throughout. The filtering step removes names that are so generic that a match is probably accidental rather than evidence of a real hidden naming contract.</p> <details> <summary>Filtering details (click to expand)</summary> <ul> <li><strong>Generic variable names</strong>: <code class="language-plaintext highlighter-rouge">result</code>, <code class="language-plaintext highlighter-rouge">data</code>, <code class="language-plaintext highlighter-rouge">value</code>, <code class="language-plaintext highlighter-rouge">output</code>, <code class="language-plaintext highlighter-rouge">input</code>, <code class="language-plaintext highlighter-rouge">response</code>, <code class="language-plaintext highlighter-rouge">item</code>, <code class="language-plaintext highlighter-rouge">obj</code>, <code class="language-plaintext highlighter-rouge">args</code>, <code class="language-plaintext highlighter-rouge">kwargs</code>, etc.</li> <li><strong>Single-letter identifiers</strong>: <code class="language-plaintext highlighter-rouge">x</code>, <code class="language-plaintext highlighter-rouge">y</code>, <code class="language-plaintext highlighter-rouge">i</code>, <code class="language-plaintext highlighter-rouge">j</code>, <code class="language-plaintext highlighter-rouge">k</code>, <code class="language-plaintext highlighter-rouge">n</code>, etc.</li> <li><strong>Common method names</strong>: <code class="language-plaintext highlighter-rouge">get</code>, <code class="language-plaintext highlighter-rouge">set</code>, <code class="language-plaintext highlighter-rouge">add</code>, <code class="language-plaintext highlighter-rouge">remove</code>, <code class="language-plaintext highlighter-rouge">create</code>, <code class="language-plaintext highlighter-rouge">run</code>, <code class="language-plaintext highlighter-rouge">execute</code>, <code class="language-plaintext highlighter-rouge">parse</code>, <code class="language-plaintext highlighter-rouge">read</code>, <code class="language-plaintext highlighter-rouge">write</code>, <code class="language-plaintext highlighter-rouge">load</code>, <code class="language-plaintext highlighter-rouge">save</code>, etc.</li> <li><strong>Common class names</strong>: <code class="language-plaintext highlighter-rouge">Base</code>, <code class="language-plaintext highlighter-rouge">Error</code>, <code class="language-plaintext highlighter-rouge">Exception</code>, <code class="language-plaintext highlighter-rouge">Handler</code>, <code class="language-plaintext highlighter-rouge">Manager</code>, <code class="language-plaintext highlighter-rouge">Factory</code>, <code class="language-plaintext highlighter-rouge">Config</code>, etc.</li> <li><strong>Test infrastructure names</strong>: <code class="language-plaintext highlighter-rouge">test</code>, <code class="language-plaintext highlighter-rouge">setUp</code>, <code class="language-plaintext highlighter-rouge">tearDown</code>, <code class="language-plaintext highlighter-rouge">fixture</code>, <code class="language-plaintext highlighter-rouge">mock</code>, <code class="language-plaintext highlighter-rouge">patch</code>, and any symbol matching test-naming patterns (<code class="language-plaintext highlighter-rouge">test_*</code>, <code class="language-plaintext highlighter-rouge">*Test</code>, <code class="language-plaintext highlighter-rouge">mock_*</code>, <code class="language-plaintext highlighter-rouge">fake_*</code>, <code class="language-plaintext highlighter-rouge">stub_*</code>)</li> <li><strong>Placeholder names</strong>: <code class="language-plaintext highlighter-rouge">foo</code>, <code class="language-plaintext highlighter-rouge">bar</code>, <code class="language-plaintext highlighter-rouge">baz</code>, <code class="language-plaintext highlighter-rouge">qux</code></li> <li><strong>Built-ins</strong>: <code class="language-plaintext highlighter-rouge">True</code>, <code class="language-plaintext highlighter-rouge">False</code>, <code class="language-plaintext highlighter-rouge">None</code>, <code class="language-plaintext highlighter-rouge">null</code>, <code class="language-plaintext highlighter-rouge">main</code>, <code class="language-plaintext highlighter-rouge">name</code>, <code class="language-plaintext highlighter-rouge">type</code>, <code class="language-plaintext highlighter-rouge">id</code></li> </ul> </details> <p>The high-risk subset reported above is the intersection of the two refinement checks: symbols not mentioned in the issue text and not present in the codebase.</p> <h2 id="appendix-high-risk-instances-by-benchmark">Appendix: High-Risk Instances by Benchmark</h2> <p>The following tables list the instances in the high-risk intersection.</p> <h5 id="swe-benchswe-bench">SWE-bench/SWE-bench</h5> <details> <summary><strong>34 instances</strong> with high-risk coupling (click to expand)</summary> <table> <thead> <tr> <th>Instance ID</th> <th>Coupled Symbols</th> </tr> </thead> <tbody> <tr> <td>django__django-11389</td> <td><code class="language-plaintext highlighter-rouge">get_session_cookie_age</code></td> </tr> <tr> <td>django__django-11742</td> <td><code class="language-plaintext highlighter-rouge">choice_max_length</code></td> </tr> <tr> <td>django__django-13250</td> <td><code class="language-plaintext highlighter-rouge">supports_json_field_contains</code></td> </tr> <tr> <td>django__django-13350</td> <td><code class="language-plaintext highlighter-rouge">upload_interrupted</code></td> </tr> <tr> <td>django__django-13722</td> <td><code class="language-plaintext highlighter-rouge">get_formset_kwargs</code></td> </tr> <tr> <td>django__django-14430</td> <td><code class="language-plaintext highlighter-rouge">empty_aggregate_value</code></td> </tr> <tr> <td>django__django-14559</td> <td><code class="language-plaintext highlighter-rouge">rows_updated</code></td> </tr> <tr> <td>django__django-14725</td> <td><code class="language-plaintext highlighter-rouge">edit_only</code></td> </tr> <tr> <td>django__django-14894</td> <td><code class="language-plaintext highlighter-rouge">empty_result_set_value</code></td> </tr> <tr> <td>django__django-15031</td> <td><code class="language-plaintext highlighter-rouge">list_separator</code></td> </tr> <tr> <td>django__django-15108</td> <td><code class="language-plaintext highlighter-rouge">OrderByList</code></td> </tr> <tr> <td>django__django-16302</td> <td><code class="language-plaintext highlighter-rouge">supports_unlimited_charfield</code></td> </tr> <tr> <td>django__django-16369</td> <td><code class="language-plaintext highlighter-rouge">get_languages_for_item</code></td> </tr> <tr> <td>django__django-16514</td> <td><code class="language-plaintext highlighter-rouge">get_log_entries</code></td> </tr> <tr> <td>django__django-16883</td> <td><code class="language-plaintext highlighter-rouge">normalize_table_name</code></td> </tr> <tr> <td>django__django-7188</td> <td><code class="language-plaintext highlighter-rouge">BaseAuthConfig</code></td> </tr> <tr> <td>matplotlib__matplotlib-13908</td> <td><code class="language-plaintext highlighter-rouge">remove_overlapping_locs</code>, <code class="language-plaintext highlighter-rouge">get_remove_overlapping_locs</code></td> </tr> <tr> <td>matplotlib__matplotlib-18869</td> <td><code class="language-plaintext highlighter-rouge">_parse_to_version_info</code></td> </tr> <tr> <td>matplotlib__matplotlib-25746</td> <td><code class="language-plaintext highlighter-rouge">labelfontfamily</code></td> </tr> <tr> <td>psf__requests-4356</td> <td><code class="language-plaintext highlighter-rouge">InvalidProxyURL</code></td> </tr> <tr> <td>psf__requests-4718</td> <td><code class="language-plaintext highlighter-rouge">should_strip_auth</code></td> </tr> <tr> <td>pydata__xarray-4759</td> <td><code class="language-plaintext highlighter-rouge">maybe_coerce_to_str</code></td> </tr> <tr> <td>pylint-dev__pylint-4421</td> <td><code class="language-plaintext highlighter-rouge">get_numversion_from_version</code></td> </tr> <tr> <td>pylint-dev__pylint-4604</td> <td><code class="language-plaintext highlighter-rouge">IS_PYPY</code></td> </tr> <tr> <td>pylint-dev__pylint-5839</td> <td><code class="language-plaintext highlighter-rouge">DELETED_MESSAGES</code></td> </tr> <tr> <td>pytest-dev__pytest-8124</td> <td><code class="language-plaintext highlighter-rouge">pytest_markeval_namespace</code></td> </tr> <tr> <td>scikit-learn__scikit-learn-12682</td> <td><code class="language-plaintext highlighter-rouge">transform_max_iter</code></td> </tr> <tr> <td>scikit-learn__scikit-learn-14806</td> <td><code class="language-plaintext highlighter-rouge">skip_complete</code></td> </tr> <tr> <td>scikit-learn__scikit-learn-14898</td> <td><code class="language-plaintext highlighter-rouge">neg_brier_score</code></td> </tr> <tr> <td>sphinx-doc__sphinx-7593</td> <td><code class="language-plaintext highlighter-rouge">KeyboardTransform</code></td> </tr> <tr> <td>sphinx-doc__sphinx-8026</td> <td><code class="language-plaintext highlighter-rouge">docpath</code></td> </tr> <tr> <td>sphinx-doc__sphinx-8095</td> <td><code class="language-plaintext highlighter-rouge">napoleon_preprocess_types</code></td> </tr> <tr> <td>sphinx-doc__sphinx-8291</td> <td><code class="language-plaintext highlighter-rouge">napoleon_attr_annotations</code></td> </tr> <tr> <td>sympy__sympy-11818</td> <td><code class="language-plaintext highlighter-rouge">from_real</code></td> </tr> </tbody> </table> </details> <h5 id="swe-benchswe-bench_verified">SWE-bench/SWE-bench_Verified</h5> <details> <summary><strong>4 instances</strong> with high-risk coupling (click to expand)</summary> <table> <thead> <tr> <th>Instance ID</th> <th>Coupled Symbols</th> </tr> </thead> <tbody> <tr> <td>django__django-14559</td> <td><code class="language-plaintext highlighter-rouge">rows_updated</code></td> </tr> <tr> <td>django__django-14725</td> <td><code class="language-plaintext highlighter-rouge">edit_only</code></td> </tr> <tr> <td>pylint-dev__pylint-4604</td> <td><code class="language-plaintext highlighter-rouge">IS_PYPY</code></td> </tr> <tr> <td>scikit-learn__scikit-learn-12682</td> <td><code class="language-plaintext highlighter-rouge">transform_max_iter</code></td> </tr> </tbody> </table> </details> <h5 id="bytedance-seedmulti-swe-bench">ByteDance-Seed/Multi-SWE-bench</h5> <details> <summary><strong>89 instances</strong> with high-risk coupling (click to expand)</summary> <table> <thead> <tr> <th>Instance ID</th> <th>Coupled Symbols</th> </tr> </thead> <tbody> <tr> <td>BurntSushi__ripgrep-2610</td> <td><code class="language-plaintext highlighter-rouge">hyperlink</code></td> </tr> <tr> <td>BurntSushi__ripgrep-723</td> <td><code class="language-plaintext highlighter-rouge">line_number_width</code></td> </tr> <tr> <td>anuraghazra__github-readme-stats-117</td> <td><code class="language-plaintext highlighter-rouge">ONE_DAY</code>, <code class="language-plaintext highlighter-rouge">THIRTY_MINUTES</code>, <code class="language-plaintext highlighter-rouge">CONSTANTS</code></td> </tr> <tr> <td>anuraghazra__github-readme-stats-293</td> <td><code class="language-plaintext highlighter-rouge">defaultTitle</code>, <code class="language-plaintext highlighter-rouge">customTitle</code></td> </tr> <tr> <td>anuraghazra__github-readme-stats-58</td> <td><code class="language-plaintext highlighter-rouge">retryer</code>, <code class="language-plaintext highlighter-rouge">fetcher</code></td> </tr> <tr> <td>clap-rs__clap-2008</td> <td><code class="language-plaintext highlighter-rouge">before_long_help</code>, <code class="language-plaintext highlighter-rouge">after_long_help</code></td> </tr> <tr> <td>clap-rs__clap-2360</td> <td><code class="language-plaintext highlighter-rouge">forbid_empty_values</code></td> </tr> <tr> <td>clap-rs__clap-3453</td> <td><code class="language-plaintext highlighter-rouge">get_id</code></td> </tr> <tr> <td>clap-rs__clap-3990</td> <td><code class="language-plaintext highlighter-rouge">external_subcommand_value_parser</code></td> </tr> <tr> <td>clap-rs__clap-4080</td> <td><code class="language-plaintext highlighter-rouge">ids</code></td> </tr> <tr> <td>cli__cli-10139</td> <td><code class="language-plaintext highlighter-rouge">transformSecurityAndAnalysisOpts</code>, <code class="language-plaintext highlighter-rouge">SecurityAndAnalysisStatus</code>, <code class="language-plaintext highlighter-rouge">SecurityAndAnalysisInput</code></td> </tr> <tr> <td>cli__cli-1155</td> <td><code class="language-plaintext highlighter-rouge">ErrNotOnAnyBranch</code></td> </tr> <tr> <td>cli__cli-1279</td> <td><code class="language-plaintext highlighter-rouge">StatusStringResponse</code>, <code class="language-plaintext highlighter-rouge">HTTPError</code>, <code class="language-plaintext highlighter-rouge">httpErr</code></td> </tr> <tr> <td>cli__cli-1282</td> <td><code class="language-plaintext highlighter-rouge">listURLWithQuery</code>, <code class="language-plaintext highlighter-rouge">filterOptions</code></td> </tr> <tr> <td>cli__cli-1534</td> <td><code class="language-plaintext highlighter-rouge">runPager</code></td> </tr> <tr> <td>cli__cli-1639</td> <td><code class="language-plaintext highlighter-rouge">SetNeverPrompt</code></td> </tr> <tr> <td>cli__cli-1867</td> <td><code class="language-plaintext highlighter-rouge">LabelsByNames</code></td> </tr> <tr> <td>cli__cli-2034</td> <td><code class="language-plaintext highlighter-rouge">GistOwner</code></td> </tr> <tr> <td>cli__cli-2058</td> <td><code class="language-plaintext highlighter-rouge">HostnameValidator</code></td> </tr> <tr> <td>cli__cli-2138</td> <td><code class="language-plaintext highlighter-rouge">validateConfigEntry</code></td> </tr> <tr> <td>cli__cli-2221</td> <td><code class="language-plaintext highlighter-rouge">generateChecksumFromAssets</code>, <code class="language-plaintext highlighter-rouge">generateChecksum</code></td> </tr> <tr> <td>cli__cli-2224</td> <td><code class="language-plaintext highlighter-rouge">mergeMethodSurvey</code></td> </tr> <tr> <td>cli__cli-2997</td> <td><code class="language-plaintext highlighter-rouge">getFilesToAdd</code></td> </tr> <tr> <td>cli__cli-3490</td> <td><code class="language-plaintext highlighter-rouge">getExpansion</code></td> </tr> <tr> <td>cli__cli-3578</td> <td><code class="language-plaintext highlighter-rouge">detectEmptyFiles</code></td> </tr> <tr> <td>cli__cli-3833</td> <td><code class="language-plaintext highlighter-rouge">NewCmdCancel</code>, <code class="language-plaintext highlighter-rouge">CancelOptions</code>, <code class="language-plaintext highlighter-rouge">runCancel</code></td> </tr> <tr> <td>cli__cli-3898</td> <td><code class="language-plaintext highlighter-rouge">AddOriginRemote</code></td> </tr> <tr> <td>cli__cli-3992</td> <td><code class="language-plaintext highlighter-rouge">browserLauncher</code></td> </tr> <tr> <td>cli__cli-4146</td> <td><code class="language-plaintext highlighter-rouge">ttySize</code>, <code class="language-plaintext highlighter-rouge">ForceTerminal</code></td> </tr> <tr> <td>cli__cli-4416</td> <td><code class="language-plaintext highlighter-rouge">deleteAssetRun</code>, <code class="language-plaintext highlighter-rouge">DeleteAssetOptions</code>, <code class="language-plaintext highlighter-rouge">NewCmdDeleteAsset</code></td> </tr> <tr> <td>cli__cli-4543</td> <td><code class="language-plaintext highlighter-rouge">addPage</code></td> </tr> <tr> <td>cli__cli-4562</td> <td><code class="language-plaintext highlighter-rouge">normalizeRepoName</code></td> </tr> <tr> <td>cli__cli-5069</td> <td><code class="language-plaintext highlighter-rouge">CheckContext</code>, <code class="language-plaintext highlighter-rouge">eliminateDuplicates</code></td> </tr> <tr> <td>cli__cli-5108</td> <td><code class="language-plaintext highlighter-rouge">RepoSearchParameters</code>, <code class="language-plaintext highlighter-rouge">GetCodespaceRepoSuggestions</code></td> </tr> <tr> <td>cli__cli-5462</td> <td><code class="language-plaintext highlighter-rouge">ColorFromRGB</code></td> </tr> <tr> <td>cli__cli-5681</td> <td><code class="language-plaintext highlighter-rouge">SetAlternateScreenBufferEnabled</code>, <code class="language-plaintext highlighter-rouge">StartAlternateScreenBuffer</code>, <code class="language-plaintext highlighter-rouge">StopAlternateScreenBuffer</code></td> </tr> <tr> <td>cli__cli-5799</td> <td><code class="language-plaintext highlighter-rouge">artifactsPayload</code></td> </tr> <tr> <td>cli__cli-6074</td> <td><code class="language-plaintext highlighter-rouge">changedFilesNames</code></td> </tr> <tr> <td>cli__cli-6158</td> <td><code class="language-plaintext highlighter-rouge">DefaultFilterBySimilarityOpts</code>, <code class="language-plaintext highlighter-rouge">FilterBySimilarity</code>, <code class="language-plaintext highlighter-rouge">LevenshteinDistance</code>, <code class="language-plaintext highlighter-rouge">ListRepos</code>, <code class="language-plaintext highlighter-rouge">cands</code>, <code class="language-plaintext highlighter-rouge">FilterBySimilarityOpts</code></td> </tr> <tr> <td>cli__cli-6292</td> <td><code class="language-plaintext highlighter-rouge">PrCheckStatusSummaryWithColor</code></td> </tr> <tr> <td>cli__cli-667</td> <td><code class="language-plaintext highlighter-rouge">prStateTitleWithColor</code>, <code class="language-plaintext highlighter-rouge">issueStateTitleWithColor</code></td> </tr> <tr> <td>cli__cli-7205</td> <td><code class="language-plaintext highlighter-rouge">RemoveDiacritics</code>, <code class="language-plaintext highlighter-rouge">LatinMatchingFilter</code></td> </tr> <tr> <td>cli__cli-727</td> <td><code class="language-plaintext highlighter-rouge">parseCloneArgs</code></td> </tr> <tr> <td>cli__cli-7314</td> <td><code class="language-plaintext highlighter-rouge">RepoExists</code></td> </tr> <tr> <td>cli__cli-7477</td> <td><code class="language-plaintext highlighter-rouge">sanitizeFileName</code></td> </tr> <tr> <td>cli__cli-7866</td> <td><code class="language-plaintext highlighter-rouge">PendingError</code></td> </tr> <tr> <td>cli__cli-810</td> <td><code class="language-plaintext highlighter-rouge">formatRemoteURL</code></td> </tr> <tr> <td>cli__cli-842</td> <td><code class="language-plaintext highlighter-rouge">StubRepoResponseWithDefaultBranch</code></td> </tr> <tr> <td>cli__cli-857</td> <td><code class="language-plaintext highlighter-rouge">prReopenCmd</code></td> </tr> <tr> <td>cli__cli-8934</td> <td><code class="language-plaintext highlighter-rouge">FormatSlice</code></td> </tr> <tr> <td>cli__cli-9008</td> <td><code class="language-plaintext highlighter-rouge">simplifyURL</code></td> </tr> <tr> <td>cli__cli-970</td> <td><code class="language-plaintext highlighter-rouge">ExpandAlias</code></td> </tr> <tr> <td>cli__cli-9933</td> <td><code class="language-plaintext highlighter-rouge">ErrExtensionExecutableNotFound</code></td> </tr> <tr> <td>elastic__logstash-13825</td> <td><code class="language-plaintext highlighter-rouge">getMandatoryJvmOptions</code></td> </tr> <tr> <td>elastic__logstash-14058</td> <td><code class="language-plaintext highlighter-rouge">getDroppedEvents</code></td> </tr> <tr> <td>facebook__zstd-1080</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_getFrameHeader_advanced</code></td> </tr> <tr> <td>facebook__zstd-1105</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_CCtx_getParameter</code></td> </tr> <tr> <td>facebook__zstd-1107</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_CCtx_resetParameters</code></td> </tr> <tr> <td>facebook__zstd-1532</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_CCtxParams_setParameter</code>, <code class="language-plaintext highlighter-rouge">ZSTD_CCtxParams_getParameter</code></td> </tr> <tr> <td>facebook__zstd-1540</td> <td><code class="language-plaintext highlighter-rouge">RETURN_ERROR_IF_MSG</code></td> </tr> <tr> <td>facebook__zstd-1733</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_SRCSIZEHINT_MAX</code>, <code class="language-plaintext highlighter-rouge">ZSTD_SRCSIZEHINT_MIN</code>, <code class="language-plaintext highlighter-rouge">ZSTD_c_srcSizeHint</code></td> </tr> <tr> <td>facebook__zstd-2094</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_d_stableOutBuffer</code></td> </tr> <tr> <td>facebook__zstd-3530</td> <td><code class="language-plaintext highlighter-rouge">ZSTD_CCtx_setParams</code>, <code class="language-plaintext highlighter-rouge">ZSTD_CCtx_setFParams</code></td> </tr> <tr> <td>fasterxml__jackson-core-964</td> <td><code class="language-plaintext highlighter-rouge">setStreamReadConstraints</code></td> </tr> <tr> <td>fmtlib__fmt-1361</td> <td><code class="language-plaintext highlighter-rouge">compute_float_boundaries</code></td> </tr> <tr> <td>fmtlib__fmt-3279</td> <td><code class="language-plaintext highlighter-rouge">is_container_adaptor_like</code></td> </tr> <tr> <td>grpc__grpc-go-2744</td> <td><code class="language-plaintext highlighter-rouge">appendH2ToNextProtos</code></td> </tr> <tr> <td>iamkun__dayjs-1047</td> <td><code class="language-plaintext highlighter-rouge">localeNameRegex</code></td> </tr> <tr> <td>iamkun__dayjs-379</td> <td><code class="language-plaintext highlighter-rouge">weekStart</code></td> </tr> <tr> <td>mui__material-ui-26173</td> <td><code class="language-plaintext highlighter-rouge">isOptionEqualToValue</code></td> </tr> <tr> <td>mui__material-ui-29954</td> <td><code class="language-plaintext highlighter-rouge">inheritViewBox</code></td> </tr> <tr> <td>mui__material-ui-34131</td> <td><code class="language-plaintext highlighter-rouge">excludeVariablesFromRoot</code></td> </tr> <tr> <td>mui__material-ui-36399</td> <td><code class="language-plaintext highlighter-rouge">unstable_level</code></td> </tr> <tr> <td>mui__material-ui-37118</td> <td><code class="language-plaintext highlighter-rouge">getItemAsString</code></td> </tr> <tr> <td>nlohmann__json-1314</td> <td><code class="language-plaintext highlighter-rouge">error_handler_t</code></td> </tr> <tr> <td>nlohmann__json-2225</td> <td><code class="language-plaintext highlighter-rouge">NLOHMANN_DEFINE_TYPE_INTRUSIVE</code>, <code class="language-plaintext highlighter-rouge">NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE</code></td> </tr> <tr> <td>nlohmann__json-3523</td> <td><code class="language-plaintext highlighter-rouge">value_in_range_of</code></td> </tr> <tr> <td>nlohmann__json-3605</td> <td><code class="language-plaintext highlighter-rouge">JSON_USE_GLOBAL_UDLS</code></td> </tr> <tr> <td>nlohmann__json-3663</td> <td><code class="language-plaintext highlighter-rouge">is_c_string</code></td> </tr> <tr> <td>nushell__nushell-12118</td> <td><code class="language-plaintext highlighter-rouge">xdg_config_empty</code></td> </tr> <tr> <td>ponylang__ponyc-2865</td> <td><code class="language-plaintext highlighter-rouge">divmod_partial</code>, <code class="language-plaintext highlighter-rouge">add_partial</code></td> </tr> <tr> <td>ponylang__ponyc-3293</td> <td><code class="language-plaintext highlighter-rouge">NullablePointer</code></td> </tr> <tr> <td>tokio-rs__tokio-5200</td> <td><code class="language-plaintext highlighter-rouge">auto_advance</code>, <code class="language-plaintext highlighter-rouge">set_auto_advance</code></td> </tr> <tr> <td>tokio-rs__tokio-6280</td> <td><code class="language-plaintext highlighter-rouge">try_join_next</code>, <code class="language-plaintext highlighter-rouge">try_join_next_with_id</code></td> </tr> <tr> <td>zeromicro__go-zero-1907</td> <td><code class="language-plaintext highlighter-rouge">WithStreamClientInterceptor</code></td> </tr> <tr> <td>zeromicro__go-zero-1964</td> <td><code class="language-plaintext highlighter-rouge">PrintRoutes</code></td> </tr> <tr> <td>zeromicro__go-zero-2363</td> <td><code class="language-plaintext highlighter-rouge">DontTracingSpanName</code></td> </tr> <tr> <td>zeromicro__go-zero-964</td> <td><code class="language-plaintext highlighter-rouge">NewPublisherWithAuth</code>, <code class="language-plaintext highlighter-rouge">NewRpcPubServerWithEtcdAuth</code>, <code class="language-plaintext highlighter-rouge">KeepAliveWithAuth</code>, <code class="language-plaintext highlighter-rouge">getClusterWithAuth</code>, <code class="language-plaintext highlighter-rouge">EnableAuth</code></td> </tr> <tr> <td>zeromicro__go-zero-990</td> <td><code class="language-plaintext highlighter-rouge">ReadLink</code></td> </tr> </tbody> </table> </details> <h5 id="scaleaiswe-bench_pro">ScaleAI/SWE-bench_Pro</h5> <details> <summary><strong>80 instances</strong> with high-risk coupling (click to expand)</summary> <table> <thead> <tr> <th>Instance ID</th> <th>Coupled Symbols</th> </tr> </thead> <tbody> <tr> <td>instance_ansible__ansible-106909db8b730480615f4a33de0eb5b710944e78-v0f01c69f1e2528b935359cfe578530722bca2c59</td> <td><code class="language-plaintext highlighter-rouge">multipart_encoding</code></td> </tr> <tr> <td>instance_ansible__ansible-185d41031660a676c43fbb781cd1335902024bfe-vba6da65a0f3baefda7a058ebbd0a8dcafb8512f5</td> <td><code class="language-plaintext highlighter-rouge">host_label</code></td> </tr> <tr> <td>instance_ansible__ansible-29aea9ff3466e4cd2ed00524b9e56738d568ce8b-vba6da65a0f3baefda7a058ebbd0a8dcafb8512f5</td> <td><code class="language-plaintext highlighter-rouge">trailing_separator</code>, <code class="language-plaintext highlighter-rouge">default_value_name</code></td> </tr> <tr> <td>instance_ansible__ansible-415e08c2970757472314e515cb63a51ad825c45e-v7eee2454f617569fd6889f2211f75bc02a35f9f8</td> <td><code class="language-plaintext highlighter-rouge">get_best_parsable_locale</code></td> </tr> <tr> <td>instance_ansible__ansible-42355d181a11b51ebfc56f6f4b3d9c74e01cb13b-v1055803c3a812189a1133297f7f5468579283f86</td> <td><code class="language-plaintext highlighter-rouge">get_delegated_vars_and_hostname</code></td> </tr> <tr> <td>instance_ansible__ansible-502270c804c33d3bc963930dc85e0f4ca359674d-v7eee2454f617569fd6889f2211f75bc02a35f9f8</td> <td><code class="language-plaintext highlighter-rouge">BaseStrategy</code></td> </tr> <tr> <td>instance_ansible__ansible-be2c376ab87e3e872ca21697508f12c6909cf85a-vba6da65a0f3baefda7a058ebbd0a8dcafb8512f5</td> <td><code class="language-plaintext highlighter-rouge">_build_doc</code></td> </tr> <tr> <td>instance_ansible__ansible-cd9c4eb5a6b2bfaf4a6709f001ce3d0c92c1eed2-v0f01c69f1e2528b935359cfe578530722bca2c59</td> <td><code class="language-plaintext highlighter-rouge">get_sysinfo_facts</code></td> </tr> <tr> <td>instance_ansible__ansible-e64c6c1ca50d7d26a8e7747d8eb87642e767cd74-v0f01c69f1e2528b935359cfe578530722bca2c59</td> <td><code class="language-plaintext highlighter-rouge">_valid_time_stamp</code></td> </tr> <tr> <td>instance_ansible__ansible-f86c58e2d235d8b96029d102c71ee2dfafd57997-v0f01c69f1e2528b935359cfe578530722bca2c59</td> <td><code class="language-plaintext highlighter-rouge">_replace_stderr_clixml</code></td> </tr> <tr> <td>instance_element-hq__element-web-1077729a19c0ce902e713cf6fab42c91fb7907f1-vnan</td> <td><code class="language-plaintext highlighter-rouge">getLastSelectedRoomIdForSpace</code></td> </tr> <tr> <td>instance_element-hq__element-web-33e8edb3d508d6eefb354819ca693b7accc695e7</td> <td><code class="language-plaintext highlighter-rouge">isKeyComboMatch</code></td> </tr> <tr> <td>instance_element-hq__element-web-41dfec20bfe9b62cddbbbf621bef2e9aa9685157-vnan</td> <td><code class="language-plaintext highlighter-rouge">delegatedAuthentication</code></td> </tr> <tr> <td>instance_element-hq__element-web-53b42e321777a598aaf2bb3eab22d710569f83a8-vnan</td> <td><code class="language-plaintext highlighter-rouge">RoomOptionsMenu</code></td> </tr> <tr> <td>instance_element-hq__element-web-772df3021201d9c73835a626df8dcb6334ad9a3e-vnan</td> <td><code class="language-plaintext highlighter-rouge">setSelectedDeviceIds</code>, <code class="language-plaintext highlighter-rouge">selectedDeviceIds</code></td> </tr> <tr> <td>instance_element-hq__element-web-cf3c899dd1f221aa1a1f4c5a80dffc05b9c21c85-vnan</td> <td><code class="language-plaintext highlighter-rouge">getLiveness</code></td> </tr> <tr> <td>instance_flipt-io__flipt-2ce8a0331e8a8f63f2c1b555db8277ffe5aa2e63</td> <td><code class="language-plaintext highlighter-rouge">preFliptAcceptServerVersion</code>, <code class="language-plaintext highlighter-rouge">FliptAcceptServerVersionFromContext</code>, <code class="language-plaintext highlighter-rouge">FliptAcceptServerVersionUnaryInterceptor</code></td> </tr> <tr> <td>instance_flipt-io__flipt-36e62baffae2132f78f9d34dc300a9baa2d7ae0e</td> <td><code class="language-plaintext highlighter-rouge">getTraceExporter</code></td> </tr> <tr> <td>instance_flipt-io__flipt-a0cbc0cb65ae601270bdbe3f5313e2dfd49c80e4</td> <td><code class="language-plaintext highlighter-rouge">envsubst</code></td> </tr> <tr> <td>instance_flipt-io__flipt-a42d38a1bb1df267c53d9d4a706cf34825ae3da9</td> <td><code class="language-plaintext highlighter-rouge">AuthenticationSessionCSRF</code></td> </tr> <tr> <td>instance_flipt-io__flipt-b6cef5cdc0daff3ee99e5974ed60a1dc6b4b0d67</td> <td><code class="language-plaintext highlighter-rouge">ErrorHandler</code></td> </tr> <tr> <td>instance_flipt-io__flipt-c8d71ad7ea98d97546f01cce4ccb451dbcf37d3b</td> <td><code class="language-plaintext highlighter-rouge">SnapshotFromFS</code>, <code class="language-plaintext highlighter-rouge">Unwrap</code></td> </tr> <tr> <td>instance_flipt-io__flipt-cd2f3b0a9d4d8b8a6d3d56afab65851ecdc408e8</td> <td><code class="language-plaintext highlighter-rouge">validateArrayValue</code></td> </tr> <tr> <td>instance_flipt-io__flipt-e91615cf07966da41756017a7d571f9fc0fdbe80</td> <td><code class="language-plaintext highlighter-rouge">NewExporter</code>, <code class="language-plaintext highlighter-rouge">NewImporter</code></td> </tr> <tr> <td>instance_flipt-io__flipt-f36bd61fb1cee4669de1f00e59da462bfeae8765</td> <td><code class="language-plaintext highlighter-rouge">NewFeaturesValidator</code></td> </tr> <tr> <td>instance_future-architect__vuls-2923cbc645fbc7a37d50398eb2ab8febda8c3264</td> <td><code class="language-plaintext highlighter-rouge">rhelRebuildOSVersionToRHEL</code></td> </tr> <tr> <td>instance_future-architect__vuls-36456cb151894964ba1683ce7da5c35ada789970</td> <td><code class="language-plaintext highlighter-rouge">searchCache</code></td> </tr> <tr> <td>instance_future-architect__vuls-73f0adad95c4d227e2ccfa876c85cc95dd065e13</td> <td><code class="language-plaintext highlighter-rouge">GetCveContentTypes</code></td> </tr> <tr> <td>instance_future-architect__vuls-83bcca6e669ba2e4102f26c4a2b52f78c7861f1a</td> <td><code class="language-plaintext highlighter-rouge">listenIPPorts</code></td> </tr> <tr> <td>instance_future-architect__vuls-8d5ea98e50cf616847f4e5a2df300395d1f719e9</td> <td><code class="language-plaintext highlighter-rouge">removeInactives</code></td> </tr> <tr> <td>instance_future-architect__vuls-e4728e388120b311c4ed469e4f942e0347a2689b-v264a82e2f4818e30f5a25e4da53b27ba119f62b5</td> <td><code class="language-plaintext highlighter-rouge">CompareSeverity</code></td> </tr> <tr> <td>instance_gravitational__teleport-0ecf31de0e98b272a6a2610abe1bbedd379a38a3-vce94f93ad1030e3136852817f2423c1b3ac37bc4</td> <td><code class="language-plaintext highlighter-rouge">NotifyExit</code></td> </tr> <tr> <td>instance_gravitational__teleport-2bb3bbbd8aff1164a2353381cb79e1dc93b90d28-vee9b09fb20c43af7e520f57e9239bbcf46b7113d</td> <td><code class="language-plaintext highlighter-rouge">billingMode</code></td> </tr> <tr> <td>instance_gravitational__teleport-326fd1d7be87b03998dbc53bc706fdef90f5065c-v626ec2a48416b10a88641359a169d99e935ff037</td> <td><code class="language-plaintext highlighter-rouge">homeEnvVar</code></td> </tr> <tr> <td>instance_gravitational__teleport-82185f232ae8974258397e121b3bc2ed0c3729ed-v626ec2a48416b10a88641359a169d99e935ff037</td> <td><code class="language-plaintext highlighter-rouge">buildKubeConfigUpdate</code></td> </tr> <tr> <td>instance_gravitational__teleport-baeb2697c4e4870c9850ff0cd5c7a2d08e1401c9-vee9b09fb20c43af7e520f57e9239bbcf46b7113d</td> <td><code class="language-plaintext highlighter-rouge">yubiHSMTestConfig</code>, <code class="language-plaintext highlighter-rouge">gcpKMSTestConfig</code>, <code class="language-plaintext highlighter-rouge">HSMTestConfig</code>, <code class="language-plaintext highlighter-rouge">awsKMSTestConfig</code>, <code class="language-plaintext highlighter-rouge">softHSMTestConfig</code>, <code class="language-plaintext highlighter-rouge">cloudHSMTestConfig</code></td> </tr> <tr> <td>instance_gravitational__teleport-bb69574e02bd62e5ccd3cebb25e1c992641afb2a</td> <td><code class="language-plaintext highlighter-rouge">LiteralNamespace</code></td> </tr> <tr> <td>instance_gravitational__teleport-eefac60a350930e5f295f94a2d55b94c1988c04e-vee9b09fb20c43af7e520f57e9239bbcf46b7113d</td> <td><code class="language-plaintext highlighter-rouge">ParseOSReleaseFromReader</code>, <code class="language-plaintext highlighter-rouge">DMIInfoFromFS</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-0d13e6b4bf80bced6c0946b969b9a1b6963f6bce-v76304ecdb3a5954fcf13feb710e8c40fcf24b73c</td> <td><code class="language-plaintext highlighter-rouge">remove_author_honorifics</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-3aeec6afed9198d734b7ee1293f03ca94ff970e1-v13642507b4fc1f8d234172bf8129942da2c2ca26</td> <td><code class="language-plaintext highlighter-rouge">_get_wikipedia_link</code>, <code class="language-plaintext highlighter-rouge">_get_statement_values</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-431442c92887a3aece3f8aa771dd029738a80eb1-v76304ecdb3a5954fcf13feb710e8c40fcf24b73c</td> <td><code class="language-plaintext highlighter-rouge">luqum_replace_child</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-4b7ea2977be2747496ba792a678940baa985f7ea-v0f5aece3601a5b4419f7ccec1dbda2071be28ee4</td> <td><code class="language-plaintext highlighter-rouge">AuthorRemoteIdConflictError</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-5de7de19211e71b29b2f2ba3b1dff2fe065d660f-v08d8e8889ec945ab821fb156c04c7d2e2810debb</td> <td><code class="language-plaintext highlighter-rouge">is_valid_identifier</code>, <code class="language-plaintext highlighter-rouge">get_identifier_forms</code>, <code class="language-plaintext highlighter-rouge">get_isbn_or_asin</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-72321288ea790a3ace9e36f1c05b68c93f7eec43-v0f5aece3601a5b4419f7ccec1dbda2071be28ee4</td> <td><code class="language-plaintext highlighter-rouge">luqum_replace_field</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-91efee627df01e32007abf2d6ebf73f9d9053076-vbee42ad1b72fb23c6a1c874868a720b370983ed2</td> <td><code class="language-plaintext highlighter-rouge">within_date_range</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-c4eebe6677acc4629cb541a98d5e91311444f5d4-v13642507b4fc1f8d234172bf8129942da2c2ca26</td> <td><code class="language-plaintext highlighter-rouge">find_staged_or_pending</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-d40ec88713dc95ea791b252f92d2f7b75e107440-v13642507b4fc1f8d234172bf8129942da2c2ca26</td> <td><code class="language-plaintext highlighter-rouge">author_import_record_to_author</code>, <code class="language-plaintext highlighter-rouge">import_record_to_edition</code>, <code class="language-plaintext highlighter-rouge">check_cover_url_host</code></td> </tr> <tr> <td>instance_internetarchive__openlibrary-d8162c226a9d576f094dc1830c4c1ffd0be2dd17-v76304ecdb3a5954fcf13feb710e8c40fcf24b73c</td> <td><code class="language-plaintext highlighter-rouge">get_non_isbn_asin</code>, <code class="language-plaintext highlighter-rouge">is_asin_only</code></td> </tr> <tr> <td>instance_navidrome__navidrome-1e96b858a91c640fe64e84c5e5ad8cc0954ea38d</td> <td><code class="language-plaintext highlighter-rouge">validateCredentials</code></td> </tr> <tr> <td>instance_navidrome__navidrome-28389fb05e1523564dfc61fa43ed8eb8a10f938c</td> <td><code class="language-plaintext highlighter-rouge">IsValidPlaylist</code></td> </tr> <tr> <td>instance_navidrome__navidrome-31799662706fedddf5bcc1a76b50409d1f91d327</td> <td><code class="language-plaintext highlighter-rouge">tokenFromHeader</code></td> </tr> <tr> <td>instance_navidrome__navidrome-69e0a266f48bae24a11312e9efbe495a337e4c84</td> <td><code class="language-plaintext highlighter-rouge">DecodeArtworkID</code>, <code class="language-plaintext highlighter-rouge">EncodeArtworkID</code></td> </tr> <tr> <td>instance_navidrome__navidrome-874b17b8f614056df0ef021b5d4f977341084185</td> <td><code class="language-plaintext highlighter-rouge">validatePasswordChange</code></td> </tr> <tr> <td>instance_navidrome__navidrome-9c3b4561652a15846993d477003e111f0df0c585</td> <td><code class="language-plaintext highlighter-rouge">CRLFWriter</code></td> </tr> <tr> <td>instance_navidrome__navidrome-b3980532237e57ab15b2b93c49d5cd5b2d050013</td> <td><code class="language-plaintext highlighter-rouge">lastFMAPIKey</code></td> </tr> <tr> <td>instance_navidrome__navidrome-b65e76293a917ee2dfc5d4b373b1c62e054d0dca</td> <td><code class="language-plaintext highlighter-rouge">WithClientUniqueId</code></td> </tr> <tr> <td>instance_protonmail__webclients-369fd37de29c14c690cb3b1c09a949189734026f</td> <td><code class="language-plaintext highlighter-rouge">findHolidaysCalendarByCountryCodeAndLanguageTag</code></td> </tr> <tr> <td>instance_protonmail__webclients-3a6790f480309130b5d6332dce6c9d5ccca13ee3</td> <td><code class="language-plaintext highlighter-rouge">getCachedChildrenCount</code></td> </tr> <tr> <td>instance_protonmail__webclients-51742625834d3bd0d10fe0c7e76b8739a59c6b9f</td> <td><code class="language-plaintext highlighter-rouge">punycodeUrl</code>, <code class="language-plaintext highlighter-rouge">getHostnameWithRegex</code></td> </tr> <tr> <td>instance_protonmail__webclients-5f0745dd6993bb1430a951c62a49807c6635cd77</td> <td><code class="language-plaintext highlighter-rouge">flushPromises</code></td> </tr> <tr> <td>instance_protonmail__webclients-ae36cb23a1682dcfd69587c1b311ae0227e28f39</td> <td><code class="language-plaintext highlighter-rouge">elementsToRemove</code>, <code class="language-plaintext highlighter-rouge">elementsToBypass</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-0d2afd58f3d0e34af21cee7d8a3fc9d855594e9f-vnan</td> <td><code class="language-plaintext highlighter-rouge">qobj_repr</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-16de05407111ddd82fa12e54389d532362489da9-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">_get_locale_pak_path</code>, <code class="language-plaintext highlighter-rouge">_get_lang_override</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-1943fa072ec3df5a87e18a23b0916f134c131016-vafb3e8e01b31319c66c4e666b8a3b1d8ba55db24</td> <td><code class="language-plaintext highlighter-rouge">set_pinned</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-2dd8966fdcf11972062c540b7a787e4d0de8d372-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">qcolor_to_qsscolor</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-35168ade46184d7e5b91dfa04ca42fe2abd82717-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">template_config_variables</code>, <code class="language-plaintext highlighter-rouge">frozenset</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-473a15f7908f2bb6d670b0e908ab34a28d8cf7e2-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">_get_locale_pak_path</code>, <code class="language-plaintext highlighter-rouge">_get_lang_override</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-52708364b5f91e198defb022d1a5b4b3ebd9b563-v2ef375ac784985212b1805e1d0431dc8f1b3c171</td> <td><code class="language-plaintext highlighter-rouge">StatusbarWidget</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-66cfa15c372fa9e613ea5a82d3b03e4609399fb6-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">_get_locale_pak_path</code>, <code class="language-plaintext highlighter-rouge">_get_lang_override</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-8f46ba3f6dc7b18375f7aa63c48a1fe461190430-v2ef375ac784985212b1805e1d0431dc8f1b3c171</td> <td><code class="language-plaintext highlighter-rouge">_validate_untrusted_args</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-99029144b5109bb1b2a53964a7c129e009980cd9-va0fd88aac89cde702ec1ba84877234da33adce8a</td> <td><code class="language-plaintext highlighter-rouge">copy_remove_setting</code>, <code class="language-plaintext highlighter-rouge">qt_67</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-9b71c1ea67a9e7eb70dd83214d881c2031db6541-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">_get_locale_pak_path</code>, <code class="language-plaintext highlighter-rouge">_get_lang_override</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-a84ecfb80a00f8ab7e341372560458e3f9cfffa2-v2ef375ac784985212b1805e1d0431dc8f1b3c171</td> <td><code class="language-plaintext highlighter-rouge">for_cmd</code>, <code class="language-plaintext highlighter-rouge">EmptyCommandError</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-bf045f7ec7c27709ea3ef61cf41a24e8fdd2e7da-v059c6fdc75567943479b23ebca7c07b5e9a7f34c</td> <td><code class="language-plaintext highlighter-rouge">_FindFlags</code>, <code class="language-plaintext highlighter-rouge">to_qt</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-c0be28ebee3e1837aaf3f30ec534ccd6d038f129-v9f8e9d96c85c85a605e382f1510bd08563afc566</td> <td><code class="language-plaintext highlighter-rouge">extra_suffixes_workaround</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-ec2dcfce9eee9f808efc17a1b99e227fc4421dea-v5149fcda2a9a6fe1d35dfed1bade1444a11ef271</td> <td><code class="language-plaintext highlighter-rouge">_js_log_to_ui</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-ef5ba1a0360b39f9eff027fbdc57f363597c3c3b-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">_get_locale_pak_path</code>, <code class="language-plaintext highlighter-rouge">_get_lang_override</code></td> </tr> <tr> <td>instance_qutebrowser__qutebrowser-ff1c025ad3210506fc76e1f604d8c8c27637d88e-v363c8a7e5ccdf6968fc7ab84a2053ac78036691d</td> <td><code class="language-plaintext highlighter-rouge">set_defaults</code></td> </tr> <tr> <td>instance_tutao__tutanota-f3ffe17af6e8ab007e8d461355057ad237846d9d-vbc0d9ba8f0071fbe982809910959a6ff8884dbbf</td> <td><code class="language-plaintext highlighter-rouge">EntropyFacade</code></td> </tr> <tr> <td>instance_tutao__tutanota-fe240cbf7f0fdd6744ef7bef8cb61676bcdbb621-vc4e41fd0029957297843cb9dec4a25c7c756f029</td> <td><code class="language-plaintext highlighter-rouge">checkEventValidity</code></td> </tr> </tbody> </table> </details> <h5 id="amazonscienceswe-polybench">AmazonScience/SWE-PolyBench</h5> <details> <summary><strong>68 instances</strong> with high-risk coupling (click to expand)</summary> <table> <thead> <tr> <th>Instance ID</th> <th>Coupled Symbols</th> </tr> </thead> <tbody> <tr> <td>angular__angular-37484</td> <td><code class="language-plaintext highlighter-rouge">clearTsConfigCache</code></td> </tr> <tr> <td>apache__dubbo-4379</td> <td><code class="language-plaintext highlighter-rouge">whenCompleteWithContext</code></td> </tr> <tr> <td>apache__dubbo-5356</td> <td><code class="language-plaintext highlighter-rouge">PROMPT</code></td> </tr> <tr> <td>apache__dubbo-6498</td> <td><code class="language-plaintext highlighter-rouge">SERVICE_PATH_PREFIX</code>, <code class="language-plaintext highlighter-rouge">servicePathPrefix</code></td> </tr> <tr> <td>apache__rocketmq-1636</td> <td><code class="language-plaintext highlighter-rouge">TOPIC_MAX_LENGTH</code></td> </tr> <tr> <td>apache__rocketmq-3862</td> <td><code class="language-plaintext highlighter-rouge">incPutMessageEntireTime</code>, <code class="language-plaintext highlighter-rouge">initPutMessageTimeBuckets</code>, <code class="language-plaintext highlighter-rouge">findPutMessageEntireTimePX</code></td> </tr> <tr> <td>apache__rocketmq-4122</td> <td><code class="language-plaintext highlighter-rouge">setStorePathDLedgerCommitLog</code></td> </tr> <tr> <td>apache__rocketmq-4763</td> <td><code class="language-plaintext highlighter-rouge">getEnumByString</code></td> </tr> <tr> <td>apache__rocketmq-5008</td> <td><code class="language-plaintext highlighter-rouge">ConcurrentHashMapUtils</code></td> </tr> <tr> <td>apache__rocketmq-5037</td> <td><code class="language-plaintext highlighter-rouge">CONTROLLER_ELECT_MASTER_FAILED</code></td> </tr> <tr> <td>apache__rocketmq-5834</td> <td><code class="language-plaintext highlighter-rouge">incBrokerGetNumsWithoutSystemTopic</code>, <code class="language-plaintext highlighter-rouge">BROKER_GET_NUMS_WITHOUT_SYSTEM_TOPIC</code>, <code class="language-plaintext highlighter-rouge">getBrokerGetNumsWithoutSystemTopic</code></td> </tr> <tr> <td>apache__rocketmq-7455</td> <td><code class="language-plaintext highlighter-rouge">decodeCommandCustomHeaderDirectly</code></td> </tr> <tr> <td>apache__rocketmq-8051</td> <td><code class="language-plaintext highlighter-rouge">setTraceTopic</code>, <code class="language-plaintext highlighter-rouge">setEnableTrace</code></td> </tr> <tr> <td>apolloconfig__apollo-4119</td> <td><code class="language-plaintext highlighter-rouge">SpringCloudInnerDiscoveryService</code></td> </tr> <tr> <td>coder__code-server-5633</td> <td><code class="language-plaintext highlighter-rouge">welcomeText</code>, <code class="language-plaintext highlighter-rouge">appName</code></td> </tr> <tr> <td>google__gson-2420</td> <td><code class="language-plaintext highlighter-rouge">runTestNoDefaultConstructor</code></td> </tr> <tr> <td>google__gson-2549</td> <td><code class="language-plaintext highlighter-rouge">originalTimeZone</code></td> </tr> <tr> <td>huggingface__transformers-13573</td> <td><code class="language-plaintext highlighter-rouge">reorder_and_upcast_attn</code>, <code class="language-plaintext highlighter-rouge">scale_attn_by_inverse_layer_idx</code></td> </tr> <tr> <td>huggingface__transformers-15831</td> <td><code class="language-plaintext highlighter-rouge">resize_decoder_token_embeddings</code>, <code class="language-plaintext highlighter-rouge">share_encoder_decoder_embeddings</code></td> </tr> <tr> <td>huggingface__transformers-24510</td> <td><code class="language-plaintext highlighter-rouge">warn_if_padding_and_no_attention_mask</code></td> </tr> <tr> <td>huggingface__transformers-29838</td> <td><code class="language-plaintext highlighter-rouge">get_learning_rates</code>, <code class="language-plaintext highlighter-rouge">get_num_trainable_parameters</code>, <code class="language-plaintext highlighter-rouge">get_optimizer_group</code></td> </tr> <tr> <td>huggingface__transformers-31095</td> <td><code class="language-plaintext highlighter-rouge">on_optimizer_step</code></td> </tr> <tr> <td>langchain-ai__langchain-676</td> <td><code class="language-plaintext highlighter-rouge">save_local</code>, <code class="language-plaintext highlighter-rouge">load_local</code></td> </tr> <tr> <td>mrdoob__three.js-17649</td> <td><code class="language-plaintext highlighter-rouge">morphTargetsRelative</code></td> </tr> <tr> <td>mrdoob__three.js-20991</td> <td><code class="language-plaintext highlighter-rouge">setFromMatrix3</code></td> </tr> <tr> <td>mrdoob__three.js-22404</td> <td><code class="language-plaintext highlighter-rouge">setFromAttributeAndIndices</code></td> </tr> <tr> <td>mui__material-ui-13003</td> <td><code class="language-plaintext highlighter-rouge">StepIconComponent</code></td> </tr> <tr> <td>mui__material-ui-14461</td> <td><code class="language-plaintext highlighter-rouge">wrapsIntrinsicElement</code></td> </tr> <tr> <td>mui__material-ui-19257</td> <td><code class="language-plaintext highlighter-rouge">hasPopupIcon</code>, <code class="language-plaintext highlighter-rouge">hasClearIcon</code></td> </tr> <tr> <td>mui__material-ui-33812</td> <td><code class="language-plaintext highlighter-rouge">collapsedIcon</code></td> </tr> <tr> <td>mui__material-ui-36426</td> <td><code class="language-plaintext highlighter-rouge">getOptionKey</code></td> </tr> <tr> <td>prettier__prettier-15408</td> <td><code class="language-plaintext highlighter-rouge">GQL_QUERY_WITH_CONST</code></td> </tr> <tr> <td>prettier__prettier-9736</td> <td><code class="language-plaintext highlighter-rouge">cleanDoc</code></td> </tr> <tr> <td>serverless__serverless-2584</td> <td><code class="language-plaintext highlighter-rouge">compileRole</code></td> </tr> <tr> <td>serverless__serverless-3186</td> <td><code class="language-plaintext highlighter-rouge">setFunctionNames</code></td> </tr> <tr> <td>serverless__serverless-3521</td> <td><code class="language-plaintext highlighter-rouge">getServiceObject</code>, <code class="language-plaintext highlighter-rouge">getServiceName</code></td> </tr> <tr> <td>serverless__serverless-3622</td> <td><code class="language-plaintext highlighter-rouge">mergeResourceArrays</code></td> </tr> <tr> <td>serverless__serverless-3700</td> <td><code class="language-plaintext highlighter-rouge">loadEnvVarsForLocal</code></td> </tr> <tr> <td>serverless__serverless-3808</td> <td><code class="language-plaintext highlighter-rouge">assignDefaultOptions</code></td> </tr> <tr> <td>serverless__serverless-3812</td> <td><code class="language-plaintext highlighter-rouge">invocationId</code></td> </tr> <tr> <td>serverless__serverless-4120</td> <td><code class="language-plaintext highlighter-rouge">isArnRefOrImportValue</code></td> </tr> <tr> <td>serverless__serverless-4293</td> <td><code class="language-plaintext highlighter-rouge">canUseS3TransferAcceleration</code>, <code class="language-plaintext highlighter-rouge">disableTransferAccelerationForCurrentDeploy</code>, <code class="language-plaintext highlighter-rouge">enableS3TransferAcceleration</code>, <code class="language-plaintext highlighter-rouge">isS3TransferAccelerationEnabled</code></td> </tr> <tr> <td>serverless__serverless-4382</td> <td><code class="language-plaintext highlighter-rouge">conceal</code></td> </tr> <tr> <td>serverless__serverless-4531</td> <td><code class="language-plaintext highlighter-rouge">endpointType</code></td> </tr> <tr> <td>serverless__serverless-4793</td> <td><code class="language-plaintext highlighter-rouge">iamManagedPolicies</code></td> </tr> <tr> <td>serverless__serverless-5662</td> <td><code class="language-plaintext highlighter-rouge">getProfile</code></td> </tr> <tr> <td>serverless__serverless-5728</td> <td><code class="language-plaintext highlighter-rouge">suppressLogIfPrintCommand</code></td> </tr> <tr> <td>serverless__serverless-5988</td> <td><code class="language-plaintext highlighter-rouge">envVarsFromOptions</code>, <code class="language-plaintext highlighter-rouge">getEnvVarsFromOptions</code></td> </tr> <tr> <td>serverless__serverless-5994</td> <td><code class="language-plaintext highlighter-rouge">dockerArgsFromOptions</code>, <code class="language-plaintext highlighter-rouge">getDockerArgsFromOptions</code></td> </tr> <tr> <td>serverless__serverless-6293</td> <td><code class="language-plaintext highlighter-rouge">validateHeaderCondition</code>, <code class="language-plaintext highlighter-rouge">validateIpCondition</code>, <code class="language-plaintext highlighter-rouge">validateQueryCondition</code></td> </tr> <tr> <td>serverless__serverless-6322</td> <td><code class="language-plaintext highlighter-rouge">getAlbTargetGroupName</code>, <code class="language-plaintext highlighter-rouge">getAlbTargetGroupNameTagValue</code></td> </tr> <tr> <td>serverless__serverless-6823</td> <td><code class="language-plaintext highlighter-rouge">getDeploymentBucketPolicyLogicalId</code></td> </tr> <tr> <td>serverless__serverless-6869</td> <td><code class="language-plaintext highlighter-rouge">getValueStrToBool</code></td> </tr> <tr> <td>serverless__serverless-6871</td> <td><code class="language-plaintext highlighter-rouge">cfnRoleArn</code></td> </tr> <tr> <td>serverless__serverless-6960</td> <td><code class="language-plaintext highlighter-rouge">getResolved</code>, <code class="language-plaintext highlighter-rouge">getRejected</code></td> </tr> <tr> <td>sveltejs__svelte-1364</td> <td><code class="language-plaintext highlighter-rouge">assignTrue</code></td> </tr> <tr> <td>sveltejs__svelte-1627</td> <td><code class="language-plaintext highlighter-rouge">setData</code></td> </tr> <tr> <td>sveltejs__svelte-1988</td> <td><code class="language-plaintext highlighter-rouge">nextTick</code></td> </tr> <tr> <td>sveltejs__svelte-3430</td> <td><code class="language-plaintext highlighter-rouge">set_input_value</code></td> </tr> <tr> <td>sveltejs__svelte-6525</td> <td><code class="language-plaintext highlighter-rouge">insert_hydration</code></td> </tr> <tr> <td>sveltejs__svelte-6556</td> <td><code class="language-plaintext highlighter-rouge">claim_svg_element</code></td> </tr> <tr> <td>sveltejs__svelte-705</td> <td><code class="language-plaintext highlighter-rouge">callAll</code></td> </tr> <tr> <td>sveltejs__svelte-778</td> <td><code class="language-plaintext highlighter-rouge">setInputType</code></td> </tr> <tr> <td>trinodb__trino-3638</td> <td><code class="language-plaintext highlighter-rouge">updateExecutor</code>, <code class="language-plaintext highlighter-rouge">setMaxConcurrentMetastoreUpdates</code></td> </tr> <tr> <td>trinodb__trino-3771</td> <td><code class="language-plaintext highlighter-rouge">setDelegationTokenCacheTtl</code>, <code class="language-plaintext highlighter-rouge">setDelegationTokenCacheMaximumSize</code></td> </tr> <tr> <td>trinodb__trino-4393</td> <td><code class="language-plaintext highlighter-rouge">validateFileBuckets</code></td> </tr> <tr> <td>trinodb__trino-748</td> <td><code class="language-plaintext highlighter-rouge">setAwsSecretKey</code>, <code class="language-plaintext highlighter-rouge">setAwsAccessKey</code></td> </tr> <tr> <td>yt-dlp__yt-dlp-8917</td> <td><code class="language-plaintext highlighter-rouge">_deprecated_multivalue_fields</code></td> </tr> </tbody> </table> </details> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2026hiddencontracts,
  title={Hidden Naming Contracts in SWE-Agent Benchmarks},
  author={Ganhotra, Jatin},
  year={2026},
  month={April},
  url={https://jatinganhotra.dev/blog/swe-agents/2026/04/01/hidden-naming-contracts-in-swe-agent-benchmarks/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench"/><category term="SWE-Bench_Verified"/><category term="SWE-Bench_Pro"/><category term="SWE-PolyBench"/><category term="SWE-agent"/><summary type="html"><![CDATA[A programmatic scan of six SWE-bench-style benchmarks — SWE-bench Verified, SWE-bench Pro and SWE-PolyBench — finds tests that encode hidden naming contracts, penalizing behaviorally correct fixes that choose different identifiers.]]></summary></entry><entry><title type="html">The Visual Complexity Penalty in Code Understanding - SWE-bench Multimodal Analysis</title><link href="https://jatinganhotra.dev/blog/swe-agents/2025/07/26/swe-bench-multimodal-visual-complexity.html" rel="alternate" type="text/html" title="The Visual Complexity Penalty in Code Understanding - SWE-bench Multimodal Analysis"/><published>2025-07-26T00:00:00+00:00</published><updated>2025-07-26T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2025/07/26/swe-bench-multimodal-visual-complexity</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2025/07/26/swe-bench-multimodal-visual-complexity.html"><![CDATA[ <link rel="stylesheet" href="/assets/css/multimodal-article.css"/> <script type="text/javascript" src="/assets/js/multimodal-article.js"></script> <h2 id="the-collapse-of-ai-coding-agents-when-images-enter-the-picture">The Collapse of AI Coding Agents When Images Enter the Picture</h2> <p>AI coding agents now write real PRs and merge code at unprecedented scale, but they collapse when faced with visual content. In SWE-bench Multimodal, we observe a <strong>73.2% performance drop</strong> when images are involved — a result that challenges the entire field’s current trajectory.</p> <h2 id="the-rise-of-swe-agents-in-industry">The Rise of SWE-Agents in Industry</h2> <p>We are witnessing unprecedented adoption of SWE-agents across the industry. This trend is clearly evident from the surge in pull requests being opened and merged by autonomous coding agents. <a href="https://prarena.ai/">PR Arena</a> tracks the opened and merged PRs by top SWE coding agents - GitHub Copilot, OpenAI Codex, Devin, Cursor Agents, and Codegen. The numbers tell a compelling story of AI agents increasingly participating in real-world software development workflows.</p> <h2 id="reality-check-a-tale-of-two-benchmarks---the-performance-cliff">Reality Check: A Tale of Two Benchmarks - The Performance Cliff</h2> <p>However, when we examine the benchmarks used to evaluate these SWE-agents, a different pattern emerges. Looking at the top performers on the SWE-bench Verified leaderboard, we see several submissions achieving ~70-75% on all instances. But when we examine the same models on SWE-bench Multimodal, performance severely drops to ~30-35%. This raises a natural question: <strong>Why do SWE agents using identical models excel on Verified but struggle significantly on the Multimodal dataset?</strong></p> <p>We know from our <a href="https://jatinganhotra.dev/blog/swe-agents/2025/06/05/swe-bench-verified-discriminative-subsets.html">previous analysis</a> that the SWE-bench Verified benchmark suffers from a saturation problem - while state-of-the-art SWE-agents achieve impressive overall scores, they struggle significantly on discriminative subsets that isolate truly challenging problems, e.g., problems that require complex reasoning across multiple files. <strong>This article investigates whether a similar pattern exists for the multimodal benchmark</strong> - and what factors drive the performance cliff we observe.</p> <blockquote class="block-warning"> <p>This discrepancy raises a critical question: <strong>Is this truly a benchmark problem, or does it reveal fundamental limitations in current AI systems?</strong></p> </blockquote> <h2 id="enter-swe-bench-multimodal-a-new-perspective">Enter SWE-bench Multimodal: A New Perspective</h2> <p>To answer this question, we turn to SWE-bench Multimodal, a recently introduced benchmark that offers a fresh lens on AI agent capabilities. Unlike SWE-bench Verified, which focuses primarily on textual code understanding and generation, SWE-bench Multimodal targets <em>JavaScript-based, user-facing applications, such as UI design systems, web app development, interactive mapping, and syntax highlighters</em>.</p> <p>This multimodal approach better reflects the reality of software engineering, where developers must interpret visual information alongside code. Issues on GitHub frequently include screenshots, error dialogs, and visual demonstrations of problems that need solving.</p> <p>The dataset contains <strong>510 instances</strong> in the test split. Our performance analysis uses this test split, where only <strong>48 instances (9.4%)</strong> are purely text-based<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>, while <strong>462 instances (90.6%)</strong> include visual elements - making this a predominantly multimodal challenge.</p> <h2 id="the-visual-complexity-penalty">The Visual Complexity Penalty</h2> <blockquote class="block-danger"> <p>We uncover a steep <strong>73.2% performance drop</strong> when images are introduced to coding tasks.</p> </blockquote> <p>This dramatic drop highlights a critical limitation in multimodal AI for software engineering — and suggests that the gaps we saw in SWE-bench Verified are symptoms of deeper architectural challenges. Our analysis examines the performance of 11 SWE agents (from 2025) on the SWE-bench Multimodal leaderboard.<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup></p> <p>Before diving into the detailed analysis, let’s establish the key differences between these benchmarks:</p> <table> <thead> <tr> <th>Metric</th> <th>SWE-Bench Verified</th> <th>SWE-Bench Multimodal</th> </tr> </thead> <tbody> <tr> <td>Top performance</td> <td>~75%</td> <td>~36%</td> </tr> <tr> <td>Single-file tasks</td> <td>85.8%</td> <td>40%</td> </tr> <tr> <td>Tasks with images</td> <td>0%</td> <td>90.6%</td> </tr> <tr> <td>Task focus</td> <td>Text/code only</td> <td>Visual + code</td> </tr> <tr> <td>Domain</td> <td>General repositories</td> <td>JavaScript UI/web apps</td> </tr> </tbody> </table> <p>We categorize performance into three key areas:</p> <ol> <li><strong>Overall Performance</strong> - Complete benchmark results across all 510 instances</li> <li><strong>Text-Only Performance</strong> - Instances without visual elements (48 instances)</li> <li><strong>Images Present Performance</strong> - Instances containing visual elements (462 instances)</li> </ol> <p>Our analysis reveals a consistent and striking pattern: <strong>visual content severely degrades performance across all models</strong>.</p> <h3 id="overall-performance-comparison">Overall Performance Comparison</h3> <p>The following table illustrates the stark contrast between text-only and image-containing performance across all evaluated agents. Notice how every single agent achieves near-perfect scores on text-only instances (97-100%) but experiences severe degradation when visual elements are present:</p> <div class="custom-table-container"> <table class="custom-leaderboard-table" id="overall-performance-table"> <thead> <tr> <th class="rank-col" onclick="sortTable(0, 'overall-performance-table')">Rank</th> <th class="agent-col" onclick="sortTable(1, 'overall-performance-table')">Agent Name</th> <th class="date-col" onclick="sortTable(2, 'overall-performance-table')">Date</th> <th class="full-col" onclick="sortTable(3, 'overall-performance-table')">Overall (%)<br/>510 instances</th> <th class="text-only-col" onclick="sortTable(4, 'overall-performance-table')">Text-Only (%)<br/>48 instances</th> <th class="images-present-col" onclick="sortTable(5, 'overall-performance-table')">Images Present (%)<br/>462 instances</th> </tr> </thead> <tbody> <tr> <td class="rank-col">★</td> <td class="agent-col"><i>Combined Systems</i></td> <td class="date-col"><i>2025-07-26</i></td> <td class="full-col"><i>47.8%</i></td> <td class="text-only-col"><i>100.0%</i></td> <td class="images-present-col"><i>42.4%</i></td> </tr> <tr> <td class="rank-col">1</td> <td class="agent-col">GUIRepair + o3 (2025-04-16)</td> <td class="date-col">2025-07-01</td> <td class="full-col">36.5%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">29.9%</td> </tr> <tr> <td class="rank-col">2</td> <td class="agent-col">Refact.ai Agent</td> <td class="date-col">2025-06-11</td> <td class="full-col">36.1%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">29.4%</td> </tr> <tr> <td class="rank-col">3</td> <td class="agent-col">OpenHands-Versa (Claude-Sonnet 4)</td> <td class="date-col">2025-05-28</td> <td class="full-col">34.9%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">28.1%</td> </tr> <tr> <td class="rank-col">4</td> <td class="agent-col">GUIRepair + o4-mini (2025-04-16)</td> <td class="date-col">2025-05-31</td> <td class="full-col">34.3%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">27.5%</td> </tr> <tr> <td class="rank-col">5</td> <td class="agent-col">OpenHands-Versa (Claude-3.7 Sonnet)</td> <td class="date-col">2025-05-09</td> <td class="full-col">31.8%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">24.7%</td> </tr> <tr> <td class="rank-col">6</td> <td class="agent-col">GUIRepair + GPT 4.1 (2025-04-14)</td> <td class="date-col">2025-05-31</td> <td class="full-col">31.6%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">24.5%</td> </tr> <tr> <td class="rank-col">7</td> <td class="agent-col">Zencoder (2025-04-01)</td> <td class="date-col">2025-04-01</td> <td class="full-col">31.0%</td> <td class="text-only-col">97.9%</td> <td class="images-present-col">24.0%</td> </tr> <tr> <td class="rank-col">8</td> <td class="agent-col">GUIRepair + GPT 4o (2024-08-06)</td> <td class="date-col">2025-05-31</td> <td class="full-col">30.8%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">23.6%</td> </tr> <tr> <td class="rank-col">9</td> <td class="agent-col">Globant Code Fixer Agent</td> <td class="date-col">2025-03-25</td> <td class="full-col">30.0%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">22.7%</td> </tr> <tr> <td class="rank-col">10</td> <td class="agent-col">Zencoder (2025-03-10)</td> <td class="date-col">2025-03-11</td> <td class="full-col">27.5%</td> <td class="text-only-col">81.2%</td> <td class="images-present-col">21.9%</td> </tr> <tr> <td class="rank-col">11</td> <td class="agent-col">Agentless Lite + Claude-3.5 Sonnet</td> <td class="date-col">2025-02-26</td> <td class="full-col">25.7%</td> <td class="text-only-col">100.0%</td> <td class="images-present-col">18.0%</td> </tr> </tbody> </table> </div> <p>The Top-Performing Agents achieve near-perfect performance on text-only instances (97-100%) but experience sharp drops when visual elements are introduced - an average 73.2% performance drop when images are introduced (calculated as: 99.1% average text-only performance minus 25.9% average image-present performance = 73.2%).</p> <h2 id="is-image-quantity-the-key-factor">Is Image Quantity the key factor?</h2> <p>The analysis above suggests that images are the primary factor, but is there more to the story? Let’s examine the relationship between the number of images and solve rates across different subsets.</p> <div class="custom-table-container"> <table class="custom-leaderboard-table" id="image-complexity-table"> <thead> <tr> <th class="rank-col">Number of Images</th> <th class="full-col">Instance Count</th> <th class="images-present-col">Average Solve Rate (%)</th> </tr> </thead> <tbody> <tr> <td class="rank-col">0</td> <td class="full-col">48</td> <td class="images-present-col">51.4%</td> </tr> <tr> <td class="rank-col">1</td> <td class="full-col">281</td> <td class="images-present-col">14.1%</td> </tr> <tr> <td class="rank-col">2</td> <td class="full-col">87</td> <td class="images-present-col">16.5%</td> </tr> <tr> <td class="rank-col">3</td> <td class="full-col">58</td> <td class="images-present-col">16.4%</td> </tr> <tr> <td class="rank-col">≥4</td> <td class="full-col">36</td> <td class="images-present-col">19.4%</td> </tr> </tbody> </table> </div> <p>Even though one might assume more images = more difficulty, the data doesn’t support this. Solve rates remain low regardless of whether there’s 1 image or 4.</p> <h2 id="the-multi-file-editing-connection">The Multi-File Editing Connection?</h2> <p>While we cannot directly analyze patch complexity due to the absence of gold patches in SWE-bench Multimodal, the original paper provides crucial insights about the underlying task complexity:</p> <blockquote> <p>In SWE-bench, 83% of task instances edit one file, and 65% edit one function. In SWE-bench M (Multimodal), just 40% of task instances change one file, and 32.5% change one function. On average, the changes by reference solutions in SWE-bench M are larger than those in SWE-bench, with multi-file edits being more commonplace.</p> </blockquote> <p>This finding aligns with our previous analyses on <a href="https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files.html">patch complexity and multi-file patterns</a> and <a href="https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation.html">single-file saturation effects</a>, which showed that state-of-the-art SWE agents struggle significantly with multi-file editing tasks.</p> <blockquote class="block-warning"> <p>The 73.2% performance drop reveals <strong>intersecting difficulties</strong>: it’s not just visual complexity, but the compound challenge of multimodal reasoning combined with multi-file editing tasks that are prevalent in image-containing instances.</p> </blockquote> <h2 id="conclusion">Conclusion</h2> <p>Our analysis of SWE-bench Multimodal provides a definitive answer to the central question we posed: <strong>the performance gaps we observe in discriminative subsets aren’t just benchmark artifacts - they reflect <em>genuine limitations</em> in current AI architectures when handling complex, real-world software engineering tasks.</strong></p> <p>The 73.2% performance drop reveals a <strong>double burden</strong> that extends far beyond simple visual reasoning difficulties. Our analysis uncovered that image-containing instances systematically involve more complex multi-file editing tasks (only 40% single-file in SWE-Bench Multimodal vs. 83% in traditional SWE-bench), creating a perfect storm of difficulties that current AI systems struggle to handle.</p> <p>This finding directly connects to our <a href="https://jatinganhotra.dev/blog/swe-agents/2025/06/05/swe-bench-verified-discriminative-subsets.html">previous research on discriminative subsets</a>, where we demonstrated that <strong>state-of-the-art agents struggle with multi-file reasoning even in purely text-based scenarios</strong>.</p> <p>The consistency of this penalty across all top-performing models - from GUIRepair variants to OpenHands-Versa to Agentless Lite - suggests that <strong>the challenge runs deeper than individual model architectures</strong>.</p> <p>These agents achieve near-perfect performance (97-100%) on text-only instances but uniformly collapse to 18-30% when visual elements and multi-file complexity are introduced. This pattern indicates <strong>fundamental gaps in how current AI systems integrate visual and textual information</strong> in technical contexts, particularly when structural complexity increases.</p> <h2 id="key-takeaways">Key Takeaways</h2> <p>Our findings point to three critical conclusions:</p> <p>• <strong>Current AI models collapse under multimodal + multi-file complexity</strong> - The 73.2% performance drop demonstrates that existing architectures cannot handle the intersecting difficulties of visual reasoning and structural code analysis.</p> <p>• <strong>This impacts the real-world reliability of SWE agents</strong> - Many GitHub issues include screenshots and visual context, and if these follow patterns similar to SWE-bench Multimodal, current deployments may face significant limitations in complex scenarios.</p> <p>• <strong>Fundamentally new multimodal reasoning architectures are needed</strong> - The path forward requires not just better visual understanding, but entirely new approaches to managing complexity when visual reasoning intersects with multi-file code modifications - the hallmark of challenging software engineering work.</p> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2025visual,
  title={The Visual Complexity Penalty in Code Understanding - SWE-bench Multimodal Analysis},
  author={Ganhotra, Jatin},
  year={2025},
  month={July},
  url={https://jatinganhotra.dev/blog/swe-agents/2025/07/26/swe-bench-multimodal-visual-complexity/},
  note={Blog post}
}
</code></pre></div></div> <hr/> <div class="footnotes" role="doc-endnotes"> <ol> <li id="fn:1"> <p>The 48 text-based instances are identified using the <code class="language-plaintext highlighter-rouge">image_assets</code> field in the dataset metadata, which systematically flags whether each instance contains visual content based on analysis of the GitHub issue attachments and descriptions. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> <li id="fn:2"> <p>Due to data collection format improvements between October 2024 and early 2025, our detailed analysis focuses on 11 agents from 2025 with complete instance-level results. While 21 total SWE agents have been submitted to the benchmark, 10 agents from October 2024 provided only aggregate performance numbers without specifying which instances were resolved, preventing detailed comparative analysis. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p> </li> </ol> </div>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench_Multimodal"/><category term="SWE-agent"/><category term="Agentless"/><category term="OpenHands"/><category term="Claude 3.7 Sonnet"/><summary type="html"><![CDATA[How visual complexity penalizes SWE-agents on SWE-bench Multimodal — testing SWE-agent, Agentless and OpenHands with Claude 3.7 Sonnet and OpenAI o3 on visually rich GitHub issues.]]></summary></entry><entry><title type="html">From 73% to 11%: Revealing True SWE-Agent Capabilities with Discriminative Subsets</title><link href="https://jatinganhotra.dev/blog/swe-agents/2025/06/05/swe-bench-verified-discriminative-subsets.html" rel="alternate" type="text/html" title="From 73% to 11%: Revealing True SWE-Agent Capabilities with Discriminative Subsets"/><published>2025-06-05T00:00:00+00:00</published><updated>2025-06-05T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2025/06/05/swe-bench-verified-discriminative-subsets</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2025/06/05/swe-bench-verified-discriminative-subsets.html"><![CDATA[ <link rel="stylesheet" href="/assets/css/discriminative-article.css"/> <script type="text/javascript" src="/assets/js/discriminative-article.js"></script> <p>Since my <a href="https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard.html">last analysis of SWE-Bench Verified</a> on April 15, there has been significant progress on the leaderboard. The best performing SWE-agents are now at <strong>73.20%</strong> (Tools + Claude 4 Opus) whereas only ~45 days ago, the best performing system was Augment Agent v0 at <strong>65.40%</strong> - representing a remarkable <strong>7.8 percentage point improvement</strong> in less than two months.</p> <h3 id="the-saturation-problem-revisited">The Saturation Problem Revisited</h3> <p>In my <a href="https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard.html">previous analyses</a>, I identified that Easy problems are effectively saturated, with top SWE-agents achieving 84-86% success rates. My <a href="https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation.html">single-file saturation study</a> further revealed structural limitations in current evaluation approaches.</p> <p>This saturation creates a <strong>differentiation problem</strong>: when most competitive SWE-agents solve 160+ of the same 194 Easy problems, these categories no longer provide meaningful signal for distinguishing between top-tier systems. The real competition has shifted to unsolved and sparsely-solved problems across all difficulty categories.</p> <hr/> <h2 id="a-data-driven-solution-discriminative-subsets">A Data-Driven Solution: Discriminative Subsets</h2> <p>Rather than arbitrarily choosing “hard” problems, I developed a systematic methodology by analyzing <strong>how many SWE-agents solve each instance</strong> across all 500 problems in SWE-Bench Verified.</p> <h4 id="instance-solve-distribution-analysis">Instance Solve Distribution Analysis</h4> <p>Each of the 500 instances was checked against evaluation results from 83 distinct SWE-agents (submitted between October 2023–May 2025) to record solve counts. <strong>“Solved” means the agent’s fix passed the verification test suite</strong> - the same standard used in the original SWE-bench evaluation.</p> <p>I categorized all instances based on how many of the 83 evaluated SWE-agents successfully solve them:</p> <div class="visualization-container"> <div class="visualization"> <h3 class="chart-title">Instance Solve Count Distribution</h3> <p class="chart-description"> How many SWE-Bench Verified instances are solved by different numbers of agents (out of 83 evaluated) </p> <div class="histogram-container"> <div class="histogram" id="histogram"> </div> </div> </div> </div> <table> <thead> <tr> <th>Bucket</th> <th>Solve Count</th> <th>Instances</th> <th>Percentage</th> <th>Easy</th> <th>Medium</th> <th>Hard</th> <th>Single</th> <th>Multi</th> </tr> </thead> <tbody> <tr> <td><strong>Unsolved</strong></td> <td>0 agents</td> <td>52</td> <td>10.4%</td> <td>5</td> <td>26</td> <td>21</td> <td>27</td> <td>25</td> </tr> <tr> <td><strong>Ultra Rare</strong></td> <td>1-2 agents</td> <td>26</td> <td>5.2%</td> <td>6</td> <td>16</td> <td>4</td> <td>17</td> <td>9</td> </tr> <tr> <td><strong>Very Rare</strong></td> <td>3-5 agents</td> <td>17</td> <td>3.4%</td> <td>3</td> <td>10</td> <td>4</td> <td>14</td> <td>3</td> </tr> <tr> <td><strong>Rare</strong></td> <td>6-10 agents</td> <td>22</td> <td>4.4%</td> <td>1</td> <td>19</td> <td>2</td> <td>19</td> <td>3</td> </tr> <tr> <td><strong>Uncommon</strong></td> <td>11-20 agents</td> <td>38</td> <td>7.6%</td> <td>13</td> <td>22</td> <td>3</td> <td>28</td> <td>10</td> </tr> <tr> <td><strong>Common</strong></td> <td>21-40 agents</td> <td>96</td> <td>19.2%</td> <td>27</td> <td>62</td> <td>7</td> <td>82</td> <td>14</td> </tr> <tr> <td><strong>Very Common</strong></td> <td>41-60 agents</td> <td>93</td> <td>18.6%</td> <td>38</td> <td>52</td> <td>3</td> <td>88</td> <td>5</td> </tr> <tr> <td><strong>Solved</strong></td> <td>61+ agents</td> <td>156</td> <td>31.2%</td> <td>101</td> <td>53</td> <td>2</td> <td>154</td> <td>2</td> </tr> </tbody> </table> <p><strong>Key insight</strong>:</p> <ul> <li>69% of problems are solved by 21+ agents, resulting in limited discrimination during evaluation</li> <li>The competitive frontier exists in the first five categories (155 instances total), solved by ≤20 agents (High discrimination potential)</li> <li>52 completely unsolved problems (Maximum discrimination)</li> </ul> <p><br/></p> <h2 id="four-discriminative-subsets">Four Discriminative Subsets</h2> <p>Rather than continuing to measure incremental improvements on largely-solved Easy problems, I designed targeted subsets to focus on:</p> <ol> <li><strong>Completely unsolved problems</strong> (52 instances) - true frontier challenges</li> <li><strong>Sparsely solved problems</strong> - instances resolved by only a handful of agents</li> <li><strong>Problems with high solution variance</strong> - where top SWE-agents show meaningful differences</li> </ol> <p>This approach yields a more discriminative and high-resolution instrument for measuring real-world SWE-agent capability differences, similar to how other AI benchmarks have evolved when existing evaluations became saturated.</p> <p>Based on this analysis, I created four targeted evaluation subsets. The “Solve Range” column shows how many agents successfully solve the problems within each subset - for example, Frontier subset problems are solved by 0-5 agents, making them the most evaluatively sensitive.</p> <table> <thead> <tr> <th>Subset</th> <th>Description</th> <th>Total</th> <th>Easy</th> <th>Medium</th> <th>Hard</th> <th>Single</th> <th>Multi</th> <th>Solve Range</th> <th>Top Agent %</th> </tr> </thead> <tbody> <tr> <td><strong>Frontier</strong></td> <td>Solved by ≤5 agents</td> <td>95</td> <td>14</td> <td>52</td> <td>29</td> <td>58</td> <td>37</td> <td>0–5</td> <td>11.6%</td> </tr> <tr> <td><strong>Challenging</strong></td> <td>Solved by ≤20 agents</td> <td>155</td> <td>28</td> <td>93</td> <td>34</td> <td>105</td> <td>50</td> <td>0–20</td> <td>31.6%</td> </tr> <tr> <td><strong>Hard</strong></td> <td>All Hard problems</td> <td>45</td> <td>0</td> <td>0</td> <td>45</td> <td>20</td> <td>25</td> <td>0–61</td> <td>42.2%</td> </tr> <tr> <td><strong>MultiFile</strong></td> <td>Multi-file + ≤10 solves</td> <td>40</td> <td>3</td> <td>17</td> <td>20</td> <td>0</td> <td>40</td> <td>0–7</td> <td>10.0%</td> </tr> </tbody> </table> <p><strong>Subset Relationships</strong>:</p> <ul> <li>Frontier ⊆ Challenging (all Frontier problems are included in Challenging)</li> <li>Hard and MultiFile subsets partially overlap with both Frontier and Challenging subsets</li> <li>Single-file problems involve changes to one source file, while multi-file problems require coordinated modifications across multiple files.</li> </ul> <h4 id="1-frontier-subset-95-instances">1. <strong>Frontier Subset</strong> (95 instances)</h4> <p><em>Problems solved by ≤5 agents - maximum evaluative sensitivity</em></p> <p>This subset combines completely unsolved problems with ultra-rare and very-rare solves. It’s composed of 14 Easy, 52 Medium, and 29 Hard problems. Notably, even the top-performing <strong>Claude 4 Opus scores just 11.6%</strong> on this subset, compared to its 73.2% on the full benchmark. This provides extraordinary differentiation power between cutting-edge systems.</p> <ul> <li><strong>Composition</strong>: 58 single-file, 37 multi-file problems</li> <li><strong>Top Performance</strong>: Claude 4 Opus 11.6% (vs 73.2% on full benchmark)</li> <li><strong>Purpose</strong>: Maximum resolution for cutting-edge agent comparison</li> </ul> <p><strong>Top-10 performing SWE-agents on the Frontier subset:</strong></p> <table> <thead> <tr> <th>Rank</th> <th>SWE-Agent</th> <th>Resolved</th> <th>Percentage</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Tools + Claude 4 Opus (2025-05-22)</td> <td>11/95</td> <td>11.6%</td> </tr> <tr> <td>2</td> <td>Tools + Claude 4 Sonnet (2025-05-22)</td> <td>8/95</td> <td>8.4%</td> </tr> <tr> <td>3</td> <td>OpenHands + Claude 4 Sonnet</td> <td>7/95</td> <td>7.4%</td> </tr> <tr> <td>4</td> <td>Zencoder (2025-04-30)</td> <td>6/95</td> <td>6.3%</td> </tr> <tr> <td>5</td> <td>Nemotron-CORTEXA (2025-05-16)</td> <td>5/95</td> <td>5.3%</td> </tr> <tr> <td>6</td> <td>Learn-by-interact</td> <td>4/95</td> <td>4.2%</td> </tr> <tr> <td>7</td> <td>TRAE</td> <td>3/95</td> <td>3.2%</td> </tr> <tr> <td>8</td> <td>Refact.ai Agent</td> <td>3/95</td> <td>3.2%</td> </tr> <tr> <td>9</td> <td>SWE-agent + Claude 4 Sonnet</td> <td>3/95</td> <td>3.2%</td> </tr> <tr> <td>10</td> <td>Blackbox AI Agent</td> <td>3/95</td> <td>3.2%</td> </tr> </tbody> </table> <h4 id="2-challenging-subset-155-instances">2. <strong>Challenging Subset</strong> (155 instances)</h4> <p><em>Problems solved by ≤20 agents - strong evaluative power</em></p> <p>Expanding to include rare and uncommon problems, this subset maintains robust differentiating ability while providing more instances for statistical significance. Claude 4 Opus reaches 31.6% here - still providing much better separation than the 84%+ scores on Easy problems.</p> <ul> <li><strong>Composition</strong>: 28 Easy, 93 Medium, 34 Hard; 105 single-file, 50 multi-file</li> <li><strong>Top Performance</strong>: Claude 4 Opus 31.6%</li> <li><strong>Purpose</strong>: Balance of resolution and statistical significance</li> </ul> <p><strong>Top-10 performing SWE-agents on the Challenging subset:</strong></p> <table> <thead> <tr> <th>Rank</th> <th>SWE-Agent</th> <th>Resolved</th> <th>Percentage</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Tools + Claude 4 Opus (2025-05-22)</td> <td>49/155</td> <td>31.6%</td> </tr> <tr> <td>2</td> <td>Tools + Claude 4 Sonnet (2025-05-22)</td> <td>42/155</td> <td>27.1%</td> </tr> <tr> <td>3</td> <td>OpenHands + Claude 4 Sonnet</td> <td>36/155</td> <td>23.2%</td> </tr> <tr> <td>4</td> <td>Zencoder (2025-04-30)</td> <td>36/155</td> <td>23.2%</td> </tr> <tr> <td>5</td> <td>TRAE</td> <td>34/155</td> <td>21.9%</td> </tr> <tr> <td>6</td> <td>Nemotron-CORTEXA (2025-05-16)</td> <td>32/155</td> <td>20.6%</td> </tr> <tr> <td>7</td> <td>devlo (2025-05-19)</td> <td>30/155</td> <td>19.4%</td> </tr> <tr> <td>8</td> <td>Refact.ai Agent</td> <td>27/155</td> <td>17.4%</td> </tr> <tr> <td>9</td> <td>Blackbox AI Agent</td> <td>27/155</td> <td>17.4%</td> </tr> <tr> <td>10</td> <td>Learn-by-interact</td> <td>26/155</td> <td>16.8%</td> </tr> </tbody> </table> <h4 id="3-hard-45-instances">3. <strong>Hard</strong> (45 instances)</h4> <p><em>All Hard difficulty problems regardless of solve rate</em></p> <p>This subset focuses specifically on the 45 Hard problems, with Claude 4 Opus achieving 42.2%. Interestingly, this includes some problems solved by many agents, showing that difficulty level and solve count don’t perfectly correlate.</p> <ul> <li><strong>Composition</strong>: 0 Easy, 0 Medium, 45 Hard; 20 single-file, 25 multi-file</li> <li><strong>Top Performance</strong>: Claude 4 Opus 42.2%</li> <li><strong>Purpose</strong>: Focused evaluation on most difficult problem category</li> </ul> <p><strong>Top-10 performing SWE-agents on the Hard subset:</strong></p> <table> <thead> <tr> <th>Rank</th> <th>SWE-Agent</th> <th>Resolved</th> <th>Percentage</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Tools + Claude 4 Opus (2025-05-22)</td> <td>19/45</td> <td>42.2%</td> </tr> <tr> <td>2</td> <td>Tools + Claude 4 Sonnet (2025-05-22)</td> <td>15/45</td> <td>33.3%</td> </tr> <tr> <td>3</td> <td>OpenHands + Claude 4 Sonnet</td> <td>15/45</td> <td>33.3%</td> </tr> <tr> <td>4</td> <td>TRAE</td> <td>14/45</td> <td>31.1%</td> </tr> <tr> <td>5</td> <td>devlo (2025-05-19)</td> <td>13/45</td> <td>28.9%</td> </tr> <tr> <td>6</td> <td>OpenHands (2025-04-15)</td> <td>13/45</td> <td>28.9%</td> </tr> <tr> <td>7</td> <td>Zencoder (2025-04-30)</td> <td>12/45</td> <td>26.7%</td> </tr> <tr> <td>8</td> <td>Nemotron-CORTEXA (2025-05-16)</td> <td>12/45</td> <td>26.7%</td> </tr> <tr> <td>9</td> <td>SWE-agent + Claude 4 Sonnet</td> <td>12/45</td> <td>26.7%</td> </tr> <tr> <td>10</td> <td>OpenHands + 4x Scaled (2024-02-03)</td> <td>12/45</td> <td>26.7%</td> </tr> </tbody> </table> <h4 id="4-multifile-40-instances">4. <strong>MultiFile</strong> (40 instances)</h4> <p><em>Multi-file problems solved by ≤10 agents</em></p> <p>This targets the intersection of multi-file problems (which tend to be harder) with low solve counts. These problems require coordinated edits across multiple source files, making them more complex for current SWE-agents. It’s the most challenging subset - even Claude 4 Sonnet only achieves 10.0%. The composition (3 Easy, 17 Medium, 20 Hard) confirms that multi-file problems are inherently more difficult.</p> <ul> <li><strong>Composition</strong>: 3 Easy, 17 Medium, 20 Hard; 0 single-file, 40 multi-file</li> <li><strong>Top Performance</strong>: Claude 4 Sonnet 10.0%</li> <li><strong>Purpose</strong>: Target intersection of multi-file complexity and low solve rates</li> </ul> <p><strong>Top-10 performing SWE-agents on the MultiFile subset:</strong></p> <table> <thead> <tr> <th>Rank</th> <th>SWE-Agent</th> <th>Resolved</th> <th>Percentage</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>Tools + Claude 4 Sonnet (2025-05-22)</td> <td>4/40</td> <td>10.0%</td> </tr> <tr> <td>2</td> <td>Tools + Claude 4 Opus (2025-05-22)</td> <td>3/40</td> <td>7.5%</td> </tr> <tr> <td>3</td> <td>OpenHands + Claude 4 Sonnet</td> <td>3/40</td> <td>7.5%</td> </tr> <tr> <td>4</td> <td>SWE-agent + Claude 4 Sonnet</td> <td>3/40</td> <td>7.5%</td> </tr> <tr> <td>5</td> <td>TRAE</td> <td>2/40</td> <td>5.0%</td> </tr> <tr> <td>6</td> <td>Zencoder (2025-04-30)</td> <td>2/40</td> <td>5.0%</td> </tr> <tr> <td>7</td> <td>OpenHands (2025-04-15)</td> <td>2/40</td> <td>5.0%</td> </tr> <tr> <td>8</td> <td>Blackbox AI Agent</td> <td>2/40</td> <td>5.0%</td> </tr> <tr> <td>9</td> <td>Learn-by-interact</td> <td>2/40</td> <td>5.0%</td> </tr> <tr> <td>10</td> <td>Amazon Q Developer Agent (v20240719-dev)</td> <td>2/40</td> <td>5.0%</td> </tr> </tbody> </table> <hr/> <h3 id="summary-comparison">Summary Comparison</h3> <table> <thead> <tr> <th>Subset</th> <th>Instances</th> <th>Top Agent %</th> <th>Focus</th> </tr> </thead> <tbody> <tr> <td><strong>Frontier</strong></td> <td>95</td> <td>11.6%</td> <td>Maximum sensitivity</td> </tr> <tr> <td><strong>Challenging</strong></td> <td>155</td> <td>31.6%</td> <td>Broad + sensitive</td> </tr> <tr> <td><strong>Hard</strong></td> <td>45</td> <td>42.2%</td> <td>Traditional difficulty</td> </tr> <tr> <td><strong>MultiFile</strong></td> <td>40</td> <td>10.0%</td> <td>Real-world complexity</td> </tr> </tbody> </table> <hr/> <h2 id="key-insights-and-patterns">Key Insights and Patterns</h2> <h4 id="1-medium-problems-drive-frontier-resolution">1. Medium Problems Drive Frontier Resolution</h4> <p>The Frontier subset contains 52 Medium vs 29 Hard problems, revealing that traditional difficulty categories don’t capture all sources of complexity. Some Medium problems remain more challenging than many Hard problems. This suggests that ‘Medium’ in SWE-Bench often reflects problem scope or context rather than true agent difficulty.</p> <h4 id="2-multi-file-problems-are-genuinely-harder">2. Multi-file Problems Are Genuinely Harder</h4> <p>Multi-file problems dominate the low-solve buckets:</p> <ul> <li>40/40 MultiFile problems are multi-file (by design)</li> <li>37/95 Frontier problems are multi-file (39%)</li> <li>Only 2/156 “Solved” problems are multi-file (1.3%)</li> </ul> <h4 id="3-massive-performance-differentiation-gains">3. Massive Performance Differentiation Gains</h4> <p>The performance gaps between full benchmark and targeted subsets are dramatic. While the top two SWE-agents (Tools + Claude 4 Opus and Tools + Claude 4 Sonnet) are separated by less than 1 percentage point on the entire 500-instance SWE-Bench Verified benchmark (73.2% vs 72.4%), the specialized subsets create substantial separation between these same systems. These clear performance gaps demonstrate the power of focusing evaluation on truly challenging problems.</p> <p>While the specialized subsets have smaller sample sizes, the large performance differences (typically 35-65 percentage point drops from full benchmark performance) clearly indicate meaningful capability distinctions.</p> <div class="visualization-container"> <div class="visualization"> <h3 class="chart-title">Performance Comparison Across Subsets</h3> <p class="chart-description"> Top SWE-agents performance on full benchmark vs. discriminative subsets </p> <div class="performance-chart"> <div class="subset-labels"> <div class="subset-label agents">SWE-Agent</div> <div class="subset-label full">Full Benchmark</div> <div class="subset-label frontier">Frontier</div> <div class="subset-label challenging">Challenging</div> <div class="subset-label hard">Hard</div> <div class="subset-label multifile">MultiFile</div> </div> <div class="bar-chart" id="barChart"> </div> </div> </div> </div> <hr/> <h2 id="implications-for-the-research-community">Implications for the Research Community</h2> <h4 id="immediate-benefits">Immediate Benefits</h4> <ol> <li><strong>Enhanced Signal</strong>: Researchers can immediately use these subsets for more sensitive evaluation</li> <li><strong>Research Focus</strong>: Identifying specific problem types guides targeted improvement efforts</li> <li><strong>Facilitates curriculum design</strong>: For agent fine-tuning based on real-world bottlenecks</li> <li><strong>Clearer Progress</strong>: Performance improvements on frontier problems represent genuine capability advances</li> </ol> <h4 id="methodological-innovation">Methodological Innovation</h4> <p>This solve-distribution approach could be applied to other saturated benchmarks:</p> <ol> <li>Analyze how many systems solve each problem</li> <li>Identify low-solve instances for targeted subsets</li> <li>Create sensitive evaluation instruments</li> <li>Maintain evaluative power as capabilities advance</li> </ol> <h4 id="future-evolution">Future Evolution</h4> <p>As SWE-agents continue improving, this methodology enables dynamic subset creation:</p> <ul> <li>Current “Ultra Rare” problems may become “Common”</li> <li>New targeted subsets can be generated using the same framework</li> <li>Evaluation maintains sensitivity to genuine progress</li> </ul> <hr/> <h2 id="technical-implementation-notes">Technical Implementation Notes</h2> <h4 id="data-availability">Data Availability</h4> <p>All subset definitions and solve matrices are available as structured JSON data, enabling:</p> <ul> <li>Immediate subset evaluation using existing SWE-Bench infrastructure</li> <li>Integration with current evaluation pipelines</li> <li>Reproducible research and fair comparisons</li> </ul> <h4 id="evaluation-guidelines">Evaluation Guidelines</h4> <p>For consistent evaluation across the research community:</p> <ol> <li>Report both full benchmark and subset performance</li> <li>Use Frontier subset for cutting-edge system comparison</li> <li>Use Challenging subset for statistical significance</li> <li>Use specialized subsets (Hard, MultiFile) for targeted research</li> </ol> <hr/> <h2 id="try-the-discriminative-subsets">Try the Discriminative Subsets</h2> <p>The targeted subsets are available on HuggingFace for immediate use:</p> <p><strong>Dataset</strong>: <a href="https://huggingface.co/datasets/jatinganhotra/SWE-bench_Verified-discriminative"><code class="language-plaintext highlighter-rouge">jatinganhotra/SWE-bench_Verified-discriminative</code></a></p> <p><strong>Four splits</strong>: frontier, challenging, hard, multifile</p> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">datasets</span> <span class="kn">import</span> <span class="n">load_dataset</span>

<span class="c1"># Load all splits
</span><span class="n">dataset</span> <span class="o">=</span> <span class="nf">load_dataset</span><span class="p">(</span><span class="sh">"</span><span class="s">jatinganhotra/SWE-bench_Verified-discriminative</span><span class="sh">"</span><span class="p">)</span>

<span class="c1"># Load specific split for targeted evaluation
</span><span class="n">frontier</span> <span class="o">=</span> <span class="nf">load_dataset</span><span class="p">(</span><span class="sh">"</span><span class="s">jatinganhotra/SWE-bench_Verified-discriminative</span><span class="sh">"</span><span class="p">,</span> <span class="n">split</span><span class="o">=</span><span class="sh">"</span><span class="s">frontier</span><span class="sh">"</span><span class="p">)</span>
</code></pre></div></div> <p>I encourage researchers to benchmark their SWE-agents on these discriminative subsets and share results publicly. Tracking progress here, not just on saturated sets, will best reflect true capability gains in autonomous software engineering rather than incremental improvements on saturated problem sets.</p> <hr/> <h2 id="conclusion">Conclusion</h2> <p>This analysis reveals that SWE-Bench Verified’s evaluative power has become concentrated in a subset of challenging problems. Systematically identifying these problems through solve-distribution analysis enables high-resolution benchmarks like the Frontier Subset, which reveal capability distinctions that broad benchmarks obscure.</p> <p>The <strong>Challenging Subset</strong> balances sensitivity with statistical power, while the <strong>Hard</strong> and <strong>MultiFile</strong> subsets offer targeted evaluation for specific research directions.</p> <p>Most importantly, this methodology - analyzing solve distribution to identify evaluatively sensitive problems - provides a data-driven framework for benchmark evolution. As AI capabilities continue advancing, this approach ensures evaluation maintains sensitivity to genuine progress rather than incremental improvements on saturated problem sets.</p> <p>The targeted subsets are immediately usable with existing SWE-Bench infrastructure, enabling the research community to adopt more sensitive evaluation practices while pushing toward the true frontiers of automated software engineering.</p> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2025discriminative,
  title={From 73% to 11%: Revealing True SWE-Agent Capabilities with Discriminative Subsets},
  author={Ganhotra, Jatin},
  year={2025},
  month={June},
  url={https://jatinganhotra.dev/blog/swe-agents/2025/06/05/swe-bench-verified-discriminative-subsets/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench_Verified"/><category term="SWE-agent"/><category term="OpenHands"/><category term="Claude 4 Opus"/><category term="L* agent"/><summary type="html"><![CDATA[Discriminative subsets of SWE-bench Verified reveal true SWE-agent capability — how aggregate scores hide wide variation across SWE-agent, OpenHands, Claude 4 Opus and the L* agent (from 73% to 11%).]]></summary></entry><entry><title type="html">Cracking the Code: How Difficult Are SWE-Bench-Verified Tasks Really?</title><link href="https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard.html" rel="alternate" type="text/html" title="Cracking the Code: How Difficult Are SWE-Bench-Verified Tasks Really?"/><published>2025-04-15T00:00:00+00:00</published><updated>2025-04-15T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard.html"><![CDATA[<p>When OpenAI released <a href="https://openai.com/index/introducing-swe-bench-verified/">SWE-Bench-Verified</a>, they included human annotations estimating how long each coding task would take an experienced software engineer to solve. This gives us a unique lens through which to analyze AI coding performance. As <a href="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html">I’ve discussed in previous analyses</a>, understanding the true complexity distribution of these tasks is critical to properly interpreting benchmark results.</p> <h3 id="how-human-experts-judge-task-difficulty">How Human Experts Judge Task Difficulty</h3> <p>OpenAI asked human annotators to estimate completion times for each task, assuming the engineer had “a few hours to familiarize themselves with the codebase.” They used four time-based categories:</p> <ul> <li><strong>&lt; 15 minutes</strong>: Trivial changes like adding assertions to a function</li> <li><strong>15 minutes – 1 hour</strong>: Small changes requiring some thought</li> <li><strong>1 – 4 hours</strong>: Substantial rewrites affecting functions or multiple files</li> <li><strong>&gt; 4 hours</strong>: Esoteric issues requiring significant research and changing 100+ lines of code</li> </ul> <p>While these estimates aren’t used for dataset filtering, they provide valuable insight into the perceived difficulty distribution.</p> <h3 id="breaking-down-swe-bench-verified-by-difficulty">Breaking Down SWE-Bench-Verified by Difficulty</h3> <p>When we analyze the 500 issues in SWE-Bench-Verified using these time-based difficulty metrics, the distribution is revealing:</p> <table> <thead> <tr> <th>Difficulty Category</th> <th>Count</th> <th>Percentage</th> </tr> </thead> <tbody> <tr> <td><code class="language-plaintext highlighter-rouge">&lt;15</code> minutes</td> <td>194</td> <td>38.80%</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">15</code> minutes - <code class="language-plaintext highlighter-rouge">1</code> hour</td> <td>261</td> <td>52.20%</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">1-4</code> hours</td> <td>42</td> <td>8.40%</td> </tr> <tr> <td><code class="language-plaintext highlighter-rouge">&gt;4</code> hours</td> <td>3</td> <td>0.60%</td> </tr> </tbody> </table> <p><strong>Key Insight</strong>: The vast majority (91%) of issues are estimated to take less than an hour for a human expert to solve, with only a tiny fraction (0.60%) requiring more than 4 hours.</p> <h3 id="standardizing-difficulty-terminology">Standardizing Difficulty Terminology</h3> <p>More recently, the “Multi-SWE-bench” paper (<a href="https://arxiv.org/abs/2504.02605">Zhu et al., 2024</a>) simplified these four categories into three difficulty levels:</p> <ul> <li><strong>Easy</strong>: ≤ 15 minutes (194 issues, 38.80%)</li> <li><strong>Medium</strong>: 15 minutes – 1 hour (261 issues, 52.20%)</li> <li><strong>Hard</strong>: ≥ 1 hour (45 issues, 9.00%)</li> </ul> <p>This classification provides a clearer framework for evaluating model performance across difficulty levels.</p> <h3 id="quantifying-difficulty-beyond-time-estimates">Quantifying Difficulty: Beyond Time Estimates</h3> <p>To gain deeper insights into what makes tasks difficult, we can examine objective metrics across difficulty levels:</p> <table> <thead> <tr> <th>Difficulty</th> <th>Count</th> <th>Avg. #Files</th> <th>Avg. #Hunks</th> <th>Avg. #Lines</th> </tr> </thead> <tbody> <tr> <td>Easy</td> <td>194</td> <td>1.03</td> <td>1.37</td> <td>5.04</td> </tr> <tr> <td>Medium</td> <td>261</td> <td>1.28</td> <td>2.48</td> <td>14.1</td> </tr> <tr> <td>Hard</td> <td>45</td> <td>2.0</td> <td>6.82</td> <td>55.78</td> </tr> <tr> <td>Overall</td> <td>500</td> <td>1.25</td> <td>2.44</td> <td>14.33</td> </tr> </tbody> </table> <h4 id="key-observations">Key Observations</h4> <ul> <li><strong>Scaling Relationship:</strong> All metrics (files, hunks, lines) increase with difficulty level, but at different rates.</li> <li><strong>Lines Changed:</strong> Shows the most dramatic increase from Easy to Hard (11x increase), highlighting that hard patches involve significantly more code changes.</li> <li><strong>Files Modified:</strong> Shows a more modest increase (2x from Easy to Hard), suggesting that difficulty isn’t just about the number of files.</li> <li><strong>Hunks:</strong> Increases 5x from Easy to Hard, indicating more separate code blocks need modification in harder tasks.</li> </ul> <h3 id="the-complexity-of-single-vs-multi-file-issues">The Complexity of Single vs. Multi-File Issues</h3> <p>When we combine difficulty levels with file count, we see striking patterns:</p> <table> <thead> <tr> <th>Difficulty</th> <th>Total Issues</th> <th>Single-file</th> <th>Multi-file</th> <th>Best Model %</th> <th>Combined %</th> </tr> </thead> <tbody> <tr> <td>Easy</td> <td>194</td> <td>188 (96.91%)</td> <td>6 (3.09%)</td> <td>81.44%</td> <td>95.36%</td> </tr> <tr> <td>Medium</td> <td>261</td> <td>221 (84.67%)</td> <td>40 (15.33%)</td> <td>62.07%</td> <td>84.29%</td> </tr> <tr> <td>Hard</td> <td>45</td> <td>20 (44.44%)</td> <td>25 (55.56%)</td> <td>26.67%</td> <td>42.22%</td> </tr> <tr> <td><strong>Total</strong></td> <td><strong>500</strong></td> <td><strong>429 (85.8%)</strong></td> <td><strong>71 (14.2%)</strong></td> <td><strong>65.4%</strong></td> <td><strong>84.8%</strong></td> </tr> </tbody> </table> <p><strong>Critical Observation</strong>: As difficulty increases, the proportion of multi-file issues rises dramatically—from just 3.09% of easy issues to 55.56% of hard issues. This suggests multi-file complexity as a significant factor in what makes programming challenges difficult.</p> <p>Looking deeper at the metrics for single vs. multi-file tasks:</p> <table> <thead> <tr> <th>File Count</th> <th>Count</th> <th>Avg. #Files</th> <th>Avg. #Hunks</th> <th>Avg. #Lines</th> </tr> </thead> <tbody> <tr> <td>Single</td> <td>429</td> <td>1.0</td> <td>1.78</td> <td>10.05</td> </tr> <tr> <td>Multi</td> <td>71</td> <td>2.73</td> <td>6.42</td> <td>40.23</td> </tr> <tr> <td>Overall</td> <td>500</td> <td>1.25</td> <td>2.44</td> <td>14.33</td> </tr> </tbody> </table> <p>This table reveals that multi-file tasks require, on average:</p> <ul> <li>Nearly 4x as many code hunks (separate code blocks)</li> <li>4x as many lines of code changed</li> <li>More complex edits across multiple files</li> </ul> <p>These metrics substantiate what the performance data shows: multi-file tasks represent a significant complexity jump.</p> <h3 id="performance-across-the-spectrum">Performance Across the Spectrum</h3> <table> <thead> <tr> <th>Model</th> <th>Overall (% Resolved)</th> <th>Easy (194)<br/>— 188 single<br/>— 6 multi</th> <th>Medium (261)<br/>— 221 single<br/>— 40 multi</th> <th>Hard (45)<br/>— 20 single<br/>— 25 multi</th> </tr> </thead> <tbody> <tr> <td><strong>Combined Systems</strong></td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>Combined Systems</td> <td>84.8% (424/500)</td> <td>95.36% (185/194)<br/>— 180/188 single<br/>— 5/6 multi</td> <td>84.29% (220/261)<br/>— 190/221 single<br/>— 30/40 multi</td> <td>42.22% (19/45)<br/>— 10/20 single<br/>— 9/25 multi</td> </tr> <tr> <td><strong>Top Performers</strong></td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>Augment Agent v0</td> <td>65.4% (327/500)</td> <td>80.4% (156/194)<br/>— 155/188 single<br/>— 1/6 multi</td> <td>62.1% (162/261)<br/>— 145/221 single<br/>— 17/40 multi</td> <td>20.0% (9/45)<br/>— 7/20 single<br/>— 2/25 multi</td> </tr> <tr> <td>W&amp;B Programmer <br/>O1 crosscheck5</td> <td>64.6% (323/500)</td> <td>77.3% (150/194)<br/>— 149/188 single<br/>— 1/6 multi</td> <td>62.1% (162/261)<br/>— 144/221 single<br/>— 18/40 multi</td> <td>24.4% (11/45)<br/>— 9/20 single<br/>— 2/25 multi</td> </tr> <tr> <td>AgentScope</td> <td>63.4% (317/500)</td> <td>81.4% (158/194)<br/>— 157/188 single<br/>— 1/6 multi</td> <td>56.7% (148/261)<br/>— 134/221 single<br/>— 14/40 multi</td> <td>24.4% (11/45)<br/>— 9/20 single<br/>— 2/25 multi</td> </tr> <tr> <td><strong>Mid-Range Systems</strong></td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>Emergent E1<br/> (v2024-12-23)</td> <td>57.2% (286/500)</td> <td>74.7% (145/194)<br/>— 144/188 single<br/>— 1/6 multi</td> <td>50.6% (132/261)<br/>— 116/221 single<br/>— 16/40 multi</td> <td>20.0% (9/45)<br/>— 7/20 single<br/>— 2/25 multi</td> </tr> <tr> <td>Amazon Q<br/> Developer Agent<br/> (v20241202-dev)</td> <td>55.0% (275/500)</td> <td>72.2% (140/194)<br/>— 139/188 single<br/>— 1/6 multi</td> <td>49.4% (129/261)<br/>— 115/221 single<br/>— 14/40 multi</td> <td>13.3% (6/45)<br/>— 6/20 single<br/>— 0/25 multi</td> </tr> <tr> <td>Agentless-1.5 +<br/> Claude-3.5 Sonnet<br/> (20241022)</td> <td>50.8% (254/500)</td> <td>70.6% (137/194)<br/>— 137/188 single<br/>— 0/6 multi</td> <td>42.5% (111/261)<br/>— 101/221 single<br/>— 10/40 multi</td> <td>13.3% (6/45)<br/>— 3/20 single<br/>— 3/25 multi</td> </tr> <tr> <td><strong>Earlier Systems</strong></td> <td> </td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>SWE-agent +<br/> Claude 3.5 Sonnet</td> <td>33.6% (168/500)</td> <td>47.9% (93/194)<br/>— 92/188 single<br/>— 1/6 multi</td> <td>28.0% (73/261)<br/>— 67/221 single<br/>— 6/40 multi</td> <td>4.4% (2/45)<br/>— 1/20 single<br/>— 1/25 multi</td> </tr> <tr> <td>SWE-agent +<br/> GPT 4o (2024-05-13)</td> <td>23.2% (116/500)</td> <td>36.6% (71/194)<br/>— 71/188 single<br/>— 0/6 multi</td> <td>16.9% (44/261)<br/>— 39/221 single<br/>— 5/40 multi</td> <td>2.2% (1/45)<br/>— 1/20 single<br/>— 0/25 multi</td> </tr> <tr> <td>SWE-agent +<br/> Claude 3 Opus</td> <td>18.2% (91/500)</td> <td>27.3% (53/194)<br/>— 53/188 single<br/>— 0/6 multi</td> <td>10.0% (26/261)<br/>— 26/221 single<br/>— 0/40 multi</td> <td>0.0% (0/45)<br/>— 0/20 single<br/>— 0/25 multi</td> </tr> </tbody> </table> <p>Examining representative systems across the performance spectrum reveals consistent patterns:</p> <ol> <li><strong>The Easy Category Is Largely Solved</strong> <ul> <li>Combined resolution rate: 95.36%</li> <li>Even top individual systems solve ~80% of easy tasks</li> <li>The remaining gap is closing with each new LLM release</li> </ul> </li> <li><strong>The Medium Category Shows Progress</strong> <ul> <li>Combined resolution rate: 84.29%</li> <li>Top systems solve 56-62% individually</li> <li>Significant improvement from earlier systems (&lt;30%)</li> </ul> </li> <li><strong>The Hard Category Remains Challenging</strong> <ul> <li>Combined resolution rate: only 42.22%</li> <li>Best individual systems solve just 20-25%</li> <li>Multi-file hard issues are particularly difficult (only 9/25 solved by any system)</li> </ul> </li> </ol> <h3 id="key-takeaways">Key Takeaways</h3> <p>This analysis reveals several important insights:</p> <ol> <li> <p><strong>The Easy-Hard Gap Persists</strong>: Even top systems show a dramatic performance drop from easy (80%+) to hard tasks (20-25%).</p> </li> <li> <p><strong>Multi-File Issues Present a Frontier</strong>: The correlation between task difficulty and multi-file complexity is striking. As complexity increases along all metrics (files, hunks, lines), performance drops precipitously.</p> </li> <li> <p><strong>Lines of Code as a Key Indicator</strong>: The 11x increase in average lines changed from Easy to Hard tasks (5.04 → 55.78) appears to be the strongest predictor of task difficulty, far outpacing the increase in file count (2x) or hunks (5x).</p> </li> <li> <p><strong>Combined Performance Ceiling</strong>: The gap between individual and combined system performance suggests that different approaches excel at different tasks — no single system can yet solve all problem types.</p> </li> <li> <p><strong>Hard Multi-File Issues Remain Unsolved</strong>: With only 9/25 hard multi-file issues solved by any system, this represents a clear frontier for improvement.</p> </li> <li> <p><strong>Scale of Changes Matters</strong>: Multi-file tasks require 4x more lines of code and 4x more hunks than single-file tasks, highlighting that the scope of required changes significantly impacts task difficulty.</p> </li> </ol> <h3 id="relating-to-the-reality-gap">Relating to the Reality Gap</h3> <p>As <a href="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html">I argued in my December 2024 post</a>, the distribution in SWE-Bench-Verified significantly underrepresents the complexity of real-world programming tasks. Comparing datasets reveals this stark contrast:</p> <table> <thead> <tr> <th>Dataset</th> <th>% issues &gt;1 file</th> </tr> </thead> <tbody> <tr> <td>SWE-Bench train set</td> <td><strong>50.27%</strong></td> </tr> <tr> <td>SWE-Bench test set</td> <td>24.89%</td> </tr> <tr> <td>SWE-Bench-Verified test set</td> <td><em>14.2%</em></td> </tr> </tbody> </table> <p>This discrepancy is significant and highlights a critical area for improvement in benchmark design. If we use file count as a complexity proxy, SWE-Bench-Verified presents a dramatically simplified view compared to real-world codebases, where approximately half of all issues require multi-file changes.</p> <p>The data clearly shows that as we move from simple, localized fixes (Easy) to complex, multi-file, multi-hunk patches (Hard), AI performance drops dramatically. Future research should focus on improving coordination across multiple files and handling larger, more complex code changes that span multiple distinct code blocks.</p> <p>This finding reinforces my previous analysis in <a href="https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files.html">The Multi-File Frontier</a>, where I emphasized that truly robust AI programming systems must be capable of coordinating changes across multiple files in an interconnected codebase.</p> <h3 id="conclusion">Conclusion</h3> <p>While impressive progress has been made in solving isolated, single-file coding challenges, the frontier of multi-file, complex issues remains largely unexplored. For AI programming systems to truly match human capabilities in real-world software engineering, they must evolve beyond generating localized patches to understand the rich, interconnected nature of modern codebases.</p> <blockquote class="block-danger"> <p>Until benchmarks like SWE-Bench-Verified more accurately reflect the distribution of tasks in real-world development—particularly the proportion of multi-file changes—we should interpret leaderboard results with appropriate caution, recognizing they represent an optimistic view of AI’s current programming capabilities.</p> </blockquote> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2025difficulty,
  title={Cracking the Code: How Difficult Are SWE-Bench-Verified Tasks Really?},
  author={Ganhotra, Jatin},
  year={2025},
  month={April},
  url={https://jatinganhotra.dev/blog/swe-agents/2025/04/15/swe-bench-verified-easy-medium-hard/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench_Verified"/><category term="SWE-agent"/><category term="Agentless"/><category term="Claude 3.5 Sonnet"/><category term="OpenAI o1"/><summary type="html"><![CDATA[Task-difficulty distribution in SWE-bench Verified from human annotations — what easy, medium and hard mean for SWE-agents like SWE-agent and Agentless running Claude and OpenAI o1.]]></summary></entry><entry><title type="html">The Multi-File Frontier: Why SWE-Bench Verified Doesn’t Reflect Real-World Programming Challenges</title><link href="https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation.html" rel="alternate" type="text/html" title="The Multi-File Frontier: Why SWE-Bench Verified Doesn’t Reflect Real-World Programming Challenges"/><published>2025-03-30T00:00:00+00:00</published><updated>2025-03-30T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation.html"><![CDATA[<p>The SWE-Bench-Verified leaderboard has witnessed remarkable progress with submissions from leading AI companies, research laboratories, and emerging startups. As <a href="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html">I highlighted in my previous analyses</a>, this benchmark has become a focal point for evaluating AI’s capabilities in resolving software engineering tasks, but with important caveats about its real-world applicability.</p> <h2 id="understanding-the-dataset-distribution">Understanding the Dataset Distribution</h2> <p>SWE-Bench-Verified’s 500 instances fall into two distinct categories:</p> <ul> <li><strong>Single-file changes</strong>: 429 instances (85.8%)</li> <li><strong>Multiple-file changes</strong>: 71 instances (14.2%)</li> </ul> <p>This distribution reveals a critical insight: the performance of top systems deteriorates significantly when tackling tasks requiring changes across multiple files—exposing a fundamental limitation in current AI programming approaches.</p> <h2 id="the-leap-forward-in-2025">The Leap Forward in 2025</h2> <p>Since January 2025, we’ve seen substantial progress. The previous leader, Amazon Q Developer Agent, has been surpassed by twelve new systems, with “Augment Agent v0” now claiming the top position.</p> <h3 id="performance-across-the-spectrum">Performance Across the Spectrum</h3> <p>Below is a representative sample of systems across the performance spectrum, highlighting the consistent gap between single-file and multi-file performance:</p> <table> <thead> <tr> <th>Model</th> <th>Overall %Resolved</th> <th>Single-file %Resolved</th> <th>Multi-file %Resolved</th> </tr> </thead> <tbody> <tr> <td><strong>Top Performers</strong></td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>Augment Agent v0</td> <td>65.4% (327)</td> <td>71.56% (307)</td> <td>28.17% (20)</td> </tr> <tr> <td>W&amp;B Programmer O1 crosscheck5</td> <td>64.6% (323)</td> <td>70.4% (302)</td> <td>29.58% (21)</td> </tr> <tr> <td>AgentScope</td> <td>63.4% (317)</td> <td>69.93% (300)</td> <td>23.94% (17)</td> </tr> <tr> <td><strong>Mid-Range Systems</strong></td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>Emergent E1 (v2024-12-23)</td> <td>57.2% (286)</td> <td>62.24% (267)</td> <td>26.76% (19)</td> </tr> <tr> <td>Amazon Q Developer Agent (v20241202-dev)</td> <td>55.0% (275)</td> <td>60.61% (260)</td> <td>21.13% (15)</td> </tr> <tr> <td>Agentless-1.5 + Claude-3.5 Sonnet</td> <td>50.8% (254)</td> <td>56.18% (241)</td> <td>18.31% (13)</td> </tr> <tr> <td><strong>Earlier Systems</strong></td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>SWE-agent + Claude 3.5 Sonnet</td> <td>33.6% (168)</td> <td>37.3% (160)</td> <td>11.27% (8)</td> </tr> <tr> <td>SWE-agent + GPT 4o (2024-05-13)</td> <td>23.2% (116)</td> <td>25.87% (111)</td> <td>7.04% (5)</td> </tr> <tr> <td>SWE-agent + Claude 3 Opus</td> <td>18.2% (91)</td> <td>21.21% (91)</td> <td>0.0% (0)</td> </tr> <tr> <td><strong>Baseline Approaches</strong></td> <td> </td> <td> </td> <td> </td> </tr> <tr> <td>RAG + Claude 3 Opus</td> <td>7.0% (35)</td> <td>8.16% (35)</td> <td>0.0% (0)</td> </tr> <tr> <td>RAG + SWE-Llama 13B</td> <td>1.2% (6)</td> <td>1.17% (5)</td> <td>1.41% (1)</td> </tr> <tr> <td>RAG + ChatGPT 3.5</td> <td>0.4% (2)</td> <td>0.47% (2)</td> <td>0.0% (0)</td> </tr> </tbody> </table> <p><em>Note: The full table includes 64 systems. This shortened version highlights representative systems across the performance spectrum.</em></p> <p>The current leader has pushed performance boundaries significantly:</p> <ul> <li><strong>Overall resolution</strong>: Improved from 55.0% to 65.4%</li> <li><strong>Single-file resolution</strong>: Increased from 60.61% to 71.56%</li> <li><strong>Multi-file resolution</strong>: Advanced from 21.13% to 28.17%</li> </ul> <p>While these gains are impressive, they’re predominantly in simpler, single-file scenarios. Even the best systems struggle with multi-file issues, with no system exceeding 30% resolution rate for these more complex problems.</p> <h2 id="a-collective-view-the-upper-bound">A Collective View: The Upper Bound</h2> <p>When we combine the capabilities of all top systems, an interesting picture emerges:</p> <ul> <li><strong>Single-file issues</strong>: ~90% resolution rate (386/429)</li> <li><strong>Multi-file issues</strong>: Only ~54% resolution rate (38/71)</li> </ul> <p>This reveals that:</p> <ol> <li> <p>Single-file challenges are approaching saturation—the collective intelligence of these systems resolves nearly all such issues.</p> </li> <li> <p>Multi-file problems remain a frontier challenge—even with all systems combined, nearly half remain unsolved.</p> </li> </ol> <h2 id="the-reality-gap-benchmark-vs-real-world">The Reality Gap: Benchmark vs. Real-World</h2> <p>As <a href="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html">I argued in my December 2024 post</a> titled “SWE-Bench Verified ⊊ real-world SWE tasks,” the distribution in SWE-Bench-Verified significantly underrepresents the complexity of real-world programming tasks. Comparing datasets reveals this stark contrast:</p> <table> <thead> <tr> <th>Dataset</th> <th>% issues &gt;1 file</th> </tr> </thead> <tbody> <tr> <td>SWE-Bench train set</td> <td><strong>50.27%</strong></td> </tr> <tr> <td>SWE-Bench test set</td> <td>24.89%</td> </tr> <tr> <td>SWE-Bench-Verified test set</td> <td><em>14.2%</em></td> </tr> </tbody> </table> <p>This discrepancy is significant and highlights a critical area for improvement in benchmark design. If we use file count as a complexity proxy, SWE-Bench-Verified presents a dramatically simplified view compared to enterprise codebases, where approximately half of all issues require multi-file changes.</p> <h2 id="expert-voices-agree-on-the-benchmarks-limitations">Expert Voices Agree on the Benchmark’s Limitations</h2> <p>This concern isn’t just mine. In March 2024, AI expert Andrej Karpathy <a href="https://x.com/karpathy/status/1896266683301659068">tweeted about the evaluation crisis</a> in AI, specifically highlighting SWE-Bench Verified’s limitations:</p> <blockquote> <p>“My reaction is that there is an evaluation crisis. I don’t really know what metrics to look at right now… SWE-Bench Verified (real, practical, verified problems) I really like and is great but itself too narrow.”</p> </blockquote> <p>Karpathy’s assessment aligns with my analysis—while SWE-Bench Verified offers valuable insights through practical, verified problems, its narrow scope fails to capture the true complexity of real-world software engineering tasks, particularly those requiring multi-file changes.</p> <h2 id="the-multi-file-challenge-a-different-cognitive-task">The Multi-File Challenge: A Different Cognitive Task</h2> <p>Solving multi-file issues requires sophisticated capabilities that go beyond what current AI systems excel at:</p> <ul> <li>Cross-file dependency tracking</li> <li>Contextual understanding across modules</li> <li>Architectural comprehension</li> <li>Interface consistency management</li> <li>Impact analysis across the codebase</li> </ul> <p>Current systems excel as “patch generators” for localized changes but struggle to function as holistic developers who understand the broader implications of their modifications.</p> <h2 id="conclusion">Conclusion</h2> <p>While we’ve made impressive strides in addressing isolated coding challenges, our progress with interconnected, complex issues remains limited. The current SWE-Bench-Verified benchmark understates the complexity of real-world software engineering by presenting a distribution of challenges that skews heavily toward single-file edits—only 14.2% of issues requiring multi-file changes compared to 50.27% in real-world scenarios.</p> <p>For meaningful advancement in AI-assisted programming, future versions of SWE-Bench-Verified should rebalance to reflect realistic multi-file ratios, providing a more accurate measure of practical capability. As <a href="https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files.html">I argued in my January 2025 post</a>, the current impressive performance numbers on the leaderboard must be interpreted with this significant caveat in mind.</p> <blockquote class="block-danger"> <p>We should recognize that SWE-Bench-Verified, while valuable, presents an overly optimistic view of AI’s programming capabilities in real-world scenarios.</p> </blockquote> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2025saturation,
  title={The Multi-File Frontier: Why SWE-Bench Verified Doesn't Reflect Real-World Programming Challenges},
  author={Ganhotra, Jatin},
  year={2025},
  month={March},
  url={https://jatinganhotra.dev/blog/swe-agents/2025/03/30/swe-bench-verified-single-file-saturation/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench_Verified"/><category term="SWE-agent"/><category term="Agentless"/><category term="Amazon Q"/><category term="Claude 3 Opus"/><category term="OpenAI o1"/><summary type="html"><![CDATA[Why SWE-bench Verified's focus on single-file changes misses real-world multi-file programming — analyzed across SWE-agent, Agentless, Claude 3 Opus, Claude 3.5 Sonnet, OpenAI o1 and Amazon Q.]]></summary></entry><entry><title type="html">Do SWE-Agents Solve Multi-File Issues Like Humans? A Deep Dive into SWE-Bench Verified</title><link href="https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files.html" rel="alternate" type="text/html" title="Do SWE-Agents Solve Multi-File Issues Like Humans? A Deep Dive into SWE-Bench Verified"/><published>2025-01-05T00:00:00+00:00</published><updated>2025-01-05T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files.html"><![CDATA[<p>The year 2024 was remarkable for SWE-Agents, as we celebrated significant advancements in system performance on our cherished <a href="http://www.swebench.com">SWE-Bench</a> benchmark. This progress was especially notable on the <a href="https://openai.com/index/introducing-swe-bench-verified/">SWE-Bench Verified</a> benchmark since its release.</p> <p>In a <a href="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html">previous post</a>, I discussed why <code class="language-plaintext highlighter-rouge">SWE-Bench Verified</code> may not accurately represent real-world SWE tasks, primarily due to the low proportion of issues requiring code changes across multiple files. If you haven’t read that post yet, I recommend doing so before continuing with this one.</p> <p>As highlighted in the previous post, the <code class="language-plaintext highlighter-rouge">SWE-Bench_Verified</code> dataset, consisting of 500 instances, can be categorized into two distinct buckets:</p> <ul> <li><strong>Single-file changes</strong>: 429/500 instances (<strong>85.8%</strong>)</li> <li><strong>Multiple-file changes</strong>: 71/500 instances (<strong>14.2%</strong>)</li> </ul> <p>Furthermore, it is evident that the performance of the top-10 systems <strong>drops significantly</strong> for tasks requiring changes across multiple files, underscoring a critical area for improvement.</p> <table> <thead> <tr> <th>Model</th> <th>Overall %Resolved (count/500)</th> <th>Multi-file %Resolved (count/71)</th> </tr> </thead> <tbody> <tr> <td>Amazon Q Developer Agent (v20241202-dev)</td> <td>55.0 (275)</td> <td>21.13 (15)</td> </tr> <tr> <td>devlo</td> <td>54.2 (271)</td> <td>19.72 (14)</td> </tr> <tr> <td>OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td>53.0 (265)</td> <td>25.35 (18)</td> </tr> <tr> <td>Engine Labs (2024-11-25)</td> <td>51.8 (259)</td> <td>18.31 (13)</td> </tr> <tr> <td>Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td>50.8 (254)</td> <td>18.31 (13)</td> </tr> <tr> <td>Solver (2024-10-28)</td> <td>50.0 (250)</td> <td>18.31 (13)</td> </tr> <tr> <td>Bytedance MarsCode Agent</td> <td>50.0 (250)</td> <td>18.31 (13)</td> </tr> <tr> <td>nFactorial (2024-11-05)</td> <td>49.2 (246)</td> <td>14.08 (10)</td> </tr> <tr> <td>Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td>49.0 (245)</td> <td>11.27 (8)</td> </tr> <tr> <td>Composio SWE-Kit (2024-10-25)</td> <td>48.6 (243)</td> <td>8.45 (6)</td> </tr> </tbody> </table> <hr/> <p>In this post, we’ll take a closer look at the performance of the top-10 systems on the <strong>multiple files subset</strong> of <code class="language-plaintext highlighter-rouge">SWE-Bench Verified</code> from a fresh perspective:</p> <ol> <li>How does the approach of our current state-of-the-art SWE-Agents compare to that of a human software engineer (SWE) when solving these issues?</li> <li>Do our SWE-Agents appropriately modify multiple files to resolve the issue, given that these instances inherently require changes across multiple files (using the human-generated patch as the golden standard)?</li> </ol> <p>This is the question we aim to explore today! 🚀</p> <p>Let’s start by analyzing how many of the 71 <strong>multiple-file instances</strong> were resolved by at least one of the top-10 systems. Based on the compiled statistics, we get:</p> <ul> <li>Multiple-file Instances (<em>requiring changes across multiple files</em>): <code class="language-plaintext highlighter-rouge">71/500</code></li> <li>Multiple-file Instances resolved by <strong>at least one system</strong>: <code class="language-plaintext highlighter-rouge">29/71</code></li> <li>Multiple-file Instances resolved by <strong>at least one system</strong> <em>with</em> <strong>single-file changes</strong>: <code class="language-plaintext highlighter-rouge">20/29</code></li> </ul> <p>This observation is quite surprising. There are <strong>20 instances</strong> that:</p> <ol> <li><strong>Required changes across multiple files</strong>, as indicated by the human-generated patch.</li> <li>Were marked as <strong>resolved</strong> (i.e., passed both <code class="language-plaintext highlighter-rouge">PASS_TO_PASS</code> and <code class="language-plaintext highlighter-rouge">FAIL_TO_PASS</code> tests in the evaluation) by at least one of the top-10 systems.</li> <li>Were resolved by modifying only <strong>one file</strong>, contradicting the multi-file nature of the issue.</li> </ol> <p>This discrepancy raises important questions about how the systems achieve these resolutions and the robustness of the evaluation process. 😳</p> <blockquote class="block-danger"> <h5 id="disclaimer">Disclaimer</h5> <p>If you are working on the SWE-Bench benchmark, please refrain from attempting to reverse engineer the anonymized instance IDs using the information provided about the gold patch files. Additionally, do not access the original pull requests on GitHub or the corresponding gold patches in the dataset. This ensures that hidden tests remain protected, maintaining ethical standards.</p> <p>To achieve this:</p> <ul> <li>Instance IDs are purposefully anonymized.</li> <li>The tabular analysis focuses only on listing the file names in the model-generated patches to identify any patterns, while keeping both the instance IDs and the patches hidden.</li> </ul> <p>This approach safeguards the integrity of the benchmark while facilitating responsible and ethical analysis.</p> </blockquote> <style>r{color:Red}o{color:Orange}g{color:Green}</style> <h2 id="analysis">Analysis</h2> <p>Let’s take a closer look at these 20 instances. For each instance, the following information is provided:</p> <ol> <li><strong>Instance ID</strong> (<em>anonymized</em>).</li> <li>Number of systems (<em>out of the top-10</em>) that resolved the instance: <em><code class="language-plaintext highlighter-rouge">n</code></em>/10.</li> <li>Number of files <strong><code class="language-plaintext highlighter-rouge">K</code></strong> in the gold patch, further divided into: <ul> <li><strong><code class="language-plaintext highlighter-rouge">k1 ⊆ K</code></strong>: Files modified by <em><g>all</g></em> <em><code class="language-plaintext highlighter-rouge">n</code></em>/10 systems.</li> <li><strong><code class="language-plaintext highlighter-rouge">k2 ⊆ K</code></strong>: Files modified by <em><o>some</o></em> systems (a subset of <em><code class="language-plaintext highlighter-rouge">n</code></em>/10).</li> <li><strong><code class="language-plaintext highlighter-rouge">k3 ⊆ K</code></strong>: Files <em><r>not</r></em> modified by <em><r>any</r></em> systems.</li> </ul> </li> </ol> <p>By clicking on the anonymized <strong>Instance ID</strong>, you can view additional details, such as:</p> <ul> <li>The file names in the <strong>gold patch</strong> (<em>color-encoded</em>): <ul> <li><em><g>Green</g></em>: Files modified by all systems.</li> <li><em><o>Orange</o></em>: Files modified by some systems.</li> <li><em><r>Red</r></em>: Files not modified by any systems.</li> </ul> </li> <li>The file names in the <strong>model-generated patches</strong> for each of the <em><code class="language-plaintext highlighter-rouge">n</code></em>/10 systems that resolved the instance.</li> </ul> <p>Based on the additional details, the 20 instances can be categorized as follows:</p> <hr/> <h3 id="category-1-no-file-from-the-gold-patch-was-modified">Category 1: <em>No file from the gold patch was modified</em></h3> <p>In these instances, the model-generated patches resolved the issue by modifying files that were not part of the gold patch, while none of the files in the gold patch were altered.</p> <p><i>Note: Click on the anonymized Instance ID to view additional details</i></p> <details> <summary>scikit-learn__scikit-learn-x5x0x<br/>- resolved by <code class="language-plaintext highlighter-rouge">4/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">2</code> files <i>not</i> modified by <i>any</i> systems</summary> <p><br/>files in gold patch:</p> <ul> <li> <r>sklearn/base.py</r> </li> <li> <r>sklearn/feature_selection/_base.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">sklearn/utils/_set_output.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">3</td> <td style="text-align: left">reproduce_error.py<br/>sklearn/utils/_set_output.py<br/>test_edge_cases.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">sklearn/utils/_set_output.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">sklearn/utils/_set_output.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-1x9x8<br/>- resolved by <code class="language-plaintext highlighter-rouge">1/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">2</code> files <i>not</i> modified by <i>any</i> systems</summary> <p><br/>files in gold patch:</p> <ul> <li> <r>django/core/serializers/python.py</r> </li> <li> <r>django/core/serializers/xml_serializer.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/models/query_utils.py</td> </tr> </tbody> </table> </details> <hr/> <h3 id="category-2-at-least-1-file-from-the-gold-patch-was-not-modified">Category 2: <em>At least 1 file from the gold patch was not modified</em></h3> <p>In these instances, the model-generated patches resolved the issue, but at least one file from the gold patch was left unmodified by the systems.</p> <p><i>Note: Click on the anonymized Instance ID to view additional details</i></p> <details> <summary>django__django-xxxx3<br/>- resolved by <code class="language-plaintext highlighter-rouge">3/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">3</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by <i>some</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>django/urls/resolvers.py</g> </li> <li> <o>django/urls/base.py</o> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/urls/resolvers.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">4</td> <td style="text-align: left">django/urls/base.py<br/>django/urls/resolvers.py<br/>reproduce.py<br/>test_cache_clear.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/urls/base.py<br/>django/urls/resolvers.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-x1xxx<br/>- resolved by <code class="language-plaintext highlighter-rouge">7/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">5</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">7</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by <i>some</i> systems<br/>    - <code class="language-plaintext highlighter-rouge">3</code> files <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>django/core/mail/utils.py</g> </li> <li> <o>django/core/mail/message.py</o> </li> <li> <r>django/core/validators.py</r> </li> <li> <r>django/utils/encoding.py</r> </li> <li> <r>django/utils/html.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/core/mail/message.py<br/>django/core/mail/utils.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">django/core/mail/utils.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/core/mail/utils.py<br/>reproduce.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/core/mail/utils.py<br/>reproduce_issue.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/core/mail/utils.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">django/core/mail/utils.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/core/mail/utils.py<br/>reproduce_error.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-xxxx5<br/>- resolved by <code class="language-plaintext highlighter-rouge">10/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">10</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>django/contrib/admindocs/utils.py</g> </li> <li> <r>django/contrib/admindocs/views.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/contrib/admindocs/utils.py<br/>reproduce_error.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/contrib/admindocs/utils.py<br/>test_docstring.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">3</td> <td style="text-align: left">django/contrib/admindocs/utils.py<br/>reproduce_docstring_issue.py<br/>test_docstring_edge_cases.py</td> </tr> <tr> <td style="text-align: left">Composio SWE-Kit (2024-10-25)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/contrib/admindocs/utils.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-xxx25<br/>- resolved by <code class="language-plaintext highlighter-rouge">1/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">1</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>django/db/models/base.py</g> </li> <li> <r>django/db/models/options.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/models/base.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-xxxx1<br/>- resolved by <code class="language-plaintext highlighter-rouge">4/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">4</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">3</code> files modified by <i>some</i> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <o>django/db/backends/base/operations.py</o> </li> <li> <o>django/db/backends/mysql/operations.py</o> </li> <li> <o>django/db/backends/sqlite3/operations.py</o> </li> <li> <r>django/db/models/expressions.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/sqlite3/operations.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/base/operations.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/db/backends/base/operations.py<br/>repro.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">6</td> <td style="text-align: left">django/db/backends/mysql/operations.py<br/>django/db/backends/sqlite3/operations.py<br/>reproduce.py<br/>test_app/__ init __.py<br/>test_app/models.py<br/>test_settings.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-1xxxx<br/>- resolved by <code class="language-plaintext highlighter-rouge">10/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by <i>some</i> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <o>django/db/backends/base/schema.py</o> </li> <li> <r>django/db/models/fields/__init__.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/sqlite3/schema.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/sqlite3/schema.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">2</td> <td style="text-align: left">db.sqlite3<br/>django/db/backends/base/schema.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/db/backends/base/schema.py<br/>test_choices.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/base/schema.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/db/backends/base/schema.py<br/>tests/migrations/test_operations.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/base/schema.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/base/schema.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/db/backends/base/schema.py<br/>reproduce.py</td> </tr> <tr> <td style="text-align: left">Composio SWE-Kit (2024-10-25)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/backends/base/schema.py</td> </tr> </tbody> </table> </details> <details> <summary>django__django-1x0xx<br/>- resolved by <code class="language-plaintext highlighter-rouge">4/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by <i>some</i> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <o>django/db/models/sql/query.py</o> </li> <li> <r>django/db/models/fields/related_lookups.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">2</td> <td style="text-align: left">django/db/models/query.py<br/>django/db/models/sql/query.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">django/db/models/lookups.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">3</td> <td style="text-align: left">django/db/models/lookups.py<br/>test_fix.py<br/>test_settings.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">3</td> <td style="text-align: left">django/db/models/lookups.py<br/>django/db/models/sql/query.py<br/>tests/annotations/test_alias_subquery.py</td> </tr> </tbody> </table> </details> <details> <summary>matplotlib__matplotlib-2xxxx<br/>- resolved by <code class="language-plaintext highlighter-rouge">5/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">3</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">5</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">2</code> files modified by <i>some</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>lib/matplotlib/text.py</g> </li> <li> <o>lib/matplotlib/backends/backend_agg.py</o> </li> <li> <o>lib/matplotlib/backends/backend_cairo.py</o> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">3</td> <td style="text-align: left">lib/matplotlib/backends/backend_agg.py<br/>lib/matplotlib/backends/backend_cairo.py<br/>lib/matplotlib/text.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">4</td> <td style="text-align: left">lib/matplotlib/backends/backend_agg.py<br/>lib/matplotlib/text.py<br/>test_text_antialiasing.py<br/>text_antialiasing_test.png</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">4</td> <td style="text-align: left">lib/matplotlib/backends/backend_agg.py<br/>lib/matplotlib/text.py<br/>simple_test_text.py<br/>test_text_antialiasing.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">lib/matplotlib/text.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">1</td> <td style="text-align: left">lib/matplotlib/text.py</td> </tr> </tbody> </table> </details> <details> <summary>pydata__xarray-xx9x<br/>- resolved by <code class="language-plaintext highlighter-rouge">4/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">4</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>xarray/core/variable.py</g> </li> <li> <r>xarray/core/indexing.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/variable.py</td> </tr> </tbody> </table> </details> <details> <summary>pydata__xarray-xx0x<br/>- resolved by <code class="language-plaintext highlighter-rouge">9/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">2</code> files modified by <i>some</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <o>xarray/core/dataset.py</o> </li> <li> <o>xarray/core/variable.py</o> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">2</td> <td style="text-align: left">xarray/core/dataset.py<br/>xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">4</td> <td style="text-align: left">reproduce.py<br/>test_edge_cases.py<br/>xarray/core/dataset.py<br/>xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">3</td> <td style="text-align: left">reproduce_issue.py<br/>xarray/core/dataset.py<br/>xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">2</td> <td style="text-align: left">xarray/core/dataset.py<br/>xarray/core/variable.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">3</td> <td style="text-align: left">reproduce.py<br/>xarray/core/dataset.py<br/>xarray/core/variable.py</td> </tr> </tbody> </table> </details> <details> <summary>pydata__xarray-xxx3<br/>- resolved by <code class="language-plaintext highlighter-rouge">5/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">5</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>xarray/core/dataarray.py</g> </li> <li> <r>xarray/core/dataset.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">2</td> <td style="text-align: left">reproduce.py<br/>xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">5</td> <td style="text-align: left">test_final.py<br/>test_integrate.py<br/>test_integrate_changes.py<br/>test_integrate_simple.py<br/>xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">xarray/core/dataarray.py</td> </tr> </tbody> </table> </details> <details> <summary>pylint-dev__pylint-x5xx<br/>- resolved by <code class="language-plaintext highlighter-rouge">4/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">4</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>pylint/lint/pylinter.py</g> </li> <li> <r>pylint/lint/expand_modules.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">pylint/lint/pylinter.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">6</td> <td style="text-align: left">.a/foo.py<br/>ar.py<br/>az.py<br/>pylint/lint/pylinter.py<br/>reproduce_error.py<br/>test_fix.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">1</td> <td style="text-align: left">pylint/lint/pylinter.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">3</td> <td style="text-align: left">pylint/lint/pylinter.py<br/>reproduce.py<br/>test_ignore.py</td> </tr> </tbody> </table> </details> <details> <summary>pylint-dev__pylint-x89x<br/>- resolved by <code class="language-plaintext highlighter-rouge">2/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">3</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">2</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">2</code> files <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>pylint/config/argument.py</g> </li> <li> <r>pylint/utils/__init__.py</r> </li> <li> <r>pylint/utils/utils.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">pylint/config/argument.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">2</td> <td style="text-align: left">pylint/config/argument.py<br/>pyproject.toml</td> </tr> </tbody> </table> </details> <details> <summary>pytest-dev__pytest-xx9x<br/>- resolved by <code class="language-plaintext highlighter-rouge">10/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">10</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>src/_pytest/unittest.py</g> </li> <li> <r>src/_pytest/python.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">src/_pytest/unittest.py</td> </tr> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">2</td> <td style="text-align: left">src/_pytest/unittest.py<br/>test_reproduce.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">2</td> <td style="text-align: left">reproduce_error.py<br/>src/_pytest/unittest.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">2</td> <td style="text-align: left">src/_pytest/unittest.py<br/>test_unittest_fixture.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">src/_pytest/unittest.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">2</td> <td style="text-align: left">src/_pytest/unittest.py<br/>test_unittest_fixture.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">src/_pytest/unittest.py</td> </tr> <tr> <td style="text-align: left">nFactorial (2024-11-05)</td> <td style="text-align: left">1</td> <td style="text-align: left">src/_pytest/unittest.py</td> </tr> <tr> <td style="text-align: left">Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td style="text-align: left">2</td> <td style="text-align: left">reproduce_issue.py<br/>src/_pytest/unittest.py</td> </tr> <tr> <td style="text-align: left">Composio SWE-Kit (2024-10-25)</td> <td style="text-align: left">1</td> <td style="text-align: left">src/_pytest/unittest.py</td> </tr> </tbody> </table> </details> <details> <summary>scikit-learn__scikit-learn-xx6xx<br/>- resolved by <code class="language-plaintext highlighter-rouge">4/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">4</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>sklearn/decomposition/dict_learning.py</g> </li> <li> <r>examples/decomposition/plot_sparse_coding.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">sklearn/decomposition/dict_learning.py</td> </tr> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">2</td> <td style="text-align: left">sklearn/decomposition/dict_learning.py<br/>test_sparsecoder.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">sklearn/decomposition/dict_learning.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">sklearn/decomposition/dict_learning.py</td> </tr> </tbody> </table> </details> <details> <summary>sphinx-doc__sphinx-xx2x<br/>- resolved by <code class="language-plaintext highlighter-rouge">6/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">2</code> files modified by <i>some</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <o>sphinx/application.py</o> </li> <li> <o>sphinx/locale/__init__.py</o> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">devlo</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/locale/__ init __.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">4</td> <td style="text-align: left">sphinx/config.py<br/>sphinx/locale/__ init __.py<br/>sphinx/util/i18n.py<br/>test_locale_override.py</td> </tr> <tr> <td style="text-align: left">Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/locale/__ init __.py</td> </tr> <tr> <td style="text-align: left">Solver (2024-10-28)</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/application.py</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/locale/__ init __.py</td> </tr> <tr> <td style="text-align: left">Composio SWE-Kit (2024-10-25)</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/application.py</td> </tr> </tbody> </table> </details> <details> <summary>sphinx-doc__sphinx-x59x<br/>- resolved by <code class="language-plaintext highlighter-rouge">3/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">3</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>sphinx/ext/autodoc/__init__.py</g> </li> <li> <r>sphinx/ext/autodoc/importer.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Amazon Q Developer Agent (v20241202-dev)</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/ext/autodoc/__ init __.py</td> </tr> <tr> <td style="text-align: left">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td style="text-align: left">31</td> <td style="text-align: left">sphinx/ext/autodoc/__ init __.py<br/>sphinx/pycode/parser.py<br/>test_meta_public.py<br/>test_meta_public_dir/_build/html/.buildinfo<br/>test_meta_public_dir/_build/html/.doctrees/environment.pickle<br/>test_meta_public_dir/_build/html/.doctrees/index.doctree<br/>test_meta_public_dir/_build/html/_sources/index.rst.txt<br/>test_meta_public_dir/_build/html/_static/alabaster.css<br/>test_meta_public_dir/_build/html/_static/basic.css<br/>test_meta_public_dir/_build/html/_static/custom.css<br/>test_meta_public_dir/_build/html/_static/doctools.js<br/>test_meta_public_dir/_build/html/_static/documentation_options.js<br/>test_meta_public_dir/_build/html/_static/file.png<br/>test_meta_public_dir/_build/html/_static/jquery-3.5.1.js<br/>test_meta_public_dir/_build/html/_static/jquery.js<br/>test_meta_public_dir/_build/html/_static/language_data.js<br/>test_meta_public_dir/_build/html/_static/minus.png<br/>test_meta_public_dir/_build/html/_static/plus.png<br/>test_meta_public_dir/_build/html/_static/pygments.css<br/>test_meta_public_dir/_build/html/_static/searchtools.js<br/>test_meta_public_dir/_build/html/_static/underscore-1.3.1.js<br/>test_meta_public_dir/_build/html/_static/underscore.js<br/>test_meta_public_dir/_build/html/genindex.html<br/>test_meta_public_dir/_build/html/index.html<br/>test_meta_public_dir/_build/html/objects.inv<br/>test_meta_public_dir/_build/html/py-modindex.html<br/>test_meta_public_dir/_build/html/search.html<br/>test_meta_public_dir/_build/html/searchindex.js<br/>test_meta_public_dir/conf.py<br/>test_meta_public_dir/example.py<br/>test_meta_public_dir/index.rst</td> </tr> <tr> <td style="text-align: left">Bytedance MarsCode Agent</td> <td style="text-align: left">1</td> <td style="text-align: left">sphinx/ext/autodoc/__ init __.py</td> </tr> </tbody> </table> </details> <details> <summary>sympy__sympy-xxx1x<br/>- resolved by <code class="language-plaintext highlighter-rouge">1/10</code> systems<br/>- <code class="language-plaintext highlighter-rouge">2</code> files in gold patch<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file modified by all <code class="language-plaintext highlighter-rouge">1</code> systems<br/>    - <code class="language-plaintext highlighter-rouge">1</code> file <i>not</i> modified by <i>any</i> systems<br/></summary> <p><br/>files in gold patch:</p> <ul> <li> <g>sympy/simplify/sqrtdenest.py</g> </li> <li> <r>sympy/simplify/radsimp.py</r> </li> </ul> <table> <thead> <tr> <th style="text-align: left">Model</th> <th style="text-align: left">​# files</th> <th style="text-align: left">model_patch files</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Engine Labs (2024-11-25)</td> <td style="text-align: left">1</td> <td style="text-align: left">sympy/simplify/sqrtdenest.py</td> </tr> </tbody> </table> </details> <hr/> <p>The above analysis reveals notable discrepancies between the approaches of human software engineers (SWEs) and model-based SWE-Agents when resolving complex multi-file issues.</p> <h2 id="key-takeaways-from-the-analysis">Key Takeaways from the Analysis</h2> <ol> <li> <p><strong>Differences in Problem-Solving Approaches:</strong><br/> SWE-Agents handle multi-file issues differently compared to human SWEs, often focusing on resolving issues without strictly adhering to the gold standard of modifying the correct files.<br/> </p> <p><em>NOTE</em>: It is plausible that the model-generated patches from SWE-Agents might, in some cases, surpass those created by human SWEs in terms of quality or efficiency.</p> <ul> <li>However, this hypothesis remains to be validated through a thorough review by a Subject Matter Expert (such as the GitHub repository maintainer) for the specific library or codebase.</li> <li>Such an expert review could provide critical insights into the suitability and maintainability of the model-generated patches, helping to assess their long-term value compared to human contributions.</li> </ul> </li> <li> <p><strong>Benchmark Limitations:</strong><br/> The benchmark does not enforce requirements for SWE-Agents to make changes in the appropriate locations, which is crucial for ensuring maintainable and robust code over the long term.</p> </li> </ol> <h2 id="implications">Implications</h2> <p>If these model-generated patches were submitted as pull requests, many would likely need significant adjustments to modify the appropriate files. This step is essential to align with real-world software engineering practices and to produce code that is easier to maintain and extend.</p> <h2 id="conclusion">Conclusion</h2> <p>The analysis highlights a <strong>gap between achieving benchmark success and adhering to real-world software engineering best practices</strong>, underscoring the need for benchmarks that better reflect practical requirements and long-term code maintainability.</p> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2025multifile,
  title={Do SWE-Agents Solve Multi-File Issues Like Humans? A Deep Dive into SWE-Bench Verified},
  author={Ganhotra, Jatin},
  year={2025},
  month={January},
  url={https://jatinganhotra.dev/blog/swe-agents/2025/01/05/swe-bench-mutliple-files/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench_Verified"/><category term="SWE-agent"/><category term="OpenHands"/><category term="Agentless"/><category term="Claude 3.5 Sonnet"/><summary type="html"><![CDATA[How SWE-agents (OpenHands, SWE-agent, Agentless) handle multi-file software engineering tasks compared to human developers on SWE-bench Verified, with Claude 3.5 Sonnet and OpenAI models.]]></summary></entry><entry><title type="html">OpenHands CodeAct v2.1 v/s Tools + Claude 3.5 Sonnet</title><link href="https://jatinganhotra.dev/blog/swe-agents/2024/12/31/claude-3.5-sonnet.html" rel="alternate" type="text/html" title="OpenHands CodeAct v2.1 v/s Tools + Claude 3.5 Sonnet"/><published>2024-12-31T00:00:00+00:00</published><updated>2024-12-31T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2024/12/31/claude-3.5-sonnet</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2024/12/31/claude-3.5-sonnet.html"><![CDATA[<p>The recent release of the <code class="language-plaintext highlighter-rouge">Claude-3.5 Sonnet (20241022)</code> model has been a game-changer, revitalizing the SWE-Bench leaderboard. This model has been the driving force behind several systems currently holding the top positions.</p> <p>The <a href="http://www.swebench.com">SWE-Bench leaderboard</a> Rank 1: <code class="language-plaintext highlighter-rouge">Amazon Q Developer Agent (v20241202-dev)</code> submission <a href="https://github.com/swe-bench/experiments/tree/main/evaluation/verified/20241202_amazon-q-developer-agent-20241202-dev">README</a> says ‘<em>Our team is currently working on publishing details of the Q Dev Agent algorithm.</em>’ and Rank 2: <a href="https://devlo.ai"><code class="language-plaintext highlighter-rouge">devlo</code></a> submission <a href="https://github.com/swe-bench/experiments/tree/main/evaluation/verified/20241108_devlo">README</a> does not share any details.</p> <p>Rank 3: <code class="language-plaintext highlighter-rouge">OpenHands + CodeAct v2.1 (claude-3.5-sonnet-20241022)</code> explicitly highlights its use of the Claude-3.5 Sonnet model in its submission entry and their agent is open-source and available on <a href="https://github.com/All-Hands-AI/OpenHands">Github</a>.</p> <p>It could be an interesting exercise to compare this Rank 3 submission against Anthropic’s official entry, <code class="language-plaintext highlighter-rouge">Tools + Claude 3.5 Sonnet (2024-10-22)</code>, which currently holds Rank 9 on the SWE-Bench_Verified leaderboard as of December 28, 2024.</p> <p><i>NOTE:</i> For our analysis, we will take a cursory approach, focusing on identifying overarching patterns rather than examining individual instances in detail.</p> <table> <thead> <tr> <th>Rank</th> <th>Model</th> <th>% Resolved</th> <th>Date</th> </tr> </thead> <tbody> <tr> <td>3</td> <td>OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td>53.00</td> <td>2024-10-29</td> </tr> <tr> <td>9</td> <td>Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td>49.00</td> <td>2024-10-22</td> </tr> </tbody> </table> <p>There is a <code class="language-plaintext highlighter-rouge">6%</code> increase in peformance by the OpenHands system, in comparison to the Anthropic’s official submission. The Anthropic’s submission post <a href="https://www.anthropic.com/research/swe-bench-sonnet">Raising the bar on SWE-bench Verified with Claude 3.5 Sonnet</a> says:</p> <blockquote> <p class="info">The performance of an agent on SWE-bench can vary significantly based on this scaffolding, even when using the same underlying AI model.</p> </blockquote> <p>The above statement provides an excellent foundation for this exercise.</p> <p>Let’s begin.</p> <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Total instances: 500
OpenHands resolved instances: 265
Tools Sonnet resolved instances: 245
<span class="c"># is there overlap?</span>
Number of Instances resolved by both systems: 205
Number of Instances resolved by OpenHands only: 60
Number of Instances resolved by Tools Sonnet only: 40
</code></pre></div></div> <p>Both systems get <code class="language-plaintext highlighter-rouge">205</code> instances resolved, but there are <code class="language-plaintext highlighter-rouge">60</code> instances only resolved by OpenHands and <code class="language-plaintext highlighter-rouge">40</code> instances only resolved by Tools + Claude 3.5 Sonnet. This is interesting.</p> <p>Now, take a deeper dive into the details, leveraging the official posts from both submissions as well as the logs and trajectories accessible for further analysis.</p> <p>The <code class="language-plaintext highlighter-rouge">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</code> submission <a href="https://github.com/swe-bench/experiments/tree/main/evaluation/verified/20241029_OpenHands-CodeAct-2.1-sonnet-20241022">README</a> says:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>This submission is made with OpenHands CodeAct v2.1 at commit a86275e288087bc7833bc79b0b691ed2ec223205
of PR #4537 using `anthropic/claude-3-5-sonnet-20241022.
</code></pre></div></div> <p>and the official post <a href="https://www.all-hands.dev/blog/openhands-codeact-21-an-open-state-of-the-art-software-development-agent">OpenHands CodeAct 2.1: An Open, State-of-the-Art Software Development Agent</a> outlines the changes:</p> <blockquote> <p>for CodeAct 2.1, we made a number of further improvements:</p> <ol class="info"> <li>Switched to use function calling, a method used by language models to more precisely specify the functions available to them</li> <li>We switched to Anthropic's new claude-3.5 model, released in October</li> <li>Made a number of fixes to make it easier for agents to traverse directories</li> </ol> </blockquote> <p>Let’s review the prompt for both systems first and then review the tools used by each system.</p> <h2 id="prompt">Prompt</h2> <h3 id="tools--claude-35-sonnet-2024-10-22">Tools + Claude 3.5 Sonnet (2024-10-22)</h3> <p>The Anthropic <code class="language-plaintext highlighter-rouge">Tool Using Agent</code> prompt is copied below from the <a href="https://www.anthropic.com/research/swe-bench-sonnet">official post</a>. It outlines a suggested approach for the model, but it’s not overly long or too detailed for this task.</p> <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;uploaded_files&gt;</span>
{location}
<span class="nt">&lt;/uploaded_files&gt;</span>
I've uploaded a python code repository in the directory {location} (not in /tmp/inputs). Consider the following PR description:

<span class="nt">&lt;pr_description&gt;</span>
{pr_description}
<span class="nt">&lt;/pr_description&gt;</span>

Can you help me implement the necessary changes to the repository so that the requirements specified in the <span class="nt">&lt;pr_description&gt;</span> are met?
I've already taken care of all changes to any of the test files described in the <span class="nt">&lt;pr_description&gt;</span>. This means you DON'T have to modify the testing logic or any of the tests in any way!

Your task is to make the minimal changes to non-tests files in the {location} directory to ensure the <span class="nt">&lt;pr_description&gt;</span> is satisfied.

Follow these steps to resolve the issue:
1. As a first step, it might be a good idea to explore the repo to familiarize yourself with its structure.
2. Create a script to reproduce the error and execute it with `python <span class="nt">&lt;filename.py&gt;</span>` using the BashTool, to confirm the error
3. Edit the sourcecode of the repo to resolve the issue
4. Rerun your reproduce script and confirm that the error is fixed!
5. Think about edgecases and make sure your fix handles them as well

Your thinking should be thorough and so it's fine if it's very long.
</code></pre></div></div> <h3 id="openhands--codeact-v21-claude-3-5-sonnet-20241022">OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</h3> <p>The OpenHands agent has an additional <code class="language-plaintext highlighter-rouge">system</code> message:</p> <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code>You are a helpful assistant that can interact with a computer to solve tasks.
<span class="nt">&lt;IMPORTANT&gt;</span>
* If user provides a path, you should NOT assume it's relative to the current working directory. Instead, you should explore the file system to find the file before working on it.
<span class="nt">&lt;/IMPORTANT&gt;</span>
</code></pre></div></div> <p>However, OpenHands retains the Anthropic’s prompt unchanged.</p> <blockquote> <p class="info">Instruction based on Anthropic’s official trajectory <br/> <a href="https://github.com/eschluntz/swe-bench-experiments/tree/main/evaluation/verified/20241022_tools_claude-3-5-sonnet-updated/trajs">https://github.com/eschluntz/swe-bench-experiments/tree/main/evaluation/verified/20241022_tools_claude-3-5-sonnet-updated/trajs</a><br/> <strong><em>– from <a href="https://github.com/All-Hands-AI/OpenHands/commit/ae13171194565f21ae10afe1e9d126173d8fdc1d#diff-cf5322e360ed33c3dc16023bfd443e6a7edab81c2f4a9e0dfd2f681a2fd59165R70">evaluation/swe_bench/run_infer.py (commit ae13171)</a></em></strong></p> </blockquote> <p>Below is a diff illustrating the differences between the prompts:</p> <div class="language-diff highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gd">--- tools_sonnet_prompt.txt	2024-12-28 13:33:44
</span><span class="gi">+++ openhands_prompt.txt	2024-12-28 13:39:38
</span><span class="p">@@ -1,7 +1,7 @@</span>
 &lt;uploaded_files&gt;
<span class="gd">-/repo
</span><span class="gi">+/workspace/astropy__astropy__1.3
</span> &lt;/uploaded_files&gt;
<span class="gd">-I've uploaded a python code repository in the directory /repo (not in /tmp/inputs). Consider the following PR description:
</span><span class="gi">+I've uploaded a python code repository in the directory astropy__astropy__1.3. Consider the following PR description:
</span><span class="err">
</span> &lt;pr_description&gt;
 {pr_description}
</code></pre></div></div> <p>We can make the following observations:</p> <ul> <li>Upon exploring the log files from the Anthropic submission, we can see that the <code class="language-plaintext highlighter-rouge">{location}</code> is always set to <code class="language-plaintext highlighter-rouge">/repo</code> for Anthropic’s <code class="language-plaintext highlighter-rouge">Tool Using Agent</code>. For OpenHands CodeAct 2.1, the <code class="language-plaintext highlighter-rouge">{location}</code> is set to the directory where the git repo was cloned inside the sandbox, e.g. <code class="language-plaintext highlighter-rouge">/workspace/astropy__astropy__1.3</code>, <code class="language-plaintext highlighter-rouge">/workspace/django__django__3.2</code>, <code class="language-plaintext highlighter-rouge">/workspace/pallets__flask__2.3</code> etc. The workspace directory name is a combination of the instance repo and version in the OpenHands github repo <a href="https://github.com/All-Hands-AI/OpenHands/blob/main/evaluation/benchmarks/swe_bench/run_infer.py#L51">here</a></li> </ul> <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">_get_swebench_workspace_dir_name</span><span class="p">(</span><span class="n">instance</span><span class="p">:</span> <span class="n">pd</span><span class="p">.</span><span class="n">Series</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
    <span class="k">return</span> <span class="sa">f</span><span class="sh">'</span><span class="si">{</span><span class="n">instance</span><span class="p">.</span><span class="n">repo</span><span class="si">}</span><span class="s">__</span><span class="si">{</span><span class="n">instance</span><span class="p">.</span><span class="n">version</span><span class="si">}</span><span class="sh">'</span><span class="p">.</span><span class="nf">replace</span><span class="p">(</span><span class="sh">'</span><span class="s">/</span><span class="sh">'</span><span class="p">,</span> <span class="sh">'</span><span class="s">__</span><span class="sh">'</span><span class="p">)</span>
</code></pre></div></div> <ul> <li>The OpenHands prompt does not modify the <code class="language-plaintext highlighter-rouge">{location}</code> variable in the following sentence in the prompt and is kept as <code class="language-plaintext highlighter-rouge">/repo</code>.</li> </ul> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Your task is to make the minimal changes to non-tests files in the {location} directory to ensure the &lt;pr_description&gt; is satisfied.
</code></pre></div></div> <p>A quick grep of the OpenHands trajectories reveals several instances with the following <em>stdout</em> observation entries in the log files:</p> <ul> <li><code class="language-plaintext highlighter-rouge">OBSERVATION:\nls -la /repo\r\nls: cannot access '/repo': No such file or directory</code></li> <li><code class="language-plaintext highlighter-rouge">OBSERVATION:\nERROR:\nThe path /repo does not exist. Please provide a valid path.</code></li> <li><code class="language-plaintext highlighter-rouge">'/repo/' is not a directory</code></li> <li><code class="language-plaintext highlighter-rouge">I notice the repository path is not in /repo. Let's move it there. Let's create the /repo directory first</code></li> <li><code class="language-plaintext highlighter-rouge">Let me check if we need to add /repo to the path</code></li> </ul> <p>These show that the Claude 3.5 Sonnet model gets confused by two different path locations specified in the OpenHands prompt <code class="language-plaintext highlighter-rouge">/repo</code> and <code class="language-plaintext highlighter-rouge">/workspace/astropy__astropy__1.3</code>.</p> <p>Perhaps it’s a typo/bug which was resolved before the submission but the trajectories were not updated. The current version of the prompt in the OpenHands code has <a href="https://github.com/All-Hands-AI/OpenHands/blob/main/evaluation/benchmarks/swe_bench/run_infer.py#L71">updated</a> it to <code class="language-plaintext highlighter-rouge">/workspace</code>.</p> <p>So, we can conclude that OpenHands retains the Anthropic’s prompt unchanged, but has an additional <code class="language-plaintext highlighter-rouge">system</code> message, that is absent in the Anthropic <code class="language-plaintext highlighter-rouge">Tool Use Agent</code>. Anthropic has not disclosed details about any system message they might have used during their evaluation.</p> <h2 id="tools">Tools</h2> <p>The Anthropic <a href="(https://www.anthropic.com/research/swe-bench-sonnet)"><code class="language-plaintext highlighter-rouge">Tool Use Agent</code></a> has two tools:</p> <ul> <li>a Bash Tool for executing bash commands, and</li> <li>an Edit Tool, for viewing and editing files and directories.</li> </ul> <p>The description for both tools contains detailed information for the Claude 3.5 Sonnet model about how to use the tool. I really like the tool descriptions - they are well-crafted and strike a balance between detail and clarity.</p> <h3 id="bash-tool-cmdruntool">Bash Tool/ CmdRunTool</h3> <p>Both OpenHands <code class="language-plaintext highlighter-rouge">CmdRunTool</code> and Anthropic’s <code class="language-plaintext highlighter-rouge">Bash Tool</code> have a very simple schema, taking only the command to be run in the environment. But, they have different tool descriptions.</p> <p>OpenHands <code class="language-plaintext highlighter-rouge">CmdRunTool</code> <a href="https://github.com/All-Hands-AI/OpenHands/commit/ae13171194565f21ae10afe1e9d126173d8fdc1d#diff-1c3bca1c2fb93868dc3262439f8d24f0af08417f86f317da25e6e28e005202ffR38">description</a>:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Execute a bash command in the terminal.
* Long running commands: For commands that may run indefinitely, it should be run in the background and the output should be redirected to a file, e.g. command = `python3 app.py &gt; server.log 2&gt;&amp;1 &amp;`.
* Interactive: If a bash command returns exit code `-1`, this means the process is not yet finished. The assistant must then send a second call to terminal with an empty `command` (which will retrieve any additional logs), or it can send additional text (set `command` to the text) to STDIN of the running process, or it can send command=`ctrl+c` to interrupt the process.
* Timeout: If a command execution result says "Command timed out. Sending SIGINT to the process", the assistant should retry running the command in the background.
</code></pre></div></div> <p>Anthropic’s <code class="language-plaintext highlighter-rouge">Bash Tool</code> <a href="https://www.anthropic.com/research/swe-bench-sonnet">description</a> -</p> <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Run commands in a bash shell\n
* When invoking this tool, the contents of the \"command\" parameter does NOT need to be XML-escaped.\n
* You don't have access to the internet via this tool.\n
* You do have access to a mirror of common linux and python packages via apt and pip.\n
* State is persistent across command calls and discussions with the user.\n
* To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.\n
* Please avoid commands that may produce a very large amount of output.\n
* Please run long lived commands in the background, e.g. 'sleep 10 &amp;' or start a server in the background.
</code></pre></div></div> <h3 id="edit-tool">Edit Tool</h3> <p>OpenHands <code class="language-plaintext highlighter-rouge">StrReplaceEditorTool</code> tool uses the <a href="https://github.com/All-Hands-AI/OpenHands/blob/ae13171194565f21ae10afe1e9d126173d8fdc1d/openhands/agenthub/codeact_agent/function_calling.py#L231">a) same tool description, b) schema and c) code implementation</a> as Anthropic’s <code class="language-plaintext highlighter-rouge">str_replace_editor</code> Edit tool. In CodeAct 2.1, <code class="language-plaintext highlighter-rouge">StrReplaceEditorTool</code> was used <a href="https://github.com/All-Hands-AI/OpenHands/blob/ae13171194565f21ae10afe1e9d126173d8fdc1d/evaluation/swe_bench/run_infer.py#L157">here</a> and <a href="https://github.com/All-Hands-AI/OpenHands/blob/ae13171194565f21ae10afe1e9d126173d8fdc1d/openhands/agenthub/codeact_agent/function_calling.py#L393">here</a>.</p> <blockquote> <p class="info">This file editor is largely based on Anthorpic released <a href="https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo/computer_use_demo/tools/edit.py"><code class="language-plaintext highlighter-rouge">str_replace_editor</code></a>.<br/> <strong><em>– from <a href="https://github.com/All-Hands-AI/OpenHands/blob/ae13171194565f21ae10afe1e9d126173d8fdc1d/openhands/runtime/plugins/agent_skills/file_editor/README.md">openhands - File Editor (commit ae13171)</a></em></strong></p> </blockquote> <h2 id="wait-what">Wait, what?</h2> <p>If both systems: <code class="language-plaintext highlighter-rouge">OpenHands + CodeAct v2.1 (claude-3.5-sonnet-20241022)</code> at Rank 3 and <code class="language-plaintext highlighter-rouge">Tools + Claude 3.5 Sonnet (2024-10-22)</code> at Rank 9 share:</p> <ul> <li>Prompt</li> <li>Edit tool for viewing and editing files and directories</li> <li>Bash tool schema</li> </ul> <p>and <strong><em>only</em></strong> differ in:</p> <ul> <li>additional/different system instruction/prompt, and</li> <li>the description of Bash tool</li> </ul> <style>.emoji-big-size img{font-size:2rem}</style> <p class="emoji-big-size">These differences raise an interesting question: are they significant enough :thinking: to explain the following scenario?</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>60 instances only resolved by OpenHands
40 instances only resolved by Tools + Claude 3.5 Sonnet
205 instances resolved by both systems
</code></pre></div></div> <p class="emoji-big-size">Perhaps, what Anthropic’s <a href="https://www.anthropic.com/research/swe-bench-sonnet">post</a> suggests is true, <strong>even</strong> when there are <em>minor</em> differences in the scaffolding!</p> <blockquote> <p class="info">The performance of an agent on SWE-bench can vary significantly based on this scaffolding, even when using the same underlying AI model.<br/> <strong><em>– from <a href="https://www.anthropic.com/research/swe-bench-sonnet">Raising the bar on SWE-bench Verified with Claude 3.5 Sonnet</a></em></strong></p> </blockquote> <h2 id="takeaways">Takeaways</h2> <ul> <li> <p>I find it quite surprising that such seemingly minor differences could lead to markedly distinct outcomes on the benchmark.</p> </li> <li> <p>It’s entirely plausible that repeated runs of the same system would yield entirely different outcomes. This raises an intriguing point about the consistency and reliability of these systems — “how much of the observed performance is deterministic versus subject to randomness?”</p> </li> </ul> <h2 id="update-jan-3-2025">Update (Jan 3, 2025)</h2> <h3 id="response-from-xingyao-wang-all-hands-ai-openhands">Response from Xingyao Wang @All Hands AI/ OpenHands</h3> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Yeah, I&#39;ve been observing similar things. The most challenging thing about agent evaluation is that even if you run the SAME code on the SAME set of problems with the SAME temperature=0, you typically end up with different results every time 😅.<br/><br/>We recently re-ran the commit… <a href="https://t.co/pz0HdbdIPC">pic.twitter.com/pz0HdbdIPC</a></p>&mdash; Xingyao Wang (@xingyaow_) <a href="https://twitter.com/xingyaow_/status/1875230079300620397?ref_src=twsrc%5Etfw">January 3, 2025</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2024openhands,
  title={OpenHands CodeAct v2.1 v/s Tools + Claude 3.5 Sonnet},
  author={Ganhotra, Jatin},
  year={2024},
  month={December},
  url={https://jatinganhotra.dev/blog/swe-agents/2024/12/31/claude-3.5-sonnet/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="SWE-Bench"/><category term="SWE-Bench_Verified"/><category term="OpenHands"/><category term="Claude 3.5 Sonnet"/><category term="CodeAct v2.1"/><category term="Anthropic"/><category term="SWE-agent"/><summary type="html"><![CDATA[Head-to-head comparison of OpenHands CodeAct v2.1 and Anthropic Claude 3.5 Sonnet on SWE-bench Verified, analyzing the performance differences and capabilities of these leading SWE-agent approaches.]]></summary></entry><entry><title type="html">SWE-Bench Verified ⊊ real-world SWE tasks</title><link href="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html" rel="alternate" type="text/html" title="SWE-Bench Verified ⊊ real-world SWE tasks"/><published>2024-12-26T00:00:00+00:00</published><updated>2024-12-26T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified</id><content type="html" xml:base="https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified.html"><![CDATA[<p>The title “SWE-Bench Verified <code class="language-plaintext highlighter-rouge">⊊</code> real-world SWE tasks”, conveys 2 points:</p> <ul> <li>SWE-Bench Verified <code class="language-plaintext highlighter-rouge">!=</code> real-world SWE tasks, and</li> <li>SWE-Bench Verified <code class="language-plaintext highlighter-rouge">⊆</code> real-world SWE tasks (i.e. a subset)</li> </ul> <p>Let’s dive in.</p> <p>The year 2024 has been a thrilling time for SWE Agents, with the SWE-Bench leaderboard buzzing with activity throughout the year. <a href="http://www.swebench.com">SWE-Bench</a> is a well known benchmark in the community for software engineering. Some notable events are:</p> <ul> <li>Devin was <a href="https://www.cognition.ai/blog/introducing-devin">announced</a> on March 12, 2024 and set a new state-of-the-art, on a random 25% subset of the dataset, and</li> <li>release of the updated <a href="https://x.com/OfirPress/status/1858567863788769518">Claude 3.5 Sonnet</a> model setting a <a href="https://www.anthropic.com/research/swe-bench-sonnet">new state-of-the-art</a> on SWE-Bench_Verified on Oct 30, 2024.</li> </ul> <h2 id="swe-bench-introduction">SWE-Bench Introduction</h2> <p>There are 3 benchmarks when we talk about SWE-Bench:</p> <ul> <li><a href="https://huggingface.co/datasets/princeton-nlp/SWE-bench">SWE-Bench</a></li> <li><a href="https://huggingface.co/datasets/princeton-nlp/SWE-bench_Lite">SWE-Bench_Lite</a></li> <li><a href="https://huggingface.co/datasets/princeton-nlp/SWE-bench_Verified">SWE-bench_Verified</a></li> </ul> <p>The <a href="https://openreview.net/forum?id=VTF8yNQM66">authors</a> introduce <code class="language-plaintext highlighter-rouge">SWE-Bench</code> as:</p> <blockquote> <p>an evaluation framework consisting of 2,294 software engineering problems drawn from real GitHub issues and corresponding pull requests across 12 popular Python repositories. Given a codebase along with a description of an issue to be resolved, a language model is tasked with editing the codebase to address the issue.</p> </blockquote> <p>Since the initial performance on the full SWE-Bench was quite low, the authors created a Lite subset of 300 instances, <code class="language-plaintext highlighter-rouge">SWE-Bench_Lite</code>, that have been sampled to be more self-contained, with a focus on evaluating functional bug fixes. Full details of the Lite split and filtering details are included in Appendix A.7 in the paper.</p> <p>On <a href="https://openai.com/index/introducing-swe-bench-verified/">August 13, 2024</a>, OpenAI released a human-validated subset of 500 instances from SWE-bench, <code class="language-plaintext highlighter-rouge">SWE-bench_Verified</code>, that</p> <blockquote> <p>more reliably evaluates AI models’ ability to solve real-world software issues.</p> </blockquote> <p>For additional details on the SWE-Bench_Verified benchmark, please refer to <a href="https://openai.com/index/introducing-swe-bench-verified/">OpenAI page</a>.</p> <h2 id="leaderboard">Leaderboard</h2> <p>Since its release, SWE-bench_Verified has become the de-facto benchmark given OpenAI released it after human-validation. The current leaderboard for SWE-bench_Verified (top-10 systems) looks like (as of Dec 25, 2024):</p> <table> <thead> <tr> <th>Model</th> <th>% Resolved</th> </tr> </thead> <tbody> <tr> <td>Amazon Q Developer Agent (v20241202-dev)</td> <td>55.00</td> </tr> <tr> <td>devlo</td> <td>54.20</td> </tr> <tr> <td>OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td>53.00</td> </tr> <tr> <td>Engine Labs (2024-11-25)</td> <td>51.80</td> </tr> <tr> <td>Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td>50.80</td> </tr> <tr> <td>Solver (2024-10-28)</td> <td>50.00</td> </tr> <tr> <td>Bytedance MarsCode Agent</td> <td>50.00</td> </tr> <tr> <td>nFactorial (2024-11-05)</td> <td>49.20</td> </tr> <tr> <td>Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td>49.00</td> </tr> <tr> <td>Composio SWE-Kit (2024-10-25)</td> <td>48.60</td> </tr> </tbody> </table> <p>As we can observe, the top-10 systems are quite close with only ~1% difference between each rank.</p> <h2 id="one-issue-with-the-swe-bench_verified-leaderboard">One Issue with the SWE-Bench_Verified Leaderboard</h2> <p>However, <code class="language-plaintext highlighter-rouge">SWE-Bench</code> was created with the following intent:</p> <blockquote> <p>Resolving issues in SWE-bench frequently requires <em><strong>understanding and coordinating changes across multiple functions, classes, and even files simultaneously</strong></em>, calling for models to interact with execution environments, process extremely long contexts and perform complex reasoning that goes far beyond traditional code generation tasks.</p> </blockquote> <p>Let’s take a deeper dive into the results while keeping in mind the following statement:</p> <blockquote> <p>understanding and coordinating changes across multiple functions, classes, and even files simultaneously</p> </blockquote> <p>If we look at the number of files per Github issue which must be modified to resolve it for <code class="language-plaintext highlighter-rouge">SWE-Bench_Verified</code>, we get:</p> <table> <thead> <tr> <th>files</th> <th>instances</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>429</td> </tr> <tr> <td>2</td> <td>49</td> </tr> <tr> <td>3</td> <td>12</td> </tr> <tr> <td>4</td> <td>7</td> </tr> <tr> <td>5</td> <td>1</td> </tr> <tr> <td>6</td> <td>1</td> </tr> <tr> <td>7-20</td> <td>0</td> </tr> <tr> <td>21</td> <td>1</td> </tr> <tr> <td>21+</td> <td>0</td> </tr> </tbody> </table> <p>For simplicity, let’s divide the <code class="language-plaintext highlighter-rouge">SWE-Bench_Verified</code> dataset in 2 buckets:</p> <ul> <li>instances which require code changes in a single-file = <code class="language-plaintext highlighter-rouge">429/500</code> = <code class="language-plaintext highlighter-rouge">85.8%</code>, and</li> <li>instances which require code changes in multiple files (&gt; 1) = <code class="language-plaintext highlighter-rouge">71/500</code> = <code class="language-plaintext highlighter-rouge">14.2%</code></li> </ul> <p>If we divide the results between these 2 buckets, we get:</p> <table> <thead> <tr> <th>Model</th> <th>Overall %Resolved (count/500)</th> <th>Single-file %Resolved (count/429)</th> <th>Multi-file %Resolved (count/71)</th> </tr> </thead> <tbody> <tr> <td>Amazon Q Developer Agent (v20241202-dev)</td> <td>55.0 (275)</td> <td>60.61 (260)</td> <td>21.13 (15)</td> </tr> <tr> <td>devlo</td> <td>54.2 (271)</td> <td>59.91 (257)</td> <td>19.72 (14)</td> </tr> <tr> <td>OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td>53.0 (265)</td> <td>57.58 (247)</td> <td>25.35 (18)</td> </tr> <tr> <td>Engine Labs (2024-11-25)</td> <td>51.8 (259)</td> <td>57.34 (246)</td> <td>18.31 (13)</td> </tr> <tr> <td>Agentless-1.5 + Claude-3.5 Sonnet (20241022)</td> <td>50.8 (254)</td> <td>56.18 (241)</td> <td>18.31 (13)</td> </tr> <tr> <td>Solver (2024-10-28)</td> <td>50.0 (250)</td> <td>55.24 (237)</td> <td>18.31 (13)</td> </tr> <tr> <td>Bytedance MarsCode Agent</td> <td>50.0 (250)</td> <td>55.24 (237)</td> <td>18.31 (13)</td> </tr> <tr> <td>nFactorial (2024-11-05)</td> <td>49.2 (246)</td> <td>55.01 (236)</td> <td>14.08 (10)</td> </tr> <tr> <td>Tools + Claude 3.5 Sonnet (2024-10-22)</td> <td>49.0 (245)</td> <td>55.24 (237)</td> <td>11.27 (8)</td> </tr> <tr> <td>Composio SWE-Kit (2024-10-25)</td> <td>48.6 (243)</td> <td>55.24 (237)</td> <td>8.45 (6)</td> </tr> </tbody> </table> <blockquote class="block-warning"> <p>The performance of the top-10 systems on SWE-Bench Verified <em>drops significantly</em> for the multiple files category.</p> </blockquote> <h2 id="swe-bench-test-set">SWE-Bench test set</h2> <p>If we look at the distribution of number of files per Github issue which must be modified to resolve it for the (full) SWE-Bench test set, we get:</p> <table> <thead> <tr> <th>files</th> <th>instances</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>1723</td> </tr> <tr> <td>2</td> <td>308</td> </tr> <tr> <td>3</td> <td>108</td> </tr> <tr> <td>4</td> <td>50</td> </tr> <tr> <td>5</td> <td>31</td> </tr> <tr> <td>6</td> <td>18</td> </tr> <tr> <td>7</td> <td>14</td> </tr> <tr> <td>8</td> <td>7</td> </tr> <tr> <td>9</td> <td>7</td> </tr> <tr> <td>10</td> <td>3</td> </tr> <tr> <td>11+</td> <td>25</td> </tr> </tbody> </table> <p>For simplicity, let’s divide the SWE-Bench test set in the same 2 buckets:</p> <ul> <li>instances which require code changes in a single-file = <code class="language-plaintext highlighter-rouge">1723/2294</code> = <code class="language-plaintext highlighter-rouge">75.11%</code>, and</li> <li>instances which require code changes in multiple files (&gt; 1) = <code class="language-plaintext highlighter-rouge">571/2294</code> = <code class="language-plaintext highlighter-rouge">24.89%</code></li> </ul> <p>If we look at the leaderboard for SWE-Bench full test set (top-5 systems), as of Dec 25, 2024, for the 2 buckets, we get:</p> <table> <thead> <tr> <th>Model</th> <th>Overall %Resolved (count/2294)</th> <th>Single-file %Resolved (count/1723)</th> <th>Multi-file %Resolved (count/571)</th> </tr> </thead> <tbody> <tr> <td>OpenHands + CodeAct v2.1 (claude-3-5-sonnet-20241022)</td> <td>29.38 (674)</td> <td>34.94 (602)</td> <td>12.61 (72)</td> </tr> <tr> <td>AutoCodeRover-v2.0 (Claude-3.5-Sonnet-20241022)</td> <td>24.89 (571)</td> <td>30.12 (519)</td> <td>9.11 (52)</td> </tr> <tr> <td>Honeycomb</td> <td>22.06 (506)</td> <td>26.7 (460)</td> <td>8.06 (46)</td> </tr> <tr> <td>Amazon Q Developer Agent (v20240719-dev)</td> <td>19.75 (453)</td> <td>24.38 (420)</td> <td>5.78 (33)</td> </tr> <tr> <td>Factory Code Droid</td> <td>19.27 (442)</td> <td>23.74 (409)</td> <td>5.78 (33)</td> </tr> </tbody> </table> <blockquote class="block-warning"> <p>We observe the same trend. The performance of the top-5 systems on the (full) SWE-Bench test set <em>drops significantly</em> for the multiple files category.</p> </blockquote> <p>Perhaps we don’t need to worry about the multiple files category, if we assume that the 75%-25% ratio in the SWE-Bench test set is reflective of the real-world Github issues. To validate our assumption, let’s take a look at the SWE-Bench train set.</p> <h2 id="swe-bench-train-set">SWE-Bench train set</h2> <p>If we look at the distribution of number of files per Github issue which must be modified to resolve it for the full <code class="language-plaintext highlighter-rouge">SWE-Bench train</code> set, we get:</p> <table> <thead> <tr> <th>files</th> <th>instances</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>8783</td> </tr> <tr> <td>2</td> <td>4023</td> </tr> <tr> <td>3</td> <td>1641</td> </tr> <tr> <td>4</td> <td>836</td> </tr> <tr> <td>5</td> <td>564</td> </tr> <tr> <td>6</td> <td>390</td> </tr> <tr> <td>7</td> <td>253</td> </tr> <tr> <td>8</td> <td>190</td> </tr> <tr> <td>9</td> <td>128</td> </tr> <tr> <td>10</td> <td>104</td> </tr> <tr> <td>11-20</td> <td>469</td> </tr> <tr> <td>21-30</td> <td>127</td> </tr> <tr> <td>31-100</td> <td>131</td> </tr> <tr> <td>101-200</td> <td>16</td> </tr> <tr> <td>201+</td> <td>5</td> </tr> </tbody> </table> <p>There are 19008 instances in the train set and <a href="https://pypi.org/project/unidiff/">unidiff</a> parser (v0.7.5) was unable to parse 1348 instances, so we have the statistics for 17660 instances. But, the above distribution paints an entirely different picture.</p> <p>For simplicity, let’s divide the <code class="language-plaintext highlighter-rouge">SWE-Bench train</code> set in the same 2 buckets as before:</p> <ul> <li>instances which require code changes in a single-file = <code class="language-plaintext highlighter-rouge">8783/17660</code> = <code class="language-plaintext highlighter-rouge">49.73%</code>, and</li> <li>instances which require code changes in multiple files (&gt; 1) = <code class="language-plaintext highlighter-rouge">8877/17660</code> = <code class="language-plaintext highlighter-rouge">50.27%</code></li> </ul> <p>If we assume that the instances which require &gt; than 5 files are not representative of most day-to-day SWE tasks and exclude them, we get:</p> <table> <thead> <tr> <th>files</th> <th>instances</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>8783</td> </tr> <tr> <td>2</td> <td>4023</td> </tr> <tr> <td>3</td> <td>1641</td> </tr> <tr> <td>4</td> <td>836</td> </tr> <tr> <td>5</td> <td>564</td> </tr> </tbody> </table> <p>The above subset of instances which require &lt;= than 5 files gives us 15847 instances. Dividing the above subset of SWE-Bench train set in the same 2 buckets as before:</p> <ul> <li>instances which require code changes in a single-file = <code class="language-plaintext highlighter-rouge">8783/15847</code> = <code class="language-plaintext highlighter-rouge">55.42%</code>, and</li> <li>instances which require code changes in multiple files (&gt; 1) = <code class="language-plaintext highlighter-rouge">7064/15847</code> = <code class="language-plaintext highlighter-rouge">44.58%</code></li> </ul> <h2 id="conclusion">Conclusion</h2> <p>Aggregating the above statistics for the percentage of Github issues which require editing &gt;1 file, we get:</p> <table> <thead> <tr> <th>Dataset</th> <th>% issues &gt;1 file</th> </tr> </thead> <tbody> <tr> <td>SWE-Bench train set</td> <td><b>50.27</b></td> </tr> <tr> <td>SWE-Bench train set (&lt;= 5 files)</td> <td>44.58</td> </tr> <tr> <td>SWE-Bench test set</td> <td>24.89</td> </tr> <tr> <td>SWE-Bench_Verified test set</td> <td><i>14.2</i></td> </tr> </tbody> </table> <blockquote class="block-danger"> <h5 id="swe-bench-verified--real-world-swe-tasks">SWE-Bench Verified != real-world SWE tasks</h5> <p>If we consider the SWE-Bench train set as a representative of real-world, then by the same definition, we can not consider the SWE-Bench_Verified test set as the true representative of our progress on SWE tasks given the much lower percentage of issues which require changes across &gt;1 file for resolution.</p> </blockquote> <h2 id="takeaways">Takeaways</h2> <ul> <li> <p>We have made tremendous progress on the <code class="language-plaintext highlighter-rouge">SWE-Bench_Verified</code> task, but there’s much more to be done when it comes to building systems which are good at <em><strong>understanding and coordinating changes across multiple functions, classes, and even files simultaneously</strong></em>. Perhaps the current systems (and models) are really good; and we need to curate better evaluation benchmarks.</p> </li> <li> <p>The leaderboard should break down the performance of each new entry across both buckets (single file and multiple files), in addition to the overall benchmark performance.</p> </li> <li> <p>We need a larger human-validated dataset which captures changes across multiple files, given 71 instances (SWE-Bench_Verified) is a very small number (even smaller than the HumanEval benchmark of 164 hand-crafted programming challenges, designed to evaluate an LLM’s code generation capabilities).</p> </li> </ul> <hr/> <h2 id="citation">Citation</h2> <p>If you find this analysis useful for your research, please cite it as:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>@misc{ganhotra2024swebench,
  title={SWE-Bench Verified ⊊ real-world SWE tasks},
  author={Ganhotra, Jatin},
  year={2024},
  month={December},
  url={https://jatinganhotra.dev/blog/swe-agents/2024/12/26/swe-bench-verified/},
  note={Blog post}
}
</code></pre></div></div> <hr/>]]></content><author><name></name></author><category term="blog"/><category term="swe-agents"/><category term="evaluation"/><category term="benchmarks"/><category term="SWE-Bench"/><category term="SWE-Bench_Verified"/><category term="SWE-agent"/><category term="OpenHands"/><category term="Agentless"/><category term="Amazon Q"/><category term="Claude 3.5 Sonnet"/><summary type="html"><![CDATA[Why SWE-bench Verified is only a subset of real-world software engineering tasks — comparing SWE-agents such as OpenHands CodeAct v2.1, Amazon Q, SWE-agent, Agentless and AutoCodeRover, with Claude 3.5 Sonnet.]]></summary></entry><entry><title type="html">Installing Octave on OS X 10.9 Mavericks</title><link href="https://jatinganhotra.dev/blog/2014/01/21/installing-octave-on-os-x-10-dot-9-mavericks.html" rel="alternate" type="text/html" title="Installing Octave on OS X 10.9 Mavericks"/><published>2014-01-21T00:00:00+00:00</published><updated>2014-01-21T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/2014/01/21/installing-octave-on-os-x-10-dot-9-mavericks</id><content type="html" xml:base="https://jatinganhotra.dev/blog/2014/01/21/installing-octave-on-os-x-10-dot-9-mavericks.html"><![CDATA[<p>If you upgraded to OS X 10.9 Mavericks and have started to like the latest enhancements in Finder, new iBooks and Maps applications etc., installing Octave is going to make you forget all of it. The installation process is a herculean task and you better pray to God that you don’t run into much issues like I did.</p> <p>I found decent help from here - <a href="http://ntraft.com/getting-octave-to-work-on-mountain-lion/">Getting Octave to Just Goddamn Work Already on OS X 10.8 Mountain Lion</a>, thanks to <a href="http://ntraft.com">Neil Traft</a> for putting it together.</p> <p>But that’s only half of the story as you’ve upgraded to OS X 10.9 Mavericks. Here, I am writing down steps that you should follow in the exact order and also tips to solve issues all by yourself, if you run into any.</p> <p><strong>P.S.</strong> <em>Please don’t ignore any warnings or any messages that you feel might be irrelevant. If one piece doesn’t fit well, the whole thing may fall later.</em></p> <h4 id="1-install-the-xcode-command-line-tools">1. Install the Xcode Command Line Tools</h4> <p>Installing command line tools in OSX 10.9 Mavericks has changed slightly than previous versions of MAC OS X. Now you don’t have to install Xcode , you can install Command Line Tools stand alone.<br/> Type <code class="language-plaintext highlighter-rouge">xcode-select --install</code> in terminal and choose <em>Install</em> option from the pop-up.<br/> This may take some time depending on your Internet connection.</p> <h4 id="2-install-homebrew">2. Install Homebrew</h4> <p>I’m assuming you know about Homebrew, but if you don’t do yourself a favor, my friend and install it by following <a href="https://github.com/mxcl/homebrew/wiki/installation">Homebrew’s installation instructions</a>.</p> <h4 id="3-install-xquartz">3. Install XQuartz</h4> <p>Install XQuartz from <a href="https://xquartz.macosforge.org/landing/">here</a>. In the past this came installed on OS X, but as of Mountain Lion it is no longer included. So go fix that.</p> <h4 id="4-updating-and-upgrading-homebrew">4. Updating and upgrading Homebrew</h4> <p>If you had Homebrew installed already, update to the latest package definitions. Don’t skip this step out of mere laziness.<br/> <code class="language-plaintext highlighter-rouge">$ brew update &amp;&amp; brew upgrade</code><br/> This may take some time. So, go get yourself a cup of coffee and better have some beer. The path ahead could be tough.</p> <h4 id="5-import-the-scientific-computing-packages">5. Import the scientific computing packages</h4> <p><code class="language-plaintext highlighter-rouge">$ brew tap homebrew/science</code><br/> If you see any warnings here, run <code class="language-plaintext highlighter-rouge">brew doctor</code> and follow what it says. Let me repeat. Don’t be smart and just do what the doctor says!!! The doctor is always right.<br/> Once you have followed the steps specifed by <code class="language-plaintext highlighter-rouge">brew doctor</code>, run<br/> <code class="language-plaintext highlighter-rouge">$ brew untap homebrew/science</code> and rerun<br/> <code class="language-plaintext highlighter-rouge">$ brew tap homebrew/science</code>.</p> <h4 id="6-install-gfortran">6. Install gfortran</h4> <p>To install Octave, you have to install <code class="language-plaintext highlighter-rouge">gfortran</code> first.<br/> <code class="language-plaintext highlighter-rouge">$ brew install gfortran</code><br/> Pay close attention to any messages and warnings during the install. If everything looks good, jump to the next Step.</p> <p>If you see any warnings like: <code class="language-plaintext highlighter-rouge">/usr/bin/install_name tool: malformed object (unknown load command)</code>,<br/> go and visit this <a href="https://github.com/Homebrew/homebrew/issues/25665">Github issue</a> that I raised for more details.</p> <p>If you’re facing any other problem:</p> <ul> <li>run <code class="language-plaintext highlighter-rouge">brew doctor</code> first and do what the doctor says!!!</li> <li>Re-run the command again and see if the issue got resolved.</li> <li>If not, go ahead and raise a new issue at <a href="https://github.com/Homebrew/homebrew/issues">Homebrew Issues</a>.</li> </ul> <h4 id="7-installing-octave">7. Installing Octave</h4> <p><code class="language-plaintext highlighter-rouge">$ brew install octave</code><br/> If everything looks good, jump to the next Step.</p> <p>If brew complains about not having a formula for octave, the following command should fix it: <code class="language-plaintext highlighter-rouge">$ brew tap --repair</code></p> <p>If you get an error like <code class="language-plaintext highlighter-rouge">do a web search for TeX and your operating system. make[3]: *** [octave.dvi] Error 1</code> then build with<br/> <code class="language-plaintext highlighter-rouge">$ brew install octave --without-docs</code> option.<br/> (<em>Thanks Pierre and Kahini for the correction about <code class="language-plaintext highlighter-rouge">--without-docs</code>, previously <code class="language-plaintext highlighter-rouge">-without-docs</code></em>).</p> <p>This is because you don’t have the Tex package installed. Alternatively, you can also download the 2.3GB <em>MacTeX.pkg</em> from <a href="http://tug.org/mactex/">here</a>, install it and rerun the install command.<br/> (<strong>Update:</strong> Don’t try this !!! I installed MacTex package but the Octave installation still failed. I raised an issue here - <a href="https://github.com/Homebrew/homebrew-science/issues/796">Homebrew-science Issues</a> but with no help.)</p> <p>If you run into any other issue, run <code class="language-plaintext highlighter-rouge">brew doctor</code> first and do what the doctor says!!! Re-run the command again and see if the issue got resolved. If not, go ahead and raise a new issue at <a href="https://github.com/Homebrew/homebrew-science/issues">Homebrew-science Issues</a>.</p> <h4 id="8-install-gnuplot">8. Install gnuplot</h4> <p>For native drawing support, we’ll install gnuplot.<br/> <code class="language-plaintext highlighter-rouge">$ brew install gnuplot</code><br/> (<strong>Update:</strong> As <em>phseven</em> pointed out, gnuplot will be automatically installed with octave, but in some cases it won’t support X11.) For such cases, do the following:<br/> <code class="language-plaintext highlighter-rouge">$ brew uninstall gnuplot</code><br/> <code class="language-plaintext highlighter-rouge">$ brew install gnuplot --with-x</code></p> <h4 id="9-setup-octave-startup-file">9. Setup Octave startup file</h4> <p>Edit your Octave startup file or create a new one:<br/> <code class="language-plaintext highlighter-rouge">$ vim ~/.octaverc</code> and add the line <code class="language-plaintext highlighter-rouge">setenv GNUTERM x11</code>.<br/> Don’t forget to save the file.</p> <h4 id="10-create-a-launcher-app-with-applescript-optional">10. Create a launcher app with Applescript [<em>Optional</em>]</h4> <p>Open the “AppleScript Editor” application and write the following text in the editor window:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tell application "Terminal"
 do script "`which octave`; exit"
end tell
</code></pre></div></div> <p>Save it as an application ‘Octave.app’ and then navigate it to the “Applications” folder.</p> <p>Now for the ultimate fix: Reboot your machine!!! Yep, until you restart your Mac, Octave will be unable to launch XQuartz on its own, and you won’t be able to plot anything.</p> <p>Once you’re back in, open the terminal, fire up Octave, and plot a <em>sombrero()</em>.__ You’re all set!!!__</p>]]></content><author><name></name></author><category term="blog"/><category term="Mac OS X"/><category term="Octave"/><category term="How to Install"/><summary type="html"><![CDATA[If you upgraded to OS X 10.9 Mavericks and have started to like the latest enhancements in Finder, new iBooks and Maps applications etc., installing Octave is going to make you forget all of it. The installation process is a herculean task and you better pray to God that you don’t run into much issues like I did.]]></summary></entry><entry><title type="html">Comparison is always false due to limited range of data type</title><link href="https://jatinganhotra.dev/blog/c++/2013/08/30/comparison-is-always-false-due-to-limited-range-of-data-type.html" rel="alternate" type="text/html" title="Comparison is always false due to limited range of data type"/><published>2013-08-30T00:00:00+00:00</published><updated>2013-08-30T00:00:00+00:00</updated><id>https://jatinganhotra.dev/blog/c++/2013/08/30/comparison-is-always-false-due-to-limited-range-of-data-type</id><content type="html" xml:base="https://jatinganhotra.dev/blog/c++/2013/08/30/comparison-is-always-false-due-to-limited-range-of-data-type.html"><![CDATA[<p>This is a small and crisp post over this warning message that appeared quite strange at first. On a closer look though, the reason behind it was pretty clear and straight-forward.</p> <blockquote class="block-warning"> <p>warning: comparison is always false due to limited range of data type</p> </blockquote> <p>I was just playing around with <code class="language-plaintext highlighter-rouge">string.find()</code> function, when I got this warning message. Here is a simple piece of code which, when run on a 64-bit architecture, will produce the above warning.</p> <div class="language-c highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    <span class="n">string</span> <span class="n">subject</span> <span class="o">=</span> <span class="s">"A[1]"</span><span class="p">;</span>
    <span class="n">string</span> <span class="n">search</span> <span class="o">=</span> <span class="s">"1"</span><span class="p">;</span>
    <span class="kt">unsigned</span> <span class="n">location</span> <span class="o">=</span> <span class="n">subject</span><span class="p">.</span><span class="n">find</span><span class="p">(</span><span class="n">search</span><span class="p">);</span>    <span class="c1">// location is unsigned</span>
    <span class="k">if</span><span class="p">(</span> <span class="n">location</span> <span class="o">==</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">::</span><span class="n">npos</span><span class="p">)</span>
        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">" true"</span><span class="p">;</span>
    <span class="k">else</span>
        <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">" false"</span><span class="p">;</span>
</code></pre></div></div> <p>The catch here is that <code class="language-plaintext highlighter-rouge">std::string::npos</code> returns <code class="language-plaintext highlighter-rouge">size_t</code>, which represents the unsigned native integer size on current architecture.<br/> So, on a 32-bit architecture:</p> <ul> <li>both <code class="language-plaintext highlighter-rouge">unsigned</code> and <code class="language-plaintext highlighter-rouge">size_t</code> would have the same size,<br/> However, on a 64-bit machine:</li> <li>the <code class="language-plaintext highlighter-rouge">unsigned</code> would be size - 4 and <code class="language-plaintext highlighter-rouge">size_t</code> would be size - 8.<br/> Hence, the comparison would be always false when run on a 64-bit machine.</li> </ul> <p>So, the proper fix for the above code is to make location variable of type <strong>size_t</strong>.</p> <p>For more information on <code class="language-plaintext highlighter-rouge">size_t</code>, refer to my blog post on <a href="http://jatinganhotra.com/blog/2012/08/25/integer-limits-and-types-in-c-cpp/">Integer Limits and Types in C/C++</a> , which explains the sizes of basic C++ types.</p> <p><em>Note:</em> If you’re seeing the same warning message, but not around the <code class="language-plaintext highlighter-rouge">string.find()</code> function, try <strong>StackOverflow</strong> for help. The warning message is generic and can occur at places where a comparison is being done between types of different sizes.</p>]]></content><author><name></name></author><category term="blog"/><category term="c++"/><category term="C"/><category term="C++"/><category term="Coding Tips"/><summary type="html"><![CDATA[This is a small and crisp post over this warning message that appeared quite strange at first. On a closer look though, the reason behind it was pretty clear and straight-forward.]]></summary></entry></feed>