From f0c1544131f1e53a9e51c2b673ffcaecab1f50f6 Mon Sep 17 00:00:00 2001 From: OpenCode Agent Date: Wed, 18 Feb 2026 02:13:54 +0000 Subject: [PATCH 1/6] ReactionRunner: use deque instead of list for atomStack std::deque has better cache locality than std::list for this BFS traversal pattern where we push_back and pop_front. --- Code/GraphMol/ChemReactions/ReactionRunner.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/GraphMol/ChemReactions/ReactionRunner.cpp b/Code/GraphMol/ChemReactions/ReactionRunner.cpp index 387492fbb10..6ad814e3b9a 100644 --- a/Code/GraphMol/ChemReactions/ReactionRunner.cpp +++ b/Code/GraphMol/ChemReactions/ReactionRunner.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -943,7 +944,7 @@ void addReactantNeighborsToProduct( boost::dynamic_bitset<> &visitedAtoms, std::vector &chiralAtomsToCheck, ReactantProductAtomMapping *mapping, unsigned int reactantId) { - std::list atomStack; + std::deque atomStack; atomStack.push_back(&reactantAtom); // std::cerr << "-------------------" << std::endl; From 6349c1b9819bed3995c2a6447ea0bef235b3e5b5 Mon Sep 17 00:00:00 2001 From: "bddap (opencode opus-4.6)" Date: Sat, 28 Feb 2026 01:55:18 +0000 Subject: [PATCH 2/6] =?UTF-8?q?bench:=20opt-reaction-deque=20vs=20master?= =?UTF-8?q?=20(3=C3=97100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit == /workdir/tmp/bench_results/master.txt → /workdir/tmp/bench_results/opt-reaction-deque.txt == Benchmark Old (mean±sd) New (mean±sd) Δ% Speed Sig(p) ------------------------------------------------------------------------------------------------------------------------------- bench_common::nth_random 0.552 ns ± 0.00314 ns 0.548 ns ± 0.000981 ns -0.7% 1.01× faster below p=0.0352 Chirality::findPotentialStereo 609 us ± 30.3 us 645 us ± 25.3 us +6.0% 1.06× slower ns p=0.11 CIPLabeler::assignCIPLabels 264 ms ± 1.31 ms 264 ms ± 896 us +0.1% 1.00× slower ns p=0.791 Descriptors::calcNumBridgeheadAtoms 1.06 us ± 14.2 ns 1.04 us ± 29.2 ns -2.6% 1.03× faster ns p=0.145 Descriptors::calcNumSpiroAtoms 1.29 us ± 35.4 ns 1.49 us ± 369 ns +15.7% 1.16× slower ns p=0.344 InchiToInchiKey 38.9 us ± 5.11 us 37.4 us ± 5.45 us -3.9% 1.04× faster ns p=0.724 InchiToMol 4.22 ms ± 72.2 us 4.19 ms ± 73.3 us -0.8% 1.01× faster ns p=0.559 memory pressure test 10.4 us ± 391 ns 10.5 us ± 618 ns +0.6% 1.01× slower ns p=0.887 MolOps::addHs 427 us ± 12.1 us 435 us ± 16.2 us +1.9% 1.02× slower ns p=0.492 MolOps::assignStereochemistry legacy=false 772 us ± 68.6 us 776 us ± 24.7 us +0.5% 1.01× slower ns p=0.921 MolOps::assignStereochemistry legacy=true 462 us ± 12.3 us 479 us ± 18.2 us +3.6% 1.04× slower ns p=0.187 MolOps::FindSSR 182 us ± 10.6 us 175 us ± 10.9 us -3.9% 1.04× faster ns p=0.418 MolOps::getMolFrags 1.06 ms ± 27.3 us 1.09 ms ± 20.3 us +2.6% 1.03× slower ns p=0.156 MolPickler::molFromPickle 179 us ± 10.7 us 175 us ± 13.9 us -2.4% 1.02× faster ns p=0.666 MolPickler::pickleMol 103 us ± 2.4 us 118 us ± 7.4 us +14.3% 1.14× slower sig p=0.00105 MolToCXSmiles 1.28 ms ± 76.9 us 1.31 ms ± 56.3 us +1.8% 1.02× slower ns p=0.669 MolToInchi 2.03 ms ± 23.6 us 2.04 ms ± 10.3 us +0.5% 1.00× slower ns p=0.52 MolToSmiles 1e+03 us ± 51.3 us 1.03 ms ± 35 us +3.5% 1.03× slower ns p=0.331 MorganFingerprints::getFingerprint 186 us ± 1.68 us 184 us ± 2.05 us -0.7% 1.01× faster ns p=0.4 ROMol copy constructor 42.3 us ± 907 ns 45 us ± 4.12 us +6.5% 1.06× slower ns p=0.262 ROMol destructor 17.5 us ± 85.7 ns 18 us ± 1.2 us +2.6% 1.03× slower ns p=0.519 ROMol::getNumHeavyAtoms 106 ns ± 1.64 ns 105 ns ± 0.495 ns -1.4% 1.01× faster ns p=0.131 ROMol::GetSubstructMatch 32.8 us ± 1.05 us 33.7 us ± 275 ns +2.7% 1.03× slower ns p=0.153 ROMol::GetSubstructMatch patty 1.12 ms ± 22.3 us 1.14 ms ± 15.4 us +1.3% 1.01× slower ns p=0.337 ROMol::GetSubstructMatch RLewis 7.03 ms ± 40 us 7.03 ms ± 82.8 us -0.1% 1.00× faster ns p=0.933 SmilesToMol 1.18 ms ± 32.9 us 1.21 ms ± 29.7 us +2.4% 1.02× slower ns p=0.26 Summary: sig=1, below=1 (stat-sig but < threshold), ns=24, missing=0, new_only=0 From 7ce7d296fd6c87c84e82954e4678c4e0d3123c9e Mon Sep 17 00:00:00 2001 From: "bddap (opencode opus-4.6)" Date: Thu, 26 Mar 2026 16:45:33 +0000 Subject: [PATCH 3/6] =?UTF-8?q?bench:=20opt-reaction-deque=20vs=20master?= =?UTF-8?q?=20(5=C3=97100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit == tmp/bench_results/master.txt → tmp/bench_results/opt-reaction-deque.txt == Benchmark Old (mean±sd) New (mean±sd) Δ% Speed Sig(p) --------------------------------------------------------------------------------------------------------------------- bench_common::nth_random 1.47 ns ± 0.521 ns 2.02 ns ± 0.47 ns +37.4% 1.37× slower ns p=0.0798 Chirality::findPotentialStereo 1.72 ms ± 340 us 1.68 ms ± 180 us -2.1% 1.02× faster ns p=0.832 CIPLabeler::assignCIPLabels 586 ms ± 7.43 ms 591 ms ± 5.11 ms +0.9% 1.01× slower ns p=0.201 Descriptors::calcNumBridgeheadAtoms 4.57 us ± 1.54 us 6.13 us ± 1.94 us +34.1% 1.34× slower ns p=0.16 Descriptors::calcNumSpiroAtoms 5.96 us ± 2.11 us 5.48 us ± 1.86 us -8.0% 1.09× faster ns p=0.704 InchiToInchiKey 56.3 us ± 19.1 us 63.1 us ± 17.1 us +12.1% 1.12× slower ns p=0.55 InchiToMol 11.3 ms ± 610 us 11.5 ms ± 640 us +1.4% 1.01× slower ns p=0.71 memory pressure test 20.6 us ± 4.49 us 27.9 us ± 8.47 us +35.5% 1.35× slower ns p=0.0885 MolOps::addHs 832 us ± 113 us 874 us ± 149 us +5.0% 1.05× slower ns p=0.619 MolOps::assignStereochemistry legacy=false 2.14 ms ± 253 us 2.19 ms ± 203 us +2.4% 1.02× slower ns p=0.728 MolOps::assignStereochemistry legacy=true 1.27 ms ± 165 us 1.26 ms ± 182 us -0.4% 1.00× faster ns p=0.966 MolOps::FindSSR 407 us ± 71.8 us 382 us ± 61.5 us -6.2% 1.07× faster ns p=0.549 MolOps::getMolFrags 2.49 ms ± 278 us 2.49 ms ± 367 us -0.1% 1.00× faster ns p=0.99 MolPickler::molFromPickle 355 us ± 70.3 us 284 us ± 5.54 us -19.9% 1.25× faster sig p=0.0249 MolPickler::pickleMol 330 us ± 72.5 us 375 us ± 31.5 us +13.8% 1.14× slower ns p=0.197 MolToCXSmiles 2.82 ms ± 250 us 2.8 ms ± 118 us -0.7% 1.01× faster ns p=0.867 MolToInchi 6.24 ms ± 471 us 6.26 ms ± 388 us +0.3% 1.00× slower ns p=0.941 MolToSmiles 2.26 ms ± 226 us 2.23 ms ± 270 us -1.4% 1.01× faster ns p=0.846 MorganFingerprints::getFingerprint 674 us ± 133 us 775 us ± 116 us +14.9% 1.15× slower ns p=0.202 ROMol copy constructor 164 us ± 37.8 us 158 us ± 46.7 us -3.5% 1.04× faster ns p=0.832 ROMol destructor 90.7 us ± 7.53 us 85.1 us ± 10.3 us -6.2% 1.07× faster ns p=0.325 ROMol::getNumHeavyAtoms 358 ns ± 68 ns 351 ns ± 75.9 ns -2.0% 1.02× faster ns p=0.874 ROMol::GetSubstructMatch 120 us ± 28.9 us 112 us ± 27.4 us -6.7% 1.07× faster ns p=0.653 ROMol::GetSubstructMatch patty 3.73 ms ± 423 us 3.83 ms ± 543 us +2.8% 1.03× slower ns p=0.738 ROMol::GetSubstructMatch RLewis 23.7 ms ± 201 us 23.7 ms ± 1.93 ms -0.1% 1.00× faster ns p=0.985 SmilesToMol 3.29 ms ± 274 us 3.54 ms ± 512 us +7.8% 1.08× slower ns p=0.322 Summary: sig=1, below=0 (stat-sig but < threshold), ns=25, missing=0, new_only=0 From d4726983db83e671a37b52b4b5a228f8d16b3190 Mon Sep 17 00:00:00 2001 From: "bddap (opencode opus-4.6)" Date: Fri, 27 Mar 2026 02:23:09 +0000 Subject: [PATCH 4/6] =?UTF-8?q?bench:=20opt-reaction-deque=20vs=20master?= =?UTF-8?q?=20(5=C3=97100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit == /home/ubuntu/rdkits/tmp/bench_results/master.txt → /home/ubuntu/rdkits/tmp/bench_results/opt-reaction-deque.txt == Benchmark Old (mean±sd) New (mean±sd) Δ% CV Speed Sig(p) ---------------------------------------------------------------------------------------------------------------------------- bench_common::nth_random 1.75 ns ± 0.618 ns 1.44 ns ± 0.396 ns -17.5% 35.4% 1.21× faster ns p=0.385 Chirality::findPotentialStereo 1.51 ms ± 79.9 us 1.56 ms ± 97.9 us +3.0% 6.3% 1.03× slower ns p=0.44 CIPLabeler::assignCIPLabels 524 ms ± 3.05 ms 526 ms ± 2.99 ms +0.3% 0.6% 1.00× slower ns p=0.429 Descriptors::calcNumBridgeheadAtoms 5.23 us ± 1.31 us 4.57 us ± 1.28 us -12.6% 28.0% 1.14× faster ns p=0.445 Descriptors::calcNumSpiroAtoms 6.24 us ± 1.73 us 4.56 us ± 222 ns -26.9% 27.6% 1.37× faster ns p=0.0952 InchiToInchiKey 48.3 us ± 3.37 us 54.3 us ± 6.09 us +12.4% 11.2% 1.12× slower ns p=0.101 InchiToMol 10.4 ms ± 208 us 10.4 ms ± 327 us +0.2% 3.1% 1.00× slower ns p=0.886 memory pressure test 19.8 us ± 1.47 us 20.3 us ± 3.9 us +2.2% 19.2% 1.02× slower ns p=0.82 MolOps::addHs 772 us ± 53.4 us 800 us ± 62.3 us +3.6% 7.8% 1.04× slower ns p=0.468 MolOps::assignStereochemistry legacy=false 1.95 ms ± 92 us 1.82 ms ± 49.7 us -6.8% 4.7% 1.07× faster ns p=0.0283 MolOps::assignStereochemistry legacy=true 1.18 ms ± 159 us 1.12 ms ± 78.7 us -5.0% 13.5% 1.05× faster ns p=0.49 MolOps::FindSSR 382 us ± 31.9 us 383 us ± 36.8 us +0.2% 9.6% 1.00× slower ns p=0.97 MolOps::getMolFrags 2.3 ms ± 104 us 2.27 ms ± 82.6 us -1.2% 4.5% 1.01× faster ns p=0.66 MolPickler::molFromPickle 311 us ± 28.8 us 305 us ± 27.5 us -1.7% 9.3% 1.02× faster ns p=0.772 MolPickler::pickleMol 276 us ± 29.6 us 292 us ± 22.4 us +6.1% 10.7% 1.06× slower ns p=0.345 MolToCXSmiles 2.42 ms ± 130 us 2.42 ms ± 165 us -0.1% 6.8% 1.00× faster ns p=0.982 MolToInchi 5.81 ms ± 165 us 5.89 ms ± 165 us +1.4% 2.8% 1.01× slower ns p=0.458 MolToSmiles 1.92 ms ± 127 us 1.9 ms ± 128 us -0.8% 6.8% 1.01× faster ns p=0.848 MorganFingerprints::getFingerprint 666 us ± 46 us 639 us ± 44.8 us -4.0% 7.0% 1.04× faster ns p=0.384 ROMol copy constructor 160 us ± 20.5 us 156 us ± 15.8 us -2.1% 12.8% 1.02× faster ns p=0.777 ROMol destructor 62.1 us ± 6.34 us 61.3 us ± 6.99 us -1.3% 11.4% 1.01× faster ns p=0.85 ROMol::getNumHeavyAtoms 384 ns ± 92.1 ns 317 ns ± 3.01 ns -17.5% 24.0% 1.21× faster ns p=0.179 ROMol::GetSubstructMatch 111 us ± 13.2 us 103 us ± 5.06 us -7.8% 11.9% 1.08× faster ns p=0.226 ROMol::GetSubstructMatch patty 3.29 ms ± 236 us 3.29 ms ± 149 us +0.3% 7.2% 1.00× slower ns p=0.949 ROMol::GetSubstructMatch RLewis 21 ms ± 531 us 21.1 ms ± 136 us +0.5% 2.5% 1.00× slower ns p=0.715 SmilesToMol 2.95 ms ± 217 us 2.93 ms ± 80.2 us -0.8% 7.4% 1.01× faster ns p=0.819 Summary: sig=0, below=0 (stat-sig but < threshold), ns=26, missing=0, new_only=0 Bonferroni-corrected α = 0.001923 (26 tests, family α = 0.05) From f87d4ef5120521df4c21ee38f2bc360c213bb304 Mon Sep 17 00:00:00 2001 From: "bddap (opencode opus-4.6)" Date: Fri, 27 Mar 2026 21:01:15 +0000 Subject: [PATCH 5/6] =?UTF-8?q?bench:=20opt-reaction-deque=20vs=20master?= =?UTF-8?q?=20(5=C3=97100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit == /home/ubuntu/rdkits/tmp/bench_results/master.txt → /home/ubuntu/rdkits/tmp/bench_results/opt-reaction-deque.txt == Benchmark Old (mean±sd) New (mean±sd) Δ% CV Speed Sig(p) ---------------------------------------------------------------------------------------------------------------------------- bench_common::nth_random 1.34 ns ± 0.227 ns 2 ns ± 0.268 ns +49.7% 17.0% 1.50× slower ns p=0.00309 Chirality::findPotentialStereo 1.66 ms ± 112 us 1.65 ms ± 71.1 us -0.9% 6.7% 1.01× faster ns p=0.799 CIPLabeler::assignCIPLabels 597 ms ± 27.3 ms 581 ms ± 36.2 ms -2.7% 6.2% 1.03× faster ns p=0.457 Descriptors::calcNumBridgeheadAtoms 4.46 us ± 1.24 us 5.09 us ± 1.61 us +14.0% 31.6% 1.14× slower ns p=0.512 Descriptors::calcNumSpiroAtoms 4.52 us ± 104 ns 5.33 us ± 1.5 us +17.8% 28.1% 1.18× slower ns p=0.296 InchiToInchiKey 58 us ± 12.4 us 54.9 us ± 7.52 us -5.4% 21.4% 1.06× faster ns p=0.647 InchiToMol 10.7 ms ± 198 us 10.7 ms ± 226 us +0.5% 2.1% 1.01× slower ns p=0.677 memory pressure test 17.2 us ± 2.55 us 16.4 us ± 2.84 us -4.9% 17.4% 1.05× faster ns p=0.638 MolOps::addHs 856 us ± 80.7 us 827 us ± 66.9 us -3.4% 9.4% 1.03× faster ns p=0.555 MolOps::assignStereochemistry legacy=false 2 ms ± 104 us 2 ms ± 166 us +0.2% 8.3% 1.00× slower ns p=0.957 MolOps::assignStereochemistry legacy=true 1.21 ms ± 65.2 us 1.16 ms ± 75.5 us -4.0% 6.5% 1.04× faster ns p=0.306 MolOps::FindSSR 387 us ± 22.7 us 409 us ± 35.2 us +5.5% 8.6% 1.06× slower ns p=0.29 MolOps::getMolFrags 2.29 ms ± 101 us 2.36 ms ± 114 us +3.2% 4.8% 1.03× slower ns p=0.317 MolPickler::molFromPickle 317 us ± 22.9 us 330 us ± 36.5 us +3.9% 11.1% 1.04× slower ns p=0.54 MolPickler::pickleMol 277 us ± 30.5 us 297 us ± 34.3 us +7.1% 11.5% 1.07× slower ns p=0.363 MolToCXSmiles 2.59 ms ± 37.9 us 2.64 ms ± 85.1 us +1.8% 3.2% 1.02× slower ns p=0.318 MolToInchi 6.31 ms ± 131 us 6.14 ms ± 144 us -2.7% 2.3% 1.03× faster ns p=0.0822 MolToSmiles 2.16 ms ± 53.4 us 2.03 ms ± 44.8 us -6.0% 2.5% 1.06× faster ns p=0.00345 MorganFingerprints::getFingerprint 618 us ± 38.8 us 622 us ± 54.2 us +0.7% 8.7% 1.01× slower ns p=0.893 ROMol copy constructor 140 us ± 4.94 us 153 us ± 17.1 us +9.9% 11.2% 1.10× slower ns p=0.147 ROMol destructor 58.5 us ± 1.12 us 63 us ± 7.56 us +7.8% 12.0% 1.08× slower ns p=0.251 ROMol::getNumHeavyAtoms 415 ns ± 78.4 ns 344 ns ± 18.2 ns -16.9% 18.9% 1.20× faster ns p=0.116 ROMol::GetSubstructMatch 118 us ± 14.6 us 115 us ± 12.9 us -2.3% 12.4% 1.02× faster ns p=0.761 ROMol::GetSubstructMatch patty 3.59 ms ± 263 us 3.65 ms ± 279 us +1.5% 7.6% 1.02× slower ns p=0.756 ROMol::GetSubstructMatch RLewis 22.6 ms ± 440 us 21.9 ms ± 604 us -3.0% 2.8% 1.03× faster ns p=0.0834 SmilesToMol 3.16 ms ± 105 us 3.13 ms ± 118 us -1.0% 3.8% 1.01× faster ns p=0.68 Summary: sig=0, below=0 (stat-sig but < threshold), ns=26, missing=0, new_only=0 Bonferroni-corrected α = 0.001923 (26 tests, family α = 0.05) From b4d569063068427382a3b7b7eedbd5dbf8cfca37 Mon Sep 17 00:00:00 2001 From: "bddap (opencode opus-4.6)" Date: Sun, 29 Mar 2026 01:14:41 +0000 Subject: [PATCH 6/6] =?UTF-8?q?bench:=20opt-reaction-deque=20vs=20master?= =?UTF-8?q?=20(16=C3=97800)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit == /home/ubuntu/rdkits/tmp/bench_results/master.txt → /home/ubuntu/rdkits/tmp/bench_results/opt-reaction-deque.txt == Benchmark Old (mean±sd) New (mean±sd) Δ% CV Speed Sig(p) --------------------------------------------------------------------------------------------------------------------------- bench_common::nth_random 1.38 ns ± 0.134 ns 1.38 ns ± 0.131 ns +0.0% 9.7% 1.00× slower ns p=0.989 Chirality::findPotentialStereo 1.6 ms ± 77.4 us 1.6 ms ± 90.4 us +0.0% 5.7% 1.00× slower ns p=0.979 CIPLabeler::assignCIPLabels 587 ms ± 40.6 ms 577 ms ± 36.1 ms -1.7% 6.9% 1.02× faster ns p=0.455 Descriptors::calcNumBridgeheadAtoms 4.15 us ± 302 ns 4.27 us ± 346 ns +2.8% 8.1% 1.03× slower ns p=0.327 Descriptors::calcNumSpiroAtoms 5.11 us ± 644 ns 5.09 us ± 499 ns -0.4% 12.6% 1.00× faster ns p=0.928 InchiToInchiKey 49 us ± 3.79 us 50.3 us ± 4.45 us +2.7% 8.9% 1.03× slower ns p=0.369 InchiToMol 10.5 ms ± 272 us 10.5 ms ± 244 us +0.0% 2.6% 1.00× slower ns p=0.985 memory pressure test 17.3 us ± 2.99 us 16.6 us ± 2.94 us -4.2% 17.8% 1.04× faster ns p=0.489 MolOps::addHs 802 us ± 28.5 us 770 us ± 59 us -4.0% 7.7% 1.04× faster ns p=0.0613 MolOps::assignStereochemistry legacy=false 1.93 ms ± 71.3 us 1.93 ms ± 64.3 us -0.0% 3.7% 1.00× faster ns p=0.969 MolOps::assignStereochemistry legacy=true 1.13 ms ± 44 us 1.15 ms ± 42 us +1.9% 3.9% 1.02× slower ns p=0.17 MolOps::FindSSR 387 us ± 24.2 us 376 us ± 22.6 us -3.0% 6.2% 1.03× faster ns p=0.172 MolOps::getMolFrags 2.3 ms ± 92.4 us 2.28 ms ± 100 us -1.0% 4.4% 1.01× faster ns p=0.523 MolPickler::molFromPickle 299 us ± 19.5 us 296 us ± 15.1 us -0.8% 6.5% 1.01× faster ns p=0.686 MolPickler::pickleMol 278 us ± 16.2 us 282 us ± 18.7 us +1.7% 6.6% 1.02× slower ns p=0.443 MolToCXSmiles 2.59 ms ± 126 us 2.59 ms ± 120 us -0.1% 4.9% 1.00× faster ns p=0.949 MolToInchi 6.1 ms ± 141 us 6.12 ms ± 126 us +0.4% 2.3% 1.00× slower ns p=0.618 MolToSmiles 2 ms ± 104 us 1.98 ms ± 84.3 us -0.8% 5.2% 1.01× faster ns p=0.62 MorganFingerprints::getFingerprint 618 us ± 29.8 us 623 us ± 26.8 us +0.8% 4.8% 1.01× slower ns p=0.622 ROMol copy constructor 147 us ± 12.9 us 150 us ± 12.4 us +2.3% 8.8% 1.02× slower ns p=0.455 ROMol destructor 62.7 us ± 4.28 us 63.2 us ± 3.15 us +0.8% 6.8% 1.01× slower ns p=0.717 ROMol::getNumHeavyAtoms 351 ns ± 27.7 ns 365 ns ± 28.7 ns +4.0% 7.9% 1.04× slower ns p=0.168 ROMol::GetSubstructMatch 115 us ± 8.62 us 113 us ± 7.59 us -1.4% 7.5% 1.01× faster ns p=0.582 ROMol::GetSubstructMatch patty 3.64 ms ± 93.9 us 3.64 ms ± 75.1 us +0.1% 2.6% 1.00× slower ns p=0.95 ROMol::GetSubstructMatch RLewis 22.1 ms ± 403 us 22.2 ms ± 413 us +0.6% 1.9% 1.01× slower ns p=0.382 SmilesToMol 2.98 ms ± 105 us 2.96 ms ± 88.9 us -0.7% 3.5% 1.01× faster ns p=0.534 Summary: sig=0, below=0 (stat-sig but < threshold), ns=26, missing=0, new_only=0 Bonferroni-corrected α = 0.001923 (26 tests, family α = 0.05)