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")
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")
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)
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")