def test_reload_annotate(self): """ Test the ability of SLiM to load our files after annotation. """ for ts, basename in self.get_slim_restarts(): tables = ts.tables metadata = list(pyslim.extract_mutation_metadata(tables)) has_nucleotides = (metadata[0][0].nucleotide >= 0) if has_nucleotides: nucs = [random.choice([0, 1, 2, 3]) for _ in metadata] refseq = "".join( random.choices(pyslim.NUCLEOTIDES, k=int(ts.sequence_length))) for n, md in zip(nucs, metadata): for j in range(len(md)): md[j].nucleotide = n else: refseq = None for md in metadata: for j in range(len(md)): md[j].selection_coeff = random.random() pyslim.annotate_mutation_metadata(tables, metadata) in_ts = pyslim.load_tables(tables, reference_sequence=refseq) # put it through SLiM (which just reads in and writes out) out_ts = self.run_slim_restart(in_ts, basename) # check for equality, in everything but the last provenance self.verify_slim_restart_equality(in_ts, out_ts)
def test_annotate_mutations(self): for ts in self.get_slim_examples(): tables = ts.tables new_tables = ts.tables metadata = [] for md in tskit.unpack_bytes(tables.mutations.metadata, tables.mutations.metadata_offset): dm = pyslim.decode_mutation(md) edm = pyslim.encode_mutation(dm) self.assertEqual(md, edm) metadata.append(dm) pyslim.annotate_mutation_metadata(new_tables, metadata) self.assertEqual(tables, new_tables)
def test_annotate_mutations(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_mutation_metadata(tables)) self.assertEqual(len(metadata), slim_ts.num_mutations) selcoefs = [random.uniform(0, 1) for _ in metadata] for j in range(len(metadata)): metadata[j].selection_coeff = selcoefs[j] pyslim.annotate_mutation_metadata(tables, metadata) new_ts = pyslim.load_tables(tables) for j, x in enumerate(new_ts.mutations()): md = pyslim.decode_mutation(x.metadata) self.assertEqual(md.selection_coeff, selcoefs[j])