| run | pass | fail | error | total | wall seconds | |
|---|---|---|---|---|---|---|
| dev/cruxeval | 716 | 0 | 72 | 788 | 489 | functions |
| dev/humaneval_plus | 160 | 0 | 8 | 168 | 137 | functions |
| dev/thealgorithms | 1753 | 0 | 554 | 2307 | 1875 | functions |
| dev total | 2629 | 0 | 634 | 3263 | 2501 | |
| holdout/mbpp_plus | 164 | 1 | 38 | 203 | 132 | functions |
| holdout total | 164 | 1 | 38 | 203 | 132 |
pass: the source with the decompiled function spliced in passed the checks of the task.
fail: that source did not pass them (a failing check, a check that timed out, or no def of the output to splice in).
error: the decompiler produced no Python (it raised, or its worker was killed or timed out).
dev, of the errors: 0 WorkerKilled, 0 FunctionTimeout.
holdout, of the errors: 0 WorkerKilled, 0 FunctionTimeout.
wall seconds: from the start to the end of the run, with the workers in parallel; a total is the sum of the runs of that corpus.
The passed functions, as the original def and as the decompiled output (ours). The output of a function that did not pass means something else than the original, so it is not averaged. avg: per function.
| run | pass | avg lines (original -> ours) | avg cognitive complexity (original -> ours) |
|---|---|---|---|
| dev/cruxeval | 716 | 5.3 -> 12.6 | 1.8 -> 2.2 |
| dev/humaneval_plus | 160 | 16.9 -> 27.2 | 3.1 -> 4.4 |
| dev/thealgorithms | 1753 | 18.4 -> 30.5 | 2.8 -> 5.3 |
| dev total | 2629 | 14.7 -> 25.4 | 2.5 -> 4.4 |
| holdout/mbpp_plus | 164 | 3.6 -> 9.8 | 1.3 -> 1.7 |
| holdout total | 164 | 3.6 -> 9.8 | 1.3 -> 1.7 |
Every function that can be compared with angr, passed or not. avg: per function.
| run | functions | total | sum low-level operations (angr -> ours) | avg lines (angr -> ours) | avg cognitive complexity (angr -> ours) |
|---|---|---|---|---|---|
| dev/cruxeval | 787 | 788 | 53548 -> 428 | 269.4 -> 29.2 | 179.6 -> 3.9 |
| dev/humaneval_plus | 168 | 168 | 13167 -> 17 | 306.6 -> 33.1 | 235.4 -> 5.3 |
| dev/thealgorithms | 2296 | 2307 | 230999 -> 3487 | 420.6 -> 47.6 | 446.9 -> 8.9 |
| dev total | 3251 | 3263 | 297714 -> 3932 | 378.1 -> 42.4 | 371.3 -> 7.5 |
| holdout/mbpp_plus | 203 | 203 | 10773 -> 34 | 202.3 -> 22.6 | 145.2 -> 2.3 |
| holdout total | 203 | 203 | 10773 -> 34 | 202.3 -> 22.6 | 145.2 -> 2.3 |
functions: those of the total with a pseudo-C of the last pass and angr values, whatever their status; the rest has none (its worker died, the binary failed to load, or the pseudo-C could not be rendered).
angr: the C of angr's own decompiler, without the passes of this project. ours: the pseudo-C after the last pass.
low-level operations: calls and stores that no pass lifted to a marker.
One dot per passed function, larger where several functions share the values; a dot on the line "same" is as large as the original, one above "2x" is more than twice as large. The axes are square-root scaled. A dot opens the function it stands for, or the functions with those values where several share them.
One dot per passed function, larger where several functions share the values; a dot on the line "same" is as large as the original, one above "2x" is more than twice as large. The axes are square-root scaled. A dot opens the function it stands for, or the functions with those values where several share them.
The original Python sources are the work of the authors of each dataset and are subject to the licenses of the dataset.