def test_annotate_individuals(self): for ts in self.get_msprime_examples(): slim_ts = pyslim.annotate_defaults(ts, model_type="nonWF", slim_generation=1) tables = slim_ts.tables metadata = list(pyslim.extract_individual_metadata(tables)) self.assertEqual(len(metadata), slim_ts.num_individuals) sexes = [ random.choice([ pyslim.INDIVIDUAL_TYPE_FEMALE, pyslim.INDIVIDUAL_TYPE_MALE ]) for _ in metadata ] for j in range(len(metadata)): metadata[j].sex = sexes[j] pyslim.annotate_individual_metadata(tables, metadata) new_ts = pyslim.load_tables(tables) for j, ind in enumerate(new_ts.individuals()): md = ind.metadata self.assertEqual(md.sex, sexes[j]) # try loading this into SLiM loaded_ts = self.run_msprime_restart(new_ts, sex="A") self.verify_annotated_tables(new_ts, slim_ts) self.verify_annotated_trees(new_ts, slim_ts) self.verify_haplotype_equality(new_ts, slim_ts)
def test_annotate_individuals(self): for ts in self.get_slim_examples(): tables = ts.tables new_tables = ts.tables metadata = [] for md in tskit.unpack_bytes(tables.individuals.metadata, tables.individuals.metadata_offset): dm = pyslim.decode_individual(md) edm = pyslim.encode_individual(dm) self.assertEqual(md, edm) metadata.append(dm) pyslim.annotate_individual_metadata(new_tables, metadata) self.assertEqual(tables, new_tables)
def test_annotate_individuals(self): for ts in get_msprime_examples(): slim_ts = pyslim.annotate_defaults(ts, model_type="nonWF", slim_generation=1) tables = slim_ts.tables metadata = list(pyslim.extract_individual_metadata(tables)) self.assertEqual(len(metadata), slim_ts.num_individuals) sexes = [random.choice([pyslim.INDIVIDUAL_TYPE_FEMALE, pyslim.INDIVIDUAL_TYPE_MALE]) for _ in metadata] for j in range(len(metadata)): metadata[j].sex = sexes[j] pyslim.annotate_individual_metadata(tables, metadata) new_ts = pyslim.load_tables(tables) for j, ind in enumerate(new_ts.individuals()): md = pyslim.decode_individual(ind.metadata) self.assertEqual(md.sex, sexes[j])
def test_annotate_individuals(self): for ts in self.get_slim_examples(): tables = ts.tables new_tables = ts.tables metadata = [] for md in tskit.unpack_bytes(tables.individuals.metadata, tables.individuals.metadata_offset): with self.assertWarns(DeprecationWarning): dm = pyslim.decode_individual(md) with self.assertWarns(DeprecationWarning): edm = pyslim.encode_individual(dm) self.assertEqual(md, edm) metadata.append(dm) with self.assertWarns(DeprecationWarning): pyslim.annotate_individual_metadata(new_tables, metadata) self.assertTableCollectionsEqual(tables, new_tables)
def test_annotate_XY(self): for ts in self.get_msprime_examples(): for genome_type in ["X", "Y"]: slim_ts = pyslim.annotate_defaults(ts, model_type="nonWF", slim_generation=1) tables = slim_ts.tables metadata = list(pyslim.extract_individual_metadata(tables)) self.assertEqual(len(metadata), slim_ts.num_individuals) sexes = [ random.choice([ pyslim.INDIVIDUAL_TYPE_FEMALE, pyslim.INDIVIDUAL_TYPE_MALE ]) for _ in metadata ] for j in range(len(metadata)): metadata[j].sex = sexes[j] pyslim.annotate_individual_metadata(tables, metadata) node_metadata = list(pyslim.extract_node_metadata(tables)) self.assertEqual(len(node_metadata), slim_ts.num_nodes) for j in range(slim_ts.num_individuals): nodes = slim_ts.individual(j).nodes node_metadata[nodes[0]].genome_type = pyslim.GENOME_TYPE_X node_metadata[nodes[0]].is_null = (genome_type != "X") if sexes[j] == pyslim.INDIVIDUAL_TYPE_MALE: node_metadata[ nodes[1]].genome_type = pyslim.GENOME_TYPE_Y node_metadata[nodes[1]].is_null = (genome_type != "Y") else: node_metadata[ nodes[1]].genome_type = pyslim.GENOME_TYPE_X node_metadata[nodes[1]].is_null = (genome_type != "X") pyslim.annotate_node_metadata(tables, node_metadata) new_ts = pyslim.load_tables(tables) # try loading this into SLiM loaded_ts = self.run_msprime_restart(new_ts, sex=genome_type) self.verify_annotated_tables(new_ts, slim_ts) self.verify_annotated_trees(new_ts, slim_ts) self.verify_haplotype_equality(new_ts, slim_ts)
# Keywords: Python, nonWF, non-Wright-Fisher, tree-sequence recording, tree sequence recording import msprime, pyslim, random ts = msprime.simulate(sample_size=10000, Ne=5000, length=1e8, mutation_rate=0.0, recombination_rate=1e-8) tables = ts.dump_tables() pyslim.annotate_defaults_tables(tables, model_type="nonWF", slim_generation=1) individual_metadata = list(pyslim.extract_individual_metadata(tables)) for j in range(len(individual_metadata)): individual_metadata[j].sex = random.choice([pyslim.INDIVIDUAL_TYPE_FEMALE, pyslim.INDIVIDUAL_TYPE_MALE]) individual_metadata[j].age = random.choice([0, 1, 2, 3, 4]) pyslim.annotate_individual_metadata(tables, individual_metadata) slim_ts = pyslim.load_tables(tables) slim_ts.dump("recipe_16.9.trees")
# Keywords: Python, nonWF, non-Wright-Fisher, tree-sequence recording, tree sequence recording import msprime, pyslim, random ts = msprime.simulate(sample_size=10000, Ne=5000, length=1e8, mutation_rate=0.0, recombination_rate=1e-8) tables = ts.dump_tables() pyslim.annotate_defaults_tables(tables, model_type="nonWF", slim_generation=1) individual_metadata = list(pyslim.extract_individual_metadata(tables)) for j in range(len(individual_metadata)): individual_metadata[j].sex = random.choice([pyslim.INDIVIDUAL_TYPE_FEMALE, pyslim.INDIVIDUAL_TYPE_MALE]) individual_metadata[j].age = random.choice([0, 1, 2, 3, 4]) pyslim.annotate_individual_metadata(tables, individual_metadata) slim_ts = pyslim.load_tables(tables) slim_ts.dump("recipe_17.9.trees")