From 83a2b9ccb07d5396402d6f43d7ba9322f686afe8 Mon Sep 17 00:00:00 2001 From: Gertjan Bisschop Date: Tue, 8 Aug 2023 12:54:48 +0100 Subject: [PATCH] raise error when recording migrants --- msprime/ancestry.py | 12 ++++++++---- tests/test_models.py | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/msprime/ancestry.py b/msprime/ancestry.py index b44dd2995..e62b66a4f 100644 --- a/msprime/ancestry.py +++ b/msprime/ancestry.py @@ -866,18 +866,22 @@ def _parse_sim_ancestry( " additional_nodes." ) - if is_dtwf: - if additional_nodes.value & NodeType.MIGRANT.value: + if additional_nodes.value & NodeType.MIGRANT.value: + if is_dtwf: raise ValueError( "Recording MIGRANT nodes is currently not supported in" " DTWF simulation." ) - if is_pedigree: - if additional_nodes.value & NodeType.MIGRANT.value: + if is_pedigree: raise ValueError( "Recording MIGRANT nodes is not supported in " "FixedPedigree simulation." ) + if any(isinstance(model, SweepGenicSelection) for model in models): + raise ValueError( + "Recording MIGRANT nodes is not supported in " + "SweepGenicSelection simulation." + ) record_migrations = core._parse_flag(record_migrations, default=False) diff --git a/tests/test_models.py b/tests/test_models.py index cf5b0933c..56bf673b1 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -962,3 +962,30 @@ def test_lots_of_sweeps(self): random_seed=2, ) assert all(tree.num_roots == 1 for tree in ts.trees()) + + def test_sweep_migration_event(self): + models = [ + msprime.StandardCoalescent(duration=0.01), + msprime.SweepGenicSelection( + position=5, + start_frequency=0.69, + end_frequency=0.7, + s=0.1, + dt=1e-6, + ), + ] + with pytest.raises( + ValueError, + match="Recording MIGRANT nodes is not supported in " + "SweepGenicSelection simulation.", + ): + msprime.sim_ancestry( + 3, + population_size=1000, + sequence_length=10, + recombination_rate=0.2, + model=models, + random_seed=2, + coalescing_segments_only=False, + additional_nodes=msprime.NodeType.MIGRANT, + )