Nuitka decompiler eval

dev

holdout

runpassfailerrortotalwall seconds
dev/cruxeval716072788489functions
dev/humaneval_plus16008168137functions
dev/thealgorithms1753055423071875functions
dev total2629063432632501
holdout/mbpp_plus164138203132functions
holdout total164138203132

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.

passfailerror

Readability

Python

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.

runpassavg lines (original -> ours)avg cognitive complexity (original -> ours)
dev/cruxeval7165.3 -> 12.61.8 -> 2.2
dev/humaneval_plus16016.9 -> 27.23.1 -> 4.4
dev/thealgorithms175318.4 -> 30.52.8 -> 5.3
dev total262914.7 -> 25.42.5 -> 4.4
holdout/mbpp_plus1643.6 -> 9.81.3 -> 1.7
holdout total1643.6 -> 9.81.3 -> 1.7

Pseudo-C

Every function that can be compared with angr, passed or not. avg: per function.

runfunctionstotalsum low-level operations (angr -> ours)avg lines (angr -> ours)avg cognitive complexity (angr -> ours)
dev/cruxeval78778853548 -> 428269.4 -> 29.2179.6 -> 3.9
dev/humaneval_plus16816813167 -> 17306.6 -> 33.1235.4 -> 5.3
dev/thealgorithms22962307230999 -> 3487420.6 -> 47.6446.9 -> 8.9
dev total32513263297714 -> 3932378.1 -> 42.4371.3 -> 7.5
holdout/mbpp_plus20320310773 -> 34202.3 -> 22.6145.2 -> 2.3
holdout total20320310773 -> 34202.3 -> 22.6145.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.

Distribution: dev

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.

lines

passed functions: original vs ours
median 10 -> 19

cognitive complexity

passed functions: original vs ours
median 1 -> 2

Distribution: holdout

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.

lines

passed functions: original vs ours
median 2 -> 7

cognitive complexity

passed functions: original vs ours
median 0 -> 1

Datasets

The original Python sources are the work of the authors of each dataset and are subject to the licenses of the dataset.

datasetsourcelicenses
cruxevalhttps://github.com/facebookresearch/cruxeval/tree/10d71b4ca99f2b6624bef9533ade5a0594ab7716MIT
humaneval_plushttps://github.com/evalplus/humanevalplus_release/tree/68cd26d53a0dec69f85eafe1f82a2a74155a2bd6Apache-2.0, MIT
mbpp_plushttps://github.com/evalplus/mbppplus_release/tree/64fc4195b858a17cdfdb3324f0baf37939144e14Apache-2.0, CC-BY-4.0
thealgorithmshttps://github.com/TheAlgorithms/Python/tree/f8084d92b2df4faecad57e0cd8c5ab2adbbf8b19MIT