Rerun on develop 7fc8312c64 with the open pull requests #6029, #6031,
#6033 and #6039 merged, measured on November 7: the suite (median of 12
runs, now 3.3x), the timeline (358 commits, #6031 shown as a pending
step on the candidate, #6028 labeled, a tick for November), the compile
times, the stream gap, the allocator check and the comparison on the
Mac and on x86-64, including the held-out files.
The comparison now leaves out the "copy untimed" variants, as the post
describes, and the held-out chart no longer counts json::accept() as
another library. Appendix D, the Intel column of Appendix B and the
GCC 16/Clang 23 check on the Mac are still from November 3.
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
25 files changed
+15432
-15346
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -1,183 +1,183 @@
|
||||
benchmark,unit,3.12.0,3.13.0,speedup
|
||||
Accept/canada,ns,1.29488e+07,2.3494e+06,5.512
|
||||
Accept/citm_catalog,ns,6.53091e+06,923408,7.073
|
||||
Accept/floats,ns,1.15702e+08,2.26771e+07,5.102
|
||||
Accept/jeopardy,ns,2.20758e+08,5.92935e+07,3.723
|
||||
Accept/signed_ints,ns,1.17358e+08,2.82947e+07,4.148
|
||||
Accept/small_signed_ints,ns,5.75113e+07,1.80352e+07,3.189
|
||||
Accept/twitter,ns,2.51345e+06,483792,5.195
|
||||
Accept/unsigned_ints,ns,1.16297e+08,2.97181e+07,3.913
|
||||
BinaryToCbor/1024,ns,298.444,107.095,2.787
|
||||
BinaryToCbor/128,ns,248.661,116.711,2.131
|
||||
BinaryToCbor/16,ns,244.687,49.6325,4.930
|
||||
BinaryToCbor/16384,ns,952.115,413.62,2.302
|
||||
BinaryToCbor/2048,ns,328.419,125.183,2.624
|
||||
BinaryToCbor/256,ns,264.678,90.8937,2.912
|
||||
BinaryToCbor/32,ns,251.632,50.4059,4.992
|
||||
BinaryToCbor/32768,ns,1541.05,802.721,1.920
|
||||
BinaryToCbor/4096,ns,406.957,177.412,2.294
|
||||
BinaryToCbor/512,ns,289.876,102.063,2.840
|
||||
BinaryToCbor/64,ns,254.928,84.6434,3.012
|
||||
BinaryToCbor/8,ns,247.618,49.3761,5.015
|
||||
BinaryToCbor/8192,ns,514.281,256.456,2.005
|
||||
Copy/canada,ns,3.78116e+06,2.92734e+06,1.292
|
||||
Copy/citm_catalog,ns,1.7026e+06,1.51108e+06,1.127
|
||||
Copy/twitter,ns,840201,767400,1.095
|
||||
CopyAssign/canada,ns,3.86416e+06,2.94449e+06,1.312
|
||||
CopyAssign/citm_catalog,ns,1.76529e+06,1.58608e+06,1.113
|
||||
CopyAssign/twitter,ns,884985,790724,1.119
|
||||
CopyOnly/canada,ns,1.60229e+06,1.57507e+06,1.017
|
||||
CopyOnly/citm_catalog,ns,786244,817481,0.962
|
||||
CopyOnly/twitter,ns,423631,420649,1.007
|
||||
CopyRing/canada,ns,3.86433e+06,2.99657e+06,1.290
|
||||
CopyRing/citm_catalog,ns,1.84434e+06,1.60579e+06,1.149
|
||||
CopyRing/twitter,ns,951510,818035,1.163
|
||||
DestroyOnly/canada,ns,2.22138e+06,1.40157e+06,1.585
|
||||
DestroyOnly/citm_catalog,ns,926244,711471,1.302
|
||||
DestroyOnly/twitter,ns,416055,336082,1.238
|
||||
Diff/canada,ns,3.98055e+07,3.80466e+06,10.462
|
||||
Diff/citm_catalog,ns,7.1859e+06,1.12351e+06,6.396
|
||||
Diff/twitter,ns,5.11261e+06,661062,7.734
|
||||
Dump/canada / -,ns,6.95189e+06,2.33647e+06,2.975
|
||||
Dump/canada / 4,ns,9.09882e+06,3.10291e+06,2.932
|
||||
Dump/citm_catalog / -,ns,1.42117e+06,295678,4.806
|
||||
Dump/citm_catalog / 4,ns,1.98589e+06,422600,4.699
|
||||
Dump/floats / -,ns,6.4332e+07,2.37747e+07,2.706
|
||||
Dump/floats / 4,ns,7.25695e+07,2.46207e+07,2.947
|
||||
Dump/jeopardy / -,ns,2.06771e+08,3.17494e+07,6.513
|
||||
Dump/jeopardy / 4,ns,2.27967e+08,3.53626e+07,6.447
|
||||
Dump/signed_ints / -,ns,2.40551e+07,1.0736e+07,2.241
|
||||
Dump/signed_ints / 4,ns,3.25192e+07,1.1333e+07,2.869
|
||||
Dump/small_signed_ints / -,ns,1.81398e+07,8.12457e+06,2.233
|
||||
Dump/small_signed_ints / 4,ns,2.55296e+07,8.80796e+06,2.898
|
||||
Dump/twitter / -,ns,1.43584e+06,214252,6.702
|
||||
Dump/twitter / 4,ns,1.63183e+06,253042,6.449
|
||||
Dump/unsigned_ints / -,ns,2.39512e+07,8.11916e+06,2.950
|
||||
Dump/unsigned_ints / 4,ns,3.22761e+07,8.58925e+06,3.758
|
||||
Equal/canada,ns,473767,349284,1.356
|
||||
Equal/citm_catalog,ns,279548,263329,1.062
|
||||
Equal/twitter,ns,145555,131450,1.107
|
||||
Flatten/canada,ns,2.94475e+07,1.11184e+07,2.649
|
||||
Flatten/citm_catalog,ns,6.7155e+06,3.07325e+06,2.185
|
||||
Flatten/twitter,ns,3.66077e+06,2.10599e+06,1.738
|
||||
FlattenOrdered/citm_catalog,ns,2.62026e+08,1.42645e+06,183.691
|
||||
FlattenOrdered/twitter,ns,5.1275e+07,890275,57.595
|
||||
FromBinaryBuffer/bjdata / canada,ns,8.81972e+06,4.16727e+06,2.116
|
||||
FromBinaryBuffer/bjdata / twitter,ns,3.32045e+06,976266,3.401
|
||||
FromBinaryBuffer/bjdata_optimized / canada,ns,9.2386e+06,2.47996e+06,3.725
|
||||
FromBinaryBuffer/bjdata_optimized / twitter,ns,3.30526e+06,985625,3.353
|
||||
FromBinaryBuffer/bson / canada,ns,1.00372e+07,4.31554e+06,2.326
|
||||
FromBinaryBuffer/bson / citm_catalog,ns,4.07611e+06,1.60647e+06,2.537
|
||||
FromBinaryBuffer/bson / twitter,ns,3.25635e+06,936933,3.476
|
||||
FromBinaryBuffer/cbor / canada,ns,8.89562e+06,2.11517e+06,4.206
|
||||
FromBinaryBuffer/cbor / citm_catalog,ns,3.94234e+06,1.45242e+06,2.714
|
||||
FromBinaryBuffer/cbor / floats,ns,3.0473e+07,5.47969e+06,5.561
|
||||
FromBinaryBuffer/cbor / jeopardy,ns,3.73185e+08,1.14934e+08,3.247
|
||||
FromBinaryBuffer/cbor / signed_ints,ns,3.66673e+07,9.88892e+06,3.708
|
||||
FromBinaryBuffer/cbor / twitter,ns,3.23196e+06,953415,3.390
|
||||
FromBinaryBuffer/msgpack / canada,ns,8.85983e+06,2.12215e+06,4.175
|
||||
FromBinaryBuffer/msgpack / citm_catalog,ns,3.84901e+06,1.4503e+06,2.654
|
||||
FromBinaryBuffer/msgpack / jeopardy,ns,3.73143e+08,1.11034e+08,3.361
|
||||
FromBinaryBuffer/msgpack / twitter,ns,3.2397e+06,954811,3.393
|
||||
FromBinaryBuffer/ubjson / canada,ns,8.84059e+06,4.20402e+06,2.103
|
||||
FromBinaryBuffer/ubjson / citm_catalog,ns,4.0708e+06,1.78566e+06,2.280
|
||||
FromBinaryBuffer/ubjson / jeopardy,ns,3.79093e+08,1.17024e+08,3.239
|
||||
FromBinaryBuffer/ubjson / twitter,ns,3.29948e+06,981057,3.363
|
||||
FromBinaryBuffer/ubjson_optimized / canada,ns,8.88909e+06,2.42788e+06,3.661
|
||||
FromBinaryBuffer/ubjson_optimized / twitter,ns,3.29784e+06,974810,3.383
|
||||
FromBinaryFile/bjdata / twitter,ns,1.09208e+07,1.94678e+06,5.610
|
||||
FromBinaryFile/bson / twitter,ns,1.07209e+07,1.84971e+06,5.796
|
||||
FromBinaryFile/cbor / canada,ns,1.49218e+07,4.48832e+06,3.325
|
||||
FromBinaryFile/cbor / twitter,ns,1.03718e+07,1.57388e+06,6.590
|
||||
FromBinaryFile/ubjson / canada,ns,1.43414e+07,6.42996e+06,2.230
|
||||
FromBinaryFile/ubjson / twitter,ns,1.09266e+07,1.97275e+06,5.539
|
||||
FromBinaryShape/containers / bjdata,ns,1.46977e+07,7.23447e+06,2.032
|
||||
FromBinaryShape/containers / bson,ns,1.75596e+07,7.88867e+06,2.226
|
||||
FromBinaryShape/containers / cbor,ns,1.46488e+07,4.15792e+06,3.523
|
||||
FromBinaryShape/containers / msgpack,ns,1.45853e+07,3.89266e+06,3.747
|
||||
FromBinaryShape/containers / ubjson,ns,1.49773e+07,7.23987e+06,2.069
|
||||
FromBinaryShape/containers / ubjson_optimized,ns,1.54989e+07,4.55976e+06,3.399
|
||||
FromBinaryShape/nested / bjdata,ns,96825.9,38335.1,2.526
|
||||
FromBinaryShape/nested / bson,ns,101356,42620.2,2.378
|
||||
FromBinaryShape/nested / cbor,ns,94929.8,35845.6,2.648
|
||||
FromBinaryShape/nested / msgpack,ns,92610.2,35078.3,2.640
|
||||
FromBinaryShape/nested / ubjson,ns,96090.6,38285.6,2.510
|
||||
FromBinaryShape/scalars / bjdata,ns,2.52616e+07,1.15856e+07,2.180
|
||||
FromBinaryShape/scalars / cbor,ns,2.62118e+07,5.88743e+06,4.452
|
||||
FromBinaryShape/scalars / msgpack,ns,2.50706e+07,5.65159e+06,4.436
|
||||
FromBinaryShape/scalars / ubjson,ns,2.53402e+07,1.16191e+07,2.181
|
||||
FromCborChunkedString/10000 chunks,ns,91845.9,82875.5,1.108
|
||||
FromMsgpack/canada,ns,1.48853e+07,4.56225e+06,3.263
|
||||
FromMsgpack/citm_catalog,ns,9.3559e+06,2.26246e+06,4.135
|
||||
FromMsgpack/floats,ns,6.12575e+07,2.86709e+07,2.137
|
||||
FromMsgpack/jeopardy,ns,1.16767e+09,1.90153e+08,6.141
|
||||
FromMsgpack/signed_ints,ns,6.38812e+07,3.28867e+07,1.942
|
||||
FromMsgpack/small_signed_ints,ns,6.44688e+07,3.44227e+07,1.873
|
||||
FromMsgpack/twitter,ns,1.02787e+07,1.48541e+06,6.920
|
||||
FromMsgpack/unsigned_ints,ns,5.7784e+07,2.83078e+07,2.041
|
||||
"GetArray<std::array<int, 1000>>",ns,2274.63,654.431,3.476
|
||||
GetArray<std::deque<int>>,ns,8288.3,1175.75,7.049
|
||||
GetArray<std::set<int>>,ns,60017.4,42504.9,1.412
|
||||
GetArray<std::vector<int>>,ns,6785.73,681.915,9.951
|
||||
GetMap/citm_catalog,ns,3.60313e+06,2.48546e+06,1.450
|
||||
GetVectorDouble/floats,ns,6.83612e+06,656162,10.418
|
||||
GetVectorInt/signed_ints,ns,8.22365e+06,3.46495e+06,2.373
|
||||
Iterate/canada,ns,897083,328035,2.735
|
||||
Iterate/citm_catalog,ns,305421,171245,1.784
|
||||
Iterate/twitter,ns,89996.6,61975.8,1.452
|
||||
JsonPointerAt/citm_catalog,ns,1.89898e+06,1.17751e+06,1.613
|
||||
JsonPointerAt/twitter,ns,817946,611519,1.338
|
||||
JsonPointerContains/citm_catalog,ns,2.8177e+06,1.26796e+06,2.222
|
||||
JsonPointerContains/twitter,ns,1.33508e+06,628630,2.124
|
||||
JsonPointerParse/citm_catalog,ns,5.81355e+06,2.24831e+06,2.586
|
||||
JsonPointerParse/twitter,ns,2.47971e+06,1.02159e+06,2.427
|
||||
JsonPointerToString/citm_catalog,ns,6.7858e+06,1.93924e+06,3.499
|
||||
JsonPointerToString/twitter,ns,2.23096e+06,834416,2.674
|
||||
ParseFILE/canada,ns,5.41907e+07,1.46942e+07,3.688
|
||||
ParseFILE/citm_catalog,ns,3.59542e+07,7.58092e+06,4.743
|
||||
ParseFILE/twitter,ns,1.4087e+07,3.44991e+06,4.083
|
||||
ParseFile/canada,ns,1.82792e+07,6.46954e+06,2.825
|
||||
ParseFile/citm_catalog,ns,8.12979e+06,2.52336e+06,3.222
|
||||
ParseFile/floats,ns,1.31229e+08,4.81407e+07,2.726
|
||||
ParseFile/jeopardy,ns,3.38017e+08,1.62098e+08,2.085
|
||||
ParseFile/signed_ints,ns,1.28749e+08,4.62304e+07,2.785
|
||||
ParseFile/small_signed_ints,ns,6.47398e+07,3.34103e+07,1.938
|
||||
ParseFile/twitter,ns,3.43041e+06,1.37495e+06,2.495
|
||||
ParseFile/unsigned_ints,ns,1.24001e+08,4.74365e+07,2.614
|
||||
ParseIndented/canada / 4,ns,3.4977e+07,5.37149e+06,6.512
|
||||
ParseIndented/citm_catalog / 4,ns,7.52423e+06,1.81376e+06,4.148
|
||||
ParseIndented/jeopardy / 4,ns,3.45046e+08,1.33383e+08,2.587
|
||||
ParseIndented/twitter / 4,ns,3.72283e+06,1.12645e+06,3.305
|
||||
ParseStreamValues/ndjson,ns,7.15876e+06,3.76965e+06,1.899
|
||||
ParseStreamValues/numbers,ns,1.92619e+06,383138,5.027
|
||||
ParseString/canada,ns,1.55213e+07,4.62776e+06,3.354
|
||||
ParseString/citm_catalog,ns,7.56417e+06,1.77967e+06,4.250
|
||||
ParseString/floats,ns,1.21779e+08,2.83035e+07,4.303
|
||||
ParseString/jeopardy,ns,3.16817e+08,1.30897e+08,2.420
|
||||
ParseString/signed_ints,ns,1.22931e+08,3.19852e+07,3.843
|
||||
ParseString/small_signed_ints,ns,6.2685e+07,2.49764e+07,2.510
|
||||
ParseString/twitter,ns,3.2961e+06,1.04867e+06,3.143
|
||||
ParseString/unsigned_ints,ns,1.21229e+08,3.29241e+07,3.682
|
||||
ParseStringOrdered/canada,ns,1.5388e+07,4.5275e+06,3.399
|
||||
ParseStringOrdered/citm_catalog,ns,1.15204e+07,1.68115e+06,6.853
|
||||
ParseStringOrdered/jeopardy,ns,3.73533e+08,1.13397e+08,3.294
|
||||
ParseStringOrdered/twitter,ns,4.5979e+06,948606,4.847
|
||||
Patch/canada,ns,1.03684e+07,3.47719e+06,2.982
|
||||
Patch/citm_catalog,ns,2.74522e+06,1.74191e+06,1.576
|
||||
Patch/twitter,ns,1.57928e+06,888657,1.777
|
||||
SaxParse/canada,ns,1.31023e+07,3.26697e+06,4.011
|
||||
SaxParse/citm_catalog,ns,6.54642e+06,966806,6.771
|
||||
SaxParse/twitter,ns,2.53102e+06,483052,5.240
|
||||
ToCbor/canada,ns,1.41339e+06,556912,2.538
|
||||
ToCbor/citm_catalog,ns,1.04743e+06,259178,4.041
|
||||
ToCbor/floats,ns,9.04677e+06,1.90094e+06,4.759
|
||||
ToCbor/jeopardy,ns,7.39339e+07,2.20678e+07,3.350
|
||||
ToCbor/signed_ints,ns,1.15333e+07,2.827e+06,4.080
|
||||
ToCbor/small_signed_ints,ns,1.0394e+07,2.47974e+06,4.192
|
||||
ToCbor/twitter,ns,658566,143397,4.593
|
||||
ToCbor/unsigned_ints,ns,8.17966e+06,2.81588e+06,2.905
|
||||
ToJsonStrings/copy,ns,6.12e+06,5.65303e+06,1.083
|
||||
ToJsonStrings/move,ns,6.13061e+06,3.13303e+06,1.957
|
||||
Unflatten/canada,ns,4.25276e+07,1.10995e+07,3.831
|
||||
Unflatten/citm_catalog,ns,1.01866e+07,3.62185e+06,2.813
|
||||
Unflatten/twitter,ns,4.74536e+06,2.21103e+06,2.146
|
||||
Accept/canada,ns,1.27789e+07,1.34304e+06,9.515
|
||||
Accept/citm_catalog,ns,6.47666e+06,474064,13.662
|
||||
Accept/floats,ns,1.14227e+08,1.72173e+07,6.634
|
||||
Accept/jeopardy,ns,2.18081e+08,2.79002e+07,7.816
|
||||
Accept/signed_ints,ns,1.15981e+08,2.33778e+07,4.961
|
||||
Accept/small_signed_ints,ns,5.64996e+07,1.31818e+07,4.286
|
||||
Accept/twitter,ns,2.48725e+06,234277,10.617
|
||||
Accept/unsigned_ints,ns,1.14729e+08,2.28147e+07,5.029
|
||||
BinaryToCbor/1024,ns,315.368,108.041,2.919
|
||||
BinaryToCbor/128,ns,266.074,114.105,2.332
|
||||
BinaryToCbor/16,ns,246.212,49.912,4.933
|
||||
BinaryToCbor/16384,ns,950.054,418.045,2.273
|
||||
BinaryToCbor/2048,ns,340.213,126.796,2.683
|
||||
BinaryToCbor/256,ns,279.79,91.7512,3.049
|
||||
BinaryToCbor/32,ns,262.471,50.3433,5.214
|
||||
BinaryToCbor/32768,ns,1578.4,837.8,1.884
|
||||
BinaryToCbor/4096,ns,431.963,174.276,2.479
|
||||
BinaryToCbor/512,ns,296.768,102.073,2.907
|
||||
BinaryToCbor/64,ns,259.159,84.2641,3.076
|
||||
BinaryToCbor/8,ns,250.574,49.9122,5.020
|
||||
BinaryToCbor/8192,ns,527.418,253.616,2.080
|
||||
Copy/canada,ns,3.68841e+06,2.9017e+06,1.271
|
||||
Copy/citm_catalog,ns,1.64706e+06,1.48507e+06,1.109
|
||||
Copy/twitter,ns,810558,728698,1.112
|
||||
CopyAssign/canada,ns,3.73912e+06,2.94393e+06,1.270
|
||||
CopyAssign/citm_catalog,ns,1.6545e+06,1.53713e+06,1.076
|
||||
CopyAssign/twitter,ns,817997,752415,1.087
|
||||
CopyOnly/canada,ns,1.53602e+06,1.52075e+06,1.010
|
||||
CopyOnly/citm_catalog,ns,754817,794741,0.950
|
||||
CopyOnly/twitter,ns,406966,410330,0.992
|
||||
CopyRing/canada,ns,3.74734e+06,2.92592e+06,1.281
|
||||
CopyRing/citm_catalog,ns,1.7477e+06,1.54757e+06,1.129
|
||||
CopyRing/twitter,ns,876191,784261,1.117
|
||||
DestroyOnly/canada,ns,2.16216e+06,1.38217e+06,1.564
|
||||
DestroyOnly/citm_catalog,ns,895535,681877,1.313
|
||||
DestroyOnly/twitter,ns,406450,326620,1.244
|
||||
Diff/canada,ns,3.91782e+07,3.75209e+06,10.442
|
||||
Diff/citm_catalog,ns,6.91552e+06,1.09211e+06,6.332
|
||||
Diff/twitter,ns,4.92965e+06,639734,7.706
|
||||
Dump/canada / -,ns,6.70617e+06,2.31399e+06,2.898
|
||||
Dump/canada / 4,ns,8.81664e+06,3.03083e+06,2.909
|
||||
Dump/citm_catalog / -,ns,1.39132e+06,295525,4.708
|
||||
Dump/citm_catalog / 4,ns,1.94729e+06,421536,4.620
|
||||
Dump/floats / -,ns,6.35321e+07,2.37757e+07,2.672
|
||||
Dump/floats / 4,ns,7.19879e+07,2.4663e+07,2.919
|
||||
Dump/jeopardy / -,ns,2.0176e+08,3.0624e+07,6.588
|
||||
Dump/jeopardy / 4,ns,2.20493e+08,3.43504e+07,6.419
|
||||
Dump/signed_ints / -,ns,2.36853e+07,1.07405e+07,2.205
|
||||
Dump/signed_ints / 4,ns,3.2029e+07,1.13731e+07,2.816
|
||||
Dump/small_signed_ints / -,ns,1.78623e+07,7.93339e+06,2.252
|
||||
Dump/small_signed_ints / 4,ns,2.50508e+07,8.80939e+06,2.844
|
||||
Dump/twitter / -,ns,1.40813e+06,213513,6.595
|
||||
Dump/twitter / 4,ns,1.59095e+06,249353,6.380
|
||||
Dump/unsigned_ints / -,ns,2.35653e+07,8.07378e+06,2.919
|
||||
Dump/unsigned_ints / 4,ns,3.17269e+07,8.50708e+06,3.729
|
||||
Equal/canada,ns,463162,336269,1.377
|
||||
Equal/citm_catalog,ns,264124,260967,1.012
|
||||
Equal/twitter,ns,138843,128906,1.077
|
||||
Flatten/canada,ns,2.86941e+07,1.1214e+07,2.559
|
||||
Flatten/citm_catalog,ns,6.4406e+06,3.00538e+06,2.143
|
||||
Flatten/twitter,ns,3.53051e+06,2.05449e+06,1.718
|
||||
FlattenOrdered/citm_catalog,ns,2.56371e+08,1.40896e+06,181.958
|
||||
FlattenOrdered/twitter,ns,5.00313e+07,863594,57.934
|
||||
FromBinaryBuffer/bjdata / canada,ns,8.15141e+06,4.17154e+06,1.954
|
||||
FromBinaryBuffer/bjdata / twitter,ns,3.18297e+06,893076,3.564
|
||||
FromBinaryBuffer/bjdata_optimized / canada,ns,8.73882e+06,2.42167e+06,3.609
|
||||
FromBinaryBuffer/bjdata_optimized / twitter,ns,3.15905e+06,884856,3.570
|
||||
FromBinaryBuffer/bson / canada,ns,9.33283e+06,4.27358e+06,2.184
|
||||
FromBinaryBuffer/bson / citm_catalog,ns,3.91854e+06,1.61073e+06,2.433
|
||||
FromBinaryBuffer/bson / twitter,ns,3.176e+06,910290,3.489
|
||||
FromBinaryBuffer/cbor / canada,ns,8.39002e+06,2.08256e+06,4.029
|
||||
FromBinaryBuffer/cbor / citm_catalog,ns,3.71495e+06,1.31999e+06,2.814
|
||||
FromBinaryBuffer/cbor / floats,ns,2.91606e+07,5.48446e+06,5.317
|
||||
FromBinaryBuffer/cbor / jeopardy,ns,3.52964e+08,1.00739e+08,3.504
|
||||
FromBinaryBuffer/cbor / signed_ints,ns,3.59874e+07,9.77712e+06,3.681
|
||||
FromBinaryBuffer/cbor / twitter,ns,3.08997e+06,878827,3.516
|
||||
FromBinaryBuffer/msgpack / canada,ns,8.25869e+06,2.09779e+06,3.937
|
||||
FromBinaryBuffer/msgpack / citm_catalog,ns,3.71825e+06,1.28675e+06,2.890
|
||||
FromBinaryBuffer/msgpack / jeopardy,ns,3.56624e+08,9.69017e+07,3.680
|
||||
FromBinaryBuffer/msgpack / twitter,ns,3.06392e+06,850067,3.604
|
||||
FromBinaryBuffer/ubjson / canada,ns,8.12649e+06,4.14411e+06,1.961
|
||||
FromBinaryBuffer/ubjson / citm_catalog,ns,3.82184e+06,1.65659e+06,2.307
|
||||
FromBinaryBuffer/ubjson / jeopardy,ns,3.65507e+08,1.01303e+08,3.608
|
||||
FromBinaryBuffer/ubjson / twitter,ns,3.15221e+06,895746,3.519
|
||||
FromBinaryBuffer/ubjson_optimized / canada,ns,8.5126e+06,2.38858e+06,3.564
|
||||
FromBinaryBuffer/ubjson_optimized / twitter,ns,3.12199e+06,882166,3.539
|
||||
FromBinaryFile/bjdata / twitter,ns,1.04222e+07,1.45214e+06,7.177
|
||||
FromBinaryFile/bson / twitter,ns,1.02874e+07,1.23514e+06,8.329
|
||||
FromBinaryFile/cbor / canada,ns,1.43434e+07,2.4071e+06,5.959
|
||||
FromBinaryFile/cbor / twitter,ns,9.92359e+06,1.075e+06,9.231
|
||||
FromBinaryFile/ubjson / canada,ns,1.35516e+07,6.2336e+06,2.174
|
||||
FromBinaryFile/ubjson / twitter,ns,1.05159e+07,1.46077e+06,7.199
|
||||
FromBinaryShape/containers / bjdata,ns,1.43175e+07,7.24204e+06,1.977
|
||||
FromBinaryShape/containers / bson,ns,1.74215e+07,7.97531e+06,2.184
|
||||
FromBinaryShape/containers / cbor,ns,1.3898e+07,3.93021e+06,3.536
|
||||
FromBinaryShape/containers / msgpack,ns,1.378e+07,3.88449e+06,3.547
|
||||
FromBinaryShape/containers / ubjson,ns,1.44223e+07,7.2737e+06,1.983
|
||||
FromBinaryShape/containers / ubjson_optimized,ns,1.49736e+07,4.48674e+06,3.337
|
||||
FromBinaryShape/nested / bjdata,ns,96363.9,38197.9,2.523
|
||||
FromBinaryShape/nested / bson,ns,102515,42496.1,2.412
|
||||
FromBinaryShape/nested / cbor,ns,93842.1,35385.5,2.652
|
||||
FromBinaryShape/nested / msgpack,ns,92033,34888.5,2.638
|
||||
FromBinaryShape/nested / ubjson,ns,96455.9,37922.6,2.543
|
||||
FromBinaryShape/scalars / bjdata,ns,2.48048e+07,1.1476e+07,2.161
|
||||
FromBinaryShape/scalars / cbor,ns,2.56641e+07,5.68711e+06,4.513
|
||||
FromBinaryShape/scalars / msgpack,ns,2.44254e+07,5.56716e+06,4.387
|
||||
FromBinaryShape/scalars / ubjson,ns,2.49328e+07,1.15997e+07,2.149
|
||||
FromCborChunkedString/10000 chunks,ns,90902.3,61512.6,1.478
|
||||
FromMsgpack/canada,ns,1.43596e+07,2.40425e+06,5.973
|
||||
FromMsgpack/citm_catalog,ns,9.03526e+06,1.66705e+06,5.420
|
||||
FromMsgpack/floats,ns,5.97879e+07,2.82314e+07,2.118
|
||||
FromMsgpack/jeopardy,ns,1.14023e+09,1.1207e+08,10.174
|
||||
FromMsgpack/signed_ints,ns,6.30943e+07,3.27435e+07,1.927
|
||||
FromMsgpack/small_signed_ints,ns,6.34225e+07,3.52538e+07,1.799
|
||||
FromMsgpack/twitter,ns,9.99383e+06,1.01241e+06,9.871
|
||||
FromMsgpack/unsigned_ints,ns,5.61151e+07,2.82024e+07,1.990
|
||||
"GetArray<std::array<int, 1000>>",ns,2242.43,641.094,3.498
|
||||
GetArray<std::deque<int>>,ns,8157.44,1172.81,6.955
|
||||
GetArray<std::set<int>>,ns,58833.4,41553,1.416
|
||||
GetArray<std::vector<int>>,ns,6725.67,670.816,10.026
|
||||
GetMap/citm_catalog,ns,3.44193e+06,2.43771e+06,1.412
|
||||
GetVectorDouble/floats,ns,6.7017e+06,650766,10.298
|
||||
GetVectorInt/signed_ints,ns,8.06579e+06,3.40643e+06,2.368
|
||||
Iterate/canada,ns,873618,445143,1.963
|
||||
Iterate/citm_catalog,ns,301801,157823,1.912
|
||||
Iterate/twitter,ns,87345,58936.4,1.482
|
||||
JsonPointerAt/citm_catalog,ns,1.85369e+06,1.1599e+06,1.598
|
||||
JsonPointerAt/twitter,ns,791487,599585,1.320
|
||||
JsonPointerContains/citm_catalog,ns,2.73824e+06,1.25465e+06,2.182
|
||||
JsonPointerContains/twitter,ns,1.32403e+06,620312,2.134
|
||||
JsonPointerParse/citm_catalog,ns,5.72778e+06,2.21453e+06,2.586
|
||||
JsonPointerParse/twitter,ns,2.4672e+06,1.00864e+06,2.446
|
||||
JsonPointerToString/citm_catalog,ns,6.65484e+06,1.89788e+06,3.506
|
||||
JsonPointerToString/twitter,ns,2.13903e+06,811916,2.635
|
||||
ParseFILE/canada,ns,5.29148e+07,6.01689e+06,8.794
|
||||
ParseFILE/citm_catalog,ns,3.49593e+07,2.34075e+06,14.935
|
||||
ParseFILE/twitter,ns,1.38263e+07,1.34963e+06,10.245
|
||||
ParseFile/canada,ns,1.76922e+07,6.22534e+06,2.842
|
||||
ParseFile/citm_catalog,ns,7.85962e+06,2.47244e+06,3.179
|
||||
ParseFile/floats,ns,1.29413e+08,4.83839e+07,2.675
|
||||
ParseFile/jeopardy,ns,3.30328e+08,1.56161e+08,2.115
|
||||
ParseFile/signed_ints,ns,1.27675e+08,4.65862e+07,2.741
|
||||
ParseFile/small_signed_ints,ns,6.44651e+07,3.33577e+07,1.933
|
||||
ParseFile/twitter,ns,3.39729e+06,1.37932e+06,2.463
|
||||
ParseFile/unsigned_ints,ns,1.23326e+08,4.73146e+07,2.607
|
||||
ParseIndented/canada / 4,ns,3.41603e+07,4.60976e+06,7.410
|
||||
ParseIndented/citm_catalog / 4,ns,7.45491e+06,1.45798e+06,5.113
|
||||
ParseIndented/jeopardy / 4,ns,3.38801e+08,1.14349e+08,2.963
|
||||
ParseIndented/twitter / 4,ns,3.61322e+06,975391,3.704
|
||||
ParseStreamValues/ndjson,ns,7.07974e+06,3.7154e+06,1.906
|
||||
ParseStreamValues/numbers,ns,1.92884e+06,388042,4.971
|
||||
ParseString/canada,ns,1.52389e+07,3.73427e+06,4.081
|
||||
ParseString/citm_catalog,ns,7.40128e+06,1.44821e+06,5.111
|
||||
ParseString/floats,ns,1.19856e+08,2.49654e+07,4.801
|
||||
ParseString/jeopardy,ns,3.03449e+08,1.13053e+08,2.684
|
||||
ParseString/signed_ints,ns,1.21175e+08,2.86805e+07,4.225
|
||||
ParseString/small_signed_ints,ns,6.07636e+07,1.77037e+07,3.432
|
||||
ParseString/twitter,ns,3.21074e+06,920551,3.488
|
||||
ParseString/unsigned_ints,ns,1.20011e+08,2.85056e+07,4.210
|
||||
ParseStringOrdered/canada,ns,1.52544e+07,3.77964e+06,4.036
|
||||
ParseStringOrdered/citm_catalog,ns,1.09927e+07,1.34339e+06,8.183
|
||||
ParseStringOrdered/jeopardy,ns,3.60435e+08,9.81296e+07,3.673
|
||||
ParseStringOrdered/twitter,ns,4.41151e+06,803859,5.488
|
||||
Patch/canada,ns,1.01249e+07,3.41425e+06,2.965
|
||||
Patch/citm_catalog,ns,2.54415e+06,1.65413e+06,1.538
|
||||
Patch/twitter,ns,1.4932e+06,870217,1.716
|
||||
SaxParse/canada,ns,1.28611e+07,2.49889e+06,5.147
|
||||
SaxParse/citm_catalog,ns,6.43798e+06,655372,9.823
|
||||
SaxParse/twitter,ns,2.48859e+06,334038,7.450
|
||||
ToCbor/canada,ns,1.39101e+06,554952,2.507
|
||||
ToCbor/citm_catalog,ns,1.0334e+06,260397,3.969
|
||||
ToCbor/floats,ns,8.93763e+06,1.84589e+06,4.842
|
||||
ToCbor/jeopardy,ns,7.14785e+07,2.10551e+07,3.395
|
||||
ToCbor/signed_ints,ns,1.13863e+07,2.74211e+06,4.152
|
||||
ToCbor/small_signed_ints,ns,1.02822e+07,2.37622e+06,4.327
|
||||
ToCbor/twitter,ns,636979,144369,4.412
|
||||
ToCbor/unsigned_ints,ns,8.04576e+06,2.74066e+06,2.936
|
||||
ToJsonStrings/copy,ns,5.85988e+06,5.60056e+06,1.046
|
||||
ToJsonStrings/move,ns,5.92335e+06,3.04643e+06,1.944
|
||||
Unflatten/canada,ns,4.17811e+07,1.08132e+07,3.864
|
||||
Unflatten/citm_catalog,ns,9.80315e+06,3.53672e+06,2.772
|
||||
Unflatten/twitter,ns,4.56968e+06,2.16566e+06,2.110
|
||||
|
@@ -351,4 +351,11 @@ index,commit,date,pr,subject,parse_twitter,parse_citm,parse_canada,parse_citm_co
|
||||
349,b18b6fc7e6,2026-11-02,6013,Build the parser's syntax error prefix with one concat() (#6013),1370.175,2435.337,6098.834,2320.728,1726.256,472.914,210.817,289.786,2292.841,419.186,1306.593,139.277,1481.709,1714.543,177.065,366.270,971.330
|
||||
350,07876e2292,2026-11-02,6015,json_view: a value that is not found has no bytes in its exception context (#6015),1361.297,2435.980,6080.718,2305.853,1707.733,474.621,210.382,291.568,2337.276,424.783,1329.556,139.590,1450.506,1690.804,178.472,366.370,977.807
|
||||
351,baba5db36f,2026-11-02,6016,"Fix the MSVC and GCC builds of develop (C4127, -Weffc++) (#6016)",1381.280,2440.908,6116.068,2303.611,1713.472,476.121,210.492,290.105,2319.878,420.598,1318.037,139.554,1471.388,1729.097,177.078,369.621,959.145
|
||||
352,candidate,,,develop + open pull requests,1392.967,2469.204,6110.380,2348.760,1730.819,474.089,212.339,290.760,2284.428,420.179,1320.938,137.755,1441.341,1697.486,176.758,364.547,955.117
|
||||
352,57b898ef99,2026-11-03,5998,Replace a multibyte decimal point in dump() of a long double (#5998),1376.416,2456.476,6107.073,2325.534,1714.240,471.800,213.484,290.901,2288.426,420.062,1304.744,139.492,1441.231,1696.537,176.981,363.955,944.685
|
||||
353,efc437ef6e,2026-11-04,6002,UBJSON/BJData/MessagePack reader: reject a container count equal to SIZE_MAX (#6002),1376.138,2441.279,6136.755,2331.556,1708.185,467.554,210.231,291.606,2314.834,415.023,1321.171,138.603,1456.238,1718.533,176.858,366.713,938.783
|
||||
354,42825fba07,2026-11-04,6020,Binary writers: zero only a window ahead of the vector sink's position (#6020),1391.971,2460.961,6101.484,2312.584,1736.846,484.624,211.385,289.579,2309.943,416.103,1316.307,138.308,1464.425,1715.552,179.565,367.624,969.541
|
||||
355,1da8735154,2026-11-04,6023,Fix leak and crash when an allocation throws during parsing (#6023),1358.000,2456.832,6148.140,2333.761,1752.168,487.998,213.374,290.735,2324.377,420.402,1316.165,139.748,1460.000,1714.216,179.958,367.953,970.615
|
||||
356,e48800f09d,2026-11-04,6001,Binary reader and writer: remove checks that invariants make dead (#6001),1371.292,2434.395,6104.099,2313.769,1711.288,483.297,211.214,288.130,2308.992,416.639,1300.966,138.719,1455.595,1695.539,180.445,370.313,962.574
|
||||
357,951271127b,2026-11-07,6028,Binary readers: append strings straight from contiguous input (#6028),1381.807,2431.713,6099.235,2311.519,1694.104,464.615,207.900,288.438,2322.463,418.952,1227.851,138.811,1468.723,1706.816,177.249,369.912,975.798
|
||||
358,18138227dc,2026-11-07,6030,Scan the buffer of a FILE in bulk with glibc and the Apple C library (#6030),1379.500,2439.343,6147.771,2308.199,1689.427,482.217,213.967,290.466,2309.747,420.209,1239.525,139.367,1443.438,1731.583,180.401,364.380,975.476
|
||||
359,candidate,,,develop + open pull requests,1230.726,2155.896,5188.718,2038.886,1713.280,234.359,212.584,289.591,2313.669,425.788,1234.309,137.017,1444.999,1699.919,179.250,367.586,954.772
|
||||
|
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -201,24 +201,24 @@ def digits():
|
||||
# ---------- overview: speedup per workload (Google Benchmark rows, 3.12.0 time / 3.13.0 time) ----------
|
||||
# (group, label, speedup), copied from the table "The short version"
|
||||
OVERVIEW = [
|
||||
("Parsing", "twitter.json", 3.14),
|
||||
("Parsing", "citm_catalog.json", 4.25),
|
||||
("Parsing", "canada.json", 3.35),
|
||||
("Parsing", "canada.json, indented", 6.51),
|
||||
("Parsing", "citm, ordered_json", 6.85),
|
||||
("Parsing", "twitter, std::ifstream", 2.50),
|
||||
("Parsing", "citm, FILE*", 4.74),
|
||||
("Parsing", "citm, accept()", 7.07),
|
||||
("Writing", "dump() twitter", 6.70),
|
||||
("Writing", "dump() canada", 2.98),
|
||||
("Writing", "dump(4) citm", 4.70),
|
||||
("Writing", "to_cbor() twitter", 4.59),
|
||||
("Reading CBOR", "twitter, memory", 3.39),
|
||||
("Reading CBOR", "twitter, FILE*", 6.59),
|
||||
("Values", "diff() canada", 10.46),
|
||||
("Values", "iterate canada", 2.73),
|
||||
("Values", "copy + destroy citm", 1.13),
|
||||
("Values", "== citm", 1.06),
|
||||
("Parsing", "twitter.json", 3.49),
|
||||
("Parsing", "citm_catalog.json", 5.11),
|
||||
("Parsing", "canada.json", 4.08),
|
||||
("Parsing", "canada.json, indented", 7.41),
|
||||
("Parsing", "citm, ordered_json", 8.18),
|
||||
("Parsing", "twitter, std::ifstream", 2.46),
|
||||
("Parsing", "citm, FILE*", 14.94),
|
||||
("Parsing", "citm, accept()", 13.66),
|
||||
("Writing", "dump() twitter", 6.60),
|
||||
("Writing", "dump() canada", 2.90),
|
||||
("Writing", "dump(4) citm", 4.62),
|
||||
("Writing", "to_cbor() twitter", 4.41),
|
||||
("Reading CBOR", "twitter, memory", 3.52),
|
||||
("Reading CBOR", "twitter, FILE*", 9.23),
|
||||
("Values", "diff() canada", 10.44),
|
||||
("Values", "iterate canada", 1.96),
|
||||
("Values", "copy + destroy citm", 1.11),
|
||||
("Values", "== citm", 1.01),
|
||||
]
|
||||
|
||||
|
||||
@@ -304,16 +304,19 @@ def distribution():
|
||||
# (column in perf_timeline.csv, panel title, [(PR, label)]): each labeled step shows the number of the theme that
|
||||
# explains it ("U" for the UTF-8 check of the binary readers that came and went); the appendix maps steps to PRs
|
||||
TIMELINE = [
|
||||
("parse_citm", "parse() citm_catalog.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5882, "4")]),
|
||||
("parse_canada", "parse() canada.json", [(5234, "4"), (5283, "1"), (5617, "3"), (5738, "3"), (5851, "3"), (5882, "4")]),
|
||||
("accept_twitter", "accept() twitter.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5853, "2")]),
|
||||
("parse_citm", "parse() citm_catalog.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5882, "4"), (6031, "1")]),
|
||||
("parse_canada", "parse() canada.json", [(5234, "4"), (5283, "1"), (5617, "3"), (5738, "3"), (5851, "3"), (5882, "4"), (6031, "1")]),
|
||||
("accept_twitter", "accept() twitter.json", [(5234, "4"), (5283, "1"), (5592, "4"), (5809, "4"), (5810, "2"), (5853, "2"), (6031, "1")]),
|
||||
("parse_twitter_ifstream", "parse() twitter.json, std::ifstream", [(5828, "1"), (5884, "1")]),
|
||||
("dump_twitter", "dump() twitter.json", [(5285, "6"), (5738, "2"), (5878, "2"), (5883, "2")]),
|
||||
("dump_canada", "dump() canada.json", [(5285, "6"), (5634, "3")]),
|
||||
("from_cbor_twitter", "from_cbor() twitter", [(5233, "1"), (5501, "4"), (5185, "U"), (5746, "U")]),
|
||||
("from_cbor_twitter", "from_cbor() twitter", [(5233, "1"), (5501, "4"), (5185, "U"), (5746, "U"), (6028, "4")]),
|
||||
("to_cbor_twitter", "to_cbor() twitter", [(5328, "4"), (5824, "6"), (5885, "6")]),
|
||||
]
|
||||
MONTHS = [("2025-04", "3.12.0"), ("2026-09", "Sep 2026"), ("2026-10", "Oct")]
|
||||
# pull requests that were not merged yet when the timeline was measured: their step is the last point, the candidate
|
||||
# (develop with the open pull requests merged); drop a number here once its pull request is on develop
|
||||
PENDING = {6031}
|
||||
MONTHS = [("2025-04", "3.12.0"), ("2026-09", "Sep 2026"), ("2026-10", "Oct"), ("2026-11", "Nov")]
|
||||
|
||||
|
||||
def timeline():
|
||||
@@ -358,7 +361,10 @@ def timeline():
|
||||
# label, and a label that would overlap one already placed moves up
|
||||
groups = []
|
||||
for pr, lab in labels:
|
||||
i = next(k for k, r in enumerate(rows) if r["pr"] == str(pr))
|
||||
i = next((k for k, r in enumerate(rows) if r["pr"] == str(pr)), None)
|
||||
if i is None and pr in PENDING and rows[-1]["commit"] == "candidate":
|
||||
i = n - 1
|
||||
assert i is not None, "no commit of #%d in the timeline" % pr
|
||||
if groups and X(i) - X(groups[-1][-1][1]) < 6:
|
||||
groups[-1].append((pr, i, lab))
|
||||
else:
|
||||
@@ -454,7 +460,8 @@ def heldout():
|
||||
for f in files:
|
||||
libs = data[plat][f]
|
||||
# the fastest other library: below 1 json_document is the fastest, and the distance shows by how much
|
||||
best = min((l for l in libs if l != "nlohmann json_document"), key=lambda l: libs[l]["us"])
|
||||
# json::accept() is nlohmann/json too, not another library
|
||||
best = min((l for l in libs if l not in ("nlohmann json_document", "nlohmann json")), key=lambda l: libs[l]["us"])
|
||||
rel[plat, f] = libs["nlohmann json_document"]["us"] / libs[best]["us"]
|
||||
winner[plat, f] = UC_LIBS.get(best, best)
|
||||
files.sort(key=lambda f: (rel["x86-gcc", f], rel["mac", f]))
|
||||
@@ -498,10 +505,10 @@ def heldout():
|
||||
# CPU time of the compiler in ms, median of 5 interleaved rounds, C++20, M1 Max (the post's appendix G)
|
||||
# (3.12.0, 3.13.0, 3.13.0 with a precompiled header, 3.13.0 as a module)
|
||||
PRICE = [
|
||||
("Apple clang 21, -O0 (debug)", [("count_numbers", 955.0, 1320.5, 688.5, 917.5), ("server_config", 1113.2, 1496.4, 862.6, 1135.5)]),
|
||||
("Apple clang 21, -O2", [("count_numbers", 1393.2, 2081.0, 1458.4, 1684.6), ("server_config", 1753.5, 2545.6, 1925.3, 2168.6)]),
|
||||
("GCC 16, -O0 (debug)", [("count_numbers", 1569.4, 2548.4, 1725.0, 1699.8), ("server_config", 2025.4, 2985.1, 2301.6, 2325.8)]),
|
||||
("GCC 16, -O2", [("count_numbers", 2336.0, 3701.5, 2986.8, 2913.4), ("server_config", 3121.5, 4714.2, 4006.2, 4054.9)]),
|
||||
("Apple clang 21, -O0 (debug)", [("count_numbers", 830.8, 1131.1, 639.0, 790.3), ("server_config", 962.8, 1312.5, 774.2, 1036.5)]),
|
||||
("Apple clang 21, -O2", [("count_numbers", 1328.4, 1898.4, 1311.8, 1491.2), ("server_config", 1584.1, 2251.0, 1778.7, 1925.9)]),
|
||||
("GCC 16, -O0 (debug)", [("count_numbers", 1416.5, 2385.4, 1592.9, 1603.7), ("server_config", 1877.6, 2819.8, 2152.1, 2180.2)]),
|
||||
("GCC 16, -O2", [("count_numbers", 2159.0, 3464.5, 2765.0, 2739.8), ("server_config", 2877.9, 4388.2, 3722.4, 3773.8)]),
|
||||
]
|
||||
PRICE_SERIES = [("3.13.0", "nj-charts-c2"), ("3.13.0, precompiled header", "nj-charts-c1"), ("3.13.0, module", "nj-charts-c3")]
|
||||
|
||||
@@ -584,7 +591,8 @@ NUMBER_TEXT = ("source numbers", "raw numbers") # variants that write each num
|
||||
|
||||
def normalize_usecases(data):
|
||||
"""Chooses each library's best variants again with the rules of the post: variants that reuse a parser or document
|
||||
across calls are measured but not chosen. Variants that write each number by copying its text instead of formatting
|
||||
across calls, and in-place variants whose copy of the input is made before the timer starts ("(copy untimed)"), are
|
||||
measured but not chosen. Variants that write each number by copying its text instead of formatting
|
||||
it (json_document's number_format::source, yyjson's and RapidJSON's raw numbers in edit, minify and write) are not
|
||||
chosen as the fully validating way, but as a way that does less, marked "N" like "U" and "P". Skipping the number
|
||||
conversion while reading is allowed. Each pick has a "mark": "", or the letters of what it skips"""
|
||||
@@ -594,7 +602,7 @@ def normalize_usecases(data):
|
||||
numtext = lambda k: uc in WRITING and any(w in k for w in NUMBER_TEXT)
|
||||
for cell in files.values():
|
||||
for e in cell.values():
|
||||
vs = [(v["us"], k, v["level"]) for k, v in e["variants"].items() if "reused" not in k]
|
||||
vs = [(v["us"], k, v["level"]) for k, v in e["variants"].items() if "reused" not in k and "copy untimed" not in k]
|
||||
full = [v for v in vs if rank[v[2]] == 0 and not numtext(v[1])]
|
||||
pick = lambda v: {"us": v[0], "variant": v[1], "level": "full" if rank[v[2]] == 0 else v[2],
|
||||
"mark": " ".join(m for m in (LEVEL_MARK.get(v[2], ""), "N" if numtext(v[1]) else "") if m)}
|
||||
|
||||
Reference in new issue
Block a user