Source code for schrodinger.test.hypothesis.strategies.structures
import os
import pathlib
from hypothesis import strategies
from schrodinger import structure
from schrodinger.test import mmshare_testfile
BLACKLISTED_SUBDIRS = (
    # these files are broken, we use them in tests that check that the proper
    # exceptions and error messages are issued in such cases
    'error_examples',
    # same as the previous one, but in the LD preprocessor
    'livedesign/preprocessor/error_examples',
    # these sdf files include queries, which mmmdl does not support
    'livedesign/substructure')
def _normalize_path(filepath):
    return str(pathlib.Path(filepath))
def _is_blacklisted_path(dirpath):
    return any(True for subpath in BLACKLISTED_SUBDIRS
               if _normalize_path(dirpath) == _normalize_path(
                   mmshare_testfile(subpath)))
def _get_structure_files():
    """
    :return: A list of the structure containing files in the testfiles
             directory, excluding those in blacklisted subdirectories.
    :rtype: list
    """
    structure_files = []
    testfiles = mmshare_testfile('')
    extensions = ('.mae', '.maegz', '.mae.gz', '.pdb', '.pdb.gz', '.sdf')
    for dirpath, dirnames, filenames in os.walk(testfiles, topdown=True):
        if _is_blacklisted_path(dirpath):
            dirnames[:] = []
            continue
        for fname in filenames:
            if fname.endswith(extensions):
                structure_files.append(os.path.join(dirpath, fname))
    assert len(structure_files) > 1000  # sanity check that we're really
    # collecting files here
    return structure_files
_STRUCTURE_FILES = _get_structure_files()  # So that we only do this once
[docs]@strategies.composite
def structure_files(draw):
    """
    :return: The full path of a structure-containing file in the testfiles
             directory
    :rtype: str
    """
    return draw(strategies.sampled_from(_STRUCTURE_FILES)) 
[docs]@strategies.composite
def structures(draw):
    """
    :return: A structure drawn from one of the files in the testfiles directory
    :rtype: structure.Structure
    """
    filename = draw(structure_files())
    cts = [ct for ct in structure.StructureReader(filename)]
    return draw(strategies.sampled_from(cts))