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])
Beispiel #2
0
 def test_population_derived_info(self):
     for ts in self.get_slim_examples():
         for j, pop in enumerate(ts.populations()):
             a = ts.tables.populations.metadata_offset[j]
             b = ts.tables.populations.metadata_offset[j+1]
             raw_md = ts.tables.populations.metadata[a:b]
             md = pyslim.decode_population(raw_md)
             self.assertEqual(pop.metadata, md)
             self.assertEqual(ts.population(j).metadata, md)
Beispiel #3
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'))
Beispiel #4
0
 def test_decode_already_population(self):
     m = pyslim.PopulationMetadata(slim_id=1, selfing_fraction=0.2,
                                   female_cloning_fraction=0.3,
                                   male_cloning_fraction=0.4,
                                   sex_ratio=0.5, bounds_x0=0, bounds_x1=10,
                                   bounds_y0=2, bounds_y1=20, bounds_z0=3,
                                   bounds_z1=30, migration_records=[])
     dm = pyslim.decode_population(m)
     self.assertEqual(m, dm)
Beispiel #5
0
 def test_population_metadata(self):
     mrs = [pyslim.PopulationMigrationMetadata(source_subpop=j, migration_rate=0.2)
            for j in range(3)]
     for mr_list in [[], mrs]:
         md = pyslim.PopulationMetadata(
                 slim_id=1, selfing_fraction=0.75, female_cloning_fraction=0.2,
                 male_cloning_fraction=0.8, sex_ratio=0.6, bounds_x0=-1.0,
                 bounds_x1=2.0, bounds_y0=0.0, bounds_y1=0.0, bounds_z0=0.0,
                 bounds_z1=1.0, migration_records=mr_list)
         md_bytes = pyslim.encode_population(md)
         new_md = pyslim.decode_population(md_bytes)
         self.assertEqual(md, new_md)
Beispiel #6
0
    def test_annotate_populations(self):
        for ts in self.get_slim_examples():
            tables = ts.tables
            new_tables = ts.tables
            metadata = []
            for md in tskit.unpack_bytes(tables.populations.metadata,
                                         tables.populations.metadata_offset):
                dm = pyslim.decode_population(md)
                edm = pyslim.encode_population(dm)
                self.assertEqual(md, edm)
                metadata.append(dm)

            pyslim.annotate_population_metadata(new_tables, metadata)
            self.assertEqual(tables, new_tables)
Beispiel #7
0
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)
    else:
        dp = None
    population_metadata.append(dp)

pyslim.annotate_populations(tables, population_metadata)

print(tables)