def test_parse_csv(self): genes = self.parser.parse_csv('mock_data/test_gene.csv') expected_genes = [ Gene("AT1G01010", "1", "+", "3818", "5953", "6", "1"), Gene("AT1G01010", "1", "+", "3426", "5513", "6", "2"), Gene("AT1G01010", "1", "+", "3699", "5834", "6", "3"), Gene("AT1G01010", "1", "+", "3746", "5830", "6", "4"), Gene("AT1G01010", "1", "+", "3705", "5813", "6", "5") ] self.assertListEqual(expected_genes, genes)
def testNotEquals(self): mite1 = Mite("ABC", "4", "+", "132", "154", "NULL", "Unclassified", "Unclassified", "3") gene1 = Gene("gABC", "4", "+", "132", "154", "5", "3") mite2 = Mite("ABC", "3", "+", "132", "154", "NULL", "Unclassified", "Unclassified", "3") gene2 = Gene("gABC", "4", "+", "132", "154", "5", "3") pair1 = MiteGenePair(mite1, gene1) pair2 = MiteGenePair(mite2, gene2) self.assertNotEqual(pair1, pair2)
def test_pair_mites_prefers_nested_elements(self): #we assume that if a mite is nested in a gene (partially or completely), then it's associated with the gene #so we pair the two elements together rather than another gene that's not nested but may be closer mite1 = Mite("ABC", "4", "+", "132", "154", "NULL", "AA", "A", "3") gene1 = Gene("gABC", "4", "+", "100", "143", "5", "3") gene2 = Gene("gBBC", "4", "+", "155", "170", "5", "3") mites = [mite1] genes = [gene1, gene2] pairs = self.pairer.pair_mites_with_genes(mites, genes) expected_pairs = [MiteGenePair(mite1, gene1)] self.assertEqual(pairs, expected_pairs)
def test_pair_mites_uses_correlated_gene_if_provided(self): #we assume that correlated_gene was filled for a reason so we ignore our distance heuristic or any other heuristic mite1 = Mite("ABC", "4", "+", "132", "154", "gABC", "AA", "A", "3") gene1 = Gene("gABC", "4", "+", "0", "10", "5", "3") gene2 = Gene("gBBC", "4", "+", "155", "170", "5", "3") gene3 = Gene("gCBC", "4", "+", "100", "143", "5", "3") mites = [mite1] genes = [gene1, gene2, gene3] pairs = self.pairer.pair_mites_with_genes(mites, genes) expected_pairs = [MiteGenePair(mite1, gene1)] self.assertEqual(pairs, expected_pairs)
def test_pair_mites_uses_heuristics_if_correlated_not_exist(self): #go back to heuristics if we can't find the correlated gene mite1 = Mite("ABC", "4", "+", "132", "154", "ABC", "AA", "A", "3") gene1 = Gene("gDBC", "4", "+", "0", "10", "5", "3") gene2 = Gene("gBBC", "4", "+", "155", "170", "5", "3") gene3 = Gene("gCBC", "4", "+", "100", "143", "5", "3") mites = [mite1] genes = [gene1, gene2, gene3] pairs = self.pairer.pair_mites_with_genes(mites, genes) expected_pairs = [MiteGenePair(mite1, gene3)] self.assertEqual(pairs, expected_pairs)
def test_pair_mites_prefers_nested_elements_input_order_doesnt_matter( self): #sanity check mite1 = Mite("ABC", "4", "+", "132", "154", "NULL", "AA", "A", "3") gene1 = Gene("gABC", "4", "+", "100", "143", "5", "3") gene2 = Gene("gBBC", "4", "+", "155", "170", "5", "3") mites = [mite1] genes = [gene2, gene1] pairs = self.pairer.pair_mites_with_genes(mites, genes) expected_pairs = [MiteGenePair(mite1, gene1)] self.assertEqual(pairs, expected_pairs)
def test_pair_mites_correctly_separates_by_genome_location(self): mite1 = Mite("ABC1", "1", "+", "1", "10", "NULL", "AA", "A", "1") mite2 = Mite("ABC2", "1", "-", "21", "30", "NULL", "AA", "A", "1") mite3 = Mite("ABC3", "2", "+", "41", "50", "NULL", "AA", "A", "1") mite4 = Mite("ABC4", "2", "-", "61", "70", "NULL", "AA", "A", "1") mite5 = Mite("ABC5", "1", "+", "81", "90", "NULL", "AA", "A", "2") mite6 = Mite("ABC6", "1", "-", "101", "110", "NULL", "AA", "A", "2") mite7 = Mite("ABC7", "2", "+", "121", "130", "NULL", "AA", "A", "2") mite8 = Mite("ABC8", "2", "-", "141", "150", "NULL", "AA", "A", "2") gene1 = Gene("gABC1", "1", "+", "126", "135", "5", "1") gene2 = Gene("gABC2", "1", "-", "146", "155", "5", "1") gene3 = Gene("gABC3", "2", "+", "6", "15", "5", "1") gene4 = Gene("gABC4", "2", "-", "26", "35", "5", "1") gene5 = Gene("gABC5", "1", "+", "46", "55", "5", "2") gene6 = Gene("gABC6", "1", "-", "66", "75", "5", "2") gene7 = Gene("gABC7", "2", "+", "86", "95", "5", "2") gene8 = Gene("gABC8", "2", "-", "106", "115", "5", "2") mites = [mite1, mite2, mite3, mite4, mite5, mite6, mite7, mite8] genes = [gene1, gene2, gene3, gene4, gene5, gene6, gene7, gene8] pairs = self.pairer.pair_mites_with_genes(mites, genes) expected_pairs = [ MiteGenePair(mite1, gene1), MiteGenePair(mite2, gene1), MiteGenePair(mite3, gene4), MiteGenePair(mite4, gene4), MiteGenePair(mite5, gene6), MiteGenePair(mite6, gene6), MiteGenePair(mite7, gene8), MiteGenePair(mite8, gene8) ] self.assertEqual(pairs, expected_pairs)
def testEquals(self): mite = Mite("ABC", "4", "+", "132", "154", "NULL", "Unclassified", "Unclassified", "3") gene = Gene("gABC", "4", "+", "132", "154", "5", "3") pair1 = MiteGenePair(mite, gene) pair2 = MiteGenePair(mite, gene) self.assertEqual(pair1, pair2)
def test_index_elements(self): mite1 = Mite("ABC1", "1", "+", "1", "10", "NULL", "AA", "A", "1") mite2 = Mite("ABC2", "1", "-", "11", "20", "NULL", "AA", "A", "1") mite3 = Mite("ABC3", "2", "+", "21", "30", "NULL", "AA", "A", "1") mite4 = Mite("ABC4", "2", "-", "31", "40", "NULL", "AA", "A", "1") mite5 = Mite("ABC5", "1", "+", "41", "50", "NULL", "AA", "A", "2") mite6 = Mite("ABC6", "1", "-", "51", "60", "NULL", "AA", "A", "2") mite7 = Mite("ABC7", "2", "+", "61", "70", "NULL", "AA", "A", "2") mite8 = Mite("ABC8", "2", "-", "71", "80", "NULL", "AA", "A", "2") gene1 = Gene("gABC1", "1", "+", "76", "85", "5", "1") gene2 = Gene("gABC2", "1", "-", "5", "15", "5", "1") gene3 = Gene("gABC3", "2", "+", "16", "25", "5", "1") gene4 = Gene("gABC4", "2", "-", "26", "35", "5", "1") gene5 = Gene("gABC5", "1", "+", "36", "45", "5", "2") gene6 = Gene("gABC6", "1", "-", "46", "55", "5", "2") gene7 = Gene("gABC7", "2", "+", "56", "65", "5", "2") gene8 = Gene("gABC8", "2", "-", "66", "75", "5", "2") elements = [ mite1, mite2, mite3, mite4, gene5, gene6, gene7, gene8, gene1, gene2, gene3, gene4, mite5, mite6, mite7, mite8 ] expected_index = { 1: { 1: { "ABC1": mite1, "gABC1": gene1, "ABC2": mite2, "gABC2": gene2 }, 2: { "ABC3": mite3, "gABC3": gene3, "ABC4": mite4, "gABC4": gene4 } }, 2: { 1: { "ABC5": mite5, "gABC5": gene5, "ABC6": mite6, "gABC6": gene6 }, 2: { "ABC7": mite7, "gABC7": gene7, "ABC8": mite8, "gABC8": gene8 } } } index = self.indexer.index_elements(elements) self.assertEqual(expected_index, index)
def testToRowMiteInGene(self): mite = Mite("ABC", "4", "+", "132", "154", "NULL", "Unclassified", "Unclassified", "3") gene = Gene("gABC", "4", "+", "120", "160", "5", "3") pair = MiteGenePair(mite, gene) csv_row_string = pair.to_csv_row() expected_string = "ABC,4,+,132,154,3,,,,gABC,4,+,120,160,3,5,0" self.assertEqual(expected_string, csv_row_string)
def testConstructor(self): gene = Gene("ABC", "4", "+", "132", "154", "5", "3") self.assertEqual(gene.name, "ABC") self.assertEqual(gene.chromosome, 4) self.assertEqual(gene.strand, "+") self.assertEqual(gene.start, 132) self.assertEqual(gene.end, 154) self.assertEqual(gene.exon_count, 5) self.assertEqual(gene.genome_id, 3)
def test_pair_mites_with_genes_results_independent_of_strand(self): mite1 = Mite("ABC", "4", "+", "132", "154", "NULL", "AA", "A", "3") mite2 = Mite("ABC1", "4", "+", "0", "15", "NULL", "AA", "A", "3") mite3 = Mite("ABC2", "4", "-", "190", "200", "NULL", "AA", "A", "3") mite4 = Mite("ABC3", "4", "-", "50", "65", "NULL", "AA", "A", "3") gene1 = Gene("gABC", "4", "-", "100", "115", "5", "3") gene2 = Gene("gBBC", "4", "+", "160", "170", "5", "3") mites = [mite1, mite2, mite3, mite4] genes = [gene1, gene2] pairs = self.pairer.pair_mites_with_genes(mites, genes) expected_pairs = [ MiteGenePair(mite2, gene1), MiteGenePair(mite4, gene1), MiteGenePair(mite1, gene2), MiteGenePair(mite3, gene2) ] self.assertEqual(pairs, expected_pairs)
def testNotEquals(self): gene1 = Gene("ABC", "4", "+", "132", "154", "5", "3") gene2 = Gene("A", "4", "+", "132", "154", "5", "3") gene3 = Gene("ABC", "3", "+", "132", "154", "5", "3") gene4 = Gene("ABC", "4", "-", "132", "154", "5", "3") gene5 = Gene("ABC", "4", "+", "1", "154", "5", "3") gene6 = Gene("ABC", "4", "+", "132", "1", "5", "3") gene7 = Gene("ABC", "4", "+", "132", "154", "1", "3") gene8 = Gene("ABC", "4", "+", "132", "154", "5", "1") self.assertNotEqual(gene1, gene2) self.assertNotEqual(gene1, gene3) self.assertNotEqual(gene1, gene4) self.assertNotEqual(gene1, gene5) self.assertNotEqual(gene1, gene6) self.assertNotEqual(gene1, gene7) self.assertNotEqual(gene1, gene8)
def parse_csv(self, path): csv = super(GeneCSVParser, self).parse_csv(path, has_headers=True) name = 0 chromosome = 1 strand = 2 start = 3 end = 4 exon_count = 5 genome_id = 6 genes = [] for row in csv.data: gene = Gene(row[name], row[chromosome], row[strand], row[start], row[end], row[exon_count], row[genome_id]) genes.append(gene) return genes
def test_index_elements_list_names(self): mite1 = Mite("ABC1", "1", "+", "1", "10", "NULL", "AA", "A", "1") mite2 = Mite("ABC2", "1", "-", "11", "20", "NULL", "AA", "A", "1") mite3 = Mite("ABC3", "2", "+", "21", "30", "NULL", "AA", "A", "1") mite4 = Mite("ABC4", "2", "-", "31", "40", "NULL", "AA", "A", "1") mite5 = Mite("ABC5", "1", "+", "41", "50", "NULL", "AA", "A", "2") mite6 = Mite("ABC6", "1", "-", "51", "60", "NULL", "AA", "A", "2") mite7 = Mite("ABC7", "2", "+", "61", "70", "NULL", "AA", "A", "2") mite8 = Mite("ABC8", "2", "-", "71", "80", "NULL", "AA", "A", "2") gene1 = Gene("gABC1", "1", "+", "76", "85", "5", "1") gene2 = Gene("gABC2", "1", "-", "5", "15", "5", "1") gene3 = Gene("gABC3", "2", "+", "16", "25", "5", "1") gene4 = Gene("gABC4", "2", "-", "26", "35", "5", "1") gene5 = Gene("gABC5", "1", "+", "36", "45", "5", "2") gene6 = Gene("gABC6", "1", "-", "46", "55", "5", "2") gene7 = Gene("gABC7", "2", "+", "56", "65", "5", "2") gene8 = Gene("gABC8", "2", "-", "66", "75", "5", "2") elements = [ mite1, mite2, mite3, mite4, gene5, gene6, gene7, gene8, gene1, gene2, gene3, gene4, mite5, mite6, mite7, mite8 ] expected_index = { 1: { 1: [mite1, mite2, gene1, gene2], 2: [mite3, mite4, gene3, gene4] }, 2: { 1: [gene5, gene6, mite5, mite6], 2: [gene7, gene8, mite7, mite8] } } index = self.indexer.index_elements(elements, by_name=False) self.assertEqual(expected_index, index)
def testToRow(self): gene = Gene("ABC", "4", "+", "132", "154", "5", "3") csv_row_string = gene.to_csv_row() expected_string = "ABC,4,+,132,154,3,5" self.assertEqual(expected_string, csv_row_string)
def testEquals(self): gene1 = Gene("ABC", "4", "+", "132", "154", "5", "3") gene2 = Gene("ABC", "4", "+", "132", "154", "5", "3") self.assertEqual(gene1, gene2)
def testHeaders(self): headers = Gene.csv_headers() expected_string = "gene_name,gene_chromosome,gene_strand,gene_start,gene_end,gene_genome_id,gene_exon_count" self.assertEqual(expected_string, headers)
def csv_headers(): return Mite.csv_headers() + "," + Gene.csv_headers() + ",distance"