Exemplo n.º 1
0
    def test_from_intervals2(self):
        graph = obg.GraphWithReversals(
            {
                1: obg.Block(10),
                2: obg.Block(10),
                3: obg.Block(10)
            }, {
                1: [2],
                2: [3]
            })
        intervals = [
            obg.Interval(1, 5, [1]),
            obg.Interval(3, 7, [1]),
            obg.Interval(5, 3, [1, 2]),
            obg.Interval(5, 6, [2]),
            obg.Interval(8, 8, [1, 2, 3])
        ]

        pileup = SparsePileup.from_intervals(graph, intervals)
        data = pileup.data
        self.assertEqual(data[1].start_value, False)
        self.assertEqual(data[2].start_value, 2)
        self.assertEqual(data[3].start_value, 1)

        self.assertTrue(np.all([1, 3, 5, 7, 8] == data[1].indexes))
        #print("data 1 values")
        #print(data[2].values)
        self.assertTrue(np.all([1, 2, 2, 1, 2] == data[1].values))

        self.assertTrue(np.all([3, 5, 6] == data[2].indexes))
        self.assertTrue(np.all([1, 2, 1] == data[2].values))

        self.assertTrue(np.all([8] == data[3].indexes))
        self.assertTrue(np.all([0] == data[3].values))
Exemplo n.º 2
0
def graph():
    return obg.Graph({i + 1: obg.Block(10)
                      for i in range(4)}, {
                          1: [2, 3],
                          2: [4],
                          3: [4]
                      })
Exemplo n.º 3
0
    def setUp(self):
        from collections import defaultdict

        self.n_blocks = 100
        self.n_edges = self.n_blocks + 50
        blocks = {}
        blocks_list = []
        for i in range(1, self.n_blocks + 1):
            blocks[i] = obg.Block(3)
            blocks_list.append(i)

        # Random edges
        edge_dict = defaultdict(list)
        for i in range(0, self.n_edges):
            start = blocks_list[randrange(0, len(blocks_list))]
            end = blocks_list[randrange(0, len(blocks_list))]

            if randrange(0, 2) == 1:
                start = -start

            if randrange(0, 2) == 1:
                end = -end

            if end == start or end == -start:
                continue

            if end not in edge_dict[start]:
                edge_dict[start].append(end)

        self.graph = obg.GraphWithReversals(blocks, edge_dict)
Exemplo n.º 4
0
 def setUp(self):
     super().setUp()
     nodes = {i: obg.Block(100) for i in range(1, 11)}
     edges = {i: [i+1] for i in range(1, 10)}
     self.lin_graph = obg.GraphWithReversals(nodes, edges)
     edges = {i: [i+1, (i+5) % 5 + 1] for i in range(1, 5)}
     self.double_graph = obg.GraphWithReversals(nodes, edges)
Exemplo n.º 5
0
    def test_add_pos_and_negbinary_areas(self):
        touched_nodes = set()
        graph = obg.Graph({1: obg.Block(100)}, {})
        pos_starts = np.array([0] + [i * 10 for i in range(9)])
        pos_ends = np.array([100] + [(i + 2) * 10 for i in range(9)])
        neg_starts = np.array([0] + [i * 10 + 5 for i in range(9)])
        neg_ends = np.array([100] + [(i + 1) * 10 + 5 for i in range(9)])
        bin_areas = []
        for start, end in zip(pos_starts, pos_ends):
            binary_connected_areas = BinaryContinousAreas(graph)
            binary_connected_areas.add(1, start, end)
            binary_connected_areas.sanitize()
            bin_areas.append(binary_connected_areas)
        for start, end in zip(neg_starts, neg_ends):
            binary_connected_areas = BinaryContinousAreas(graph)
            binary_connected_areas.add(-1, start, end)
            binary_connected_areas.sanitize()
            bin_areas.append(binary_connected_areas)
        valued_areas = ValuedAreas(graph)
        for bin_area in bin_areas:
            valued_areas.add_binary_areas(bin_area,
                                          touched_nodes=touched_nodes)

        true_starts = np.sort(np.concatenate([pos_starts, 100 - neg_ends]))
        true_ends = np.sort(np.concatenate([pos_ends, 100 - neg_starts]))
        self.assertTrue(
            np.all(np.sort(valued_areas.get_starts_array(1)) == true_starts))
        self.assertTrue(
            np.all(np.sort(valued_areas.get_ends_array(1)) == true_ends))
Exemplo n.º 6
0
def test_long_hole():
    pileup = SparseValues([0, 5, 95], [True, False, True])
    graph = obg.GraphWithReversals({i: obg.Block(1)
                                    for i in range(1, 101)},
                                   {i: [i + 1]
                                    for i in range(1, 100)})
    holes = HolesCleaner(graph, pileup, 56).run()
    assert holes == pileup
Exemplo n.º 7
0
def test_internals():
    graph = obg.GraphWithReversals({101: obg.Block(100)}, {101: []})

    pileup = SparseValues([0, 10, 19, 30, 41, 50], [1, 0, 1, 0, 1, 0])
    cleaned = HolesCleaner(graph, pileup, 10).run()
    true = SparseValues([0, 30, 41, 50], [1, 0, 1, 0])

    assert cleaned == true
Exemplo n.º 8
0
 def setUp(self):
     self.graph = obg.GraphWithReversals(
         {i: obg.Block(10)
          for i in range(1, 5)}, {
              1: [2],
              2: [3],
              3: [4]
          })
     self.pileup = SparsePileup(self.graph)
Exemplo n.º 9
0
def hierarchical_graph():
    nodes = {i: obg.Block(i - 90) for i in range(100, 106)}
    edges = {
        100: [101, 102],
        101: [105],
        102: [103, 104],
        103: [105],
        104: [105]
    }
    return obg.Graph(nodes, edges)
Exemplo n.º 10
0
def snp_graph():
    nodes = {i: obg.Block((i % 2) + 1) for i in range(100, 106)}
    edges = {
        100: [101, 102],
        101: [105],
        102: [103, 104],
        103: [105],
        104: [105]
    }
    return obg.Graph(nodes, edges)
Exemplo n.º 11
0
def graph():
    nodes = {i: obg.Block(10) for i in range(10, 18)}
    edges = {
        10: [11],
        11: [12, 13],
        12: [14],
        13: [14],
        14: [15, 16, 17],
        15: [16],
        16: [17]
    }
    return obg.Graph(nodes, edges)
Exemplo n.º 12
0
def test_holes_cleaner():
    indices = np.array(
        [80, 100, 180, 220, 240, 250, 300, 400, 500, 520, 610, 810])
    values = np.array([(i % 2) for i, _ in enumerate(indices)])
    pileup = SparseValues(indices, values)
    graph = obg.GraphWithReversals({i + 1: obg.Block(100)
                                    for i in range(10)},
                                   {i: [i + 1]
                                    for i in range(1, 10)})
    # graph.node_indexes = np.arange(0, 1001, 100)
    holes = HolesCleaner(graph, pileup, 10).run()
    print(holes)
Exemplo n.º 13
0
 def setUp(self):
     self.graph = obg.GraphWithReversals({i: obg.Block(3) for i in range(1, 12)},
                            {
                                -1: [-11],
                                1: [2, 3, 7],
                                2: [4, 5],
                                3: [4, 5],
                                4: [-5, 6, 8],
                                5: [7],
                                6: [-7, 9],
                                7: [9],
                                9: [10]
                            })
Exemplo n.º 14
0
def complicated_offset():
    nodes = {i: obg.Block(2) for i in range(101, 111)}
    edges = {
        101: [102, 103],
        102: [104],
        103: [104],
        104: [105, 106],
        105: [107],
        106: [107],
        107: [108, 109],
        109: [110]
    }
    return obg.GraphWithReversals(nodes, edges)
Exemplo n.º 15
0
def complicated_graph():
    nodes = {i: obg.Block(2) for i in range(1, 11)}
    edges = {
        1: [2, 3],
        2: [4],
        3: [4],
        4: [5, 6],
        5: [7],
        6: [7],
        7: [8, 9],
        9: [10]
    }
    return obg.GraphWithReversals(nodes, edges)
Exemplo n.º 16
0
    def test_intervals_to_start_and_ends(self):
        graph = obg.GraphWithReversals({
            1: obg.Block(10),
            2: obg.Block(10)
        }, {1: [2]})
        intervals = [
            obg.Interval(1, 5, [1]),
            obg.Interval(3, 7, [1]),
            obg.Interval(5, 3, [1, 2]),
            obg.Interval(5, 6, [2])
        ]

        correct_starts = {1: [1, 3, 5], 2: [0, 5]}
        correct_ends = {1: [5, 7, 10], 2: [3, 6]}

        starts, ends = intervals_to_start_and_ends(graph, intervals)
        #print("Starts")
        #print(starts)
        #print("Ends")
        #print(ends)

        for rp in graph.blocks:
            self.assertTrue(np.all(correct_starts[rp] == starts[rp]))
            self.assertTrue(np.all(correct_ends[rp] == ends[rp]))
Exemplo n.º 17
0
    def test_add_binary_areas(self):
        touched_nodes = set()
        graph = obg.Graph({1: obg.Block(100)}, {})
        starts = np.array([0] + [i * 10 for i in range(9)])
        ends = np.array([100] + [(i + 2) * 10 for i in range(9)])
        bin_areas = []
        for start, end in zip(starts, ends):
            binary_connected_areas = BinaryContinousAreas(graph)
            binary_connected_areas.add(1, start, end)
            binary_connected_areas.sanitize()
            bin_areas.append(binary_connected_areas)
        valued_areas = ValuedAreas(graph)
        for bin_area in bin_areas:
            valued_areas.add_binary_areas(bin_area,
                                          touched_nodes=touched_nodes)

        self.assertTrue(
            np.all(valued_areas.get_starts_array(1) == np.sort(starts)))

        self.assertTrue(
            np.all(valued_areas.get_ends_array(1) == np.sort(ends)))
Exemplo n.º 18
0
def test_end_hole():
    pileup = SparseValues([0, 5, 10], [False, True, False])
    graph = obg.GraphWithReversals({1: obg.Block(12)}, {1: []})
    holes = HolesCleaner(graph, pileup, 4).run()
    assert holes == pileup
Exemplo n.º 19
0
import offsetbasedgraph as obg
from graph_peak_caller.postprocess.maxpaths import SparseMaxPaths
from graph_peak_caller.sparsediffs import SparseValues
from graph_peak_caller.peakcollection import Peak
import numpy as np

nodes = {i + 1: obg.Block(10) for i in range(10)}
edges = {i: [i + 1] for i in range(1, 10)}
edges[1] = [2, 3]
edges[2] = [4]
edges[3] = [4]

graph = obg.GraphWithReversals(nodes, edges)


def complicated_offset():
    nodes = {i: obg.Block(2) for i in range(101, 111)}
    edges = {
        101: [102, 103],
        102: [104],
        103: [104],
        104: [105, 106],
        105: [107],
        106: [107],
        107: [108, 109],
        109: [110]
    }
    return obg.GraphWithReversals(nodes, edges)


def offsetgraph():
Exemplo n.º 20
0
 def to_obg(self):
     return offsetbasedgraph.Block(self.n_basepairs)
Exemplo n.º 21
0
import unittest

from graph_peak_caller.areas import BinaryContinousAreas, BCACollection
import offsetbasedgraph as obg

nodes = {i: obg.Block(10) for i in range(1, 10)}
graph = obg.GraphWithReversals(nodes, {i: [i+1] for i in range(1, 9)})


class TestBinaryContinousAreas(unittest.TestCase):

    def setUp(self):
        self.areas = BinaryContinousAreas(graph)
        self.areas.full_areas = {1: 1, 2: 1}
        self.areas.starts = {3: 2, 4: 5}
        self.areas.internal_intervals = {5: [2, 7]}

    def test_file_in_out(self):
        line = self.areas.to_file_line()
        print(line)
        new_areas = BinaryContinousAreas.from_file_line(line, graph)
        self.assertEqual(new_areas, self.areas)
        c = BCACollection([self.areas, self.areas])
        c.to_file("tmp.subgraphs")
        BCACollection.from_file("tmp.subgraphs", graph)

    def test_filled_interval(self):
        interval = obg.DirectedInterval(4, 4, [2, 3, 4])
        areas = BinaryContinousAreas(graph)
        areas.filled_interval(interval)
        areas.sanitize()
Exemplo n.º 22
0
def graph():
    nodes = [9, 10, 11, 12, 13, 14]
    nodes = {i: obg.Block(10) for i in nodes}
    edges = {9: [10], 10: [11, 12], 11: [13], 12: [13], 13: [14]}
    return obg.Graph(nodes, edges)
Exemplo n.º 23
0
 def setUp(self):
     nodes = {i: obg.Block(10) for i in range(1, 11)}
     edges = {i: [i+1, i+6] for i in range(1, 6)}
     self.graph = obg.GraphWithReversals(nodes, edges)
Exemplo n.º 24
0
    def setUp(self):
        nodes = {i + 1: obg.Block(10) for i in range(5)}
        edges = {1: [2, 3], 2: [4], 3: [-4], 4: [5], -4: [5]}
        self.graph = obg.GraphWithReversals(nodes, edges)

        data = {
            node_id: ValuedIndexes(
                np.array([2 * i for i in range(1, 5)]),
                np.array([2 * i + 10 * node_id for i in range(1, 5)]),
                node_id * 10, 10)
            for node_id in nodes
        }

        self.pileup = SparsePileup(self.graph)
        self.pileup.data = data

        self.pileup = DensePileup.create_from_old_sparsepileup(self.pileup)

        flat_data = {
            node_id: ValuedIndexes(np.array([], dtype="int"), np.array([]),
                                   node_id * 10, 10)
            for node_id in nodes
        }

        self.flat_pileup = SparsePileup(self.graph)
        self.flat_pileup.data = flat_data
        self.flat_pileup = DensePileup.create_from_old_sparsepileup(
            self.flat_pileup)

        self.peak = BinaryContinousAreas(self.graph)
        self.peak.add_full(2)
        self.peak.add_full(4)
        self.peak.add_full(3)
        self.peak.add_start(5, 5)
        self.peak.add_start(-1, 5)

        indexes = np.array([2, 4, 6, 8])
        values = np.array([2, 4, 6, 8])
        self.scores = {
            2: ValuedIndexes(indexes, values + 20, 20, 10),
            -2: ValuedIndexes(indexes, values + 20, 20, 10),
            3: ValuedIndexes(indexes, values + 30, 30, 10),
            -3: ValuedIndexes(indexes, values + 30, 30, 10),
            4: ValuedIndexes(indexes, values + 40, 40, 10),
            -4: ValuedIndexes(indexes, values + 40, 40, 10),
            5: ValuedIndexes(np.array([2, 4]), np.array([52, 54]), 50, 5),
            -1: ValuedIndexes(np.array([1, 3]), np.array([16, 18]), 14, 5)
        }

        self.flat_scores = {
            2: ValuedIndexes(np.array([], dtype="int"), np.array([]), 20, 10),
            3: ValuedIndexes(np.array([], dtype="int"), np.array([]), 30, 10),
            4: ValuedIndexes(np.array([], dtype="int"), np.array([]), 40, 10),
            -2: ValuedIndexes(np.array([], dtype="int"), np.array([]), 20, 10),
            -3: ValuedIndexes(np.array([], dtype="int"), np.array([]), 30, 10),
            -4: ValuedIndexes(np.array([], dtype="int"), np.array([]), 40, 10),
            5: ValuedIndexes(np.array([], dtype="int"), np.array([]), 50, 5),
            -1: ValuedIndexes(np.array([], dtype="int"), np.array([]), 10, 5)
        }

        self.peak2 = BinaryContinousAreas(self.graph)
        self.peak2.add_full(2)
        self.peak2.add_start(-3, 7)
        self.peak2.add_full(4)
        self.peak2.add_start(5, 5)

        self.scores2 = {
            2: ValuedIndexes(indexes, values + 20, 20, 10),
            -3: ValuedIndexes(np.array([1, 3, 5]), np.array([34, 36, 38]), 32,
                              7),
            4: ValuedIndexes(indexes, values + 40, 40, 10),
            5: ValuedIndexes(np.array([2, 4]), np.array([52, 54]), 50, 5),
        }

        self.scored_peak = ScoredPeak(self.peak, self.scores)
        self.flat_scored_peak = ScoredPeak(self.peak, self.flat_scores)
        self.scored_peak2 = ScoredPeak(self.peak2, self.scores2)
        self.max_path = obg.DirectedInterval(5,
                                             5, [1, 3, -4, 5],
                                             graph=self.graph)
        self.max_path2 = obg.DirectedInterval(3,
                                              5, [3, -4, 5],
                                              graph=self.graph)
Exemplo n.º 25
0
def get_padded_cyclic_graph():
    nodes = {1: obg.Block(100), 2: obg.Block(100),
             3: obg.Block(100), 4: obg.Block(100)}
    adj_list = {1: [2], 2: [3, 4, 2]}
    return Graph(nodes, adj_list)
Exemplo n.º 26
0
def sorted_wierd_graph(a, b):
    nodes = {i + 1: obg.Block(100) for i in range(4)}
    edges = {1: [2, 3], 2: [4], 3: [4]}
    return obg.GraphWithReversals(nodes, edges)
Exemplo n.º 27
0
import pytest
if pytest.__version__ < "3.0.0":
    pytest.skip()

import numpy as np
import unittest
import offsetbasedgraph as obg
# from test_snarls import snarl_graph2
# from graph_peak_caller.control.linearsnarls import \
#     UnmappedIndices, LinearPileup
# from graph_peak_caller.control.snarlmaps import LinearSnarlMap

graph = obg.GraphWithReversals(
    {3: obg.Block(20), 5: obg.Block(10),
     12: obg.Block(20), 13: obg.Block(21),
     }, {})


@pytest.mark.skip()
class TestSnarlMap(unittest.TestCase):
    def setUp(self):
        self.snarl_map = LinearSnarlMap.from_snarl_graph(snarl_graph2, graph)
        self.graph_positions = [obg.Position(5, 4),
                                obg.Position(3, 4),
                                obg.Position(12, 4),
                                obg.Position(13, 4)]

        self.linear_positions = [4, 31/20*4, 10+21/20*4, 14]
        self.linear_positions = [p for p in self.linear_positions]
        self.graph_interval = obg.DirectedInterval(self.graph_positions[0],
                                                   self.graph_positions[2])
Exemplo n.º 28
0
def get_large_cyclic_graph():
    nodes = {1: obg.Block(100), 2: obg.Block(20)}
    adj_list = {1: [2], 2: [1]}
    return Graph(nodes, adj_list)
Exemplo n.º 29
0
def small_graph():
    nodes = {i: obg.Block(10) for i in range(101, 107)}
    edges = {101: [102], 102: [103, 104], 103: [105], 104: [105], 105: [106]}
    return obg.GraphWithReversals(nodes, edges)
Exemplo n.º 30
0
def get_small_cyclic_graph():
    nodes = {1: obg.Block(100)}
    adj_list = {1: [1]}
    return Graph(nodes, adj_list)