=== pylons-0001: TopologicalSorter.add()/sorted() — `if name in self.names` list scan O(N²) — CWE-407 ===
N=100   k=100  : defective=0.084ms  fixed=0.003ms  speedup=24.2x
N=500   k=500  : defective=2.140ms  fixed=0.021ms  speedup=102.2x
N=1000  k=1000 : defective=9.519ms  fixed=0.045ms  speedup=209.4x
N=2000  k=2000 : defective=37.527ms  fixed=0.098ms  speedup=383.1x

=== pylons-0002: TopologicalSorter.sorted() — `if a in names and b in names` list scan in edge loop O(N*E) — CWE-407 ===
N=100   k=100  : defective=0.085ms  fixed=0.003ms  speedup=26.0x
N=500   k=500  : defective=2.197ms  fixed=0.021ms  speedup=106.8x
N=1000  k=1000 : defective=9.374ms  fixed=0.047ms  speedup=200.9x
N=2000  k=2000 : defective=36.545ms  fixed=0.098ms  speedup=374.4x

=== pylons-0003: TopologicalSorter.remove() — `self.order.remove(tuple)` list scan O(E) per edge — CWE-407 ===
N=100   k=100  : defective=0.085ms  fixed=0.003ms  speedup=25.5x
N=500   k=500  : defective=7.149ms  fixed=0.107ms  speedup=67.0x
N=1000  k=1000 : defective=9.014ms  fixed=0.046ms  speedup=195.5x
N=2000  k=2000 : defective=37.919ms  fixed=0.096ms  speedup=394.8x

