From b2aa24f06e53e2eea4bb2df7593491f294a96228 Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Wed, 30 Oct 2019 00:21:21 -0400 Subject: [PATCH 1/6] Update gsd version in Appveyor. --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index a26ad899570..bba9c016bef 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -11,7 +11,7 @@ environment: global: CONDA_CHANNELS: conda-forge CONDA_DEPENDENCIES: pip setuptools wheel cython mock six biopython networkx joblib matplotlib scipy vs2015_runtime pytest mmtf-python GridDataFormats hypothesis pytest-cov codecov - PIP_DEPENDENCIES: gsd==1.5.2 duecredit + PIP_DEPENDENCIES: gsd==1.9.3 duecredit DEBUG: "False" MINGW_64: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin OPENBLAS_64: https://3f23b170c54c2533c070-1c8a9b3114517dc5fe17b7c3f8c63a43.ssl.cf2.rackcdn.com/openblas-5f998ef_gcc7_1_0_win64.zip From d7daa427b5f820335aecb27376db77565f35b9fd Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Wed, 30 Oct 2019 00:21:55 -0400 Subject: [PATCH 2/6] Remove conditional Windows errors from GSD coordinate reader. --- package/MDAnalysis/coordinates/GSD.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/package/MDAnalysis/coordinates/GSD.py b/package/MDAnalysis/coordinates/GSD.py index efa8a3c1731..60088912d12 100644 --- a/package/MDAnalysis/coordinates/GSD.py +++ b/package/MDAnalysis/coordinates/GSD.py @@ -49,8 +49,7 @@ import numpy as np import os -if os.name != 'nt': - import gsd.hoomd +import gsd.hoomd from . import base @@ -73,9 +72,6 @@ def __init__(self, filename, **kwargs): .. versionadded:: 0.17.0 """ - if os.name == 'nt': - raise NotImplementedError("GSD format not supported on Windows") - super(GSDReader, self).__init__(filename, **kwargs) self.filename = filename self.open_trajectory() From 9a029abf69ab1ddae60558ea90587194980ec560 Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Wed, 30 Oct 2019 00:22:41 -0400 Subject: [PATCH 3/6] Remove conditional Windows errors from GSD topology reader. --- package/MDAnalysis/topology/GSDParser.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/package/MDAnalysis/topology/GSDParser.py b/package/MDAnalysis/topology/GSDParser.py index d7bb216cc03..72fb17f4b18 100644 --- a/package/MDAnalysis/topology/GSDParser.py +++ b/package/MDAnalysis/topology/GSDParser.py @@ -34,7 +34,7 @@ the :class:`~MDAnalysis.coordinates.GSD.GSDReader` class. .. _HOOMD: http://codeblue.umich.edu/hoomd-blue/index.html -.. _HOOMD GSD: https://bitbucket.org/glotzer/gsd +.. _HOOMD GSD: https://github.com/glotzerlab/gsd To load a GSD HOOMD file:: @@ -54,9 +54,7 @@ from __future__ import absolute_import import os -if os.name != 'nt': - # not supported on windows - import gsd.hoomd +import gsd.hoomd import numpy as np from . import guessers @@ -110,9 +108,6 @@ def parse(self, **kwargs): .. versionadded:: 0.17.0 """ - if os.name == 'nt': - raise NotImplementedError("GSD format not supported on Windows") - attrs = {} with gsd.hoomd.open(self.filename,mode='rb') as t : From dc00aa0856454ade533662b741e22abe2ad50fe8 Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Wed, 30 Oct 2019 00:23:27 -0400 Subject: [PATCH 4/6] Require gsd>=1.9.3 on Windows (previous versions lacked proper Windows support when installed via pip). --- package/setup.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/setup.py b/package/setup.py index 63aaa04e3d8..01e8aedecc5 100755 --- a/package/setup.py +++ b/package/setup.py @@ -561,6 +561,8 @@ def dynamic_author_list(): ] if not os.name == 'nt': install_requires.append('gsd>=1.4.0') + else: + install_requires.append('gsd>=1.9.3') setup(name='MDAnalysis', version=RELEASE, From b8c3e262cae1d5908e000e6ae8cfbbf50f7cf857 Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Wed, 30 Oct 2019 00:23:56 -0400 Subject: [PATCH 5/6] Update GSD tests to run on Windows. --- testsuite/MDAnalysisTests/coordinates/test_gsd.py | 8 -------- testsuite/MDAnalysisTests/topology/test_gsd.py | 10 +++------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/testsuite/MDAnalysisTests/coordinates/test_gsd.py b/testsuite/MDAnalysisTests/coordinates/test_gsd.py index 89daa20e067..9c2f19e01d4 100644 --- a/testsuite/MDAnalysisTests/coordinates/test_gsd.py +++ b/testsuite/MDAnalysisTests/coordinates/test_gsd.py @@ -35,8 +35,6 @@ def GSD_U(): return mda.Universe(GSD) -@pytest.mark.skipif(os.name == 'nt', - reason="gsd not windows compatible") def test_gsd_positions(GSD_U): # first frame first particle ts = GSD_U.trajectory[0] @@ -47,20 +45,14 @@ def test_gsd_positions(GSD_U): assert_almost_equal(GSD_U.atoms.positions[0], [ -5.58348083, -9.98546982, -10.17657185]) -@pytest.mark.skipif(os.name == 'nt', - reason="gsd not windows compatible") def test_gsd_n_frames(GSD_U): assert len(GSD_U.trajectory) == 2 -@pytest.mark.skipif(os.name == 'nt', - reason="gsd not windows compatible") def test_gsd_dimensions(GSD_U): ts = GSD_U.trajectory[0] assert_almost_equal(ts.dimensions, [ 21.60000038,21.60000038,21.60000038,90.,90.,90.]) -@pytest.mark.skipif(os.name == 'nt', - reason="gsd not windows compatible") def test_gsd_data_step(GSD_U): assert GSD_U.trajectory[0].data['step'] == 0 assert GSD_U.trajectory[1].data['step'] == 500 diff --git a/testsuite/MDAnalysisTests/topology/test_gsd.py b/testsuite/MDAnalysisTests/topology/test_gsd.py index 3c25462698c..09184687c24 100644 --- a/testsuite/MDAnalysisTests/topology/test_gsd.py +++ b/testsuite/MDAnalysisTests/topology/test_gsd.py @@ -33,8 +33,6 @@ import os -@pytest.mark.skipif(os.name == 'nt', - reason="gsd not windows compatible") class TestGSDParser(ParserBase): parser = mda.topology.GSDParser.GSDParser ref_filename = GSD @@ -48,9 +46,7 @@ def test_attr_size(self, top): assert len(top.names) == top.n_atoms assert len(top.resids) == top.n_residues assert len(top.resnames) == top.n_residues - -@pytest.mark.skipif(os.name == 'nt', - reason="gsd not windows compatible") + class TestGSDParserBonds(ParserBase): parser = mda.topology.GSDParser.GSDParser ref_filename = GSD_bonds @@ -67,10 +63,10 @@ def test_attr_size(self, top): assert len(top.names) == top.n_atoms assert len(top.resids) == top.n_residues assert len(top.resnames) == top.n_residues - + def test_atoms(self, top): assert top.n_atoms == self.expected_n_atoms - + def test_bonds(self, top): assert len(top.bonds.values) == self.expected_n_bonds assert isinstance(top.bonds.values[0], tuple) From 3d6fb3c283963b23ba37384c1a26a71df4a0ba7c Mon Sep 17 00:00:00 2001 From: Bradley Dice Date: Wed, 30 Oct 2019 00:38:57 -0400 Subject: [PATCH 6/6] Update CHANGELOG. --- package/CHANGELOG | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package/CHANGELOG b/package/CHANGELOG index c77c7c80cfd..c9a8f2db3a1 100644 --- a/package/CHANGELOG +++ b/package/CHANGELOG @@ -13,7 +13,7 @@ The rules for this file: * release numbers follow "Semantic Versioning" http://semver.org ------------------------------------------------------------------------------ -mm/dd/yy richardjgowers, kain88-de, lilyminium, p-j-smith +mm/dd/yy richardjgowers, kain88-de, lilyminium, p-j-smith, bdice * 0.21.0 @@ -30,6 +30,7 @@ Enhancements * New analysis.hydrogenbonds.HydrogenBondAnalysis class for the analysis of hydrogen bonds. Simpler interface, more extensible and better performance than analysis.hbonds.HydrogenBondAnalysis (PR #2237) + * GSD reader is now supported on Windows (Issue #1923, PR #2384) Deprecations * analysis.hbonds.HydrogenBondAnalysis will be deprecated in 1.0