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]
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]