def __read_members(self): """reads the membership from a fixed set based on halo_ratios5.tsv run with the R version""" with open('testdata/row_memb-49.tsv') as member_mapfile: member_lines = member_mapfile.readlines() row_members = {} for line in member_lines: row = line.strip().split(' ') gene = row[0].replace("\"", "") for col in range(1, len(row)): if gene not in row_members.keys(): row_members[gene] = [] row_members[gene].append(int(row[col])) with open('testdata/col_memb-49.tsv') as member_mapfile: member_lines = member_mapfile.readlines() column_members = {} for line in member_lines: row = line.strip().split(' ') cond = row[0].replace("\"", "") for col in range(1, len(row)): if cond not in column_members.keys(): column_members[cond] = [] column_members[cond].append(int(row[col])) return memb.OrigMembership(sorted(row_members.keys()), sorted(column_members.keys()), row_members, column_members, self.config_params)
def test_add_cluster_to_column_error_full(self): # full row memberships can not be added to in the normal case m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3, 4, 5, 6, 7], 'C2': [] }, CONFIG_PARAMS) self.assertRaises(Exception, m.add_cluster_to_column, 'C1', 2)
def test_free_slots_for_row(self): """Happy path for add_cluster_to_row()""" m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) self.assertEquals(0, len(m.free_slots_for_row('R1')))
def test_replace_row_cluster(self): m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 1], 'R2': [] }, { 'C1': [3, 4, 3, 6, 7], 'C2': [] }, CONFIG_PARAMS) m.replace_row_cluster('R1', 1, 3) self.assertEquals({1, 3}, m.clusters_for_row('R1')) self.assertEquals({'R1'}, m.rows_for_cluster(3))
def test_replace_column_cluster(self): m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3, 4, 3, 6, 7], 'C2': [] }, CONFIG_PARAMS) m.replace_column_cluster('C1', 0, 1) self.assertEquals({1, 3, 4, 6, 7}, m.clusters_for_column('C1')) self.assertEquals({'C1'}, m.columns_for_cluster(1))
def test_add_cluster_to_row_error_full_same_cluster(self): """add_cluster_to_row() will only work if there are enough 0-slots""" m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) m.row_membs[1] = [2, 2] # fill the spaces self.assertRaises(Exception, m.add_cluster_to_row, 'R2', 2)
def test_add_cluster_to_column_full_force(self): # full col memberships can be added to if forced m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3, 4, 5, 6, 7], 'C2': [] }, CONFIG_PARAMS) m.add_cluster_to_column('C1', 2, force=True) self.assertEquals({2, 3, 4, 5, 6, 7}, m.clusters_for_column('C1')) self.assertEquals({'C1'}, m.columns_for_cluster(2))
def test_add_cluster_to_row_full_force(self): # full row memberships can be added to with the force switch m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) m.add_cluster_to_row('R1', 3, True) self.assertEquals({1, 3, 5}, m.clusters_for_row('R1')) self.assertEquals({'R1'}, m.rows_for_cluster(3))
def test_add_cluster_to_row_twice(self): """allow to add duplicate clusters""" m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) m.add_cluster_to_row('R2', 1) m.add_cluster_to_row('R2', 1) self.assertEquals([1, 1], m.row_membs[1].tolist()) self.assertEquals({1}, m.clusters_for_row('R2')) self.assertEquals(1, m.num_clusters_for_row('R2'))
def test_add_cluster_to_column_twice(self): # allow to add duplicate clusters m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) m.add_cluster_to_column('C1', 4) m.add_cluster_to_column('C1', 4) self.assertEquals([3, 4, 4, 0, 0], m.col_membs[0].tolist()) self.assertEquals({3, 4}, m.clusters_for_column('C1')) self.assertEquals(2, m.num_clusters_for_column('C1'))
def test_constructor(self): """verify initialization""" m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) self.assertEquals(43, m.num_clusters()) self.assertEquals(2, m.num_clusters_per_row()) self.assertEquals(5, m.num_clusters_per_column()) self.assertEquals(0.5, m.probability_seeing_row_change()) self.assertEquals(1.0, m.probability_seeing_col_change()) self.assertEquals(1, m.max_changes_per_row()) self.assertEquals(5, m.max_changes_per_col()) self.assertEquals(1, m.min_cluster_rows_allowed()) self.assertEquals(5, m.max_cluster_rows_allowed()) self.assertEquals(0, m.min_cluster_columns_allowed()) self.assertEquals([1, 5], m.row_membs[0].tolist()) self.assertEquals([0, 0], m.row_membs[1].tolist()) self.assertEquals([3, 0, 0, 0, 0], m.col_membs[0].tolist()) self.assertEquals([0, 0, 0, 0, 0], m.col_membs[1].tolist()) self.assertEquals({1, 5}, m.clusters_for_row('R1')) self.assertEquals({3}, m.clusters_for_column('C1')) self.assertEquals(2, m.num_clusters_for_row('R1')) self.assertEquals(1, m.num_clusters_for_column('C1')) self.assertEquals({'R1'}, m.rows_for_cluster(1)) self.assertEquals({'C1'}, m.columns_for_cluster(3)) self.assertEquals(1, m.num_row_members(1)) self.assertEquals(0, m.num_row_members(7)) self.assertEquals(1, m.num_column_members(3)) self.assertEquals(0, m.num_column_members(7)) self.assertEquals([2, 3], m.clusters_not_in_row('R1', [1, 2, 3, 5])) self.assertEquals([1, 2, 5], m.clusters_not_in_column('C1', [1, 2, 3, 5])) self.assertTrue(m.is_row_in_cluster('R1', 1)) self.assertFalse(m.is_row_in_cluster('R1', 2)) self.assertTrue(m.is_column_in_cluster('C1', 3)) self.assertFalse(m.is_column_in_cluster('C1', 1))
def test_add_cluster_to_column(self): # happy path for add_cluster_to_column() m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) m.add_cluster_to_column('C1', 4) self.assertEquals({3, 4}, m.clusters_for_column('C1')) self.assertEquals(2, m.num_clusters_for_column('C1')) self.assertEquals({'C1'}, m.columns_for_cluster(4)) m.add_cluster_to_column('C2', 3) self.assertEquals({'C1', 'C2'}, m.columns_for_cluster(3)) self.assertEquals(2, m.num_column_members(3))
def test_add_cluster_to_row(self): """Happy path for add_cluster_to_row()""" m = memb.OrigMembership(['R1', 'R2'], ['C1', 'C2'], { 'R1': [1, 5], 'R2': [] }, { 'C1': [3], 'C2': [] }, CONFIG_PARAMS) m.add_cluster_to_row('R2', 3) self.assertEquals({3}, m.clusters_for_row('R2')) self.assertEquals(1, m.num_clusters_for_row('R2')) self.assertEquals({'R2'}, m.rows_for_cluster(3)) m.add_cluster_to_row('R2', 1) self.assertEquals({1, 3}, m.clusters_for_row('R2')) self.assertEquals(2, m.num_clusters_for_row('R2')) self.assertEquals({'R1', 'R2'}, m.rows_for_cluster(1)) self.assertEquals(2, m.num_row_members(1))
def __read_members(self): with open('testdata/row_membership.tsv') as member_mapfile: member_lines = member_mapfile.readlines() row_members = {} for line in member_lines: row = line.strip().split('\t') row_members[row[0]] = [int(row[1])] with open('testdata/column_membership.tsv') as member_mapfile: member_lines = member_mapfile.readlines() column_members = {} for line in member_lines: row = line.strip().split('\t') column_members[row[0]] = [int(cluster) for cluster in row[1].split(':')] return memb.OrigMembership(sorted(row_members.keys()), sorted(column_members.keys()), row_members, column_members, {'memb.num_clusters': 43, 'memb.clusters_per_row': 2, 'memb.clusters_per_col': 29 })