Esempio n. 1
0
class TestCustomFeature(unittest.TestCase):
    def setUp(self):
        self.feat = MDFeaturizer(pdbfile)
        self.traj = mdtraj.load(xtcfile, top=pdbfile)

        self.pairs = [[0, 1], [0, 2], [1, 2]]  #some distances
        self.means = [.5, .75, 1.0]  #bogus means
        self.U = np.array([[0, 1], [1, 0], [
            1, 1
        ]])  #bogus transformation, projects from 3 distances to 2 components

    def test_some_feature(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg, self.U.shape[1],
            self.pairs, self.means, self.U)

        Y_custom_feature = self.feat.transform(self.traj)
        # Directly call the function
        Y_function = some_call_to_mdtraj_some_operations_some_linalg(
            self.traj, self.pairs, self.means, self.U)
        assert np.allclose(Y_custom_feature, Y_function)

    def test_describe(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg, self.U.shape[1],
            self.pairs, self.means, self.U)
        self.feat.describe()

    def test_dimensionality(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg, self.U.shape[1],
            self.pairs, self.means, self.U)

        assert self.feat.dimension() == self.U.shape[1]
Esempio n. 2
0
class TestCustomFeature(unittest.TestCase):
    def setUp(self):
        self.feat = MDFeaturizer(pdbfile)
        self.traj = mdtraj.load(xtcfile, top=pdbfile)

        self.pairs = [[0, 1], [0, 2], [1, 2]]  #some distances
        self.means = [.5, .75, 1.0]  #bogus means
        self.U = np.array([[0, 1], [1, 0], [
            1, 1
        ]])  #bogus transformation, projects from 3 distances to 2 components

    def test_some_feature(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg, self.U.shape[1],
            self.pairs, self.means, self.U)

        Y_custom_feature = self.feat.transform(self.traj)
        # Directly call the function
        Y_function = some_call_to_mdtraj_some_operations_some_linalg(
            self.traj, self.pairs, self.means, self.U)
        assert np.allclose(Y_custom_feature, Y_function)

    def test_describe(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg, self.U.shape[1],
            self.pairs, self.means, self.U)
        desc = self.feat.describe()
        self.assertEqual(len(desc), self.feat.dimension())

    def test_describe_given(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg,
            self.U.shape[1],
            self.pairs,
            self.means,
            self.U,
            description=['foo'] * self.U.shape[1])
        desc = self.feat.describe()
        self.assertIn('foo', desc)
        self.assertEqual(len(desc), self.feat.dimension())

    def test_describe_given_str(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg,
            self.U.shape[1],
            self.pairs,
            self.means,
            self.U,
            description='test')
        desc = self.feat.describe()
        self.assertIn('test', desc)
        self.assertEqual(len(desc), self.feat.dimension())

    def test_describe_given_wrong(self):
        """ either a list matching input dim, or 1 element iterable allowed"""
        with self.assertRaises(ValueError) as cm:
            self.feat.add_custom_func(
                some_call_to_mdtraj_some_operations_some_linalg,
                self.U.shape[1] + 1,
                self.pairs,
                self.means,
                self.U,
                description=['ff', 'ff'])

    def test_describe_1_element_expand(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg,
            self.U.shape[1] + 1,
            self.pairs,
            self.means,
            self.U,
            description=['test'])
        desc = self.feat.describe()
        self.assertEqual(desc, ['test'] * 3)

    def test_dimensionality(self):
        self.feat.add_custom_func(
            some_call_to_mdtraj_some_operations_some_linalg, self.U.shape[1],
            self.pairs, self.means, self.U)

        assert self.feat.dimension() == self.U.shape[1]