예제 #1
0
def test_chain_sorted__mixed_contents():
    sequence_a = (3, 4, 8)
    sequence_c = (0, 1, 6)
    sequence_b = (2, 5, 7)
    expected = (0, 1, 2, 3, 4, 5, 6, 7, 8)
    result = tuple(utils.chain_sorted(sequence_a, sequence_b, sequence_c))
    assert_equal(expected, result)
예제 #2
0
def test_chain_sorted__mixed_length_contents():
    sequence_a = (1, )
    sequence_c = (0, 2)
    sequence_b = ()
    expected = (0, 1, 2)
    result = tuple(utils.chain_sorted(sequence_a, sequence_b, sequence_c))
    assert_equal(expected, result)
예제 #3
0
def test_chain_sorted__mixed_length_contents():
    sequence_a = (1,)
    sequence_c = (0, 2)
    sequence_b = ()
    expected = (0, 1, 2)
    result = tuple(utils.chain_sorted(sequence_a, sequence_b, sequence_c))
    assert_equal(expected, result)
예제 #4
0
def test_chain_sorted__mixed_contents():
    sequence_a = (3, 4, 8)
    sequence_c = (0, 1, 6)
    sequence_b = (2, 5, 7)
    expected = (0, 1, 2, 3, 4, 5, 6, 7, 8)
    result = tuple(utils.chain_sorted(sequence_a, sequence_b, sequence_c))
    assert_equal(expected, result)
예제 #5
0
def test_chain_sorted__identical_objects_are_preserved():
    object_a = [1]
    object_b = [1]
    assert object_a is not object_b
    expected = (object_a, object_b)
    result = tuple(utils.chain_sorted([object_a], [object_b]))
    assert_equal(expected, result)
    assert(object_a is result[0] or object_a is result[1])
    assert(object_b is result[0] or object_b is result[1])
예제 #6
0
def test_chain_sorted__identical_objects_are_preserved():
    object_a = [1]
    object_b = [1]
    assert object_a is not object_b
    expected = (object_a, object_b)
    result = tuple(utils.chain_sorted([object_a], [object_b]))
    assert_equal(expected, result)
    assert (object_a is result[0] or object_a is result[1])
    assert (object_b is result[0] or object_b is result[1])
예제 #7
0
    def run(self, _):
        handles = []
        try:
            sequences = []
            for fpath in self.input_files:
                handle = pysam.Samfile(fpath)
                handles.append(handle)

                sequence = izip_longest(handle, (), fillvalue=fpath)
                sequences.append(sequence)

            position = 0
            records = chain_sorted(*sequences, key=self._key_by_tid_pos)
            observed_reads = collections.defaultdict(list)
            for (record, fpath) in records:
                if record.pos != position:
                    self._process_reads(observed_reads, self.output_files)
                    observed_reads.clear()
                    position = record.pos
                elif record.is_unmapped:
                    break

                # Ignore supplementary / secondary alignments
                if not record.flag & 0x900:
                    key = (record.is_reverse, record.qname, record.seq,
                           record.qual)
                    observed_reads[key].append(fpath)
            self._process_reads(observed_reads, self.output_files)

            # Everything is ok, touch the output files
            for fpath in self.output_files:
                make_dirs(os.path.dirname(fpath))
                with open(fpath, "w"):
                    pass
        finally:
            for handle in handles:
                handle.close()
예제 #8
0
    def run(self, _):
        handles = []
        try:
            sequences = []
            for fpath in self.input_files:
                handle = pysam.Samfile(fpath)
                handles.append(handle)

                sequence = izip_longest(handle, (), fillvalue=fpath)
                sequences.append(sequence)

            position = 0
            records = chain_sorted(*sequences, key=self._key_by_tid_pos)
            observed_reads = collections.defaultdict(list)
            for (record, fpath) in records:
                if record.pos != position:
                    self._process_reads(observed_reads, self.output_files)
                    observed_reads.clear()
                    position = record.pos
                elif record.is_unmapped:
                    break

                # Ignore supplementary / secondary alignments
                if not record.flag & 0x900:
                    key = (record.is_reverse, record.qname,
                           record.seq, record.qual)
                    observed_reads[key].append(fpath)
            self._process_reads(observed_reads, self.output_files)

            # Everything is ok, touch the output files
            for fpath in self.output_files:
                make_dirs(os.path.dirname(fpath))
                with open(fpath, "w"):
                    pass
        finally:
            for handle in handles:
                handle.close()
예제 #9
0
def test_chain_sorted__mixed_contents__reverse():
    sequence_a = (-2, -3, -5)
    sequence_b = (0, -1, -4)
    expected = (0, -1, -2, -3, -4, -5)
    result = tuple(utils.chain_sorted(sequence_a, sequence_b, reverse=True))
    assert_equal(expected, result)
예제 #10
0
 def _sequential_contents(seq_a, seq_b):
     expected = (1, 2, 3, 4, 5, 6)
     result = tuple(utils.chain_sorted(seq_a, seq_b))
     assert_equal(expected, result)
예제 #11
0
def test_chain_sorted__single_sequence():
    sequence = (1, 2, 3)
    result = tuple(utils.chain_sorted(sequence))
    assert_equal(sequence, result)
예제 #12
0
def test_chain_sorted__no_sequences():
    expected = ()
    result = tuple(utils.chain_sorted())
    assert_equal(expected, result)
예제 #13
0
def test_chain_sorted__single_sequence():
    sequence = (1, 2, 3)
    result = tuple(utils.chain_sorted(sequence))
    assert_equal(sequence, result)
예제 #14
0
def test_chain_sorted__invalid_keywords():
    assert_raises(TypeError, tuple, utils.chain_sorted((1, 2, 3), foobar=None))
예제 #15
0
def test_chain_sorted__mixed_contents__reverse():
    sequence_a = (-2, -3, -5)
    sequence_b = (0, -1, -4)
    expected = (0, -1, -2, -3, -4, -5)
    result = tuple(utils.chain_sorted(sequence_a, sequence_b, reverse=True))
    assert_equal(expected, result)
예제 #16
0
 def _sequential_contents(seq_a, seq_b):
     expected = (1, 2, 3, 4, 5, 6)
     result = tuple(utils.chain_sorted(seq_a, seq_b))
     assert_equal(expected, result)
예제 #17
0
def test_chain_sorted__invalid_keywords():
    assert_raises(TypeError, tuple, utils.chain_sorted((1, 2, 3), foobar=None))
예제 #18
0
def test_chain_sorted__no_sequences():
    expected = ()
    result = tuple(utils.chain_sorted())
    assert_equal(expected, result)