def test_efm_duplicates_content(self): V = np.array([[1, 2, -1, -1], [2, 4, -2, 0], [-1, -2, 1, 2]]) efm_id2i = {0: 0, 1: 1, 2: 2, 3: 3} efm_duplicates = get_efm_duplicates(V, efm_id2i) self.assertSetEqual({0, 1}, set(efm_duplicates[0]), 'Was supposed to find [0, 1] as duplicates, found %s' % efm_duplicates[0])
def test_efm_duplicates_len(self): V = np.array([[1, 2, -1, -1], [2, 4, -2, 0], [-1, -2, 1, 2]]) efm_id2i = {0: 0, 1: 1, 2: 2, 3: 3} efm_duplicates = get_efm_duplicates(V, efm_id2i) self.assertEqual(1, len(efm_duplicates), 'Was supposed to find one group of duplicates, found %d' % len(efm_duplicates))
def test_remove_efm_duplicates_V_shape(self): V = np.array([[1, 2, -1, -1], [2, 4, -2, 0], [-1, -2, 1, 2]]) efm_id2i = {0: 0, 1: 1, 2: 2, 3: 3} efm_duplicates = get_efm_duplicates(V, efm_id2i) V_new, new_efm_id2i, efm_id2gr_id = remove_efm_duplicates(V, efm_duplicates, efm_id2i) self.assertTupleEqual((3, 3), V_new.shape, 'Was supposed to get 3x3 V, got %s' % [str(it) for it in V_new.shape])
def test_remove_efm_duplicates_V_content(self): V = np.array([[1, 2, -1, -1], [2, 4, -2, 0], [-1, -2, 1, 2]]) efm_id2i = {0: 0, 1: 1, 2: 2, 3: 3} efm_duplicates = get_efm_duplicates(V, efm_id2i) V_new, new_efm_id2i, efm_id2gr_id = remove_efm_duplicates(V, efm_duplicates, efm_id2i) new_efm_index = new_efm_id2i[efm_id2gr_id[0]] r1_c = V_new[0, new_efm_index] r2_c = V_new[1, new_efm_index] ratio = r2_c / r1_c self.assertEqual(2, ratio, 'Was supposed to get 2 as a ratio between the coefficients of r1 and r2 in the grouped EFMs, got %g' % ratio)
def remove_efm_duplicates(self): efm_id2i = self.get_main_efm_id2i() V = self.get_main_V(efm_id2i=efm_id2i) efm_id_groups = get_efm_duplicates(V, efm_id2i) gr_i = 0 for efm_ids in efm_id_groups: grouped_efm_id, gr_i = get_unique_id(self.efm_id2i, 'efm_type', gr_i) self.folded_efms.add(grouped_efm_id) self.efm_id2gr_id.update({efm_id: grouped_efm_id for efm_id in efm_ids}) self.gr_id2efm_ids[grouped_efm_id] = efm_ids self.efm_id2i[grouped_efm_id] = self.V.shape[1] sample_efm_index = self.efm_id2i[efm_ids[0]] self.V = np.concatenate((self.V, self.V[:, (sample_efm_index, )]), axis=1) self.efm_ids -= set(efm_ids) self.efm_ids.add(grouped_efm_id)