def test_node_metadata(self): md = pyslim.NodeMetadata(slim_id=2, is_null=False, genome_type=pyslim.GENOME_TYPE_X) md_bytes = pyslim.encode_node(md) new_md = pyslim.decode_node(md_bytes) self.assertEqual(md, new_md)
def get_slim_ids(self, ts): # get SLiM ID -> msprime ID map from metadata ids = {} for n in ts.nodes(): meta = pyslim.decode_node(n.metadata) ids[meta.slim_id] = n.id return ids
def test_decode_errors(self): with self.assertRaises(ValueError): pyslim.decode_mutation(2.0) with self.assertRaises(ValueError): pyslim.decode_mutation([2.0, 3.0]) with self.assertRaises(ValueError): pyslim.decode_node(2.0) with self.assertRaises(ValueError): pyslim.decode_node([1, 2]) with self.assertRaises(ValueError): pyslim.decode_individual(3.0) with self.assertRaises(ValueError): pyslim.decode_individual([1, 2]) with self.assertRaises(ValueError): pyslim.decode_population(1.0) with self.assertRaises(ValueError): pyslim.decode_population([2, 3])
def test_node_metadata(self): md = pyslim.NodeMetadata(slim_id=2, is_null=False, genome_type=pyslim.GENOME_TYPE_X) with self.assertWarns(DeprecationWarning): md_bytes = pyslim.encode_node(md) with self.assertWarns(DeprecationWarning): new_md = pyslim.decode_node(md_bytes) self.assertEqual(md, new_md)
def test_node_derived_info(self): for ts in self.get_slim_examples(): for j, node in enumerate(ts.nodes()): a = ts.tables.nodes.metadata_offset[j] b = ts.tables.nodes.metadata_offset[j+1] raw_md = ts.tables.nodes.metadata[a:b] md = pyslim.decode_node(raw_md) self.assertEqual(node.metadata, md) self.assertEqual(ts.node(j).metadata, md)
def test_legacy_errors(self): defaults = pyslim.default_slim_metadata with self.assertRaisesRegex(ValueError, "legacy"): pyslim.decode_mutation(defaults('mutation')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.decode_population(defaults('population')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.decode_individual(defaults('individual')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.decode_node(defaults('node')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.encode_mutation(defaults('mutation')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.encode_population(defaults('population')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.encode_individual(defaults('individual')) with self.assertRaisesRegex(ValueError, "legacy"): pyslim.encode_node(defaults('node'))
def test_annotate_nodes(self): for ts in self.get_slim_examples(): tables = ts.tables new_tables = ts.tables metadata = [] for md in tskit.unpack_bytes(tables.nodes.metadata, tables.nodes.metadata_offset): dm = pyslim.decode_node(md) edm = pyslim.encode_node(dm) self.assertEqual(md, edm) metadata.append(dm) pyslim.annotate_node_metadata(new_tables, metadata) self.assertEqual(tables, new_tables)
def test_annotate_nodes(self): for ts in self.get_slim_examples(): tables = ts.tables new_tables = ts.tables metadata = [] for md in tskit.unpack_bytes(tables.nodes.metadata, tables.nodes.metadata_offset): with self.assertWarns(DeprecationWarning): dm = pyslim.decode_node(md) with self.assertWarns(DeprecationWarning): edm = pyslim.encode_node(dm) self.assertEqual(md, edm) metadata.append(dm) with self.assertWarns(DeprecationWarning): pyslim.annotate_node_metadata(new_tables, metadata) self.assertTableCollectionsEqual(tables, new_tables)
def test_annotate_nodes(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_node_metadata(tables)) self.assertEqual(len(metadata), slim_ts.num_nodes) gtypes = [random.choice([pyslim.GENOME_TYPE_X, pyslim.GENOME_TYPE_Y]) for _ in metadata] for j in range(len(metadata)): if metadata[j] is not None: metadata[j].genome_type = gtypes[j] pyslim.annotate_node_metadata(tables, metadata) new_ts = pyslim.load_tables(tables) for j, x in enumerate(new_ts.nodes()): md = pyslim.decode_node(x.metadata) if md is not None: self.assertEqual(md.genome_type, gtypes[j])
def test_decode_already_node(self): m = pyslim.NodeMetadata(slim_id=123, is_null=True, genome_type=0) with self.assertWarns(DeprecationWarning): dm = pyslim.decode_node(m) self.assertEqual(m, dm)
mut_metadata = [] for md in msprime.unpack_bytes(tables.mutations.metadata, tables.mutations.metadata_offset): dm = pyslim.decode_mutation(md) edm = pyslim.encode_mutation(dm) assert (md == edm) mut_metadata.append(dm) pyslim.annotate_mutations(tables, mut_metadata) # nodes node_metadata = [] for md in msprime.unpack_bytes(tables.nodes.metadata, tables.nodes.metadata_offset): dn = pyslim.decode_node(md) edn = pyslim.encode_node(dn) assert (md == edn) node_metadata.append(dn) pyslim.annotate_nodes(tables, node_metadata) # individuals individual_metadata = [] for md in msprime.unpack_bytes(tables.individuals.metadata, tables.individuals.metadata_offset): di = pyslim.decode_individual(md) edi = pyslim.encode_individual(di) assert (md == edi) individual_metadata.append(di)
def test_decode_already_node(self): m = pyslim.NodeMetadata(slim_id=123, is_null=True, genome_type=0) dm = pyslim.decode_node(m) self.assertEqual(m, dm)