Source code for skchem.test.test_io.test_smiles
#! /usr/bin/env python
#
# Copyright (C) 2015-2016 Rich Lewis <rl403@cam.ac.uk>
# License: 3-clause BSD
""" Tests for smiles io functionality """
#test libraries
import pytest
#required for test
from ...io import read_smiles
from ...core import Mol
from ...resource import resource
[docs]class TestSmiles(object):
""" Test smiles io functionality """
[docs] def test_single_parsed(self):
""" Do we find a molecule in a single smiles file"""
df = read_smiles(resource('test_smiles', 'single_molecule.smiles'))
assert len(df) == 1
assert df[0].to_smiles() == 'C'
[docs] def test_multiple_parsed(self):
""" Do we find the exact number of molecules expected in a multi molecule smiles file?"""
df = read_smiles(resource('test_smiles', 'multi_molecule-simple.smiles'))
assert len(df) == 3
[docs] def test_title_line(self):
""" Test parsing a smiles file with a header. """
df = read_smiles(resource('test_smiles', 'header_set.smiles'), title_line=True)
assert len(df) == 3
[docs] def test_change_smiles_column(self):
""" Does it work with smiles at different positions """
df = read_smiles(resource('test_smiles', 'smiles_col_changed.smiles'), smiles_column=1)
assert list(map(lambda m: m.to_smiles(), df.structure)) == ['C', 'CC', 'CCC']
[docs] def test_name_column(self):
""" Can it set the index? """
df = read_smiles(resource('test_smiles', 'name_set.smiles'), name_column=1)
assert list(df.index) == ['methane', 'ethane', 'propane']
[docs] def test_properties(self):
""" Can we read other properties? """
multi_molecule_props = {'TEST_PROPERTY_A', 'TEST_PROPERTY_B', 'TEST_PROPERTY_C'}
df = read_smiles(resource('test_smiles', 'multi_molecule-properties.smiles'), title_line=True)
test = set(df.columns)
test.remove('structure')
assert test == multi_molecule_props
[docs] def test_bad_smiles(self):
""" Does it throw an error for an improper smiles code?"""
with pytest.raises(ValueError):
df = read_smiles(resource('test_smiles', 'multi_molecule-bad_smiles.smiles'), name_column=1, title_line=False, error_bad_mol=True)
[docs] def test_bad_chemistry(self):
""" Does it throw an error without force?"""
with pytest.raises(ValueError):
df = read_smiles(resource('test_smiles', 'multi_molecule-bad_chemistry.smiles'), name_column=1, title_line=False, error_bad_mol=True)
[docs] def test_bad_chemistry_force(self):
""" Can we force the parse? """
df = read_smiles(resource('test_smiles', 'multi_molecule-bad_chemistry.smiles'), name_column=1, title_line=False)
assert len(df) == 5