Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)
Beispiel #7
0
    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)