예제 #1
0
class RemoveModelsTests(unittest.TestCase):
    """Test cases for updating a non-empty phenoscoring db with more models"""
    
    def setUp(self):
        """For setup, ensure db does not exist, then build a new one"""        
        config = CompleteTestConfig()        
        self.dbfile = config.db
        remove_db(self.dbfile)        
        self.pipeline = Phenoscoring(config)
        self.pipeline.build()
        impc = Phenoscoring(IMPCTestConfig())
        impc.update()
        
        # handles for models
        self.desctab = ModelDescriptionTable(self.dbfile)
        self.phenstab = ModelPhenotypeTable(self.dbfile)
        self.scoretab = ModelScoreTable(self.dbfile)
                
    def tearDown(self):
        """At end, ensure test db is deleted."""                
        remove_db(self.dbfile)       
  
    def test_clear_models(self):
        """can remove all models at once."""
                
        # ensure that db is non empty
        self.assertGreater(self.desctab.count_rows(), 0)                         
        self.assertGreater(self.phenstab.count_rows(), 0)                        
        self.assertGreater(self.scoretab.count_rows(), 0)                        
        
        # attempt to clear everything
        impc = Phenoscoring(IMPCTestConfig())
        impc.clearmodels()        
        self.assertEqual(self.desctab.count_rows(), 0)                         
        self.assertEqual(self.phenstab.count_rows(), 0)                        
        self.assertEqual(self.scoretab.count_rows(), 0)                        
                
    def test_remove_models(self):
        """can remove a partial set of data"""

        # get an initial set of database row counts
        num_desc = self.desctab.count_rows()
        num_phens = self.phenstab.count_rows()
        num_score = self.scoretab.count_rows()
        
        # run a model removal using a small descriptions file
        config = IMPCTestConfig()
        config.model_descriptions = "prep-IMPC-descriptions-update.tsv"
        config.model_phenotypes = None
        impc = Phenoscoring(config)
        impc.remove()
        
        # the number of rows in tables should decrease
        self.assertLess(self.desctab.count_rows(), num_desc,
                        "number of models should decrease")
        self.assertLess(self.phenstab.count_rows(), num_phens,
                        "number of phenotypes should decrease")
        self.assertLess(self.scoretab.count_rows(), num_score,
                        "number of score entries should decrease")
예제 #2
0
    def test_update_skip_compute(self):
        """run update but skip score calculation"""

        # extract current number of models and scores
        desctab = ModelDescriptionTable(self.dbfile)
        scorestab = ModelScoreTable(self.dbfile)
        num_models = desctab.count_rows()
        num_scores = scorestab.count_rows()

        # run an update, but without computing scores
        config = MGITestConfig()
        config.skip_compute = True
        mgi = Phenoscoring(config)
        mgi.update()

        self.assertGreater(desctab.count_rows(), num_models,
                           "number of models should increase")
        self.assertEqual(scorestab.count_rows(), num_scores,
                         "number of scores should remain")
예제 #3
0
    def test_compute_scores(self):
        """perform packet calculations."""

        modelnames = ["MGI_MA:001_hom", "MGI_MA:001_het"]
        refnames = ["DISEASE:1", "DISEASE:3"]
        packets = prep_compute_packets(self.config,
                                       references=refnames,
                                       models=modelnames)
        self.assertEqual(len(packets), 1, "one packet only")
        packets[0].run()

        scoretab = ModelScoreTable(self.dbfile)
        numscores = scoretab.count_rows()
        self.assertEqual(numscores, 4)
예제 #4
0
    def test_build_both(self):
        """can update database sequentially with MGI and IMPC"""

        mgi = Phenoscoring(MGITestConfig())
        mgi.update()
        impc = Phenoscoring(IMPCTestConfig())
        impc.update()

        desctab = ModelDescriptionTable(self.dbfile)
        self.assertEqual(desctab.count_rows(), 14, "8 IMPC, 6 MGI")

        modeltab = ModelPhenotypeTable(self.dbfile)
        self.assertEqual(modeltab.count_rows(), 23, "9 MGI, 14 IMPC")

        scoretab = ModelScoreTable(self.dbfile)
        self.assertGreater(scoretab.count_rows(), 0,
                           "score table is non-empty")