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)
Example #11
0
 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)
Example #13
0
 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)
Example #16
0
 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)
Example #17
0
 def testEquals(self):
     gene1 = Gene("ABC", "4", "+", "132", "154", "5", "3")
     gene2 = Gene("ABC", "4", "+", "132", "154", "5", "3")
     self.assertEqual(gene1, gene2)
Example #18
0
 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)
Example #19
0
 def csv_headers():
     return Mite.csv_headers() + "," + Gene.csv_headers() + ",distance"