=== pytorch-geometric-0001: smiles.py list.index() O(L×A) per molecule → O(A) with dict lookup ===
N=100   k=100  : defective=0.085ms  fixed=0.003ms  speedup=24.7x
N=500   k=500  : defective=2.134ms  fixed=0.020ms  speedup=105.2x
N=1000  k=1000 : defective=10.274ms  fixed=0.089ms  speedup=115.0x
N=2000  k=2000 : defective=37.616ms  fixed=0.099ms  speedup=380.0x

