Benchmarks¶
The following benchamrks where generated by running uvx tox -c tox_benchmarks.ini.
See test_bench.py
for the actual benchmarking code.
See Benchman for details about the benchmarking tool.
General Benchmarks¶
Client: arm64_16_GB, Darwin_25.5.0
Name |
Variant |
Python |
Minimum time |
maxOPS |
Std Dev (σ) |
|---|---|---|---|---|---|
access node.data |
node._data (attr) |
3.10.15 |
28 ns |
35.710 M |
0 ns |
access node.data |
node._data (attr) |
3.11.10 |
19 ns |
51.471 M |
0 ns |
access node.data |
node._data (attr) |
3.12.0 |
8 ns |
120.551 M |
0 ns |
access node.data |
node._data (attr) |
3.13.0 |
7 ns |
139.725 M |
0 ns |
access node.data |
node._data (attr) |
3.14.5 |
8 ns |
123.016 M |
0 ns |
access node.data |
node._data (attr) |
3.15.0b1 |
8 ns |
119.012 M |
0 ns |
access node.data |
node.data (property) |
3.10.15 |
65 ns |
15.482 M |
0 ns |
access node.data |
node.data (property) |
3.11.10 |
48 ns |
20.997 M |
0 ns |
access node.data |
node.data (property) |
3.12.0 |
47 ns |
21.328 M |
0 ns |
access node.data |
node.data (property) |
3.13.0 |
42 ns |
23.533 M |
0 ns |
access node.data |
node.data (property) |
3.14.5 |
44 ns |
22.524 M |
2 ns |
access node.data |
node.data (property) |
3.15.0b1 |
44 ns |
22.648 M |
0 ns |
iterate |
for _ in tree.iterator(): … |
3.10.15 |
1,891 ns |
0.529 M |
10 ns |
iterate |
for _ in tree.iterator(): … |
3.11.10 |
1,705 ns |
0.586 M |
6 ns |
iterate |
for _ in tree.iterator(): … |
3.12.0 |
1,460 ns |
0.685 M |
9 ns |
iterate |
for _ in tree.iterator(): … |
3.13.0 |
1,341 ns |
0.746 M |
6 ns |
iterate |
for _ in tree.iterator(): … |
3.14.5 |
1,196 ns |
0.836 M |
4 ns |
iterate |
for _ in tree.iterator(): … |
3.15.0b1 |
1,116 ns |
0.896 M |
8 ns |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
3.10.15 |
1,359 ns |
0.736 M |
3 ns |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
3.11.10 |
1,202 ns |
0.832 M |
16 ns |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
3.12.0 |
1,071 ns |
0.933 M |
3 ns |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
3.13.0 |
1,027 ns |
0.974 M |
6 ns |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
3.14.5 |
916 ns |
1.091 M |
4 ns |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
3.15.0b1 |
833 ns |
1.201 M |
3 ns |
iterate |
for _ in tree.iterator(POST_ORDER): … |
3.10.15 |
2,389 ns |
0.419 M |
7 ns |
iterate |
for _ in tree.iterator(POST_ORDER): … |
3.11.10 |
2,150 ns |
0.465 M |
15 ns |
iterate |
for _ in tree.iterator(POST_ORDER): … |
3.12.0 |
1,937 ns |
0.516 M |
4 ns |
iterate |
for _ in tree.iterator(POST_ORDER): … |
3.13.0 |
1,778 ns |
0.562 M |
56 ns |
iterate |
for _ in tree.iterator(POST_ORDER): … |
3.14.5 |
1,657 ns |
0.604 M |
8 ns |
iterate |
for _ in tree.iterator(POST_ORDER): … |
3.15.0b1 |
1,506 ns |
0.664 M |
45 ns |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
3.10.15 |
1,895 ns |
0.528 M |
9 ns |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
3.11.10 |
1,712 ns |
0.584 M |
17 ns |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
3.12.0 |
1,466 ns |
0.682 M |
12 ns |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
3.13.0 |
1,346 ns |
0.743 M |
8 ns |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
3.14.5 |
1,193 ns |
0.838 M |
2 ns |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
3.15.0b1 |
1,116 ns |
0.896 M |
7 ns |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
3.10.15 |
2,019 ns |
0.495 M |
7 ns |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
3.11.10 |
1,501 ns |
0.666 M |
8 ns |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
3.12.0 |
1,577 ns |
0.634 M |
17 ns |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
3.13.0 |
1,407 ns |
0.711 M |
2 ns |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
3.14.5 |
1,387 ns |
0.721 M |
3 ns |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
3.15.0b1 |
1,248 ns |
0.802 M |
9 ns |
iterate |
for _ in tree.iterator(UNORDERED): … |
3.10.15 |
405 ns |
2.469 M |
5 ns |
iterate |
for _ in tree.iterator(UNORDERED): … |
3.11.10 |
327 ns |
3.057 M |
2 ns |
iterate |
for _ in tree.iterator(UNORDERED): … |
3.12.0 |
359 ns |
2.789 M |
2 ns |
iterate |
for _ in tree.iterator(UNORDERED): … |
3.13.0 |
301 ns |
3.318 M |
2 ns |
iterate |
for _ in tree.iterator(UNORDERED): … |
3.14.5 |
319 ns |
3.137 M |
2 ns |
iterate |
for _ in tree.iterator(UNORDERED): … |
3.15.0b1 |
319 ns |
3.132 M |
2 ns |
iterate |
for _ in tree: … |
3.10.15 |
1,911 ns |
0.523 M |
3 ns |
iterate |
for _ in tree: … |
3.11.10 |
1,715 ns |
0.583 M |
14 ns |
iterate |
for _ in tree: … |
3.12.0 |
1,485 ns |
0.673 M |
8 ns |
iterate |
for _ in tree: … |
3.13.0 |
1,346 ns |
0.743 M |
3 ns |
iterate |
for _ in tree: … |
3.14.5 |
1,199 ns |
0.834 M |
13 ns |
iterate |
for _ in tree: … |
3.15.0b1 |
1,129 ns |
0.885 M |
3 ns |
iterate |
tree.visit(lambda node, memo: None) |
3.10.15 |
2,087 ns |
0.479 M |
18 ns |
iterate |
tree.visit(lambda node, memo: None) |
3.11.10 |
1,552 ns |
0.644 M |
28 ns |
iterate |
tree.visit(lambda node, memo: None) |
3.12.0 |
1,228 ns |
0.814 M |
38 ns |
iterate |
tree.visit(lambda node, memo: None) |
3.13.0 |
1,082 ns |
0.924 M |
10 ns |
iterate |
tree.visit(lambda node, memo: None) |
3.14.5 |
1,134 ns |
0.882 M |
5 ns |
iterate |
tree.visit(lambda node, memo: None) |
3.15.0b1 |
1,023 ns |
0.977 M |
5 ns |
search |
by index |
3.10.15 |
362 ns |
2.760 M |
2 ns |
search |
by index |
3.11.10 |
261 ns |
3.838 M |
1 ns |
search |
by index |
3.12.0 |
266 ns |
3.761 M |
2 ns |
search |
by index |
3.13.0 |
254 ns |
3.944 M |
1 ns |
search |
by index |
3.14.5 |
249 ns |
4.023 M |
1 ns |
search |
by index |
3.15.0b1 |
257 ns |
3.896 M |
1 ns |
search |
find() |
3.10.15 |
204 ns |
4.914 M |
1 ns |
search |
find() |
3.11.10 |
134 ns |
7.453 M |
1 ns |
search |
find() |
3.12.0 |
130 ns |
7.710 M |
1 ns |
search |
find() |
3.13.0 |
125 ns |
8.007 M |
0 ns |
search |
find() |
3.14.5 |
128 ns |
7.790 M |
1 ns |
search |
find() |
3.15.0b1 |
131 ns |
7.652 M |
0 ns |
search |
find_all() |
3.10.15 |
191 ns |
5.239 M |
0 ns |
search |
find_all() |
3.11.10 |
129 ns |
7.781 M |
1 ns |
search |
find_all() |
3.12.0 |
123 ns |
8.117 M |
1 ns |
search |
find_all() |
3.13.0 |
118 ns |
8.450 M |
0 ns |
search |
find_all() |
3.14.5 |
126 ns |
7.956 M |
0 ns |
search |
find_all() |
3.15.0b1 |
129 ns |
7.743 M |
0 ns |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
3.10.15 |
175 ms |
5.708 |
0 ms |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
3.11.10 |
158 ms |
6.310 |
0 ms |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
3.12.0 |
175 ms |
5.706 |
0 ms |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
3.13.0 |
143 ms |
6.998 |
0 ms |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
3.14.5 |
127 ms |
7.865 |
0 ms |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
3.15.0b1 |
127 ms |
7.851 |
0 ms |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
3.10.15 |
147 ms |
6.812 |
0 ms |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
3.11.10 |
127 ms |
7.895 |
0 ms |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
3.12.0 |
150 ms |
6.665 |
0 ms |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
3.13.0 |
118 ms |
8.482 |
0 ms |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
3.14.5 |
117 ms |
8.568 |
0 ms |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
3.15.0b1 |
117 ms |
8.563 |
0 ms |
serialize_load |
ZIP_LZMA (‘.lzma’) |
3.10.15 |
151 ms |
6.632 |
0 ms |
serialize_load |
ZIP_LZMA (‘.lzma’) |
3.11.10 |
134 ms |
7.440 |
0 ms |
serialize_load |
ZIP_LZMA (‘.lzma’) |
3.12.0 |
153 ms |
6.551 |
0 ms |
serialize_load |
ZIP_LZMA (‘.lzma’) |
3.13.0 |
122 ms |
8.188 |
0 ms |
serialize_load |
ZIP_LZMA (‘.lzma’) |
3.14.5 |
119 ms |
8.424 |
0 ms |
serialize_load |
ZIP_LZMA (‘.lzma’) |
3.15.0b1 |
118 ms |
8.453 |
0 ms |
serialize_load |
uncompressed (‘.json’) |
3.10.15 |
150 ms |
6.679 |
0 ms |
serialize_load |
uncompressed (‘.json’) |
3.11.10 |
124 ms |
8.090 |
0 ms |
serialize_load |
uncompressed (‘.json’) |
3.12.0 |
148 ms |
6.769 |
0 ms |
serialize_load |
uncompressed (‘.json’) |
3.13.0 |
111 ms |
9.043 |
0 ms |
serialize_load |
uncompressed (‘.json’) |
3.14.5 |
124 ms |
8.057 |
0 ms |
serialize_load |
uncompressed (‘.json’) |
3.15.0b1 |
114 ms |
8.744 |
0 ms |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
3.10.15 |
369 ms |
2.712 |
0 ms |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
3.11.10 |
368 ms |
2.717 |
0 ms |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
3.12.0 |
263 ms |
3.796 |
0 ms |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
3.13.0 |
324 ms |
3.086 |
0 ms |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
3.14.5 |
230 ms |
4.355 |
0 ms |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
3.15.0b1 |
236 ms |
4.246 |
0 ms |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.10.15 |
259 ms |
3.864 |
0 ms |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.11.10 |
244 ms |
4.093 |
0 ms |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.12.0 |
238 ms |
4.195 |
0 ms |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.13.0 |
210 ms |
4.766 |
0 ms |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.14.5 |
209 ms |
4.781 |
0 ms |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.15.0b1 |
210 ms |
4.761 |
0 ms |
serialize_save |
ZIP_LZMA (‘.lzma’) |
3.10.15 |
1,268 ms |
0.789 |
0 ms |
serialize_save |
ZIP_LZMA (‘.lzma’) |
3.11.10 |
1,301 ms |
0.768 |
0 ms |
serialize_save |
ZIP_LZMA (‘.lzma’) |
3.12.0 |
1,115 ms |
0.897 |
0 ms |
serialize_save |
ZIP_LZMA (‘.lzma’) |
3.13.0 |
1,217 ms |
0.822 |
0 ms |
serialize_save |
ZIP_LZMA (‘.lzma’) |
3.14.5 |
484 ms |
2.064 |
0 ms |
serialize_save |
ZIP_LZMA (‘.lzma’) |
3.15.0b1 |
457 ms |
2.186 |
0 ms |
serialize_save |
uncompressed (‘.json’) |
3.10.15 |
232 ms |
4.312 |
0 ms |
serialize_save |
uncompressed (‘.json’) |
3.11.10 |
204 ms |
4.905 |
0 ms |
serialize_save |
uncompressed (‘.json’) |
3.12.0 |
197 ms |
5.067 |
0 ms |
serialize_save |
uncompressed (‘.json’) |
3.13.0 |
170 ms |
5.888 |
0 ms |
serialize_save |
uncompressed (‘.json’) |
3.14.5 |
182 ms |
5.502 |
0 ms |
serialize_save |
uncompressed (‘.json’) |
3.15.0b1 |
176 ms |
5.667 |
0 ms |
Benchmark date: 2026-06-28T12:38:56.859768+00:00 Fixed dataset values: client=‘61bdee7c56e0e5f7’, debug_mode=False, hardware=‘arm64_16_GB’, project=‘nutree’, system=‘Darwin_25.5.0’, tag=‘latest’, version=‘0.0.0’. Variant dataset values: name, python, sample_size, variant. Showing 126 rows. Sort order: name, variant, python.
Ops by python¶
Client: arm64_16_GB, Darwin_25.5.0
Name |
Variant |
3.10.15 |
3.11.10 |
3.12.0 |
3.13.0 |
3.14.5 |
3.15.0b1 |
|---|---|---|---|---|---|---|---|
access node.data |
node.data (property) |
15.482 M |
20.997 M |
21.328 M |
23.533 M |
22.524 M |
22.648 M |
access node.data |
node._data (attr) |
35.710 M |
51.471 M |
120.551 M |
139.725 M |
123.016 M |
119.012 M |
iterate |
tree.visit(lambda node, memo: None) |
0.479 M |
0.644 M |
0.814 M |
0.924 M |
0.882 M |
0.977 M |
iterate |
for _ in tree.iterator(): … |
0.529 M |
0.586 M |
0.685 M |
0.746 M |
0.836 M |
0.896 M |
iterate |
for _ in tree.iterator(RANDOM_ORDER): … |
0.495 M |
0.666 M |
0.634 M |
0.711 M |
0.721 M |
0.802 M |
iterate |
for _ in tree.iterator(UNORDERED): … |
2.469 M |
3.057 M |
2.789 M |
3.318 M |
3.137 M |
3.132 M |
iterate |
for _ in tree.iterator(LEVEL_ORDER): … |
0.736 M |
0.832 M |
0.933 M |
0.974 M |
1.091 M |
1.201 M |
iterate |
for _ in tree: … |
0.523 M |
0.583 M |
0.673 M |
0.743 M |
0.834 M |
0.885 M |
iterate |
for _ in tree.iterator(PRE_ORDER): … |
0.528 M |
0.584 M |
0.682 M |
0.743 M |
0.838 M |
0.896 M |
iterate |
for _ in tree.iterator(POST_ORDER): … |
0.419 M |
0.465 M |
0.516 M |
0.562 M |
0.604 M |
0.664 M |
search |
find() |
4.914 M |
7.453 M |
7.710 M |
8.007 M |
7.790 M |
7.652 M |
search |
by index |
2.760 M |
3.838 M |
3.761 M |
3.944 M |
4.023 M |
3.896 M |
search |
find_all() |
5.239 M |
7.781 M |
8.117 M |
8.450 M |
7.956 M |
7.743 M |
serialize_load |
ZIP_LZMA (‘.lzma’) |
6.632 |
7.440 |
6.551 |
8.188 |
8.424 |
8.453 |
serialize_load |
ZIP_BZIP2 (‘.bz2’) |
5.708 |
6.310 |
5.706 |
6.998 |
7.865 |
7.851 |
serialize_load |
ZIP_DEFLATED (‘.zip’) |
6.812 |
7.895 |
6.665 |
8.482 |
8.568 |
8.563 |
serialize_load |
uncompressed (‘.json’) |
6.679 |
8.090 |
6.769 |
9.043 |
8.057 |
8.744 |
serialize_save |
ZIP_BZIP2 (‘.bz2’) |
2.712 |
2.717 |
3.796 |
3.086 |
4.355 |
4.246 |
serialize_save |
ZIP_DEFLATED (‘.zip’) |
3.864 |
4.093 |
4.195 |
4.766 |
4.781 |
4.761 |
serialize_save |
ZIP_LZMA (‘.lzma’) |
0.789 |
0.768 |
0.897 |
0.822 |
2.064 |
2.186 |
serialize_save |
uncompressed (‘.json’) |
4.312 |
4.905 |
5.067 |
5.888 |
5.502 |
5.667 |
Benchmark date: 2026-06-28T12:38:56.859768+00:00 Fixed dataset values: client=‘61bdee7c56e0e5f7’, debug_mode=False, hardware=‘arm64_16_GB’, project=‘nutree’, system=‘Darwin_25.5.0’, tag=‘latest’, version=‘0.0.0’. Variant dataset values: name, python, sample_size, variant. : Showing 21 of 126 rows. Sort order: name.