コード例 #1
0
ファイル: test_models.py プロジェクト: ctlab/GADMA
 def test_translation_from_epoch_to_tree3(self):
     N_a, nu1B, nu1, nu1F, nu2B, nu2F, t1, t2, t3 = self.get_genetic_variables_model3(
     )
     var2values = {
         'N_a': 1e5,
         'nu1B': 0.4,
         'nu1': 0.8,
         'nu1F': 0.1,
         'nu2B': 0.2,
         'nu2F': 0.5,
         't1': 2,
         't2': 4,
         't3': 5
     }
     cm = TreeDemographicModel(gen_time=29, mutation_rate=1.25e-8)
     cm.add_leaf(0, size_pop=nu1F)
     cm.add_leaf(1, size_pop=nu2F)
     cm.change_pop_size(0, t=t1, size_pop=nu1)
     cm.change_pop_size(0, t=t2, size_pop=nu1B)
     cm.change_pop_size(1, t=t1, size_pop=nu2B)
     cm.move_lineages(1, 0, t=t3, size_pop=N_a)
     em = EpochDemographicModel(gen_time=29,
                                Nanc_size=N_a,
                                mutation_rate=1.25e-8)
     em.add_split(0, [nu1B, nu2B])
     em.add_epoch(operation_creation(Subtraction, t3, t2), [nu1B, nu2B])
     em.add_epoch(operation_creation(Subtraction, t2, t1), [nu1, nu2B])
     em.add_epoch(operation_creation(Subtraction, t1, 0), [nu1F, nu2F])
     translated_model, _ = em.translate_to(TreeDemographicModel, var2values)
     self.assertTrue(translated_model.equals(cm, var2values))
コード例 #2
0
ファイル: test_models.py プロジェクト: ctlab/GADMA
    def test_models_eq(self):
        # it does not check everything
        var1 = PopulationSizeVariable("nu")
        epoch1 = Epoch(init_size_args=[1, 2], size_args=[var1, 5], time_arg=10)
        epoch2 = copy.copy(epoch1)
        self.assertEqual(epoch1, epoch1)
        self.assertEqual(epoch1, epoch2)

        epoch1.size_args = [4, 5]
        self.assertNotEqual(epoch1, epoch2)
        epoch1.size_args = [var1, 5]

        epoch1.dyn_args = ["Sud", "Sud"]
        self.assertEqual(epoch1, epoch2)

        epoch1.dyn_args = ["Sud", "Exp"]
        self.assertNotEqual(epoch1, epoch2)

        split = Split(pop_to_div=0, size_args=[1, 2])
        self.assertNotEqual(epoch1, split)
        self.assertNotEqual(split, epoch1)
        self.assertEqual(split, split)

        pop_change1 = PopulationSizeChange(pop=0, t=10)
        pop_change2 = PopulationSizeChange(pop=1, t=10)
        self.assertEqual(pop_change1, pop_change1)
        self.assertTrue(pop_change1.equals(pop_change1, []))
        self.assertNotEqual(pop_change1, pop_change2)

        lin_move1 = LineageMovement(pop_from=0, pop=1, t=10)
        lin_move2 = LineageMovement(pop_from=1, pop=0, t=10)
        self.assertEqual(lin_move1, lin_move1)
        self.assertTrue(lin_move1.equals(lin_move1, []))
        self.assertNotEqual(lin_move1, lin_move2)

        model1 = EpochDemographicModel()
        self.assertEqual(model1, model1)
        self.assertNotEqual(model1, split)
        model2 = EpochDemographicModel()
        model2.add_epoch(time_arg=10, size_args=[1])
        self.assertNotEqual(model1, model2)
        model1.add_epoch(time_arg=10, size_args=[2])
        self.assertNotEqual(model1, model2)

        model1 = TreeDemographicModel()
        self.assertEqual(model1, model1)
        self.assertTrue(model1.equals(model1, []))
        self.assertNotEqual(model1, split)
        self.assertFalse(model1.equals(split, []))
        model2 = TreeDemographicModel()
        model2.add_leaf(pop=0, size_pop=10)
        self.assertNotEqual(model1, model2)
        self.assertFalse(model1.equals(model2, []))
        model1.add_leaf(pop=1, size_pop=11)
        self.assertNotEqual(model1, model2)
        model2.add_leaf(pop=1, size_pop=11)
        model1.add_leaf(pop=0, size_pop=10)
        self.assertEqual(model1, model2)
コード例 #3
0
 def test_model2_translation(self):
     N_a, nu1, nu2, nu2F, t1, t2 = self.get_genetic_variables_model1()
     var2values = {
         'nu1': 0.4,
         'nu2F': 0.7,
         'nu2': 0.5,
         'N_a': 1e5,
         't1': 1,
         't2': 5
     }
     m = TreeDemographicModel(gen_time=29, mutation_rate=1.25e-8)
     m.add_leaf(0, size_pop=nu1)
     m.add_leaf(1, size_pop=nu2F)
     m.change_pop_size(1, t=t1, size_pop=nu2, dyn="Exp", g=0.9)
     m.move_lineages(1, 0, t=t2, size_pop=N_a)
     em = EpochDemographicModel(gen_time=29, mutation_rate=1.25e-8)
     # g = log(N / N0) / t where N is final size (closer to nowdays) and
     # N0 is start size (the most ancient) t - time interval
     # THEN we have g, t and N and we want N0 = N / exp(gt)
     exp_op = operation_creation(
         Exp,
         operation_creation(Multiplication, 0.9,
                            operation_creation(Subtraction, t2, t1)))
     nu20 = operation_creation(Division, nu2, exp_op)
     # Construct our model
     em.add_split(0, [nu1, nu20])
     em.add_epoch(operation_creation(Subtraction, t2, t1), [nu1, nu2],
                  dyn_args=['Sud', "Exp"])
     em.add_epoch(operation_creation(Subtraction, t1, 0), [nu1, nu2F])
     translated_model = m.translate_to(EpochDemographicModel, var2values)
コード例 #4
0
    def test_model1_translation(self):
        N_a, nu1, nu2, nu2F, t1, t2 = self.get_genetic_variables_model1()
        var2values = {
            'nu1': 0.4,
            'nu2F': 0.7,
            'nu2': 0.5,
            'N_a': 1e5,
            't1': 1,
            't2': 5
        }
        m = TreeDemographicModel(gen_time=29, mutation_rate=1.25e-8)
        m.add_leaf(0, size_pop=nu1)
        m.add_leaf(1, size_pop=nu2F)
        m.change_pop_size(1, t=t1, size_pop=nu2)
        m.move_lineages(1, 0, t=t2, size_pop=N_a)

        self.assertEqual(m.number_of_populations(), 2)

        translated_model = EpochDemographicModel.create_from(m, var2values)
        em = EpochDemographicModel(gen_time=29, mutation_rate=1.25e-8)
        em.add_split(0, [nu1, nu2])
        em.add_epoch(operation_creation(Subtraction, t2, t1), [nu1, nu2])
        em.add_epoch(operation_creation(Subtraction, t1, 0), [nu1, nu2F])
        self.assertEqual(translated_model, em)
コード例 #5
0
 def test_model5_translation(self):
     N_a, nu1B, nu1, nu1F, nu2B, nu2F, t1, t2, t3 = self.get_genetic_variables_model3(
     )
     t4 = TimeVariable('t4', units="genetic")
     var2values = {
         'N_a': 1e5,
         'nu1B': 0.4,
         'nu1': 0.8,
         'nu1F': 0.1,
         'nu2B': 0.5,
         'nu2F': 0.2,
         't1': 2,
         't2': 3,
         't3': 4,
         't4': 5
     }
     m = TreeDemographicModel(gen_time=29, mutation_rate=1.25e-8)
     m.add_leaf(0, size_pop=nu1F)
     m.add_leaf(1, size_pop=nu2F)
     m.change_pop_size(0, t=t1, size_pop=nu1)
     m.change_pop_size(0, t=t3, size_pop=nu1B)
     m.change_pop_size(1, t=t2, size_pop=nu2B)
     m.move_lineages(1, 0, t=t4, size_pop=N_a)
     translated_model = m.translate_to(EpochDemographicModel, var2values)
     em = EpochDemographicModel(gen_time=29, mutation_rate=1.25e-8)
     em.add_split(0, [nu1B, nu2B])
     em.add_epoch(operation_creation(Subtraction, t4, t3), [nu1B, nu2B])
     em.add_epoch(operation_creation(Subtraction, t3, t2), [nu1, nu2B])
     em.add_epoch(operation_creation(Subtraction, t2, t1), [nu1, nu2F])
     em.add_epoch(operation_creation(Subtraction, t1, 0), [nu1F, nu2F])
     self.assertEqual(2, translated_model.number_of_populations())
     self.assertEqual(translated_model, em)
コード例 #6
0
ファイル: test_models.py プロジェクト: ctlab/GADMA
    def test_translation_from_epoch_to_tree1(self):
        from .test_tree_dem_model import TestTreeDemModel
        N_a, nu1, nu2, nu2F, t1, t2 = TestTreeDemModel.get_genetic_variables_model1(
        )
        var2values = {
            'nu1': 0.4,
            'nu2F': 0.7,
            'nu2': 0.5,
            'N_a': 1e5,
            't1': 1,
            't2': 5
        }
        em = EpochDemographicModel(gen_time=29,
                                   Nanc_size=N_a,
                                   mutation_rate=1.25e-8)
        em.add_split(0, [nu1, nu2])
        em.add_epoch(operation_creation(Subtraction, t2, t1), [nu1, nu2])
        em.add_epoch(operation_creation(Subtraction, t1, 0), [nu1, nu2F])

        cm = TreeDemographicModel(gen_time=29, mutation_rate=1.25e-8)
        cm.add_leaf(0, size_pop=nu1)
        cm.add_leaf(1, size_pop=nu2F)
        cm.change_pop_size(1, t=t1, size_pop=nu2)
        cm.move_lineages(1, 0, t=t2, size_pop=N_a)

        translated_model, _ = em.translate_to(TreeDemographicModel, var2values)

        self.assertTrue(translated_model.equals(cm, var2values))

        # fails
        self.assertRaises(ValueError, EpochDemographicModel.create_from, cm)
        self.assertRaises(ValueError, TreeDemographicModel.create_from,
                          cm.events[0], None)
        tm = TreeDemographicModel()
        self.assertRaises(ValueError, tm.translate_to, EpochDemographicModel,
                          [])
        self.assertRaises(ValueError, tm.translate_to, Epoch, [])