The package rpms/python-MDAnalysis.git has added or updated architecture specific content
in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/python-MDAnalysis.git/commit/?id=....
Change:
+%ifarch armv7hl i686
Thanks.
Full change:
============
commit a813845088a6806a8bbced723fbb8a99b325a5d4
Author: Dominik 'Rathann' Mierzejewski <dominik(a)greysector.net>
Date: Thu Jun 22 15:26:28 2017 +0200
update to 0.16.1
- fix endianness issues on BE arches (ppc64, s390x)
(
https://github.com/MDAnalysis/mdanalysis/issues/1424)
- increase test process timeout (was timing out on aarch64)
- backport more fixes from git
- fix test failures on 32bit
(
https://github.com/MDAnalysis/mdanalysis/issues/1362)
- drop obsolete patches
- add new dependencies (joblib, mmtf, mock, psutil)
- fix netcdf4-python dependencies (need python2-netcdf4, actually)
- switch to nosetests while strange test failures are investigated
(
https://github.com/MDAnalysis/mdanalysis/issues/1360)
- add a link to upstream-recommended way of running tests
- modernize python module dependencies
diff --git a/.gitignore b/.gitignore
index fa0679b..6561db0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
/Documentation.zip
/MDAnalysis-0.14.0.tar.gz
/MDAnalysisTests-0.14.0.tar.gz
+/MDAnalysis-0.16.1.tar.gz
+/MDAnalysisDocs-0.16.1.tar.gz
+/MDAnalysisTests-0.16.1.tar.gz
diff --git a/python-MDAnalysis-endian.patch b/python-MDAnalysis-endian.patch
new file mode 100644
index 0000000..7ec8277
--- /dev/null
+++ b/python-MDAnalysis-endian.patch
@@ -0,0 +1,182 @@
+diff -up MDAnalysis-0.16.1/MDAnalysis/coordinates/TRZ.py.endian
MDAnalysis-0.16.1/MDAnalysis/coordinates/TRZ.py
+--- MDAnalysis-0.16.1/MDAnalysis/coordinates/TRZ.py.endian 2017-06-03 23:35:56.000000000
+0200
++++ MDAnalysis-0.16.1/MDAnalysis/coordinates/TRZ.py 2017-06-22 09:33:09.949341714 +0200
+@@ -180,46 +180,46 @@ class TRZReader(base.ReaderBase):
+ **self._ts_kwargs)
+
+ # structured dtype of a single trajectory frame
+- readarg = str(n_atoms) + 'f4'
++ readarg = str(n_atoms) + '<f4'
+ frame_contents = [
+- ('p1', 'i4'),
+- ('nframe', 'i4'),
+- ('ntrj', 'i4'),
+- ('natoms', 'i4'),
+- ('treal', 'f8'),
+- ('p2', '2i4'),
+- ('box', '9f8'),
+- ('p3', '2i4'),
+- ('pressure', 'f8'),
+- ('ptensor', '6f8'),
+- ('p4', '3i4'),
+- ('etot', 'f8'),
+- ('ptot', 'f8'),
+- ('ek', 'f8'),
+- ('T', 'f8'),
+- ('p5', '6i4'),
++ ('p1', '<i4'),
++ ('nframe', '<i4'),
++ ('ntrj', '<i4'),
++ ('natoms', '<i4'),
++ ('treal', '<f8'),
++ ('p2', '<2i4'),
++ ('box', '<9f8'),
++ ('p3', '<2i4'),
++ ('pressure', '<f8'),
++ ('ptensor', '<6f8'),
++ ('p4', '<3i4'),
++ ('etot', '<f8'),
++ ('ptot', '<f8'),
++ ('ek', '<f8'),
++ ('T', '<f8'),
++ ('p5', '<6i4'),
+ ('rx', readarg),
+- ('pad2', '2i4'),
++ ('pad2', '<2i4'),
+ ('ry', readarg),
+- ('pad3', '2i4'),
++ ('pad3', '<2i4'),
+ ('rz', readarg),
+- ('pad4', '2i4'),
++ ('pad4', '<2i4'),
+ ('vx', readarg),
+- ('pad5', '2i4'),
++ ('pad5', '<2i4'),
+ ('vy', readarg),
+- ('pad6', '2i4'),
++ ('pad6', '<2i4'),
+ ('vz', readarg)]
+ if not self.has_force:
+- frame_contents += [('pad7', 'i4')]
++ frame_contents += [('pad7', '<i4')]
+ else:
+ frame_contents += [
+- ('pad7', '2i4'),
++ ('pad7', '<2i4'),
+ ('fx', readarg),
+- ('pad8', '2i4'),
++ ('pad8', '<2i4'),
+ ('fy', readarg),
+- ('pad9', '2i4'),
++ ('pad9', '<2i4'),
+ ('fz', readarg),
+- ('pad10', 'i4')]
++ ('pad10', '<i4')]
+ self._dtype = np.dtype(frame_contents)
+
+ self._read_next_timestep()
+@@ -227,11 +227,11 @@ class TRZReader(base.ReaderBase):
+ def _read_trz_header(self):
+ """Reads the header of the trz trajectory"""
+ self._headerdtype = np.dtype([
+- ('p1', 'i4'),
++ ('p1', '<i4'),
+ ('title', '80c'),
+- ('p2', '2i4'),
+- ('force', 'i4'),
+- ('p3', 'i4')])
++ ('p2', '<2i4'),
++ ('force', '<i4'),
++ ('p3', '<i4')])
+ data = np.fromfile(self.trzfile, dtype=self._headerdtype, count=1)
+ self.title = ''.join(c.decode('utf-8') for c in
data['title'][0]).strip()
+ if data['force'] == 10:
+@@ -478,52 +478,52 @@ class TRZWriter(base.WriterBase):
+
+ self._writeheader(title)
+
+- floatsize = str(n_atoms) + 'f4'
++ floatsize = str(n_atoms) + '<f4'
+ self.frameDtype = np.dtype([
+- ('p1a', 'i4'),
+- ('nframe', 'i4'),
+- ('ntrj', 'i4'),
+- ('natoms', 'i4'),
+- ('treal', 'f8'),
+- ('p1b', 'i4'),
+- ('p2a', 'i4'),
+- ('box', '9f8'),
+- ('p2b', 'i4'),
+- ('p3a', 'i4'),
+- ('pressure', 'f8'),
+- ('ptensor', '6f8'),
+- ('p3b', 'i4'),
+- ('p4a', 'i4'),
+- ('six', 'i4'),
+- ('etot', 'f8'),
+- ('ptot', 'f8'),
+- ('ek', 'f8'),
+- ('T', 'f8'),
+- ('blanks', '2f8'),
+- ('p4b', 'i4'),
+- ('p5a', 'i4'),
++ ('p1a', '<i4'),
++ ('nframe', '<i4'),
++ ('ntrj', '<i4'),
++ ('natoms', '<i4'),
++ ('treal', '<f8'),
++ ('p1b', '<i4'),
++ ('p2a', '<i4'),
++ ('box', '<9f8'),
++ ('p2b', '<i4'),
++ ('p3a', '<i4'),
++ ('pressure', '<f8'),
++ ('ptensor', '<6f8'),
++ ('p3b', '<i4'),
++ ('p4a', '<i4'),
++ ('six', '<i4'),
++ ('etot', '<f8'),
++ ('ptot', '<f8'),
++ ('ek', '<f8'),
++ ('T', '<f8'),
++ ('blanks', '<2f8'),
++ ('p4b', '<i4'),
++ ('p5a', '<i4'),
+ ('rx', floatsize),
+- ('p5b', 'i4'),
+- ('p6a', 'i4'),
++ ('p5b', '<i4'),
++ ('p6a', '<i4'),
+ ('ry', floatsize),
+- ('p6b', 'i4'),
+- ('p7a', 'i4'),
++ ('p6b', '<i4'),
++ ('p7a', '<i4'),
+ ('rz', floatsize),
+- ('p7b', 'i4'),
+- ('p8a', 'i4'),
++ ('p7b', '<i4'),
++ ('p8a', '<i4'),
+ ('vx', floatsize),
+- ('p8b', 'i4'),
+- ('p9a', 'i4'),
++ ('p8b', '<i4'),
++ ('p9a', '<i4'),
+ ('vy', floatsize),
+- ('p9b', 'i4'),
+- ('p10a', 'i4'),
++ ('p9b', '<i4'),
++ ('p10a', '<i4'),
+ ('vz', floatsize),
+- ('p10b', 'i4')])
++ ('p10b', '<i4')])
+
+ def _writeheader(self, title):
+ hdt = np.dtype([
+- ('pad1', 'i4'), ('title', '80c'),
('pad2', 'i4'),
+- ('pad3', 'i4'), ('nrec', 'i4'),
('pad4', 'i4')])
++ ('pad1', '<i4'), ('title', '80c'),
('pad2', '<i4'),
++ ('pad3', '<i4'), ('nrec', '<i4'),
('pad4', '<i4')])
+ out = np.zeros((), dtype=hdt)
+ out['pad1'], out['pad2'] = 80, 80
+ out['title'] = title + ' ' * (80 - len(title))
diff --git a/python-MDAnalysis-git.patch b/python-MDAnalysis-git.patch
new file mode 100644
index 0000000..a282117
--- /dev/null
+++ b/python-MDAnalysis-git.patch
@@ -0,0 +1,199 @@
+diff -up MDAnalysis-0.16.1/MDAnalysis/core/groups.py.git
MDAnalysis-0.16.1/MDAnalysis/core/groups.py
+--- MDAnalysis-0.16.1/MDAnalysis/core/groups.py.git 2017-06-03 23:35:56.000000000 +0200
++++ MDAnalysis-0.16.1/MDAnalysis/core/groups.py 2017-06-17 19:46:04.348833981 +0200
+@@ -419,7 +419,7 @@ class GroupBase(_MutableBase):
+ ix, u = args
+
+ # indices for the objects I hold
+- self._ix = np.asarray(ix, dtype=np.int64)
++ self._ix = np.asarray(ix, dtype=np.intp)
+ self._u = u
+ self._cache = dict()
+
+@@ -2464,7 +2464,7 @@ class ComponentBase(_MutableBase):
+ --------
+ ix
+ """
+- return np.array([self.ix])
++ return np.array([self.ix], dtype=np.intp)
+
+
+ class Atom(ComponentBase):
+@@ -2736,7 +2736,7 @@ class UpdatingAtomGroup(AtomGroup):
+ ix = sum([sel.apply(bg) for sel in sels[1:]],
+ sels[0].apply(bg)).ix
+ else:
+- ix = np.array([],
dtype=np.int)
++ ix = np.array([], dtype=np.intp)
+ # Run back through AtomGroup init with this information to remake ourselves
+ super(UpdatingAtomGroup, self).__init__(ix, self.universe)
+ self.is_uptodate = True
+diff -up MDAnalysis-0.16.1/MDAnalysis/core/topology.py.git
MDAnalysis-0.16.1/MDAnalysis/core/topology.py
+--- MDAnalysis-0.16.1/MDAnalysis/core/topology.py.git 2017-06-03 23:35:56.000000000
+0200
++++ MDAnalysis-0.16.1/MDAnalysis/core/topology.py 2017-06-17 19:46:04.349833983 +0200
+@@ -125,12 +125,12 @@ def make_downshift_arrays(upshift, npare
+ counter += 1
+ # If parent is skipped, eg (0, 0, 2, 2, etc)
+ while counter != upshift[order[x:y][0]]:
+- downshift.append(np.array([], dtype=np.int))
++ downshift.append(np.array([], dtype=np.intp))
+ counter += 1
+- downshift.append(np.sort(np.array(order[x:y], copy=True, dtype=np.int)))
++ downshift.append(np.sort(np.array(order[x:y], copy=True, dtype=np.intp)))
+ # Add entries for childless parents at end of range
+ while counter < (nparents - 1):
+- downshift.append(np.array([], dtype=np.int))
++ downshift.append(np.array([], dtype=np.intp))
+ counter += 1
+ # Add None to end of array to force it to be of type Object
+ # Without this, a rectangular array gets squashed into a single array
+@@ -210,18 +210,18 @@ class TransTable(object):
+
+ # built atom-to-residue mapping, and vice-versa
+ if atom_resindex is None:
+- self._AR = np.zeros(n_atoms, dtype=np.int64)
++ self._AR = np.zeros(n_atoms, dtype=np.intp)
+ else:
+- self._AR = atom_resindex.copy()
++ self._AR = np.asarray(atom_resindex, dtype=np.intp).copy()
+ if not len(self._AR) == n_atoms:
+ raise ValueError("atom_resindex must be len n_atoms")
+ self._RA = make_downshift_arrays(self._AR, n_residues)
+
+ # built residue-to-segment mapping, and vice-versa
+ if residue_segindex is None:
+- self._RS = np.zeros(n_residues, dtype=np.int64)
++ self._RS = np.zeros(n_residues, dtype=np.intp)
+ else:
+- self._RS = residue_segindex.copy()
++ self._RS = np.asarray(residue_segindex, dtype=np.intp).copy()
+ if not len(self._RS) == n_residues:
+ raise ValueError("residue_segindex must be len n_residues")
+ self._SR = make_downshift_arrays(self._RS, n_segments)
+diff -up
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_psa.py.git
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_psa.py
+---
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_psa.py.git 2017-06-03
23:35:56.000000000 +0200
++++
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_psa.py 2017-06-17
19:46:04.349833983 +0200
+@@ -221,7 +221,8 @@ class _BaseHausdorffDistance(TestCase):
+ for a given Hausdorff metric, h.'''
+ forward = self.h(self.path_1, self.path_2)
+ reverse = self.h(self.path_2, self.path_1)
+- self.assertEqual(forward, reverse)
++ # lower precision on 32bit
++ assert_almost_equal(forward, reverse, decimal=15)
+
+ def test_hausdorff_value(self):
+ '''Test that the undirected Hausdorff
+diff -up
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_index_dtype.py.git
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_index_dtype.py
+---
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_index_dtype.py.git 2017-06-17
19:46:04.350833984 +0200
++++
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_index_dtype.py 2017-06-17
19:46:04.350833984 +0200
+@@ -0,0 +1,92 @@
++# -*- Mode: python; tab-width: 4; indent-tabs-mode:nil; coding:utf-8 -*-
++# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 fileencoding=utf-8
++#
++# MDAnalysis ---
http://www.mdanalysis.org
++# Copyright (c) 2006-2016 The MDAnalysis Development Team and contributors
++# (see the file AUTHORS for the full list of names)
++#
++# Released under the GNU Public Licence, v2 or any higher version
++#
++# Please cite your use of MDAnalysis in published work:
++#
++# R. J. Gowers, M. Linke, J. Barnoud, T. J. E. Reddy, M. N. Melo, S. L. Seyler,
++# D. L. Dotson, J. Domanski, S. Buchoux, I. M. Kenney, and O. Beckstein.
++# MDAnalysis: A Python package for the rapid analysis of molecular dynamics
++# simulations. In S. Benthall and S. Rostrup editors, Proceedings of the 15th
++# Python in Science Conference, pages 102-109, Austin, TX, 2016. SciPy.
++#
++# N. Michaud-Agrawal, E. J. Denning, T. B. Woolf, and O. Beckstein.
++# MDAnalysis: A Toolkit for the Analysis of Molecular Dynamics Simulations.
++# J. Comput. Chem. 32 (2011), 2319--2327, doi:10.1002/jcc.21787
++#
++
++"""32 bit compat tests
++
++Tests for making sure that integer arrays used for indexing use `np.intp`.
++This dtype is important for platform independent indexing of other arrays.
++
++"""
++from __future__ import absolute_import
++
++import numpy as np
++from numpy.testing import (
++ assert_,
++)
++from MDAnalysisTests import make_Universe
++
++
++class TestIndexDtype(object):
++ def setUp(self):
++ self.u = make_Universe()
++
++ def tearDown(self):
++ del self.u
++
++ def test_ag_ix(self):
++ assert_(self.u.atoms.ix.dtype == np.intp)
++
++ def test_rg_ix(self):
++ assert_(self.u.residues.ix.dtype == np.intp)
++
++ def test_sg_ix(self):
++ assert_(self.u.segments.ix.dtype == np.intp)
++
++ def test_atom_ix_array(self):
++ assert_(self.u.atoms[0].ix_array.dtype == np.intp)
++
++ def test_residue_ix_array(self):
++ assert_(self.u.residues[0].ix_array.dtype == np.intp)
++
++ def test_segment_ix_array(self):
++ assert_(self.u.segments[0].ix_array.dtype == np.intp)
++
++ def test_atomgroup_indices(self):
++ assert_(self.u.atoms.indices.dtype == np.intp)
++
++ def test_atomgroup_residue_upshift(self):
++ assert_(self.u.atoms.resindices.dtype == np.intp)
++
++ def test_atomgroup_segment_upshift(self):
++ assert_(self.u.atoms.segindices.dtype == np.intp)
++
++ def test_residuegroup_atom_downshift(self):
++ # downshift arrays are a list (one for each residue)
++ assert_(all((arr.dtype == np.intp)
++ for arr in self.u.residues.indices))
++
++ def test_residuegroup_resindices(self):
++ assert_(self.u.residues.resindices.dtype == np.intp)
++
++ def test_residuegroup_segment_upshift(self):
++ assert_(self.u.residues.segindices.dtype == np.intp)
++
++ def test_segmentgroup_atom_downshift(self):
++ assert_(all((arr.dtype == np.intp)
++ for arr in self.u.segments.indices))
++
++ def test_segmentgroup_residue_downshift(self):
++ assert_(all((arr.dtype == np.intp)
++ for arr in self.u.segments.resindices))
++
++ def test_segmentgroup_segindices(self):
++ assert_(self.u.segments.segindices.dtype == np.intp)
+diff -up
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_topology.py.git
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_topology.py
+---
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_topology.py.git 2017-06-03
23:35:56.000000000 +0200
++++
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/core/test_topology.py 2017-06-17
19:46:04.349833983 +0200
+@@ -476,12 +476,12 @@ class TestDownshiftArrays(object):
+ def test_downshift_dtype_square(self):
+ out = make_downshift_arrays(self.square, self.square_size)
+ assert_(out.dtype == object)
+- assert_(out[0].dtype == np.int64)
++ assert_(out[0].dtype == np.intp)
+
+ def test_downshift_dtype_ragged(self):
+ out = make_downshift_arrays(self.ragged, self.ragged_size)
+ assert_(out.dtype == object)
+- assert_(out[0].dtype == np.int64)
++ assert_(out[0].dtype == np.intp)
+
+ # Check shape and size
+ # Shape should be size N+1 as None is appended
diff --git a/python-MDAnalysis-issue-765.patch b/python-MDAnalysis-issue-765.patch
deleted file mode 100644
index c6a630c..0000000
--- a/python-MDAnalysis-issue-765.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-diff -up MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_mol2.py.issue765
MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_mol2.py
---- MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_mol2.py.issue765 2016-02-28
14:04:32.000000000 +0100
-+++ MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_mol2.py 2016-03-14
12:57:53.847293904 +0100
-@@ -17,7 +17,8 @@ from six.moves import range
-
- import tempdir
- import os
--from numpy.testing import *
-+from numpy.testing import (assert_equal,assert_raises, assert_array_equal,
-+ assert_array_almost_equal, TestCase)
-
- from MDAnalysisTests.datafiles import mol2_molecules, mol2_molecule,
mol2_broken_molecule
- from MDAnalysis import Universe
-diff -up MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_pdbqt.py.issue765
MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_pdbqt.py
---- MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_pdbqt.py.issue765 2016-02-28
14:04:32.000000000 +0100
-+++ MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_pdbqt.py 2016-03-14
12:57:53.847293904 +0100
-@@ -18,7 +18,7 @@ import MDAnalysis
- from MDAnalysis.tests.datafiles import PDBQT_input, PDBQT_querypdb
- from MDAnalysis.lib.NeighborSearch import AtomNeighborSearch
-
--from numpy.testing import *
-+from numpy.testing import assert_equal, TestCase
-
- import os
- import tempdir
-diff -up MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_reader_api.py.issue765
MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_reader_api.py
----
MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_reader_api.py.issue765 2016-02-28
14:04:32.000000000 +0100
-+++ MDAnalysisTests-0.14.0/MDAnalysisTests/coordinates/test_reader_api.py 2016-03-14
12:57:53.847293904 +0100
-@@ -16,7 +16,7 @@
-
- from MDAnalysis.coordinates.base import Timestep, SingleFrameReader, Reader
-
--from numpy.testing import *
-+from numpy.testing import assert_equal, assert_raises
- import numpy as np
-
- """
-diff -up MDAnalysisTests-0.14.0/MDAnalysisTests/test_nuclinfo.py.issue765
MDAnalysisTests-0.14.0/MDAnalysisTests/test_nuclinfo.py
---- MDAnalysisTests-0.14.0/MDAnalysisTests/test_nuclinfo.py.issue765 2015-10-05
07:06:54.000000000 +0200
-+++ MDAnalysisTests-0.14.0/MDAnalysisTests/test_nuclinfo.py 2016-03-14 12:57:53.847293904
+0100
-@@ -29,9 +29,8 @@ import MDAnalysis
- from MDAnalysis.analysis import nuclinfo
- from MDAnalysis.tests.datafiles import NUCL
-
--from numpy.testing import *
-+from numpy.testing import assert_almost_equal ,assert_array_almost_equal, TestCase
-
--del test
- from nose.plugins.attrib import attr
-
-
-diff -up MDAnalysisTests-0.14.0/MDAnalysisTests/test_units.py.issue765
MDAnalysisTests-0.14.0/MDAnalysisTests/test_units.py
---- MDAnalysisTests-0.14.0/MDAnalysisTests/test_units.py.issue765 2016-02-28
14:04:32.000000000 +0100
-+++ MDAnalysisTests-0.14.0/MDAnalysisTests/test_units.py 2016-03-14 12:57:53.847293904
+0100
-@@ -17,7 +17,7 @@ from __future__ import unicode_literals
- import six
-
- import numpy as np
--from numpy.testing import *
-+from numpy.testing import assert_equal, assert_almost_equal, TestCase
-
- from MDAnalysis import units
- from MDAnalysis.core import flags
-diff -up MDAnalysisTests-0.14.0/MDAnalysisTests/test_velocities_forces.py.issue765
MDAnalysisTests-0.14.0/MDAnalysisTests/test_velocities_forces.py
---- MDAnalysisTests-0.14.0/MDAnalysisTests/test_velocities_forces.py.issue765 2015-10-05
07:06:54.000000000 +0200
-+++ MDAnalysisTests-0.14.0/MDAnalysisTests/test_velocities_forces.py 2016-03-14
12:57:53.847293904 +0100
-@@ -16,7 +16,7 @@
-
- import MDAnalysis
- import numpy as np
--from numpy.testing import *
-+from numpy.testing import assert_equal, assert_almost_equal, TestCase
- from nose.plugins.attrib import attr
-
- from MDAnalysis.tests.datafiles import GRO_velocity, PDB_xvf, TRR_xvf
diff --git a/python-MDAnalysis-napoleon.patch b/python-MDAnalysis-napoleon.patch
deleted file mode 100644
index 6ecc0cd..0000000
--- a/python-MDAnalysis-napoleon.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up MDAnalysis-0.13.0/doc/sphinx/source/conf.py.na
MDAnalysis-0.13.0/doc/sphinx/source/conf.py
---- MDAnalysis-0.13.0/doc/sphinx/source/conf.py.na 2016-01-15 23:40:29.000000000 +0100
-+++ MDAnalysis-0.13.0/doc/sphinx/source/conf.py 2016-02-09 10:38:01.249321104 +0100
-@@ -58,7 +58,7 @@ sys.path.insert(0, os.path.abspath('../.
- # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
- extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx',
- 'sphinx.ext.mathjax', 'sphinx.ext.viewcode',
-- 'sphinx.ext.napoleon',]
-+ 'sphinxcontrib.napoleon',]
- mathjax_path =
'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'
-
- # Add any paths that contain templates here, relative to this directory.
diff --git a/python-MDAnalysis-skip-tests-32bit.patch
b/python-MDAnalysis-skip-tests-32bit.patch
new file mode 100644
index 0000000..62df2fc
--- /dev/null
+++ b/python-MDAnalysis-skip-tests-32bit.patch
@@ -0,0 +1,169 @@
+diff -up
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py.skip-32bit
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py
+---
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py.skip-32bit 2017-06-19
01:36:59.433952609 +0200
++++
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py 2017-06-19
01:38:03.021343344 +0200
+@@ -283,21 +283,7 @@ inconsistent results")
+ assert_almost_equal(result_value, expected_value, decimal=-3,
+ err_msg="Unexpected value for Harmonic Ensemble
Similarity: {0:f}. Expected {1:f}.".format(result_value, expected_value))
+
+- def test_ces_to_self(self):
+- results, details = \
+- encore.ces([self.ens1, self.ens1],
+- clustering_method=encore.AffinityPropagationNative(preference = -3.0))
+- result_value = results[0,1]
+- expected_value = 0.
+- assert_almost_equal(result_value, expected_value,
+- err_msg="ClusteringEnsemble Similarity to itself not
zero: {0:f}".format(result_value))
+
+- def test_ces(self):
+- results, details = encore.ces([self.ens1, self.ens2])
+- result_value = results[0,1]
+- expected_value = 0.51
+- assert_almost_equal(result_value, expected_value, decimal=2,
+- err_msg="Unexpected value for Cluster Ensemble
Similarity: {0:f}. Expected {1:f}.".format(result_value, expected_value))
+
+ @dec.skipif(module_not_found('scipy'),
+ "Test skipped because scipy is not available.")
+@@ -330,13 +316,6 @@ inconsistent results")
+ assert_almost_equal(result_value, expected_value, decimal=1,
+ err_msg="Unexpected value for Dim. reduction Ensemble
Similarity: {0:f}. Expected {1:f}.".format(result_value, expected_value))
+
+- def test_ces_convergence(self):
+- expected_values = [0.3443593, 0.1941854, 0.06857104, 0.]
+- results = encore.ces_convergence(self.ens1, 5)
+- print (results)
+- for i,ev in enumerate(expected_values):
+- assert_almost_equal(ev, results[i], decimal=2,
+- err_msg="Unexpected value for Clustering Ensemble
similarity in convergence estimation")
+
+ @dec.skipif(module_not_found('scipy'),
+ "Test skipped because scipy is not available.")
+@@ -359,44 +338,8 @@ inconsistent results")
+ assert_almost_equal(stdev, expected_stdev, decimal=-2,
+ err_msg="Unexpected standard daviation for
bootstrapped samples in Harmonic Ensemble imilarity")
+
+- @dec.slow
+- def test_ces_error_estimation(self):
+- expected_average = 0.03
+- expected_stdev = 0.31
+- averages, stdevs = encore.ces([self.ens1, self.ens1],
+- estimate_error = True,
+- bootstrapping_samples=10,
+-
clustering_method=encore.AffinityPropagationNative(preference=-2.0),
+- selection="name CA and resnum 1-10")
+- average = averages[0,1]
+- stdev = stdevs[0,1]
+
+- assert_almost_equal(average, expected_average, decimal=1,
+- err_msg="Unexpected average value for bootstrapped
samples in Clustering Ensemble similarity")
+- assert_almost_equal(stdev, expected_stdev, decimal=0,
+- err_msg="Unexpected standard daviation for
bootstrapped samples in Clustering Ensemble similarity")
+
+- @dec.skipif(module_not_found('sklearn'),
+- "Test skipped because sklearn is not available.")
+- @dec.slow
+- def test_ces_error_estimation_ensemble_bootstrap(self):
+- # Error estimation using a method that does not take a distance
+- # matrix as input, and therefore relies on bootstrapping the ensembles
+- # instead
+- expected_average = 0.03
+- expected_stdev = 0.02
+- averages, stdevs = encore.ces([self.ens1, self.ens1],
+- estimate_error = True,
+- bootstrapping_samples=10,
+- clustering_method=encore.KMeans(n_clusters=2),
+- selection="name CA and resnum 1-10")
+- average = averages[0,1]
+- stdev = stdevs[0,1]
+-
+- assert_almost_equal(average, expected_average, decimal=1,
+- err_msg="Unexpected average value for bootstrapped
samples in Clustering Ensemble similarity")
+- assert_almost_equal(stdev, expected_stdev, decimal=1,
+- err_msg="Unexpected standard daviation for
bootstrapped samples in Clustering Ensemble similarity")
+
+ @dec.slow
+ @dec.skipif(module_not_found('scipy'),
+@@ -464,38 +407,6 @@ class TestEncoreClustering(TestCase):
+ del cls.ens1_template
+ del cls.ens2_template
+
+- @dec.slow
+- def test_clustering_one_ensemble(self):
+- cluster_collection = encore.cluster(self.ens1)
+- expected_value = 7
+- assert_equal(len(cluster_collection), expected_value,
+- err_msg="Unexpected results:
{0}".format(cluster_collection))
+-
+- @dec.slow
+- def test_clustering_two_ensembles(self):
+- cluster_collection = encore.cluster([self.ens1, self.ens2])
+- expected_value = 14
+- assert_equal(len(cluster_collection), expected_value,
+- err_msg="Unexpected results:
{0}".format(cluster_collection))
+-
+- @dec.slow
+- def test_clustering_two_methods(self):
+- cluster_collection = encore.cluster(
+- [self.ens1],
+- method=[encore.AffinityPropagationNative(),
+- encore.AffinityPropagationNative()])
+- assert_equal(len(cluster_collection[0]), len(cluster_collection[1]),
+- err_msg="Unexpected result:
{0}".format(cluster_collection))
+-
+- @dec.slow
+- def test_clustering_AffinityPropagationNative_direct(self):
+- method = encore.AffinityPropagationNative()
+- distance_matrix = encore.get_distance_matrix(self.ens1)
+- cluster_assignment, details = method(distance_matrix)
+- expected_value = 7
+- assert_equal(len(set(cluster_assignment)), expected_value,
+- err_msg="Unexpected result: {0}".format(
+- cluster_assignment))
+
+ @dec.slow
+ @dec.skipif(module_not_found('sklearn'),
+@@ -559,29 +470,7 @@ class TestEncoreClustering(TestCase):
+ assert_equal(len(cluster_collection), 10,
+ err_msg="Unexpected result:
{0}".format(cluster_collection))
+
+- @dec.slow
+- @dec.skipif(module_not_found('sklearn'),
+- "Test skipped because sklearn is not available.")
+- def test_clustering_two_methods_one_w_no_distance_matrix(self):
+- cluster_collection = encore.cluster(
+- [self.ens1],
+- method=[encore.KMeans(17),
+- encore.AffinityPropagationNative()])
+- print(cluster_collection)
+- assert_equal(len(cluster_collection[0]), len(cluster_collection[0]),
+- err_msg="Unexpected result:
{0}".format(cluster_collection))
+
+- @dec.slow
+- @dec.skipif(module_not_found('sklearn'),
+- "Test skipped because sklearn is not available.")
+- def test_sklearn_affinity_propagation(self):
+- cc1 = encore.cluster([self.ens1])
+- cc2 = encore.cluster([self.ens1],
+- method=encore.AffinityPropagation())
+- assert_equal(len(cc1), len(cc2),
+- err_msg="Native and sklearn implementations of affinity
"
+- "propagation don't agree: mismatch in number of
"
+- "clusters: {0} {1}".format(len(cc1), len(cc2)))
+
+
+
+@@ -672,15 +561,6 @@ class TestEncoreClusteringSklearn(TestCa
+ for j in range(i,dimension):
+ self.distance_matrix[i, j] = distances[i,j]
+
+- def test_one(self):
+- preference = -float(np.median(self.distance_matrix.as_array()) * 10.)
+- clustering_method = encore.AffinityPropagationNative(preference=preference)
+- ccs = encore.cluster(None,
+- distance_matrix=self.distance_matrix,
+- method=clustering_method)
+- assert_equal(self.n_clusters, len(ccs),
+- err_msg="Basic clustering test failed to give the right"
+- "number of clusters: {0} vs
{1}".format(self.n_clusters, len(ccs)))
+
+
+ class TestEncoreDimensionalityReduction(TestCase):
diff --git a/python-MDAnalysis-skip-tests-all.patch
b/python-MDAnalysis-skip-tests-all.patch
new file mode 100644
index 0000000..b4994bb
--- /dev/null
+++ b/python-MDAnalysis-skip-tests-all.patch
@@ -0,0 +1,17 @@
+diff -up
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py.skip
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py
+---
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py.skip 2017-06-03
23:35:56.000000000 +0200
++++
MDAnalysis-0.16.1/MDAnalysisTests-0.16.1/MDAnalysisTests/analysis/test_encore.py 2017-06-19
01:33:28.419635640 +0200
+@@ -479,13 +479,6 @@ class TestEncoreClustering(TestCase):
+ err_msg="Unexpected results:
{0}".format(cluster_collection))
+
+ @dec.slow
+- def test_clustering_three_ensembles_two_identical(self):
+- cluster_collection = encore.cluster([self.ens1, self.ens2, self.ens1])
+- expected_value = 40
+- assert_equal(len(cluster_collection), expected_value,
+- err_msg="Unexpected result:
{0}".format(cluster_collection))
+-
+- @dec.slow
+ def test_clustering_two_methods(self):
+ cluster_collection = encore.cluster(
+ [self.ens1],
diff --git a/python-MDAnalysis.spec b/python-MDAnalysis.spec
index 65454cf..28a9160 100644
--- a/python-MDAnalysis.spec
+++ b/python-MDAnalysis.spec
@@ -8,29 +8,40 @@
%endif
Name: python-%{pname}
-Version: 0.14.0
-Release: 5%{?dist}
+Version: 0.16.1
+Release: 3%{?dist}
Summary: Analyze and manipulate molecular dynamics trajectories
-License: GPLv2+ and BSD and MIT and NCSA and CC-BY-ND
+License: GPLv2+ and BSD and MIT and CC-BY-ND
# BSD:
+# MDAnalysis/lib/formats/*/xdrfile*
# MDAnalysis/lib/qcprot.pyx
-# MDAnalyslis/lib/transformations
+# MDAnalysis/lib/src/transformations/transformations.c
+# MDAnalysis/lib/transformations.py
# MIT:
-# src/KDTree
-# NCSA:
-# src/dcd
+# MDAnalysisTests-0.16.0/MDAnalysisTests/tempdir.py
# CC-BY-ND:
# doc/sphinx/source/logos
# GPLv2+:
# everything else
URL:
http://www.mdanalysis.org
-Source0:
https://pypi.python.org/packages/source/M/%{pname}/%{pname}-%{version}.ta...
-Source1:
https://pypi.python.org/packages/source/M/%{pname}Tests/%{pname}Tests-%{v...
-Source2:
https://github.com/%{pname}/mdanalysis/releases/download/release-%{versio...
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1305801
-Patch0: python-MDAnalysis-napoleon.patch
-#
https://github.com/MDAnalysis/mdanalysis/issues/765
-Patch1: python-MDAnalysis-issue-765.patch
+Source0:
https://files.pythonhosted.org/packages/source/M/%{pname}/%{pname}-%{vers...
+Source1:
https://files.pythonhosted.org/packages/source/M/%{pname}Tests/%{pname}Te...
+#Source2:
https://github.com/%{pname}/mdanalysis/releases/download/release-%{versio...
+Source2:
https://github.com/MDAnalysis/docs/archive/release-%{version}/%{pname}Doc...
+# backport patches from git develop branch
+# 39ad792
+# 8641226
+# eed7761
+Patch0: %{name}-git.patch
+# skip a failing test on non-x86_64 arches for now
+#
https://github.com/MDAnalysis/mdanalysis/issues/1389
+Patch1: %{name}-skip-tests-all.patch
+# skip some failing tests on 32bit arches for now
+#
https://github.com/MDAnalysis/mdanalysis/issues/1362
+Patch2: %{name}-skip-tests-32bit.patch
+# TRZ file reader assumes little-endian arch
+#
https://github.com/MDAnalysis/mdanalysis/issues/1424
+Patch3: %{name}-endian.patch
# we don't want to provide private python extension libs in python2 dirs
%global __provides_exclude_from ^%{python2_sitearch}/.*\\.so$
@@ -52,34 +63,41 @@ and as such it is easily extensible.
%package -n python2-%{pname}
Summary: %{summary}
-Requires: netcdf4-python
-Requires: numpy
-Requires: python-biopython
-Requires: python-GridDataFormats
-Requires: python-matplotlib
-Requires: python-networkx
-Requires: python-seaborn
-Requires: scipy
-BuildRequires: Cython
-BuildRequires: numpy
+Requires: python2-biopython
+Requires: python2-GridDataFormats
+Requires: python2-joblib
+Requires: python2-matplotlib
+Requires: python2-mmtf
+Requires: python2-networkx
+Requires: python2-numpy
+Requires: python2-scipy
+# optional deps
+# this should also include matplotlib and scipy,
+# but their lack is not handled gracefully
+#
https://github.com/MDAnalysis/mdanalysis/issues/1361
+Recommends: python2-netcdf4
+Recommends: python2-scikit-learn
+Recommends: python2-seaborn
+BuildRequires: python2-Cython
BuildRequires: python2-devel
-BuildRequires: python-setuptools
+BuildRequires: python2-numpy
+BuildRequires: python2-setuptools
%if 0%{?build_docs}
-BuildRequires: python-sphinx
-%if 0%{?fedora} < 24
-BuildRequires: python-sphinxcontrib-napoleon
-%endif
-%else
-BuildRequires: unzip
+BuildRequires: python2-sphinx
%endif
# for tests
-BuildRequires: netcdf4-python
-BuildRequires: python-biopython
-BuildRequires: python-GridDataFormats
-BuildRequires: python-matplotlib
-BuildRequires: python-networkx
-BuildRequires: python-nose
-BuildRequires: python-tempdir
+BuildRequires: python2-biopython
+BuildRequires: python2-GridDataFormats
+BuildRequires: python2-joblib
+BuildRequires: python2-matplotlib
+BuildRequires: python2-mmtf
+BuildRequires: python2-mock
+BuildRequires: python2-netcdf4
+BuildRequires: python2-networkx
+BuildRequires: python2-nose
+BuildRequires: python2-psutil
+BuildRequires: python2-scikit-learn
+BuildRequires: python2-tempdir
# MDAnalysis/coordinates/xdrfile/src
Provides: bundled(xdrfile) = 0.7.7
%{?python_provide:%python_provide python2-%{pname}}
@@ -101,13 +119,14 @@ This package contains the documentation
%prep
%setup -q -n %{pname}-%{version} -a 1
-%if 0%{?fedora} < 24
-%patch0 -p1 -b .na
-%else
-pushd MDAnalysisTests-%{version}
-%patch1 -p1 -b .issue765
-popd
+%patch0 -p1 -b .git
+%ifnarch x86_64
+%patch1 -p1 -b .skip-all
+%ifarch armv7hl i686
+%patch2 -p1 -b .skip-32bit
+%endif
%endif
+%patch3 -p1 -b .endian
# force rebuild of Egg Metadata
rm -r %{pname}.egg-info
rm -r %{pname}Tests-%{version}/%{pname}Tests.egg-info
@@ -126,8 +145,9 @@
PYTHONPATH=%{buildroot}%{python2_sitelib}:%{buildroot}%{python2_sitearch}:$PWD \
%{__python2} setup.py develop -d $PWD
%{__python2} setup.py build_sphinx
%else
-mkdir -p build/sphinx/html
-unzip %{SOURCE2} -d build/sphinx/html
+mkdir -p build/sphinx
+tar xzf %{SOURCE2} -C build/sphinx
+mv build/sphinx/docs-release-%{version} build/sphinx/html
find build/sphinx/html -type d |xargs chmod 755
%endif
@@ -141,18 +161,22 @@ popd
%check
%if 1
-PYTHONPATH=%{buildroot}%{python2_sitelib}:%{buildroot}%{python2_sitearch}:$(pwd) \
- %{__python2} %{pname}Tests-%{version}/%{pname}Tests/mda_nosetests -v \
+#
https://github.com/MDAnalysis/mdanalysis/wiki/UnitTests#recommended
+cd %{pname}Tests-%{version}/%{pname}Tests
+PYTHONPATH=%{buildroot}%{python2_sitelib}:%{buildroot}%{python2_sitearch} \
+ nosetests-%{python2_version} \
+ -v \
+ --exe \
--processes=$(getconf _NPROCESSORS_ONLN) \
- --process-timeout=240
+ --process-timeout=600
%endif
%files -n python2-%{pname}
%license LICENSE
%doc AUTHORS CHANGELOG README SUMMARY.txt
-%{python2_sitearch}/%{pname}-%{version}-py2.?.egg-info
+%{python2_sitearch}/%{pname}-%{version}-py%{python2_version}.egg-info
%{python2_sitearch}/%{pname}
-%exclude %{python2_sitelib}/%{pname}Tests-%{version}-py2.?.egg-info
+%exclude %{python2_sitelib}/%{pname}Tests-%{version}-py%{python2_version}.egg-info
%exclude %{python2_sitelib}/%{pname}Tests
%files doc
@@ -160,6 +184,27 @@
PYTHONPATH=%{buildroot}%{python2_sitelib}:%{buildroot}%{python2_sitearch}:$(pwd)
%doc build/sphinx/html/*
%changelog
+* Thu Jun 22 2017 Dominik Mierzejewski <rpm(a)greysector.net> - 0.16.1-3
+- fix endianness issues on BE arches (ppc64, s390x)
+- increase test process timeout (was timing out on aarch64)
+
+* Sat Jun 17 2017 Dominik Mierzejewski <rpm(a)greysector.net> - 0.16.1-2
+- backport more fixes from git
+
+* Thu Jun 08 2017 Dominik Mierzejewski <rpm(a)greysector.net> - 0.16.1-1
+- update to 0.16.1
+- fix test failures on 32bit
+
+* Thu May 18 2017 Dominik Mierzejewski <rpm(a)greysector.net> - 0.16.0-1
+- update to 0.16.0
+- drop obsolete patches
+- add new dependencies (joblib, mmtf, mock, psutil)
+- fix netcdf4-python dependencies (need python2-netcdf4, actually)
+- switch to nosetests while strange test failures are investigated
+ (
https://github.com/MDAnalysis/mdanalysis/issues/1360)
+- add a link to upstream-recommended way of running tests
+- modernize python module dependencies
+
* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.14.0-5
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
diff --git a/sources b/sources
index d18f105..4032828 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
-082ebc4ebb2faa5c40f8724635bffc18 Documentation.zip
-51e62a1df93b4c84957594977acdbdbd MDAnalysis-0.14.0.tar.gz
-71e7366e1d41d091da4b2e2c8df16d88 MDAnalysisTests-0.14.0.tar.gz
+SHA512 (MDAnalysis-0.16.1.tar.gz) =
cad8af6907e77f2df7b411f41eb74d5936a547317bd3535a4ce427e9ad093257cdbf370adc4db1ce40440424a239464d755fd47d7542866a583a081e6fe52d28
+SHA512 (MDAnalysisDocs-0.16.1.tar.gz) =
4c6cfe69e925af51296f59389effd32787571e98edddf2ac4d031b473fc255acb3f526f3a1a240108effd09aa5126e7128372dcaf7ebec32ee7932d31b402144
+SHA512 (MDAnalysisTests-0.16.1.tar.gz) =
5da351f8fff3ec71c5eddc2c15f5862037e39c4c1ca18e74e9a1d815653dcda5729597775b2ce4f60df95822189c06dca1b7e86bb260d00443a6234e86328fe7