Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
 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])
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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'))
Exemplo n.º 7
0
    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)
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
 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])
Exemplo n.º 10
0
 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)
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
 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)