Skip to content

Commit 2afa137

Browse files
* Ensure timestep doesn't change
* Added more tests
1 parent 400d6a6 commit 2afa137

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

package/MDAnalysis/coordinates/IMD.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,9 @@ def __init__(
286286
raise RuntimeError(f"IMDReader: Read error: {e}") from e
287287

288288
def _read_frame(self, frame):
289+
if frame == self._frame:
290+
logger.debug("IMDReader: Using current frame %d", self._frame)
291+
return self.ts
289292

290293
imdf = self._imdclient.get_imdframe()
291294

testsuite/MDAnalysisTests/coordinates/test_imd.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,10 +528,27 @@ def test_iterate_current_frame_raises_error(self, reader):
528528
ts[0]
529529

530530
def test_iterate_current_frame(self, reader):
531+
cts = reader.ts
532+
# test iterator length
531533
assert len(reader[[reader.frame]]) == 1
534+
# test list iterator
532535
for ts in reader[[reader.frame]]:
536+
assert ts == cts
533537
assert ts.frame == reader.frame
538+
# test np.ndarray iterator
534539
reader[np.array([reader.frame])]
540+
# test same timestep
541+
assert reader[reader.frame] == cts
542+
assert reader[reader.frame] == reader[reader.frame]
543+
# should be able to iterate all 5 frames in reader
544+
# due to server.send_frames(1, 5) in reader setup
545+
for i in range(5):
546+
ts = reader[i]
547+
if i < 4:
548+
reader.next()
549+
else:
550+
with pytest.raises(StopIteration):
551+
reader.next()
535552

536553

537554
@pytest.mark.skipif(not HAS_IMDCLIENT, reason="IMDClient not installed")

0 commit comments

Comments
 (0)