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.