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))
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)
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)
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)
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)
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, [])