From d97863e356ae80f10519bfcc2f525b530c673bd5 Mon Sep 17 00:00:00 2001 From: robrobo Date: Sat, 11 Apr 2026 17:22:39 +0200 Subject: [PATCH] added fake _xdr attributes in case the trajectory was constructed by other means than reading a gromacs xtc file --- src/mdevaluate/reader.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/mdevaluate/reader.py b/src/mdevaluate/reader.py index 5ea18de..2f1bb72 100755 --- a/src/mdevaluate/reader.py +++ b/src/mdevaluate/reader.py @@ -23,6 +23,8 @@ from .logging_util import logger from . import atoms from .coordinates import Coordinates +from unittest.mock import MagicMock + CSR_ATTRS = ("data", "indices", "indptr") NOJUMP_MAGIC = 2016 Group_RE = re.compile(r"\[ ([-+\w]+) \]") @@ -240,7 +242,18 @@ def generate_nojump_matrices(trajectory: Coordinates): save_nojump_matrices(trajectory.frames) +def _ensure_xdr(reader: BaseReader): + """Patch missing _xdr attribute for non-XDR readers (e.g. LAMMPS DumpReader) + with a stable mock so checksums are consistent across runs.""" + if not hasattr(reader.rd, '_xdr'): + mock_xdr = MagicMock() + mock_xdr.offsets = np.arange(len(reader)) + print(f"Adding mock _xdr attribute for to reader of length {len(reader)}.") + reader.rd._xdr = mock_xdr + + def save_nojump_matrices(reader: BaseReader, matrices: npt.ArrayLike = None): + _ensure_xdr(reader) if matrices is None: matrices = reader.nojump_matrices data = {"checksum": checksum(NOJUMP_MAGIC, checksum(reader))} @@ -253,6 +266,7 @@ def save_nojump_matrices(reader: BaseReader, matrices: npt.ArrayLike = None): def load_nojump_matrices(reader: BaseReader): + _ensure_xdr(reader) zipname = nojump_load_filename(reader) try: data = np.load(zipname, allow_pickle=True)