def test_runs(): dregion = (10,20) i = [1 if dregion[0] <= x <= dregion[1] else 0 for x in range(100)] assert runs(i, lambda x: x>0) == [dregion] assert runs_gte(i, 1) == [dregion] assert runs_gte(i, 1, 20) == [] assert runs_gte([], 1) == [] assert runs([], lambda x: True) == [] i = [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1] ir = [(4,8), (14, 16)] assert runs(i, lambda x: x > 0) == ir assert runs_gte(i, 1) == ir assert runs_gte_uint8(np.array(i, dtype=np.uint8), 1) == ir i = [0] * 100 assert runs(i, lambda x: x > 0) == [] assert runs_gte(i, 1) == [] assert runs_gte_uint8(np.uint8(i),1) == [] i = [1] * 100 ir = [(0,99)] assert runs(i, lambda x: x>0) == ir assert runs_gte(i, 1) == ir assert runs_gte_uint8(np.array(i, dtype=np.uint8), 1) == ir
def test_runs(): dregion = (10, 20) i = [1 if dregion[0] <= x <= dregion[1] else 0 for x in range(100)] assert runs(i, lambda x: x > 0) == [dregion] assert runs_gte(i, 1) == [dregion] assert runs_gte(i, 1, 20) == [] assert runs_gte([], 1) == [] assert runs([], lambda x: True) == [] i = [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1] ir = [(4, 8), (14, 16)] assert runs(i, lambda x: x > 0) == ir assert runs_gte(i, 1) == ir assert runs_gte_uint8(np.array(i, dtype=np.uint8), 1) == ir i = [0] * 100 assert runs(i, lambda x: x > 0) == [] assert runs_gte(i, 1) == [] assert runs_gte_uint8(np.uint8(i), 1) == [] i = [1] * 100 ir = [(0, 99)] assert runs(i, lambda x: x > 0) == ir assert runs_gte(i, 1) == ir assert runs_gte_uint8(np.array(i, dtype=np.uint8), 1) == ir
s = pyd.sgs.sgs_population(ped, seed_size=ms) with smartopen('{}-{}.ibd.gz'.format(prefix, replicate)) as f: trueibd = {} for line in f: fam, id1, id2, ibd_states = line.strip().split(None, 3) trueibd[frozenset({id1,id2})] = np.array([int(x) for x in ibd_states.split()]) a = intervals_to_array(s[frozenset({ped['7'],ped['8']})][0], ped.chromosomes[0].nmark()) b = trueibd[frozenset({'7','8'})] genos1 = zip(*ped['7'].genotypes[0]) genos2 = zip(*ped['8'].genotypes[0]) identical = [ibs(x,y) for x,y in zip(genos1, genos2)] from pydigree.common import table, runs for start, stop in runs(list(a), lambda x: x>0, ms): print('Predicted segment: {}-{}'.format(start, stop)) print() for start, stop in runs(list(b), lambda x: x>0, 2): print('True IBD Segment: {}-{}'.format(start, stop)) correct_calls = a == b print('Accuracy: {}'.format(correct_calls.sum() / float(correct_calls.shape[0])))