def setUp(self): super(DissimilarityMatrixTests, self).setUp() self.dm_1x1 = DissimilarityMatrix(self.dm_1x1_data, ['a']) self.dm_2x2 = DissimilarityMatrix(self.dm_2x2_data, ['a', 'b']) self.dm_2x2_asym = DissimilarityMatrix(self.dm_2x2_asym_data, ['a', 'b']) self.dm_3x3 = DissimilarityMatrix(self.dm_3x3_data, ['a', 'b', 'c']) self.dms = [self.dm_1x1, self.dm_2x2, self.dm_2x2_asym, self.dm_3x3] self.dm_f_lines = [ DM_1x1_F, DM_2x2_F, self.dm_2x2_asym_lines, self.dm_3x3_lines ] self.dm_fs = [ self.dm_1x1_f, self.dm_2x2_f, self.dm_2x2_asym_f, self.dm_3x3_f ] self.dm_shapes = [(1, 1), (2, 2), (2, 2), (3, 3)] self.dm_sizes = [1, 4, 4, 9] self.dm_transposes = [ self.dm_1x1, self.dm_2x2, DissimilarityMatrix([[0, -2], [1, 0]], ['a', 'b']), self.dm_3x3 ] self.dm_redundant_forms = [ np.array(self.dm_1x1_data), np.array(self.dm_2x2_data), np.array(self.dm_2x2_asym_data), np.array(self.dm_3x3_data) ]
def test_eq(self): """Test data equality between different matrix types.""" # Compare DistanceMatrix to DissimilarityMatrix, where both have the # same data and IDs. eq_dm = DissimilarityMatrix(self.dm_3x3_data, ['a', 'b', 'c']) self.assertTrue(self.dm_3x3 == eq_dm) self.assertTrue(eq_dm == self.dm_3x3)
def test_init_invalid_input(self): # Requires a DistanceMatrix. with self.assertRaises(TypeError): CategoricalStats(DissimilarityMatrix([[0, 2], [3, 0]], ['a', 'b']), [1, 2]) # Requires column if DataFrame. with self.assertRaises(ValueError): CategoricalStats(self.dm, self.df) # Cannot provide column if not data frame. with self.assertRaises(ValueError): CategoricalStats(self.dm, self.grouping, column='Group') # Column must exist in data frame. with self.assertRaises(ValueError): CategoricalStats(self.dm, self.df, column='foo') # All distance matrix IDs must be in data frame. with self.assertRaises(ValueError): CategoricalStats(self.dm, self.df_missing_id, column='Group') # Grouping vector length must match number of objects in dm. with self.assertRaises(ValueError): CategoricalStats(self.dm, [1, 2]) # Grouping vector cannot have only unique values. with self.assertRaises(ValueError): CategoricalStats(self.dm, [1, 2, 3]) # Grouping vector cannot have only a single group. with self.assertRaises(ValueError): CategoricalStats(self.dm, [1, 1, 1])
def test_init_invalid_input(self): """Raises error on invalid dissimilarity matrix data / IDs.""" # Empty data. with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix([], []) # Another type of empty data. with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix(np.empty((0, 0)), []) # Invalid number of dimensions. with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix([1, 2, 3], ['a']) # Dimensions don't match. with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix([[1, 2, 3]], ['a']) data = [[0, 1], [1, 0]] # Duplicate IDs. with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix(data, ['a', 'a']) # Number of IDs don't match dimensions. with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix(data, ['a', 'b', 'c']) # Non-hollow. data = [[0.0, 1.0], [1.0, 0.01]] with self.assertRaises(DissimilarityMatrixError): _ = DissimilarityMatrix(data, ['a', 'b'])
def test_init_from_dm(self): """Constructs a dm from a dm.""" ids = ['foo', 'bar', 'baz'] # DissimilarityMatrix -> DissimilarityMatrix exp = DissimilarityMatrix(self.dm_3x3_data, ids) obs = DissimilarityMatrix(self.dm_3x3, ids) self.assertEqual(obs, exp) # Test that copy of data is not made. self.assertTrue(obs.data is self.dm_3x3.data) obs.data[0, 1] = 424242 self.assertTrue(np.array_equal(obs.data, self.dm_3x3.data)) # DistanceMatrix -> DissimilarityMatrix exp = DissimilarityMatrix(self.dm_3x3_data, ids) obs = DissimilarityMatrix( DistanceMatrix(self.dm_3x3_data, ('a', 'b', 'c')), ids) self.assertEqual(obs, exp) # DissimilarityMatrix -> DistanceMatrix with self.assertRaises(DistanceMatrixError): _ = DistanceMatrix(self.dm_2x2_asym, ['foo', 'bar'])
def test_init_invalid_input(self): # Requires a DistanceMatrix. with self.assertRaises(TypeError): _ = CategoricalStats( DissimilarityMatrix([[0, 2], [3, 0]], ['a', 'b']), [1, 2]) # Grouping vector length must match number of objects in dm. with self.assertRaises(ValueError): _ = CategoricalStats(self.dm, [1, 2]) # Grouping vector cannot have only unique values. with self.assertRaises(ValueError): _ = CategoricalStats(self.dm, [1, 2, 3]) # Grouping vector cannot have only a single group. with self.assertRaises(ValueError): _ = CategoricalStats(self.dm, [1, 1, 1])
def test_constructor(self): """Test generating random dist mats with a specific constructor.""" exp = DissimilarityMatrix(np.asarray([[0.0]]), ['1']) obs = randdm(1, constructor=DissimilarityMatrix) self.assertEqual(obs, exp) self.assertEqual(type(obs), DissimilarityMatrix)
def test_init_no_ids(self): exp = DissimilarityMatrix(self.dm_3x3_data, ('0', '1', '2')) obs = DissimilarityMatrix(self.dm_3x3_data) self.assertEqual(obs, exp) self.assertEqual(obs['1', '2'], 12.0)