Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_sample_size(self):
self.assertRaises(ValueError, msprime.simulator_factory)
self.assertRaises(ValueError, msprime.simulator_factory, 1)
self.assertRaises(
ValueError, msprime.simulator_factory, sample_size=1)
for n in [2, 100, 1000]:
sim = msprime.simulator_factory(n)
self.assertEqual(len(sim.samples), n)
ll_sim = sim.create_ll_instance()
self.assertEqual(ll_sim.get_num_samples(), n)
samples = ll_sim.get_samples()
self.assertEqual(len(samples), n)
for sample in samples:
self.assertEqual(sample[0], 0)
self.assertEqual(sample[1], 0)
def test_default_random_seed(self):
sim = msprime.simulator_factory(10)
rng = sim.random_generator
self.assertIsInstance(rng, msprime.RandomGenerator)
self.assertNotEqual(rng.get_seed(), 0)
def test_length(self):
for bad_length in [-1, 0, -1e-6]:
with self.assertRaises(ValueError):
msprime.simulator_factory(10, length=bad_length)
def test_recombination_n100(self):
rng = msprime.RandomGenerator(100)
sim = msprime.simulator_factory(
100, recombination_rate=0.2, record_full_arg=True, random_generator=rng)
self.verify(sim)
def test_smc_variants(self):
for model in ["smc", "smc_prime"]:
threshold = 20
sim = msprime.simulator_factory(
sample_size=10, recombination_rate=5, model=model)
sim.random_generator = msprime.RandomGenerator(3)
sim.run()
self.assertGreater(sim.num_common_ancestor_events, threshold)
self.assertGreater(sim.num_recombination_events, threshold)
self.assertGreater(sim.num_rejected_common_ancestor_events, 0)
def test_sample_size(self):
self.assertRaises(ValueError, msprime.simulator_factory)
self.assertRaises(ValueError, msprime.simulator_factory, 1)
self.assertRaises(
ValueError, msprime.simulator_factory, sample_size=1)
for n in [2, 100, 1000]:
sim = msprime.simulator_factory(n)
self.assertEqual(len(sim.samples), n)
ll_sim = sim.create_ll_instance()
self.assertEqual(ll_sim.get_num_samples(), n)
samples = ll_sim.get_samples()
self.assertEqual(len(samples), n)
for sample in samples:
self.assertEqual(sample[0], 0)
self.assertEqual(sample[1], 0)
def test_no_recombination(self):
rng = msprime.RandomGenerator(1)
sim = msprime.simulator_factory(10, random_generator=rng, record_full_arg=True)
ts = self.verify(sim)
ts_simplified = ts.simplify()
t1 = ts.tables
t2 = ts_simplified.tables
self.assertEqual(t1.nodes, t2.nodes)
self.assertEqual(t1.edges, t2.edges)
def verify_simulation(self, n, m, r):
"""
Verifies a simulation for the specified parameters.
"""
recomb_map = msprime.RecombinationMap.uniform_map(m, r, num_loci=m)
rng = msprime.RandomGenerator(1)
sim = msprime.simulator_factory(
n, recombination_map=recomb_map, random_generator=rng)
self.assertEqual(sim.random_generator, rng)
sim.run()
self.assertEqual(sim.num_breakpoints, len(sim.breakpoints))
self.assertGreater(sim.time, 0)
self.assertGreater(sim.num_avl_node_blocks, 0)
self.assertGreater(sim.num_segment_blocks, 0)
self.assertGreater(sim.num_node_mapping_blocks, 0)
tree_sequence = sim.get_tree_sequence()
t = 0.0
for record in tree_sequence.nodes():
if record.time > t:
t = record.time
self.assertEqual(sim.time, t)
self.assertGreater(sim.num_common_ancestor_events, 0)
self.assertGreaterEqual(sim.num_recombination_events, 0)
var_scrm[j] = np.var(T)
# IMPORTANT!! We have to use the get_num_breakpoints method
# on the simulator as there is a significant drop in the number
# of trees if we use the tree sequence. There is a significant
# number of common ancestor events that result in a recombination
# being undone.
exact_sim = msprime.simulator_factory(
sample_size=n, recombination_rate=r, Ne=Ne, length=L[j])
for k in range(num_replicates):
exact_sim.run()
num_trees[k] = exact_sim.num_breakpoints
exact_sim.reset()
mean_exact[j] = np.mean(num_trees)
var_exact[j] = np.var(num_trees)
smc_sim = msprime.simulator_factory(
sample_size=n, recombination_rate=r, Ne=Ne, length=L[j],
model="smc")
for k in range(num_replicates):
smc_sim.run()
num_trees[k] = smc_sim.num_breakpoints
smc_sim.reset()
mean_smc[j] = np.mean(num_trees)
var_smc[j] = np.var(num_trees)
smc_prime_sim = msprime.simulator_factory(
sample_size=n, recombination_rate=r, Ne=Ne, length=L[j],
model="smc_prime")
for k in range(num_replicates):
smc_prime_sim.run()
num_trees[k] = smc_prime_sim.num_breakpoints
smc_prime_sim.reset()
self._num_loci = num_loci
self._num_replicates = num_replicates
self._recombination_rate = scaled_recombination_rate
self._mutation_rate = scaled_mutation_rate
# For strict ms-compability we want to have m non-recombining loci
recomb_map = msprime.RecombinationMap.uniform_map(
num_loci, self._recombination_rate, num_loci)
# If we have specified any population_configurations we don't want
# to give the overall sample size.
sample_size = self._sample_size
if population_configurations is not None:
sample_size = None
# msprime measure's time in units of generations, given a specific
# Ne value whereas ms uses coalescent time. To be compatible with ms,
# we therefore need to use an Ne value of 1/4.
self._simulator = msprime.simulator_factory(
Ne=0.25,
sample_size=sample_size,
recombination_map=recomb_map,
population_configurations=population_configurations,
migration_matrix=migration_matrix,
demographic_events=demographic_events)
self._precision = precision
self._print_trees = print_trees
# sort out the random seeds
ms_seeds = random_seeds
if random_seeds is None:
ms_seeds = generate_seeds()
seed = get_single_seed(ms_seeds)
self._random_generator = msprime.RandomGenerator(seed)
self._ms_random_seeds = ms_seeds
self._simulator.random_generator = self._random_generator