def test_single_slice(self): dm = fwdpy11.DataMatrixIterator(self.pop.tables, self.all_samples, [(0.1, 0.2)], True, True) dm = next(dm) rows = np.where((self.spos >= 0.1) & (self.spos < 0.2))[0] pos_slice = self.spos[rows] selected_slice = self.selected[rows, ] self.assertTrue(np.array_equal(dm.selected_positions, pos_slice)) self.assertTrue(np.array_equal(dm.selected, selected_slice))
def test_nested_slices(self): slices = [(0.1, 0.2), (0.15, 0.19), (0.21, 0.37), (0.38, 0.5337), (0.39, 0.432), (0.5, 0.55)] dmi = fwdpy11.DataMatrixIterator(self.pop.tables, self.all_samples, slices, True, True) for r, dm in zip(slices, dmi): rows = np.where((self.spos >= r[0]) & (self.spos < r[1]))[0] pos_slice = self.spos[rows] selected_slice = self.selected[rows, ] self.assertTrue(np.array_equal(dm.selected_positions, pos_slice)) self.assertTrue(np.array_equal(dm.selected, selected_slice))
def test_nonoverlapping_slices(self): slices = [(0.1, 0.2), (0.21, 0.37), (0.5, 0.55)] dmi = fwdpy11.DataMatrixIterator(self.pop.tables, self.all_samples, slices, True, True) niterations = 0 for r, dm in zip(slices, dmi): niterations += 1 rows = np.where((self.spos >= r[0]) & (self.spos < r[1]))[0] pos_slice = self.spos[rows] selected_slice = self.selected[rows, ] self.assertTrue(np.array_equal(dm.selected_positions, pos_slice)) self.assertTrue(np.array_equal(dm.selected, selected_slice)) self.assertEqual(niterations, len(slices))
def test_entire_matrix(self): dmi = fwdpy11.DataMatrixIterator(self.pop.tables, self.all_samples, [(0, 1)], True, True) niterations = 0 for dm in dmi: niterations += 1 for i in dm.selected_keys: self.assertFalse(self.pop.mutations[i].neutral) self.assertTrue( np.array_equal(np.array(self.dm.selected_keys), dm.selected_keys)) self.assertTrue(np.array_equal(dm.neutral, self.neutral)) self.assertTrue(np.array_equal(dm.selected, self.selected)) self.assertEqual(niterations, 1)
def get_stats(tables, samples): tables_for_sample, idmap = fwdpy11.simplify_tables(tables, samples) stats = [] for k, l in zip(enumerate(fwdpy11.DataMatrixIterator(tables_for_sample, idmap[samples], WINDOWS, True, True)), WINDOW_LEFTS): i, dm = k locus = int(i*STEPSIZE / LOCUS_LENGTH) window = i % (LOCUS_LENGTH/STEPSIZE) window_in_paper = int(window*STEPSIZE) pos, data = merge_matrix(dm) vm = libsequence.VariantMatrix(data, pos) ac = vm.count_alleles() pi = libsequence.thetapi(ac) D = libsequence.tajd(ac) Hp = libsequence.hprime(ac, 0) nhaps = libsequence.number_of_haplotypes(vm) hdiv = libsequence.haplotype_diversity(vm) stats.append(Datum(l, locus, window, window_in_paper, pi, D, Hp, nhaps, hdiv)) return stats