Skip to content

Commit

Permalink
made parmed checking not require parmed import
Browse files Browse the repository at this point in the history
  • Loading branch information
richardjgowers committed Feb 9, 2020
1 parent 922b640 commit 3a11c9c
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 13 deletions.
21 changes: 17 additions & 4 deletions package/MDAnalysis/core/_get_readers.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@
from ..lib import util


def _is_parmed_object(thing):
module = inspect.getmodule(thing.__class__)

if module is None:
return False
else:
return module.__name__.startswith('parmed')


def get_reader_for(filename, format=None):
"""Return the appropriate trajectory reader class for `filename`.
Expand Down Expand Up @@ -66,7 +75,7 @@ def get_reader_for(filename, format=None):
:class:`~MDAnalysis.coordinates.memory.MemoryReader` is returned.
- If `filename` is an MMTF object,
:class:`~MDAnalysis.coordinates.MMTF.MMTFReader` is returned.
- If `filename` is a ParmEd Structure,
- If `filename` is a ParmEd Structure,
:class:`~MDAnalysis.coordinates.ParmEd.ParmEdReader` is returned.
- If `filename` is an iterable of filenames,
:class:`~MDAnalysis.coordinates.chain.ChainReader` is returned.
Expand All @@ -93,6 +102,8 @@ def get_reader_for(filename, format=None):
elif isinstance(filename, mmtf.MMTFDecoder):
# mmtf slurps mmtf object
format = 'MMTF'
elif _is_parmed_object(filename):
format = 'PARMED'
else:
# else let the guessing begin!
format = util.guess_format(filename)
Expand Down Expand Up @@ -178,7 +189,7 @@ def get_writer_for(filename, format=None, multiframe=None):
None)
else:
format = util.check_compressed_format(root, ext)

if format == '':
raise ValueError((
'File format could not be guessed from {}, '
Expand Down Expand Up @@ -236,6 +247,8 @@ def get_parser_for(filename, format=None):
if format is None:
if isinstance(filename, mmtf.MMTFDecoder):
format = 'mmtf'
elif _is_parmed_object(filename):
format = 'PARMED'
else:
format = util.guess_format(filename)
format = format.upper()
Expand Down Expand Up @@ -273,12 +286,12 @@ def get_converter_for(format):
TypeError
If no appropriate parser could be found.
.. versionadded:: 0.21.0
"""
try:
writer = _CONVERTERS[format]
except KeyError:
errmsg = 'No converter found for {} format'
raise_from(TypeError(errmsg.format(format)), None)
return writer
return writer
23 changes: 17 additions & 6 deletions testsuite/MDAnalysisTests/coordinates/test_parmed.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,23 @@

pmd = pytest.importorskip('parmed')

from MDAnalysis.core._get_readers import _is_parmed_object


@pytest.mark.parametrize('thing,reference', [
('foo', False),
([1,2,3], False),
(pmd.load_file(GRO), True),
])
def test_is_parmed_object(thing, reference):
assert _is_parmed_object(thing) == reference



class TestParmEdReaderGRO:
ref_filename = GRO

universe = mda.Universe(pmd.load_file(GRO), format='parmed')
universe = mda.Universe(pmd.load_file(GRO))
ref = mda.Universe(GRO)
prec = 3

Expand All @@ -68,10 +81,8 @@ def test_coordinates(self):


class BaseTestParmEdReader(_SingleFrameReader):

def setUp(self):
self.universe = mda.Universe(pmd.load_file(self.ref_filename),
format='parmed')
self.universe = mda.Universe(pmd.load_file(self.ref_filename))
self.ref = mda.Universe(self.ref_filename)
self.prec = 3

Expand Down Expand Up @@ -135,7 +146,7 @@ def output(self, universe):

@pytest.fixture(scope='class')
def roundtrip(self, ref):
u = mda.Universe(ref, format='parmed')
u = mda.Universe(ref)
return u.atoms.convert_to('PARMED')

def test_equivalent_connectivity_counts(self, universe, output):
Expand Down Expand Up @@ -232,7 +243,7 @@ class BaseTestParmEdConverterFromParmed(BaseTestParmEdConverter):

@pytest.fixture(scope='class')
def universe(self, ref):
return mda.Universe(ref, format='parmed')
return mda.Universe(ref)

def test_equivalent_connectivity_counts(self, ref, output):
for attr in ('atoms', 'bonds', 'angles', 'dihedrals', 'impropers',
Expand Down
5 changes: 2 additions & 3 deletions testsuite/MDAnalysisTests/topology/test_parmed.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ def filename(self):

@pytest.fixture
def universe(self, filename):
return mda.Universe(filename, format='parmed')
return mda.Universe(filename)

def test_creates_universe(self, filename):
u = mda.Universe(filename, format='parmed')
u = mda.Universe(filename)
assert isinstance(u, mda.Universe)

def test_bonds_total_counts(self, top, filename):
Expand Down Expand Up @@ -241,4 +241,3 @@ def test_dihedral_types(self, universe):
)):
assert dih.type[i].type.phi_k == phi_k
assert dih.type[i].type.per == per

0 comments on commit 3a11c9c

Please sign in to comment.