This file is generated by tests/perf/test_readme_timings.py.
The benchmark first writes docs/timings.tsv, then renders this
Markdown page and timing plots from that TSV.
Example timings from the opt-in performance benchmark, measured in release mode
on one development machine. Treat them as indicative, not as a portability,
stability, or universality guarantee.
This is a small curated benchmark: 9 molecules, 2 writer modes, and
7 timing repeats per row.
This is not a workload study and not an exact-versus-exact comparison.
Support: the size of the exact rooted SMILES support across all root atoms.
Grimace enum (per-root union): union of
MolToSmilesEnum(..., rootedAtAtom=root_idx, canonical=False, doRandom=True, isomericSmiles=<table mode>)
over every root atom.
The direct public MolToSmilesEnum(..., rootedAtAtom=-1, ...) path is
not timed in this column and can differ materially from the explicit
per-root union shown here.
Decoder enum (branch-preserving, per-root): exhaustive traversal of
MolToSmilesDecoder(..., rootedAtAtom=root_idx, canonical=False, doRandom=True, isomericSmiles=<table mode>).next_choices
over every root atom, then unioned.
Decoder enum (determinized, per-root): the same per-root traversal,
using MolToSmilesDeterminizedDecoder(...).
Decoder enum (determinized, merged): the same merged traversal,
using MolToSmilesDeterminizedDecoder(...).
RDKit to 1/2 support: repeated RDKit MolToSmiles(..., canonical=False,
doRandom=True, rootedAtAtom=root_idx, isomericSmiles=<table mode>) draws
across all roots until half of the exact support has been seen.
RDKit to full support: the same sampling process until the full exact
support has been seen.
Non-stereo means isomericSmiles=False.
Stereo means isomericSmiles=True.
All timing columns are shown as time mean ± std.
The two RDKit columns also show (draw mean ± std) over repeated seeded
trials.
The published table does not directly rank every public exact path:
it times Grimace enum (per-root union) rather than the direct
public MolToSmilesEnum(..., rootedAtAtom=-1) path, and some
merged decoder rows are numerically lower than that per-root
union column.
The merged decoder rows expose the public all-roots decoder path directly,
so they can diverge substantially from the explicit per-root rows.
Read the RDKit comparison as ‘faster on this benchmark against this
sampling baseline’, not as a general claim about every molecule or
every SMILES-writing workload.
The determinized decoder can reduce exhaustive decoder cost on some
molecules, but direct exact enumeration is still faster on these cases.