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])
Exemple #2
0
 def test_individual_metadata(self):
     md = pyslim.IndividualMetadata(
             age=2, pedigree_id=23, population=0,
             sex=pyslim.INDIVIDUAL_TYPE_MALE,
             flags=pyslim.INDIVIDUAL_FLAG_MIGRATED)
     md_bytes = pyslim.encode_individual(md)
     new_md = pyslim.decode_individual(md_bytes)
     self.assertEqual(md, new_md)
Exemple #3
0
 def test_decode_already_individual(self):
     m = pyslim.IndividualMetadata(pedigree_id=24,
                                   age=8,
                                   population=1,
                                   sex=1,
                                   flags=0)
     dm = pyslim.decode_individual(m)
     self.assertEqual(m, dm)
 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'))
Exemple #5
0
 def test_individual_derived_info(self):
     for ts in self.get_slim_examples():
         for j, ind in enumerate(ts.individuals()):
             a = ts.tables.individuals.metadata_offset[j]
             b = ts.tables.individuals.metadata_offset[j+1]
             raw_md = ts.tables.individuals.metadata[a:b]
             md = pyslim.decode_individual(raw_md)
             self.assertEqual(ind.metadata, md)
             self.assertEqual(ts.individual(j).metadata, md)
             for n in ind.nodes:
                 self.assertEqual(ts.node(n).population, ind.population)
                 self.assertEqual(ts.node(n).time, ind.time)
Exemple #6
0
    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)
Exemple #7
0
 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)
Exemple #9
0
 def individual_populations(self, inds=None):
     if inds is None:
         inds = self.individuals()
     return np.fromiter(map(lambda x: pyslim.decode_individual(x.metadata).population, inds), 'int')
Exemple #10
0
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)

pyslim.annotate_individuals(tables, individual_metadata)

# populations

population_metadata = []
for md in msprime.unpack_bytes(tables.populations.metadata,
                               tables.populations.metadata_offset):
    if len(md) > 0:
        dp = pyslim.decode_population(md)
        edp = pyslim.encode_population(dp)
        assert (md == edp)