From 8d4821bd838f0952700060c4a345c52bfd88b4f8 Mon Sep 17 00:00:00 2001 From: Oliver Beckstein Date: Fri, 15 Jun 2018 22:42:26 -0700 Subject: [PATCH 1/2] test that reader can be pickled (#1940) - all readers - ChainReader (special case) --- testsuite/MDAnalysisTests/coordinates/base.py | 11 ++++++++++ .../coordinates/test_chainreader.py | 20 ++++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/testsuite/MDAnalysisTests/coordinates/base.py b/testsuite/MDAnalysisTests/coordinates/base.py index 3856b37ff68..63262008e08 100644 --- a/testsuite/MDAnalysisTests/coordinates/base.py +++ b/testsuite/MDAnalysisTests/coordinates/base.py @@ -24,6 +24,7 @@ import numpy as np import pytest from six.moves import zip, range +from six.moves import cPickle as pickle from unittest import TestCase from numpy.testing import (assert_equal, assert_almost_equal, assert_array_almost_equal, assert_allclose) @@ -424,6 +425,16 @@ def test_add_another_transformations_raises_ValueError(self, transformed): with pytest.raises(ValueError): transformed.add_transformations(translate([2,2,2])) + @pytest.mark.parametrize("protocol", range(1, pickle.HIGHEST_PROTOCOL+1)) + def test_pickle(self, reader, protocol): + try: + s = pickle.dumps(reader, protocol=protocol) + except TypeError as err: + pytest.fail("Reader cannot be pickled with protocol={}\n{}".format( + protocol, err)) + assert len(s) > 1000 + + class MultiframeReaderTest(BaseReaderTest): def test_last_frame(self, ref, reader): ts = reader[-1] diff --git a/testsuite/MDAnalysisTests/coordinates/test_chainreader.py b/testsuite/MDAnalysisTests/coordinates/test_chainreader.py index d7661e1928e..4b82e0cdf8f 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_chainreader.py +++ b/testsuite/MDAnalysisTests/coordinates/test_chainreader.py @@ -21,6 +21,7 @@ # from __future__ import division, absolute_import from six.moves import zip +from six.moves import cPickle as pickle import numpy as np import os @@ -119,8 +120,8 @@ def test_write_dcd(self, universe, tmpdir): ts_new._pos, self.prec, err_msg="Coordinates disagree at frame {0:d}".format( - ts_orig.frame)) - + ts_orig.frame)) + def test_transform_iteration(self, universe, transformed): vector = np.float32([10,10,10]) # # Are the transformations applied and @@ -135,7 +136,7 @@ def test_transform_iteration(self, universe, transformed): frame = ts.frame ref = universe.trajectory[frame].positions + vector assert_almost_equal(ts.positions, ref, decimal = 6) - + def test_transform_slice(self, universe, transformed): vector = np.float32([10,10,10]) # what happens when we slice the trajectory? @@ -143,7 +144,7 @@ def test_transform_slice(self, universe, transformed): frame = ts.frame ref = universe.trajectory[frame].positions + vector assert_almost_equal(ts.positions, ref, decimal = 6) - + def test_transform_switch(self, universe, transformed): vector = np.float32([10,10,10]) # grab a frame: @@ -154,13 +155,22 @@ def test_transform_switch(self, universe, transformed): assert_almost_equal(transformed.trajectory[10].positions, newref, decimal = 6) # what happens when we comeback to the previous frame? assert_almost_equal(transformed.trajectory[2].positions, ref, decimal = 6) - + def test_transfrom_rewind(self, universe, transformed): vector = np.float32([10,10,10]) ref = universe.trajectory[0].positions + vector transformed.trajectory.rewind() assert_almost_equal(transformed.trajectory.ts.positions, ref, decimal = 6) + @pytest.mark.parametrize("protocol", range(1, pickle.HIGHEST_PROTOCOL+1)) + def test_pickle(self, universe, protocol): + try: + s = pickle.dumps(universe.trajectory, protocol=protocol) + except TypeError as err: + pytest.fail("ChainReader cannot be pickled with protocol={}\n{}".format( + protocol, err)) + assert len(s) > 1000 + class TestChainReaderCommonDt(object): common_dt = 100.0 prec = 3 From 2318ed8ea3555b075578cf69642f60c0dae547df Mon Sep 17 00:00:00 2001 From: Oliver Beckstein Date: Mon, 18 Jun 2018 11:42:20 -0700 Subject: [PATCH 2/2] added test for CRDReader --- testsuite/MDAnalysisTests/coordinates/base.py | 4 +- .../MDAnalysisTests/coordinates/test_crd.py | 53 +++++++++++++++++- .../MDAnalysisTests/data/adk_positions.csv.gz | Bin 0 -> 54315 bytes .../data/coordinates/test_topology.pdb | 10 ++-- testsuite/MDAnalysisTests/datafiles.py | 6 +- 5 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 testsuite/MDAnalysisTests/data/adk_positions.csv.gz diff --git a/testsuite/MDAnalysisTests/coordinates/base.py b/testsuite/MDAnalysisTests/coordinates/base.py index 63262008e08..8205bb5938b 100644 --- a/testsuite/MDAnalysisTests/coordinates/base.py +++ b/testsuite/MDAnalysisTests/coordinates/base.py @@ -101,8 +101,8 @@ def test_coordinates(self): err_msg="wrong coordinates for A10:CA") def test_distances(self): - NTERM = self.universe.atoms.N[0] - CTERM = self.universe.atoms.C[-1] + NTERM = self.universe.select_atoms("name N")[0] + CTERM = self.universe.select_atoms("name C")[-1] d = mda.lib.mdamath.norm(NTERM.position - CTERM.position) assert_almost_equal(d, self.ref_distances['endtoend'], diff --git a/testsuite/MDAnalysisTests/coordinates/test_crd.py b/testsuite/MDAnalysisTests/coordinates/test_crd.py index 305ea688967..ebfb96b5f09 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_crd.py +++ b/testsuite/MDAnalysisTests/coordinates/test_crd.py @@ -29,10 +29,61 @@ assert_equal, ) +import numpy as np + import MDAnalysis as mda +from MDAnalysis.coordinates.CRD import CRDReader, CRDWriter +from MDAnalysis.coordinates.base import Timestep -from MDAnalysisTests.datafiles import CRD +from MDAnalysisTests.datafiles import PSF, CRD, COORDINATES_ADK from MDAnalysisTests import make_Universe +from MDAnalysisTests.coordinates.base import ( + BaseReference, BaseReaderTest, BaseWriterTest, +) + + +class CRDReference(BaseReference): + def __init__(self): + super(CRDReference, self).__init__() + self.trajectory = CRD + self.topology = PSF + self.reader = CRDReader + self.writer = CRDWriter + self.ext = 'crd' + self.n_frames = 1 + self.totaltime = 0 + self.n_atoms = 3341 + self.container_format = True + self.dimensions = np.array([0.0, 0.0, 0.0, 0.0, 0.0, 0.0]) + self.volume = 0.0 + + self.first_frame = Timestep(self.n_atoms) + self.first_frame.positions = np.loadtxt(COORDINATES_ADK, delimiter=',', + dtype=np.float32) + self.first_frame.frame = 0 + self.first_frame.aux.lowf = self.aux_lowf_data[0] + self.first_frame.aux.highf = self.aux_highf_data[0] + + self.last_frame = self.first_frame.copy() + + +class TestCRDReader(BaseReaderTest): + @staticmethod + @pytest.fixture(scope='class') + def ref(): + return CRDReference() + + def test_time(self, ref, reader): + u = mda.Universe(ref.topology, ref.trajectory) + assert_equal(u.trajectory.time, 0.0, + "wrong time of the frame") + + def test_full_slice(self, ref, reader): + u = mda.Universe(ref.topology, ref.trajectory) + trj_iter = u.trajectory[:] + frames = [ts.frame for ts in trj_iter] + assert_equal(frames, np.arange(u.trajectory.n_frames)) + class TestCRDWriter(object): diff --git a/testsuite/MDAnalysisTests/data/adk_positions.csv.gz b/testsuite/MDAnalysisTests/data/adk_positions.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..38957a3ff2c236b2cdbbdd5d25a092f3505d6264 GIT binary patch literal 54315 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 A4*&oF literal 0 HcmV?d00001 diff --git a/testsuite/MDAnalysisTests/data/coordinates/test_topology.pdb b/testsuite/MDAnalysisTests/data/coordinates/test_topology.pdb index 197d7f27800..eaa1f862488 100644 --- a/testsuite/MDAnalysisTests/data/coordinates/test_topology.pdb +++ b/testsuite/MDAnalysisTests/data/coordinates/test_topology.pdb @@ -1,8 +1,8 @@ MODEL CRYST1 80.000 80.000 80.000 60.00 60.00 90.00 -ATOM 1 CA MET 1 00.000 00.000 00.000 1.00 84.71 -ATOM 2 CA ARG 2 01.000 01.000 01.000 1.00 68.59 -ATOM 3 CA ILE 3 02.000 02.000 02.000 1.00 48.30 -ATOM 4 CA LYS 4 03.000 03.000 03.000 1.00 49.38 -ATOM 5 CA LEU 5 04.000 04.000 04.000 1.00 42.10 +ATOM 1 CA MET 1 0.000 0.000 0.000 1.00 84.71 +ATOM 2 CA ARG 2 1.000 1.000 1.000 1.00 68.59 +ATOM 3 CA ILE 3 2.000 2.000 2.000 1.00 48.30 +ATOM 4 CA LYS 4 3.000 3.000 3.000 1.00 49.38 +ATOM 5 CA LEU 5 4.000 4.000 4.000 1.00 42.10 END diff --git a/testsuite/MDAnalysisTests/datafiles.py b/testsuite/MDAnalysisTests/datafiles.py index b616f8e4870..68c9f90442b 100644 --- a/testsuite/MDAnalysisTests/datafiles.py +++ b/testsuite/MDAnalysisTests/datafiles.py @@ -37,6 +37,8 @@ from __future__ import absolute_import __all__ = [ + "COORDINATES_ADK", # numpy/csv file with 3341 coordinates from CRD + # np.savetxt("data/adk_positions.csv.gz", u.atoms.positions, delimiter=",") "PSF", "DCD", "CRD", # CHARMM (AdK example, DIMS trajectory from JMB 2009 paper) "DCD2", # CHARMM (AdK example, DIMS trajectory from PLOS Comput Biol paper) "PSF_notop", "PSF_BAD", # Same as PSF but no bonds etc, malformed version of previous @@ -67,7 +69,6 @@ "PDB_chainidrepeat", # Issue #1107 "PDB", "GRO", "XTC", "TRR", "TPR", "GRO_velocity", # Gromacs (AdK) "GRO_incomplete_vels", - "COORDINATES_GRO_BZ2", "GRO_large", #atom number truncation at > 100,000 particles, Issue 550 "GRO_residwrap", # resids wrapping because of 5 digit field (Issue #728) "GRO_residwrap_0base", # corner case of #728 with resid=0 for first atom @@ -136,6 +137,7 @@ "COORDINATES_XYZ_BZ2", "COORDINATES_GRO", "COORDINATES_GRO_INCOMPLETE_VELOCITY", + "COORDINATES_GRO_BZ2", "Martini_membrane_gro", # for testing the leaflet finder "COORDINATES_XTC", "COORDINATES_TRR", @@ -185,6 +187,8 @@ COORDINATES_DCD = resource_filename(__name__, 'data/coordinates/test.dcd') COORDINATES_TOPOLOGY = resource_filename(__name__, 'data/coordinates/test_topology.pdb') +COORDINATES_ADK = resource_filename(__name__, 'data/adk_positions.csv.gz') + PSF = resource_filename(__name__, 'data/adk.psf') PSF_notop = resource_filename(__name__, 'data/adk_notop.psf') PSF_BAD = resource_filename(__name__, 'data/adk_notop_BAD.psf')