From e0a787e67aa2f52e0f4063c8904993f147f9f3f1 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Tue, 2 Jun 2026 23:57:40 +0530 Subject: [PATCH 1/4] ENH: Add PDB reader benchmark to track parsing performance --- benchmarks/benchmarks/traj_reader.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/benchmarks/benchmarks/traj_reader.py b/benchmarks/benchmarks/traj_reader.py index 3a203a37077..28fcd0eb39c 100644 --- a/benchmarks/benchmarks/traj_reader.py +++ b/benchmarks/benchmarks/traj_reader.py @@ -28,6 +28,12 @@ except ImportError: pass +try: + import MDAnalysis as mda + from MDAnalysisTests.datafiles import PDB +except ImportError: + pass + traj_dict = { "XTC": [XTC, XTCReader], "TRR": [TRR, TRRReader], @@ -71,3 +77,23 @@ def time_strides(self, traj_format): """ for ts in self.reader_object: pass + + +class PDBReaderBench(object): + """Benchmarks for PDB file format reading and parsing""" + + units = 'ms' + timeout = 60.0 + params = [10, 100, 500] + param_names = ['n_frames'] + + def setup(self, n_frames): + self.u = mda.Universe(PDB) + + def time_iterate(self, n_frames): + for _ in range(n_frames): + for ts in self.u.trajectory: + _ = ts.positions + + + \ No newline at end of file From d2ea9841a87a25de307586533bef54d0866fd096 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Wed, 3 Jun 2026 00:12:51 +0530 Subject: [PATCH 2/4] updated changelog --- package/CHANGELOG | 1 + 1 file changed, 1 insertion(+) diff --git a/package/CHANGELOG b/package/CHANGELOG index fd0b8691869..537fe1540d9 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -22,6 +22,7 @@ The rules for this file: * 2.11.0 Fixes + * Added ASV benchmark for PDB trajectory reading (PR #1234) * `MDAnalysis.analysis.nucleicacids.WatsonCrickDist`, `MinorPairDist`, and `MajorPairDist` now match residue names against the full resname instead of only the first character, fixing incorrect behaviour with From dddcdf6aab1c26f5dc33606b52ef657ac1e3e9f1 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Thu, 4 Jun 2026 21:58:53 +0530 Subject: [PATCH 3/4] simplify PDBReaderBench iteration over PDB_multiframe --- benchmarks/benchmarks/traj_reader.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/benchmarks/benchmarks/traj_reader.py b/benchmarks/benchmarks/traj_reader.py index 28fcd0eb39c..ffff00488d1 100644 --- a/benchmarks/benchmarks/traj_reader.py +++ b/benchmarks/benchmarks/traj_reader.py @@ -30,7 +30,7 @@ try: import MDAnalysis as mda - from MDAnalysisTests.datafiles import PDB + from MDAnalysisTests.datafiles import PDB_multiframe except ImportError: pass @@ -82,18 +82,12 @@ def time_strides(self, traj_format): class PDBReaderBench(object): """Benchmarks for PDB file format reading and parsing""" - units = 'ms' + units = "ms" timeout = 60.0 - params = [10, 100, 500] - param_names = ['n_frames'] - def setup(self, n_frames): - self.u = mda.Universe(PDB) + def setup(self): + self.u = mda.Universe(PDB_multiframe) - def time_iterate(self, n_frames): - for _ in range(n_frames): - for ts in self.u.trajectory: - _ = ts.positions - - - \ No newline at end of file + def time_iterate(self): + for ts in self.u.trajectory: + pass From 625961ef03933ddfe06b1e6e40e6c215b49de069 Mon Sep 17 00:00:00 2001 From: Kushagar Garg Date: Thu, 4 Jun 2026 22:12:06 +0530 Subject: [PATCH 4/4] Added time_read for inital parsing --- benchmarks/benchmarks/traj_reader.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/benchmarks/benchmarks/traj_reader.py b/benchmarks/benchmarks/traj_reader.py index ffff00488d1..b03cd00707e 100644 --- a/benchmarks/benchmarks/traj_reader.py +++ b/benchmarks/benchmarks/traj_reader.py @@ -88,6 +88,9 @@ class PDBReaderBench(object): def setup(self): self.u = mda.Universe(PDB_multiframe) + def time_read(self): + mda.Universe(PDB_multiframe) + def time_iterate(self): for ts in self.u.trajectory: pass