def test_different_lengths(self): events = [msprime.PopulationParametersChange(time=1, initial_size=1)] * 10 self.assertFalse(models.demographic_events_equal(events[:1], [], 1)) self.assertFalse(models.demographic_events_equal([], events[:1], 1)) self.assertFalse(models.demographic_events_equal(events, [], 1)) self.assertFalse(models.demographic_events_equal([], events, 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([], events, 1)
def test_different_types(self): events = [ msprime.PopulationParametersChange(time=1, initial_size=1), msprime.MigrationRateChange(time=1, rate=1), msprime.MassMigration(time=1, source=1), msprime.SimpleBottleneck(time=1)] for a, b in itertools.combinations(events, 2): self.assertFalse(models.demographic_events_equal([a], [b], 1)) self.assertFalse(models.demographic_events_equal([b], [a], 1)) self.assertTrue(models.demographic_events_equal([a], [a], 1)) self.assertTrue(models.demographic_events_equal([b], [b], 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([b], [a], 1) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([a], [b], 1)
def test_different_times(self): n = 10 e1 = [ msprime.PopulationParametersChange(time=j, initial_size=1) for j in range(n)] e2 = [ msprime.PopulationParametersChange(time=j + 1, initial_size=1) for j in range(n)] for j in range(1, n): self.assertFalse(models.demographic_events_equal(e1[:j], e2[:j], 1)) self.assertFalse(models.demographic_events_equal(e2[:j], e1[:j], 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal(e1[:j], e2[:j], 1) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal(e2[:j], e1[:j], 1)
def test_simple_bottleneck(self): def f(time=1, population=1, proportion=1): return msprime.SimpleBottleneck( time=time, population=population, proportion=proportion) test_events = [ (f(time=1), f(time=2)), (f(population=1), f(population=2)), (f(proportion=1), f(proportion=0.2)), ] for a, b in test_events: self.assertFalse(models.demographic_events_equal([a], [b], 1)) self.assertFalse(models.demographic_events_equal([b], [a], 1)) self.assertTrue(models.demographic_events_equal([a], [a], 1)) self.assertTrue(models.demographic_events_equal([b], [b], 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([b], [a], 1) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([a], [b], 1)
def test_mass_migration(self): def f(time=1, source=1, dest=1, proportion=1): return msprime.MassMigration( time=time, source=source, dest=dest, proportion=proportion) test_events = [ (f(time=1), f(time=2)), (f(source=1), f(source=2)), (f(dest=1), f(dest=2)), (f(proportion=1), f(proportion=0.2)), ] for a, b in test_events: self.assertFalse(models.demographic_events_equal([a], [b], 1)) self.assertFalse(models.demographic_events_equal([b], [a], 1)) self.assertTrue(models.demographic_events_equal([a], [a], 1)) self.assertTrue(models.demographic_events_equal([b], [b], 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([b], [a], 1) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([a], [b], 1)
def test_migration_rate_change(self): def f(time=1, rate=1, matrix_index=None): return msprime.MigrationRateChange( time=time, rate=rate, matrix_index=matrix_index) test_events = [ (f(time=1), f(time=2)), (f(rate=1), f(rate=2)), (f(matrix_index=[0, 1]), f(matrix_index=[0, 2])), (f(matrix_index=np.array([0, 1])), f(matrix_index=[0, 2])), ] for a, b in test_events: self.assertFalse(models.demographic_events_equal([a], [b], 1)) self.assertFalse(models.demographic_events_equal([b], [a], 1)) self.assertTrue(models.demographic_events_equal([a], [a], 1)) self.assertTrue(models.demographic_events_equal([b], [b], 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([b], [a], 1) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([a], [b], 1)
def test_population_parameters_change(self): def f(time=1, initial_size=1, growth_rate=None, population=None): return msprime.PopulationParametersChange( time=time, initial_size=initial_size, growth_rate=growth_rate, population=population) test_events = [ (f(time=1), f(time=2)), (f(initial_size=1), f(initial_size=2)), (f(growth_rate=1), f(growth_rate=2)), (f(population=1), f(population=2)), ] for a, b in test_events: self.assertFalse(models.demographic_events_equal([a], [b], 1)) self.assertFalse(models.demographic_events_equal([b], [a], 1)) self.assertTrue(models.demographic_events_equal([a], [a], 1)) self.assertTrue(models.demographic_events_equal([b], [b], 1)) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([b], [a], 1) with self.assertRaises(models.UnequalModelsError): models.verify_demographic_events_equal([a], [b], 1)